我正在使用Struts开发一个Java EE web应用程序。问题出在Internet Explorer缓存上。如果用户注销,他可以访问某些页面,因为这些页面已缓存,并且不会发出任何请求。如果我点击刷新,它就能正常工作。此外,如果用户再次转到登录页面,它不会重定向他,因为该页面也被缓存。
我想到了两个解决方案:
<meta>
标记。我应该做哪一个?
发布于 2010-05-17 20:49:43
相反,在有问题的页面的HttpServletResponse
上设置以下标题,这样您就不需要手动将其复制到所有页面上:
response.setHeader("Cache-Control", "no-cache, no-store, must-revalidate"); // HTTP 1.1.
response.setHeader("Pragma", "no-cache"); // HTTP 1.0.
response.setDateHeader("Expires", 0); // Proxies.
这相当于在页面中手动设置以下元头:
<meta http-equiv="Cache-Control" content="no-cache, no-store, must-revalidate">
<meta http-equiv="Pragma" content="no-cache">
<meta http-equiv="Expires" content="0">
另请参阅this answer。在测试之前,不要忘记清除浏览器缓存;)
发布于 2010-05-17 21:03:50
我发现以下方法效果很好:
response.setHeader("Cache-Control", "no-cache, no-store, must-revalidate, max-age=0, proxy-revalidate, no-transform, pre-check=0, post-check=0, private");
response.setHeader("Pragma", "no-cache");
response.setDateHeader("Expires", 0);
从这个问题上的标签可以看出,您使用的是Struts。Struts 1.x允许您通过在controller
元素上设置nocache="true"
,在struts-config.xml中进行配置来实现这一点:
<controller processorClass="org.apache.struts.tiles.TilesRequestProcessor" nocache="true" />
如果你想了解更多,Mark Nottingham的caching tutorial是我在网上看到的关于HTTP和缓存的最好的资源。
也就是说,根据您所看到的问题,可能是浏览器历史记录问题。有关这方面的更多信息,请参阅here。
发布于 2012-01-31 01:52:52
看起来IE <9仍然会缓存,即使你在头部有杂注: no-cache,并将浏览器设置为在每次页面加载时刷新。在关闭html之前,您需要在第二个head部分中再次添加meta标记。这就是微软本身的观点。
http://support.microsoft.com/kb/222064/
这里没有更好的解释
http://www.htmlgoodies.com/beyond/reference/article.php/3472881/So-You-Dont-Want-To-Cache-Huh.htm
通过测试,您还需要Expires:-1元标记才能使其工作。建议使用Expires:-1,而不是0。
https://stackoverflow.com/questions/2848945
复制相似问题