💗HTTP/2.0及HTTP/3.0的那些事儿

简介: 💗HTTP/2.0及HTTP/3.0的那些事儿

前言


HTTP的协议的发展经过了一个比较漫长的阶段,从最初的HTTP/0.9发展到如今的HTTP/3.0,HTTP协议毫无疑问已经成为了一项很强大的协议,今天我们就来聊一聊HTTP/2.0及HTTP/3.0。


一、HTTP/2.0做了哪些改进?


二进制分帧


二进制分帧就是将一条连接上所有传输的信息,分割为更小的消息和帧,并对他们采用二进制格式编码,首部信息放在Headers帧中,主体信息被封装在Data帧中。


问题解答:


  1. 为什么HTTP/2.0可以对所有的内容进行二进制转换?


因为二进制分帧层在应用层和传输层之间的中间层,所有信息都会经过,进而可以转换。


  1. 为什么要用二进制?


效率更高,计算机更青睐二进制数


多路复用


多路复用技术就是可以并行发送请求,而且无需等待响应返回的一种技术,消除了不必要的延迟,减少了页面加载时间。


问题解答:


  1. HTTP/2.0多路复用与HTTP/1.1中管道的区别在哪?


管道也可以并行发送请求,但是返回响应结果则必须是发送时的顺序,而多路复用技术不需要等待,不容易造成堵塞。多路复用的基础就是二进制分帧,因为可以乱序发送和接收。


首部压缩


在第一次请求之后,大部分的字段可以复用的。而且随着页面越来越复杂,同一个页面发出的请求会越来越多。如果头部不压缩的话,会造成很大的流量开销


问题解答:


  1. 首部压缩的原理?支持http2.0的浏览器和服务器会维护一个相同的静态表和一个动态表,以及内置一个霍夫曼编码表。静态表存储的是常见的一些头部,和一些很常见的头部键值对,例如method:get以及cookie。动态表开始是空的,如果头部命中静态表中的名称,那么就回将这份键值对加入动态表中,例如cookie:xxxx。这样做的原因在于,请求或则响应头命中了静态或者动态表的时候,只需要一个字节就能表示,可想而知,这个字节就是一个地址,指向表中的数据。

e7350aee2aa34d5d9e19d79d04c5d703_tplv-k3u1fbpfcp-zoom-in-crop-mark_4536_0_0_0.png


服务器推送


服务器可以对一个客户端请求发送多个响应,例如,浏览器向服务端请求index.html,里面包含一张样式表和一张图片。传统的方法就是会向浏览器发送三次请求。而服务端推送,则可以在一次请求内将这三个文件全部发送给浏览器,减少了请求次数,提升了网页性能。


9a4cf8455d654373a2f351a7ca2129be_tplv-k3u1fbpfcp-zoom-in-crop-mark_4536_0_0_0.png


问题解答:


  1. 服务器推送有什么弊端?

如果服务端推送的内容,浏览器有缓存的话,就会浪费带宽。避免的方法就是在服务端配置,只对第一次请求实现服务器的推送。


二、HTTP/3.0诞生的意义


1a412bb033174c1c840f4cab3e5427c6_tplv-k3u1fbpfcp-zoom-in-crop-mark_4536_0_0_0.png


首先我们要清楚HTTP/1.0,HTTP/2.0都是基于TCP的,而HTTP/3.0是通过UDP建立的,基于QUIC(quick UDP Internet Connection)协议!


连接迁移


先阐述一下tcp里面的四元组,一条tcp的唯一性标识,是由源IP,源端口,目的IP,目的端口,四元组标识。源IP,源端口一般比较稳定,但是目的IP,目的端口会由于网络元素等原因发生改变,一旦改变,那么此条tcp连接就会断开。由于QUIC基于UDP协议,所以一条UDP协议不再由四元组标识,而是以客户端随机产生的一个64位数字作为ID标识。只要ID不变,那么这条UDP就会存在,维持连接,上层业务逻辑就感受不到变化。


无对头阻塞


首先来看看队头阻塞的两层原因:

image.png


HTTP/2.0的多路复用解决了HTTP层的队头阻塞问题,但是TCP的队头阻塞依然存在,当数据包超时确认或者丢失,会等待重传,因此会阻塞当前窗口向右滑动,造成阻塞。而QUIC是基于udp的,创新点在于QUIC依靠一个严格的单调递增的packet序列,一个数据包里面还会有streamID和streamoffset偏移量,即使中途发生丢包或者超时确认,后面的数据包不会等待,等到接收完之后根据ID和offset即可完成重新拼装,从而避免了这种问题。


自定义的拥塞控制


tcp协议是在传输层,默认存在于系统中,而QUIC在应用层,当想要依据实际情况来重定义拥塞算法的时候,QUIC显然更加灵活。


前向安全和前向纠错


都说udp不太靠谱,但是Google给QUIC加上了这个机制:每发送一组数据之后,就对这组数据进行异或运算(效率高),并将结果也发送出去,那么接收方就有两份数据版本,可以对初始数据进行纠错和校验。以此保证了可靠性。


最后


⚽这篇文章主要介绍了HTTP/2.0和HTTP/3.0出现的意义~

⚾如果你对这篇文章感兴趣欢迎点赞关注+收藏,更多精彩知识正在等你!😘

相关文章
|
缓存 算法 网络协议
【计算机网络】传输层 : TCP 拥塞控制 ( 慢开始 | 拥塞避免 | 快重传 | 快恢复 )
【计算机网络】传输层 : TCP 拥塞控制 ( 慢开始 | 拥塞避免 | 快重传 | 快恢复 )
1209 0
【计算机网络】传输层 : TCP 拥塞控制 ( 慢开始 | 拥塞避免 | 快重传 | 快恢复 )
|
canal 缓存 NoSQL
【Redis系列笔记】双写一致性
本文讨论了缓存不一致问题及其后果,如价格显示错误和订单计算错误。问题主要源于并发和双写操作的异常。解决方案包括使用分布式锁(但可能导致性能下降和复杂性增加)、延迟双删策略(通过延迟删除缓存来等待数据同步)以及异步同步方法,如通过Canal和MQ实现数据的最终一致性。面试中,可以提及这些策略来确保数据库和缓存数据的一致性。
1720 1
【Redis系列笔记】双写一致性
|
网络协议 安全 算法
谷歌出品!读懂 QUIC 协议:更快、更高效的通信协议
谷歌出品!读懂 QUIC 协议:更快、更高效的通信协议
4672 0
|
Web App开发 Android开发 iOS开发
阿里云无影APP客户端下载_无影云电脑下载
阿里云无影APP客户端下载_无影云电脑下载,阿里云无影云电脑APP下载链接入口,支持iOS、Android、Windows、macOS和Web客户端,阿里云百科分享阿里云无影云电脑APP下载链接
2555 0
|
开发框架 JavaScript 前端开发
描述JavaScript事件循环机制,并举例说明在游戏循环更新中的应用。
JavaScript的事件循环机制是单线程处理异步操作的关键,由调用栈、事件队列和Web APIs构成。调用栈执行函数,遇到异步操作时交给Web APIs,完成后回调函数进入事件队列。当调用栈空时,事件循环取队列中的任务执行。在游戏开发中,事件循环驱动游戏循环更新,包括输入处理、逻辑更新和渲染。示例代码展示了如何模拟游戏循环,实际开发中常用框架提供更高级别的抽象。
263 1
|
存储 关系型数据库 MySQL
MySQL数据库——索引(2)-B+Tree、Hash结构,索引分类(聚集索引、二级索引)
MySQL数据库——索引(2)-B+Tree、Hash结构,索引分类(聚集索引、二级索引)
403 1
|
数据可视化 关系型数据库 编译器
【C/C++ 单线程性能分析工具 Gprof】 GNU的C/C++ 性能分析工具 Gprof 使用全面指南
【C/C++ 单线程性能分析工具 Gprof】 GNU的C/C++ 性能分析工具 Gprof 使用全面指南
2020 2
|
SQL 移动开发 监控
Sentinel控制台规则配置
Sentinel控制台规则配置
Sentinel控制台规则配置
|
监控 网络协议 安全
网络攻击的常见手段
网络攻击的常见手段
683 0

热门文章

最新文章