使用<meta>标签关闭所有浏览器的缓存?

lee*_*d00 427 html firefox internet-explorer caching asp.net-web-api

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

<meta http-equiv="Cache-Control" content="no-store" />
Run Code Online (Sandbox Code Playgroud)

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

小智 701

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

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

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


对于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" />
Run Code Online (Sandbox Code Playgroud)

其实根本不要使用这些!

缓存标头在元元素中是不可靠的; 例如,站点和用户之间的任何Web代理都将完全忽略它们.您应该始终为标头(如Cache-Control和Pragma)使用真正的HTTP标头.

  • 更多解释会很好.为什么重复缓存控制并过期?为什么你需要所有这些?1980年的特别之处是什么?pragma:no-cache和cache-control:no-cache之间有什么区别?更多解释会很好. (231认同)
  • 有时我们需要打破一些Validator规则才能使所有浏览器都能正常工作. (33认同)
  • 该列表只是不同技术的示例,不是直接插入.如果复制,第二个将覆盖第一个,第四个将覆盖第三个,因为http-equiv声明和W3C验证器失败.最多可以有一个http-equiv声明中的一个; 编译指示,缓存控制和过期. (26认同)
  • 不是100%肯定,但我认为重复旨在处理不同的浏览器. (16认同)
  • 最近我找到了解释:http://www.i18nguy.com/markup/metatags.html (11认同)
  • 不验证W3C验证器"元素元素属性http-equiv的错误值缓存控制"."元素元素属性http-equiv的值不正确." "元素元素属性http-equiv的错误值pragma." (4认同)
  • 新的 Chrome 浏览器无法按预期使用这些标签。 (2认同)
  • 不行,Chrome. (2认同)

小智 78

这是对行业范围内对控制缓存的误解的一个很好的案例研究的链接.

http://securityevaluators.com/knowledge/case_studies/caching/

总之,根据这篇文章,只有Cache-Control: no-storeChrome,Firefox和IE 才能识别.IE识别其他控件,但Chrome和Firefox不识别.

  • 我发现Chrome对Cache-Control的响应更好:no-cache(之后是100%条件请求).有时从缓存加载"no-store"甚至没有尝试条件请求.Firefox对"无存储"的响应更好,但如果你在文字之后立即重新加载,它仍然有时会从缓存中加载.真是一团糟! (4认同)

bob*_*nce 24

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

但是,缓存标题在元元素中是不可靠的; 例如,站点和用户之间的任何Web代理都将完全忽略它们.您应该始终为标头(如Cache-Control和Pragma)使用真正的HTTP标头.

  • 在IE2中也不起作用,哈哈. (17认同)
  • 即使这是在2009年写的,提出IE5兼容性也无关紧要. (6认同)

Ksh*_*KJ- 7

实用是您最好的选择:

<meta http-equiv="Pragma" content="no-cache">
Run Code Online (Sandbox Code Playgroud)

  • ...这很旧,所以大概您的建议是因为在较新的实现中,这通常会解释为缓存头cache-control:no-cache。因此,实际上,您最好使用更现代的&lt;meta http-equiv =“ cache-control” content =“ no-cache” /&gt; (7认同)

小智 6

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

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