[TOC]
### http缓存分类:
~~~
http缓存分为两类:强制缓存和协商缓存,强制缓存中存在三种状态
~~~
#### 强制缓存:
强制缓存就是向浏览器缓存查找该请求结果,并根据该结果的缓存规则来决定是否使用该缓存结果的过程,强制缓存的情况主要有三种(暂不分析协商缓存过程),如下:
不存在该缓存结果和缓存标识,强制缓存失效,则直接向服务器发起请求(跟第一次发起请求一致),如下图:
![](https://img.kancloud.cn/e3/dc/e3dcb9921496cca776b6255e84df8a6e_649x384.png)
存在该缓存结果和缓存标识,但该结果已失效,强制缓存失效,则使用协商缓存(暂不分析),如下图
![](https://img.kancloud.cn/86/48/8648a638b7a3cf05978dc04c48083ed7_687x407.png)
存在该缓存结果和缓存标识,且该结果尚未失效,强制缓存生效,直接返回该结果,如下图
![](https://img.kancloud.cn/7e/1d/7e1d04502f0e8c2b35ff69a55ab50451_662x340.png)
说明:
控制强制缓存的字段分别是Expires和Cache-Control,其中Cache-Control优先级比Expires高。
#### 协商缓存:
协商缓存就是强制缓存失效后,浏览器携带缓存标识向服务器发起请求,由服务器根据缓存标识决定是否使用缓存的过程,主要有以下两种情况:
协商缓存生效,返回304,如下
![](https://img.kancloud.cn/ba/99/ba99af8d5063d5f63e5276dc7ab6c39b_719x547.png)
协商缓存失效,返回200和请求结果结果,如下
![](https://img.kancloud.cn/e3/d9/e3d963c9354c3181ff905120c6690ac7_768x568.png)
说明:
协商缓存的标识也是在响应报文的HTTP头中和请求结果一起返回给浏览器的,控制协商缓存的字段分别有:Last-Modified / If-Modified-Since和Etag / If-None-Match,其中Etag / If-None-Match的优先级比Last-Modified / If-Modified-Since高。