CORS启用但请求标头从不同的主机混合

时间:2015-04-02 01:38:30

标签: tomcat xmlhttprequest cors

我在web.xml中启用了一个启用了CORS的tomcat 8服务器。 CORS插件适用于大多数情况,但有时会混合来自本地主机和服务器主机的头请求

XMLHttpRequest cannot load http://mipldevlinux7:6060/juneberry/data/blue-marbles/config.json. The 'Access-Control-Allow-Origin' header has a value 'http://localhost:3000' that is not equal to the supplied origin. Origin 'http://mipldevlinux7:7777' is therefore not allowed access

我的tomcat服务器位于端口mipldevlinux7上名为6060的服务器上,我在端口7777上的同一主机上有一台生产服务器。

我在localhost:3000进行开发,我的同事在localhost:8080上运行他的开发服务器。

我们收到了CORS错误,错误会将我们的本地主机之间的标头混合到3000,有时会混合8080。有时我们甚至会收到mipledevlinux7:7777的标头请求,以便我们从localhost请求。

我正在使用的CORS是在CORS tomcat 8中构建的:

<filter>
  <filter-name>CorsFilter</filter-name>
  <filter-class>org.apache.catalina.filters.CorsFilter</filter-class>
  <init-param>
        <param-name>cors.allowed.origins</param-name>
        <param-value>*</param-value>
    </init-param>
    <init-param>
        <param-name>cors.allowed.methods</param-name>
        <param-value>GET,POST,HEAD,OPTIONS,PUT</param-value>
    </init-param>
    <init-param>
        <param-name>cors.allowed.headers</param-name>
        <param-value>Content-Type,X-Requested-With,accept,Origin,Access-Control-Request-Method,Access-Control-Request-Headers,Last-Modified</param-value>
    </init-param>
    <init-param>
        <param-name>cors.exposed.headers</param-name>
        <param-value>Access-Control-Allow-Origin,Access-Control-Allow-Credentials</param-value>
    </init-param>
    <init-param>
        <param-name>cors.support.credentials</param-name>
        <param-value>true</param-value>
    </init-param>
</filter>
<filter-mapping>
  <filter-name>CorsFilter</filter-name>
  <url-pattern>/*</url-pattern>
</filter-mapping>

是tomcat缓存了请求标头还是以某种方式使用了最后一个请求标头导致混淆,并阻止了所有请求?

1 个答案:

答案 0 :(得分:0)

如果将cors.support.credentials设置为true,请使用cors.preflight.maxage来-1来禁用浏览器缓存:

<init-param>
    <param-name>cors.preflight.maxage</param-name>
    <param-value>-1</param-value>
</init-param>

您确定要将cors.allowed.origins设置为*吗?