其他分享
首页 > 其他分享> > HTTP主动缓存和协商缓存模型

HTTP主动缓存和协商缓存模型

作者:互联网

假设现在没有代理商店
----强制缓存和协商缓存
小区楼下的代理商店的缓存方式有两种,一个重视强制缓存,一种是协商缓存

-----------强制缓存
我去超市买书
1.我要买一本书
2.超市说,好的,这是您要的,给您,这本书的完稿时间是2022-01-01,今天凌晨12点过期
3.我收到了,我把报纸备份缓存下来(上面依然有这本书的完稿时间是2022-01-01以及今天凌晨12点过期的信息),
然后看报,然后看完了就把书扔掉了
4。过了一段时间,我又想看这本书了,所以我又需要去超市买书。
这个时候我想,我之前备份了这份书,然后就对比了现在想买书的时间
和之前备份书的有效期。如果还在有效期内,就还看备份的那份书,
如果过了有效期,就去超市
5.结果我发现书还在有效期,所以就去储物房里拿备份的书看(from disk cache)


这个去拿储物房里拿备份书看的决定是我自己做的
------浏览器决定是否使用缓存------


----------协商缓存  按ID来确定----

我去超市买书
1.我要买一份书
2.超市说,好的,这是书,资源ID=eTag,给您,今天有效,今天凌晨12点过期
3.我收到书后,就把书备份了一下,资源ID=etag,放到储物房里,报纸上面有过期时间
4.然后我开始看书,看完以后就把书扔了
5.过了一段时间,我又想看书了,所以我又需要去超市买书。
我先检查了储物房里的书,发现过期了。
所以我打电话给超市,“超市你好,我要买这本书,这本书之前的资源ID是etag,是if-none-match字段的值”
6.超市收到电话,然后先去给你拿书,拿完书就会生成一个资源ID etag,超市对比了一下,发现新的etag和
旧的你反馈的etag是一样的,说明这本书没有做修改,就和你说,小明你好,这本书的状态是304 not nodified,
我就不重复给你同样的书了,你还是看你之前那本书
7.那你知道了,虽然你的储物房里的书过期了,但是内容还是一样的,所以就还是从储物房里拿出这本书来看

8.如果6超市发现生成的新的etag和你反馈的etag不一样,那就说明这本书做了修改,有新的修订本了。
它还是卖新的修订本给你,就把新的书和新的资源ID etag发给你

9.你收到8的新的书了,就把原来储物房里的书更新成新的这本书了



---------协商缓存   按时间来确定-----------
我去超市买书
1.我要买一本书
2.超市说,好的,这是您要的,给您,今天有效,今天凌晨12点过期,这本书的完稿时间是2022-01-01 00:00:00GMT

3.我收到了,我把报纸备份缓存下来(上面依然有今天有效,今天凌晨12点过期
以及完稿时间是2022-01-01 00:00:00GMT的信息),
然后看报,然后看完了就把书扔掉了
4。过了一段时间,我又想看书的报纸了,所以我又需要去超市买书。
这个时候我想,我之前备份了一份书,然后就对比了现在想买书的时间
和之前备份书的有效期。如果还在有效期内,就还看备份的那份书,
如果过了有效期,就去超市
5.我发现过了有效期,就去超市
“超市,我要买书,上次买的这本书过期了,书的完稿时间(if-modified-since)是2022-01-01 00:00:00GMT”
6.超市说,好的,我确认一下,然后把这本书上次的完稿时间“if-modified-since”
和现在超市里的书的新的完稿时间2022-02-0100:00:00GMT(last-modified)对比。
发现,确实2月份又改过一次,该把修改过的书给小明,所以把新书给小明
(----返回最新资源,HTTP 200 OK)

如果超市里的书的完稿时间和小明提供的完稿时间一样或者还要老,那就说明书最近没有修改
所以超市会和小明说,您之前的书就已经是最新版本了,您看您之前的书吧
小明就继续看自己储物房里放的书
(----返回304 Not Modified,走缓存)

  

 

etag和 last modified一种按时间,一种按ID,一般ID的优先级比时间的优先级高

顺序:先看强制缓存(有没有过期)  再看资源ID(资源有没有变 etag)  最后看资源修改时间(last modified)

https://developer.mozilla.org/zh-CN/docs/Web/HTTP/Headers/Cache-Control这个网页有cache-control字段的说明文档,讲得很清楚

 

标签:本书,01,HTTP,协商,备份,超市,缓存,etag
来源: https://www.cnblogs.com/bojiandkake/p/16202697.html