HTTP(六)
作者:互联网
文章是学习记录使用,摘自《HTTP权威指南》
Web缓存是可以自动保存常见文档副本的 HTTP 设备。当Web请求抵达缓存时,如果本地有“已缓存的”副本,就可以从本地存储设备而不是原始服务器中提取这个文档。使用缓存有下列优点。
·缓存减少了冗余的数据传输,节省了你的网络费用。
·缓存缓解了网络瓶颈的问题。不需要更多的带宽就能够更快地加载页面。
·缓存降低了对原始服务器的要求。服务器可以更快地响应,避免过载的出现。
·缓存降低了距离时延,因为从较远的地方加载页面会更慢-一些。
冗余的数据传输
宽带瓶颈
瞬间拥塞
距离延时
命中和未命中
再验证
缓存命中、未命中以及再验证
缓存可以在任意时刻,以任意的频率对副本进行再验证。但由于缓存中通常会包含数百万的文档,而且网络带宽是很珍贵的,所以大部分缓存只有在客户端发起请求,并且副本旧得足以需要检测的时候,才会对副本进行再验证。
缓存对缓存的副本进行再验证时,会向原始服务器发送一个小的再验证请求。如果内容没有变化,服务器会以一个小的304 Not Modified进行响应。只要缓存知道副本仍然有效,就会再次将副本标识为暂时新鲜的,并将副本提供给客户端这被称作 再验证命中(revalidate hit)或缓慢命中(slow hit)。这种方式确实要与原始服务器进行核对,所以会比单纯的缓存命中要慢,但它没有从服务器中获取对象数据,所以要比缓存未命中快一些。
HTTP为我们提供了几个用来对已缓存对象进行再验证的工具,但最常用的是工If-Modified-since首部。将这个首部添加到GET请求中去,就可以告诉服务器,只有在缓存了对象的副本之后,又对其进行了修改的情况下,才发送此对象。
再验证命中
如果服务器对象未被修改,服务器会向客户端发送一个小的 HTTP 304 NotModified响应。
成功的再验证比缓存未命中要快,失败的再验证几乎和未命中的速度一样
使用工If-Modified-since首部进行再验证
·再验证未命中
如果服务器对象与已缓存副本不同,服务器向客户端发送一条普通的、带有完整内容的HTTP 200 OK响应。
.对象被删除
如果服务器对象已经被删除了,服务器就回送一个404 Not Found响应,缓存也会将其副本删除。
字节命中率
由于文档并不全是同一尺寸的,所以文档命中率并不能说明一切。有些大型对象被访问的次数可能较少,但由于尺寸的原因,对整个数据流量的贡献却更大。因此,有些人更愿意使用字节命中率(byte hit rate)作为度量值(尤其那些按流量字节付费的人!)。
字节命中率表示的是缓存提供的字节在传输的所有字节中所占的比例。通过这种度量方式,可以得知节省流量的程度。100%的字节命中率说明每个字节都来自缓存,没有流量流到因特网上去。
文档命中率和字节命中率对缓存性能的评估都是很有用的。文档命中率说明阻止了多少通往外部网络的Web事务。事务有一个通常都很大的固定时间成分(比如,建立-一条到服务器的TCP 连接),提高文档命中率对降低整体延迟(时延)很有好处。字节命中率说明阻止了多少字节传向因特网。提高字节命中率对节省带宽很有利。
代理缓存的层次结构
在实际中,实现层次化(hierarchy)的缓存是很有意义的,在这种结构中,在较小缓存中未命中的请求会被导向较大的父缓存(parent cache),由它来为剩下的那些“提炼过的”流量提供服务。图7-9显示了一个两级的缓存层次结构。'其基本思想是在靠近客户端的地方使用小型廉价缓存,而更高层次中,则逐步采用更大、功能更强的缓存来装载多用户共享的文档。
缓存的处理步骤
现代的商业化代理缓存相当地复杂。这些缓存构建得非常高效,可以支持HTTP和其他一些技术的各种高级特性。但除了一些微妙的细节之外,Web缓存的基本工作原理大多很简单。对一条HTTP GET 报文的基本缓存处理过程包括7个步骤
(1)接收—─缓存从网络中读取抵达的请求报文。
(2)解析——缓存对报文进行解析,提取出URL和各种首部。
(3)查询——缓存查看是否有本地副本可用,如果没有,就获取一份副本(并将其保
存在本地)。
(4)新鲜度检测——缓存查看已缓存副本是否足够新鲜,如果不是,就询问服务器是
否有任何更新。
(5)创建响应—缓存会用新的首部和已缓存的主体来构建一条响应报文。(6)发送—-—缓存通过网络将响应发回给客户端。
(7)日志一—缓存可选地创建一个日志文件条目来描述这个事务。
控制缓存的能力
服务器可以通过HTTP定义的几种方式来指定在文档过期之前可以将其缓存多长时间。按照优先级递减的顺序,服务器可以:
·附加一个cache-Control : no-store首部到响应中去;
附加一个cache-Control : no-cache首部到响应中去,
附加一个Cache-Control : must-revalidate首部到响应中去
;附加一个Cache-Control: max-age首部到响应中去;
附加一个Expires日期首部到响应中去;
·不附加过期信息,让缓存确定自己的过期日期。
标签:缓存,HTTP,字节,命中率,副本,命中,服务器 来源: https://blog.csdn.net/feng905001561/article/details/120371702