作者简介

李先生(Lemon),高级运维工程师(自称),SRE专家(目标),梦想在35岁买一辆保时捷。喜欢钻研底层技术,认为底层基础才是王道。一切新技术都离不开操作系统(CPU、内存、磁盘)、网络等。坚持输入输出,记录自己学习的点滴,在平凡中坚持前行,总有一天会遇见不一样的自己。公众号:运维汪(ID:Leeeee_Li)。
                                                                 
                                                                                   
 

一、缓存的优点

1、减少冗余数据传输
当很多客户端访问一个服务器时,服务器会多次传输一份文档每次传送给一个客户端。一些相同的字节会在网络中一遍遍的传输,这些冗余的数据传输会耗尽网络带宽,降低传输速度,加种Web服务器的负载。有了缓存,就可以保留第一条服务器响应的副本,后续请求就可以由缓存的副本来响应。
 
2、缓解网络瓶颈
缓存可以缓解网络的瓶颈。很多网络为本地网络客户端提供的带宽比远程服务器提供的带宽要宽。客户端会以路径上最慢的网速访问服务器。如果客户端从一个快速局域网的缓存中得到了一个副本,那么缓存就可以提高性能,尤其在传输的文件比较大时。
 
3、瞬间拥塞
缓存在破坏瞬间拥塞时起到重要的作用。
 
4、距离时延
当带宽不成问题的情况下,每台路由器会增加因特网流量的时延。
 

二、缓存命中

1、缓存命中  
 
已有的副本为某些到达缓存的请求提供服务,称为缓存命中(cache hit)
 

2、缓存未命中
 
一些到达缓存的请求可能会由于没有副本可用,而被转发到原始服务器,称为缓存未命中(cache miss)
 

3、HTTP再验证
 
原始服务器的内容可能会发生变化,缓存要对其进行检测,看他们保存的副本是否仍然是服务器上最新的副本,这种新鲜度检测被称为HTTP再验证。
 
3.1、再验证命中
 
缓存对缓存的副本进行再验证时,会向原始服务器发送一个小的再认证请求。如果内容没有变化,服务器返回304 Not Modified。这种认证称为再验证命中(revalidate hit)或缓慢命中(slow hit)
 

3.2、再验证未命中
 
如果服务器对象已与缓存副本不同,服务器返回200 OK
 

3.3 对象被删除
 
如果服务器对象已经被删除了,服务器就返回404 Not Found响应,缓存也会将其副本删除。
 
4、缓存命中率
 
缓存提供服务的请求所占的比例称为缓存命中率(cache hit rate),也称文档命中率(document hit rate)。
 
5、字节命中率
 
字节命中率表示的是缓存提供的字节在传输的所有字节中所占的比例。
 
 

三、缓存的处理步骤

1、接收--缓存从网络中接收抵达的请求报文。
2、解析--缓存对报文进行解析,提取出URL和各种首部。
3、查询--缓存查看是否有本地副本可用,如果没有,就去服务器获取一份并保存在本地。
4、新鲜度检查--缓存查看已缓存的副本是否新鲜,如果不是,就询问服务器是否有任何更新。
5、创建响应--缓存用新的首部和已缓存的主体来构建一条响应报文。
6、发送--缓存通过网络将响应发回给客户端。
7、日志--缓存可选的创建一个日志文件条目来描述这个事务。
 
 

四、标记

1、过期响应首部
 
Cache-Control: max-stale 缓存可以随意提供过期的文件
Cache-Control: max-stale=<s> 在<s>秒时间内,文档就不能过期
Cache-Control: min-fresh=<s> 至少在为了<s>秒内文档要保持新鲜
Cache-Control: max-age 资源能够被缓存(保持新鲜)的最大时间,max-age是距离请求发起的时间的秒数
Cache-Control:no-cache 每次由请求发出时,缓存会将此请求发送到服务器进行再认证,如果没有过期,缓存才使用本地的缓存副本返回
Cache-Control:no-store 缓存中不得存储任何关于客户端和服务端响应的内容,每次由客户端发起的请求都会下载完整的响应内容
Expires 指定一个绝对的过期日期,如果过期日期已经过了,就说明文档不再新鲜了。如Wed, 06 Jan 2021 09:35:39 GMT
 
在缓存文档过期前,缓存可以任意频率使用这些副本,无需与服务器联系(特殊情况除外)。一旦已缓存文档过期,缓存就必须与服务器进行核对,询问文档是否被修改过,如果被修改过,就要获取一份新的(带有新的过期日期)的副本。
 
2、条件方法再验证
 
If-Modified-Since: <date> 如果从指定日期之后文档被修改过了,就执行请求的方法。可以与Last-Modifed服务器响应首部配合使用,只有在内容被修改后与已缓存版本有所不同的时候采取获取内容。
If-None-Match:<tags> 服务器可以为文档提供特殊的标签(ETag),而不是将其与最近修改的日期相匹配。这些标签就像序列号一样。如果已缓存标签与服务器文档中的标签不一样。If-None-Match首部就会执行所请求的方法。
 

五、学习交流

欢迎大家关注我的公众号,一起交流、学习。

 

图解HTTP权威指南(五) | HTTP缓存的更多相关文章

  1. 图解HTTP权威指南(四)| 代理

    作者简介 李先生(Lemon),高级运维工程师(自称),SRE专家(目标),梦想在35岁买一辆保时捷.喜欢钻研底层技术,认为底层基础才是王道.一切新技术都离不开操作系统(CPU.内存.磁盘).网络等. ...

  2. 图解HTTP权威指南 | HTTP报文

                                                                                    一.问题 1.报文流是如何流动的 2.H ...

  3. 图解HTTP权威指南(二)| 连接管理

    一.两个问题 1.HTTP是如何使用TCP连接的 2.HTTP的连接,并行连接.keep-alive(持久连接)和管道化连接   二.TCP连接 1.什么是TCP   TCP/IP是全球计算机及网络设 ...

  4. 图解HTTP权威指南(三)| Web服务器对HTTP请求的处理和响应

    作者简介   李先生(Lemon),高级运维工程师(自称),SRE专家(目标),梦想在35岁买一辆保时捷.喜欢钻研底层技术,认为底层基础才是王道.一切新技术都离不开操作系统(CPU.内存.磁盘).网络 ...

  5. maven权威指南学习笔记(五)—— POM

    1. 简介 Archetype插件通过 pom.xml 文件创建了一个项目.这就是项目对象模型 (POM),一个项目的声明性描述. 当Maven运行一个目标的时候,每个目标都会访问定 义在项目POM里 ...

  6. maven POM —— maven权威指南学习笔记(五)

    1. 简介 Archetype插件通过 pom.xml 文件创建了一个项目.这就是项目对象模型 (POM),一个项目的声明性描述. 当Maven运行一个目标的时候,每个目标都会访问定 义在项目POM里 ...

  7. 《Kafka权威指南》读书笔记-操作系统调优篇

    <Kafka权威指南>读书笔记-操作系统调优篇 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 大部分Linux发行版默认的内核调优参数配置已经能够满足大多数应用程序的运 ...

  8. Http权威指南学习研究

    学习时间:                                   该学习:第六章  6.6小节   加油   185页 2017年5月15日15:13:00 今天任务: 看完前两章节: ...

  9. (6)《Head First HTML与CSS》学习笔记---结尾、《HTML5权威指南》读书笔记

    1.内联元素的外边距.内边距与块元素稍有不同. 如果一个内联元素四周都增加外边距,只能看到左边和右边会增加空间:你也可以对内联元素的上下增加内边距,不过这个内边距不会影响包围它的其他内联元素的间距—— ...

随机推荐

  1. 第10.11节 Python模块和包小结

    Python的模块就是一个独立的Python文件,Python的包是一些功能相关的Python文件放到一个目录下进行统一管理的文件管理结构,包本质上是模块,加载包就是加载包下特定的模块文件__init ...

  2. 第11.14节 正则表达式转义符和Python转义符相同引发问题的解决办法

    正则表达式使用反斜杠('\')来把特殊字符转义成普通字符(为了方便称为"正则表达式转义"),而反斜杠在普通的 Python 字符串里也是转义符(称为"字符串转义" ...

  3. uniapp 微信授权登陆

    准备工作: 1.微信开发者账号 2.AppId .AppSecret (这些可以在开放平台申请到) 第一步 添加移动应用,仔细添加上述信息: 审批通过后,即刻 第二步 打开uniapp,开启OAuth ...

  4. 威联通(NAS)搭建个人音乐中心

    我为什么要自己搭建音乐服务 曾记得早些年,音乐是可以随便在线听,随便下载的,没有付费这么一说的(背后是音乐平台提供的版权支持).我们听音乐也就可以很随意,但是这几年,音乐的版权开始管理的严禁,音乐没地 ...

  5. 题解 洛谷 P5279 【[ZJOI2019]麻将】

    这题非常的神啊...蒟蒻来写一篇题解. Solution 首先考虑如何判定一副牌是否是 "胡" 的. 不要想着统计个几个值 \(O(1)\) 算,可以考虑复杂度大一点的. 首先先把 ...

  6. 题解 P5401 [CTS2019]珍珠

    蒟蒻语 这题太玄学了,蒟蒻写篇题解来让之后复习 = = 蒟蒻解 假设第 \(i\) 个颜色有 \(cnt_i\) 个珍珠. \(\sum\limits_{i=1}^{n} \left\lfloor\f ...

  7. protobuf 协议浅析

    目录 Protobuf 协议浅析 1. Protobuf 介绍 1.1 Protobuf 基本概念 1.2 Protobuf 的优点 1.3 Protobuf, JSON, XML 的区别 2. Pr ...

  8. Object not found! The requested URL was not found on this server.... 报错解决方案

    服务器(centos6.5) lnmp 报错如下 Object not found! The requested URL was not found on this server. The link ...

  9. SpringBoot + Layui + JustAuth +Mybatis-plus实现可第三方登录的简单后台管理系统

    1. 简介   在之前博客:SpringBoot基于JustAuth实现第三方授权登录 和 SpringBoot + Layui +Mybatis-plus实现简单后台管理系统(内置安全过滤器)上改造 ...

  10. docker 批量删除已经停止的容器

    长期操作导致大量的容器堆积,如何对这些没有用的容器进行批量删除: 命令如下 : Docker rm `docker ps -a |awk '{print $1}' | grep [0-9a-z]`