6

我在页面上有此代码:

<!-- 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 与在每个页面中添加元标记相比有什么优势。?
提前谢谢

4

2 回答 2

8

仅当<meta http-equiv>相关 HTML 文件是从非 HTTP 资源(例如本地磁盘文件系统)打开时(通过file://URI)使用,而不是当相关 HTML 文件是从真实 HTTP 资源(通过http://URI)打开时使用. 相反,使用了通过设置的真实 HTTP 响应标头HttpServletResponse#setHeader()

因此,您的具体问题是因为这些<meta http-equiv>标签被忽略而引起的。

也可以看看:

于 2013-07-24T13:09:29.770 回答
1

通过属性只支持部分header http-equiv,不同浏览器支持不同。例如,Mozilla仅记录对以下内容的支持

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

目的是让服务器解析此标头(meta http-equiv - 它是作为 HTTP 标头的一部分发送的,还是客户端解析主体以获取元标记?),但这从未被广泛实施。它由 Apache httpd 实现mod_proxy

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

使用 <meta> 标签关闭所有浏览器中的缓存?建议一种可能在更多浏览器中工作的格式,但一般来说,这不是受支持的技术。

于 2015-02-09T11:32:39.867 回答