13

W3C 是否指定 XMLHttpRequest 可以设置哪些 HTTP 标头?如果是这样,他们是否发布了一份文件,以安全原因证明这些要求的合理性?

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

4

1 回答 1

6

W3C 有这个关于允许的标头的规范setRequestHeader

如果标头与以下标头之一不区分大小写,则终止这些步骤:

  • 接受字符集
  • 接受编码
  • 访问控制请求标头
  • 访问控制请求方法
  • 联系
  • 内容长度
  • 曲奇饼
  • 饼干2
  • 内容传输编码
  • 日期
  • 预计
  • 主持人
  • 活着
  • 起源
  • 推荐人
  • TE
  • 预告片
  • 传输编码
  • 升级
  • 用户代理
  • 通过

…或者如果标头的开头是 Proxy- 或 Sec- 不区分大小写的匹配项(包括标头只是 Proxy- 或 Sec- 时)。

上述标头由用户代理控制,以使其控制传输的这些方面。这在一定程度上保证了数据的完整性。不允许设置以 Sec- 开头的标头名称以允许生成新标头,这些标头保证不会来自 XMLHttpRequest。

你也可以考虑:

如果 header 不在author-request-headers列表中,则将 header 及其关联值附加到列表中并终止这些步骤。

关于浏览器的实现,我发现了这个很好的测试:https ://dvcs.w3.org/hg/webapps/diff/5814514eeba4/tests/XMLHttpRequest/setrequestheader-header-forbidden.htm你不能用它来找到当前的差异。

例如,IE对标头的安全性有以下定义:

IE:请参阅RFC2616,第 14 节:标头字段定义以获取标准标头的一般列表。服务器最终负责遵守请求的标头。到目前为止,最常见的请求标头是 Content-Type,它是某些 XML Web services 所需要的。

于 2012-08-09T12:38:19.610 回答