在哪里启用cors?
Posted
技术标签:
【中文标题】在哪里启用cors?【英文标题】:Where to enable cors? 【发布时间】:2016-10-01 13:27:16 【问题描述】:我有一个非常基本的问题。
我有一个应用程序www.myapp1.com
托管在tomcat 服务器上。它依次调用托管在 apache 服务器上的 myapis.com/api1
上的 api。
在加载页面时,它会中断说明 -
XMLHttpRequest 无法加载 myapis.com/api1。对预检的响应 请求未通过访问控制检查:否 'Access-Control-Allow-Origin' 标头出现在请求的 资源。因此,不允许访问 Origin 'www.myapp1.com'。这 响应的 HTTP 状态代码为 403。
我知道我必须启用 CORS。我的问题是我在哪个服务器上启用 CORS?应该是www.myapp1.com
还是myapis.com/api1
?
我尝试通过将最小过滤器(如下)添加到 /config/web.xml 文件并重新启动服务器来在 www.myapp1.com
上启用 CORS,这是一个 tomcat7.0.59 服务器。但是,它不起作用。我还需要添加/配置什么吗?
<filter>
<filter-name>CorsFilter</filter-name>
<filter-class>org.apache.catalina.filters.CorsFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>CorsFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
url-pattern 中的通配符会导致问题吗?我需要做些什么来设置过滤器类吗?
我正在使用 chrome 进行测试。 请帮忙。
【问题讨论】:
How to enable CORS on a Wordpress Subdomain?的可能重复 【参考方案1】:cors.exposed.headers
的default value 是""
。添加此参数可以解决问题。
<filter>
<filter-name>CorsFilter</filter-name>
<filter-class>org.apache.catalina.filters.CorsFilter</filter-class>
<init-param>
<param-name>cors.exposed.headers</param-name>
<param-value>Access-Control-Allow-Origin,Access-Control-Allow-Credentials</param-value>
</init-param>
</filter>
【讨论】:
我现在已经添加了高级配置中提到的init-params tomcat.apache.org/tomcat-7.0-doc/config/filter.html#CORS_Filter 没有变化。当我在 Chrome 中查看 Dev Tools->Network 时,无论我是否启用了 CORS 过滤器,我都可以看到以下内容。选项 /api1 HTTP/1.1 主机:myapis.com 连接:keep-alive 访问控制请求方法:GET 来源:myapp1.com 用户代理:Mozilla/5.0 (Windows NT 6.3; WOW64) AppleWebKit/537.36 (KHTML,像 Gecko) Chrome/51.0.2704.84 Safari/537.36 Access-Control-Request-Headers: access-control-allow-origin, 授权 Accept: / Referer: myapp1.com Accept-Encoding: gzip, deflate , sdch, br 接受语言:en-US,en;q=0.8 您在 Dev Tools -> Console 中看到了什么错误?如果错误和之前一样,请再次检查myapis.com/api1
以上是关于在哪里启用cors?的主要内容,如果未能解决你的问题,请参考以下文章