Сеть/HTTP

CORS Checker / Explainer

Пошагово объяснить, разрешит ли браузер кросс-доменный запрос — simple/preflight-классификация, проверка Access-Control-* заголовков ответа, итог.

Credentials (fetch)

По одному на строку, "Имя" или "Имя: значение" — значение на классификацию не влияет.

Возьмите из вкладки Network в DevTools (заголовки самого ответа или preflight OPTIONS) или curl -I.

CORS (Cross-Origin Resource Sharing) is a browser mechanism that decides whether JavaScript from one site is allowed to read a response from a server on a different domain. This tool walks through, step by step, whether a specific request will succeed and which Access-Control-* headers it needs.

How to use it

Common uses

Things to keep in mind

CORS protects the user's browser, not the server — the restriction only applies to requests made from page JavaScript in a browser, not to requests from curl, Postman, or server-to-server calls.

Access-Control-Allow-Origin: * is incompatible with credentials: include — for requests carrying cookies or authorization, the server must return a specific origin instead of a wildcard.

Статья об этом инструменте: CORS: почему браузер блокирует "обычные" запросы к другому домену

Часто задаваемые вопросы

Почему запрос завершается ошибкой CORS, хотя сервер ответил успешно?

CORS применяется браузером, а не сервером — если в ответе отсутствует заголовок Access-Control-Allow-Origin, соответствующий источнику запроса, браузер блокирует чтение ответа через JavaScript, хотя сам запрос завершился успешно.

В чём разница между простым запросом и запросом с предварительной проверкой (preflight)?

Простые запросы (базовые GET/POST со стандартными заголовками) проходят напрямую, а запросы с пользовательскими заголовками, другими методами или определёнными типами контента сначала вызывают предварительный запрос OPTIONS для проверки разрешения перед отправкой настоящего запроса.

Отправляет ли проверка заголовков CORS здесь мои данные на сервер?

Инструмент проверяет заголовки, которые вы предоставляете, или получает их напрямую из вашего браузера — ни один промежуточный сервер не хранит данные вашего запроса.

Защищает ли CORS API от вредоносных запросов?

Нет. CORS ограничивает лишь то, что браузер разрешит прочитать JavaScript-коду на странице — злоумышленник может отправить тот же запрос напрямую через curl или скрипт, минуя браузер и любые CORS-ограничения полностью.

Почему Access-Control-Allow-Origin: * не работает вместе с credentials: include?

Спецификация запрещает это сочетание намеренно — разрешить любому сайту читать ответы вместе с cookie или авторизацией пользователя было бы серьёзной дырой в безопасности, поэтому в таком случае сервер должен вернуть конкретный Origin, а не "*".

Статьи: Сеть/HTTP

Разбор URL: из каких частей состоит веб-адрес

Почему в URL есть часть после символа #, которую сервер даже не получает.

Query String против JSON: почему GET-параметры такие ограниченные

Почему передать массив или вложенный объект через query string URL не так просто, как через JSON.

User-Agent: почему эта строка такая запутанная

Почему Chrome, Safari и Edge все содержат в User-Agent слова "Mozilla" и "Safari" одновременно.

Basic Authentication: как простейший способ аутентификации работает в HTTP

Почему Basic Auth обязательно требует HTTPS, ведь Base64 — это не шифрование, а лишь кодирование.

HTTP-заголовки: что скрыто в каждом запросе и ответе

Почему заголовок Content-Type определяет, как браузер интерпретирует тело ответа сервера.

Cookies: как небольшой кусок текста хранит состояние сессии

Почему атрибут HttpOnly защищает cookie от кражи через вредоносный JavaScript-код.

Заголовки email: как проследить путь письма от отправителя до вас

Почему заголовки Received нужно читать снизу вверх, чтобы проследить путь письма.