【问题标题】:Is there a <meta> tag to turn off caching in all browsers? [duplicate]是否有一个 <meta> 标签可以关闭所有浏览器中的缓存? [复制]
【发布时间】:2010-11-23 09:19:22
【问题描述】:

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

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

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

【问题讨论】:

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

标签: html internet-explorer firefox caching asp.net-web-api


【解决方案1】:

适用于现代网络浏览器(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" />

其实根本不用这些!

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

【讨论】:

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

根据独立安全评估员的出色case study on the industry-wide misunderstanding of controlling caches,只有Cache-Control: no-store 可被Chrome、Firefox 和IE 识别。 IE 可以识别其他控件,但 Chrome 和 Firefox 不能。

【讨论】:

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

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

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

【讨论】:

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

pragma 是你最好的选择:

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

【讨论】:

  • ...这是旧的,所以可能你的建议是,这是因为在较新的实现中,这通常被解释为缓存头缓存控制:无缓存。所以实际上你最好使用更现代的
【解决方案5】:

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

&lt;meta http-equiv="expires" content="timestamp"&gt;

【讨论】:

  • 这真的很聪明,也适用于 chrome
【解决方案6】:

尝试使用

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

【讨论】:

  • 为什么要尝试?你能解释一下吗?
  • 一些解释会很好......
  • 它在 Chrome 上不起作用。
猜你喜欢
  • 2010-11-23
  • 2017-07-01
  • 1970-01-01
  • 2012-06-08
  • 2016-10-01
  • 2019-09-11
  • 2011-07-24
  • 1970-01-01
  • 2010-09-23
相关资源
最近更新 更多