我对所有缓存内容感到困惑。我正在尝试设置mod_expires
以将HTTP Requests
从我的网站减少到服务器。
到目前为止我做得很好,我安装了mod_expires
并在http://httpd.apache.org/docs/2.0/mod/mod_expires.html上的说明中写了一个.conf文件。
现在,例如,我的所有.png, .gif, .jpeg
文件都有一个Cache-Control
标头。我的预期结果是,浏览器在该时间段内不会执行任何GET Request
(从Cache-Control
值给出)。但确实如此,每个文件都会触发一个请求并收到HTTP 304 not Modified
。
这是错误的行为不是吗?它应该从内部缓存加载该文件。
我不明白的一件事是浏览器发送Response header
:Cache-Control: max-age=0
。应该是这样吗?
以下是单个Request + Response headers
的完整示例.png file
:
请求
Host dev-mgg.localdomain
User-Agent Mozilla/5.0 (Windows; U; Windows NT 5.1; de; rv:1.9.2.8) Gecko/20100722 Firefox/3.6.8
Accept image/png,image/*;q=0.8,*/*;q=0.5
Accept-Language de-de,de;q=0.8,en-us;q=0.5,en;q=0.3
Accept-Encoding gzip,deflate
Accept-Charset ISO-8859-1,utf-8;q=0.7,*;q=0.7
Keep-Alive 115
Connection keep-alive
Referer http://dev-mgg.localdomain/css/global/icons.css?18224
Cookie IR_SQLPwdStore=; IR_SQLUser=sysadm
If-Modified-Since Thu, 24 Jul 2008 06:24:11 GMT
If-None-Match "4010127-3c4-452bf1aefd8c0"
Cache-Control max-age=0
响应
Date Mon, 02 Aug 2010 14:00:28 GMT
Server Apache/2.2.9 (Debian) PHP/5.2.6-1+lenny8 with Suhosin-Patch mod_perl/2.0.4 Perl/v5.10.0
Connection Keep-Alive
Keep-Alive timeout=15, max=59
Etag "4010127-3c4-452bf1aefd8c0"
Expires Mon, 02 Aug 2010 14:04:28 GMT
Cache-Control max-age=240
答案 0 :(得分:2)
看起来服务器发回的Expires标头将来只有4分钟。 Web浏览器决定是否实际发出请求的算法(基于Expires值)使用当前时间与到期日期的“接近程度” - 因此,除非到期日期仍然很长(几周,几个月) ,年,你可以非常确定浏览器会发出文件请求。