什么是 HTTP/3?下一代 Web 协议

news/2024/12/23 4:15:28/

https://i-blog.csdnimg.cn/direct/3627387c10a248d9ba2a8a4297923000.png" width="1000" />

https://i-blog.csdnimg.cn/direct/96d348e4ae184160bc29b08dee8b320d.png" width="1000" />

https://i-blog.csdnimg.cn/direct/56128122ea0b4d939be24d2cd84565a7.png" width="1000" />

毫无疑问,发展互联网底层的庞大协议基础设施是一项艰巨的任务。

HTTP 的下一个主要版本基于 QUIC 协议构建,并有望提供更好的性能和更高的安全性。

以下是 Web 应用程序开发人员需要了解的内容。

HTTP/3 的前景与风险

HTTP/3 致力于让互联网对每个人来说都更安全、更快速、更简单。如果这些目标听起来很熟悉,那是因为它们与 HTTP/2 最初的目标相同。

这是一个有趣的故事,但最重要的是 HTTP/3 再次解决了 TCP 和 HTTP 中长期存在的缺陷。

令人惊讶的是,新协议完全绕过了 HTTP/2,并采用 QUIC 协议作为其基础。

对 HTTP/3 的快速理解是:在 UDP 之上构建 TCP 2.0 并将其称为 QUIC。然后,在 QUIC 上重建 HTTP/2 并将其称为 HTTP/3。

如果这听起来很奇怪,那是因为它确实很奇怪。

首先,大多数部署的硬件和软件都是为与现有协议对话而设计的。批量重新配置网络设备以采用新版本的 TCP 是不可行的,理论上这是正确的起点。

这种方法可以解决 HTTP/2 的许多问题,但会留下大量故障设备。相反,我们得到了 HTTP/3。

HTTP/3 规范

HTTP/3 中有两个规范:规范本身和QUIC 协议。它们共同构成了技术和实践复杂性的丛林。

从高层次的角度看,将有助于我们理解这项技术及其希望实现的目标。

首先,我们可以将 HTTP/3 的功能分为三大类:

内置加密
多字节流(多路复用)
连接弹性

让我们依次看一下每一个。

内置加密

虽然内置加密是一种安全功能,但它也是一种性能增强。这是因为 HTTP/3 中协商加密的方式减少了所需的往返次数。

网络加密历史悠久,包括弃用 SSL 转而使用 TLS。总体而言,这一举措是为了实现更好的加密方式和提供更多默认加密。

HTTPS 现在是大多数网络流量的默认加密方式,而在 HTTP/3 中,我们将完全消除纯文本(“http://…”)选项。

HTTPS 仍将用作建立安全连接的机制,但流量将在 HTTP/3 级别加密。换句话说,TLS 将集成到网络协议>网络协议中,而不是与其一起工作。

因此,加密将移至传输层,而不是应用层。这意味着默认情况下会更安全——甚至 HTTP/3 中的标头也经过加密——但 CPU 负载也会相应增加。

总的来说,这个想法是,由于加密协商方式的改进,通信将更快,而且由于加密将内置在较低级别,因此通信将更简单,从而避免了因实现方式多样化而产生的问题。

除了加密之外,QUIC 还旨在提供集成的 DDoS 保护和“前向”安全性,即使参与者后来泄露秘密,攻击者也更难以破坏过去的通信。

多字节流或细粒度复用

如果您熟悉 HTTP/2 的工作原理,您会认为它已经实现了多路复用。事实上,多路复用是 HTTP/2 的主要功能之一。

HTTP/3 只是以一种新的、更好的方式实现了多路复用。具体来说,HTTP/3 旨在解决队头阻塞问题(HOL)。

理想情况下,我们会直接在 TCP 中修复此阻塞问题。当我们通过 TCP 运行 HTTP 时,我们可以(并且确实)同时发送多个不同的文件。这是我们目前的多路复用化身。

当您打开网站时,服务器希望一次发送尽可能多的文件。这对速度和效率有好处。HTTP/2 允许这样做,但 TCP 不理解多路复用文件。

对于 TCP 来说,它们都是一大块。更糟糕的是,如果其中任何一个失败,它必须重新启动该流中的所有文件。

HTTP/3 的新协议是 QUIC,它有点像 TCP 2.0。它将细粒度文件的概念构建到流中,以便可以以更细粒度的方式重新启动它们。更棒的是,它这样做不会破坏所有现有的 TCP 基础设施。

连接弹性

我们所说的连接弹性是指当设备在网络间移动时,有一种机制可以保留客户端和服务器之间的相同连接。

在 TCP 中,这种连续性是不可能的,因为该协议只理解 IP 地址和端口号。如果其中任何一个发生变化(例如当您拿着移动设备从一个网络走到另一个网络时),就必须建立全新的连接。这种重新连接会导致可预见的性能下降。

QUIC 协议引入了连接 ID或 CID。出于安全考虑,这些实际上是服务器和客户端协商的 CID 集。

因此,HTTP/3 连接使用 IP 地址、端口和 CID,即使网络发生变化并建立了新的 IP 或端口,它们也能保持连接。这为协议提供了一种对话持久性。

HTTP/3 实现

我提到过,HTTP/3 建立在 QUIC 协议之上,QUIC 协议本质上是 TCP 的新版本。QUIC 是一种具有历史和持续发展的协议,但对于 HTTP/3 而言,您需要知道的是,它在古老的用户数据报协议(UDP) 上构建了多项功能。

UDP

UDP 是几乎所有网络设备和软件都实现的基本协议。它用于 DNS 查找。它的普遍性和简单性使其成为最新版本 HTTP 的坚实基础。

与 TCP 不同,UDP 是无连接的,没有网络优化逻辑。QUIC 协议建立在 UDP 之上,并添加了这些必要的元素。本质上,我们正在实现一个更好的网络层,它借鉴了数十年实际互联网使用的经验。

虽然 UDP 是无连接的,但 QUIC 却不是。QUIC 使用确认 (ACK) 来建立和维护连接。QUIC 还支持数据包重新传送。这些功能与 TCP 类似,但进行了改进,以实现我们已经讨论过的三个目标:内置加密、减少网络往返和持久连接。

QUIC 是 HTTP/3 的核心,它根据实际经验以更高效、更安全的方式重新实现了 TCP 的基本元素(如确认和重新传送)。UDP 被用作 QUIC 的基础,因为它是一种完善的协议,为实现提供了最低限度的基准。

QUIC 还被设计为可扩展的,这让我们避免了目前使用 TCP 时遇到的情况。QUIC 协议使用帧,它封装了特定的数据报用途,并且可以在将来添加而不会破坏现有用例。

HTTP/3 的现状和未来

尽管 QUIC 已经在浏览器和其他项目中使用,但所有功能、协议和 HTTP/3 规范本身仍在不断开发中。

在可预见的未来,HTTP/1、HTTP/2 和 HTTP/3 将继续共存。有消息称,HTTP/1 仍占网络流量的近 30%。HTTP/3 将采用类似的请求模型。

目前,HTTP/3 作为一个更高级的网络层存在,随着更多参与者的支持,它将得到广泛使用。HTTP/3 在大规模部署时将如何兑现其承诺,还有待观察。

对于大多数在职程序员来说,这一变化是我们生活和工作的世界的一个有趣事实,但它不会直接影响我们编写的代码。

例如,我们不会直接构建 QUIC 客户端。当然,这一变化对于网络管理员和系统操作员以及任何需要分析和了解网络流量的人来说更为重要。(事实上,QUIC 的加密性质一直是一些网络运营商的症结所在,因为它使识别模式和确定用户何时滥用网络变得更加困难。)

HTTP/3 是未来网络领域的一个重要特征。每个从事网络开发的程序员都希望至少从高层次上了解它的工作原理。

请参阅以下资源以了解有关 HTTP/3 及其组件的更多信息:

RFC 9114:HTTP/3 提案的详细信息和历史。
RFC 9000:QUIC 提案的详细信息和历史。另请参阅此处的QUIC RFC 摘要。
Smashing Magazine 有一系列关于 HTTP/3 的深入介绍,包括性能改进。 


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

相关文章

SpringBoot教程(安装篇) | RabbitMQ的安装

SpringBoot教程(安装篇) | RabbitMQ的安装 一、下载RabbitMQ(windows版本)1. 先下载 RabbitMQ2. 再下载Erlang3. 开始安装 Erlang4. 为Erlang配置环境变量5、验证安装6. 开始安装 RabbitMQ7. 启用RabbitMQ的管理插件(图…

Python Pyvis库创建交互式网络图 高级功能详解

文章目录 动态网络图图布局调整扩展到大规模网络动态网络图 Pyvis支持创建动态网络图,通过时间轴展示网络图的演化过程。 需要使用set_options函数,参数必须为json格式。动态网络图支持添加点和边。 下面是一个简单的动态网络图示例: # 动态网络图示例 from pyvis.networ…

小程序开发设计-第一个小程序:创建小程序项目④

上一篇文章导航: 小程序开发设计-第一个小程序:安装开发者工具③-CSDN博客https://blog.csdn.net/qq_60872637/article/details/142219152?spm1001.2014.3001.5501 须知:注:不同版本选项有所不同,并无大碍。 一、创…

胤娲科技:解锁AI奥秘——产品经理的智能进化之旅

当AI不再是遥不可及的科幻 想象一下,你走进一家未来感十足的咖啡厅,无需言语,智能咖啡机就能根据你的偏好调制出一杯完美的拿铁; 打开手机,AI助手不仅提醒你今天有雨,还贴心推荐了最适合雨中漫步的音乐列表…

Golang使用ReverseProxy实现反向代理

目录 1.源码结构体 2.官方单机示例 3.使用示例 4.简单的http服务(用于测试) 1.源码结构体 type ReverseProxy struct {// Rewrite 必须是一个函数,用于将请求修改为要使用 Transport 发送的新请求。然后,其响应将原封不动地…

Golang 中实现动态代理

在 Go 语言中,没有像 Java 中那样直接支持的动态代理机制,因为 Go 是静态类型的编程语言,不支持像 Java 反射那样基于接口的动态代理。但我们可以通过组合使用反射(reflect 包)和高阶函数的方式,实现类似于…

神经网络通俗理解学习笔记(5) 自然语言处理

自然语言处理 词嵌入和word2vec词义搜索和句意表示预训练模型Hugging Face库介绍经典NLP数据集代码案例-电影评论情感分析 词嵌入和word2vec 词嵌入是一种 将高维的数据表示映射到低维空间的方法 word embedding 是将语言中的词编码成向量便于后续的分析和处理 词嵌入和词向量…

MFC工控项目实例之十六输入信号验证

承接专栏《MFC工控项目实例之十五定时刷新PC6325A模拟量输入》 验证选定的输入信号实时状态 在BoardTest.cpp文件中添加代码 void CBoardTest::OnButton2() {// TODO: Add your control notification handler code hereisThreadBegin true; //运行线程执行pThre…