CORS
CORS (Cross-Origin Resource Sharing) — это механизм, который позволяет веб-страницам запрашивать ресурсы с другого домена, отличного от того, с которого была загружена сама страница. Это важно, потому что браузеры по умолчанию блокируют такие запросы из соображений безопасности (это называется политикой одного источника — Same-Origin Policy).
Как работает CORS:
- Запрос с другого источника:
- Когда веб-страница пытается сделать запрос (например, через
fetchилиXMLHttpRequest) к ресурсу на другом домене, браузер автоматически добавляет в запрос заголовокOrigin. Этот заголовок содержит домен, с которого был отправлен запрос.
- Когда веб-страница пытается сделать запрос (например, через
- Ответ сервера:
- Сервер, получив запрос, может разрешить или запретить доступ к ресурсу. Если сервер поддерживает CORS, он добавляет в ответ заголовок
Access-Control-Allow-Origin, указывая, какие домены могут получить доступ к ресурсу. - Например, если сервер разрешает доступ всем доменам, он может вернуть:
Access-Control-Allow-Origin: *
Если доступ разрешен только конкретному домену, то:
Access-Control-Allow-Origin: https://example.com
- Сервер, получив запрос, может разрешить или запретить доступ к ресурсу. Если сервер поддерживает CORS, он добавляет в ответ заголовок
- Проверка браузером:
- Браузер проверяет заголовок
Access-Control-Allow-Originв ответе сервера. Если значение заголовка совпадает с доменом, с которого был отправлен запрос (или это *), браузер разрешает доступ к данным. В противном случае запрос блокируется, и на странице возникает ошибка CORS.
- Браузер проверяет заголовок
- Предварительные запросы (Preflight):
- Для некоторых типов запросов (например, с использованием методов, отличных от GET/POST, или с кастомными заголовками), браузер сначала отправляет предварительный запрос (OPTIONS), чтобы проверить, поддерживает ли сервер CORS и разрешает ли он такие запросы.
- Сервер должен ответить на этот запрос, указав разрешенные методы, заголовки и другие параметры.
Пример
- Веб-страница на https://example.com делает запрос к API на https://api.example.com.
- Браузер отправляет запрос с заголовком:
Origin: https://example.com - Сервер отвечает:
Access-Control-Allow-Origin: https://example.com - Браузер проверяет заголовок и разрешает доступ к данным.
Основные заголовки CORS:
- Origin: Указывает домен, с которого отправлен запрос.
- Access-Control-Allow-Origin: Указывает, какие домены могут получить доступ к ресурсу.
- Access-Control-Allow-Methods: Указывает разрешенные HTTP-методы (например, GET, POST).
- Access-Control-Allow-Headers: Указывает разрешенные заголовки в запросе.
- Access-Control-Allow-Credentials: Указывает, можно ли отправлять куки или другие учетные данные.
Важно:
CORS работает только в браузерах. Серверные приложения (например, на Node.js или Python) не ограничены политикой CORS. Если сервер не настроен для поддержки CORS, браузер заблокирует запрос, даже если сервер возвращает данные.
🚀 Источник: DeepSeek