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 获取标头 Javascript

"服务器无法在发送 HTTP 标头之后设置内容类型"这个问题怎么解决呢?

javascript之Ajax获取和设置标头

为 iframe 设置自定义 HTTP 请求标头

我们可以为 rmarkdown 的 yaml 标头中的 biblio-style 参数设置哪些选项?

是否可以将请求标头添加到 iframe src 请求?