Caching Tomcat没有为JS和CSS文件设置缓存

Caching Tomcat没有为JS和CSS文件设置缓存,caching,tomcat,no-cache,Caching,Tomcat,No Cache,太令人沮丧了P 我真的很想把它们缓存在用户的浏览器上,但它设置了这个 缓存控制:无存储,无缓存, 必须重新验证,后检查=0, 预检查=0 我该怎么阻止这一切 我已尝试在我们的设置中查找与缓存相关的任何内容。根据文档,所有默认值都被使用,这意味着它是允许的。像JS和CSS这样的静态文件不同吗 编辑: 我注意到一些JS文件被允许缓存,因为Chrome说它们是“从缓存中检索的”。但是,没有CSS文件。 <FilesMatch "\.(js|css)$"> ExpiresDefaul

太令人沮丧了P

我真的很想把它们缓存在用户的浏览器上,但它设置了这个

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

我该怎么阻止这一切

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

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


<FilesMatch "\.(js|css)$">
    ExpiresDefault "now plus 1 week"
</Files>
ExpiresDefault“现在加1周”

在您的Apache配置中,只要它位于Tomcat配置之后,就应该做到这一点。

或者您可以让servlet设置缓存过期时间和响应上最后修改的头


我还建议GZIP压缩JavaScript和CSS。Tomcat在其/examples目录中附带了一个压缩过滤器,您可以将其连接到适当的URL中

您应该组合并缩小JavaScript和CSS以获得更好的性能


所有这些都是针对Firefox的YSlow插件的建议。您可以使用Firebug插件查看这些措施的有效性。

您可以编写自己的缓存过滤器,并在web xml中对其进行配置

您可以找到一个基本但很好的示例来说明如何实现它

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>

为映射设置HTTP头。
缓存过滤器
您的.package.CacheFilter
将expires标头添加到响应中
标题
到期时间:2012年4月26日星期四格林威治标准时间20:00:00
然后将其映射(应用于响应):


缓存过滤器
*.js
要求
缓存过滤器
*.css
要求

您可能还希望使用压缩过滤器(以同样的方式),以减少从服务器发送的数据的负载。这对我来说已经有好几年了(在缓存过滤器中),而且从来没有遇到过任何问题。

我们已经在压缩CSS和Javascript文件了。我们也在考虑缩小我们的JS。事实证明,这是这里描述的最明显的地方我不知道我怎么会错过它,呵呵。我们自己手动设置了我想要的选项。我们没有使用Apache,或者至少我没有在生产机器上进行设置的权限;我建议你用这个。还有缓存过滤器?你担心线程安全吗?我会的。
<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>