0

我有一个网页,里面有一些图片等。我清除了缓存并点击了 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 和 last-modified 标头,尽管秒数不同,浏览器是否将 css/JS/img 与 text coz 区别对待。那么为什么它仍然发送请求而不是另一个。

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

4

1 回答 1

0
  1. 不,浏览器不应该区别对待文件。它应该只服从标题所说的内容。浏览器不会发送对图像的新请求,因为它收到的文件尚未过期。max-age 和 Expires 标头都指定 2 周内不会过期。

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

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

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

一旦对象过期,Last-Modified时间将在If-Modified-Since 请求的标头中使用。

于 2012-11-21T08:29:49.640 回答