如何告诉tomcat支持静态内容的CORS?
这个问题:关于常规servlet;我知道如何设置标题来控制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 ===========
我的问题是如何配置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
...