javascript - CORS header 'Access-Control-Allow-Origin' 仅在浏览器/jquery 中丢失,但可以使用 curl

标签 javascript jquery tomcat curl cors

问题是我在浏览器和 Curl 命令中得到不同的 header 响应

我在本地主机的 8081 端口上有 mypage.com(客户端 html/css/js)由 nginx 提供服务。

我在 http://mypage.com:8081 上通过浏览器访问它(mypage.com 映射到/etc/hosts 上的 -> 127.0.0.1)。

页面加载正常,它执行第一个 jQuery 请求。

GET http://mypage.com:8081/api/foo

我已经让 Tomcat 8 在端口 :9090 上运行我的 2 个 REST API

因为目标是:8081 请求在 nginx 中得到解析

location /services
         proxy_pass         http://127.0.0.1:9090/services/
location /api
         proxy_pass         http://127.0.0.1:9090/api/

** =======到目前为止一切正常。==========**

JQuery 中的第二个请求是

GET http://mypage.com:9090/services/foo

由于浏览器中的当前页面是 mypage.com:8081 并且 JQuery 调用的目标是 mypage.com:9090/services/foo ;浏览器检测到 CORS 请求。

在请求中,'来源:http://mypage.com:8081 ' header 已设置,但没有 Access-Control-Allow-Origin 返回。它根本没有。

OPTIONS http://mypage.com:9090/ returns 403 **ONLY in the browser**

Cross-Origin Request Blocked: The Same Origin Policy disallows reading the remote resource at http://mypage.com:9090/service/bar (Reason: CORS header 'Access-Control-Allow-Origin' missing).

我已经检查了 Tomcat 的配置,添加了 CORS 过滤器,当我执行与浏览器相同的命令时,我可以通过 CURL 确认一切正常。

我正在为这个而兜圈子。 - 在这两种情况下都设置了 CORS Origin header - 在 Browser 中,结果是 403 并且响应 header 除了

之外不显示任何其他内容
Content-Length: 87
Content-Type: text/plain;charset=ISO-8859-1
Date: Wed, 23 Dec 2015 01:11:53 GMT
Server: Apache-Coyote/1.1
  • 虽然在 curl 命令中,相同的请求会产生一个响应,其中 Access-Control-Allow-Origin 设置为请求 header 上传递的来源。

问题:为什么浏览器 OPTIONS 没有返回 Access-Control-Allow-Origin?我似乎无法通过使用具有相同参数的相同动词但通过 CURL 命令点击相同的 URL 来重现它

最佳答案

最后我发现了这个问题。

根据 Tomcat 的 CORS 流程图,我将问题缩小到我从客户端发送的 header 与后端支持的 header 之间存在不匹配这一事实。

解决方案是通过添加我的自定义 header 来覆盖 tomcat 过滤器中的默认值

<init-param>
            <param-name>cors.allowed.headers</param-name>
            <param-value>....,X-My-Custom,...</param-value>
</init-param>

关于javascript - CORS header 'Access-Control-Allow-Origin' 仅在浏览器/jquery 中丢失,但可以使用 curl,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34427315/

相关文章:

javascript - 仅当用户使用 URL 查询时显示 DIV

tomcat - Grails 编译错误 - "package does not exist"

javascript - 如何防止 sailsjs 文件上传覆盖

javascript - Lighthouse 审计表示内容的大小不适合视口(viewport),尽管正文宽度为 100%

javascript - 找到两个节点之间的所有可行路径

javascript - 重定向到包含 anchor 的 url

javascript - 如何计算元素相对于屏幕的位置

web-services - 将 Web 服务从 Tomcat 迁移到 Wildly

Apache Web 服务器多个工作人员

javascript - 基于 HTML5 的游戏没有显示在浏览器上?