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

Ограничения XMLHttpRequest getResponseHeader()?

Я заметил, что результаты и XMLHttpRequest.getResponseHeader() не всегда соответствуют возвращенным реальным заголовкам (если запрос выполняется обычным образом).

Например, предположим, что я делаю запрос xhr для https://foo.example.com/api/resource/100. В консоли разработчика Chrome в разделе "Сеть" я вижу ответ, который я принимаю, - я также могу видеть все заголовки ответов (например, 10). Однако (скопированная консоль):

> response
  XMLHttpRequest
> response.getAllResponseHeaders();
  "content-type: text/html
  " 

Существуют ли какие-либо ограничения на то, какие заголовки доступны? Это зависит от типа ответа? Я помню, что получил полный набор заголовков для 404, но только для 400-х.

Что дает?

4b9b3361

Ответ 1

Текущее состояние стандартизации API XMLHttpRequest ограничивает доступ к полям заголовка Set-Cookie и Set-Cookie2:

client.getAllResponseHeaders()

Возвращает все заголовки из ответа, за исключением тех, чье имя поля Set-Cookie или Set-Cookie2.

Любое другое поле заголовка должно быть возвращено.

Но поскольку вы делаете запрос с кросс-началом, браузеру необходимо реализовать XMLHttpRequest Level 2, поскольку исходное XMLHttpRequest делает только одноименное начало запросы:

Спецификация XMLHttpRequest Level 2 расширяет объект XMLHttpRequest новыми функциями, такими как запросы с кросс-началом [...]

Там вы можете прочитать, что " Спецификация совместного использования ресурсов Cross-Origin фильтрует заголовки, которые фильтруют заголовки, которые отображаются getResponseHeader() для non same-origin запросов.". И эта спецификация запрещает доступ к любому полю заголовка ответа, за исключением простых полей заголовка ответа (например, Cache-Control, Content-Language, Content-Type, Expires, Last-Modified и Pragma):

Пользовательские агенты должны отфильтровывать все заголовки ответов, отличные от тех, которые являются простыми заголовками ответа [...]

например. поэтому метод getResponseHeader() XMLHttpRequest не будет показывать какой-либо заголовок, не указанный выше.

Ответ 2

Это заголовок Access-Control-Allow-Origin и способ, позволяющий предотвратить отображение заголовков в браузере. Документы в mozilla.