浏览器缓存

1.Cache-control: 

  用户每一次访问www.google.com,浏览器查看缓存文件夹,发现不存在缓存文件,于是发送http请求。
  server端返回http头中包含 cache-control=max-age=60。
  5秒钟后,用户刷新该页面,浏览器发现缓存文件夹中有该页面的缓存,也在存活期内,则直接把缓存文件作为响应。
  

2.Last-Modified

  60秒钟后用户继续刷新该页面,此时max-age已经过期,但缓存文件夹中还有此文件,浏览器读取到该文件的Last-Modified,并将Last-Modified的值
  作为If-Modified-Since的值发送给server端,server端查看该文件的最后修改日期,如果If-Modified-Since比服务器上的最后修改日期要小,就明客户端
  的文件已经低一个版本了,于是返回http 200。反之则返回http 304(不返回包体)。(server端如果没有找到该文件,说明这是请求动态页面的请求,例如:.php .jsp .action)

3.ETag

  server端在返回Last-Modified的同时,还返回另外一个包头信息ETag。
  在发送IF-Modified-Since的同时,还发送If-None-Match,它的值就是ETag的值。
  server端如果IF-Modified-Since和Etag两者都匹配则返回http 304。

 

ps:

  IE6 在资源有gzip压缩同时有ETag头时,cache后再次发请求不会带If-None-Match头

  IE6 下如果出现重复的URL请求,会直接拿缓存中的数据,不会发送http请求

  Pragma、expires 这两个http1.0 头信息可以忽略不写,现在几乎100%都使用http1.1

  浏览器强制刷新的本质就是发送http请求时不包含If-None-Match、IF-Modified-Since,这样server端会重新返回包体。  

 

posted @ 2013-05-23 18:50  microsoft_kk  阅读(264)  评论(0编辑  收藏  举报