当前位置: 首页 > 面试题库 >

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

欧阳英彦
2023-03-14
问题内容

我们正在将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.com
Origin: http://example.com

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



 类似资料:
  • 问题内容: 我需要向来自WebView的每个请求添加自定义标头。我知道有用于的参数,但这些参数仅应用于初始请求。所有后续请求均不包含标头。我已经看过所有的替代,但是没有什么允许将标头添加到资源请求- 。任何帮助都会很棒。 问题答案: 尝试 要将标头添加到资源加载请求中,请定制WebViewClient并重写:

  • 问题内容: 我正在尝试访问网站,但无法将收集到的“ Cookie”添加到传出的POST请求标头中。我已经能够验证它们是否存在于CookieManager中。 HtmlUnit的任何替代方法也将不胜感激。 问题答案: 我发现可以使用WebClient中的setadditionalHeader()添加标题。

  • 问题内容: 我已经开发了一个Restfull应用程序,我想添加另一个Web应用程序来使用其服务,因此我进行了以下Ajax调用: 我得到这个例外: 对象{readyState:0,状态:0,statusText:“ SyntaxError:无法执行’setRequestHeader’…-Origin: ‘不是有效的HTTP标头字段名称。”}错误DOMException:无法在’XMLHttpRequ

  • 我有一个Spring Boot应用程序,它依赖于spring-cloud-starter-sleuth-3.0.3和spring-cloud-sleuth-zipkin-3.0.3。 我需要在从webclient调用API时将跟踪id传递给请求头。 示踪剂。currentSpan()为null,因此引发NPE。 根据文档,给出了将跟踪id添加到响应头的方法https://docs.spring.i

  • 问题内容: 我将这个拦截器添加到我的OkHttp客户端中: 如何在拦截器中添加标题以进行请求? 我尝试了这个,但是我犯错了,创建新请求时我丢失了请求: 请注意,我知道我可以在创建请求时添加标头,如下所示: 但这不符合我的需求。我在拦截器中需要它。 问题答案: 最后,我以这种方式添加了标题:

  • 问题内容: 这是我的第一篇文章。 我刚刚开始学习Go和Angular,并且尝试将angular应用程序连接到go api。我已经写了这两本书,并且一直坚持找出问题的根源。我以为这是一个CORS问题,但是如果我在Angular http请求中不包含代码的标题行,它就可以正常工作。在这一点上,我只是想添加标题。授权代码尚未实现。 这两个应用程序都在本地运行,端口5000上的Go应用程序和4200端口上