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

Заголовок CORS и Origin?

Когда нам нужно вызвать запрос Ajax, мы делаем:

if(typeof XMLHttpRequest !== 'undefined') xhr = new XMLHttpRequest();
else
{
    var versions = ["Microsoft.XmlHttp",
            "MSXML2.XmlHttp",
            "MSXML2.XmlHttp.3.0",
            "MSXML2.XmlHttp.4.0",
            "MSXML2.XmlHttp.5.0"
    ];

Я уже знаю, что используя XMLHttpRequest-2, мы можем сделать запрос на перекрестный поиск И, который добавлен заголовок ORIGIN.

Вопрос:

  • Когда добавляется этот заголовок?

    • Он добавляется, когда браузер (который поддерживает CORS) выполняет запрос? (кросс-домен или без кросс-домена?)
    • Или он автоматически добавляется, когда браузер "видит", что исходное происхождение запроса отличается от текущего источника...

Я имею в виду: что означает, что Он ** делает жирную линию?

HTTP-запросы Cross-origin имеют заголовок Origin. Этот заголовок предоставляет серверу исходный запрос. Этот заголовок защищены браузером и не могут быть изменены из кода приложения. По сути, это сетевой эквивалент свойства происхождения найден на событиях сообщений, используемых в приложении Cross Document Messaging. Заголовок заголовка отличается от старшего заголовка referer [sic] тем, что референт является полный URL, включая путь. Поскольку путь может содержать конфиденциальная информация, референт иногда не отправляется браузерами пытаясь защитить конфиденциальность пользователей. Однако браузер всегда будет при необходимости отправьте необходимые заголовки Origin.

4b9b3361

Ответ 1

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

Когда этот заголовок добавлен?

Во время этапа заголовка, перед отправкой тела документа (после open, перед send).

Он добавляется, когда браузер (который поддерживает CORS) выполняет запрос? (кросс-домен или без кросс-домена?)

Он добавляется, когда источник не соответствует странице, с которой создается XMLHttpRequest, но может также отправляться в запросе с тем же исходным кодом.

Или он автоматически добавляется, когда браузер "видит", что исходное происхождение запроса отличается от текущего источника...

Да.

Однако при необходимости браузер всегда будет отправлять необходимые заголовки Origin.

Это часть спецификации XMLHttpRequest; если вы делаете кросс-доменный запрос, в заголовках запроса отправляется дополнительный заголовок. Этот заголовок, например, Origin: http://www.stackoverflow.com и добавляется стандартным браузером без взаимодействия с пользователем.


Подробнее о спецификации вы можете узнать в разделе безопасности MozillaWiki, WHATWG и html5.org. Он реализован (что я знаю) FireFox и Google Chrome. Я не думаю, что это часть W3C. Далее не предполагайте, что заголовок источника имеет значение true, поскольку его можно настроить вручную с помощью измененных серверов или другого программного обеспечения.

Ответ 2

Заголовок происхождения добавляется автоматически (обычно), когда вы выполняете запрос кросс-домена.

Чтобы проверить это, я открыл консоль на этой странице и сделал два разных запроса: один для другого домена и один для '/', и только первый получил добавленный заголовок источника.

Кстати, я использую JQuery для этого, и я бы действительно посоветовал вам использовать его для того, чтобы иметь одинаковый кросс-браузер.

Для дополнительной информации по этому вопросу проверьте следующее:

Прежде всего следует отметить, что действительный запрос CORS всегда содержит заголовок Origin. Этот заголовок Origin добавляется браузером и может не контролируется пользователем. Значение этого заголовка - это схема (например, http), домен (например, bob.com) и порт (включается только в том случае, если это не порт по умолчанию, например. 81), из которого возникает запрос; для Пример: http://api.alice.com.

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

Источник