Cors 为什么需要访问控制公开头文件?

Cors 为什么需要访问控制公开头文件?,cors,Cors,我正在寻找添加此项的具体安全原因。这是我实现cors的第八个时刻,我可以看到返回的所有头,但我无法通过javascript访问它们。cors的实现方式不会打破cors之前的假设,即只有相同来源的世界 在CORS之前的世界中,客户端可以触发跨源请求(例如,通过脚本标记),但无法读取响应头 为了确保CORS不会打破这一假设,CORS规范要求服务器为客户端提供读取这些头的显式权限(通过访问控制公开头头)。这样,未经授权的CORS请求的行为就如同在CORS之前的世界中一样。这是一个很好的问题。纵观全局,

我正在寻找添加此项的具体安全原因。这是我实现cors的第八个时刻,我可以看到返回的所有头,但我无法通过javascript访问它们。

cors的实现方式不会打破cors之前的假设,即只有相同来源的世界

在CORS之前的世界中,客户端可以触发跨源请求(例如,通过脚本标记),但无法读取响应头


为了确保CORS不会打破这一假设,CORS规范要求服务器为客户端提供读取这些头的显式权限(通过
访问控制公开头
头)。这样,未经授权的CORS请求的行为就如同在CORS之前的世界中一样。

这是一个很好的问题。纵观全局,不清楚您为什么想要或需要这样做

CORS规范非常重视这样一种想法,即必须进行请求前握手,客户机请求某种类型的连接,而服务器响应它将允许这种连接,因此这可能只是其中的另一个方面

默认情况下,内容长度不是允许的标题,因此我遇到了相同的问题(稍后当我需要访问WebDAV并不得不修改允许的参数时)。。CORS一开始真的没有什么意义(对我来说),所以如果它有很多反复无常的地方,我也不会感到惊讶

以下是需要访问控制公开标头的原因:

访问控制公开头(可选)XMLHttpRequest 2对象有一个getResponseHeader()方法,返回特定响应头的值。在CORS请求期间,getResponseHeader()方法只能访问简单的响应头。简单响应头的定义如下:

  • 缓存控制
  • 内容语言
  • 内容类型
  • 到期
  • 最后修改
  • 布拉格马
如果希望客户端能够访问其他标头,则必须使用访问控制暴露标头标头。此标头的值是要向客户端公开的以逗号分隔的响应标头列表

如需更多参考,请深入该链接


快乐编码

CORS之所以感觉反复无常,正是因为规范作者认真考虑了这一点。CORS必须在保护浏览器的同源策略的同时启用跨源请求。正是需要平衡这两种(有时是对立的)力量,这使得CORS规范很难理解。这个建议的链接是我本月得到的最有用的指针。我知道Access Control Allow标头,但没有考虑Access Control Expose标头,也不明白为什么我的“Links”标头无法访问我的主干集合。令人震惊。我发现这个链接是这个答案的一个很好的例子:换句话说,
accesscontrol-Expose-Headers
根本不是为了安全,而是为了兼容性?没有我们使用
访问控制暴露头来缓解的攻击?