Http缓存的理解

整体流程如下:

Http缓存的理解_第1张图片
201211281402442505.png

检查是否过期

  1. 首先检查是否过期(Expires http1.0 CachControl:Maxage),如果没有过期,直接读缓存
  2. 如果过期,查看是否有ETag,如果有,传递IF-None-Match:ETag的值 和服务器的ETag比对,如果一样,则返回304请求,浏览器直接从缓存中拿数据
  3. 如果没有ETag,查看请求资源是否有lastmodifytime,如果没有直接从服务器从新请求数据
  4. 如果有,则请求头中加上If-modify-Since:上次修改时间,然后服务器和资源最近的修改时间进行比对,如果最近修改时间比较新,所以修改过,则重新返回200,如果相等,则返回304

为什么有了Lastmodifytime还要有Etag

因为Lastmodify只能精确到秒,但是Etag也是有问题的,分布式系统中,每个系统的静态文件,算出来的Etag值是不相等的

你可能感兴趣的:(Http缓存的理解)