再会,

我在用 缓存过滤器 过滤到我的服务器的特定路径(它将图像流输出到响应流)。我在 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对象)

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top