HTTP缓存

使用缓存的优点:
减少冗余数据的传输:传输重复的数据;
缓解带宽瓶颈问题:网络为本地客户端提供的带宽要比远程服务器要宽,因此传输速度更快;
降低对服务器的要求:更快的响应速度
降低距离时延:路由器时延;本身时延;
缓存命中,未命中,再验证:

HTTP缓存_第1张图片
缓存命中,未命中,再验证

速度: 缓存命中>缓存再验证成功>缓存未命中=缓存再验证失败;

缓存再验证命中:304 Not Modified;
缓存再验证未命中:200 OK
服务器对象被删除:404 Not Found
命中率: 文档命中率(缓存命中率),字节命中率;
区分命中和未命中:
缓存命中和服务器正常响应都是 200 OK;
客户端可以使用响应的Date首部与当前时间进行比较,如果Date首部中时间较早,就可以认为这是一条缓存;
缓存的拓扑结构:
公有缓存;
私有缓存;
私有缓存: 单个用户专享;多个客户端的重复请求
公有缓存(代理缓存):共享的缓存;减少冗余数据量的传输;

HTTP缓存_第2张图片
私有缓存

HTTP缓存_第3张图片
共享缓存

代理缓存的层次的结构:
在较小的缓存中的未命中的请求会被导向较大的父缓存;缓存链过长会有性能损耗;
缓存的处理步骤:
(1)接收:缓存从网络中读取抵达的请求报文;
(2)解析:缓存对请求报文进行解析;提取各种URL和各种首部;
(3)查询:缓存查看是否有本地副本可用,如果没有,就向服务器获取一份副本,保存在本地;
(4)新鲜度检测:缓存查看已缓存的副本是否新鲜,如果不新鲜,就询问服务器是否有任何更新;
(5)创建响应
(6)发送
(7)日志
客户端第一次请求
HTTP缓存_第4张图片
客户端第一次请求

客户端再次请求

HTTP缓存_第5张图片
客户端再次请求

缓存过期: Expires首部和Cache-Control:max-age首部;
Expires首部:HTTP/1.0+ Expires;绝对时间;依赖于计算机的时钟设置;
max-age首部:HTTP/1.1;相对时间;

HTTP缓存_第6张图片
两种首部

服务器再验证:文档过期并不代表缓存中的文档和服务器上的文档在内容上有实际的出入;只是代表需要进行再验证的时间到了;
如果再验证显示文档内容没有发生变化,缓存只需要获取首部,包含一个新的过期时间,并对缓存中的首部进行更新就行了;
如果再验证显示文档内容发生了变化,重新获取缓存,存储缓存即可;
两种验证过期的方式
If-Modified-Since:Last-Modified 再验证
If-None-Match:Etag 再验证
If-Modified-Since:Last-Modified 的缺陷:
(1)有些文档会被周期性重写,但是实际内容是一样的;尽管内容没变,还是会导致Last-Modified改变;
(2)Last-Modified 的时间精度为秒,对于时间精度下的修改无法起作用;
(3)有些服务器无法判断Last-Modified
Etag:文档的指纹信息,文档的校验和等等;
强弱验证器:
强验证器:只要内容发生了变化,强验证器就会发生变化;
弱验证器(HTTP/1.1支持):如果只对少部分内容进行修改,弱验证器不会发生变化;
弱验证器带有W/
弱验证器缓存首部

使用时机:
(1)响应带有Etag实体标签,客户端就必须使用Etag实体标签验证;
(2)响应带有Last-Modified ,客户端可以使用If-Modified-Since验证;
(3)两者都有,就必须同时验证,并且两者都满足才会返回304;
控制缓存的能力:
HTTP/1.1
no-store:禁止缓存响应;
no-cache: 可以缓存响应,但是没有进行缓存新鲜度再验证之前,不可以把缓存提供给客户端;

你可能感兴趣的:(HTTP缓存)