当前位置: 首页 > news >正文

http之缓存的实现原理

为什么80%的码农都做不了架构师?>>>   hot3.png

WEB缓存(cache)位于Web服务器和客户端之间。

缓存可由数据库端取出的k-v键值对服务端内存缓存(leveldb,redis等),也可对html页面,资源文本,文件方式客户端文件缓存

缓存会根据请求保存输出内容的副本,例如html页面,图片,文件,当下一个请求来到的时候:如果是相同的URL,缓存直接使用副本响应访问请求,而不是向源服务器再次发送请求。
HTTP协议定义了相关的消息头来使WEB缓存尽可能好的工作。

1、缓存的优点
减少相应延迟:因为请求从缓存服务器(离客户端更近)而不是源服务器被相应,这个过程耗时更少,让web服务器看上去相应更快。
减少网络带宽消耗:当副本被重用时会减低客户端的带宽消耗;客户可以节省带宽费用,控制带宽的需求的增长并更易于管理。

2、客户端缓存生效的常见流程

服务器收到请求时,会在200OK中回送该资源的Last-Modified和 ETag头,客户端将该资源保存在cache中,并记录这两个属性。当客户端需要发送相同的请求时,会在请求中携带If-Modified-Since和 If-None-Match两个头。两个头的值分别是响应中Last-Modified和ETag头的值。服务器通过这两个头判断本地资源未发生变化,客 户端不需要重新下载,返回304响应。

3、Web缓存机制

HTTP/1.1中缓存的目的是为了在很多情况下减少发送请求,同时在许多情况下 可以不需要发送完整响应。前者减少了网络回路的数量;HTTP利用一个“过期(expiration)”机制来为此目的。后者减少了网络应用的带 宽;HTTP用“验证(validation)”机制来为此目的。
HTTP定义了3种缓存机制:
1)Freshness:允许一个回应消息可以在源服务器不被重新检查,并且可以由服务器和客户端来控制。例如,Expires回应头给了一个文档不可用的时间。Cache-Control中的max-age标识指明了缓存的最长时间;
2)Validation:用来检查以一个缓存的回应是否仍然可用。例如,如果一个回应有一个Last-Modified回应头,缓存能够使用If-Modified-Since来判断是否已改变,以便判断根据情况发送请求;
3)Invalidation:在另一个请求通过缓存的时候,常常有一个副作用。例如,如果一个URL关联到一个缓存回应,但是其后跟着POST、PUT和DELETE的请求的话,缓存就会过期。


转载于:https://my.oschina.net/sunmin/blog/535901

相关文章:

  • 编译Busybox时,出现错误fatal error: curses.h: No such file or directory
  • Oracle学习笔记十一 游标
  • 读函数式编程思维
  • IE中用JS让页面全屏的方式(达到F11的 效果)
  • 利用DataURL技术在网页上显示图片
  • iOS音频AAC视频H264编码 推流最佳方案
  • 【十大经典数据挖掘算法】C4.5
  • logstash推送mysql慢查询日志
  • 51cto博客第一篇
  • c语言:将三个数按从大到小输出。
  • 正则与JS中的正则
  • JAVA实现发送电子邮件
  • JS组件系列——表格组件神器:bootstrap table
  • JavaScript数组使用sort排序
  • junit测试时,出现java.lang.IllegalStateException: Failed to load ApplicationContext
  • 【每日笔记】【Go学习笔记】2019-01-10 codis proxy处理流程
  • 2018天猫双11|这就是阿里云!不止有新技术,更有温暖的社会力量
  • 2019年如何成为全栈工程师?
  • Android组件 - 收藏集 - 掘金
  • IE报vuex requires a Promise polyfill in this browser问题解决
  • leetcode98. Validate Binary Search Tree
  • PV统计优化设计
  • Python_网络编程
  • vue2.0一起在懵逼的海洋里越陷越深(四)
  • 前端相关框架总和
  • 树莓派 - 使用须知
  • 找一份好的前端工作,起点很重要
  • LIGO、Virgo第三轮探测告捷,同时探测到一对黑洞合并产生的引力波事件 ...
  • 积累各种好的链接
  • ​2020 年大前端技术趋势解读
  • #13 yum、编译安装与sed命令的使用
  • #if 1...#endif
  • (51单片机)第五章-A/D和D/A工作原理-A/D
  • (Redis使用系列) SpringBoot中Redis的RedisConfig 二
  • (八)Flask之app.route装饰器函数的参数
  • (官网安装) 基于CentOS 7安装MangoDB和MangoDB Shell
  • (力扣记录)235. 二叉搜索树的最近公共祖先
  • (论文阅读26/100)Weakly-supervised learning with convolutional neural networks
  • (论文阅读40-45)图像描述1
  • (十)DDRC架构组成、效率Efficiency及功能实现
  • .NET Core 将实体类转换为 SQL(ORM 映射)
  • .Net 应用中使用dot trace进行性能诊断
  • .Net7 环境安装配置
  • .net下简单快捷的数值高低位切换
  • /run/containerd/containerd.sock connect: connection refused
  • @Autowired和@Resource的区别
  • [20160902]rm -rf的惨案.txt
  • [AI]ChatGPT4 与 ChatGPT3.5 区别有多大
  • [codeforces]Checkpoints
  • [Docker]十二.Docker consul集群搭建、微服务部署,Consul集群+Swarm集群部署微服务实战
  • [iOS]随机生成UUID通用唯一识别码
  • [Machine Learning][Part 7]神经网络的基本组成结构
  • [MongoDB]------windos下的安装部署与基础使用
  • [noip2015 d1t2] 信息传递
  • [NSSCTF 2nd] web刷题记录