Выбор ответа Senior HTTP для тестировщика обновлено

Откуда в логах лишний OPTIONS

Вопрос

Фронтенд с https://app.shop.ru шлёт PUT с JSON на https://api.shop.ru. В DevTools перед ним виден OPTIONS к тому же адресу. Что это?

Попробуйте сами

Выберите вариант, и откроется разбор.

Показать ответ и разбор

Коротко

Правильный ответ: CORS preflight: браузер спрашивает, разрешён ли кросс-доменный запрос. Для «непростых» кросс-доменных запросов (метод не GET/HEAD/POST, JSON в Content-Type, свои заголовки) браузер сначала шлёт preflight OPTIONS с Origin и Access-Control-Request-Method.

Варианты ответа

  1. CORS preflight: браузер спрашивает, разрешён ли кросс-доменный запросправильный ответ
  2. Баг фронтенда: запрос отправился дважды, первым с методом по умолчанию
  3. Проверка TLS-сертификата api.shop.ru перед отправкой тела запроса
  4. Автоматический повтор после ошибки, браузер шлёт его перед PUT

Разбор

Для «непростых» кросс-доменных запросов (метод не GET/HEAD/POST, JSON в Content-Type, свои заголовки) браузер сначала шлёт preflight OPTIONS с Origin и Access-Control-Request-Method. Сервер отвечает заголовками Access-Control-Allow-*, и только потом уходит настоящий PUT. Это не дубль и не ретрай. TLS проверяется на уровне соединения, отдельным HTTP-запросом это не видно. Из Postman preflight не шлётся, поэтому «в Postman работает, в браузере нет» часто про CORS.

Ответьте сами, а не прочитайте

В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.