2012-05-02 133 views
1

在研究各种搜索引擎和网站本身#2采用的缓存策略,我不禁注意到在响应报头的细微差别:了解缓存策略

谷歌搜索

Cache-Control: private, max-age=0 
Expires: -1 

雅虎搜索

Cache-Control: private 
Connection: Keep-Alive 
Keep-Alive: timeout=60, max=100 

搜索#1

Cache-Control: private 

必须有通过设置背后的一些合乎逻辑的解释。有人可以照顾解释差异,以便我们每个人都可以学习和获益吗?

回答

1

RFC2616 HTTP/1.1 Header Field Definitions, 14.9.1 What is Cacheable

private 
    Indicates that all or part of the response message is intended for a single 
    user and MUST NOT be cached by a shared cache. This allows an origin server 
    to state that the specified parts of the response are intended for only one 
    user and are not a valid response for requests by other users. A private 
    (non-shared) cache MAY cache the response. 

max-age=0意味着它可以被高速缓存到0秒。值为零意味着不应执行缓存。

Expires=-1当存在max-age时应该忽略,-1是无效日期,应该在过去被解析为一个值(意味着已经过期)。

RFC2616 HTTP/1.1 Header Field Definitions, 14.21 Expires

Note: if a response includes a Cache-Control field with the max-age directive 
     (see section 14.9.3), that directive overrides the Expires field 

HTTP/1.1 clients and caches MUST treat other invalid date formats, especially 
including the value "0", as in the past (i.e., "already expired"). 

persistent connectionsConnection: Keep-AliveKeep-Alive: timeout=60, max=100配置设置。除非另有说明,否则使用HTTP/1.1的所有连接都是持久性的,但这些标头会更改实际的超时值,而不是使用浏览器默认值(其变化很大)。

+0

很好的答案。为了使它完成,你能解释为什么max-age = 0为Google设置,而Yahoo和Stackoverflow不设置它?如果未设置max-age,则缓存如何运行? –

+0

Yahoo(se.search.yahoo.com)向我发送'private,max-age = 0,no-cache'。我不知道为什么StackOverflow没有指定max-age,它目前允许浏览器缓存结果页面。在Meta上询问! – sisve