4

太令人沮丧了。:P

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

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

我该如何阻止这个?

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

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

4

3 回答 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 过滤器的这种实现已经为我工作了多年(沿着缓存过滤器),并且从来没有遇到过任何问题。

于 2011-04-22T09:18:32.737 回答
1
<FilesMatch "\.(js|css)$">
    ExpiresDefault "now plus 1 week"
</Files>

在你的 Apache 配置中应该可以解决问题,只要它在 Tomcat 配置之后的某个地方。

于 2011-04-21T22:35:24.710 回答
1

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

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

你应该结合并缩小你的 JavaScript 和 CSS 以获得更好的性能。

所有这些都是来自 Firefox 的 YSlow 插件的建议。您可以看到这些措施使用 Firebug 插件的效果如何。

于 2011-04-21T22:40:06.747 回答