【问题标题】:Why is Google's home page logo served with contradictory "Expires" and "Cache-Control" headers?为什么 Google 的主页徽标带有相互矛盾的“Expires”和“Cache-Control”标头?
【发布时间】:2011-07-23 01:42:21
【问题描述】:

这是目前在 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 年。但ExpiresDate 相同,即立即失效。

为什么不一样?

【问题讨论】:

    标签: http caching http-caching


    【解决方案1】:

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

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

    我不知道 Google 为何如此关心。我认为他们甚至希望为老客户缓存徽标。

    【讨论】:

      【解决方案2】:

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

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

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

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

      【讨论】:

        猜你喜欢
        • 2017-09-30
        • 2011-08-13
        • 1970-01-01
        • 2011-12-08
        • 1970-01-01
        • 1970-01-01
        • 2011-03-04
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多