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