PassFront
  1. PassFront
  2. База знаний
  3. DOM и браузер

Почему 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 работает, а в браузере ошибка; чинится заголовками на сервере.

Другие вопросы раздела