Difference between HTTP3 and HTTP2

news/2024/11/23 5:39:55/

HTTP3目前还在不断更新中。一般每个新版本的优化,都会主要针对上一个版本的缺点。


对HTTP2,有二进制编码、头部压缩、多路复用、服务器推送等新特性去弥补了HTTP1.1中的不足。不过HTTP2基于TCP实现的,带3个缺陷:① TCP层面的队头阻塞;② TCP、TLS握手的延迟;③ 网络迁移需重新连接。

HTTP2多个请求是跑在同一个TCP连接中,而当TCP丢包时,TCP要保证完整有序,整个TCP都要等待重传,就会阻塞TCP连接中所有请求。所以说是TCP层面的队头阻塞。即使序列化较高的TCP段已被接收,但应用层也无法从内核中读取了,只有缺失补充重传后才能读取到。

另外,一个TCP连接是由四元组(源IP、源端口、目标IP、目标端口)确定,当IP或端口变动,就会导致TCP、TLS重新握手,这显然对网络迁移不利,比如WIFI切成5G。


综上会发现, 其实这些都是TCP层面带的问题,应用层的HTTP2协议已较难去弥补。

而HTTP3把传输层协议替换为了UDP!不过并不是简单地替换,而是基于UDP协议在应用层实现QUIC协议。

QUIC协议有:无队头阻塞建立速度快连接迁移

① QUIC会保证可靠性,且给数据包序号做唯一标识,某个流的丢包后,HTTP3也无法读取数据,需等待丢失包重传,但不同与HTTP2的是不会阻塞其他流的传输。QUIC各stream间独立无依赖。

② QUIC协议也需握手,但耗时1RTT而已,目的是确认双方连接ID,另外QUIC与TLS不分层,而是包含TLS,内部帧会携带TLS记录去完成密钥协商。甚至在第二次连接发送时,数据包和QUIC握手信息(连接信息和TLS信息)一起发送。

③ 因为UDP不依赖四元组,可以通过连接ID去无感知完成网络迁移。

另外,HTTP3使用QPACK优化了HTTP2的HPACK,以两个特殊单向流同步双方动态表来避免动态表首次丢包无法解码出HPACK头而阻塞后续请求。


http://www.ppmy.cn/news/47462.html

相关文章

常见的注册中心Nacos、Eureka

常见的注册中心 1.Eureka(原生,2.0遇到瓶颈,停止维护) 2.Zookeeper(支持,专业的独立产品。例如:dubbo) 3.Consul(原生,GO语言开发) 4.Nacos …

Vue CLI 浏览器兼容性

Vue CLI 浏览器兼容性 browserslist 你会发现有 package.json 文件里的 browserslist 字段 (或一个单独的 .browserslistrc 文件),指定了项目的目标浏览器的范围。这个值会被 babel/preset-env 和 Autoprefixer 用来确定需要转译的 JavaScript 特性和需要添加的 CS…

康耐视Designer,通过VC5与西门子S7-1200 PLCProfinet通讯详细

测试使用软件版本 Designer Version: 2.7 GSD: GSDML-V2.3-Cognex-VC5-20140828STEP 7 Professional V14Network Configurator Version: 3.56测试使用硬件 Cognex Vision Controller VC5CIC-5000Siemens PLC: S7-1200 CPU 1214C DC/DC/RLY1.PLC端设置 1.新建一个项目,添加对应…

WxGL应用实例:绘制高精度的3D太阳系模型

文章目录 1 坐标系的选择1.1 黄道坐标系1.2 三维空间直角坐标系 2 使用JPL星历表计算轨道2.1 日期时间2.2 特定时刻天体的位置2.3 天体运行轨道 3 太阳系模型3. 1 全家福3.2 时间、距离和半径的缩放3.3 黄道坐标系模型 天何所沓?十二焉分?日月安属&#…

做好Python工程师,首先你需要做好的几件事

做好Python工程师,需要做好的几件事,我想分享给大家。首先千万不要做事周折。在你提问之前,先好好想一想,这个问题自己能不能解决。如果能解决,尽量自己解决;如果解决不了,那就要把你的问题描述…

开发方案/红外线人体体温计方案

红外线人体测温仪,是一款非常不错的测温设备,他可以适用于多种场合,尤其是在疫情期间,很多场所都需要这种设备,不管是学校、企业、商场、小区还是机关单位,都需要这种设备。 红外人体测温仪测量距离可在1-5…

etcd v3使用示例

1.简单使用 1.1 增加 set 指定某个键的值。例如: $ etcdctl set /testdir/testkey "Hello world" Hello world 复制代码支持的选项包括: --ttl 0 该键值的超时时间(单位为秒),不配置(默认为0)则永不超时 --swap-with-value value 若该键现…

ubuntu安装V2board宝塔面板教程

ubuntu安装V2board宝塔面板教程 运行环境:ubuntu-20.04 搭建宝塔web页面环境 切到linux服务器命令行 在用户目录下创建BT目录,进入BT目录 在BT目录下执行命令 sudo wget -O install.sh http://download.bt.cn/install/install-ubuntu_6.0.sh && sudo sh install.sh…