发布于 2024 年 2 月 26 日,星期一
HTTP协议从1.0到3.0的演进反映了网络技术的不断进步。HTTP/1.0引入了持久连接和缓存机制,但每个请求仍需单独建立连接。HTTP/1.1通过持久连接和流水线技术提升了性能,但仍存在队头阻塞问题。HTTP/2采用多路复用和头部压缩,显著减少了延迟。HTTP/3基于QUIC协议,解决了TCP的队头阻塞问题,并提供了更快的连接建立和更强的安全性。总体而言,这些改进的核心在于优化传输效率、减少延迟和提升安全性,以适应现代网络应用的高性能需求。
热点面试题:简述 http3.0~http1.0 分别有什么改进?
带宽
延迟
浏览器阻塞(HOL blocking)
DNS 查询(DNS lookup)
建立连接(initial connection)
无法复用
: 每次发送请求,都需要进行一次TCP连接,而TCP的连接释放过程又是比较耗时的。队头阻塞
:由于HTTP1.0规定下一个请求必须在前一个请求响应到达后才能发送,假设前一个请求响应一直不到达,那么下一个请求就不发送,后面的请求就阻塞了。缓存控制
:新增了 e-tag 之类的缓存来控制缓存长连接
: 通过设置 keep-alive 保持http 连接可在一个TCP 连接上发送多个请求和响应。分块传输
管线化
:将多个 HTTP 请求(request)整批提交,而在发送过程中不需先等待服务器的回应二进制分帧(Binary Format)
:http2.0 的基本单位是二进制,以前采用文本形式,健壮性不是很好,现采用二进制格式,更方便更健壮。多路复用(MultiPlexing)
:http2.0 的多路复用,把多个请求当做多个流,请求响应数据分成多个帧,不同流中的帧交错发送,解决了TCP 链接数量多,TCP 连接慢的问题,所以,对于同一个域名只需要创建一个连接就可以了。header 压缩(header compress)
:http2.0 压缩消息头,避免了重复请求头的传输,并减少了传输的大小服务端推送(server push)
:http2.0 的服务端推送,浏览器发送请求后,服务端会主动发送与这个请求相关的资源,之后浏览器就不用再次发送后续的请求了。请求优先级(request prioritization)
:http2.0 可设置请求的优先级,可按照优先级来解决阻塞问题0RTT(就是数据包一来一回的时间消耗) 建立安全连接
:基于DH秘钥交换算法,在第一个包就可以包含有效的应用数据,从而在连接延时有很大优势,可以节约数百毫秒的时间
连接迁移
:http3.0 基于UDP实现,不依赖TCP 五元组,QUIC 使用自己的connection ID,即使网络五元组变化了,仍然可以维持连接。基于QUIC协议之下,我们在日常wifi和4G切换时,或者不同基站之间切换都不会重连,从而提高更好的体验队头阻塞问题
:TCP本身也有队头阻塞问题,QUIC协议是基于UDP协议实现的,在一条链接上可以有多个流,流与流之间是互不影响的,当一个流出现丢包影响范围非常小,从而解决队头阻塞问题。通俗来说就是:一个数据包影响了一堆数据包,它不来大家都走不了。新的拥塞机制
:因为替换成UDP了,所以需要提供新实现的基于UDP的拥塞控制能力前向纠错
:QUIC每发送一组数据就对这组数据进行异或运算,并将结果作为一个FEC包发送出去,接收方收到这一组数据后根据数据包和FEC包即可进行校验和纠错。特性热插拔
:因为核心能力都在用户态实现的,不依赖内核,调整拥塞控制算法等行为都变得更为简单前向安全问题
: 前向安全指的是密钥泄漏也不会让之前加密的数据被泄漏,影响的只有当前数据,对之前的数据无影响。最后:
加群
或 扫码
, 即可加入前端交流学习群,长期交流学习…加好友
,即可添加为好友