HTTP/3为什么正迅速吞噬世界?

更新日期: 2023-12-08阅读: 557标签: http

超文本传输协议(HTTP)作为互联网的基石,一直在网页加载、视频流传输、应用获取数据等方方面面发挥重要作用。

去年,负责定义互联网技术的互联网工程任务组(IETF)将该协议的最新版本 HTTP/3 定为标准。在此之后,HTTP.3 及相关 QUIC 协议在公共网络上迅速普及。尽管不同来源和测量方法给出的结果略有差别,但目前普遍认为全球 19% 到 50% 的 Web 服务器和网络均已支持 HTTP/3。

由于这些新协议得到谷歌和 Meta 等大公司的广泛应用,我们认为,当前互联网流量中已经有很大一部分在使用 HTTP/3。

在本篇文章中,我将介绍一些背景信息,介绍 HTTP/3 解决了哪些问题、它是如何执行的、为什么能够得到迅速普及,以及 HTTP/3 仍然面临哪些有待克服的障碍。


我们为什么需要 HTTP/3?

网络协议所描述的,是数据如何在网络上的两个实体之间(通常是用户设备和 Web 服务器)进行通信。因为市场上有多家公司在为网络开发软件,因此通信协议必须确保标准化,以便所有软件之间都可以“互操作”。换句话说,各软件能够在遵循相同规则的基础之上相互理解。

在实践当中,我们往往不会使用单一某种协议,而是同时使用多种协议的组合。其中各项协议都有自己的作用和规则(详见图一)。这样的设计是为了保障灵活性和可复用性——无论大家使用的是 Wi-Fi、固网还是 4G/5G,都能使用完全相同的 HTTP 逻辑。


图 1 HTTP/2 与 HTTP/3 的协议栈,如何将多项协议组合起来以提供完整的互联网功能

不少初期互联网协议早在上世纪 80、90 年代就已经被定为标准,这意味着它们在设计上考虑的是几十年前的需求和限制。虽然其中一些协议经受住了时间的考验,但也有不少已经明显有些过时了。大多数问题倒是可以通过变通和一些小技巧进行解决,可也有一些到了不得不变的时候。其中最典型的就是传输控制协议(TCP),它的作用是确保数据能够可靠地在互联网上往来传输。


为什么说 TCP已经不适合如今的 Web

HTTP/1.1 和 HTTP/2 正常运作的前提,就是以 TCP 为基础。具体来讲,在客户端和服务器间交换 HTTP 请求 / 响应之前,必须先建立起 TCP 连接。

随着时间推移,人们做出了不少努力来更新 TCP,并解决其中一些影响效率的问题——例如,TCP 会将网页视为单个文件,而非由数百个独立文件构成的集合。虽然部分更新已经取得成功,但多数影响较大的更新(例如 TCP 多路径和 TCP Fast Open)花了近十年时间才在公共互联网上实际落地。

革新 TCP 的主要挑战,在于互联网上成千上万的设备各有各的 TCP 协议实现。除了大家第一时间能想到的手机、笔记本电脑和服务器,还有路由器、防火墙、负载均衡器等其他类型的“中间装置”。也就是说,如果我们想要更新 TCP,就必须等待这些设备中的大部分都对自己的协议实现做更新,而这明显是个需要耗时数年的艰辛过程。

QUIC 解决方案

面对这个几乎无解的问题,最靠谱的办法反而是直接出台一种全新方案、直接替换掉 TCP。这套替代方案就是 QUIC 协议,但也有不少人半开玩笑地将其称为 TCP 2.0。这个昵称其实并无不妥,因为 QUIC 中确实包含许多与 TCP 相同的高级功能,只是做了一系列关键性调整。

其中最大的变化就是 QUIC 与传输层安全(TLS)协议的深度集成。TLS 负责加密网络上的敏感数据,也就是 HTTPS 中的 S(安全)。在 TCP 协议下,TLS 仅加密实际 HTTP 数据(参见图二);对于 QUIC,TLS 还会对 QUIC 协议本身的大部分内容进行加密。也就是说,TCP 当中对所有中间件均可见(且可更改)的元数据(例如数据包编号、连接关闭信号等),在现在的 QUIC 中将仅供客户端和服务器使用。


图 2 TCP+TLS 与 QUIC 之间的加密差异。可以看到,QUIC 中被加密的不仅仅是 HTTP 数据

此外,由于 QUIC 的加密程度更高,所以对它的变更或新功能添加要比 TCP 简单得多——即只需要更新客户端和服务器,因为中间件无论如何也无法解密元数据。这就让 QUIC 成为一种面向未来的协议,能帮助我们快速解决种种新兴挑战。

当然,这种额外的加密机制也有助于增强新协议的总体安全性和隐私性。虽然 TCP+TLS 非常适合保护信用卡或电子邮件内容等个人敏感数据,但却仍容易受到复杂(隐私)攻击的影响。而且随着 AI 技术的快速发展,这些攻击的实施门槛也越来越低。通过进一步加密此类元数据,QUIC 协议无疑能够更好地应对精心策划的恶意攻击。

QUIC 还包含诸多其他与安全相关的功能,包括防御分布式拒绝服务(DDoS)攻击、以及防放大和 RETRY 数据包等功能。

最后,与 TCP 相比,QUIC 还带来了大量效率和性能改进,包括更快的连接握手(参见图三)、消除“队头阻塞”问题、更好的数据包丢失检测 / 恢复,以及处理用户切换网络的方法。


图 3 QUIC 在设置上拥有更快的连接速度,因为它能将“传输”三向握手与 TLS 加密会话相结合,性能优于 TCP+TLS 中的两个独立过程


我们真正需要的并不是 HTTP/3,而是 QUIC

最初,我们也曾尝试保留 HTTP/2 并进行增量式调整,希望能在底层用上 QUIC(毕竟当初保留这么多协作元素和可复用协议,意义也就在于此)。但很明显,QUIC 与 TCP 之间存在着巨大差异,HTTP/2 根本无法全部兼容。因此,互联网工程任务组才决定专门为 QUIC 制作新的 HTTP 版本,这就是现在的 HTTP/3。

HTTP/3 与 HTTP/2 几乎相同,二者的主要区别就体现在 QUIC/TCP 之上各项功能的技术实现。但由于 HTTP/3 能够使用 QUIC 的全部新功能,因此在加载网页和流媒体视频时将带来更好的性能表现。也正是这个优势,让 HTTP/3 得到了市场的广泛认可和快速接纳。

原文链接:https://blog.apnic.net/2023/09/25/why-http-3-is-eating-the-world/

链接: https://fly63.com/article/detial/12602

HTTPS 常见部署问题及解决方案

到任何有关部署 HTTPS 或 HTTP/2 的问题,都推荐先用 Qualys SSL Labs SSL Server Test 跑个测试,大部分问题都能被诊断出来。

HTTP请求头和响应头部包括的信息有哪些【HTTP请求头各字段解释】

每个HTTP请求和响应都会带有相应的头部信息。默认情况下,在发送XHR请求的同时,还会发送下列头部信息: Accept、Accept-Charset、Accept-Encoding、Connection、Host

服务器响应常用状态码及含义_ajax请求中http返回的状态码大全

HTTP状态码是用以表示网页服务器HTTP响应状态的3位数字代码,其中第一位数字表示响应类别,响应类别从1到5分为五种,分别代表:临时响应、成功、重定向、请求错误、服务器错误。

HTTPS 如何保证数据传输的安全性

在客户端与服务器数据传输的过程中,HTTP协议的传输是不安全的,也就是一般情况下HTTP是明文传输的。但HTTPS协议的数据传输是安全的,也就是说HTTPS数据的传输是经过加密的

http协议的发展历史

在最早的时候,第一个定稿的http协议是http/0.9版本,在这个版本里面,http协议,它的内容,非常非常的简单 只有一个命令。http协议的历史,其中当然还有https,https是http的安全版本,它实际使用的内容跟http/1.1没有很大的区别

axios 模块化封装_对axios的二次封装的实现

Axios 是一个基于 promise 的 HTTP 库 ,使用了axios来进行数据的请求,一般都需要我们对它进行封装处理。下面简单介绍下如何对axios的二次封装的实现,以及在vue中的使用。

HttpClient的3种超时

设置ConnectionPoolTimeout:这定义了从ConnectionManager管理的连接池中取出连接的超时时间,此处设置为1秒。设置ConnectionTimeout:这定义了通过网络与服务器建立连接的超时时间。Httpclient包中通过一个异步线程去创建与服务器的socket连接

HTTP 请求头中的 Remote_Addr,X-Forwarded-For,X-Real-IP

X-Forwarded-For一般是每一个非透明代理转发请求时会将上游服务器的IP地址追加到X-Forwarded-For的后面,使用英文逗号分割;X-Real-IP一般是最后一级代理将上游IP地址添加到该头中;X-Forwarded-For是多个IP地址,而X-Real-IP是一个

HTTP协议中的短轮询、长轮询、长连接和短连接

HTTP协议是基于请求/响应模式的,因此只要服务端给了响应,本次HTTP连接就结束了,根本没有长连接这一说。网络上说HTTP分为长连接和短连接,其实本质上是说的TCP连接。TCP连接是一个双向的通道,它是可以保持一段时间不关闭的,因此TCP连接才有真正的长连接和短连接这一说。

常见HTTP请求错误码

一些常见的状态码为:200 - 服务器成功返回网页;404 - 请求的网页不存在;503 - 服务不可用。1xx(临时响应):表示临时响应并需要请求者继续执行操作的状态代码。2xx (成功):表示成功处理了请求的状态代码。

点击更多...

内容以共享、参考、研究为目的,不存在任何商业目的。其版权属原作者所有,如有侵权或违规,请与小编联系!情况属实本人将予以删除!