HTTP/2 vs. HTTP/3 前世今生!

家好,很高兴又见面了,我是"高级前端‬进阶‬",由我带着大家一起关注前端前沿、深入前端底层技术,大家一起进步,也欢迎大家关注、点赞、收藏、转发!

高级前端‬进阶

前言

HTTP(超文本传输​协议)是万维网所基于的应用层传输协议。最初在 80 年代后期构思为基于单行文本的协议,最初记录为HTTP/0.9,其第一个全功能迭代(v. 1.0)于 1996 年在RFC 1945中记录。

随着互联网的使用和期望的增长,改进 HTTP 本身的需求也在增长。1.1 版在 1997 年的RFC 2068和 1999年的RFC 2616中记录,随后在 2014 年的 RFC (7230-7235) 中记录了 — 整整十年半之后!— 记录消息语法/路由;语义/内容;条件和范围请求;缓存;和认证。

当前的 HTTP 版本是 HTTP/2。它基于 Google 的 SPDY 项目,是该协议的第一次大修,于 2015 年在RFC 7540中标准化,同年RFC 7541引入了 Header Compression (HPACK)。

在 HTTP/2 推出仅仅四年之后,一个基于 Google 实验性 QUIC 协议的新标准开始出现:HTTP/3。其目的:提高用户与网站和 API 交互的速度和安全性。

2020 年 10 月,在进入 RFC 阶段之前,描述 HTTP/3(和 QUIC)的文档进入了 Internet-Draft 阶段的 IETF Last Call 阶段。然而,一旦 HTTP/3 最终确定为标准,HTTP/2 是否还有一席之地?本文描述并比较了协议的两个版本,并就每个版本在哪里找到合适的应用程序提供了一些建议。

HTTP协议栈转换与比较

HTTP协议栈比较从HTTP/1.1到HTTP/3的变化

HTTP/2 的背景

创建 HTTP/2 是为了解决 HTTP/1.1 的非结构化演进过程中出现的许多问题,其中大部分与性能相关。

许多问题是由于HTTP/1.1 的固有限制而出现的,归结为响应时间随着流量的增加而增加:

开发人员试图通过域分片、流水线和使用“无 cookie”域等变通方法来解决这些问题和限制,但这些通常会导致兼容性和互操作性问题。显然,老化的 HTTP/1.1 标准需要更新。

2009 年,Google 宣布了SPDY,一个实验性协议,作为解决 HTTP/1.x 问题的结构化方法。HTTP 工作组注意到 Google 在使用 SPDY 实现更高的性能目标方面取得的成功。2012 年 11 月,发起了对 HTTP/2 的提案征集,并以 SPDY 规范为起点。

在接下来的几年里,HTTP/2 和 SPDY 与 SPDY 作为实验分支共同发展。HTTP/2 作为国际标准于 2015 年 5 月作为RFC 7540发布。

对 HTTP/3 的需求

多年来,HTTP 不断发展,从 0.9 版 5 年,1.0 版一年,到 1.1 版大约 15 年,最终在 2014 年到达第 2 版。在每次迭代中,都添加了新功能解决多种需求的协议,例如应用层要求、安全考虑、会话处理和媒体类型。如需深入了解 HTTP/2 及其从 HTTP/1.0 的演变,请阅读我们的HTTP 演变 - HTTP/2 深入探讨中的HTTP 不起眼的起源部分

在这个演变过程中,HTTP 的底层传输机制大体上保持不变。然而,随着公众对移动设备技术的大量采用,互联网流量激增,新开箱的 HTTP/2 一直在努力提供流畅、透明的 Web 浏览体验。它承受着现代互联网流量的数量和速度,尤其是在实时应用程序及其用户不断增长的需求下。这导致在使用此版本的协议时出现许多警告,从而暴露出明显的改进机会。

多路复用、负载峰值和请求优先级

曾几何时,实时白板/图表公司Lucidchart 在其负载均衡器(LB) 上启用 HTTP/2 后遇到了一个意想不到的问题。

长话短说:他们注意到这些 LB 后面的服务器上的 CPU 负载更高,响应时间更慢。HTTP/2 吹捧提高了带宽效率、减少了延迟和请求优先级,因此没有加起来。但是什么?乍一看,流量看起来很正常,并且没有代码更改可以归咎于奇怪的行为。但是,虽然请求的平均数量是正常的,但流本身包含许多同时请求的高峰值。以前的供应模型未能考虑到这种情况,结果是对请求的响应超时或延迟。

实际原因是,只要用户的浏览器使用 HTTP/1.1,由于 HTTP/1.1 的串行请求处理性质,这有效地限制了并发请求的数量,使流量保持有序并在可预测的范围内。开启 HTTP/2 可能会出现不可预知的峰值,因为它具有多路复用功能,即使用单个连接发送并发请求。批处理请求对客户端来说非常有用,但是同时请求的开始时间和数量让 Lucidchart 的服务器非常头疼。

最后,能够在 LucidChart 的服务器上使用 HTTP/2 需要实施非平凡的解决方案,例如限制平衡器和重新构建应用程序。HTTP/2 软件的成熟度和对 HTTP 优先级的服务器支持的缺乏是额外的问题。一些应用程序仅通过安全套接字 (HTTPS) 支持 HTTP/2——对于安全的内部网络来说,这是一种不必要且繁重的架构复杂性。

服务器推送变得复杂

如果不小心使用,HTTP/2 推送功能弊大于利。例如,回访者可能有文件的缓存副本,在这种情况下,服务器不应该推送资源。使推送缓存感知可以解决这个问题,但这有它自己的警告,并且很快就会变得复杂。

那个讨厌的线阻塞头

HTTP/2 解决了 HTTP 级别的线头阻塞问题,它允许资源在同一连接上被多路复用、同时分解成块。但是,由于数据包丢失并且必须重新以正确的顺序重新发送, TCP 级别 的线路阻塞仍然可能发生。

HTTP/2 与 HTTP/3 有何不同?

HTTP/3 的目标是通过解决 HTTP/2 的传输相关问题,在所有形式的设备上提供快速、可靠和安全的 Web 连接。为此,它使用了一种名为 QUIC 的不同传输层网络协议,该协议最初由 Google 开发。

HTTP/2 和 HTTP/3 的根本区别在于 HTTP/3 在 QUIC 上运行,而 QUIC 在无连接 UDP 上运行,而不是面向连接的 TCP(所有以前版本的 HTTP 都使用)。

QUIC 中使用的面向连接的 TCP 与无连接 UDP 的比较

在语法和语义结构方面,HTTP/3 与 HTTP/2 类似。HTTP/3 参与相同类型的请求/响应消息交换,其数据格式包含方法、标头、状态代码和正文。但是,HTTP/3 引入的一个显着差异在于 UDP 之上协议层的堆叠顺序,如下图所示。

HTTP/3 中的堆叠顺序显示 QUIC 包含安全层和部分传输层

下表比较了 HTTP/2 和 HTTP/3 的特性和功能:

HTTP/2 和 HTTP/3 Part 1/2 特性和能力对比表

HTTP/2 和 HTTP/3 Part 2/2 特性和能力对比表

HTTP/2 概述

HTTP/2 是 HTTP/1.1 的扩展,而不是替代它。应用程序语义保持不变,具有相同的 HTTP 方法、状态代码、URI 和标头字段。

每个 HTTP/2 连接都以 HTTP/1.1 开始,如果客户端支持 HTTP/2,则连接会升级。HTTP/2 在客户端和服务器之间使用单个 TCP 连接,该连接在交互期间保持打开状态。

客户端和服务器之间通过 TCP(HTTP/2 底层传输协议)的请求和响应。

HTTP/2 引入了许多旨在提高性能的特性:

HTTP/2:优点和缺点

优点

缺点

HTTP/2 适合哪些用例?

HTTP/2 支持 HTTP/1.x 的所有用例,无论它是在浏览器中实现的什么地方,包括桌面 Web 浏览器、移动 Web 浏览器、Web API 和 Web 服务器。但是,它也可以用于代理服务器、反向代理服务器、防火墙和内容分发网络,以及以下情况:

HTTP/3 概述

HTTP/3 支持快速、可靠和安全的连接。它默认使用 Google 的 QUIC 协议加密 Internet 传输。

HTTP/3:优点和缺点

优点

缺点

HTTP/3 适合哪些用例?

HTTP/3 入门:HTTP/3 的开源解决方案

IETF 的 HTTP 工作组仍在致力于发布 HTTP/3。所以它还没有被 NGINX 和 Apache 等 Web 服务器正式支持。但是,有几个软件库可用于试验此新协议,并且还提供非官方补丁。

以下是支持 HTTP/3 和 QUIC 传输的软件库列表。请注意,这些实现基于互联网草案标准版本之一,该版本可能会被更高版本所取代,最终标准在 RFC 中发布。

如果您想玩转 QUIC,请访问QUIC 协议的开源实现页面,由 QUIC 工作组维护。

注意:浏览器默认不启用 HTTP/3,必须自己启用。

实现 HTTP/3 的难点

过渡到 HTTP/3 不仅涉及应用层的变化,还涉及底层传输层的变化。传输层协议的变化可能证明是有问题的。安全服务通常是基于应用程序流量(大部分是 HTTP)将通过 TCP(可靠的、面向连接的协议)传输的前提而构建的。因此,采用 HTTP/3 比采用 HTTP/2 更具挑战性,后者仅需要更改应用程序层。

传输层经过网络中的中间盒的严格审查。这些中间盒,例如防火墙、代理、NAT 设备,执行大量深度数据包检查以满足其功能需求。用于主要(或仅)TCP 流量的防火墙默认数据包过滤策略有时会降低或阻止长时间的 UDP 会话。

此外,将传输从 TCP 更改为 UDP 可能会对安全基础设施解析和分析应用程序流量的能力产生重大影响,因为 UDP 是基于数据报(数据包)的协议,并且根据定义可能不可靠。因此,新传输机制的引入给 IT 基础架构和运营团队带来了一些复杂性。

随着 IETF 正在进行的标准化工作,这些问题最终将得到解决。鉴于谷歌早期对 QUIC 的实验所显示的积极结果,对 HTTP/3 的支持是压倒性的,这最终将迫使供应商进行标准化。

参考资料

中文译文链接:https://blog.p2hp.com/archives/9773

英文作者:Martin Fietkiewicz

英文链接:https://ably.com/topic/http-2-vs-http-3

展开阅读全文

页面更新:2024-02-17

标签:均衡器   优先级   负载   应用程序   前世   实时   客户端   流量   今生   协议   版本   服务器

1 2 3 4 5

上滑加载更多 ↓
推荐阅读:
友情链接:
更多:

本站资料均由网友自行发布提供,仅用于学习交流。如有版权问题,请与我联系,QQ:4156828  

© CopyRight 2020-2024 All Rights Reserved. Powered By 71396.com 闽ICP备11008920号-4
闽公网安备35020302034903号

Top