美好的一天,
我使用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,如果我通过地址栏访问我的网址,它会在第一次点击服务器,但在接下来的通话中使用缓存。但是,如果网址位于我的网页内(即<img src="..."/>
),则它似乎始终会点击服务器。
[编辑]经过多次测试后,通过地址栏访问我的图片并不是一直都能正常工作。但缓存确实似乎比它更常用。至于是否真的,我不确定。
其他信息: 我的路径是/ my / path?then = some&amp; query = strings。请注意,它没有扩展名(即gif,png,jpeg),但它的mimetype设置正确(image / gif,image / png,image / jpeg)。我不确定是否缺少扩展或查询字符串是否存在任何影响。 (另外,另一个注意事项。虽然我的网址有查询字符串,但我在测试中一遍又一遍地使用相同的uri +查询字符串。)
任何想法为什么?
由于
答案 0 :(得分:1)
我会调查正在发送的HTTP请求 - 特别是为该图像请求发送的HTTP标头。您可以使用Firefox plugin和/或检查servlet端的标头(在HttpServletRequest
对象中)
答案 1 :(得分:1)
您希望在请求中特别查找任何Cache-Control标头。如果请求显示类似Cache-Control:no-cache或Cache-Control:max-age = 0,则缓存无法提供缓存副本。或者,如果响应的Expires标头在时间上太近,则无法长时间缓存。
标头和说明的完整列表在HTTP 1.1规范中。请参阅Caching in HTTP (13)和Header Field Definitions (14)
Firebug plug-in是使用Firefox检查请求和响应标头的一种好方法。
还要注意你是如何使用Firefox的。点击刷新按钮相当于说Cache-Control:no-cache - 它表示你想要最新的副本,这会将你带回原始的web服务器。