Почему CORS нормально работает в браузере, а в Postman нет?
DOM и браузер
CORS «работает» в браузере, но не в Postman, потому что CORS — это ограничение браузера, а Postman браузером не является и Same-Origin Policy не применяет.
Почему так
CORS/Same-Origin Policy — механизм безопасности браузера, защищающий пользователя. Его соблюдает только браузер:
- Браузер — перед кросс-доменным запросом проверяет заголовки CORS и блокирует чтение ответа, если сервер не разрешил origin. Отсюда «ошибка CORS».
- Postman / curl / сервер — это не браузер, у них нет понятия «origin» и Same-Origin Policy. Они шлют запрос напрямую и получают ответ без CORS-проверок.
Браузер: fetch('https://api.other.com') → проверка CORS → может блокировать
Postman: GET https://api.other.com → просто получает ответВывод
- Ошибка CORS не означает, что API недоступен — запрос доходит до сервера и отвечает; браузер лишь блокирует чтение ответа JS-ом.
- Поэтому в Postman запрос успешен, а в браузере — CORS-ошибка.
- CORS не защищает сам сервер (его обходят не-браузерные клиенты) — он защищает пользователя браузера.
Практика
Если в Postman работает, а в браузере CORS-ошибка — проблема в отсутствии заголовков Access-Control-Allow-* на сервере (или нужен прокси).
Коротко для собеседования
CORS — ограничение браузера (Same-Origin Policy), защищающее пользователя; браузер проверяет заголовки и блокирует чтение ответа. Postman/curl не браузеры — они не применяют CORS и получают ответ напрямую. Поэтому в Postman работает, а в браузере ошибка; чинится заголовками на сервере.