CORS HEADERS 仅在预检或每个请求中出现
Posted
技术标签:
【中文标题】CORS HEADERS 仅在预检或每个请求中出现【英文标题】:CORS HEADERS present only on preflight or every request 【发布时间】:2014-08-07 12:15:35 【问题描述】:我不清楚 CORS 标头(Access-Control-Allow-Origin 等)是否应该仅出现在 预检请求(OPTIONS 方法)或也在资源的标题中(我正在尝试使用 XHR POST)
我之所以问这个问题是因为我安装了一个 python 插件,它通过仅将 CORS 标头添加到 OPTIONS 方法(预检)而不是请求的来处理 cors资源,这种方法不能解决 chrome 和 firefox 上的 cors 问题,返回类似
的消息跨域请求被阻止:同源策略不允许读取 [URL] 上的远程资源。这可以通过 将资源移动到同一域或启用 CORS。
编辑:
我还在 http://www.html5rocks.com/en/tutorials/cors/ 上找到了更多信息,上面写着:
Access-Control-Allow-Origin(必需)- 必须包含此标头 在所有有效的 CORS 响应中;省略标头将导致 CORS 请求失败。标头的值可以回显 Origin 请求标头(如上面的示例),或者是“*”以允许 来自任何来源的请求。如果您希望任何网站能够访问 您的数据,使用 '*' 很好。但如果你想更好地控制谁 可以访问您的数据,在标题中使用实际值。
【问题讨论】:
【参考方案1】:它们必须出现在两个响应中。
the preflight rules的第3步要求浏览器遵循正常的make a request steps。
【讨论】:
好像对,我在html5rocks.com/en/tutorials/cors上也查到了一些资料【参考方案2】:Access-Control-Allow-Origin 标头必须出现在对预检选项和 GET 请求本身的响应中。如果 Access-Control-Allow-Credentials 出现在预检 OPTIONS 响应中,它也必须出现在对 GET 的响应中。与 Access-Control-Expose-Headers 响应标头类似。
Access-Control-Allow-Headers、Access-Control-Allow-Methods 和 Access-Control-Max-Age 响应头仅在 OPTIONS 响应中需要,如果它们在主响应中返回则被忽略获取。
请参阅https://fetch.spec.whatwg.org/#http-responses,这是 CORS 规范,取代了旧的 W3C 规范(https://www.w3.org/TR/cors/)。
【讨论】:
以上是关于CORS HEADERS 仅在预检或每个请求中出现的主要内容,如果未能解决你的问题,请参考以下文章
CORS 预检请求返回“403 Forbidden”;随后的请求,然后仅在 Chrome 中发送
被 CORS 阻止:预检响应中的 Access-Control-Allow-Headers 不允许请求标头字段授权
被 CORS 策略阻止:预检响应中的 Access-Control-Allow-Headers 不允许请求标头字段授权
被 CORS 策略阻止:预检响应中的 Access-Control-Allow-Headers 不允许请求标头字段内容类型 [重复]
Laravel API cors-预检响应中的Access-Control-Allow-Headers不允许请求标头字段授权[重复]