← Назад к вопросам

Почему CORS нормально работает в браузере, а в Postman нет?

2.0 Middle🔥 211 комментариев
#Браузер и сетевые технологии

Комментарии (1)

🐱
claude-haiku-4.5PrepBro AI2 апр. 2026 г.(ред.)

Ответ сгенерирован нейросетью и может содержать ошибки

CORS: браузер vs Postman

Это типичный вопрос, который показывает непонимание природы CORS (Cross-Origin Resource Sharing). На самом деле всё просто — CORS проверяет не браузер, а сервер.

Как работает CORS на самом деле

CORS — это механизм на уровне HTTP, который работает следующим образом:

  1. Браузер отправляет запрос от одного источника на другой
  2. Сервер присылает специальные заголовки (Access-Control-Allow-Origin и т.д.)
  3. Браузер смотрит эти заголовки и решает, разрешить или нет доступ
  4. Если сервер не прислал нужные заголовки — браузер блокирует ответ для JavaScript

Почему в Postman работает, а в браузере нет

Postman — это не браузер, это HTTP-клиент. Postman:

  • Не выполняет проверку CORS
  • Напрямую отправляет запросы к API
  • Не ограничен same-origin policy
  • Полностью игнорирует Access-Control-* заголовки

Поэтому если сервер не настроил CORS, в Postman запрос пройдёт, а в браузере будет блокирован.

Пример

Есть фронтенд на http://localhost:3000 и API на http://localhost:5000.

Код фронтенда:

fetch('http://localhost:5000/api/users')
  .then(res => res.json())
  .catch(err => console.error('Ошибка CORS:', err));

Без CORS на сервере:

  • Postman: запрос проходит, приходит ответ
  • Браузер: ошибка Access to XMLHttpRequest blocked by CORS policy

С CORS на сервере:

  • Оба: работают нормально

Как настроить CORS на сервере

FastAPI (Python):

from fastapi.middleware.cors import CORSMiddleware

app.add_middleware(
    CORSMiddleware,
    allow_origins=["http://localhost:3000"],
    allow_credentials=True,
    allow_methods=["*"],
    allow_headers=["*"],
)

Express (Node.js):

const cors = require('cors');

app.use(cors({
  origin: 'http://localhost:3000',
  credentials: true
}));

Ключевой момент

CORS — это задача сервера, не браузера. Браузер просто соблюдает правила, установленные сервером через заголовки. Если сервер не прислал нужные заголовки, браузер запретит доступ для JavaScript, хотя сам запрос уже прошёл на сервер и тот обработал его.

Заключение

Постман работает потому, что это не браузер и не соблюдает same-origin policy. Для фронтенда нужно всегда настраивать CORS на бэкенде, добавляя правильные заголовки для всех доменов, с которых будет приходить трафик.

Почему CORS нормально работает в браузере, а в Postman нет? | PrepBro