Проверка CORS на стороне CDN
Когда пользователь запрашивает ваш контент с другого сайта, браузер пользователя может заблокировать такой запрос, тогда пользователь не получит контент. Механизм CORS с помощью заголовков Access-Control-* позволяет браузеру пропустить запрос, чтобы пользователь получил контент. Подробнее в примере в подразделе Пример работы CORS.
По умолчанию проверка CORS на стороне CDN включена и применяется ко всем файлам ресурса. Вы можете управлять параметрами CORS.
Если проверка CORS настроена на сервере — источнике контента, мы рекомендуем отключить проверку CORS на стороне CDN, чтобы заголовки могли передаваться с источника без изменений.
Если вы добавляете персональные HTTP-заголовки в ответ пользователю, они добавятся в ответ после проверки CORS. Если персональный и указанный в CORS заголовки совпадают, то в ответе пользователю отобразится значение персонального заголовка. Например, для заголовка Access-Control-Allow-Originв CORS установлено значение https://example.com, а значение персонального заголовка — *. После проверки CORS в ответе браузеру будет передан заголовок Access-Control-Allow-Origin:*.
Пример проверки CORS
Например, пользователь сайта not-my-site.com открывает изображение, которое расположено на вашем сайте по адресу cdn.my-site.com/image.jpg.
Браузер пользователя отправляет на сервер домена cdn.my-site.com/image.jpg запрос с заголовком Origin, который указывает на источник запроса (в примере — Origin: http://not-my-site.com).
Сервер домена cdn.my-site.com проверяет содержимое заголовка Origin в запросе:
- если домен разрешен, сервер передаст в ответе браузеру заголовок
Access-Control-Allow-Origin: https://not-my-site.com, который позволит браузеру отобразить изображение для пользователя сайтаnot-my-site.com. - если домен не разрешен, сервер не передаст в ответе браузеру заголовок
Access-Control-Allow-Origin. Браузер заблокирует запрос и не отобразит изображение для пользователя.
Управлять параметрами CORS
Вы можете настроить параметры проверки CORS:
- добавить разрешенные домены;
- добавить разрешенные заголовки запроса;
- добавить разрешенные заголовки для API (Expose Headers);
- выбрать разрешенные HTTP-методы;
- добавить заголовок Access-Control-Allow-Credentials;
- добавить заголовок Access-Control-Allow-Origin во все ответы;
- указать время кэширования ответа на Preflight-запрос.
Добавить разрешенные домены
По умолчанию ваш контент доступен с любого домена. В ответ браузеру передается заголовок Access-Control-Allow-Origin:*.
Вы можете разрешить доступ к контенту определенным доменам. В ответе будет указан домен, с которого пришел запрос. Например: Access-Control-Allow-Origin: https://example.com.
Запрос с доменом, которого нет в списке разрешенных, не получает в ответе заголовок Access-Control-Allow-Origin. Браузер блокирует запрос, пользователь не получает контент.
-
В панели управления в верхнем меню нажмите Продукты и выберите CDN.
-
В разделе CDN-ресурсы откройте страницу ресурса → вкладка Заголовки.
-
Убедитесь, что в блоке Проверка CORS на стороне CDN отмечен чекбокс Включить настройки CORS.
-
Укажите разрешенный домен, к которому применяется настройка. Введите домен без протокола, например
example.com. Можно использовать:example.com— точное соответствие;*.example.com— все поддомены основного домена, не включая основной домен. Например, все поддоменыexample.com, не включаяexample.com;.example.com— все поддомены третьего уровня, включая основной домен. Например: все поддоменыexample.com, включаяexample.com;- регулярное выражение, чтобы задать сложное правило. Например,
~ad+.example.com.
-
Если нужно добавить несколько разрешенных доменов, нажмите Добавить домен и повторите шаг 4.
-
Нажмите Применить. Во время применения настроек ресурс будет находиться в статусе
PROCESSING. В это время применение других настроек недоступно. Настройки применятся, когда ресурс перейдет в статусACTIVE.
Добавить разрешенные заголовки запроса
Чтобы браузер не блокировал запросы к источнику с персональными заголовками, можно добавить персональные заголовки в список разрешенных.
По умолчанию разрешены заголовки:
Accept;Accept-Language;Content-Type;Content-Language.
Вы также можете добавить дополнительные заголовки. В ответе браузеру будет передаваться заголовок Access-Control-Allow-Headers:<allowed_header>, где <allowed_header> — название разрешенного заголовка.
Запрос с заголовком, которого нет в списке разрешенных, не получает в ответ заголовок Access-Control-Allow-Headers. Браузер блокирует запрос, пользователь не получает контент.
-
В панели управления в верхнем меню нажмите Продукты и выберите CDN.
-
В разделе CDN-ресурсы откройте страницу ресурса → вкладка Заголовки.
-
Убедитесь, что в блоке Проверка CORS на стороне CDN отмечен чекбокс Включить настройки CORS.
-
В списке Безопасные заголовки запроса введите заголовок и нажмите . Заголовок добавится в список разрешенных.
-
Опционально: в списке Безопасные заголовки запроса выберите заголовки, если вы уже добавляли их.
-
Если вы еще не добавляли заголовки, введите заголовок и нажмите . Заголовок добавится в список разрешенных.
-
Нажмите Применить. Во время применения настроек ресурс будет находиться в статусе
PROCESSING. В это время применение других настроек недоступно. Настройки применятся, когда ресурс перейдет в статусACTIVE.
Добавить разрешенные заголовки для API (Expose Headers)
Чтобы браузер не блокировал запросы к источнику с персональными заголовками, можно добавить персональные заголовки в список разрешенных.
По умолчанию разрешены заголовки:
Cache-Control;Content-Language;Content-Type;Expires;Last-Modified;Pragma;Content-Range.
Вы также можете добавить дополнительные заголовки. В ответе браузеру передается заголовок Access-Control-Expose-Headers:<expose_header>, где <expose_header> — название разрешенного заголовка.
Запрос с заголовком, которого нет в списке разрешенных, не получает в ответ заголовок Access-Control-Expose-Headers. Браузер блокирует запрос, пользователь не получает контент.
-
В панели управления в верхнем меню нажмите Продукты и выберите CDN.
-
В разделе CDN-ресурсы откройте страницу ресурса → вкладка Заголовки.
-
Убедитесь, что в блоке Заголовки, доступные API верхнего уровня (Expose Headers) отмечен чекбокс Включить настройки CORS.
-
В списке Безопасные заголовки запроса введите заголовок и нажмите . Заголовок добавится в список разрешенных.
-
Опционально: в списке Заголовки, доступные API верхнего уровня (Expose Headers) выберите заголовки, если вы уже добавляли их.
-
Нажмите Применить. Во время применения настроек ресурс будет находиться в статусе
PROCESSING. В это время применение других настроек недоступно. Настройки применятся, когда ресурс перейдет в статусACTIVE.
Выбрать разрешенные HTTP-методы
Чтобы браузер не блокировал запрос к источнику с определенными HTTP-методами, можно добавить методы в список разрешенных.
По умолчанию разрешены методы: GET, HEAD, POST, OPTIONS. Их нельзя запретить.
Вы можете дополнительно выбрать разрешенные методы. В ответе браузеру передается заголовок Access-Control-Allow-Methods:<allowed_method>, где <allowed_header> — название разрешенного метода.
Запрос с методом, которого нет в списке разрешенных, не получает в ответ заголовок Access-Control-Allow-Methods. Браузер блокирует запрос, пользователь не получает контент.
-
В панели управления в верхнем меню нажмите Продукты и выберите CDN.
-
В разделе CDN-ресурсы откройте страницу ресурса → вкладка Заголовки.
-
Убедитесь, что в блоке Проверка CORS на стороне CDN отмечен чекбокс Включить настройки CORS.
-
В списке Безопасные методы выберите методы, которые хотите разрешить:
PUT;PATCH;DELETE;OPTIONS.
-
Нажмите Применить. Во время применения настроек ресурс будет находиться в статусе
PROCESSING. В это время применение других настроек недоступно. Настройки применятся, когда ресурс перейдет в статусACTIVE.
Добавить заголовок Access-Control-Allow-Credentials
При включении опции CDN добавит в ответ заголовок Access-Control-Allow-Credentials: true — он разрешает передачу cookies и авторизационных данных. Заголовок добавляется в ответ, только если запрос прошел проверку CORS.
При добавлении этого заголовка запрос отправляется напрямую на источник контента. CDN не кэширует ответ на такой запрос, так как он содержит персональные данные пользователя.
-
В панели управления в верхнем меню нажмите Продукты и выберите CDN.
-
В разделе CDN-ресурсы откройте страницу ресурса → вкладка Заголовки.
-
Убедитесь, что в блоке Проверка CORS на стороне CDN отмечен чекбокс Включить настройки CORS.
-
Отметьте чекбокс Заголовок Access-Control-Allow-Credentials.
-
Нажмите Применить. Во время применения настроек ресурс будет находиться в статусе
PROCESSING. В это время применение других настроек недоступно. Настройки применятся, когда ресурс перейдет в статусACTIVE.
Добавить заголовок Access-Control-Allow-Origin во все ответы
При включении опции CDN будет добавлять заголовок Access-Control-Allow-Origin в каждый ответ на запрос, включая те, что возвращают в ответе ошибку. Это позволяет обрабатывать запросы, которые завершились ошибкой.
-
В панели управления в верхнем меню нажмите Продукты и выберите CDN.
-
В разделе CDN-ресурсы откройте страницу ресурса → вкладка Заголовки.
-
Убедитесь, что в блоке Проверка CORS на стороне CDN отмечен чекбокс Включить настройки CORS.
-
Отметьте чекбокс Заголовок Access-Control-Allow-Origin всегда.
-
Нажмите Применить. Во время применения настроек ресурс будет находиться в статусе
PROCESSING. В это время применение других настроек недоступно. Настройки применятся, когда ресурс перейдет в статусACTIVE.
Указать время кэширования ответа на Preflight-запрос
Preflight-запрос — это предварительный запрос методом OPTIONS, который отправляется до реального запроса. Его задача заранее проверить, что запрос разрешен. Только после проверки предварительным запросом отправляется реальный запрос.
По умолчанию браузер отправляет Preflight-запрос каждый раз. Вы можете указать время кэширования ответа на Preflight-запрос, чтобы ускорить доставку контента.
Время кэширования передается в заголовке Access-Control-Max-Age.
-
В панели управления в верхнем меню нажмите Продукты и выберите CDN.
-
В разделе CDN-ресурсы откройте страницу ресурса → вкладка Заголовки.
-
Убедитесь, что в блоке Проверка CORS на стороне CDN отмечен чекбокс Включить настройки CORS.
-
В поле Время жизни ответа Preflight запроса укажите значение в секундах. Чем больше значение, тем реже браузер отправляет Preflight-запросы.
-
Нажмите Применить. Во время применения настроек ресурс будет находиться в статусе
PROCESSING. В это время применение других настроек недоступно. Настройки применятся, когда ресурс перейдет в статусACTIVE.
Отключить проверку CORS на стороне CDN
-
В панели управления в верхнем меню нажмите Продукты и выберите CDN.
-
В разделе CDN-ресурсы откройте страницу ресурса → вкладка Заголовки.
-
В блоке Проверка CORS на стороне CDN снимите чекбокс Включить настройки CORS.
-
Нажмите Применить. Во время применения настроек ресурс будет находиться в статусе
PROCESSING. В это время применение других настроек недоступно. Настройки применятся, когда ресурс перейдет в статусACTIVE.