--- sidebar_position: 6 --- # CORS **CORS** (Cross-Origin Resource Sharing) — это механизм, который позволяет веб-страницам запрашивать ресурсы с другого домена, отличного от того, с которого была загружена сама страница. Это важно, потому что браузеры по умолчанию блокируют такие запросы из соображений безопасности (это называется политикой одного источника — Same-Origin Policy). ## Как работает CORS: 1. **Запрос с другого источника:** - Когда веб-страница пытается сделать запрос (например, через `fetch` или `XMLHttpRequest`) к ресурсу на другом домене, браузер автоматически добавляет в запрос заголовок `Origin`. Этот заголовок содержит домен, с которого был отправлен запрос. 2. **Ответ сервера:** - Сервер, получив запрос, может разрешить или запретить доступ к ресурсу. Если сервер поддерживает CORS, он добавляет в ответ заголовок `Access-Control-Allow-Origin`, указывая, какие домены могут получить доступ к ресурсу. - Например, если сервер разрешает доступ всем доменам, он может вернуть: \ `Access-Control-Allow-Origin: *` \ Если доступ разрешен только конкретному домену, то: `Access-Control-Allow-Origin: https://example.com` 3. **Проверка браузером:** - Браузер проверяет заголовок `Access-Control-Allow-Origin` в ответе сервера. Если значение заголовка совпадает с доменом, с которого был отправлен запрос (или это *), браузер разрешает доступ к данным. В противном случае запрос блокируется, и на странице возникает ошибка CORS. 4. **Предварительные запросы (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_**