Выбор ответа Middle CORS обновлено
Preflight падает с 401
Вопрос
Фронт шлёт PUT с заголовком Authorization. В консоли: preflight получил 401. Глобальный guard требует токен на всех маршрутах. В чём причина?
Попробуйте сами
Выберите вариант, и откроется разбор.
Показать ответ и разбор
Коротко
Правильный ответ: Браузер шлёт preflight без Authorization, поэтому guard должен пропускать OPTIONS. Браузер сам формирует preflight и не добавляет туда Authorization и куки из запроса, только сообщает в Access-Control-Request-Headers, что они будут.
Варианты ответа
- Фронт забыл передать токен в OPTIONS-запросе, его надо добавить в заголовки preflight вручную
- Браузер шлёт preflight без
Authorization, поэтому guard должен пропускать OPTIONSправильный ответ - Нужно перевести запрос с PUT на POST: для POST с
Authorizationpreflight не нужен - Сервер должен ответить на OPTIONS кодом 401 с CORS-заголовками, и браузер повторит запрос
Разбор
Браузер сам формирует preflight и не добавляет туда Authorization и куки из запроса, только сообщает в Access-Control-Request-Headers, что они будут. Поэтому OPTIONS надо пропускать до авторизации. Фронт не управляет содержимым preflight. POST с Authorization тоже вызовет preflight. Браузер считает preflight успешным только при статусе 2xx, повторять после 401 не будет.
Ответьте сами, а не прочитайте
В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.