【问题标题】:Which HTTP headers may JavaScript set?JavaScript 可以设置哪些 HTTP 标头?
【发布时间】:2012-08-06 05:59:07
【问题描述】:

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

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

【问题讨论】:

标签: javascript http http-headers xmlhttprequest


【解决方案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 服务所需要的。

【讨论】:

    猜你喜欢
    • 2011-09-08
    • 2016-03-11
    • 1970-01-01
    • 2015-09-29
    • 2013-03-02
    • 1970-01-01
    • 2016-08-23
    • 2011-06-11
    • 2016-04-10
    相关资源
    最近更新 更多