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

Обойти CORS в разработке

Вопрос

Фронт на localhost:5173, API на localhost:3000, менять бэкенд нельзя. Какой способ рабочий?

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

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

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

Коротко

Правильный ответ: Настроить прокси dev-сервера (server.proxy в Vite) на свой origin. Прокси делает запрос с тем же origin, что у страницы, а dev-сервер уже сам ходит на API: для браузера это не кросс-доменный запрос.

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

  1. Добавить в fetch заголовок запроса Access-Control-Allow-Origin: *
  2. Указать в fetch mode: 'no-cors' и читать JSON из ответа как обычно
  3. Поставить в fetch credentials: 'omit', чтобы запрос стал простым
  4. Настроить прокси dev-сервера (server.proxy в Vite) на свой originправильный ответ

Разбор

Прокси делает запрос с тем же origin, что у страницы, а dev-сервер уже сам ходит на API: для браузера это не кросс-доменный запрос. Access-Control-Allow-Origin это заголовок ответа сервера, в запросе он бесполезен. no-cors вернёт opaque-ответ, тело которого прочитать нельзя. credentials касается кук и CORS не отменяет.

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

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

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