是否不支持 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】:<meta http-equiv>
标记仅在从非 HTTP 资源(例如本地磁盘文件系统)打开相关 HTML 文件时使用(通过 file://
URI),而不是在打开相关 HTML 文件时使用来自真实的 HTTP 资源(通过 http://
URI)。而是使用通过HttpServletResponse#setHeader()
设置的真实HTTP 响应标头。
所以,您的具体问题是因为那些<meta http-equiv>
标签被忽略。
另见:
How to control web page caching, across all browsers? Avoid back button on JSF web application【讨论】:
【参考方案2】:http-equiv
属性只支持部分header,不同浏览器支持不同。比如Mozillaonly document support for:
目的是让服务器解析此标头 (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 的另一个效果是解析所有
<meta http-equiv=...>
声明并将它们转换为真正的 HTTP 标头,以符合这种 HTML<meta>
元素形式的原始目的。
Using <meta> tags to turn off caching in all browsers? 建议的格式可能适用于更多浏览器 但一般来说,这不是受支持的技术。
【讨论】:
以上是关于是否不支持 meta http-equiv 值缓存控制?的主要内容,如果未能解决你的问题,请参考以下文章