当前位置: 首页 > Linux

图解HTTP权威指南(5)-HTTPCaching

时间:2023-04-06 11:56:23 Linux

关于作者李先生(Lemon),高级运维工程师(自称),SRE专家(target),35岁梦想买辆保时捷,喜欢钻研底层技术,认为底层基础才是王道。所有新技术都离不开操作系统(CPU、内存、磁盘)、网络等,坚持输入输出,记录自己的学习,在平凡中不断前行,总有一天会遇到不一样的自己。公众号:王运维(ID:Leeeee_Li)。一些相同的字节会在网络中一遍又一遍地传输。这些冗余的数据传输会消耗网络带宽,降低传输速度,增加网络服务器的负载。通过缓存,第一个服务器响应的副本被保留下来,后续的请求可以由缓存的副本来回答。2.缓解网络瓶颈缓存可以缓解网络瓶颈。许多网络为本地网络客户端提供的带宽多于为远程服务器提供的带宽。客户端将沿路径以最慢的速度访问服务器。如果客户端从快速LAN上的缓存中获取副本,则缓存可以提高性能,尤其是在传输大文件时。3、瞬时拥塞缓存对打破瞬时拥塞有重要作用。4.距离延迟当带宽不是问题时,每个路由器都会增加互联网流量的延迟。2.Cachehit1.Cachehit已有的副本为一些到达缓存的请求提供服务,称为缓存命中(cachehit)2.Cachemiss一些到达缓存的请求可能因为没有副本可用而被转发原始服务器,称为缓存未命中(cachemiss)3.HTTP重认证原始服务器的内容可能发生变化,缓存应该检测一下,看看他们保存的副本是否仍然是服务器上的最新副本。新鲜度检查称为HTTP重新验证。3.1.RevalidationHitCache当重新验证缓存的副本时,一个小的重新验证请求将被发送到原始服务器。如果内容没有改变,服务器返回304NotModified。此身份验证称为重新验证命中或慢速命中。3.2.如果服务器对象与缓存副本不同,则服务器返回200OK。3.3对象被删除如果服务器对象被删除,服务器返回404NotFound响应,缓存删除它的副本。4、缓存命中率缓存所服务的请求所占的比例称为缓存命中率(cachehitrate),也称为文档命中率(documenthitrate)。5.字节命中率字节命中率表示缓存提供的字节数占所有传输字节数的比例。三、缓存的处理步骤1、接收——缓存接收来自网络的请求报文。2.解析--缓存解析消息并提取URL和各种标头。3.查询--缓存查看本地是否有可用的副本,如果没有,则去服务器上获取一份保存在本地。4.Freshnesscheck--cache检查缓存副本是否新鲜,如果不新鲜,询问服务器是否有更新。5.创建响应——缓存使用新的标头和缓存的正文构建响应消息。6.发送——缓存通过网络将响应发送回客户端。7.日志缓存可选地创建描述事务的日志文件条目。4.标记1.ExpiredresponseheaderCache-Control:max-stale缓存可以随意提供过期文件。Cache-Control:max-stale=秒内,文档不会过期。Cache-Control:min-fresh=文档至少要保持新鲜秒-Control:no-cache每次发出请求,缓存都会将请求发送到服务器重新认证。如果还没有过期,缓存会使用本地缓存副本返回。Cache-Control:no-store缓存不得存储任何关于客户端和服务器响应内容的信息。客户端发起的每个请求都会下载完整的响应内容。Expires指定绝对到期日期。如果到期日期已过,则意味着该文档不再新鲜。例如,Wed,06Jan202109:35:39GMT在缓存文档过期之前,缓存可以在不联系服务器的情况下以任何频率使用这些副本(特殊情况除外)。一旦缓存文档过期,缓存必须与服务器核对,询问文档是否已被修改,如果已修改,则获取新的(具有新的到期日期)副本。2.条件方法重新生效If-Modified-Since:如果文档自指定日期起被修改,则执行请求的方法。它可以和Last-Modifed服务器响应头一起使用,只有当内容被修改并且与缓存版本不同时才获取内容。If-None-Match:服务器可以为文档提供特殊标签(ETag),而不是将其与上次修改日期匹配。这些标签就像序列号。如果缓存的标记与服务器文档中的标记不同。If-None-Match标头将执行请求的方法。