HTTP/2 与 HTTP/3 的新特性

news2025/1/17 16:03:54

一、引言

在互联网蓬勃发展的浪潮中,HTTP 协议作为网络通信的基石,历经多次迭代升级,不断推动着网络传输效率与性能的提升。从最初简单的 HTTP/0.9 版本,仅能实现基本的文本传输,到 HTTP/1.0 引入多种请求方法与头部信息,再到 HTTP/1.1 通过长连接、管线化等技术优化传输性能,HTTP 协议逐步适应了日益复杂的网络需求。

然而,随着移动互联网、高清视频、在线游戏等应用的爆发式增长,对网络传输的速度、延迟和稳定性提出了更高要求。HTTP/2 与 HTTP/3 应运而生,它们带来的一系列新特性,如 HTTP/2 的二进制分帧、多路复用、头部压缩、服务器推送,以及 HTTP/3 基于 QUIC 协议的 UDP 传输、更好的多路复用、加密和安全性提升等,彻底革新了网络传输模式,显著改善了用户体验,成为推动互联网发展的关键力量。 深入了解这些新特性,对于开发者优化网络应用、提升服务质量具有重要意义。

二、HTTP/2 新特性深度剖析

2.1 二进制分帧层

HTTP/2 引入了二进制分帧层,这是其性能提升的核心所在。在 HTTP/2 中,不再像 HTTP/1.x 那样以文本形式传输数据,而是将所有传输的信息,包括请求和响应的头部、消息主体等,分割为更小的帧,并采用二进制格式进行编码。在一个典型的 Web 应用场景中,当客户端请求一个包含 HTML、CSS 和 JavaScript 文件的网页时,这些资源在 HTTP/2 协议下会被分别拆分成多个帧。例如,HTML 文件的头部信息可能被封装在一个 HEADERS 帧中,而其主体内容则被分割成多个 DATA 帧;CSS 和 JavaScript 文件也会类似地被拆分成相应的帧。每个帧都有一个固定长度的头部,包含长度、类型、标志和流标识符等信息,用于标识该帧所属的数据流以及其在传输过程中的相关属性。通过这种方式,客户端和服务器能够更高效地解析和处理数据,大大提升了传输效率与灵活性。 同时,二进制格式相较于文本格式,在数据传输过程中占用的带宽更少,也不易出错,从而提高了数据传输的可靠性。

2.2 多路复用

多路复用是 HTTP/2 的一项关键特性,它允许在同一个 TCP 连接上并发处理多个请求和响应。在 HTTP/1.x 中,一个 TCP 连接在同一时间内只能处理一个请求 - 响应序列,若当前请求处理缓慢或传输大量数据,后续请求就必须排队等待,这就是所谓的队首阻塞问题。这就好比在一条单车道的道路上,车辆必须依次行驶,一旦前面的车辆出现故障或行驶缓慢,后面的车辆都将被堵塞。

而 HTTP/2 通过引入流(Stream)和帧(Frame)的概念解决了这一问题。每个流都有一个唯一的标识符,用于区分同一连接上的不同流,每个流可以承载多个消息,而消息又由一个或多个帧组成。来自不同流的帧可以交错发送,然后在接收端根据帧头部的流标识符重新组装。这样,在一个 TCP 连接上可以同时传输多个请求和响应的帧,实现了真正的并发处理。假设一个网页需要加载多个图片、CSS 文件和 JavaScript 文件,在 HTTP/2 下,这些资源的请求和响应帧可以在同一个 TCP 连接上并行传输,互不干扰,大大提升了网络利用率与页面加载速度,同时也减少了建立和维护多个 TCP 连接的开销。

2.3 头部压缩(HPACK)

HTTP/1.x 中,每次请求都需要携带大量冗余的头部信息,这在一定程度上浪费了网络带宽。HTTP/2 采用了 HPACK 算法来压缩头部,有效减少了传输开销。HPACK 算法主要通过静态表、动态表和霍夫曼编码来实现头部压缩。静态表包含了一系列预定义的常见头部字段和值,在传输过程中,如果头部字段和值在静态表中存在,只需发送对应的索引值,而无需传输完整的字段和值。动态表则用于存储在连接过程中动态出现的头部字段和值,客户端和服务器会根据实际情况动态更新动态表。对于那些无法在静态表和动态表中找到匹配的头部字段和值,则会使用霍夫曼编码进行压缩,以进一步减小传输大小。在一个频繁请求同一服务器的 Web 应用中,许多头部字段如 User - Agent、Accept 等往往是不变的。在 HTTP/2 下,首次请求时这些字段会被记录到动态表中,后续请求只需发送对应的索引值,大大减少了头部传输的字节数,提升了传输性能。

2.4 服务器推送

服务器推送是 HTTP/2 的一项强大功能,它允许服务器在客户端请求之前,主动将客户端可能需要的资源推送给客户端。这一机制基于流的概念实现,服务器可以在处理客户端请求的过程中,通过创建新的流将相关资源发送给客户端。以一个电商网站为例,当用户请求商品详情页时,服务器不仅返回 HTML 页面,还可以主动推送该页面所依赖的 CSS 文件、JavaScript 文件以及一些关键的图片资源。这样,客户端在接收到 HTML 页面后,无需再额外发送请求去获取这些资源,大大减少了客户端的请求次数和等待时间,加速了页面的加载速度,提升了用户体验。同时,服务器推送还可以更好地利用网络带宽,避免了客户端因等待资源而造成的带宽闲置。

2.5 数据流优先级

HTTP/2 允许为不同的数据流分配优先级,通过控制 CPU、内存和带宽等资源的分配,确保关键资源优先传输。在一个复杂的网页中,可能包含多种类型的资源,如 HTML、CSS、JavaScript、图片、视频等。其中,HTML 和 CSS 文件对于页面的初步渲染至关重要,而 JavaScript 文件可能会影响页面的交互功能,图片和视频则可能在后续用户浏览过程中起到重要作用。通过为这些资源对应的数据流设置不同的优先级,例如将 HTML 和 CSS 的数据流优先级设置为最高,JavaScript 次之,图片和视频较低,服务器可以优先处理和传输优先级高的数据流,确保页面能够尽快呈现给用户,关键功能能够尽快可用,从而提升用户体验。即使在网络带宽有限的情况下,也能保证重要资源的及时传输。 同时,不同的浏览器对于数据流优先级的实现方式略有不同,如 Chrome 在每个资源上使用独占位,根据资源优先级构建资源链;Firefox 构建虚拟的数据流树,对不同请求类型分组并加权 ,这些实现方式都旨在更好地利用数据流优先级特性,优化资源传输。

三、HTTP/3 新特性全面解析

3.1 基于 QUIC 协议的传输

HTTP/3 放弃了沿用已久的 TCP 协议,转而采用基于 UDP 的 QUIC(Quick UDP Internet Connections)协议 ,这一转变旨在解决 TCP 协议在现代网络环境下的诸多局限性。TCP 协议虽然提供了可靠的传输保障,但在建立连接时,需要通过三次握手来确认双方的连接状态,这一过程会引入一定的延迟。特别是在移动网络等对延迟敏感的场景中,这种延迟会严重影响用户体验。而 QUIC 协议则通过减少握手时延,使用 0-RTT(零往返时间)机制,允许在连接初始化阶段就发送数据,大大降低了连接建立的延迟。

在 QUIC 协议中,客户端和服务器在首次连接时,会通过交换特定的握手包来协商连接参数和加密密钥。在这个过程中,客户端可以在发送握手包的同时,将部分应用数据一并发送出去。服务器在收到握手包和数据后,会进行相应的处理,并返回响应。通过这种方式,QUIC 协议避免了传统 TCP 三次握手带来的延迟,实现了更快的数据传输。以移动支付场景为例,用户在使用手机进行支付时,HTTP/3 基于 QUIC 协议的快速连接建立机制,能够让支付请求迅速发送到服务器,减少用户等待支付结果的时间,提升支付的流畅性和便捷性。

3.2 多路复用与无队头阻塞

在 HTTP/2 中,虽然已经引入了多路复用技术,但由于其仍然依赖 TCP 协议进行传输,在 TCP 层面上仍存在队头阻塞的问题。TCP 协议为了保证数据的有序传输,当一个数据包丢失时,会暂停所有后续数据包的传输,直到丢失的数据包被重新传输并确认。这就好比在一条高速公路上,某个路段发生了事故,导致后面的车辆都无法通行,即使其他车道是畅通的。

而 HTTP/3 在 QUIC 协议上原生支持多路复用,并且每个流可以独立传输和确认,从而彻底消除了队头阻塞问题。在 HTTP/3 中,多个数据流可以在同一个连接上并发传输,每个数据流都有自己独立的编号和状态。当某个数据流中的数据包丢失时,只会影响该数据流的传输,而不会对其他数据流造成任何影响。例如,在一个同时加载多个图片和视频的网页中,若其中一个图片的数据流出现丢包情况,HTTP/3 能够确保其他图片和视频的数据流继续正常传输,用户不会因为某个资源的加载问题而等待整个页面的加载,大大提高了页面的加载速度和用户体验。

3.3 连接迁移

QUIC 协议允许在 IP 地址变化的情况下保持连接状态,这一特性对于移动设备或者网络环境发生变化时的连接持久性至关重要。在传统的 TCP 连接中,连接是通过源 IP 地址、源端口、目标 IP 地址和目标端口这四元组来标识的。当设备的网络环境发生变化,如从 Wi-Fi 切换到移动数据,或者在不同的 Wi-Fi 热点之间切换时,IP 地址会发生改变,这就导致 TCP 连接被迫中断,需要重新建立连接。这不仅会引入额外的延迟,还可能导致正在进行的数据传输中断,影响用户体验。

而在 HTTP/3 中,QUIC 连接是由连接 ID(Connection ID)来标识的,而不是传统的 IP 地址加端口号。连接 ID 在连接建立时生成,并且在整个连接过程中保持不变。当设备的网络环境发生变化,IP 地址改变时,只要连接 ID 不变,QUIC 连接就能够保持稳定,无需重新建立连接。以用户在乘坐地铁时使用手机观看在线视频为例,地铁在行驶过程中会频繁切换基站,导致手机的 IP 地址不断变化。在 HTTP/3 的支持下,视频播放应用可以通过 QUIC 协议的连接迁移特性,保持视频流的稳定传输,用户不会因为网络切换而出现视频卡顿或中断的情况,极大地提升了用户体验。

3.4 内置加密

QUIC 协议将 TLS 加密集成到了协议栈中,使得每个新的 QUIC 连接都能快速并且安全地建立起来。在传统的网络传输中,TCP 协议与 TLS 加密是分层实现的,在建立连接时需要分别进行 TCP 握手和 TLS 握手,这增加了连接建立的复杂性和延迟。而 QUIC 协议通过将 TLS 加密集成到自身协议栈中,简化了安全实现过程。

在 QUIC 协议中,TLS 握手与连接建立过程紧密结合。当客户端发送握手包时,其中就包含了 TLS 握手所需的信息。服务器在收到握手包后,能够快速完成 TLS 握手过程,实现数据的加密传输。同时,QUIC 协议可以针对每个流独立执行加密操作,进一步提高了数据传输的安全性。例如,在一个在线银行应用中,用户的账户信息、交易记录等敏感数据在传输过程中,HTTP/3 通过 QUIC 协议的内置加密功能,对每个数据流进行独立加密,确保数据不会被窃取或篡改,保障了用户的资金安全和隐私。

3.5 更快的错误恢复

QUIC 协议提供了更高效的重传机制,能够更快地检测和恢复丢包,特别是在无线网络环境下表现更为出色。在无线网络中,由于信号干扰、网络拥塞等原因,数据包丢失的情况较为常见。TCP 协议在检测到丢包后,需要等待一定的时间来确认数据包是否真的丢失,然后再进行重传,这一过程会导致数据传输的延迟增加。

而 QUIC 协议通过使用冗余的确认机制和快速重传算法,能够在数据包丢失后迅速检测到,并立即进行重传。QUIC 协议会为每个数据包分配一个唯一的标识符,接收方在收到数据包后会及时发送确认信息。当发送方发现某个数据包的确认信息超时未收到时,会立即重传该数据包。同时,QUIC 协议还支持前向纠错(FEC)技术,通过在发送数据时添加一些冗余信息,接收方可以利用这些冗余信息在一定程度上恢复丢失的数据包,而无需等待重传。这在无线网络环境下,能够有效减少数据传输的延迟,保障数据传输的可靠性。例如,在户外使用移动设备进行视频直播时,HTTP/3 的 QUIC 协议能够快速应对无线网络中的丢包情况,确保直播画面的流畅性和稳定性,为观众带来更好的观看体验。

四、HTTP/2 与 HTTP/3 应用场景及性能对比

4.1 应用场景分析

HTTP/2 在现有 TCP 基础设施场景中具有显著优势。由于它基于 TCP 协议,与大多数网络设备和服务器兼容良好,无需对网络基础设施进行大规模改造即可部署 。在传统的 Web 应用中,如企业官网、资讯类网站等,HTTP/2 的二进制分帧、多路复用和头部压缩等特性能够有效提升页面加载速度,减少用户等待时间。当用户访问一个包含大量图片、CSS 和 JavaScript 文件的企业官网时,HTTP/2 通过多路复用技术,在同一个 TCP 连接上并发传输这些资源,大大提高了传输效率。同时,头部压缩技术减少了头部信息的传输量,进一步优化了传输性能。

HTTP/3 则在对延迟和稳定性要求极高的场景中表现出色,如实时通信、在线游戏等领域。在实时视频通话中,HTTP/3 基于 QUIC 协议的快速连接建立和无队头阻塞特性,能够确保视频流的稳定传输,即使在网络状况不佳的情况下,也能有效减少卡顿和延迟,保证通话的流畅性。在在线游戏中,玩家的操作指令需要及时准确地传输到服务器,同时服务器也要快速反馈游戏状态给玩家。HTTP/3 的连接迁移特性使得玩家在移动过程中,即使网络环境发生变化,如从 Wi-Fi 切换到移动数据,游戏连接也能保持稳定,不会出现中断或延迟大幅增加的情况,为玩家提供了更加流畅和稳定的游戏体验。

4.2 性能对比

在连接建立时间方面,HTTP/2 基于 TCP 协议,需要进行三次握手来建立连接,并且在建立连接后还需要进行 TLS 加密协商,这一过程会引入一定的延迟。而 HTTP/3 采用 QUIC 协议,通过减少握手时延,使用 0-RTT 机制,允许在连接初始化阶段就发送数据,大大降低了连接建立的时间。据相关测试数据表明,在相同网络环境下,HTTP/3 的连接建立时间相比 HTTP/2 平均减少了约 30% - 50%,这在对实时性要求较高的应用场景中具有重要意义。

传输效率上,HTTP/2 的多路复用技术虽然允许多个请求和响应在同一个 TCP 连接上并发传输,但由于 TCP 协议本身的特性,当某个数据包丢失时,会导致队头阻塞,影响其他数据包的传输。而 HTTP/3 在 QUIC 协议上原生支持多路复用,并且每个流可以独立传输和确认,彻底消除了队头阻塞问题。在一个同时加载多个大型文件的场景中,HTTP/3 能够更高效地利用网络带宽,实现更快的数据传输,相比 HTTP/2,文件的整体下载时间可缩短约 20% - 40%。

在应对丢包情况时,HTTP/2 依赖 TCP 的重传机制,当检测到丢包后,需要等待一定时间确认,然后再进行重传,这会导致数据传输的延迟增加。而 HTTP/3 的 QUIC 协议通过冗余的确认机制和快速重传算法,能够迅速检测到丢包并立即进行重传。同时,QUIC 协议支持的前向纠错(FEC)技术,能在一定程度上恢复丢失的数据包,无需等待重传。在无线网络环境下,HTTP/3 的丢包恢复能力明显优于 HTTP/2,例如在 4G 网络中,当丢包率达到 5% 时,HTTP/3 的视频播放卡顿次数相比 HTTP/2 减少了约 60%,有效提升了用户体验。

五、总结与展望

HTTP/2 与 HTTP/3 的新特性为网络传输带来了质的飞跃。HTTP/2 的二进制分帧、多路复用、头部压缩等特性,显著提升了数据传输效率与性能;HTTP/3 基于 QUIC 协议,在连接建立、多路复用、丢包恢复等方面实现了重大突破,尤其适用于对延迟和稳定性要求极高的场景。

展望未来,随着 5G 网络的普及、物联网设备的爆发式增长以及人工智能应用的不断深入,对网络传输的性能和可靠性提出了更高的要求。HTTP 协议有望继续演进,进一步提升传输效率、安全性和用户体验。未来的 HTTP 协议可能会更加紧密地与新兴技术融合,如边缘计算、区块链等,为构建更加智能、高效、安全的网络环境奠定基础。 开发者应密切关注 HTTP 协议的发展动态,充分利用这些新特性,不断优化网络应用,为用户提供更加优质的服务 。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2278072.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

redis(2:数据结构)

1.String 2.key的层级格式 3.Hash 4.List 5.Set 6.SortedSet

OCP使用中的常见问题与解决方法

OCP的常见问题 页面卡顿: 遇到页面卡顿的问题时,首先需要区分是全局性的卡顿,即所有页面都出现延迟或响应缓慢,还是仅限于特定的监控页面。 监控数据看不到: 需要明确是全部数据都无法查看,还是仅限于特定集群的数…

第三十八章 Spring之假如让你来写MVC——适配器篇

Spring源码阅读目录 第一部分——IOC篇 第一章 Spring之最熟悉的陌生人——IOC 第二章 Spring之假如让你来写IOC容器——加载资源篇 第三章 Spring之假如让你来写IOC容器——解析配置文件篇 第四章 Spring之假如让你来写IOC容器——XML配置文件篇 第五章 Spring之假如让你来写…

【开源免费】基于SpringBoot+Vue.JS企业OA管理系统(JAVA毕业设计)

本文项目编号 T 135 ,文末自助获取源码 \color{red}{T135,文末自助获取源码} T135,文末自助获取源码 目录 一、系统介绍二、数据库设计三、配套教程3.1 启动教程3.2 讲解视频3.3 二次开发教程 四、功能截图五、文案资料5.1 选题背景5.2 国内…

(12)springMVC文件的上传

SpringMVC文件上传 首先是快速搭建一个springMVC项目 新建项目mvn依赖导入添加webMoudle添加Tomcat运行环境.在配置tomcat时ApplicationContext置为"/"配置Artfact的lib配置WEB-INF配置文件(记得添加乱码过滤)配置springmvc-servlet文件&…

【华为路由/交换机的ftp文件操作】

华为路由/交换机的ftp文件操作 PC:10.0.1.1 R1:10.0.1.254 / 10.0.2.254 FTP:10.0.2.1 S1:无配置 在桌面创建FTP-Huawei文件夹,里面创建config/test.txt。 点击上图中的“启动”按钮。 然后ftp到server,…

虚拟拨号技术(GOIP|VOIP)【基于IP的语音传输转换给不法分子的境外来电披上一层外衣】: Voice over Internet Protocol

文章目录 引言I 虚拟拨号技术(GOIP|VOIP)原理特性:隐蔽性和欺骗性II “GOIP”设备原理主要功能III 基于IP的语音传输 “VOIP” (Voice over Internet Protocol)IV “断卡行动”“断卡行动”目的电信运营商为打击电诈的工作V 知识扩展虚拟号保护隐私虚拟运营商被用于拨打骚扰…

获取当前页面的url相关信息

引言:如何通过javascript获取当前html页面的链接信息 let currentUrl window.location.href; let protocol window.location.protocol; // 协议 let host window.location.host; // 主机名和端口 let hostname window.location.hostname; // 主机名 le…

【C++】size_t全面解析与深入拓展

博客主页: [小ᶻ☡꙳ᵃⁱᵍᶜ꙳] 本文专栏: C 文章目录 💯前言💯一、什么是size_t?为什么需要size_t? 💯二、size_t的特性与用途1. size_t是无符号类型示例: 2. size_t的跨平台适应性示例对…

Quinlan C4.5剪枝U(0,6)U(1,16)等置信上限如何计算?

之前看到Quinlan中关于C4.5决策树算法剪枝环节中,关于错误率e置信区间估计,为啥 当E=0时,U(0,1)=0.75,U(0,6)=0.206,U(0,9)=0.143? 而当E不为0时,比如U(1,16)=0.157,如图: 关于C4.5决策树,Quinlan写了一本书,如下: J. Ross Quinlan (Auth.) - C4.5. Programs f…

怎么进行论文选题?有没有AI工具可以帮助~

论文选题听起来简单,做起来难!尤其是对于我们这群即将毕业的“学术小白”。记得那天导师布置完任务,我整个人就陷入了深深的沉思(其实是发呆)。直到室友神秘兮兮地告诉我:“你知道AI现在能帮人选题了吗&…

windows 极速安装 Linux (Ubuntu)-- 无需虚拟机

1. 安装 WSL 和 Ubuntu 打开命令行,执行 WSL --install -d ubuntu若报错,则先执行 WSL --update2. 重启电脑 因安装了子系统,需重启电脑才生效 3. 配置 Ubuntu 的账号密码 打开 Ubuntu 的命令行 按提示,输入账号,密…

TCP-IP详解卷 TCP的超时与重传

TCP-IP详解卷1-21:TCP的超时与重传(Timeout and Retransmission) 一:介绍 1: 与数据链路层的ARQ协议相类似,TCP使用超时重发的重传机制。 即:TCP每发送一个报文段,就对此报文段设置…

【统计的思想】假设检验(一)

假设检验是统计学里的重要方法,同时也是一种“在理想与现实之间观察求索”的测试活动。假设检验从概率的角度去考察理想与现实之间的关系,籍此来缓解测试可信性问题。 我们先来看一个例子。民航旅客服务系统,简称PSS系统,有一种业…

欧拉Euler 21.10 安装Oracle 19c RAC( PDB )到单机ADG

环境说明 主库(RAC) 备库(FS) 数据库版本 Oracle19.22.0.0 Oracle19.22.0.0 IP 地址 192.168.40.90-94 192.168.40.95 主机名 hfdb90、hfdb91 hfdb95 DB_UNIQUE_NAME hfdb dghfdb DB_NAME hfdb hfdb DB Instance…

图数据库 | 18、高可用分布式设计(中)

上文我们聊了在设计高性能、高可用图数据库的时候,从单实例、单节点出发,一般有3种架构演进选项:主备高可用,今天我们具体讲讲分布式共识,以及大规模水平分布式。 主备高可用、分布式共识、大规模水平分布式&#xff…

为mysql开启error日志 - phpstudy的数据库启动失败

步骤 找到mysql的配置文件 “my.ini”, windows上直接进入mysql安装目录,或者直接全盘搜; linux上使用命令 locate my.ini 即可搜索 修改"my.ini",找到 组[mysqld] 下面的“log_error”并设置日志文件绝对路径&#x…

Java设计模式——单例模式(特性、各种实现、懒汉式、饿汉式、内部类实现、枚举方式、双重校验+锁)

我是一个计算机专业研0的学生卡蒙Camel🐫🐫🐫(刚保研) 记录每天学习过程(主要学习Java、python、人工智能),总结知识点(内容来自:自我总结网上借鉴&#xff0…

MySQL查询相关内容

创建员工库和表; mysql> create database mydb8_worker; Query OK, 1 row affected (0.01 sec)mysql> use mydb8_worker; Database changed mysql> create table t_worker(-> department_id int(11) not null comment 部门号,-> worker_id int(11)…

微信小程序原生与 H5 交互方式

在微信小程序中,原生与 H5 页面(即 WebView 页面)之间的交互通常有以下几种方式: 1. 使用 postMessage 进行通信 微信小程序的 WebView 页面和原生小程序页面可以通过 postMessage 来进行数据传递。 WebView 页面向原生小程序发…