Тестер CORS
Тестируйте и диагностируйте заголовки Cross-Origin Resource Sharing (CORS) для любого URL
Примеры URL для тестирования
Понимание CORS
Что такое CORS?
Cross-Origin Resource Sharing (CORS) — это механизм безопасности, который позволяет веб-странице из одного источника запрашивать ресурсы из другого источника. Без CORS браузеры по умолчанию блокируют такие кросс-доменные запросы для предотвращения уязвимостей безопасности.
Как работает CORS
Когда браузер выполняет кросс-доменный запрос, он отправляет заголовок Origin. Сервер должен ответить соответствующим заголовком Access-Control-Allow-Origin. Для непростых запросов браузер сначала отправляет preflight-запрос OPTIONS, чтобы проверить, разрешён ли фактический запрос.
Ключевые заголовки CORS
Access-Control-Allow-Origin указывает разрешённые источники. Access-Control-Allow-Methods перечисляет разрешённые HTTP-методы. Access-Control-Allow-Headers определяет разрешённые заголовки запроса. Access-Control-Allow-Credentials указывает, разрешены ли cookie.
Отладка ошибок CORS
Ошибки CORS появляются в консоли браузера, когда кросс-доменный запрос блокируется. Убедитесь, что сервер включает правильные заголовки CORS. Для API убедитесь, что сервер разрешает ваш источник, необходимые методы и любые отправляемые вами пользовательские заголовки.
Тестер CORS
Тестируйте и диагностируйте заголовки Cross-Origin Resource Sharing (CORS) для любого URL
Возможности
- Send real HTTP requests to a target URL and inspect CORS-related headers in the response
- Reports Access-Control-Allow-Origin, Allow-Methods, Allow-Headers, Allow-Credentials, Max-Age
- Tests preflight (OPTIONS) and actual-request behaviour
- Runs in your browser — your request is sent FROM your origin, so the result reflects what your real app would see
- Useful for debugging CORS-blocked production fetches
Как использовать
- Введите URL, который хотите протестировать, в поле ввода или выберите один из предложенных примеров URL для быстрого тестирования.
- Выберите HTTP-метод (GET, POST и т. д.) и при необходимости добавьте пользовательские заголовки в разделе расширенных параметров.
- Нажмите «Тестировать CORS», чтобы отправить кросс-доменный запрос и просмотреть подробные результаты, включая все заголовки CORS и их значения.
Советы и лучшие практики
- Each test sends a real HTTPS request to the target URL — the URL and your IP are visible to the target server.
- CORS is enforced by the browser, not the server. The server sends headers; the browser decides whether to expose the response to JS.
- For wildcard ACAO (`Access-Control-Allow-Origin: *`), the request will succeed but credentials (cookies) won't be sent — that's the spec.
- Preflight (OPTIONS) is sent only for non-simple requests (custom headers, non-GET/POST methods, JSON body in some cases).
- If the test fails, check the browser devtools Network tab — the actual error message is more detailed than this tool can surface.
Вопросы и ответы
Что такое CORS и почему он важен для веб-разработчиков?
CORS (Cross-Origin Resource Sharing) — это функция безопасности браузера, которая контролирует, какие веб-страницы могут отправлять запросы к домену, отличному от того, с которого была загружена страница. Это важно, поскольку современные веб-приложения часто должны вызывать API на разных доменах, и без правильной настройки CORS такие запросы будут блокироваться браузером. Понимание CORS необходимо для создания приложений, взаимодействующих со сторонними API или микросервисами.
Почему я получаю ошибку CORS, хотя API работает в Postman или curl?
CORS — это политика безопасности, применяемая браузером, а не ограничение на стороне сервера. Такие инструменты, как Postman и curl, полностью обходят CORS, поскольку они не являются браузерами и не применяют политику одного источника. Браузер специально проверяет заголовки CORS в ответе сервера и блокирует запрос, если они отсутствуют или некорректны. Именно поэтому API может прекрасно работать в Postman, но не работать в браузерном приложении.
Что такое preflight-запрос и когда браузер его отправляет?
Preflight-запрос — это OPTIONS-запрос, который браузер автоматически отправляет перед фактическим запросом, чтобы проверить, разрешает ли сервер кросс-доменный запрос. Браузер отправляет preflight для запросов, использующих методы, отличные от GET, HEAD или POST, или содержащих пользовательские заголовки, или использующих значения Content-Type, отличные от application/x-www-form-urlencoded, multipart/form-data или text/plain. Сервер должен ответить с соответствующими заголовками CORS, чтобы разрешить продолжение фактического запроса.
Что означает Access-Control-Allow-Origin: * и безопасно ли это?
Подстановочное значение * означает, что сервер разрешает запросы из любого источника. Хотя это удобно для публичных API, это может быть угрозой безопасности для приватных API, обрабатывающих конфиденциальные данные. При использовании * сервер не может одновременно установить Access-Control-Allow-Credentials в значение true. Для API, требующих аутентификации, следует указывать конкретные разрешённые источники вместо использования подстановочного знака.
Как исправить ошибки CORS на моём сервере?
Чтобы исправить ошибки CORS, вам необходимо настроить сервер так, чтобы он включал соответствующие заголовки CORS в свои ответы. Как минимум, добавьте Access-Control-Allow-Origin со значением подстановочного знака (*) или конкретного запрашивающего источника. Для непростых запросов также добавьте Access-Control-Allow-Methods и Access-Control-Allow-Headers. Большинство веб-фреймворков имеют пакеты CORS-промежуточного ПО, упрощающие эту настройку, такие как cors для Express.js, django-cors-headers для Django или rack-cors для Ruby on Rails.
Действительно ли этот инструмент выполняет реальные кросс-доменные запросы?
Да, этот инструмент выполняет реальные fetch-запросы из вашего браузера к указанному URL, что означает полное применение политики CORS браузера. Если целевой сервер не включает заголовки CORS, браузер заблокирует ответ, и инструмент покажет статус «CORS заблокирован». Это даёт точное представление о том, как ваше браузерное приложение поведёт себя при выполнении того же запроса.