我尝试了很多可能的解决方案,但我无法解决问题:
<meta http-equiv="Cache-control" content="no-cache">
<meta http-equiv="Cache-control" content="no-store">
<meta http-equiv="Cache-control" content="must-revalidate">
<meta http-equiv="pragma" content="no-cache">
<meta name="expires" content="0">
这些都不起作用。有人可以帮忙吗?我正在使用jsp / servlet。应用程序是websphere portal 6.1的一个portlet。
答案 0 :(得分:1)
永远不要依赖HTML页面中的元标记来控制缓存。相反,您需要在响应中设置HTTP标头。在显示任何输出之前,在控制器中,您需要设置以下内容:
response.setHeader("Cache-Control", "max-age=0, must-revalidate");
这在过去对我有用,但如果不能解决这个问题,你也可以尝试以下方法
response.setHeader("Pragma", "No-cache");
response.setHeader("Cache-Control", "no-cache");
response.setDateHeader("Expires", 1);
答案 1 :(得分:1)
元标题仅在从本地磁盘文件系统而不是HTTP请求页面时使用。您需要设置真实 HTTP响应标头。
创建一个基本上完成以下工作的filter:
@Override
public void doFilter(ServletRequest req, ServletResponse res, FilterChain chain) throws IOException, ServletException {
HttpServletResponse hsr = (HttpServletResponse) res;
hsr.setHeader("Cache-Control", "no-cache, no-store, must-revalidate"); // HTTP 1.1.
hsr.setHeader("Pragma", "no-cache"); // HTTP 1.0.
hsr.setDateHeader("Expires", 0); // Proxies.
chain.doFilter(req, res);
}
将其映射到例如*.jsp
的URL模式,以使其在所有JSP页面上运行。
原始问题中的Cache-Control
标题是正确的,no-store
和must-revalidate
必须no-cache
。到目前为止发布的几乎所有其他答案基本上都是针对MSIE的。
答案 2 :(得分:0)
尝试在servlet的响应头中设置那些,如
response.setHeader("Cache-Control", "no-cache");
response.setHeader("Cache-Control", "no-store");
response.setHeader("Pragma", "no-cache");
response.setDateHeader("Expires", 0);
答案 3 :(得分:0)
Firefox 3因其缓存问题而闻名
https://bugzilla.mozilla.org/buglist.cgi?quicksearch=Cache-control
我曾经实施过一个解决方案,每个页面都会添加一个随机ID,因此Firefox认为它是一个不同的页面。不太了解portlet,但你试过吗?
答案 4 :(得分:0)
我们与Liferay Portal Server有类似的问题。我们的解决方案是在资源链接(css / js)中添加一个时间戳,如
/mysite/css/menu.css?t=1291218768531
我们控制何时从应用程序中刷新时间戳,因此当我们强制浏览器重新加载资源时,我们可以控制。