Настройка CORS при ответах клиентам
Примечание
Чтобы кросс-доменные запросы работали корректно, дополнительно настройте CORS на источнике, если источник поддерживает этот механизм. Например, настройка CORS потребуется для бакетов Object Storage.
Чтобы настроить для ресурса кросс-доменные запросы по механизму CORS:
-
В консоли управления
выберите каталог, в котором расположен ресурс. -
Перейдите в сервис Cloud CDN.
-
Нажмите на имя необходимого ресурса.
-
Перейдите на вкладку HTTP-заголовки и методы.
-
В правом верхнем углу нажмите кнопку
Редактировать. -
В блоке CORS при ответе клиенту:
-
В поле Заголовок Access-Control-Allow-Origin укажите, нужно ли добавлять этот заголовок к ответам.
-
При добавлении заголовка выберите, при каких значениях заголовка
Originразрешен доступ к контенту. Чтобы разрешить доступ только определенным источникам, выберитеКак в Origin, если входит в список, укажите доменные имена источников и нажмите кнопку Добавить доменное имя.При использовании EdgeCDN-провайдера есть ограничение на максимальное количество доменов CORS при ответе клиенту — 20 доменов. Подробнее о лимитах и ограничениях.
-
-
Нажмите кнопку Сохранить.
Если у вас еще нет интерфейса командной строки Yandex Cloud (CLI), установите и инициализируйте его.
По умолчанию используется каталог, указанный при создании профиля CLI. Чтобы изменить каталог по умолчанию, используйте команду yc config set folder-id <идентификатор_каталога>. Также для любой команды вы можете указать другой каталог с помощью параметров --folder-name или --folder-id.
-
Посмотрите описание команды CLI для редактирования ресурсов:
yc cdn resource update --help -
Получите список всех ресурсов в каталоге по умолчанию:
yc cdn resource list --format yamlРезультат:
id: s0me1dkfjq******** folder_id: s0mef01der7p******** cname: testexample.com created_at: "2022-01-19T09:23:57.921365Z" updated_at: "2022-01-19T10:55:30.305141Z" active: true options: edge_cache_settings: enabled: true default value: "345600" cache_http_headers: enabled: true value: - content-type - content-length - connection - server - date - test stale: enabled: true value: - error - updating allowed_http_methods: value: - GET - POST - HEAD - OPTIONS origin_group_id: "89783" origin_group_name: My origins group origin_protocol: HTTP ssl_certificate: type: DONT_USE status: READY -
Чтобы включить добавление заголовка
Access-Control-Allow-Origin, используйте параметр--cors:yc cdn resource update <идентификатор_ресурса> --cors <значение_CORS>Значения
*и"$http_origin"разрешают доступ к контенту при любом значении заголовкаOrigin. Чтобы разрешить доступ только определенным источникам, укажите"$http_origin"и доменные имена источников:["domain.com", "second.dom.com"].При использовании EdgeCDN-провайдера есть ограничение на максимальное количество доменов CORS при ответе клиенту — 20 доменов. Подробнее о лимитах и ограничениях.
Подробнее о команде
yc cdn resource updateсм. в справочнике CLI.
Если у вас еще нет Terraform, установите его и настройте провайдер Yandex Cloud.
-
Опишите в конфигурационном файле параметры создаваемого CDN-ресурса:
terraform { required_providers { yandex = { source = "yandex-cloud/yandex" version = "0.69.0" } } } provider "yandex" { token = "<OAuth-токен>" cloud_id = "<идентификатор_облака>" folder_id = "<идентификатор_каталога>" zone = "<зона_доступности>" } resource "yandex_cdn_resource" "my_resource" { cname = "cdn1.yandex-example.ru" active = false origin_protocol = "https" secondary_hostnames = ["cdn-example-1.yandex.ru", "cdn-example-2.yandex.ru"] origin_group_id = yandex_cdn_origin_group.my_group.id options { allowed_http_methods = ["GET","PUT"] cors = ["*"] } }Где:
-
cname— основное доменное имя для раздачи контента. Обязательный параметр. -
active— флаг, указывающий на доступ к контенту для конечных пользователей.True— контент из CDN будет доступен клиентам. Необязательный параметр, значение по умолчанию:true. -
origin_protocol— протокол для источников. Необязательный параметр, значение по умолчанию:http. -
secondary_hostnames— дополнительные доменные имена. Необязательный параметр.При использовании EdgeCDN-провайдера есть ограничение на максимальное количество доменов CORS при ответе клиенту — 20 доменов. Подробнее о лимитах и ограничениях.
-
origin_group_id— идентификатор группы источников. Обязательный параметр. Используйте идентификатор из описания группы источников в ресурсеyandex_cdn_origin_group. -
Блок
optionsсодержит дополнительные параметры CDN-ресурсов:cors— значение, которое CDN отправит в заголовкеAccess-Control-Allow-Originв ответ на CORS-запрос.allowed_http_methods— HTTP-методы, разрешенные для вашего контента CDN. По умолчанию разрешены следующие методы:GET,HEAD,POST,PUT,PATCH,DELETE,OPTIONS. В случае, если некоторые методы запрещены пользователю, он получит ответ405(Method Not Allowed). Если метод не поддерживается, пользователь получает ответ501(Not Implemented). Необязательный параметр, значения по умолчанию:GET,HEAD,POST,OPTIONS.
Более подробную информацию о параметрах
yandex_cdn_resourceв Terraform см. в документации провайдера. -
-
В командной строке перейдите в папку, где расположен конфигурационный файл Terraform.
-
Проверьте конфигурацию командой:
terraform validateЕсли конфигурация является корректной, появится сообщение:
Success! The configuration is valid. -
Выполните команду:
terraform planВ терминале будет выведен список ресурсов с параметрами. На этом этапе изменения не будут внесены. Если в конфигурации есть ошибки, Terraform на них укажет.
-
Примените изменения конфигурации:
terraform apply -
Подтвердите изменения: введите в терминал слово
yesи нажмите Enter.Проверить изменение CDN-ресурса можно в консоли управления
или с помощью команды CLI:yc cdn resource list
Воспользуйтесь методом REST API update для ресурса Resource или вызовом gRPC API ResourceService/Update.
Чтобы новые настройки существующего ресурса применились к CDN-серверам, может потребоваться до 15 минут. После этого рекомендуется очистить кеш ресурса.