通过java启用浏览器缓存
-
11-09-2019 - |
题
再会,
我在用 缓存过滤器 过滤到我的服务器的特定路径(它将图像流输出到响应流)。我在 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,它会第一次访问服务器,但在后续调用期间使用缓存。但是,如果网址位于我的页面内(即 <img src="..."/>
),似乎一直在攻击服务器。
[编辑] 经过几次测试后,通过地址栏访问我的图像并不总是有效。但缓存似乎确实比 .至于是否真的,我不确定。
附加信息:我的路径类似于 /my/path?then=some&query=strings。请注意,它没有扩展名(即gif、png、jpeg ),但它的 mimetype 设置正确( image/gif、image/png、image/jpeg )。我不确定缺少扩展名或查询字符串的存在是否有任何影响。(另外,还有一个注释。虽然我的 url 有查询字符串,但我在测试中一遍又一遍地使用相同的 uri + 查询字符串)。
有什么想法吗?
谢谢
解决方案
您需要特别查找请求中的任何 Cache-Control 标头。如果请求显示类似 Cache-Control 的内容:无缓存或缓存控制:max-age=0,则缓存无法提供缓存副本。或者,如果响应的 Expires 标头在时间上太接近,则无法长时间缓存。
标头和说明的完整列表位于 HTTP 1.1 规范中。看 HTTP 中的缓存 (13) 和 标头字段定义 (14)
这 萤火虫插件 是使用 Firefox 检查请求和响应标头的一种好方法。
另请注意您如何使用 Firefox。点击刷新按钮相当于说 Cache-Control:no-cache——它表示您想要尽可能最新的副本,这会带您一路返回原始 Web 服务器。
其他提示
我将调查所发送的HTTP请求 - 特别是HTTP标头被用于该图像请求发送。您可以使用 Firefox插件,和/或检查在头小服务程序端(HttpServletRequest
对象)