Все инструменты

CORS tester

Назовите URL, к которому обращаетесь, и источник, откуда обращаетесь. Мы сделаем запрос со своего сервера и скажем, какой заголовок Access-Control отсутствует или неверен.

Запрос, который вы хотите сделать

Полный URL, куда идёт запрос, вместе с путём.
Схема и хост, с которых отдаётся ваша страница, без пути.
Через запятую; оставьте пустым, если запрос не отправляет собственных заголовков. content-type считается вашим собственным заголовком: будет ли браузер делать предварительный запрос, зависит от отправленного значения. Об обычных вроде accept мы не спрашиваем, потому что браузер тоже о них не спрашивает.

Этот инструмент работает на наших серверах. Мы делаем запрос с публичного адреса и показываем вернувшиеся заголовки, а ваши cookie и тело запроса не отправляем никогда.

Что такое CORS и что такое предварительный запрос

Браузер не даст одному источнику прочитать ответ другого, пока второй этого не разрешит. Разрешает он заголовком Access-Control-Allow-Origin в ответе. Для всего, что сложнее обычного GET или POST с рядовыми заголовками, браузер сначала спрашивает запросом OPTIONS, который называют предварительным, и отправляет настоящий запрос, только если ответ допускает метод и заголовки, которые он собирается использовать.

Как читать вердикт

Каждая строка это один заголовок, на который смотрит браузер, и рядом значение, которое пришло. Строка, помеченная как неудачная, это причина блокировки, и в шапке названа первая из них, потому что чинить надо с неё. Строки, помеченные как справочные, сами по себе ничего не меняют. Ниже приведены точный запрос, который мы отправили, и вернувшиеся заголовки, чтобы вы могли передать весь обмен тому, кто держит сервер.

Какой заголовок какую неудачу исправляет

Access-Control-Allow-Origin отправляют первым, и он должен называть ваш источник точно, вместе со схемой и портом, либо быть звёздочкой. Access-Control-Allow-Methods и Access-Control-Allow-Headers имеют значение только в предварительном запросе, и каждый обязан перечислять то, о чём спросил браузер. Access-Control-Allow-Credentials должен быть строкой true, прежде чем пойдут cookie, и не сочетается с источником-звёздочкой. Access-Control-Expose-Headers это то, что позволяет JavaScript читать что-то помимо горстки заголовков, которые браузеры отдают по умолчанию.

Перестаньте гадать, какой заголовок сервер не прислал

Заблокированный запрос снаружи выглядит одинаково, в чём бы ни было дело. Session Replay записывает запрос, заголовки ответа и строку консоли вместе, поэтому у следующего человека сразу всё перед глазами.