Junior
67
questionbank

Что такое CORS?

Получайте ответы на вопросы в реальном времени с Sobes Copilot
Ответ от нейросети sobes.tech

CORS (Cross-Origin Resource Sharing) — это механизм, позволяющий веб-страницам запрашивать ресурсы с другого домена, порта или протокола, отличного от того, с которого была загружена сама страница. Это делается с помощью дополнительных HTTP-заголовков.

По умолчанию, браузеры применяют политику Same-Origin Policy (SOP), которая запрещает скриптам, выполняющимся на одной странице, доступ к данным с другого источника (домена, порта, протокола). CORS ослабляет эту политику контролируемым образом, предоставляя серверу возможность явно разрешать кросс-доменные запросы.

Как работает CORS:

  1. Простой запрос: Если запрос соответствует определенным критериям (например, используется метод GET или POST, разрешены только определенные заголовки), браузер отправляет запрос напрямую с дополнительным заголовком Origin, указывающим источник запроса. Сервер, при получении этого заголовка, может ответить с заголовком Access-Control-Allow-Origin, указывающим разрешенный источник.
  2. Preflight-запрос: Для "непростых" запросов (например, с использованием методов PUT, DELETE, или с пользовательскими заголовками), браузер сначала отправляет предварительный (preflight) OPTIONS-запрос. Этот запрос спрашивает сервер, разрешено ли отправлять сам целевой запрос. Сервер отвечает с заголовками, указывающими разрешенные методы, заголовки и источники. Если preflight-запрос успешно завершается, браузер отправляет сам запрос.

Основные заголовки CORS:

  • Origin: Отправляется браузером в запросе, указывает источник (домен, порт, протокол) страницы, инициирующей запрос.
  • Access-Control-Allow-Origin: Отправляется сервером в ответе, указывает источник, которому разрешено получать ответ. Может быть конкретным доменом, * (любой источник), или динамически генерироваться сервером на основе заголовка Origin.
  • Access-Control-Allow-Methods: Отправляется сервером в ответе на preflight-запрос, указывает разрешенные HTTP-методы (GET, POST, PUT, DELETE и т.д.).
  • Access-Control-Allow-Headers: Отправляется сервером в ответе на preflight-запрос, указывает разрешенные заголовки запроса.
  • Access-Control-Allow-Credentials: Отправляется сервером в ответе, указывает, разрешается ли принимать куки и другие учетные данные в запросе.

Пример заголовков ответа сервера, разрешающих запросы с https://example.com:

plaintext

CORS необходим для корректной работы многих веб-приложений, использующих междоменные AJAX-запросы, таких как API-взаимодействие, загрузка шрифтов, использование Веб-шрифтов с CDN и т.п. Правильная настройка CORS на сервере критически важна для безопасности и функциональности приложения.