Выбор ответа Junior CORS спрашивают часто обновлено

Кто проверяет CORS

Вопрос

Фронт на https://app.ru делает fetch на https://api.other.ru, сервер не отдаёт CORS-заголовков. Что происходит?

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

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

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

Коротко

Правильный ответ: Сервер получит запрос и ответит, но браузер не отдаст ответ скрипту и покажет ошибку CORS. CORS проверяет браузер, а не сервер.

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

  1. Сервер видит чужой Origin, отклоняет запрос и не запускает обработчик маршрута
  2. Сервер получит запрос и ответит, но браузер не отдаст ответ скрипту и покажет ошибку CORSправильный ответ
  3. Браузер вообще не отправляет запрос на чужой origin, даже если это простой GET
  4. Запрос проходит и скрипт получает ответ, но тело в нём пустое, а статус всегда 0

Разбор

CORS проверяет браузер, а не сервер. Простой GET уходит, сервер его обрабатывает и отвечает, после чего браузер видит, что Access-Control-Allow-Origin нет, и блокирует доступ скрипта к ответу (fetch падает с TypeError). Сервер ничего не знает о CORS и сам ничего не отклоняет. Браузер не блокирует отправку простого запроса заранее. Пустое тело со статусом 0 бывает у opaque-ответа в режиме mode: 'no-cors', а обычный fetch просто завершается ошибкой.

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

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

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