Web浏览器是否将css / js / img视为与文本不同

时间:2012-11-21 07:45:43

标签: http google-chrome caching browser

我有一个网页,里面有一些图片等。我清除了我的缓存并点击了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,而对于图像浏览器不发送请求并从缓存中提供。

我的问题如下:

  1. 如果您看到两个资源的第一个响应都有max-age和最后修改的标题,那么浏览器是否会将css / JS / img与text coz区别对待,尽管secs的数量不同。那么为什么它仍然发送请求而不是另一个请求。

  2. 如果我们有max-age和last-modified标头优先? max-age(AFAIK)的目的是我们保存到服务器的往返,并且根据HTTP,如果缓存获得最后修改的头,它将始终在后续请求中发送if-modified-since。

1 个答案:

答案 0 :(得分:0)

  1. 不,浏览器不应该以不同方式处理文件。它应该遵循标题所说的内容。浏览器不会发送新的图像请求,因为它收到的文件尚未过期。 max-age和Expires标头都指定不会在2周后过期。

  2. 我认为Last-Modified标题不相关; age的计算方式是自发送对象以来的时间(在Date标题中指定),而不是在修改时。

  3. 更好的问题是max-age缓存控制指令和Expires标头之间的优先级。 RFC 2616第14.9.3节说:

      

    如果响应同时包含Expires标头和max-age指令,则max-age指令会覆盖Expires标头,即使Expires标头限制性更强。

    对象过期后,Last-Modified时间将用于请求的If-Modified-Since标头。