Кто проверяет CORS
Вопрос
Фронт на https://app.ru делает fetch на https://api.other.ru, сервер не отдаёт CORS-заголовков. Что происходит?
Попробуйте сами
Выберите вариант, и откроется разбор.
Показать ответ и разбор
Коротко
Варианты ответа
- Сервер видит чужой Origin, отклоняет запрос и не запускает обработчик маршрута
- Сервер получит запрос и ответит, но браузер не отдаст ответ скрипту и покажет ошибку CORSправильный ответ
- Браузер вообще не отправляет запрос на чужой origin, даже если это простой GET
- Запрос проходит и скрипт получает ответ, но тело в нём пустое, а статус всегда 0
Разбор
CORS проверяет браузер, а не сервер. Простой GET уходит, сервер его обрабатывает и отвечает, после чего браузер видит, что Access-Control-Allow-Origin нет, и блокирует доступ скрипта к ответу (fetch падает с TypeError). Сервер ничего не знает о CORS и сам ничего не отклоняет. Браузер не блокирует отправку простого запроса заранее. Пустое тело со статусом 0 бывает у opaque-ответа в режиме mode: 'no-cors', а обычный fetch просто завершается ошибкой.
Ответьте сами, а не прочитайте
В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.