HTTP缓存有哪些方案
首先上图

HTTP 缓存分两种
- 在 HTTP 1.1 时代,只需要在文件的响应头写上
Cache-Control:max-age=3600
就会自动缓存 1 小时
,也就是说在这一个小时内,再次访问同样的 url
、路径
、查询参数
,将不会再发请求。
- 假如这个时间到期了,这个缓存还能用吗?答案:不知道,得去问一下。
- 在响应头中可以写
Etag:"ABC"
,这是这个文件的特征值,等缓存时间到期了,浏览器会去问这个网站,含有"ABC"
这个特征值的这个文件要不要删。
- 这时浏览器会向服务器发一个请求,
if-None-Match:"ABC"
,服务器会返回状态码:304 或 200
,如果是 304
,就表示这个缓存还能用,不用删,200
则表示需要删除这个缓存,请求最新的文件,一般返回 200
状态码时,会附带一个 body
,为最新的内容。
- 在 HTTP 1.0 时代,用的是
Expires:Wed,21 Oct 2015 02:30:00 GMT
,但是这会有个问题,如果用户电脑的时间是错乱的,这个时间就会失效。
- 特征值则是用
Last-Modified:Wed,21 Oct 2015 01:00:00 GMT
,即最后一次更新的时间。
- 在缓存失效的时候,浏览器就会问
if-Modified-Since:Wed,21 Oct 2015 01:00:00 GMT
,我拿到最后一次的更新时间是这个,需要删除缓存吗。
- 但是这里会有个问题,更新时间的精度太粗了,如果有一秒钟改了多次的文件就不能区分了。
- 返回的状态码与
HTTP 1.1
相同。