Подтвердить что ты не робот

Chrome добавляет заголовок Origin к тому же самому запросу

Мы отправляем запрос AJAX на сервер, работающий локально, т.е.

xhr.open("POST", "http://localhost:9000/context/request");
xhr.addHeader(someCustomHeaders);
xhr.send(someData);

Страница, выполняемая этим javascript, также отправляется с localhost: 9000, т.е. это полностью похоже на запрос того же происхождения.

Однако по какой-то причине Google Chrome всегда задает заголовок Origin в результате запроса, заставляя наш сервер блокировать запрос на основании ложного предположения, которое запросит CORS.

Это не происходит в Firefox.

Кроме того, ни Firefox, ни Chrome не отправляют запрос предварительной проверки OPTIONS, что путает; зачем устанавливать заголовок Origin без предварительного предпросмотра, чтобы сервер Origin и пользовательские заголовки разрешались сервером?

Кто-нибудь знает, что происходит в этом случае? Мы не понимаем специфика CORS?

4b9b3361

Ответ 1

Chrome и Safari включают заголовок Origin в однопользовательских запросах POST/PUT/DELETE (запросы GET того же происхождения не будут иметь заголовок Origin). Firefox не включает заголовок Origin для запросов с одним и тем же источником. Браузеры не ожидают заголовки ответов CORS при запросах с одним и тем же источником, поэтому ответ на один и тот же запрос отправляется пользователю независимо от того, имеет ли он заголовки CORS или нет.

Я бы рекомендовал проверить заголовок Host, и если он соответствует домену в заголовке Origin, не обрабатывайте запрос как CORS. Заголовки выглядят примерно так:

Host: example.com
Origin: http://example.com

Обратите внимание, что Origin будет иметь схему (http/https), домен и порт, а Host будет иметь только домен и порт.

Ответ 2

В соответствии с RFC 6454 - Концепция Web Origin - наличие Origin на самом деле является законным для любого HTTP-запроса, включая запросы с одинаковым исходным кодом:

http://tools.ietf.org/html/rfc6454#section-7.3

"Пользовательский агент МОЖЕТ включать поле заголовка Origin в любом HTTP-сообщении запрос".