Выбор ответа Middle CORS обновлено

Preflight падает с 401

Вопрос

Фронт шлёт PUT с заголовком Authorization. В консоли: preflight получил 401. Глобальный guard требует токен на всех маршрутах. В чём причина?

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

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

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

Коротко

Правильный ответ: Браузер шлёт preflight без Authorization, поэтому guard должен пропускать OPTIONS. Браузер сам формирует preflight и не добавляет туда Authorization и куки из запроса, только сообщает в Access-Control-Request-Headers, что они будут.

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

  1. Фронт забыл передать токен в OPTIONS-запросе, его надо добавить в заголовки preflight вручную
  2. Браузер шлёт preflight без Authorization, поэтому guard должен пропускать OPTIONSправильный ответ
  3. Нужно перевести запрос с PUT на POST: для POST с Authorization preflight не нужен
  4. Сервер должен ответить на OPTIONS кодом 401 с CORS-заголовками, и браузер повторит запрос

Разбор

Браузер сам формирует preflight и не добавляет туда Authorization и куки из запроса, только сообщает в Access-Control-Request-Headers, что они будут. Поэтому OPTIONS надо пропускать до авторизации. Фронт не управляет содержимым preflight. POST с Authorization тоже вызовет preflight. Браузер считает preflight успешным только при статусе 2xx, повторять после 401 не будет.

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

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

Термины по теме