JavaScript可以设置哪些HTTP头?

13

W3C是否规定XMLHttpRequest可以设置哪些HTTP标头?如果是这样,他们是否已经发布了一份文件,以安全原因为依据来证明这些要求?

浏览器是否可以自行限制HTTP标头?如果是这样,是否有在线文档或文档集列出不同XHR实现的怪异行为,或者必须在每个实现的文档中找到这些信息?


2
在XHR规范中有一份禁止使用的头部列表。 - gengkev
1个回答

6

W3C有关于setRequestHeader允许使用的头信息的规范

如果header不区分大小写地匹配以下任一标头之一,请终止这些步骤:

  • Accept-Charset
  • Accept-Encoding
  • Access-Control-Request-Headers
  • Access-Control-Request-Method
  • Connection
  • Content-Length
  • Cookie
  • Cookie2
  • Content-Transfer-Encoding
  • Date
  • Expect
  • Host
  • Keep-Alive
  • Origin
  • Referer
  • TE
  • Trailer
  • Transfer-Encoding
  • Upgrade
  • User-Agent
  • Via

…或者如果header的开头是Proxy-或Sec-(包括当header只是Proxy-或Sec-时)时,也要终止。

上述标头由用户代理控制,以便它控制传输的某些方面。这可以在一定程度上保证数据完整性。 以Sec-开头的标头名称不允许被设置,以允许铸造新的标头,这些标头可以保证不来自XMLHttpRequest。

此外,您可能需要考虑:

如果标题不在作者请求头列表中,则将标题及其关联值附加到列表中,并终止这些步骤。
关于浏览器的实现,我找到了这个好测试:https://dvcs.w3.org/hg/webapps/diff/5814514eeba4/tests/XMLHttpRequest/setrequestheader-header-forbidden.htm,你可以用它来查找当前的差异。
例如,IE对标题安全性的定义如下: IE:请参考RFC2616,第14节:标题字段定义,获取标准标题的一般列表。服务器最终负责遵守请求的标题。迄今为止,最常见的请求标题是Content-Type,某些XML Web服务要求使用它。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接