Почему выходные данные getAllResponseHeaders () отличаются от того, что видит браузер?

1

У меня есть простой бит кода, с которого я пытаюсь прочитать некоторые заголовки с ответом на URL:

$.ajax(manifestAnchor.href, {
    type: "HEAD"
}).done((data, textStatus, jqXHR) => {
    console.log(jqXHR.getAllResponseHeaders());
});

Что в моем тестовом примере выводит следующее:

date: Wed, 13 Sep 2017 09:44:15 GMT content-type: application/vnd.apple.mpegurl cache-control: no-cache

Однако при проверке ответа в браузере я вижу другой набор заголовков:

Изображение 174551

Почему это так?

Теги:
xmlhttprequest
http
google-chrome
cors

1 ответ

2
Лучший ответ

Ваш браузер ограничивает ваш внешний JavaScript-код доступным только для доступа к заголовкам ответов Cache-Control, Content-Language, Content-Type, Expires, Last-Modified и Pragma, если только ответ не имеет ответа Access-Control-Expose-Headers заголовок, в котором перечислены другие имена заголовков, которые браузер также должен показывать.

см. https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Access-Control-Expose-Headers

В ответе, указанном в вопросе, заголовок ответа Access-Control-Expose-Headers: Date сообщает браузеру также об Date заголовка Date. Поэтому ваш код может получить этот заголовок. Но заголовок Access-Control-Expose-Headers не отображает имена заголовков Server, Accept-Ranges или Content-Length. Таким образом, ваш код не может их получить.

И снова ваш браузер - это то, что мешает вашему коду получить от них. Сам браузер получает все заголовки ответов, и поэтому их можно увидеть в браузере devtools. Но только потому, что вы можете видеть их там, не означает, что браузер предоставит их вашему коду; браузер будет раскрывать только то, что заголовок заголовка Access-Control-Expose-Headers сообщает об этом.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню