Ограничения в XMLHttpRequest getResponseHeader ()? - PullRequest
28 голосов
/ 18 сентября 2011

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

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

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

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

Что дает?

Ответы [ 2 ]

36 голосов
/ 18 сентября 2011

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

client .getAllResponseHeaders ()

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

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

Но так как вы делаете запрос кросс-источника, браузер должен реализовать XMLHttpRequest Уровень 2 поскольку исходный XMLHttpRequest разрешает только запросы одного и того же происхождения:

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

Здесь вы можете прочитать, что « Спецификация совместного использования ресурсов между источниками фильтрует заголовки, которые фильтруют заголовки, предоставляемые getResponseHeader () для не same-origin запросов. ».И эта спецификация запрещает доступ к любому полю заголовка ответа, кроме простых полей заголовка ответа (т.е. Cache-Control , Content-Language , Content-Тип , Истекает , Последнее изменение и Pragma ):

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

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

3 голосов
/ 18 сентября 2011

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...