当前位置:  开发笔记 > 编程语言 > 正文

浏览器缓存控制,动态内容

如何解决《浏览器缓存控制,动态内容》经验,为你挑选了1个好方法。

问题:我似乎无法让FireFox缓存从动态服务器发送的图像

设置:静态Apache服务器,在后端具有反向代理到动态服务器(mod_perl2).

这是服务器的请求URL.它被发送到动态服务器,其中cookie用于验证对映像的访问:

请求标题

Host:  
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: 
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: 
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: 
Cookie:  pz_cred=4KCNr0RM15%2FJCOt%2BEa6%2BL62z%2Fxvbp2xNQHY5pJw5d6Q
Cache-Control: max-age=0

似乎请求不应该发生,因为浏览器应该缓存图像.实际上,接收到200响应,与第一个相同,并且图像似乎被重新获取(尽管浏览器似乎确实使用了高速缓存的图像).

上面的重载请求标头中的Cache-Control:max-age = 0似乎暗示了这个问题.

有谁知道为什么会这样?也许是响应中的Via标头导致问题?



1> Jim Ferrans..:

原始请求有

Cache-Control: no-cache

它告诉所有中间HTTP缓存(包括Firefox)您不想使用缓存响应,您希望从原始Web服务器本身获取响应.

回复说:

Cache-Control: public, max-age=31536000

它告诉大家,只要原始服务器而言,响应可以被缓存.服务器似乎配置为允许缓存PNG图像:HTTP 1.1(第14.21节)说:

注意:如果响应包含带有max-age指令的Cache-Control字段(请参阅第14.9.3节),则该指令将覆盖Expires字段.

你的第二个请求说:

Cache-Control: max-age=0

它告诉所有中间HTTP缓存,你不会采用任何超过0秒的缓存响应.

需要注意的一件事是:如果您点击Firefox中的重新加载按钮,则要求从原始Web服务器重新加载.要测试图像的缓存,请离开页面并返回,或在新选项卡中打开它.不知道为什么你第一次看到no-cache而max-age = 0则是第二次.

顺便说一下,我喜欢Firefox的FireBug插件.您可以查看请求和响应标头以及各种其他好东西.

推荐阅读
TXCWB_523
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有