Выбор ответа Junior CORS обновлено
Обойти CORS в разработке
Вопрос
Фронт на localhost:5173, API на localhost:3000, менять бэкенд нельзя. Какой способ рабочий?
Попробуйте сами
Выберите вариант, и откроется разбор.
Показать ответ и разбор
Коротко
Правильный ответ: Настроить прокси dev-сервера (server.proxy в Vite) на свой origin. Прокси делает запрос с тем же origin, что у страницы, а dev-сервер уже сам ходит на API: для браузера это не кросс-доменный запрос.
Варианты ответа
- Добавить в fetch заголовок запроса
Access-Control-Allow-Origin: * - Указать в fetch
mode: 'no-cors'и читать JSON из ответа как обычно - Поставить в fetch
credentials: 'omit', чтобы запрос стал простым - Настроить прокси dev-сервера (
server.proxyв Vite) на свой originправильный ответ
Разбор
Прокси делает запрос с тем же origin, что у страницы, а dev-сервер уже сам ходит на API: для браузера это не кросс-доменный запрос. Access-Control-Allow-Origin это заголовок ответа сервера, в запросе он бесполезен. no-cors вернёт opaque-ответ, тело которого прочитать нельзя. credentials касается кук и CORS не отменяет.
Ответьте сами, а не прочитайте
В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.