提升网站性能 设置合理的cache时间(2)
三.我划分的3个刷新级别
名词解释 全新请求: url产生了变化,浏览器会把他当一个新的资源(发起新的请求中不带If-Modified-Since)。
更正:在firefox后来的版本中对此做了改进,倾向于更多的使用cache,曾经访问过的都会尽量捎带If-Modified-Since头。这些表现和IE一致。修改部分用红色标出。(最后修改时间 2009.12.07)
注: sports.sinajs.cn 在IE下的表现存在一个小bug,由于不是使用的strncpy,导致IE下难以返回304,
需要修改一行代码,把比较字符串长度设置为29即可解决。不过目前本人已不在职,难以修改。
情况一 FF 捎带的头: If-Modified-Since Mon, 07 Dec 2009 10:54:43 GMT
情况二 IE 捎带的头: If-Modified-Since Mon, 07 Dec 2009 10:54:43 GMT; length=6
1,在地址栏中输入http://sports.sinajs.cn/today.js?maxage=11地址按回车。重复n次,直到cache时间11秒过去后,才发起请求,这个请求会带If-Modified-Since。
2,按F5刷新。 在你发起一个全新的请求以后,然后多次按F5都会产生一个带If-Modified-Since的请求。
3, ctrl+F5 ,总会发起一个全新的请求。
下面是按F5刷新的例子演示: http://sports.sinajs.cn/today.js?maxage=11
( 如果这个值大于浏览器最大cache时间maxage,将以浏览器最大cache为准)
发起一个全新请求
GET /today.js?maxage=11 HTTP/1.1
Host: sports.sinajs.cn
Connection: keep-alive
HTTP/1.x 200 OK
Server: Cloudia
Last-Modified: Mon, 24 Nov 2008 11:03:02 GMT
Cache-Control: max-age=11 (浏览器会cache这个页面内容,然后将cache过期时间设置为当前时间+11秒)
Content-Length: 312
Connection: Keep-Alive
按F5刷新
GET /today.js?maxage=11 HTTP/1.1
Host:sports.sinajs.cn
Connection: keep-alive
If-Modified-Since: Mon, 24 Nov 2008 11:03:02 GMT (按F5刷新,If-Modified-Since将上次服务器传过来的Last-Modified时间带过来)
Cache-Control: max-age=0
HTTP/1.x 304 Not Modified
Server: Cloudia
Connection: Keep-Alive
Cache-Control: max-age=11 (这个max-age有些多余,浏览器发现Not Modified,将使用本地cache数据,但不会重新设置本地过期时间)
继续按F5刷新n次……
这11秒内未产生http请求。直到11秒过去了……
按F5刷新
GET /today.js?maxage=11 HTTP/1.1
Host: sports.sinajs.cn
Connection: keep-alive
If-Modified-Since: Mon, 24 Nov 2008 11:03:02 GMT (多次按F5都会产生一个带If-Modified-Since的请求)
Cache-Control:max-age=0
HTTP/1.x 304 Not Modified
Server:Cloudia
Connection: Keep-Alive
Cache-Control: max-age=11
按F5刷新
GET /today.js?maxage=11 HTTP/1.1
Host: sports.sinajs.cn
Connection: keep-alive
If-Modified-Since: Mon, 24 Nov 2008 11:03:02 GMT (同上 。..)
Cache-Control:max-age=0
HTTP/1.x 304 Not Modified
Server: Cloudia
Connection: Keep-Alive
Cache-Control: max-age=11