PassFront
  1. PassFront
  2. База знаний
  3. DNS, WebSocket и другие протоколы

Что такое CORS и preflight-запрос?

DNS, WebSocket и другие протоколы

CORS — механизм, с которым браузер спрашивает у сервера разрешение отдать ответ другому origin; для «непростых» запросов перед основным уходит служебный preflight-запрос OPTIONS.

Origin и простые запросы

  • Origin — это тройка «схема + хост + порт». Запрос с https://app.dev на https://api.dev уже кросс-origin.
  • Простые запросы (GET и POST с ограниченным набором заголовков) уходят сразу, но ответ код получит, только если сервер прислал Access-Control-Allow-Origin.

Preflight

  • Триггеры: методы PUT и DELETE, кастомные заголовки вроде Authorization, Content-Type: application/json.
  • Браузер шлёт OPTIONS с Access-Control-Request-Method и Access-Control-Request-Headers; сервер отвечает разрешёнными методами и заголовками, Access-Control-Max-Age кеширует результат.

Нюансы

  • CORS ограничивает чтение ответа в браузере, а не сам запрос: curl и связка сервер-сервер его игнорируют.
  • Access-Control-Allow-Origin: * несовместим со включёнными credentials — нужен конкретный origin.

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

CORS — защита на стороне браузера: сервер заголовками разрешает конкретным origin читать свои ответы, а для запросов с JSON или Authorization браузер сначала шлёт OPTIONS. При отладке смотрите заголовки ответа на preflight и помните, что * не работает с credentials.

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