我有一个映射到所有 URL 的客户端缓存禁用过滤器。
现在我必须专门禁用过滤器并在响应包含 html 以外的任何内容时允许缓存。
我当前的过滤器代码如下:
public class NoCacheFilter implements Filter{
@Override
public void destroy() {}
@Override
public void doFilter(ServletRequest request, ServletResponse response,
FilterChain filterChain) throws IOException, ServletException {
HttpServletResponse httpResponse = (HttpServletResponse) response;
httpResponse.setHeader("Pragma", "no-cache");
httpResponse.setHeader("Cache-Control","no-cache,no-store,max-age=0,s-maxage=0,must-revalidate,proxy-revalidate,private,max-stale=0,post-check=0");
httpResponse.setDateHeader("Expires", 0L);
filterChain.doFilter(request, response);
}
@Override
public void init(FilterConfig arg0) throws ServletException {}
}
注意:只为那些想知道我为什么这样做的人准备 - 我们有一些生成PDF的分页。我们获取这个 PDF 文件并刷新到输出流。在 IE8 中,刷新代码不起作用,日志显示the client closed the connetion immaturely...Cannot write to committed response...
. 启用缓存后,PDF 会正常写入客户端;没有任何问题。现有应用程序的一个单独要求是不允许缓存客户端上的任何页面。