我们为啥用冰箱
我把浏览器缓存比作一个冰箱,把冰箱里的东西比作缓存文件
- 冰箱可以让人不用总去超市,超市就不会挤满人(缓解服务器端压力)
- 饿了在冰箱里找吃的不用出门(提升性能(获取资源的耗时更短了))
我们把这个冰箱安排在公司里,那么冰箱里的东西大致分为两种:
- 个人的,比如他中午的盒饭(私有缓存只能用于单独用户)
- 共有的,比如公司的可乐(共享缓存存储的响应能够被多个用户使用)
食品上的标签会有很多信息,其中最重要的信息之一就是保质期
比如可乐的保质期一般是,一年
可口可乐
我们把可乐的Cache-Control头信息设置成这样(雾),请求从出厂日期算
如果没有Cache-Control头,会通过比较Expires的值和头里面Date属性的值来判断是否缓存还有效,但是这样是很危险的,如果同事把办公室的时间往回拨你就可能喝到过期可乐唷~
整理冰箱
冰箱一直不整理可能会堆满各种东西,我们需要丢掉过期的东西(缓存驱逐),但是不是所有过期的都会丢掉,如果没有新出厂的新可乐,那么行政会继续把这些可乐放在冰箱里充门面(什么?!,对没错就是这么无情)
一个陈旧的资源(缓存副本)是不会直接被清除或忽略的,当客户端发起一个请求时,缓存检索到已有一个对应的陈旧资源(缓存副本),则缓存会先将此请求附加一个If-None-Match头,然后发给目标服务器,以此来检查该资源副本是否是依然还是算新鲜的,若服务器返回了 304 (Not Modified)
则表示此资源副本是新鲜的,不需要更新