Сеть/HTTP

CORS Checker / Explainer

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

Credentials (fetch)

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

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

CORS (Cross-Origin Resource Sharing) — механизм браузера, решающий, разрешить ли JavaScript с одного сайта читать ответ с сервера на другом домене. Инструмент объясняет пошагово, пройдёт ли конкретный запрос, и какие заголовки Access-Control-* для этого нужны.

Как пользоваться

Типичные сценарии

Что стоит помнить

CORS — это защита браузера пользователя, а не сервера: ограничения действуют только для запросов из кода страницы в браузере, а не для запросов из curl, Postman или сервера к серверу.

Access-Control-Allow-Origin: * несовместим с credentials: include — для запросов с cookie или авторизацией сервер должен вернуть конкретный origin, а не звёздочку.

Статья об этом инструменте: 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 нужно читать снизу вверх, чтобы проследить путь письма.