Tomcat正在为JS和CSS文件设置无缓存。

4
非常令人沮丧。:P
真的希望这些可以被缓存在用户的浏览器中,但它正在设置这个。

Cache-Control:no-store, no-cache, must-revalidate, post-check=0, pre-check=0

我该如何停止这个?
我已经尝试查找与缓存相关的任何设置。所有默认值都被使用,根据文档,这意味着它是允许的。像JS和CSS这样的静态文件是否不同?
编辑: 我注意到一些JS文件被允许缓存,因为Chrome说它们是“从缓存中检索的”。然而,没有CSS文件。
3个回答

2

您可以编写自己的缓存过滤器,并在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>

然后将其映射(应用于响应):
<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>

您可能还想使用压缩过滤器(同样的方式),以减少从服务器发送的数据负载。这个gzip过滤器实现对我来说已经使用了好几年(连同缓存过滤器一起),并且从未出现任何问题。


Tomcat自带压缩过滤器;我建议使用它。还有缓存过滤器吗?你担心线程安全吗?我会担心的。 - duffymo

1
<FilesMatch "\.(js|css)$">
    ExpiresDefault "now plus 1 week"
</Files>

只要在 Tomcat 配置之后的某个位置,在您的 Apache 配置中加入这个设置就可以了。


我们没有使用Apache,或者至少我没有权限在生产机器上进行操作。 - bobber205

1

或者您可以让一个servlet在响应中设置缓存过期和最后修改的头信息。

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

为了获得更好的性能,您应该合并和压缩JavaScript和CSS。

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


我们已经对CSS和Javascript文件进行了gzip压缩。我们也在考虑对JS进行缩小处理。 - bobber205
原来它就在这里,正如这里所描述的那样。:D 不知道我怎么会错过它呢,哈哈。我们正在手动设置我想要去除的选项。 - bobber205

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接