我正在使用具有许可权的Google Chrome扩展程序,"*://*/*"
并且试图将XMLHttpRequest切换到Fetch API。
该扩展存储了用户输入的登录数据,该数据以前直接放入XHR的HTTP Auth的open()调用中,但在Fetch下不再可以直接用作参数。对于HTTP Basic Auth,规避此限制是微不足道的,因为您可以手动设置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
根据Chrome的开发人员工具,这本身是正确的,但是仍然缺少大约6个字段。如果我使用resp.headers.get("WWW-Authenticate")
(或与此有关的任何其他字段),则只会得到null
。
有机会使用Fetch API进入这些其他字段吗?
当您通过CORS使用Fetch API时,访问响应标头受到限制。由于此限制,您只能访问以下标准标头:
Cache-Control
Content-Language
Content-Type
Expires
Last-Modified
Pragma
在为Google Chrome扩展程序编写代码时,您正在使用CORS,因此无法访问所有标头。如果控制服务器,则可以在响应中返回自定义信息,body
而不是headers
有关此限制的更多信息-https: //developers.google.com/web/updates/2015/03/introduction-to-fetch#response_types
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句