Chrome将Origin标头添加到同源请求
我们正在将AJAX请求发布到本地运行的服务器,即
xhr.open("POST", "http://localhost:9000/context/request");xhr.addHeader(someCustomHeaders);
xhr.send(someData);
该javascript正在执行的页面也从localhost:9000提供服务,即,这完全像一个同源请求。
但是,由于某种原因,Google Chrome总是在结果请求中设置Origin标头,从而导致我们的服务器基于错误的假设(即CORS请求)阻止该请求。
在Firefox中不会发生这种情况。
此外,Firefox和Chrome均未发送OPTIONS预检请求,这令人困惑;为什么不先进行预检就设置Origin标头,以确保服务器允许Origin标头和Custom标头?
有谁知道在这种情况下发生了什么?我们误解了CORS规范吗?
回答:
Chrome和Safari Origin
在相同来源的POST / PUT /
DELETE请求上包含标头(相同来源的GET请求将没有Origin标头)。Firefox
Origin
在同源来源的请求中不包含标头。浏览器不希望源相同的请求具有CORS响应标头,因此,无论源是否具有CORS标头,对源相同的请求的响应都会发送给用户。
我建议检查Host
标头,如果它与标头中的域匹配Origin
,请不要将请求视为CORS。标头看起来像这样:
Host: example.comOrigin: http://example.com
请注意,Origin
它将具有方案(http / https),域和端口,而Host
仅具有域和端口。
以上是 Chrome将Origin标头添加到同源请求 的全部内容, 来源链接: utcz.com/qa/425473.html