JavaScript 可以设置哪些 HTTP 标头?
Posted
技术标签:
【中文标题】JavaScript 可以设置哪些 HTTP 标头?【英文标题】:Which HTTP headers may JavaScript set? 【发布时间】:2012-08-06 05:59:07 【问题描述】:W3C 是否指定 XMLHttpRequest 可以设置哪些 HTTP 标头?如果是,他们是否发布了一份文件,以安全原因证明这些要求的合理性?
是否由浏览器自行决定限制 HTTP 标头?如果是这样,是否有在线文档或文档集列出了不同 XHR 实现的怪癖,或者是否有必要在每个实现的文档中找到该信息?
【问题讨论】:
the XHR spec中有一个禁止的标题列表 【参考方案1】:W3C 有 this spec 关于 setRequestHeader
允许的标头
如果标头是不区分大小写的匹配项之一,则终止这些步骤 以下标题:
接受字符集 接受编码 访问控制请求标头 访问控制请求方法 连接 内容长度 饼干 Cookie2 内容传输编码 日期 期待 主持人 保持活动状态 原产地 参考 TE 预告片 传输编码 升级 用户代理 通过... 或者如果标头的开头是 Proxy- 的不区分大小写匹配,或者 Sec-(包括当标头只是 Proxy- 或 Sec- 时)。
上面的 headers 是由用户代理控制的,让它控制 运输的那些方面。 这保证了某些人的数据完整性 范围。 以 Sec- 开头的标题名称不允许设置为 允许铸造新的标头,保证不会来自 XMLHttpRequest。
你也可以考虑:
如果标头不在author-request-headers 列表中,则将标头及其关联值附加到列表中并终止这些步骤。
关于浏览器的实现,我发现了这个很好的测试:https://dvcs.w3.org/hg/webapps/diff/5814514eeba4/tests/XMLHttpRequest/setrequestheader-header-forbidden.htm,你不能用它来发现当前的差异。
例如,IE 对标头的安全性定义如下:
IE:请参阅RFC2616, Section 14:标头字段定义以获取标准标头的一般列表。服务器最终负责遵守请求的标头。到目前为止,最常见的请求标头是 Content-Type,它是某些 XML Web 服务所需要的。
【讨论】:
以上是关于JavaScript 可以设置哪些 HTTP 标头?的主要内容,如果未能解决你的问题,请参考以下文章
"服务器无法在发送 HTTP 标头之后设置内容类型"这个问题怎么解决呢?