如何告诉tomcat支持静态内容的CORS?

如何告诉tomcat支持静态内容的CORS?,tomcat,static,cors,Tomcat,Static,Cors,这个问题:关于常规servlet;我知道如何设置标题来控制CORS 我的问题是如何配置Tomcat以在CORS限制下提供静态内容。这里有一个用于添加CORS支持的Tomcat筛选器:从Tomcat 7.0.41开始,您可以通过内置筛选器轻松控制CORS行为 参考资料: 您只需在CATALINA_HOME/conf中编辑全局web.xml,并添加过滤器定义: <!-- ================== Built In Filter Definitions ===========

这个问题:关于常规servlet;我知道如何设置标题来控制CORS


我的问题是如何配置Tomcat以在CORS限制下提供静态内容。

这里有一个用于添加CORS支持的Tomcat筛选器:

从Tomcat 7.0.41开始,您可以通过内置筛选器轻松控制CORS行为

参考资料:

您只需在
CATALINA_HOME/conf
中编辑全局
web.xml
,并添加过滤器定义:

<!-- ================== Built In Filter Definitions ===================== --> ... <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> <!-- ==================== Built In Filter Mappings ====================== --> ... 克斯菲尔特 org.apache.catalina.filters.CorsFilter 克斯菲尔特 /* 但是,请注意,Firefox不喜欢
访问控制允许源代码:
和具有凭据的请求(cookie):

如果要在此情况下调试请求,请注意,根据此流程图,只有在存在跨源请求时,才会发送CORS标头:

(tomcat.apache.org/tomcat-8.0-doc/images/cors流程图.png)

嗨,弗拉德!这是一个很晚的答复,到现在为止,你一定已经把一切都弄明白了。如果其他人遇到同样的问题,这就是答案

显然,您知道CORS过滤器,Tomcat过滤器将只应用于servlet

为了让所有静态内容都通过某个servlet,Tomcat有一个特殊的DefaultServet——这就是您要寻找的

基本上,我们只需要在部署描述符文件(如WEB-INF/WEB.xml)中启用它,例如:

<servlet-mapping>
  <servlet-name>default</servlet-name>
  <url-pattern>/</url-pattern>
</servlet-mapping>


<servlet>
  <servlet-name>default</servlet-name>
  <servlet-class>org.apache.catalina.servlets.DefaultServlet</servlet-class>
  <load-on-startup>1</load-on-startup>
</servlet>
这样,您将看到如下内容:

HTTP/1.1 200 OK
Server: Apache-Coyote/1.1
Access-Control-Allow-Origin: http://localhost/test
Access-Control-Allow-Credentials: true
Accept-Ranges: bytes
...

这在我使用Tomcat 8.5的设置中不是必需的。我只需要应用@johannes jander的解决方案。我陷入了这样一个陷阱:CORS过滤器在何时发送头和何时不发送头都非常智能(请参阅)。仅从浏览器执行GET根本不会显示标题,因为它不是跨源请求。
HTTP/1.1 200 OK
Server: Apache-Coyote/1.1
Access-Control-Allow-Origin: http://localhost/test
Access-Control-Allow-Credentials: true
Accept-Ranges: bytes
...