2017-09-13 81 views
1

我有一個簡單的代碼位與我試圖讀出一個URL響應一些標題:爲什麼getAllResponseHeaders()輸出與瀏覽器看到的不同?

$.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

然而,當檢查瀏覽器中的響應時,我看到一組不同的標頭:

enter image description here

這是爲什麼?

回答

2

您的瀏覽器限制你的前端JavaScript代碼只能夠訪問Cache-ControlContent-LanguageContent-TypeExpiresLast-ModifiedPragma響應頭,除非響應具有Access-Control-Expose-Headers響應頭列出其他頭名,瀏覽器應也暴露。

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

在問題所示的響應的情況下,Access-Control-Expose-Headers: Date響應頭告訴瀏覽器也暴露Date報頭。因此你的代碼能夠得到這個頭文件。但是Access-Control-Expose-Headers標題並未列出ServerAccept-RangesContent-Length標題名稱。所以你的代碼無法獲得這些。

再一次,你的瀏覽器是什麼阻止你的代碼獲取這些。瀏覽器本身獲取所有的響應標題,這就是爲什麼你可以在瀏覽器devtools中看到它們的原因。但僅僅因爲你可以看到它們並不意味着瀏覽器會將它們暴露給你的代碼;瀏覽器將只公開Access-Control-Expose-Headers標題告訴它公開的內容。

相關問題