问题: 我似乎无法让FireFox缓存从动态服务器发送的图片
设置: 静态Apache服务器通过反向代理到后端的动态服务器(mod_perl2)。
这里是服务器的请求URL。它被发送到动态服务器,其中Cookie用于验证对图像的访问权限:
请求头
Host: <OBSCURED>
User-Agent: Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.9.0.15) Gecko/2009102815 Ubuntu/9.04 (jaunty) Firefox/3.0.15
Accept: image/png,image/*;q=0.8,*/*;q=0.5
Accept-Language: en-us,en;q=0.5
Accept-Encoding: gzip,deflate
Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7
Keep-Alive: 300
Connection: keep-alive
Referer: <OBSCURED>
Cookie: pz_cred=4KCNr0RM15%2FJCOt%2BEa6%2BL62z%2Fxvbp2xNQHY5pJw5d6Q
Pragma: no-cache
Cache-Control: no-cache
动态服务器将图像发送回服务器,并提供以下响应:
响应头:
Date: Tue, 24 Nov 2009 04:28:07 GMT
Server: Apache/2.2.11 (Ubuntu) mod_apreq2-20051231/2.6.0 mod_perl/2.0.4 Perl/v5.10.0
Cache-Control: public, max-age=31536000
Content-Length: 25496
Content-Type: image/jpeg
Via: 1.1 127.0.1.1:8081
Keep-Alive: timeout=15, max=75
Connection: Keep-Alive
到目前为止,一切都很好(我想)。然而,在重新加载页面时,图片不会被缓存,请求会再次发送:
请求头:
Host: <OBSCURED>
User-Agent: Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.9.0.15) Gecko/2009102815 Ubuntu/9.04 (jaunty) Firefox/3.0.15
Accept: image/png,image/*;q=0.8,*/*;q=0.5
Accept-Language: en-us,en;q=0.5
Accept-Encoding: gzip,deflate
Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7
Keep-Alive: 300
Connection: keep-alive
Referer: <OBSCURED>
Cookie: pz_cred=4KCNr0RM15%2FJCOt%2BEa6%2BL62z%2Fxvbp2xNQHY5pJw5d6Q
Cache-Control: max-age=0
浏览器应该已经缓存了图片,所以不应该发生这样的请求。但事实上,服务器返回了一个200响应,就像第一次请求一样,看起来图片被重新获取了(虽然浏览器似乎确实在使用缓存的图片)。
问题似乎可以从上面reload请求头中的Cache-Control: max-age=0得到提示。
有人知道为什么会这样吗?也许是响应中的Via头引起了问题?