我注意到和XMLHttpRequest.getResponseHeader()
的结果并不总是与返回的实际标头匹配(如果请求是以常规方式进行的)。
例如,假设我正在为xhr
发出https://foo.example.com/api/resource/100
请求。在Chrome的开发者控制台中,在“网络”下,我可以看到正在做出的响应 - 我还可以看到所有响应标头(例如,10)。但是(复制粘贴的控制台):
> response
XMLHttpRequest
> response.getAllResponseHeaders();
"content-type: text/html
"
对哪些标头可用有任何限制吗?这取决于响应类型吗?我记得为404s获得了一套完整的标题,但这只是400s的标题。
是什么给出了?
答案 0 :(得分:36)
标准化XMLHttpRequest API的当前状态仅限制对 Set-Cookie 和 Set-Cookie2 标头字段的访问:
<强> 客户端 .getAllResponseHeaders()强>
返回响应中的所有标头,但字段名称为
Set-Cookie
或Set-Cookie2
的标头除外。
应该返回任何其他标题字段。
但是当您正在进行跨源请求时,浏览器需要实现XMLHttpRequest Level 2,因为原始XMLHttpRequest只允许同源请求:
XMLHttpRequest Level 2规范使用新功能增强XMLHttpRequest对象,例如跨源请求[...]
您可以看到“Cross-Origin Resource Sharing specification过滤了标题,这些标题会过滤getResponseHeader()针对非same-origin请求公开的标题。”该规范禁止访问除simple response header fields以外的任何响应头字段(即 Cache-Control , Content-Language , Content-Type , Expires , Last-Modified 和 Pragma ):
用户代理必须过滤掉除简单响应标题[...]
之外的所有响应标头E.g。因此,XMLHttpRequest的
getResponseHeader()
方法不会暴露任何未在上面指出的标题。
答案 1 :(得分:3)
这是Access-Control-Allow-Origin
标头以及它允许阻止哪些标头暴露给浏览器的方式。 Docs at mozilla