我處於Google Chrome擴展程序,其權限爲"*://*/*"
,我試圖從XMLHttpRequest切換到Fetch API。使用Fetch API讀取響應標頭
擴展存儲用戶輸入的登錄數據,這些數據以前直接放入XHR的open()調用中進行HTTP身份驗證,但在Fetch下不能再直接用作參數。對於HTTP基本認證,避開這種限制是微不足道的,因爲你可以手工設置Authorization頭:
fetch(url, {
headers: new Headers({ 'Authorization': 'Basic ' + btoa(login + ':' + pass) })
} });
HTTP Digest Auth但是需要更多的交互;您需要讀取服務器通過401響應發送的參數來製作有效的授權令牌。我試着讀WWW-Authenticate
響應報頭字段在這個片段:
fetch(url).then(function(resp) {
resp.headers.forEach(function(val, key) { console.log(key + ' -> ' + val); });
}
但我得到的是這樣的輸出:
content-type -> text/html; charset=iso-8859-1
這本身是正確的,但是這仍下落不明周圍6個領域根據Chrome的開發者工具。如果我使用resp.headers.get("WWW-Authenticate")
(或任何其他領域的事),我只得到null
。
任何使用Fetch API訪問其他字段的機會?
@jules CORS的這個限制遵循'access-control-expose-headers'中的值,或者可能是'access-control-allow-headers'(我們把它放在兩個中)。 – jacob
'access-control-expose-headers'爲我處理從服務器返回的頭文件 - 然後頭文件可通過獲取響應頭文件對象獲得。 'access-control-allow-headers'用於允許服務器上的請求標題(或者我從服務器收到錯誤消息) – specimen
這對於Fetch來說不可能實現,但可以通過XmlHttpRequest完成。如果解決方法仍有可能,安全優勢如何? – sebas