浏览器本身是否更改了缓存控制标头?

时间:2015-11-13 10:36:55

标签: jsf primefaces servlet-filters cache-control

在我的servlet过滤器中,我设置了以下响应头以启用某些资源的缓存:

缓存控制:public,max-age = 604800,必须重新验证

当我查看Google Chrome版本46中的响应标头时,我可以看到上面提到的缓存控制标头的相同值。 Chrome还会显示GET 200(来自缓存)0ms。

然而,Firefox 38显示了GET 304,令我惊讶的是 Cache-Control:" no-cache" 作为缓存控制头的值而不是值集通过我的servlet过滤器。

Internet Explorer 10显示GET 200以及" no-cache"作为cache-controle标题的值。

那么,你能解释一下我为什么或如何在我的servlet过滤器中设置的值(在我在JBoss AS 7上部署的JSF / PrimeFaces应用程序中)作为http响应头,在chrome中显示未修改但在firefox中更改和IE。 我自己没有编写任何可能已覆盖此标头的JavaScript代码。 我实际上是在尝试启用"相同的"所有三种浏览器的缓存策略。

此致 罗纳德沃特斯。

1 个答案:

答案 0 :(得分:0)

回答我自己的问题:
该问题根本与响应标头无关。 我的应用中的所有JSF资源都有以下网址布局:

https://myserver/myapp/javax.faces.resource/jquery/jquery.js .xhtml LN = primefaces&安培; V = 5.2

注意jquery.js之后的xhtml后缀?
我认为它是由jsf运行时自动添加的。

我的web.xml中也有以下内容:

  <security-constraint>
    <web-resource-collection>
      <web-resource-name>All pages</web-resource-name>
      <description>Protects all resources</description>
      <url-pattern>*.xhtml</url-pattern>
    </web-resource-collection>
  </security-constraint>

显然,此安全约束导致jsf资源未被Internet Explorer缓存。

将url-pattern更改为/ mypages / *而不是* .xhtml之后,jquery.js等主要资源以及其他资源(例如:h:graphicImage library =&#34; images&#34;)被正确缓存(http 304)在Internet Explorer 10中。

我仍然希望解释为什么安全约束会干扰或改变jsf资源的缓存行为。 有人可以向我解释一下吗?

此致 罗纳德沃特斯