CORS
ОБЛАСТЬ ПРИМЕНЕНИЯ: все уровни Управление API
Политика cors
добавляет поддержку общего доступа к ресурсам независимо от источника (CORS) для операции или API, чтобы разрешить междоменные вызовы из браузерных клиентов.
Примечание.
Задайте элементы политики и дочерние элементы в порядке, указанном в правиле политики. Чтобы помочь вам настроить эту политику, портал предоставляет интерактивный редактор на основе форм. Узнайте, как устанавливать или изменять политики службы управления API.
Правило политики
<cors allow-credentials="false | true" terminate-unmatched-request="true | false">
<allowed-origins>
<origin>origin uri</origin>
</allowed-origins>
<allowed-methods preflight-result-max-age="number of seconds">
<method>HTTP verb</method>
</allowed-methods>
<allowed-headers>
<header>header name</header>
</allowed-headers>
<expose-headers>
<header>header name</header>
</expose-headers>
</cors>
Атрибуты
Имя. | Описание | Обязательное поле | По умолчанию. |
---|---|---|---|
allow-credentials | Заголовок Access-Control-Allow-Credentials в ответе на предварительный запрос получит значение, указанное в этом атрибуте. Этот заголовок определяет, может ли клиент передавать в междоменных запросах учетные данные. Допустимы выражения политики. |
No | false |
terminate-unmatched-request | Управляет обработкой запросов независимо от источника, которые не соответствуют параметрам политики. Допустимы выражения политики. Если OPTIONS запрос обрабатывается как предварительный запрос и Origin заголовок не соответствует параметрам политики:— Если атрибут задан true , немедленно завершите запрос пустым 200 OK ответом.— Если для атрибута задано значение false , проверьте входящий трафик для других политик в области cors , которые являются прямыми дочерними элементами входящего элемента и применяют их. Если политики cors не найдены, запрос завершается с пустым ответом 200 OK . Если GET или HEAD запрос включают Origin заголовок (и поэтому обрабатывается как простой запрос между источниками) и не соответствует параметрам политики:— Если атрибут задан true , немедленно завершите запрос пустым 200 OK ответом.— Если для атрибута задано значение false , разрешите запросу работать нормально и не добавляйте заголовки CORS в ответ. |
No | true |
Элементы
Имя | Описание | Обязательное поле | По умолчанию. |
---|---|---|---|
allowed-origins | Содержит элементы origin , описывающие разрешенные источники для междоменных запросов. allowed-origins может содержать один элемент origin со значением * , если нужно разрешить любые источники, либо один или несколько элементов origin , содержащих URI источников. |
Да | Н/П |
allowed-methods | Этот элемент является обязательным, если разрешены методы, отличные от GET или POST . Содержит элементы method , перечисляющие поддерживаемые HTTP-команды. Значение * указывает все методы. |
No | Если этот раздел отсутствует, поддерживаются методы GET и POST . |
allowed-headers | Этот элемент содержит элементы header , указывающие имена заголовков, которые могут быть включены в запрос. |
Да | Н/П |
expose-headers | Этот элемент содержит элементы header , указывающие имена заголовков, которые будут доступны клиенту. |
No | Н/П |
Внимание
Используйте подстановочный знак *
с осторожностью в параметрах политики. Эта конфигурация может предоставлять слишком много разрешений и повышать уязвимость API к некоторым угрозам безопасности API.
Элементы разрешенных источников
Имя | Описание | Обязательное поле | По умолчанию. |
---|---|---|---|
origin | В качестве значений допускается * , которое разрешает любые источники, или URI конкретного источника. URI-адрес должен включать схему, узел и порт. Не используйте кавычки. |
Да | Если в URI не указан порт, используется порт 80 для HTTP и порт 443 для HTTPS. |
Атрибуты разрешенных методов
Имя | Описание | Обязательное поле | По умолчанию. |
---|---|---|---|
preflight-result-max-age | Заголовок Access-Control-Max-Age в ответе на предварительный запрос получит значение, указанное в этом атрибуте. Этот заголовок определяет, может ли клиент помещать в кэш ответы на предварительные запросы. Допустимы выражения политики. |
No | 0 |
Элементы разрешенных методов
Имя | Описание | Обязательное поле | По умолчанию. |
---|---|---|---|
метод | Задает команду HTTP. Допустимы выражения политики. | Если раздел allowed-methods присутствует, в нем обязательно должен быть по крайней мере один элемент method . |
Н/П |
Элементы разрешенных заголовков
Имя | Описание | Обязательное поле | По умолчанию. |
---|---|---|---|
авторизации | Задает имя заголовка. | Если этот раздел присутствует, требуется allowed-headers хотя бы один header элемент. |
Н/П |
Элементы с открытыми заголовками
Имя | Описание | Обязательное поле | По умолчанию. |
---|---|---|---|
авторизации | Задает имя заголовка. | Если этот раздел присутствует, требуется expose-headers хотя бы один header элемент. |
Н/П |
Использование
- Разделы политики: inbound.
- Области политики: глобальная, рабочая область, продукт, API, операция
- Шлюзы: классическая, версия 2, потребление, локальное размещение, рабочая область
Примечания об использовании
- Политику
cors
можно настроить в нескольких областях (например, в области продукта и глобальной области). Убедитесь, что элементbase
настроен в области операций, API и продукта для наследования необходимых политик в родительских областях. - Только политика
cors
оценивается по запросуOPTIONS
на предварительном этапе. Оставшиеся настроенные политики оцениваются по утвержденному запросу.
- Эту политику можно использовать только один раз в разделе политики.
Сведения о CORS
CORS — это стандарт на основе заголовков HTTP, который позволяет браузеру и серверу взаимодействовать друг с другом и определять, разрешать конкретные запросы независимо от источника или нет (вызовы XMLHttpRequest
, отправляемые из кода JavaScript на веб-странице в другие домены). Это обеспечивает большую гибкость, чем просто разрешение запросов из одного источника, и более высокую защищенность, чем разрешение всех запросов независимо от источника.
CORS указывает два типа запросов независимо от источника:
Предварительные запросы — сначала браузер отправляет HTTP-запрос с помощью метода
OPTIONS
на сервер, чтобы определить, разрешено ли отправлять фактический запрос. Если ответ сервера содержит заголовокAccess-Control-Allow-Origin
, который разрешает доступ, браузер осуществляет фактический запрос.Простые запросы — эти запросы включают в себя один или несколько дополнительных заголовков
Origin
, но не запускают предварительный запрос CORS. Разрешены только запросы, использующие методыGET
иHEAD
и ограниченный набор заголовков запросов.
Сценарии политики cors
Настройте политику cors
в службе Управление API для следующих сценариев:
Включите интерактивную консоль тестирования на портале разработчика. Подробные сведения приведены в документации по порталу разработчика.
Примечание.
При включении CORS для интерактивной консоли служба Управление API по умолчанию настраивает политику
cors
в глобальной области.Включите службу Управление API, чтобы ответить на предварительные запросы или передать простые запросы CORS, если серверные части не предоставляют собственную поддержку CORS.
Примечание.
Если запрос соответствует операции с методом
OPTIONS
, определенным в API, то логика обработки предварительных запросов, связанная с политикойcors
, не будет выполнена. Поэтому такие операции можно использовать для реализации пользовательской логики обработки предварительных запросов, например, чтобы применить политикуcors
только при определенных условиях.
Распространенные проблемы конфигурации
- Ключ подписки в заголовке — если вы настраиваете политику
cors
в области продукта, а API использует проверку подлинности ключа подписки, политика не будет работать при передаче ключа подписки в заголовке. В качестве обходного решения измените запросы, чтобы включить ключ подписки в качестве параметра запроса. - API с управлением версиями заголовков — если вы настраиваете политику
cors
в области API, а API использует схему управления версиями заголовков, политика не будет работать, так как версия передается в заголовке. Может потребоваться настроить альтернативный метод управления версиями, например путь или параметр запроса. - Порядок политик — если политика
cors
не является первой политикой в разделе входящего трафика, это может привести к непредвиденному поведению. Выберите Calculate effective policy (Вычислить эффективную политику) в редакторе политик, чтобы проверить порядок оценки политик в каждой области. Как правило, применяется только первая политикаcors
. - Пустой ответ 200 OK — в некоторых конфигурациях политик отдельные запросы независимо от источника завершаются c пустым ответом
200 OK
. Этот ответ ожидается, если дляterminate-unmatched-request
задано значение по умолчаниюtrue
, а входящий запрос имеет заголовокOrigin
, который не соответствует разрешенному источнику, настроенному в политикеcors
.
Пример
В этом примере показано, как обеспечить поддержку предварительных запросов, например, с пользовательскими заголовками или методами, отличными от GET
и POST
. Для поддержки пользовательских заголовков и других команд HTTP используйте разделы allowed-methods
и allowed-headers
, как показано в следующем примере.
<cors allow-credentials="true">
<allowed-origins>
<!-- Localhost useful for development -->
<origin>http://localhost:8080/</origin>
<origin>http://example.com/</origin>
</allowed-origins>
<allowed-methods preflight-result-max-age="300">
<method>GET</method>
<method>POST</method>
<method>PATCH</method>
<method>DELETE</method>
</allowed-methods>
<allowed-headers>
<!-- Examples below show Azure Mobile Services headers -->
<header>x-zumo-installation-id</header>
<header>x-zumo-application</header>
<header>x-zumo-version</header>
<header>x-zumo-auth</header>
<header>content-type</header>
<header>accept</header>
</allowed-headers>
<expose-headers>
<!-- Examples below show Azure Mobile Services headers -->
<header>x-zumo-installation-id</header>
<header>x-zumo-application</header>
</expose-headers>
</cors>
Связанные политики
Связанный контент
Дополнительные сведения о работе с политиками см. в нижеуказанных статьях.
- Руководство. Преобразование и защита API
- Полный перечень операторов политик и их параметров см. в справочнике по политикам.
- Выражения политики
- Настройка или изменение политик
- Повторное использование конфигураций политик
- Репозиторий фрагментов политик
- Создание политик с помощью Microsoft Copilot в Azure