在我的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代码。 我实际上是在尝试启用"相同的"所有三种浏览器的缓存策略。
此致 罗纳德沃特斯。
答案 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资源的缓存行为。 有人可以向我解释一下吗?
此致 罗纳德沃特斯