1

再会,

我正在使用CacheFilter过滤到我的服务器的某个路径(它将图像流输出到响应流)。我已经在我的 web.xml 中对其进行了如下配置:

<filter>
    <filter-name>imagesCache</filter-name>
    <filter-class>com.samaxes.cachefilter.presentation.CacheFilter</filter-class>
    <init-param>
        <param-name>privacy</param-name>
        <param-value>public</param-value>
    </init-param>
    <init-param>
        <param-name>expirationTime</param-name>
        <param-value>2592000</param-value>
    </init-param>
</filter>

...
<filter-mapping>
    <filter-name>imagesCache</filter-name>
    <url-pattern>/my/path/*</url-pattern>
</filter-mapping>

使用我的 Firefox,如果我通过地址栏访问我的 url,它会第一次访问服务器,但在后续调用期间使用缓存。但是,如果 url 在我的页面内( ie <img src="..."/>),它似乎一直在访问服务器。

[编辑] 经过几次测试后,通过地址栏访问我的图像并不总是有效。但缓存似乎确实比 . 至于是不是真的,我不确定。

附加信息:我的路径类似于 /my/path?then=some&query=strings。请注意,它没有扩展名(即 gif、png、jpeg),但它的 mimetype 设置正确(image/gif、image/png、image/jpeg)。我不确定缺少扩展名或查询字符串的存在是否有任何影响。(另外,另一个注意事项。虽然我的 url 有查询字符串,但我在测试中一遍又一遍地使用相同的 uri + 查询字符串)。

任何想法为什么?

谢谢

4

2 回答 2

1

我将调查正在发送的 HTTP 请求——尤其是为该图像请求发送的 HTTP 标头。您可以使用Firefox 插件,和/或检查 servlet 端的标头(在HttpServletRequest对象中)

于 2009-07-07T10:41:16.380 回答
1

您特别想在您的请求中查找任何 Cache-Control 标头。如果请求显示类似 Cache-Control: no-cache 或 Cache-Control: max-age=0 的内容,则缓存无法提供缓存副本。或者,如果响应的 Expires 标头在时间上太接近,那么它就不能被缓存太久。

标头和解释的完整列表在 HTTP 1.1 规范中。请参阅HTTP 中的缓存 (13)标头字段定义 (14)

Firebug 插件是使用 Firefox 检查请求和响应标头的一种好方法 。

还要注意你是如何使用 Firefox 的。点击刷新按钮相当于说 Cache-Control: no-cache ——它表示您想要最新鲜的副本,这会将您一路带回您的原始 Web 服务器。

于 2009-07-07T12:23:28.087 回答