缓存时间

Squid缓存动态页面精确的缓存时间

一、动态页面本身

动态页面输出两个必要要素:

1、  Last-Modified

Last-Modified的时间可以不用很在意,它不会对缓存时间产生影响。

格式以asp页面为例:

Response.AddHeader “Last-Modified”,”Wed, 07 Jan 2010 10:35:56 GMT”

2、  Cache-Control

关键。指要缓存的时间。

格式以asp页面为例:

Response.CacheControl=”max-age=120″

缓存两分钟。

二、关于精确的缓存时间
 

①:浏览器第一次请求,Squid无缓存对象;

②:向后端请求;

③:(重要!)

第一:后端响应Squid的请求;

第二:Squid收到后端响应,把对象放入cache,并把后端响应时后端web服务器的当前时间(time_A)作为对象缓存时间的下限;Web服务器响应请求时会在响应header里加一个Date值,表示响应请求的时间;

④:Squid响应浏览器;

⑤:(重要!)浏览器再次请求同一对象

       第一:Squid得到自己服务器当前时间(time_B);

       第二:计算响应header中age的值

       Age= time_B- time_A

       第三:判断过期

       如果age> max-age则重新从后端获取;

       如果age< max-age则后cache响应浏览器(HTTP/1.0 304 Not Modified)

    第四:如果web服务器的时间小于squid服务器时间,会使age偏大,使页面缓存时间小于页面max-age指定的时间;反之会使age偏小,使页面缓存时间大于页面max-age指定的时间

三、关于浏览器刷新

1、IE刷新

IE刷新会请求头里添加If-Modified-Since及其它不与缓存相关的东西;

2、Firefox、Opera、傲游等

它们的刷新会添加请求header里添加Cache-Control=max-age=0,这样导致squid重新从后端获取数据。