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

时间:2013-07-24 03:45:16

标签: java caching jsf-2 http-caching

我在这个页面上有这个代码:

<!-- 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.是元标记属性http-equiv值在所有浏览器的html中仍然支持cache-control?因为当我在w3school登记时,属性http-equiv没有值缓存控制,编译指示和过期。
2.如果我添加了phaseListener,那么在每个页面中添加元标记会有什么好处。
提前致谢

2 个答案:

答案 0 :(得分:8)

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

因此,您的具体问题是由于<meta http-equiv>标记被忽略而引起的。

另见:

答案 1 :(得分:1)

http-equiv属性仅支持某些标头,并且在不同的浏览器中支持不同。例如,Mozilla only document support for

  • 内容语言
  • 内容安全-政策
  • 内容类型
  • 缺省风格
  • 刷新
  • 的Set-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的另一个作用是解析所有<meta http-equiv=...>声明并将它们转换为真实的HTTP标头,以符合此{* 1}}元素的这种形式的原始目的。

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