是否有 <meta> 标签可以关闭所有浏览器中的缓存?[复制]

Is there a <meta> tag to turn off caching in all browsers? [duplicate]

提问人:leeand00 提问时间:8/27/2009 最后编辑:Robleeand00 更新时间:3/22/2023 访问量:946948

问:

我读到,当您无法访问 Web 服务器的标头时,您可以使用以下命令关闭缓存:

<meta http-equiv="Cache-Control" content="no-store" />

但我也读到这在某些版本的 IE 中不起作用。是否有任何一组 <meta> 标签可以关闭所有浏览器中的缓存?

Internet-Explorer Firefox 缓存 ASP.NET-WEB-API XHTML

评论

1赞 nickf 8/27/2009
Bobince 和 DPB 的答案组合是您最好的选择。 涵盖所有基础。
2赞 Bodo 5/28/2015
i18nguy.com/markup/metatags.html在此站点上写入最好在 HTTP 中停用缓存,以便站点不会存储在中间服务器上。以为它可能会对某人有所帮助。
0赞 1/31/2017
对于那些像我一样在后退按钮和“重新打开关闭的选项卡”缓存中苦苦挣扎的人,请从另一个问题中查看此答案。这很笨拙,但没有基于标头的解决方案对我有用,就我的目的而言,这个小 JS 片段很棒(易于转换为纯 JS)。
1赞 Andrew 4/20/2020
这里的答案都是可悲的。我会添加我自己的,但这已经关闭了。根据 MDN 的说法:developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Cache-Control 你实际上很可能想使用问题中的样子。<meta http-equiv="Cache-Control" content="no-store"/>
1赞 Rob 3/22/2023
然后我会为你添加标签。

答:

10赞 KJ Saxena 8/27/2009 #1

Pragma 是您最好的选择:

<meta http-equiv="Pragma" content="no-cache">

评论

9赞 Chris Halcrow 9/15/2013
...这是旧的,所以可以推测你的建议是,这是因为在较新的实现中,这通常会被解释为缓存标头 cache-control: no-cache。所以实际上你最好使用更现代<meta http-equiv=“cache-control” content=“no-cache” />
25赞 bobince 8/27/2009 #2

它在 IE5 中不起作用,但这不是一个大问题。

但是,缓存标头在元元素中是不可靠的;首先,站点和用户之间的任何网络代理都将完全忽略它们。对于Cache-Control和Pragma等标头,应始终使用真正的HTTP标头。

评论

0赞 leeand00 8/27/2009
@bobince,谢谢!如果我对网络代理有任何问题,我会记住这一点,但我的“团队”让我完全处于前端,并且不允许我访问标头。
6赞 Alex White 4/10/2015
即使在 2009 年写这篇文章时,提出 IE5 兼容性也无关紧要。
25赞 Shawn Dotey 7/19/2016
在 IE2 中也不起作用,哈哈。
750赞 user159088 8/27/2009 #3

对于现代 Web 浏览器(IE9 之后)

有关正确信息,请参阅页面顶部列出的副本!

请参阅此处的答案:如何在所有浏览器中控制网页缓存?


对于 IE9 及更早版本

不要盲目复制粘贴这个!

该列表只是不同技术的示例,不适用于直接 插入。如果复制,第二个将覆盖第一个和 第四个将覆盖第三个,因为 http-equiv 声明 AND 在 W3C 验证器中失败。最多,一个人可以 每个 http-equiv 声明中的一个;pragma、cache-control 和 到期。当使用现代最新的浏览器时,这些已经完全过时了。 反正在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" />

其实根本不用这些!

缓存标头在元元素中不可靠;首先, 网站和用户之间的任何网络代理都将完全忽略 他们。您应该始终对标头使用真正的 HTTP 标头,例如 Cache-Control 和 Pragma。

评论

245赞 Bennett McElwee 9/11/2012
更多的解释会很好。为什么重复 cache-control 并过期?为什么需要所有这些?1980年有什么特别之处?pragma:no-cache 和 cache-control:no-cache 有什么区别?更多的解释会很好。
18赞 Andrew Hagner 1/10/2013
不是 100% 确定这一点,但我认为重复旨在处理不同的浏览器。
11赞 Andrew Hagner 1/10/2013
我发现的最接近的解释是:i18nguy.com/markup/metatags.html
34赞 Axel Advento 7/1/2013
有时我们需要打破一些验证者规则,以使事情在所有浏览器上都能正常工作。
29赞 StrangeDucks 11/8/2013
该列表只是不同技术的示例,不适用于直接插入。如果复制,第二个将覆盖第一个,第四个将覆盖第三个,因为 http-equiv 声明并且 W3C 验证器失败。最多可以有一个 http-equiv 声明;pragma、cache-control 和 expires。
8赞 user1496767 7/3/2012 #4

我注意到在重复相同的服务调用(长轮询)时服务调用存在一些缓存问题。添加元数据无济于事。一种解决方案是传递 a 以确保认为这是一个不同的服务请求。这对我有用,所以添加一个服务器端脚本代码片段来自动更新这个标签不会有什么坏处:timestampiehttp

<meta http-equiv="expires" content="timestamp">

评论

0赞 Geomorillo 2/6/2017
这真的很聪明,OT也可以在Chrome上工作
-5赞 orf 11/7/2012 #5

尝试使用

    <META HTTP-EQUIV="Pragma" CONTENT="no-cache">
    <META HTTP-EQUIV="Expires" CONTENT="-1">

评论

10赞 7/25/2015
为什么要尝试?你能解释一下吗?
0赞 Alejandro González 10/20/2017
一些解释会很好......
0赞 Donald Duck 11/5/2017
它不适用于 Chrome。
0赞 Eric 5/13/2023
您应该先在 W3C 验证器中尝试您的解决方案(并查看错误)
84赞 Paul 7/3/2014 #6

根据独立安全评估员对全行业对控制缓存的误解的出色案例研究,只有 Chrome、Firefox 和 IE 才能识别。IE 可以识别其他控件,但 Chrome 和 Firefox 无法识别。Cache-Control: no-store

评论

5赞 ianbeks 5/20/2016
我发现 Chrome 对 Cache-Control 的响应更好:无缓存(之后是 100% 条件请求)。“no-store”有时甚至没有尝试条件请求就从缓存中加载。Firefox 对“无存储”的响应更好,但如果您立即在后记后立即重新加载,有时仍然会从缓存中加载。真是一团糟!