mal*_*ree 29 javascript http xmlhttprequest
我注意到XMLHttpRequest.getResponseHeader()返回的实际标头的结果并不总是匹配(如果请求是以常规方式进行的).
例如,假设我正在提出xhr请求https://foo.example.com/api/resource/100.在Chrome的开发者控制台中,在"网络"下,我可以看到正在做出的响应 - 我还可以看到所有响应标头(例如,10).但是(复制粘贴的控制台):
> response
XMLHttpRequest
> response.getAllResponseHeaders();
"content-type: text/html
"
Run Code Online (Sandbox Code Playgroud)
对哪些标题可用有任何限制?这取决于响应类型吗?我记得为404s获得了一套完整的标题,但这只是400s的标题.
是什么赋予了?
Gum*_*mbo 37
标准化XMLHttpRequest API的当前状态仅限制对Set-Cookie和Set-Cookie2头字段的访问:
client .getAllResponseHeaders()
返回响应中的所有标头,但字段名称为
Set-Cookie或的标头除外Set-Cookie2.
应返回任何其他标头字段.
但是当您正在进行跨源请求时,浏览器需要实现XMLHttpRequest Level 2,因为原始XMLHttpRequest仅允许同源请求:
XMLHttpRequest Level 2规范使用新功能增强XMLHttpRequest对象,例如跨源请求[...]
在那里,您可以读到" 跨源资源共享规范过滤了过滤由getResponseHeader()为非同源请求公开的标头的标头." 并且该规范禁止访问除简单响应头字段之外的任何响应头字段(即Cache-Control,Content-Language,Content-Type,Expires,Last-Modified和Pragma):
用户代理必须过滤除了那些简单响应头之外的所有响应头[...]
例如
getResponseHeader(),XMLHttpRequest 的方法因此不会暴露上面未指出的任何头.