W3C 是否指定 XMLHttpRequest 可以设置哪些 HTTP 标头?如果是这样,他们是否发布了一份文件,以安全原因证明这些要求的合理性?
浏览器是否可以自行决定限制 HTTP 标头?如果是这样,是否有在线文档或文档集列出了不同 XHR 实现的怪癖,或者是否有必要在每个实现的文档中找到该信息?
W3C 是否指定 XMLHttpRequest 可以设置哪些 HTTP 标头?如果是这样,他们是否发布了一份文件,以安全原因证明这些要求的合理性?
浏览器是否可以自行决定限制 HTTP 标头?如果是这样,是否有在线文档或文档集列出了不同 XHR 实现的怪癖,或者是否有必要在每个实现的文档中找到该信息?
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 所需要的。