moyazheng 2010-12-24
一、动态页面本身
动态页面输出两个必要要素:
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重新从后端获取数据。