小编典典

Chrome将Origin标头添加到同源请求

ajax

我们正在将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规范吗?


阅读 875

收藏
2020-07-26

共1个答案

小编典典

Chrome和Safari Origin在相同来源的POST / PUT /
DELETE请求上包含标头(相同来源的GET请求将没有Origin标头)。Firefox
Origin在同源来源的请求中不包含标头。浏览器不希望源相同的请求具有CORS响应标头,因此,无论源是否具有CORS标头,对源相同的请求的响应都会发送给用户。

我建议检查Host标头,如果它与标头中的域匹配Origin,请不要将请求视为CORS。标头看起来像这样:

Host: example.com
Origin: http://example.com

请注意,Origin它将具有方案(http / https),域和端口,而Host仅具有域和端口。

2020-07-26