什么是 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/3?下一代 Web 协议
毫无疑问,发展互联网底层的庞大协议基础设施是一项艰巨的任务。 HTTP 的下一个主要版本基于 QUIC 协议构建,并有望提供更好的性能和更高的安全性。 以下是 Web 应用程序开发人员需要了解的内容。 HTTP/3 的前景与风险 HTTP/3 致力于让互联网对每个人…...
IDEA Project不显示/缺失文件
问题:侧边栏project 模式下缺少部分文件 先点close project 打开项目所在目录,删除目录下的.idea文件夹 重新open project打开这个项目即可解决...
浅谈vue2.0与vue3.0的区别(整理十六点)
目录 1. 实现数据响应式的原理不同 2. 生命周期不同 3. vue 2.0 采用了 option 选项式 API,vue 3.0 采用了 composition 组合式 API 4. 新特性编译宏 5. 父子组件间双向数据绑定 v-model 不同 6. v-for 和 v-if 优先级不同 7. 使用的 diff 算法不同 8. 兄弟组…...
深入理解 MySQL MVCC:多版本并发控制的核心机制
在数据库领域,并发控制是确保多个事务能够正确地并发执行而不破坏数据完整性的关键技术。MySQL 作为广泛使用的关系型数据库管理系统,采用了多版本并发控制(Multi-Version Concurrency Control,MVCC)机制来实现高效的并…...
Qt6编译达梦8数据库驱动插件
一、编译环境 操作系统:deepin V23 Qt版本: Qt 6.7.2 编译器:gcc/g version 12.3.0,cmake 3.28.3 达梦数据库:开发版V8 二、下载达梦QT接口源码 下载链接: https://eco.dameng.com/downlo…...
什么是机器学习力场
机器学习力场(Machine Learning Force Fields, MLFF)方法是一类将机器学习技术应用于分子动力学(Molecular Dynamics, MD)模拟的技术。它通过使用机器学习算法拟合原子之间的相互作用能量和力场,使得在不牺牲精度的前提…...
USB组合设备——串口+鼠标+键盘
文章目录 USB组合设备——串口+鼠标+键盘描述符结构设备描述符配置描述符集合配置描述符接口关联描述符键盘接口描述符鼠标接口描述符类特殊命令CDC 的类特殊命令HID 的类特殊命令接口 2接口3USB组合设备——串口+鼠标+键盘 描述符结构 设备描述符 配置描述符 接口关联描述符…...
python学习——对无人机影像有RGB转换到HSV
问题描述 最近需要对无人机影像中绿色植被信息进行提取,查看相关论文,发现用的比较多的就是HSV色彩转换方法,动手实践一下。 解决思路 #mermaid-svg-5ejGodIusPv6zFVS {font-family:"trebuchet ms",verdana,arial,sans-serif;fon…...
【南方科技大学】CS315 Computer Security 【Lab2 Buffer Overflow】
目录 引言软件要求启动虚拟机环境设置禁用地址空间布局随机化(ASLR)设置编译器标志以禁用安全功能 概述BOF.ctestShellCode.c解释 createBadfile.c 开始利用漏洞在堆栈上查找返回地址 实验2的作业 之前有写过一个 博客,大家可以先看看栈溢出…...
持续集成与持续交付CI/CD
CI/CD 是指持续集成(Continuous Integration)和持续部署(Continuous Deployment)或持续交付(Continuous Delivery) 持续集成(Continuous Integration) 持续集成是一种软件开发实践&…...
C++学习笔记之变量作用域
C学习笔记之变量作用域 https://www.runoob.com/cplusplus/cpp-variable-scope.html 在C程序中,通常有 3 个地方可以声明变量 在函数或者代码块当中,为局部变量在函数的参数定义中,为形式参数在所有函数的外部,为全局变量 作用域…...
解决跨境电商平台账号无法访问的常见问题
跨境电商的迅猛发展,越来越多的卖家选择在全球各大电商平台如亚马逊、eBay等进行商品销售。然而,在实际运营过程中,卖家经常会遇到账号无法访问、应用打不开等问题,导致业务受阻。本文将针对这些问题进行详细分析,并提…...
P2847 [USACO16DEC] Moocast G
P2847 [USACO16DEC] Moocast G [USACO16DEC] Moocast G 题面翻译 Farmer John 的 N N N 头牛 ( 1 ≤ N ≤ 1000 1 \leq N \leq 1000 1≤N≤1000) 为了在他们之间传播信息,想要组织一个"哞哞广播"系统。奶牛们决定去用步话机装备自己而不是在很远的距离…...
针对国内AIGC市场,国内目前出台了那些法律法规?
针对国内AIGC市场,特别是AI生成与合成内容方面,中国已经出台了一系列法律法规来规范其发展和应用。 图片源自“央视新闻” 以下是一些主要的法律法规: 一、国家层面的法律法规 《中华人民共和国网络安全法》 施行时间:2017年6月…...
Windows+Ubuntu双系统下时钟设置
Ubuntu默认把系统时间(硬件时钟)设置为UTC时间,并根据本地时区和夏令时设置自动调整本地时间,这是一种很合理很优雅的处理硬件时钟和本地时钟的模式。而Windows系统是默认情况下把系统时间设置为本地时间,历来独霸电脑…...
一些写leetcode的笔记
标准库中的string类没有实现像C#和Java中string类的split函数,所以想要分割字符串的时候需要我们自己手动实现。但是有了stringstream类就可以很容易的实现,stringstream默认遇到空格、tab、回车换行会停止字节流输出。 #include <sstream> #incl…...
shopify主题开发之template模板解析
在 Shopify 主题开发中,template 文件是核心部分,它们定义了店铺中不同页面的布局和结构。下面将详细介绍 Shopify 主题中的 template 模板。 一、template 文件结构 在 Shopify 主题中,templates 文件夹包含了所有用于生成店铺页面的模板文…...
Zookeeper学习
文章目录 学习第 1 章 Zookeeper 入门1.1 概述Zookeeper工作机制 1.2 特点1.3 数据结构1.4 应用场景统一命名服务统一配置管理统一集群管理服务器动态上下线软负载均衡 1.5 下载zookeeper 第 2 章 Zookeeper 本地安装2.1 本地模式安装安装前准备配置修改操作 Zookeeper本地安装…...
FAT32文件系统详细分析 (格式化SD nandSD卡)
FAT32 文件系统详细分析 (格式化 SD nand/SD 卡) 目录 FAT32 文件系统详细分析 (格式化 SD nand/SD 卡)1. 前言2.格式化 SD nand/SD 卡3.FAT32 文件系统分析3.1 保留区分析3.1.1 BPB(BIOS Parameter Block) 及 BS 区分析3.1.2 FSInfo 结构扇区分析3.1.3 引导扇区剩余扇区3.1.4 …...
通义灵码在Visual Studio上
通义灵码在Visual Studio上不好用,有时候会出现重影,不如原生的自动补全好用,原生的毕竟的根据语法来给出提示的。...
在软件开发中正确使用MySQL日期时间类型的深度解析
在日常软件开发场景中,时间信息的存储是底层且核心的需求。从金融交易的精确记账时间、用户操作的行为日志,到供应链系统的物流节点时间戳,时间数据的准确性直接决定业务逻辑的可靠性。MySQL作为主流关系型数据库,其日期时间类型的…...
设计模式和设计原则回顾
设计模式和设计原则回顾 23种设计模式是设计原则的完美体现,设计原则设计原则是设计模式的理论基石, 设计模式 在经典的设计模式分类中(如《设计模式:可复用面向对象软件的基础》一书中),总共有23种设计模式,分为三大类: 一、创建型模式(5种) 1. 单例模式(Sing…...
C++_核心编程_多态案例二-制作饮品
#include <iostream> #include <string> using namespace std;/*制作饮品的大致流程为:煮水 - 冲泡 - 倒入杯中 - 加入辅料 利用多态技术实现本案例,提供抽象制作饮品基类,提供子类制作咖啡和茶叶*//*基类*/ class AbstractDr…...
深入剖析AI大模型:大模型时代的 Prompt 工程全解析
今天聊的内容,我认为是AI开发里面非常重要的内容。它在AI开发里无处不在,当你对 AI 助手说 "用李白的风格写一首关于人工智能的诗",或者让翻译模型 "将这段合同翻译成商务日语" 时,输入的这句话就是 Prompt。…...
云启出海,智联未来|阿里云网络「企业出海」系列客户沙龙上海站圆满落地
借阿里云中企出海大会的东风,以**「云启出海,智联未来|打造安全可靠的出海云网络引擎」为主题的阿里云企业出海客户沙龙云网络&安全专场于5.28日下午在上海顺利举办,现场吸引了来自携程、小红书、米哈游、哔哩哔哩、波克城市、…...
线程同步:确保多线程程序的安全与高效!
全文目录: 开篇语前序前言第一部分:线程同步的概念与问题1.1 线程同步的概念1.2 线程同步的问题1.3 线程同步的解决方案 第二部分:synchronized关键字的使用2.1 使用 synchronized修饰方法2.2 使用 synchronized修饰代码块 第三部分ÿ…...
第25节 Node.js 断言测试
Node.js的assert模块主要用于编写程序的单元测试时使用,通过断言可以提早发现和排查出错误。 稳定性: 5 - 锁定 这个模块可用于应用的单元测试,通过 require(assert) 可以使用这个模块。 assert.fail(actual, expected, message, operator) 使用参数…...
sqlserver 根据指定字符 解析拼接字符串
DECLARE LotNo NVARCHAR(50)A,B,C DECLARE xml XML ( SELECT <x> REPLACE(LotNo, ,, </x><x>) </x> ) DECLARE ErrorCode NVARCHAR(50) -- 提取 XML 中的值 SELECT value x.value(., VARCHAR(MAX))…...
Mysql中select查询语句的执行过程
目录 1、介绍 1.1、组件介绍 1.2、Sql执行顺序 2、执行流程 2.1. 连接与认证 2.2. 查询缓存 2.3. 语法解析(Parser) 2.4、执行sql 1. 预处理(Preprocessor) 2. 查询优化器(Optimizer) 3. 执行器…...
音视频——I2S 协议详解
I2S 协议详解 I2S (Inter-IC Sound) 协议是一种串行总线协议,专门用于在数字音频设备之间传输数字音频数据。它由飞利浦(Philips)公司开发,以其简单、高效和广泛的兼容性而闻名。 1. 信号线 I2S 协议通常使用三根或四根信号线&a…...
