如何在Tomcat 8.5的web.xml中配置Cache-Control、Pragma和Expires头?
解决方案
通用自定义过滤器方案(无依赖全场景适用)
这是兼容性最好的实现,不需要引入第三方依赖,适配所有符合Servlet规范的Web容器:
- 先编写自定义过滤器类:
import javax.servlet.*; import javax.servlet.http.HttpServletResponse; import java.io.IOException; public class NoCacheResponseFilter implements Filter { @Override public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException { HttpServletResponse resp = (HttpServletResponse) response; resp.setHeader("Cache-Control", "no-cache, no-store, must-revalidate"); resp.setHeader("Pragma", "no-cache"); resp.setHeader("Expires", "0"); chain.doFilter(request, response); } }
- 在
web.xml中添加过滤器配置,全局生效:
<filter> <filter-name>noCacheFilter</filter-name> <filter-class>你自己的包路径.NoCacheResponseFilter</filter-class> </filter> <filter-mapping> <filter-name>noCacheFilter</filter-name> <url-pattern>/*</url-pattern> </filter-mapping>
Spring生态项目现成方案
如果你使用Spring/Spring Boot框架,可以直接用Spring内置的HeaderWriterFilter,不需要自定义代码,直接配置web.xml即可:
<filter> <filter-name>cacheHeaderFilter</filter-name> <filter-class>org.springframework.web.filter.HeaderWriterFilter</filter-class> <init-param> <param-name>headersToWrite</param-name> <param-value> Cache-Control: no-cache, no-store, must-revalidate Pragma: no-cache Expires: 0 </param-value> </init-param> </filter> <filter-mapping> <filter-name>cacheHeaderFilter</filter-name> <url-pattern>/*</url-pattern> </filter-mapping>
Tomcat容器专属方案
如果你的服务运行在Tomcat 7及以上版本,可以直接用Tomcat自带的HeaderFilter,无需额外开发:
<filter> <filter-name>responseHeaderFilter</filter-name> <filter-class>org.apache.catalina.filters.HeaderFilter</filter-class> <init-param> <param-name>headers</param-name> <param-value> Cache-Control: no-cache, no-store, must-revalidate Pragma: no-cache Expires: 0 </param-value> </init-param> </filter> <filter-mapping> <filter-name>responseHeaderFilter</filter-name> <url-pattern>/*</url-pattern> </filter-mapping>
内容的提问来源于stack exchange,提问作者Ritwik1711
相关产品推荐
相关产品推荐

