CORS HEADERS仅在预检或每次请求时出现

时间:2014-06-17 13:02:43

标签: html cors

我不清楚 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   请求标头(如上例所示),或者是允许的'*'   来自任何来源的请求。如果您希望任何网站能够访问   您的数据,使用'*'就可以了。但如果你想更好地控制谁   可以访问您的数据,使用标题中的实际值。

2 个答案:

答案 0 :(得分:5)

他们必须出现在两个回复中。

the preflight rules的第3步要求浏览器遵循正常的make a request steps

答案 1 :(得分:1)

Access-Control-Allow-Origin标头必须出现在对预检OPTIONS和GET请求本身的响应中。如果Preflight OPTIONS响应中出现Access-Control-Allow-Credentials,它也必须出现在对GET的响应中。与Access-Control-Expose-Headers响应头一样。

OPTIONS响应中仅需要Access-Control-Allow-Headers,Access-Control-Allow-Methods和Access-Control-Max-Age响应头,如果在主要响应中返回它们,则忽略它们取。

请参阅https://fetch.spec.whatwg.org/#http-responses,这是THE CORS规范,并取代旧的W3C规范(https://www.w3.org/TR/cors/)。