ChatGPT解决这个技术问题 Extra ChatGPT

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

这个问题在这里已经有了答案:我们如何控制所有浏览器的网页缓存? (29 个回答) 5 年前关闭。

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

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

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

bobince 和 dpb 的答案的组合是您最好的选择。涵盖所有基地。
i18nguy.com/markup/metatags.html 在此站点上写入最好停用 HTTP 中的缓存,以便该站点不存储在中间服务器上。认为它可能会帮助某人。
对于那些像我一样在后退按钮和“重新打开关闭的标签”缓存中苦苦挣扎的人,请查看另一个问题中的 this answer。这很 hacky,但没有基于标题的解决方案对我有用,而且对于我的目的,这个小 JS 片段很棒(很容易转换为纯 JS)。
这里的答案都是悲伤的。我会添加我自己的,但这是关闭的。根据 MDN:developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Cache-Control 实际上,您确实很可能希望在问题中使用 <meta http-equiv="Cache-Control" content="no-store"/>

C
CommonKnowledge

适用于现代网络浏览器(IE9 之后)

有关正确信息,请参阅页面顶部列出的重复项!

在此处查看答案:How to control web page caching, across all browsers?

适用于 IE9 及之前

不要盲目复制粘贴这个!

该列表只是不同技术的示例,不用于直接插入。如果复制,第二个将覆盖第一个,第四个将覆盖第三个,因为 http-equiv 声明并且 W3C 验证器失败。最多可以有一个 http-equiv 声明;杂注、缓存控制和过期。在使用最新的浏览器时,这些已经完全过时了。反正在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 标头。


更多解释会很好。为什么重复缓存控制和过期?为什么你需要所有这些? 1980年有什么特别之处? pragma:no-cache 和 cache-control:no-cache 有什么区别?更多解释会很好。
对此不是 100% 肯定,但我认为重复是为了处理不同的浏览器。
我找到的最接近解释:i18nguy.com/markup/metatags.html
有时我们需要打破一些 Validator 规则,以使所有浏览器都能正常工作。
该列表只是不同技术的示例,不用于直接插入。如果复制,第二个将覆盖第一个,第四个将覆盖第三个,因为 http-equiv 声明并且 W3C 验证器失败。最多可以有一个 http-equiv 声明;杂注、缓存控制和过期。
k
katzbatz

根据 Independent Security Evaluators 的出色 case study on the industry-wide misunderstanding of controlling caches,Chrome、Firefox 和 IE 仅识别 Cache-Control: no-store。 IE 可以识别其他控件,但 Chrome 和 Firefox 不能。


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

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

然而,缓存头部在元元素中是不可靠的;一方面,网站和用户之间的任何网络代理都会完全忽略它们。对于诸如 Cache-Control 和 Pragma 之类的标头,您应该始终使用真正的 HTTP 标头。


@bobince,谢谢!如果我对网络代理有任何问题,我会记住这一点,但我的“团队”让我完全处于前端,并且无法访问标题。
即使这是在 2009 年编写的,提出 IE5 兼容性也是无关紧要的。
在 IE2 中也不起作用,哈哈。
K
KJ Saxena

pragma 是你最好的选择:

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

...这是旧的,所以您的建议可能是因为在较新的实现中,这通常被解释为缓存标头缓存控制:无缓存。所以实际上你最好使用更现代的
K
Kathir

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

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


这真的很聪明,也适用于 chrome
o
orf

尝试使用

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

为什么要尝试?你可以解释吗?
一些解释会很好......
它不适用于 Chrome。