我有一个网页,里面有一些图片等。我清除了我的缓存并点击了URL。页面请求具有以下响应标头:
Cache-Control:public, max-age=600
Connection:keep-alive
Content-Encoding:gzip
Content-Language:en
Content-Type:text/html; charset=utf-8
Date:Wed, 21 Nov 2012 07:14:35 GMT
Etag:"1353481170-1"
Expires:Sun, 19 Nov 1978 05:00:00 GMT
Last-Modified:Wed, 21 Nov 2012 06:59:30 +0000
Server:Apache/2.2.3 (CentOS)
Vary:Cookie,Accept-Encoding
其中一张图片有这些响应标题:
Accept-Ranges:none
Cache-Control:max-age=1209600
Connection:keep-alive
Content-Encoding:gzip
Content-Length:2206
Content-Type:text/css
Date:Wed, 21 Nov 2012 07:14:36 GMT
ETag:"6c4f9-89e-4cee5893ab000"
Expires:Wed, 05 Dec 2012 07:14:36 GMT
Last-Modified:Tue, 20 Nov 2012 04:19:12 GMT
Server:Apache/2.2.3 (CentOS)
Vary:Accept-Encoding
当我再次点击相同的URL并在chrome中看到控制台时,我看到主要请求我的浏览器发送了一个If-modified-since并从服务器获得提示304,而对于图像浏览器不发送请求并从缓存中提供。
我的问题如下:
如果您看到两个资源的第一个响应都有max-age和最后修改的标题,那么浏览器是否会将css / JS / img与text coz区别对待,尽管secs的数量不同。那么为什么它仍然发送请求而不是另一个请求。
如果我们有max-age和last-modified标头优先? max-age(AFAIK)的目的是我们保存到服务器的往返,并且根据HTTP,如果缓存获得最后修改的头,它将始终在后续请求中发送if-modified-since。
答案 0 :(得分:0)
不,浏览器不应该以不同方式处理文件。它应该遵循标题所说的内容。浏览器不会发送新的图像请求,因为它收到的文件尚未过期。 max-age和Expires标头都指定不会在2周后过期。
我认为Last-Modified
标题不相关; age的计算方式是自发送对象以来的时间(在Date
标题中指定),而不是在修改时。
更好的问题是max-age
缓存控制指令和Expires
标头之间的优先级。 RFC 2616第14.9.3节说:
如果响应同时包含Expires标头和max-age指令,则max-age指令会覆盖Expires标头,即使Expires标头限制性更强。
对象过期后,Last-Modified
时间将用于请求的If-Modified-Since
标头。