ESC

Настройка CORS

Access-Control-Allow-Origin
Access-Control-Allow-Methods
Access-Control-Allow-Headers
Access-Control-Expose-Headers
Access-Control-Max-Age
секунд
Access-Control-Allow-Credentials
Нельзя использовать с подстановочным знаком (*) для origin

Сгенерированный результат

Настройте параметры для генерации CORS-заголовков...
Настройте параметры для генерации CORS-заголовков...
Настройте параметры для генерации CORS-заголовков...
Настройте параметры для генерации CORS-заголовков...
Настройте параметры для генерации CORS-заголовков...
Вся обработка происходит в вашем браузере. Данные не отправляются на сервер.

Примеры использования

Открытый публичный API

Разрешить любому источнику выполнять GET и POST запросы. Подходит для публичных API, обслуживающих любые сайты.

Внутреннее приложение с авторизацией

Ограничить доступ конкретными источниками с поддержкой учётных данных. Идеально для внутренних приложений с аутентификацией.

API только для чтения

Конфигурация API только для чтения, разрешающая GET-запросы с любого источника и предоставляющая заголовки пагинации.

Возможности

Полная настройка

Настройте все CORS-заголовки: origin, methods, headers, credentials и max-age

Поддержка нескольких серверов

Готовые фрагменты конфигурации для Nginx, Apache, Node.js/Express и PHP

Пользовательские источники и заголовки

Добавляйте несколько источников и заголовков через удобный интерфейс тегов

Конфиденциальность

Вся обработка происходит локально в вашем браузере, данные не отправляются на серверы

Как использовать?

1

Настройте параметры

Укажите разрешённые источники, HTTP-методы, заголовки, max-age и параметры credentials.

2

Выберите формат вывода

Переключайтесь между форматами HTTP-заголовков, Nginx, Apache, Node.js или PHP.

3

Скопируйте и разверните

Скопируйте сгенерированную конфигурацию и добавьте её в настройки вашего сервера.

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

CORS (Cross-Origin Resource Sharing) — это механизм безопасности браузера, который блокирует JavaScript на одном origin от отправки запросов к другому origin, если только сервер явно не разрешает это. Без CORS вредоносная страница могла бы использовать активную сессию для отправки запросов к другим сервисам. CORS-заголовки на сервере сообщают браузеру: «этому origin можно доверять.»

Спецификация CORS явно запрещает совместное использование Access-Control-Allow-Origin: * и Access-Control-Allow-Credentials: true. Когда задействованы credentials (куки, заголовки Authorization), сервер должен вернуть точный origin запроса, а не подстановочный символ. Это предотвращает использование любым сайтом учётных данных вошедшего в систему пользователя для аутентифицированных API-вызовов.

Предварительный OPTIONS-запрос отправляется перед любым «несimple» запросом. Простые запросы используют GET или POST только со стандартными заголовками. Несimple-запросы включают: методы PUT, DELETE, PATCH; пользовательские заголовки (Authorization, X-API-Key и др.); Content-Type application/json. Ваш сервер должен отвечать на OPTIONS-запросы соответствующими заголовками Allow-*.

Max-Age сообщает браузеру, сколько секунд кэшировать ответ на preflight-запрос. Распространённое значение — 86400 (24 часа). Это снижает количество preflight-запросов в продакшне. Установите 0 в процессе разработки, чтобы избежать проблем с кешированием.

По умолчанию JavaScript может читать лишь ограниченный набор «безопасных» заголовков ответа. Если ваш API возвращает пользовательские заголовки, такие как X-Total-Count или X-Request-Id, необходимо перечислить их в Access-Control-Expose-Headers. Без этого JavaScript увидит эти заголовки как undefined, даже если они присутствуют в HTTP-ответе.

Выберите «Указать источники» и добавьте каждый доверенный origin отдельно (например, https://app.example.com). Спецификация CORS не поддерживает несколько значений в одном заголовке. При нескольких origins сервер должен динамически сверять заголовок Origin запроса со списком разрешённых и возвращать совпадающий. Сгенерированные конфигурации Nginx/Apache/Node.js содержат эту логику.

HTTP-заголовки (raw-значения), Nginx (директивы add_header), Apache (.htaccess с директивами Header set), Node.js/Express (middleware с пакетом cors или ручными вызовами res.setHeader) и PHP (вызовы функции header()). Переключайтесь между вкладками для просмотра каждого формата.

Нет. Всё работает в вашем браузере. Ничего не отправляется на сервер и нигде не сохраняется.

Что такое CORS и зачем он нужен?

CORS (Cross-Origin Resource Sharing) — это механизм безопасности браузера, контролирующий, какие домены могут отправлять запросы к вашему API. По умолчанию браузеры блокируют кросс-доменные запросы — скрипт на example.com не может обратиться к api.otherdomain.com. CORS-заголовки сообщают браузеру: «всё в порядке, я доверяю этому источнику». Без правильной настройки CORS ваш фронтенд получит непрозрачные ошибки «blocked by CORS policy», которые печально известны своей бесполезностью.

Почему настройка CORS вызывает трудности

CORS включает множество заголовков, которые взаимодействуют неочевидным образом. Allow-Origin может быть конкретным доменом или *, но не оба варианта одновременно с credentials. Allow-Methods и Allow-Headers должны совпадать с тем, что клиент отправляет в предварительном запросе. Max-Age контролирует время кэширования результатов preflight. Пропустите любой из них — и ваши API-вызовы завершатся загадочными ошибками. Этот инструмент позволяет настроить всё визуально и выдаёт готовые конфигурации для Nginx, Apache, Node.js и PHP.

Типичные ошибки CORS

Ошибка номер один — установить Allow-Origin в *, одновременно включив credentials: браузер это отклонит. Вторая — забыть обработать предварительные OPTIONS-запросы на сервере, из-за чего PUT/DELETE/PATCH перестают работать. Третья — не раскрыть пользовательские заголовки ответа через Expose-Headers, делая их невидимыми для JavaScript. Этот инструмент предупреждает о таких проблемах при настройке.

Предварительные запросы (Preflight)

Перед отправкой «сложного» запроса (всё, что выходит за рамки простых GET/POST со стандартными заголовками) браузер отправляет OPTIONS-запрос: «это разрешено?» Сервер должен ответить соответствующими Allow-заголовками. Если нет — фактический запрос вообще не отправится. Заголовок Max-Age указывает браузеру, как долго кэшировать ответ preflight, чтобы не спрашивать заново при каждом запросе.

Конфиденциальность

Ваша конфигурация CORS не покидает ваш браузер. Никаких обращений к серверу, никакого хранения, никакого отслеживания. Инструмент полностью работает на JavaScript.

Безопасность и конфиденциальность

Безопасность ваших данных — наш приоритет

Локальная обработка

Вся обработка происходит в вашем браузере

Без передачи данных

Ваши данные не отправляются на наши серверы

Без хранения данных

Данные не хранятся и не передаются

SSL-шифрование

SSL-шифрование для безопасного соединения

Также на MoreOnlineTools