我了解到,当您无法访问Web服务器的标头时,可以使用以下方法关闭缓存:
<meta http-equiv="Cache-Control" content="no-store" />
但我也看到在某些版本的IE中这个方法不起作用。有没有一组<meta>标签可以在所有浏览器中关闭缓存?
我了解到,当您无法访问Web服务器的标头时,可以使用以下方法关闭缓存:
<meta http-equiv="Cache-Control" content="no-store" />
但我也看到在某些版本的IE中这个方法不起作用。有没有一组<meta>标签可以在所有浏览器中关闭缓存?
该列表仅用于展示不同技术的示例,而不能直接插入到您的代码中。如果直接复制,第二个http-equiv声明会覆盖第一个,第四个会覆盖第三个,并且由于http-equiv声明,代码将无法通过W3C验证。当使用现代的最新浏览器(至少是IE9之后),这些声明已经完全过时了。Chrome和Firefox特别针对这些声明不像您期望的那样或者根本就不会生效。
<meta http-equiv="cache-control" content="max-age=0" />
<meta http-equiv="cache-control" content="no-cache" />
<meta http-equiv="expires" content="0" />
<meta http-equiv="expires" content="Tue, 01 Jan 1980 1:00:00 GMT" />
<meta http-equiv="pragma" content="no-cache" />
在元素中缓存头是不可靠的,因为任何位于站点和用户之间的网络代理都将完全忽略它们。对于类似Cache-Control和Pragma的头,请始终使用真正的HTTP头。
Cache-Control: no-store
被Chrome,Firefox和IE识别。 IE可以识别其他控件,但Chrome和Firefox不行。它在IE5中不起作用,但这并不是一个大问题。
然而,在元素中缓存头是不可靠的;首先,站点和用户之间的任何Web代理都将完全忽略它们。您应始终为诸如Cache-Control和Pragma之类的头使用真正的HTTP头。
pragma是您的最佳选择:
<meta http-equiv="Pragma" content="no-cache">
我注意到在重复服务调用(长轮询)时存在缓存问题。添加元数据没有帮助。一种解决方案是传递一个时间戳
来确保ie
认为这是不同的http
服务请求。这对我有用,因此添加一个服务器端脚本代码片段以自动更新此标记是没有坏处的:
<meta http-equiv="expires" content="timestamp">
尝试使用
<META HTTP-EQUIV="Pragma" CONTENT="no-cache">
<META HTTP-EQUIV="Expires" CONTENT="-1">
<meta http-equiv="Cache-Control" content="no-store"/>
,就像问题中所述。 - Andrew