是否不支持 meta http-equiv 值缓存控制?

Posted

技术标签:

【中文标题】是否不支持 meta http-equiv 值缓存控制?【英文标题】:is meta http-equiv value cache control is not supported? 【发布时间】:2013-07-23 09:18:53 【问题描述】:

我在页面上有此代码:

<!-- no cache headers -->
<meta http-equiv="Cache-Control" content="no-cache, no-store, must-revalidate" />
<meta http-equiv="Pragma" content="no-cache" />
<meta http-equiv="Expires" content="0" />
<!-- end no cache headers -->

当我转到其他页面并点击浏览器的返回按钮(返回到编写此代码的页面)时,它仍然具有页面的缓存状态。选项是添加 PhaseListener 但他们告诉我添加 PhaseListener 是需要维护的额外代码。 问题是: 1.所有浏览器的html中仍然支持元标记属性http-equiv值缓存控制吗?因为当我签入 w3school 时,属性 http-equiv 没有值 cache-control、pragma 和 expires。 2. 如果我添加 phaseListener 与在每个页面中添加元标记相比有什么优势。? 非常感谢

【问题讨论】:

【参考方案1】:

&lt;meta http-equiv&gt; 标记仅在从非 HTTP 资源(例如本地磁盘文件系统)打开相关 HTML 文件时使用(通过 file:// URI),而不是在打开相关 HTML 文件时使用来自真实的 HTTP 资源(通过 http:// URI)。而是使用通过HttpServletResponse#setHeader() 设置的真实HTTP 响应标头。

所以,您的具体问题是因为那些&lt;meta http-equiv&gt; 标签被忽略

另见:

How to control web page caching, across all browsers? Avoid back button on JSF web application

【讨论】:

【参考方案2】:

http-equiv属性只支持部分header,不同浏览器支持不同。比如Mozillaonly document support for:

内容语言 内容安全策略 内容类型 默认样式 刷新 设置cookie

目的是让服务器解析此标头 (meta http-equiv - is it sent as part of an HTTP header, or does the client parse the body for meta tags?),但这从未得到广泛实施。它是由Apache httpd的mod_proxy实现的:

启用 ProxyHTMLMeta 的另一个效果是解析所有 &lt;meta http-equiv=...&gt; 声明并将它们转换为真正的 HTTP 标头,以符合这种 HTML &lt;meta&gt; 元素形式的原始目的。

Using <meta> tags to turn off caching in all browsers? 建议的格式可能适用于更多浏览器 但一般来说,这不是受支持的技术。

【讨论】:

以上是关于是否不支持 meta http-equiv 值缓存控制?的主要内容,如果未能解决你的问题,请参考以下文章

Meta http-equiv属性

meta标签中的http-equiv属性使用介绍

meta标签的http-equiv与content解析

Meta http-equiv属性详解

Meta http-equiv属性详解

静态的html页面想要设置使用浏览器缓存