太令人沮丧了。 :P
真的希望将这些缓存在用户的浏览器上,但它正在设置它。
缓存控制:无存储,无缓存, 必须重新验证,post-check = 0, 预检查= 0
如何阻止此事?
我尝试在我们的设置中查找与缓存有关的任何内容。根据文档使用所有默认值,这意味着它是允许的。像JS和CSS这样的静态文件是不同的?
编辑: 我注意到一些JS文件被允许缓存,因为Chrome说它们是“从缓存中检索”的。但是没有CSS文件。
答案 0 :(得分:1)
<FilesMatch "\.(js|css)$">
ExpiresDefault "now plus 1 week"
</Files>
你的Apache配置中的应该可以解决问题,只要它在之后 Tomcat配置的东西。
答案 1 :(得分:1)
或者您可以让servlet在响应中设置缓存过期和最后修改的标头。
我还建议使用GZIP压缩JavaScript和CSS。 Tomcat在其/ examples目录中附带了一个压缩过滤器,您可以将其连接到适当的URL。
您应该结合并缩小JavaScript和CSS以获得更好的性能。
所有这些都是来自Firefox的YSlow插件的推荐。您可以看到这些措施使用Firebug插件的效果如何。
答案 2 :(得分:1)
您可以编写自己的缓存过滤器,并在Web xml中进行配置。
Here你找到了一个如何实现它的基本但很好的例子。
在你的web.xml
声明你的过滤器:
<filter>
<description>Set HTTP headers for a mapping.</description>
<filter-name>CacheFilter</filter-name>
<filter-class>your.package.CacheFilter</filter-class>
<init-param>
<description>Adds an expires header to the response</description>
<param-name>header</param-name>
<param-value>Expires: Thu, 26 Apr 2012 20:00:00 GMT</param-value>
</init-param>
</filter>
然后映射它(将其应用于响应):
<filter-mapping>
<filter-name>CacheFilter</filter-name>
<url-pattern>*.js</url-pattern>
<dispatcher>REQUEST</dispatcher>
</filter-mapping>
<filter-mapping>
<filter-name>CacheFilter</filter-name>
<url-pattern>*.css</url-pattern>
<dispatcher>REQUEST</dispatcher>
</filter-mapping>
您可能还希望使用压缩过滤器(以相同的方式),以减少从服务器发送的数据的负载。这个implementation of a gzip filter多年来一直适用于我(沿着缓存过滤器),从来没有遇到任何问题。