Что такое CORS?
DOM и браузер
CORS (Cross-Origin Resource Sharing) — это механизм безопасности браузера, который через HTTP-заголовки разрешает или запрещает запросы к ресурсам с другого origin (протокол + домен + порт).
Зачем нужен
По умолчанию действует Same-Origin Policy: скрипт со страницы a.com не может читать ответы запросов к api.b.com. CORS — контролируемое исключение: сервер явно указывает, каким источникам можно.
Как работает
Браузер добавляет к кросс-доменному запросу заголовок Origin, а сервер отвечает Access-Control-Allow-Origin:
Access-Control-Allow-Origin: https://a.com
Access-Control-Allow-Credentials: true
Access-Control-Allow-Methods: GET, POSTЕсли заголовок не совпадает — браузер блокирует чтение ответа (сам запрос мог дойти до сервера).
Preflight-запрос
Для «непростых» запросов (методы кроме GET/POST/HEAD, кастомные заголовки, Content-Type: application/json) браузер сначала шлёт OPTIONS — предзапрос, спрашивая разрешение.
Нюансы
- CORS — защита браузера, а не сервера; из curl/Postman ограничений нет.
- Ошибка CORS означает, что сервер не прислал нужные заголовки.
- Для cookie нужны
credentials: 'include'иAccess-Control-Allow-Credentials: true(тогда origin нельзя*).
Коротко для собеседования
CORS — механизм браузера, ослабляющий Same-Origin Policy через заголовки Access-Control-Allow-*. Сервер решает, каким origin можно читать ответ. Для сложных запросов есть preflight OPTIONS.
Подробнее: MDN — CORS