HTTP
缓存机制其实是提高访问速度和解决信息不同步的一种机制。这种信息不同步在生活中很常见,很多解决思路我们已经司空见惯,带着这种思维,我们可以很好的理解HTTP
缓存机制。HTTP
缓存机制要点如下:
-
HTTP
缓存机制分为强制缓存和协商缓存两类。 - 强制缓存的意思就是不要问了(不发起请求),直接用缓存吧。
- 强制缓存常见技术有
Expires
和Cache-Control
。 -
Expires
的值是一个时间,表示这个时间前缓存都有效,都不需要发起请求。 -
Cache-Control
有很多属性值,常用属性max-age
设置了缓存有效的时间长度,单位为秒
,这个时间没到,都不用发起请求。 -
immutable
也是Cache-Control
的一个属性, -
Cache-Control
的max-age
优先级比Expires
高。 - 协商缓存常见技术有
ETag
和Last-Modified
。 -
ETag
其实就是给资源算一个hash
值或者版本号,对应的常用request header
为If-None-Match
。 -
Last-Modified
其实就是加上资源修改的时间,对应的常用request header
为If-Modified-Since
,精度为秒
。 -
ETag
每次修改都会改变,而Last-Modified
的精度只到秒
,所以ETag
更准确,优先级更高,但是需要计算,所以服务端开销更大。 - 强制缓存和协商缓存都存在的情况下,先判断强制缓存是否生效,如果生效,不用发起请求,直接用缓存。如果强制缓存不生效再发起请求判断协商缓存。
- 表示这个资源这辈子都不用再请求了,但是他兼容性不好,
Cache-Control
其他属性可以参考