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

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

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.rhkb.cn/news/429624.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【齐家网-注册/登录安全分析报告】

前言 由于网站注册入口容易被黑客攻击,存在如下安全问题: 暴力破解密码,造成用户信息泄露短信盗刷的安全问题,影响业务及导致用户投诉带来经济损失,尤其是后付费客户,风险巨大,造成亏损无底洞…

1、vectorCast单元测试常用操作

一、自动创建测试工程 1、设置工作目录 进入软件主页面,点击file,选择set working directory,随便选择一个保存该项目的目录即可。 2、创建一个空工程 编译器选择vector自带的编译器,vectorCast MinGW C。 此时项目工程就创建好了 2.1、配置编译器节点 点击编译器节点…

Hadoop的安装和使用

1. Hadoop简介 Hadoop是一个能够对大量数据进行分布式处理的软件框架,并且是以一种可靠、高效、可伸缩的方式进行处理的,它具有以下几个方面的特性。 高可靠性。高效性。高可扩展性。高容错性。成本低。运行在Linux平台上。支持多种编程语言。 2. 分布…

【计算机网络 - 基础问题】每日 3 题(十八)

✍个人博客:Pandaconda-CSDN博客 📣专栏地址:http://t.csdnimg.cn/fYaBd 📚专栏简介:在这个专栏中,我将会分享 C 面试中常见的面试题给大家~ ❤️如果有收获的话,欢迎点赞👍收藏&…

数据结构:二叉树(一)

ps:偷懒了几天,接着更新 树的概念 树是一种非线性的数据结构,它是由n(n>0)个有限结点组成一个具有层次关系的集合。 把它叫做树是因为它看起来像一棵倒挂的树,也就是说它是根朝上,而叶朝下的…

独立站冷启动SOP之市场和竞品调研1.0丨出海笔记

大家好,我是出海笔记Club的创始人Alan,过去半年我们做了15期的操盘手面对面,主要围绕的是跨境电商独立站的冷启动,基本上大部分方法和路径我们都覆盖到了。 我把目的,调研内容和可以使用的工具都罗列出来,…

Java继承教程!(o|o)

Java 继承 Java面向对象设计 - Java继承 子类可以从超类继承。超类也称为基类或父类。子类也称为派生类或子类。 从另一个类继承一个类非常简单。我们在子类的类声明中使用关键字extends,后跟超类名称。 Java不支持多重继承的实现。 Java中的类不能有多个超类。…

CVE-2024-46101

前言 自己挖的第一个CVE~ 喜提critical 这里简单说一下。 漏洞简介 GDidees CMS < 3.9.1 的版本&#xff0c;存在一个任意文件上传漏洞。允许登录后的攻击者上传webshell获得网站的权限。 影响版本&#xff1a; GDidees CMS < 3.9.1 &#xff08;其它的我没测。。&am…

专题七_分治_快排_归并_算法专题详细总结

目录 分治 一、分治思想的概念 二、分治思想的步骤 1. 颜⾊分类&#xff08;medium&#xff09; 解析&#xff1a; 2. 快速排序&#xff08;medium&#xff09; 解析&#xff1a; 总结&#xff1a; 3. 快速选择算法&#xff08;medium&#xff09; 解析&#xff1a; …

xinference linux系统下部署

1.创建虚拟环境 conda create -n xinfer pyrhon3.10 2.使用虚拟环境 conda activate xinfer (xinfer) roothome:~$ python -V Python 3.10.14 3.pip安装环境 pip install "xinference[all]" 4.启动服务 nohup xinference-local --host 0.0.0.0 --port 9997 &…

认识结构体

目录 一.结构体类型的声明 1.结构的声明 2.定义结构体变量 3.结构体变量初始化 4.结构体的特殊声明 二.结构体对齐(重点难点) 1.结构体对齐规则 2.结构体对齐练习 (一)简单结构体对齐 (二)嵌套结构体对齐 3.为什么存在内存对齐 4.修改默认对齐数 三.结构体传参 1…

python新手的五个练习题

代码 # 1. 定义一个变量my_Number,将其设置为你的学号&#xff0c;然后输出到终端。 my_Number "20240001" # 假设你的学号是20240001 print("学号:", my_Number) # 2. 计算并输出到终端:两个数(例如3和5)的和、差、乘积和商。 num1 3 num2 5 print(&…

nacos适配人大金仓的数据库

前言 在微服务架构中&#xff0c;服务发现和配置管理是关键组件。Nacos作为一个动态服务发现和配置管理平台&#xff0c;支持多种数据库作为其后端存储。本文将探讨如何在Nacos中适配人大金仓数据库&#xff0c;以及在此过程中的最佳实践。 Nacos简介 Nacos&#xff08;Nami…

安卓数据存储——SharedPreferences

共享参数 SharedPreferences 1、sharedPreferences是Android的一个轻量级存储工具&#xff0c;采用的存储结构是key - value的键值对方式 2、共享参数的存储介质是符合XML规范的配置文件。保存路径是&#xff1a;/data/data/应用包名/shared_prefs/文件名.xml 使用场景&…

[Python学习日记-26] Python 中的文件操作

[Python学习日记-26] Python 中的文件操作 简介 操作模式 循环文件 其他功能 混合模式 修改文件 简介 在 Python 中的文件操作其实和我们平时使用的 Word 的操作是比较类似的&#xff0c;我们先说一下 Word 的操作流程&#xff0c;流程如下&#xff1a; 找到文件&#x…

LeetCode题练习与总结:回文链表--234

一、题目描述 给你一个单链表的头节点 head &#xff0c;请你判断该链表是否为回文链表。如果是&#xff0c;返回 true &#xff1b;否则&#xff0c;返回 false 。 示例 1&#xff1a; 输入&#xff1a;head [1,2,2,1] 输出&#xff1a;true示例 2&#xff1a; 输入&#x…

【笔记】第三节 组织与性能

3.1 基本成分 3.2 微观组织特征 0.6-0.8C%碳素钢的组织为珠光体和少量的铁素体。 如何把组织和性能联系起来&#xff1f;德国克虏伯公司的研究——珠光体片间距与渗碳体片层厚度成比例&#xff1a; t s 0 ( ρ 15 ( C % ) − 1 ) ts_0(\frac{\rho}{15(C\%)}-1) ts0​(15(C%)…

go的结构体、方法、接口

结构体&#xff1a; 结构体&#xff1a;不同类型数据集合 结构体成员是由一系列的成员变量构成&#xff0c;这些成员变量也被称为“字段” 先声明一下我们的结构体&#xff1a; type Person struct {name stringage intsex string } 定义结构体法1&#xff1a; var p1 P…

谷歌收录批量查询,怎么查看批量查询谷歌收录情况

在SEO&#xff08;搜索引擎优化&#xff09;领域&#xff0c;确保网站内容被谷歌等搜索引擎有效收录是提升网站可见性和流量的关键步骤。批量查询谷歌收录情况&#xff0c;能够帮助网站管理员快速了解哪些页面已被搜索引擎识别并编入索引&#xff0c;哪些页面可能存在问题需要优…