我的本地主机上的端口8081上有nginx提供的mypage.com(客户端html / css / js)。
我从http://mypage.com:8081上的浏览器访问它(mypage.com映射到/ etc / hosts上的> 127.0.0.1)。
GET http://mypage.com:8081/api/foo
我已经让Tomcat 8在端口运行我的2个REST API:9090
目标是:8081请求在nginx中得到解决
location /services
proxy_pass http://127.0.0.1:9090/services/
location /api
proxy_pass http://127.0.0.1:9090/api/
** =======到目前为止一切都很好。========== **
GET http://mypage.com:9090/services/foo
由于浏览器中的当前页面是mypage.com:8081,而JQuery调用的目标是mypage.com:9090/services/foo;浏览器检测到CORS请求。
在请求中,“来源:http://mypage.com:8081”标题已设置,但未返回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标头 - 在浏览器中,结果为403,响应标题不显示
以外的任何内容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
答案 0 :(得分:0)
我最后发现了这个问题。
根据Tomcat的CORS流程图,我将问题缩小到我从客户端发送的报头与后端支持的报头不匹配的事实。
解决方案是通过添加我的自定义标头
来覆盖tomcat过滤器中的默认值<init-param>
<param-name>cors.allowed.headers</param-name>
<param-value>....,X-My-Custom,...</param-value>
</init-param>