什么是 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.xdnf.cn/news/142347.html

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

相关文章

[数据集][图像分类]茶叶病害分类数据集6749张7类别

数据集类型:图像分类用,不可用于目标检测无标注文件 数据集格式:仅仅包含jpg图片,每个类别文件夹下面存放着对应图片 图片数量(jpg文件个数):6749 分类类别数:7 类别名称:["Unlabeled","alg…

项目实现:云备份②(文件操作、Json等工具类的实现)

云备份 前言文件操作实用工具类设计文件属性的获取文件的读写操作文件压缩与解压缩的实现文件目录操作 Json 实用工具类设计编译优化 前言 如果有老铁不知道当前项目实现的功能是什么的话,可以先移步这篇文章内容: 云备份项目的介绍 其中介绍了云备份项…

在 Dify 中高效利用 SiliconCloud API

引言 SiliconCloud 以其丰富的模型库和卓越的处理速度,在 Dify 平台上实现高效工作流和智能代理变得轻而易举。本文将指导您如何在 Dify 中集成 SiliconCloud 的强大功能。 集成 SiliconCloud 模型 步骤一:设置 SiliconCloud 账户 首先,您…

5. Python之数据类型

Python数据类型有数值型,字符串型,布尔型等等 内置函数type(),可以查看变量的数据类型 。 一、数值类型 整数(没有小数部分,包含正整数,负整数,0,默认为十进制数)&…

PHP:强大的Web开发语言

PHP:强大的Web开发语言 一、PHP 简介及优势 PHP 的基本概念 PHP(PHP: Hypertext Preprocessor)即 “超文本预处理器”,是一种通用开源脚本语言,最初由 Rasmus Lerdorf 于 1994 年创建。它可以在服务器上执行&#xf…

正则表达式匹配整数与浮点数失败与解决方案

正则表达式匹配整数与浮点数失败与解决方案 问题描述问题分析解决方案总结 问题描述 在处理数据的时候需要提取文本内整数与浮点数,这个时候想到使用正则表达式,咨询百度文心一言给出以下方案及参考代码 import re text "我有100元,…

华为地图服务功能概览 -- HarmonyOS自学7

华为地图服务式Harmony OS生态下的一个地图服务,为开发者提供强大而便捷的地图能力,助力全球开发者实现个性化地图呈现,地图搜索和路线规划功能。 主要包括七大功能:静态图,场景化控件,地点搜索&#xff0c…

函数的认识(二)

函数的基础知识可查看:函数的认识(一) (1)函数说明文档 函数是纯代码语言,想要理解其含义,就需要一行行的去阅读理解代码,效率比较低。 我们可以给函数添加说明文档,辅…

Python 解析 Charles JSON Session File (.chlsj)

Charles 代理,是一款抓包软件,可以帮助我们抓取浏览器请求跟响应。 1、在 Filter 里面输入需要抓包的网址 2、右键 Export Session 3、文件类型选择 JSON Session File (.chlsj) 保存 4、解析响应的数据结构 response.body.text 是文本字符串。 # 导入…

Navicat使用 笔记04

Navicat调用数据库 1.创建一个自己的链接(文件-->新建连接-->MySQL) 进入到这个界面中: 【注意:密码是下载登录软件时设定过的】 创建一个连接完成(通过双击激活)。 2.在创建好的连接中创建数据库…

Linux-mysql5.7-mysql8.0安装包下载及安装教程,二合一

一、安装包下载 1、手动下载 MySQL :: Download MySQL Community Server 2、wegt下载 wget https://dev.mysql.com/get/Downloads/MySQL-5.7/mysql-5.7.24-linux-glibc2.12-x86_64.tar.gz 登录自己的liunx ,复制上面的命令下载。 二、手动安装 1、上传压缩包到…

蓝桥杯-基于STM32G432RBT6的LCD进阶(LCD界面切换以及高亮显示界面)

目录 一、页面切换内容详解 1.逻辑解释 2.代码详解 code.c(内含详细讲解) code.h main.c 3.效果图片展示 ​编辑 二、页面选项高亮内容详解 1.逻辑解释 2.读入数据 FIRST.第一种高亮类型 code.c(内含代码详解) code.…

kubernetes中pause容器的作用与源码详解

概述 摘要:上一篇文章我们介绍了kubernetes是如何通过pause容器来构建一个pod。本文我们对pause容器做一个总结,并再此基础上次深入浅出,从pause容器的源码详细了解pause容器的实现原理。 正文 pause容器是什么 在 Kubernetes 中&#xff…

超高速传输 -- Fixed Grid与Flexible Grid

Fixed Grid 传统的40波/80波DWDM系统采用Fixed Grid固定光谱方式,波长间隔固定为100GHz或者50GHz,中心频率也是固定的。在Fixed Grid方式下,带宽无法灵活调配。 随着系统中信号速率的提升,光信号的频谱也在变宽;当多速…

SpringSecurity原理解析(八):CSRF防御解析

一、CsrfFilter CsrfFilter 主要功能是用来防止csrf攻击 一、什么是CSRF攻击 跨站请求伪造(英语:Cross-site request forgery),也被称为 one-click attack 或者 session riding,通常缩写为 CSRF 或者 XSRF&#xff0c…

有关C# .NET Core 过滤器的使用

想用一个过滤器实现特定接口的审核日志记录,结果报了错,看了看感觉有些基础要补,所以想记录下来 错误: 在属性过滤器中使用了依赖注入,结果在应用在控制层接口时报了传参的错 //过滤器 public class AuditRecordFil…

数据时代,职场离不开的远程控制工具

中秋了大概率是在正常放假了吧,如果突发遇到需要你处理的文件怎么办呢?其实有远程操作工具你就不用到办公室了。向日葵远程控制软件这些工具就可以帮我们远程实现控制电脑操作。如果你也有这方面需求就继续看吧,这次我将介绍几款我用过效果比…

(c++)字符串相加(真没想到字符串还有相加运算)

#include<iostream> #include<string> using namespace std;int main() {string ch1 "你好";string ch2 "再见";string ch3 ch1 ch2;cout << ch3 << endl;system("pause");return 0; } 运行结果&#xff1a; 学了c…

SpringBoot Kafka发送消息与接收消息实例

前言 Kafka的基本工作原理 我们将消息的发布&#xff08;publish&#xff09;称作 producer(生产者)&#xff0c;将消息的订阅&#xff08;subscribe&#xff09;表述为 consumer&#xff08;消费者&#xff09;&#xff0c;将中间的存储阵列称作 broker(代理)&#xff0c;这…

Qt --- 信号和信号槽

前言 Linux信号Signal&#xff0c;系统内部的通知机制&#xff0c;进程间通信方式。 信号源&#xff1a;谁发的信号。 信号的类型&#xff1a;哪种类别的信号。 信号的处理方式&#xff1a;注册信号处理函数&#xff0c;在信号被触发的时候自动调用执行。 Qt中的信号和Lin…