Tomcat为JS和CSS文件设置no-cache

时间:2011-04-21 22:31:52

标签: caching tomcat no-cache

太令人沮丧了。 :P

真的希望将这些缓存在用户的浏览器上,但它正在设置它。

  

缓存控制:无存储,无缓存,   必须重新验证,post-check = 0,   预检查= 0

如何阻止此事?

我尝试在我们的设置中查找与缓存有关的任何内容。根据文档使用所有默认值,这意味着它是允许的。像JS和CSS这样的静态文件是不同的?

编辑: 我注意到一些JS文件被允许缓存,因为Chrome说它们是“从缓存中检索”的。但是没有CSS文件。

3 个答案:

答案 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多年来一直适用于我(沿着缓存过滤器),从来没有遇到任何问题。