CORS-чекер
Проверьте, принимает ли API запросы с вашего origin. Делает preflight OPTIONS и реальный запрос, показывает все Access-Control-*-заголовки.
Что такое CORS?
CORS (Cross-Origin Resource Sharing) — механизм безопасности браузера. По умолчанию скрипт на https://a.com не может прочитать ответы с https://b.com. Сервер на b.com должен разрешить это, отправив заголовки Access-Control-Allow-Origin. Для не-простых запросов (POST с JSON, кастомные заголовки и т.д.) браузер сначала шлёт OPTIONS "preflight" для проверки прав — если ответ не разрешает ваш origin, метод или заголовки, реальный запрос блокируется и вы видите CORS-ошибку в DevTools.
CORS response-заголовки подробно
Access-Control-Allow-OriginУказывает, какой origin разрешён. Конкретный origin, "*" (любой) или эхо origin запроса.
Access-Control-Allow-CredentialsЕсли "true", браузер шлёт cookies/auth. Несовместимо с Allow-Origin: *.
Access-Control-Allow-MethodsКакие HTTP-методы разрешает сервер. Актуально только в preflight-ответе.
Access-Control-Allow-HeadersКакие request-заголовки разрешает сервер. Актуально для нестандартных — Authorization, кастомные X-*.
Access-Control-Expose-HeadersКакие response-заголовки браузер отдаёт JavaScript. По умолчанию короткий safelist.
Access-Control-Max-AgeСколько секунд браузер может кешировать preflight-результат. Большие значения снижают число OPTIONS-запросов.
FAQ CORS-чекера
Почему браузер показывает CORS-ошибки, а этот инструмент — заголовки?
CORS обеспечивает браузер, не сервер. Этот инструмент работает на нашем бэкенде, поэтому CORS-правила не применяются — мы видим сырой ответ. Браузер блокирует запрос на клиенте по заголовкам Access-Control-*. Если показанные здесь заголовки не совпадают с вашим origin/методом/заголовками — браузер заблокирует, даже если сервер ответил.
Что такое preflight OPTIONS-запрос?
Для "не простых" cross-origin-запросов (всё, что сложнее простого GET/HEAD/POST с базовыми заголовками) браузер сначала шлёт OPTIONS с вопросом «можно ли этот запрос?». Сервер отвечает Access-Control-Allow-Methods, Allow-Headers и Allow-Origin. Если разрешают реальный запрос — браузер идёт дальше. Иначе блокирует.
Почему Access-Control-Allow-Origin: * недостаточно для моего запроса?
Если запрос содержит credentials (cookies, Authorization-заголовок, TLS-клиентский сертификат), браузер отклоняет "*" и требует конкретный origin. Сервер должен вернуть ваш точный origin в Access-Control-Allow-Origin и установить Access-Control-Allow-Credentials: true.
Действует ли CORS для server-to-server-запросов?
Нет. CORS — фича безопасности только в браузере. curl, Node fetch на сервере, Postman или любой не-браузерный клиент CORS не учитывают. Если видите «ошибку CORS» вне браузера — реальная причина в другом (сеть, auth, неверный URL).
Как исправить CORS-ошибку?
Чинить на сервере, не на клиенте. Выставьте правильный Access-Control-Allow-Origin (origin фронта), Allow-Methods (используемые GET/POST и т.д.) и Allow-Headers (кастомные/auth). Для credentials добавьте Allow-Credentials: true. Обрабатывайте OPTIONS и возвращайте 2xx. Браузерные расширения, отключающие CORS — дев-костыль, реальное приложение не должно на них полагаться.