4

这是目前在 www.google.com 上使用的徽标:

http://www.google.com/images/logos/ps_logo2.png

这是它的 HTTP 响应:

HTTP/1.1 200 OK
Content-Type: image/png
Last-Modified: Thu, 05 Aug 2010 22:54:44 GMT
Date: Fri, 25 Mar 2011 16:41:05 GMT
Expires: Fri, 25 Mar 2011 16:41:05 GMT
Cache-Control: private, max-age=31536000
X-Content-Type-Options: nosniff
Server: sffe
Content-Length: 26209
Age: 0
Via: 1.1 localhost.localdomain

标题Cache-Control说它可以使用 1 年。但是Expires与 相同Date,即立即过时。

为什么有区别?

4

2 回答 2

3

Cache-Control 覆盖任何 HTTP/1.1 缓存或客户端上的 Expires。

所以我假设谷歌想要为 HTTP/1.1 缓存图像,但根本不为 HTTP/1.0 缓存它。

我不知道为什么谷歌在乎。我认为他们甚至希望为老客户缓存徽标。

于 2011-03-25T17:10:10.417 回答
0

原因是谷歌希望用户缓存图像而不是中间共享缓存(因此是private指令)。

许多中间缓存系统可能已经过时并忽略新的 HTTP 功能(作为缓存控制标头),因此这种方法使它们不缓存资源(通过expires标头)。对于其他理解这两者的代理,缓存控制覆盖过期标头。

这是rfc2616 sec14.9.3中引用的常见做法

源服务器可能希望在包含不理解该功能的旧缓存的网络上使用相对较新的 HTTP 缓存控制功能,例如“private”指令。源服务器将需要将新功能与值小于或等于 Date 值的 Expires 字段结合起来。这将防止旧缓存不正确地缓存响应。

于 2015-12-19T12:06:55.730 回答