XMLHttpRequest的getResponseHeader()的限制?

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-CookieSet-Cookie2头字段的访问:

client .getAllResponseHeaders()

返回响应中的所有标头,但字段名称为Set-Cookie或的标头除外Set-Cookie2.

应返回任何其他标头字段.

但是当您正在进行跨源请求时,浏览器需要实现XMLHttpRequest Level 2,因为原始XMLHttpRequest仅允许同源请求:

XMLHttpRequest Level 2规范使用新功能增强XMLHttpRequest对象,例如跨源请求[...]

在那里,您可以读到" 跨源资源共享规范过滤了过滤由getResponseHeader()为非同源请求公开的标头的标头." 并且该规范禁止访问除简单响应头字段之外的任何响应头字段(即Cache-Control,Content-Language,Content-Type,Expires,Last-ModifiedPragma):

用户代理必须过滤除了那些简单响应头之外的所有响应头[...]

例如getResponseHeader(),XMLHttpRequest 的方法因此不会暴露上面未指出的任何头.