你可以在你的 Web 应用的 WEB-INF/web.xml
文件中,通过配置过滤器(Filter)来给特定资源(比如 index.html
)添加缓存控制的响应头。
示例:配置一个简单的缓存控制过滤器给 index.html
1. 编写一个过滤器类
java
java复制
package com.example.filter;
import javax.servlet.*;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
public class NoCacheFilter implements Filter {
@Override
public void init(FilterConfig filterConfig) throws ServletException {
// 初始化(可不实现)
}
@Override
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
if(response instanceof HttpServletResponse){
HttpServletResponse httpResp = (HttpServletResponse) response;
httpResp.setHeader("Cache-Control", "no-cache, no-store, must-revalidate"); // HTTP 1.1
httpResp.setHeader("Pragma", "no-cache"); // HTTP 1.0
httpResp.setDateHeader("Expires", 0); // Proxies
}
chain.doFilter(request, response);
}
@Override
public void destroy() {
// 销毁(可不实现)
}
}
2. 在 web.xml
中声明并映射该过滤器
xml
xml复制
<filter>
<filter-name>noCacheFilter</filter-name>
<filter-class>com.example.filter.NoCacheFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>noCacheFilter</filter-name>
<!-- 只拦截index.html -->
<url-pattern>/index.html</url-pattern>
</filter-mapping>
这样,当访问 index.html
时,Tomcat 返回的响应头就带上了禁止缓存的指令,浏览器就会每次重新请求,不会触发 304。