Ошибка CORS: blocked by CORS policy
Коротко: Браузер блокирует ответ с чужого источника, потому что сервер явно не разрешил этой странице доступ к нему.
Подробнее: Сообщение в консоли: Access to fetch at 'https://api.example.com' from origin 'https://my-site.com' has been blocked by CORS policy: No 'Access-Control-Allow-Origin' header is present on the requested resource. Это защита браузера, а не сервера: запрос дошёл, но страница не может прочитать ответ.
Подробности
Зачем это нужно
Политика одного источника (same-origin policy) не даёт странице (источник A) читать данные источника B. Источник состоит из протокола, хоста и порта. CORS позволяет серверу B давать избранным источникам доступ через заголовки. Для «непростых» запросов (JSON с Authorization, PUT/DELETE) браузер сначала отправляет предварительный запрос (preflight) (OPTIONS).
Типичные причины
- Сервер не отправляет
Access-Control-Allow-Origin. - Источник не совпадает (
httpиhttps,wwwи без, другой порт, опечатка). - Preflight (
OPTIONS) не обрабатывается или возвращает 404/401. Access-Control-Allow-Headersили-Methodsне содержат отправляемого.- При cookie/учётных данных
Access-Control-Allow-Originне должен быть*, а нужно задатьAccess-Control-Allow-Credentials: true. - Страница ошибки (500/502) не содержит заголовков CORS и маскируется под ошибку CORS.
Решения
- На сервере задайте разрешённый источник:
Access-Control-Allow-Origin: https://my-site.comи при необходимости-Methods,-Headers,-Max-Age. (Express: пакетcors; Next.js: заголовки в обработчиках маршрутов/next.config.) - Отвечайте на preflight
OPTIONSкодом 204. - В разработке используйте прокси (Vite/Next
rewrites), чтобы браузер обращался только к собственному источнику. - Не используйте
*вместе с cookie; проверяйте источники по списку разрешённых источников и возвращайте их обратно. - Посмотрите вкладку «Сеть» (F12): какой ответ и какие заголовки действительно вернулись?
Расширения браузера для CORS «решают» только вашу локальную проблему, а не проблему пользователей.
См. также: CORS, HTTP-заголовки