帝游网提供最新手游APP下载和游戏攻略!

HTTP 3 发展历史和早期采用者

发布时间:2024-10-22浏览:56

大家好,如果您还对HTTP 3 发展历史和早期采用者不太了解,没有关系,今天就由本站为大家分享HTTP 3 发展历史和早期采用者的知识,包括的问题都会给大家分析到,还望可以解决大家的问题,下面我们就开始吧!

首先我们先介绍一下HTTP这些年的发展,以便更好的理解HTTP/3。

HTTP/1.0

HTTP协议起源于1996年,这一年发布了HTTP/1.0规范(0.x版本忽略),它定义了我们今天常见的基本HTTP文本规范定义。在HTTP/1.0中,定义客户端和服务器之间的每次请求/响应交换都必须创建一个新的TCP连接,因此每次请求都需要众所周知的“三向握手、四向挥手”过程。因此请求将不可避免地被延迟。例如,一个典型的HTTP/TLS流程如下所示:

此外,为了避免未处理的数据包淹没网络,TCP协议对已建立的连接使用称为“慢启动”的预热暂停期,以确定TCP拥塞控制算法可以传输的数据。量,而不是在连接建立后尽快发送所有未完成的数据。由于每个新连接都必须经历这个缓慢的启动过程,因此它也成为网络性能的瓶颈。

HTTP/1.1 保持活动状态

随后的HTTP/1.1版本引入了“keep-alive”连接方法来解决这些问题。通过keep-alive技术,客户端可以复用TCP连接,而不必每次都重新建立TCP连接,从而解决了初次建立连接和连接速度慢的问题。但这并不能从本质上解决问题,虽然多个请求可以共享同一个连接,但它们仍然必须一个接一个地序列化,因此客户端和服务器在任何给定时间只能对每个连接执行一个请求/响应交换。

随着网络和Web技术的发展,每个网站所需的资源(CSS、JS脚本、图片、视频等)增加,浏览器在获取和渲染网页时对并发的需求越来越迫切。然而,由于HTTP/1.1 只允许客户端一次只能进行一次HTTP 请求/响应交换,因此在网络层获得并发的唯一方法是并行使用多个TCP 连接,这样就无法享受保持-活生生的技术优势。

HTTP/2 SPDY

十多年后,SPDY出现,然后是HTTP/2规范。它首先引入了HTTP流的概念。通过抽象HTTP 实现以同时将不同的HTTP 交换复用到同一个TCP 连接上,浏览器可以更有效地重用TCP 连接。

HTTP/2解决了单个TCP连接使用效率低下的问题,可以通过同一个连接同时传输多个请求/响应。但如果传输过程中出现数据丢包,即使丢失的数据只涉及单个请求,所有的请求和响应都会受到丢包的影响,需要重传。因为虽然HTTP/2 可以隔离不同流上的不同HTTP 交换,但底层TCP 无法区分它们。 TCP 所能看到的只是一个没有任何标志的字节流。

TCP 的作用是将整个字节流以正确的顺序从一个端点传送到另一端点。当携带某些字节的TCP 数据包在网络路径上丢失时,会在流中产生间隙,并且TCP 需要在检测到丢失时通过重新发送受影响的数据包来填充该间隙。这样,即使丢包后没有丢包,是一个完全独立的HTTP请求,该数据包之后成功传输的数据包也无法传递到应用层。因此,这最终也会导致他们经历不必要的延误。这个问题称为TCP 队头阻塞。

为了解决队头阻塞问题,HTTP/2中还引入了复用技术,将TCP流可以传输的数据分成若干个消息,每个消息又分为最小的二进制帧,这样即使一个请求被阻塞,也不会影响其他请求,如上图中的第四种情况。

HTTP/3 QUIC

当然,这些改进TCP的方案只能部分解决问题,才能从根本上彻底解决问题。那么底层的TCP协议就需要彻底更换。这是Google探索多年的基于UDP的QUIC协议,也是HTTP/3的基础。 QUIC协议使用数据流作为基本传输层。 QUIC 流共享相同的QUIC 连接,并且需要额外的握手和慢速启动来创建新的QUIC 流。底层采用UDP协议,QUIC数据包封装在UDP数据报中。在顶部,实现了QUIC流的独立交付。因此在大多数情况下,影响一个流的丢包不会影响其他流。

使用UDP 比TCP 提供更大的灵活性,并允许QUIC 实现完全存在于用户空间中。协议实现的更新不再依赖于操作系统的更新。使用QUIC,HTTP 级流可以简单地映射到QUIC 流的标头,继承HTTP/2 的所有优点,而不会出现队头阻塞问题。

QUIC 还将典型的3 路TCP 握手与TLS 1.3 握手相结合。这默认提供加密和身份验证,并加快连接建立速度。尽管HTTP 会话中的初始请求需要新的QUIC 连接,但数据开始流动之前的等待时间很短。

HTTP/3 的使用

乳蛋饼框架

为了支持HTTP/3 的推广,Cloudflare 使用Rust 开发并开源了一个HTTP/3 和QUI 应用框架,并且还为该应用使用了一个非常好吃的名字quiche(乳蛋饼)和logo,想必是为了尽快吸引人尽可能品尝用HTTP/3 制作的美味食物。

quiche 的源代码托管在github (github:/cloudflare/quiche) 上。克隆源代码后,可以通过cargo进行编译(注意需要rust 1.38及更高版本,BoringSSL及其windows版本NASM):

货物构建示例

Quiche还提供了基于docker的实验环境,包括http3-client、http3-server、客户端和服务器。使用方法如下:

码头编译:

docker build -t cloudflare-quiche 。

发出HTTP/3 请求

docker run -it cloudflare-quiche http3-客户端URL

网站激活

目前,Cloudflare 的选择性开放客户可以通过简单的手动设置,通过手动打开Cloudflare 仪表板上“网络”选项卡中的开关来启用HTTP/3 功能:

客户使用

目前,知名浏览器Google Chrome和Firefox已经实验性地提供了对HTTP/3的支持。 Chrome 已在Canary 中使用,Firefox 将在Nightly 中得到正式支持。

Chrome浏览器:首先您需要下载并安装最新的Canary版本。然后,通过设置以下命令行参数来启动Chrome Canary:

'--enable-quic' 和'--quic-version=h3-23'

然后将支持HTTP/3,并且可以通过Chrome 开发者工具中的“网络”选项卡检查所使用的协议版本:

请注意,协议类型为“http2+quic/99”,即Http3。

使用卷曲

最新版本的curl 7.66 还添加了对HTTP/3 的实验性支持。我们可以下载编译试用一下,这个在之前的冲冲文章中已经介绍过。

要使用HTTP/3,您需要使用新添加的“--http3”标志发出请求:

卷曲-I URL --http3

用户评论

々爱被冰凝固ゝ

这个主题听起来很专业,我猜想讲的是网络协议的演变?

    有20位网友表示赞同!

入骨相思

想了解 HTTP 3 的区别和优势,应该蛮有意思的!

    有8位网友表示赞同!

墨城烟柳

是不是有介绍一些新技术的使用案例呢?希望能学到点干货!

    有18位网友表示赞同!

青瓷清茶倾城歌

尝鲜使用?看来是讲实际操作教程吧,期待体验一下新协议!

    有11位网友表示赞同!

娇眉恨

我对网络通讯技术的研发一直很感兴趣,这个主题应该能让我学习很多东西。

    有14位网友表示赞同!

杰克

HTTP 以前迭代的都有什么特点?希望能通过这篇了解历史变迁。

    有5位网友表示赞同!

陌離

好奇 HTTP 3 能带来哪些改变,对网站和用户的体验会有多大的提升?

    有7位网友表示赞同!

﹎℡默默的爱

如果可以的话,很想看到一些用 HTTP 3 开发的应用案例!

    有14位网友表示赞同!

拥抱

希望讲到 HTTPS 的相关情况,毕竟安全也是很重要的。

    有13位网友表示赞同!

青袂婉约

这个主题内容会不会有点过于专业,对普通人来说理解起来会比较困难?

    有15位网友表示赞同!

强辩

有没有其他技术或者协议配合使用才能发挥 HTTP 3 的最大效用?我很想知道。

    有10位网友表示赞同!

凉笙墨染

如果可以的话,希望能有比较直观的图表或视频来讲解 HTTP 3 的原理!

    有20位网友表示赞同!

怅惘

学习新知识总是很不错的体验,期待看到这个关于 HTTP 3 的内容!

    有16位网友表示赞同!

闲肆

不知道 HTTP 3 是否支持更多的媒体类型?这对于开发人员来说很重要。

    有7位网友表示赞同!

琴断朱弦

希望这个发展历程能让我了解 HTTP 未来的趋势和方向!

    有10位网友表示赞同!

站上冰箱当高冷

尝鲜使用需要一定的技术基础吧?有没有提供一些入门教程呢?

    有10位网友表示赞同!

浅巷°

如果 HTTP 3 在未来得到广泛应用,它会对互联网带来哪些重大改变?

    有16位网友表示赞同!

无寒

这篇文章会不会专门针对开发者写的问题呢?

    有12位网友表示赞同!

箜明

期待这个主题能给我带来新的启发和思考!

    有11位网友表示赞同!

热点资讯