Тестер системы CORS
Ошибки типа CORS характеризуются классическим красным сигналом в консоли браузера: при запросе на API из другого источника браузер блокирует ответ. Этот тестер отправляет предварительный запрос OPTIONS по любому введённому URL, с выбранным вами источником и методом, затем декодирует заголовки Access-Control*, чтобы точно определить, что сервер разрешает, что он блокирует и почему браузер выдаёт ошибку.
Как проверить поддержку CORS
-
1
Введите целевой URL-адрес
Эндпойнт API, который необходимо вызвать из фронт-энда. Укажите строку запроса и протокол.
-
2
Установите метод и исходную точку
GET/POST/PUT/DELETE/PATCH. Оригинальный адрес может быть URL вашего сайта или любым иным адресом, который вы хотите имитировать.
-
3
Поймите preflight
Тестер всегда отправляет запрос OPTIONS с выбранными вами источником и методом, а также заголовком Access-Control-Request-Headers: Content-Type, ровно тот preflight, который браузер отправляет перед JSON-запросом.
-
4
Проведите тест
Тестер отправляет preflight и передаёт HTTP-статус, а также заголовки ответа CORS: Allow-Origin, Allow-Methods, Allow-Headers, Allow-Credentials и Max-Age.
-
5
Устраните неправильную конфигурацию
В отчёте указываются недостающие или неверные данные: отсутствие поля Allow-Origin, наличие запрещённого заголовка или использование недопустимого метода.
Важные заголовки
| Заголовок | Назначение |
|---|---|
| Access-Control-Allow-Origin | Какие источники могут читать ответ |
| Access-Control-Allow-Methods | Preflight: какие методы разрешены |
| Access-Control-Allow-Headers | Preflight: какие заголовки запроса разрешены |
| Access-Control-Allow-Credentials | Разрешены ли cookie/аутентификация |
| Access-Control-Expose-Headers | Какие заголовки ответа может читать JS |
| Access-Control-Max-Age | Сколько кэшируется результат preflight |
Простые запросы и запросы с preflight
Запрос считается «простым» (без preflight) только если выполнены все условия:
- Метод, GET, HEAD или POST.
- Заголовки ограничены Accept, Accept-Language, Content-Language, Content-Type (с определёнными значениями).
- Content-Type, если он есть, это application/x-www-form-urlencoded, multipart/form-data или text/plain.
Всё остальное, тело JSON, заголовок Authorization, пользовательский заголовок X-Foo, метод PUT/DELETE/PATCH, вызывает preflight OPTIONS. Сервер должен ответить на preflight правильными заголовками Allow-*, иначе реальный запрос так и не будет отправлен.
Частые ошибки CORS
- «No Access-Control-Allow-Origin header» → сервер не задаёт этот заголовок. Исправляйте на стороне сервера, а не клиента.
- *«Credentials mode requires Allow-Origin not to be » → если вы отправляете cookie,
Allow-Originдолжен быть конкретным источником (или возвращать заголовок Origin). - «Request header X not allowed» → добавьте X в
Access-Control-Allow-Headersв ответе на preflight. - «Method not allowed» → добавьте метод в
Access-Control-Allow-Methods. - «Redirect not allowed in preflight» → preflight не может следовать за перенаправлениями. Конечная точка OPTIONS должна отвечать напрямую.
Allow-Origin: * против возврата Origin
Access-Control-Allow-Origin: * удобен, но его нельзя сочетать с учётными данными. В продакшене возвращайте Origin из запроса (после проверки по списку разрешённых) и задавайте Allow-Credentials: true, если нужны cookie.
Прокси как обходной путь
Если вы не управляете сервером, тонкий прокси на вашем собственном домене полностью убирает CORS, браузер видит запрос как same-origin. Многие хостинговые платформы (Vercel, Netlify, Cloudflare) предлагают правила переписывания (rewrite) как раз для этого.
Часто задаваемые вопросы
Чтобы предотвратить доступ вредоносной страницы к конфиденциальным данным на другом сайте с использованием cookie вашего браузера, отсутствие CORS может позволить сайту evil.com запросить внутренний API вашего банка от имени вас. CORS обязывает банк явно разрешать чтение данных из других источников (cross-origin).
Только при разработке. У Chromium есть флаг --disable-web-security, но он затрагивает все сайты и опасен. Правильное решение, заголовки на стороне сервера или прокси.
Postman не является браузером, он полностью игнорирует механизм CORS. Использование CORS обеспечивается исключительно браузерами при запросах на JavaScript. Сервер, работающий в Postman, не обладает автоматической поддержкой стандартов CORS.
Изображения и классические теги <script> загружаются из других источников без CORS, но JavaScript не может читать их содержимое. <img crossorigin> и fetch() уже соблюдают CORS, именно поэтому без него отрисованные на canvas изображения становятся «испорченными» (tainted).
Сопутствующие инструменты
Проверка HTTP-заголовков
Осмотрите каждый HTTP-заголовок ответа, возвращаемый URL, чтобы отладить кэширование, CORS, сжатие и проблемы безопасности.
Калькулятор IP-подсетей
Рассчитайте диапазон подсети, сеть, broadcast, пригодные хосты и wildcard-маску для любого блока IPv4 CIDR с полным покрытием /0 - /32.
Определение MIME-типа файла
Установите реальный тип MIME файла, изучив его магические байты: определение изображений, видео, файлов формата PDF, архивов ZIP, офисных документов и других типов.
Инструмент проверки возраста доменных имен
Узнайте, когда домен был впервые зарегистрирован, а также его возраст в годах, месяцах и днях с использованием данных WHOIS из реестра.
CIDR-калькулятор
Рассчитайте сетевой адрес, широковещательную рассылку, диапазон хостов, используемые IP-адреса и маску подсети для любого блока IPv4 CIDR.
Домен в IP
Разрешите любое доменное имя в его адреса IPv4 (A) и IPv6 (AAAA) и скопируйте их в любой сетевой инструмент.
Инструмент доступен на других языках
- Tester CORS [PL]
- เครื่องทดสอบ CORS [TH]
- Probador de CORS [ES]
- CORSテスター [JA]
- أداة اختبار CORS [AR]
- CORS 테스터 [KO]
- Trình kiểm thử CORS [VI]
- Testeur CORS [FR]
- CORS-Tester [DE]
- Pengujian CORS [ID]
- Testador de CORS [PT]
- CORS-testare [SV]
- CORS-tester [NL]
- CORS Tester [EN]
- Tester CORS [IT]
- CORS Test Aracı [TR]
- CORS 检测仪 [ZH]