在哪里启用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 中看到了什么错误?如果错误和之前一样,请再次检查,它是区分大小写的。 我忘记了最重要的事情。 CORS过滤器的设置必须添加到myapis.com/api1

以上是关于在哪里启用cors?的主要内容,如果未能解决你的问题,请参考以下文章

火狐浏览器里的CORS怎么启用?

如何使用 CORS 启用自定义标头?

在 spring 安全标签中启用 CORS

如何使用 Cloud Endpoints 启用 CORS?

有没有办法在 Github 页面上启用 CORS?

在 wordpress 中启用 CORS