我在doFilter中使用以下代码创建了一个Servlet过滤器:
HttpServletResponse httpResponse = (HttpServletResponse)response; httpResponse.setHeader("Cache-Control","no-cache"); httpResponse.setHeader("Pragma","no-cache"); httpResponse.setDateHeader("Expires", 0); chain.doFilter(request, response);
我要确保没有任何内容在客户端缓存,并且每个请求(甚至是来自浏览器后退按钮的请求)都定向到服务器。
但是,即使实施了上述过滤器后,也会缓存一些页面(可使用浏览器的后退按钮访问)。
和其他未缓存的页面,在Internet Explorer中显示“ 网页过期” 错误。
首先,全套是:
httpResponse.setHeader("Cache-Control", "no-cache, no-store, must-revalidate"); // HTTP 1.1. httpResponse.setHeader("Pragma", "no-cache"); // HTTP 1.0. httpResponse.setDateHeader("Expires", 0); // Proxies.
必须使用no-store和must-revalidate才能在每个Firefox下正常运行。
no-store
must-revalidate
您是如何测试的?这些标头实际上将阻止浏览器从浏览器缓存而不是直接从服务器请求页面。最好的测试是让Filter侦听/*并添加以下类型的调试语句:
Filter
/*
HttpServletRequest httpRequest = (HttpServletRequest) request; String method = httpRequest.getMethod(); String URI = httpRequest.getRequestURI(); System.out.println(method + " request invoked on " + URI);
这应该打印实际的请求。
还要确保您不要使用HTML <meta>标记覆盖JSP页面本身中的标题。
<meta>
和其他未缓存的页面, 在Internet Explorer中显示“ 网页过期” 错误。
仅当非缓存请求是POST请求而不是请求时,您才能获得此信息GET。该GET请求将简单地从服务器再次,而不是从浏览器缓存请求。
POST
GET