图1
1、强缓存
http1.0 Expires 返回服务器时间,客户端本地时间比较,当expires时间比当前时间晚,说明缓存未过期,即命中缓存
缺点:服务器时间与客户端时间有偏差,造成缓存混乱
http1.1 Cache-Control:max-age判断,单位秒 max-age=3600(缓存1小时),Cache-Control 描述的是相对时间,采用本地时间计算缓存有效期,更佳
2、协商缓存
[Last-modified, If-Modified-Since]
服务端-->Last-Modified-->请求的If-Modified-Since-->服务端比较
[ETag,If-None-Match]
周期重写资源从而改变了Modified时间,但内容未改变,所以要结合该属性判断
Modified不足之处:
1、存在周期性的重写某些资源,但内容未改变
2、修改的信息并不重要,如注释啥的
3、Last-Modified GMT无法精确到毫秒 ,但有写资源更新频率小于1秒
图 2
注意:
1、分布式系统多台服务器文件的last-modified必须保持一致,以免负载均衡到不同服务器导致对比结果不一致
2、分布式系统尽量关闭掉ETag,每台机器生成ETag都会不一样,如淘宝页面中的静态资源response headers中没有ETag