Перейти к основному содержимому

Проверка 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:

Добавить разрешенные домены

По умолчанию ваш контент доступен с любого домена. В ответ браузеру передается заголовок Access-Control-Allow-Origin:*.

Вы можете разрешить доступ к контенту определенным доменам. В ответе будет указан домен, с которого пришел запрос. Например: Access-Control-Allow-Origin: https://example.com.

Запрос с доменом, которого нет в списке разрешенных, не получает в ответе заголовок Access-Control-Allow-Origin. Браузер блокирует запрос, пользователь не получает контент.

  1. В панели управления в верхнем меню нажмите Продукты и выберите CDN.

  2. В разделе CDN-ресурсы откройте страницу ресурса → вкладка Заголовки.

  3. Убедитесь, что в блоке Проверка CORS на стороне CDN отмечен чекбокс Включить настройки CORS.

  4. Укажите разрешенный домен, к которому применяется настройка. Введите домен без протокола, например example.com. Можно использовать:

    • example.com — точное соответствие;
    • *.example.com — все поддомены основного домена, не включая основной домен. Например, все поддомены example.com, не включая example.com;
    • .example.com — все поддомены третьего уровня, включая основной домен. Например: все поддомены example.com, включая example.com;
    • регулярное выражение, чтобы задать сложное правило. Например, ~ad+.example.com.
  5. Если нужно добавить несколько разрешенных доменов, нажмите Добавить домен и повторите шаг 4.

  6. Нажмите Применить. Во время применения настроек ресурс будет находиться в статусе PROCESSING. В это время применение других настроек недоступно. Настройки применятся, когда ресурс перейдет в статус ACTIVE.

Добавить разрешенные заголовки запроса

Чтобы браузер не блокировал запросы к источнику с персональными заголовками, можно добавить персональные заголовки в список разрешенных.

По умолчанию разрешены заголовки:

  • Accept;
  • Accept-Language;
  • Content-Type;
  • Content-Language.

Вы также можете добавить дополнительные заголовки. В ответе браузеру будет передаваться заголовок Access-Control-Allow-Headers:<allowed_header>, где <allowed_header> — название разрешенного заголовка.

Запрос с заголовком, которого нет в списке разрешенных, не получает в ответ заголовок Access-Control-Allow-Headers. Браузер блокирует запрос, пользователь не получает контент.

  1. В панели управления в верхнем меню нажмите Продукты и выберите CDN.

  2. В разделе CDN-ресурсы откройте страницу ресурса → вкладка Заголовки.

  3. Убедитесь, что в блоке Проверка CORS на стороне CDN отмечен чекбокс Включить настройки CORS.

  4. В списке Безопасные заголовки запроса введите заголовок и нажмите . Заголовок добавится в список разрешенных.

  5. Опционально: в списке Безопасные заголовки запроса выберите заголовки, если вы уже добавляли их.

  6. Если вы еще не добавляли заголовки, введите заголовок и нажмите . Заголовок добавится в список разрешенных.

  7. Нажмите Применить. Во время применения настроек ресурс будет находиться в статусе 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. Браузер блокирует запрос, пользователь не получает контент.

  1. В панели управления в верхнем меню нажмите Продукты и выберите CDN.

  2. В разделе CDN-ресурсы откройте страницу ресурса → вкладка Заголовки.

  3. Убедитесь, что в блоке Заголовки, доступные API верхнего уровня (Expose Headers) отмечен чекбокс Включить настройки CORS.

  4. В списке Безопасные заголовки запроса введите заголовок и нажмите . Заголовок добавится в список разрешенных.

  5. Опционально: в списке Заголовки, доступные API верхнего уровня (Expose Headers) выберите заголовки, если вы уже добавляли их.

  6. Нажмите Применить. Во время применения настроек ресурс будет находиться в статусе PROCESSING. В это время применение других настроек недоступно. Настройки применятся, когда ресурс перейдет в статус ACTIVE.

Выбрать разрешенные HTTP-методы

Чтобы браузер не блокировал запрос к источнику с определенными HTTP-методами, можно добавить методы в список разрешенных.

По умолчанию разрешены методы: GET, HEAD, POST, OPTIONS. Их нельзя запретить.

Вы можете дополнительно выбрать разрешенные методы. В ответе браузеру передается заголовок Access-Control-Allow-Methods:<allowed_method>, где <allowed_header> — название разрешенного метода.

Запрос с методом, которого нет в списке разрешенных, не получает в ответ заголовок Access-Control-Allow-Methods. Браузер блокирует запрос, пользователь не получает контент.

  1. В панели управления в верхнем меню нажмите Продукты и выберите CDN.

  2. В разделе CDN-ресурсы откройте страницу ресурса → вкладка Заголовки.

  3. Убедитесь, что в блоке Проверка CORS на стороне CDN отмечен чекбокс Включить настройки CORS.

  4. В списке Безопасные методы выберите методы, которые хотите разрешить:

    • PUT;
    • PATCH;
    • DELETE;
    • OPTIONS.
  5. Нажмите Применить. Во время применения настроек ресурс будет находиться в статусе PROCESSING. В это время применение других настроек недоступно. Настройки применятся, когда ресурс перейдет в статус ACTIVE.

Добавить заголовок Access-Control-Allow-Credentials

При включении опции CDN добавит в ответ заголовок Access-Control-Allow-Credentials: true — он разрешает передачу cookies и авторизационных данных. Заголовок добавляется в ответ, только если запрос прошел проверку CORS.

При добавлении этого заголовка запрос отправляется напрямую на источник контента. CDN не кэширует ответ на такой запрос, так как он содержит персональные данные пользователя.

  1. В панели управления в верхнем меню нажмите Продукты и выберите CDN.

  2. В разделе CDN-ресурсы откройте страницу ресурса → вкладка Заголовки.

  3. Убедитесь, что в блоке Проверка CORS на стороне CDN отмечен чекбокс Включить настройки CORS.

  4. Отметьте чекбокс Заголовок Access-Control-Allow-Credentials.

  5. Нажмите Применить. Во время применения настроек ресурс будет находиться в статусе PROCESSING. В это время применение других настроек недоступно. Настройки применятся, когда ресурс перейдет в статус ACTIVE.

Добавить заголовок Access-Control-Allow-Origin во все ответы

При включении опции CDN будет добавлять заголовок Access-Control-Allow-Origin в каждый ответ на запрос, включая те, что возвращают в ответе ошибку. Это позволяет обрабатывать запросы, которые завершились ошибкой.

  1. В панели управления в верхнем меню нажмите Продукты и выберите CDN.

  2. В разделе CDN-ресурсы откройте страницу ресурса → вкладка Заголовки.

  3. Убедитесь, что в блоке Проверка CORS на стороне CDN отмечен чекбокс Включить настройки CORS.

  4. Отметьте чекбокс Заголовок Access-Control-Allow-Origin всегда.

  5. Нажмите Применить. Во время применения настроек ресурс будет находиться в статусе PROCESSING. В это время применение других настроек недоступно. Настройки применятся, когда ресурс перейдет в статус ACTIVE.

Указать время кэширования ответа на Preflight-запрос

Preflight-запрос — это предварительный запрос методом OPTIONS, который отправляется до реального запроса. Его задача заранее проверить, что запрос разрешен. Только после проверки предварительным запросом отправляется реальный запрос.

По умолчанию браузер отправляет Preflight-запрос каждый раз. Вы можете указать время кэширования ответа на Preflight-запрос, чтобы ускорить доставку контента.

Время кэширования передается в заголовке Access-Control-Max-Age.

  1. В панели управления в верхнем меню нажмите Продукты и выберите CDN.

  2. В разделе CDN-ресурсы откройте страницу ресурса → вкладка Заголовки.

  3. Убедитесь, что в блоке Проверка CORS на стороне CDN отмечен чекбокс Включить настройки CORS.

  4. В поле Время жизни ответа Preflight запроса укажите значение в секундах. Чем больше значение, тем реже браузер отправляет Preflight-запросы.

  5. Нажмите Применить. Во время применения настроек ресурс будет находиться в статусе PROCESSING. В это время применение других настроек недоступно. Настройки применятся, когда ресурс перейдет в статус ACTIVE.

Отключить проверку CORS на стороне CDN

  1. В панели управления в верхнем меню нажмите Продукты и выберите CDN.

  2. В разделе CDN-ресурсы откройте страницу ресурса → вкладка Заголовки.

  3. В блоке Проверка CORS на стороне CDN снимите чекбокс Включить настройки CORS.

  4. Нажмите Применить. Во время применения настроек ресурс будет находиться в статусе PROCESSING. В это время применение других настроек недоступно. Настройки применятся, когда ресурс перейдет в статус ACTIVE.