PassFront
  1. PassFront
  2. База знаний
  3. Заголовки и политики браузера

Как работает preflight-запрос в CORS и когда он отправляется?

Заголовки и политики браузера

Preflight — предварительный запрос методом OPTIONS, которым браузер спрашивает сервер, разрешён ли основной межсайтовый запрос.

Когда он нужен

Браузер отправляет preflight, если запрос «непростой»:

  • метод не GET, HEAD или POST, например PUT, DELETE, PATCH;
  • есть нестандартные заголовки: Authorization, X-Custom;
  • Content-Type не text/plain, multipart/form-data или application/x-www-form-urlencoded, например application/json.

Как это работает

OPTIONS /api/items
Origin: https://app.example.com
Access-Control-Request-Method: PUT
Access-Control-Request-Headers: authorization, content-type

← 204
Access-Control-Allow-Origin: https://app.example.com
Access-Control-Allow-Methods: PUT
Access-Control-Allow-Headers: authorization, content-type
Access-Control-Max-Age: 600

Если сервер разрешил, браузер отправляет настоящий запрос. Max-Age позволяет кешировать ответ и не повторять preflight.

Частые ошибки

  • Ответ на OPTIONS приходит с 401 или 404: preflight не проходит авторизацию.
  • С credentials: 'include' нельзя использовать Access-Control-Allow-Origin: *, нужен конкретный origin.

Коротко для собеседования

Preflight — «разведка» через OPTIONS перед непростыми запросами. Сервер отвечает списком разрешённых методов и заголовков.

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