一、缓存的优点
1.减少了冗余的数据传输
2.缓解了网络瓶颈的问题
3.降低了对原始服务器的要求
4.降低了距离时延
了解的几个名词
带宽瓶颈:很多网络为本地网络客户端提供的带宽比远程网络客户端要大。
瞬间拥塞:很多人几乎同时访问同一台服务器。
距离时延:光速传播的时延。
二、缓存命中
1.如何区别是否命中
无论是否缓存命中,返回的http状态码都是200 ok,
可以使用Date首部,或者是Age首部。
将其时间与当前时间进行比较。
三、缓存的拓扑结构
1.缓存的分类
私有缓存:一般都是浏览器自身的缓存。
公有代理缓存:多台网络客户端共享的一个缓存服务器。
2.缓存的层次结构
一般的缓存结构为更为复杂的网状缓存
四、缓存的处理步骤
1.接收:从网络连接上读取输入数据。
2.解析:将请求报文解析为片段,将首部的各个部分放入易操作的数据结构中。
3.查找:缓存获取URL之后,查找本地副本
4.新鲜度检测:检查副本的新鲜度是否超过了新鲜度限值(一般为设置的新鲜度时间)。
5.创建响应:首先将缓存好的副本的首部作为响应的首部,再针对客户端,进行匹配性修改(修改为客户端要求的http版本的首部)
6.发送:将响应发送给客户端
7.日志:缓存存储一些缓存使用的日志。
缓存get请求的流程图
五、保持缓存新鲜度
1.http让原始服务器向每个文档添加首部如Cache-Control (文档的生存时间)首部或者 Empires(文档的过期时间)
Cache-Control:max-age=0;(服务器请求缓存不缓存请求)
Cache-Control: s-maxage=0;(仅适用于公有缓存)
Cache-Control:must-revalidate(在没有跟原始服务器进行再验证的情况下,不能提供对象的旧副本)
Expires(不推荐)
服务器再验证:生存期可以任意使用这些副本,一旦过期就要与服务器核对。
如果内容变化,缓存获取新的副本。
如果没有变化,缓存获取新的首部。
2.条件方法再(?)验证
http允许缓存向服务器发送“条件GET”,服务器在文档与现有副本不同时返回对象体。
两个条件请求首部:
强弱验证器(允许对服务器对文档进行非实质性修改,不使缓存副本生效):
只要内容发生了变化,强验证器就会变化,弱验证器允许对部分内容进行修改,如果主要内容被修改了,弱验证器才会变化。
客户端使用实体标签还是最近修改日期取决于服务器
如果两个都有,两个都满足是才能返回304;
六、服务器对缓存的控制
Pragma:no-cache
Cache-Control:no-store
Cache-Control:no-cache
no-store:禁止缓存对响应进行复制
no-cache:本地缓冲区可以缓存响应,在进行新鲜度再验证之前,缓存不能将其提供给客户端使用。