HTTP/2 与 HTTP/1.1:它们如何影响 Web 性能?

HTTP/2 允许开发人员自定义优先级或 Web 资产的加载顺序。HTTP/2 与HTTP/1 相比,还提供了许多其他性能改进。

Share facebook icon linkedin icon twitter icon email icon

HTTP/2 与 HTTP/1.1

学习目标

阅读本文后,您将能够:

  • 了解什么是 HTTP,以及 HTTP 不同版本之间的区别
  • 了解 HTTP/2 中优先顺序的工作方式
  • 探索 HTTP/2 提高网络性能的方式

什么是 HTTP?为什么 HTTP/2 比 HTTP/1.1 快?

HTTP 代表超文本传输协议,是几乎所有 Web 应用的基础。更具体地说,HTTP 是计算机和服务器用来请求和发送信息的方法。例如,当某人在笔记本电脑上导航至 cloudflare.com 时,其 Web 浏览器会向 Cloudflare 服务器发送 HTTP 请求,以获取页面上显示的内容。然后,Cloudflare 服务器使用浏览器显示给用户的文本、图像和格式发送 HTTP 响应。

HTTP 的第一个可用版本诞生于 1997 年。由于它经历了多个开发阶段,因此 HTTP 的第一个版本称为 HTTP/1.1。此版本仍在网络上使用。2015 年诞生了一个新的 HTTP 版本,称为 HTTP/2

HTTP/2 解决了 HTTP/1.1 的创造者未曾预料的几个问题。特别是,HTTP/2 比 HTTP/1.1 更快,更高效。HTTP/2 速度更快的一个表现是在加载过程中如何对内容进行优先级排序。

什么是优先顺序?

Web 性能的背景中,优先顺序是指加载内容的顺序。假设用户访问新闻网站并导航到一篇文章。应该首先加载文章顶部的照片?应该首先加载文章的文本?应该首先加载横幅广告?

优先顺序会影响网页的加载时间。例如,某些资源(例如大型 JavaScript 文件)如果必须先加载,则可能会妨碍页面其余部分的加载。如果最后加载这些妨碍渲染的资源,则可以一次加载页面的更多部分。

另外,这些页面资源的加载顺序会影响用户对页面加载时间的感知。如果仅首先加载幕后内容(如 CSS 文件)或用户无法立即看到的内容(如页面底部的横幅广告),则用户会认为该页面根本没有加载。如果首先加载对用户最重要的内容(例如页面顶部的图像),则用户会觉得页面加载速度更快。

HTTP/2 中的优先顺序如何影响性能?

在 HTTP/2 中,开发人员可以动手进行细致的优先顺序控制。这样,他们可以将页面加载的感知速度和实际速度最大化到 HTTP/1.1 无法企及的水平。

HTTP/2 提供了一个称为加权优先顺序的功能。开发人员可以决定每次首先加载哪些页面资源。在 HTTP/2 中,当客户端请求网页时,服务器会一次性将多个数据流发送到客户端,而不是逐个依次发送。这种数据递送方法称为多路复用。开发人员可以为这些数据流分别分配一个不同的加权值,该值告诉客户端首先要呈现哪个数据流。

想象一下,爱丽丝想要阅读她的朋友鲍勃写的小说,但是爱丽丝和鲍勃都只通过普通邮件沟通。爱丽丝给鲍勃写信,要求鲍勃将小说寄给她。鲍勃决定以 HTTP/1.1 方式发送小说:一次寄出一个章节,并且仅在收到爱丽丝确认她已收到上一章的回信后才寄出下一章。使用这种内容交付方法,爱丽丝需要数周时间才能读完鲍勃的小说。

现在,假设鲍勃决定以 HTTP/2 方式将小说发送给爱丽丝:这时,他分开发送小说的各个章节(以保持在邮局的大小限制内),但一次性发送了所有章节。他还为每一章编号:第 1 章、第 2 章,等等。现在,爱丽丝同时收到整部小说,并可以按自己的时间以正确的顺序进行编排。如果缺少某一章,她可以发送快速答复以索取这一特定章节;如果不缺,则过程完毕,爱丽丝可以在短短几天内读完小说。

在 HTTP/2 中,数据是一次性发送的,就像鲍勃一次性向爱丽丝发送多个章节一样。而且与鲍勃一样,开发人员也可以在 HTTP/2 中为各章编号。他们可以决定是否首先加载网页文本、CSS 文件、JavaScript 或对用户体验最重要的内容。

HTTP/2 和 HTTP/1.1 之间还有哪些影响性能的区别?

多路复用:HTTP/1.1 依次加载各个资源,因此,如果无法加载某一资源,它将阻碍其后的所有其他资源。相比之下,HTTP/2 可以使用单个 TCP 连接来一次发送多个数据流,使得任何资源都不会会阻碍其他资源。为此,HTTP/2 将数据拆分为二进制代码消息并为这些消息编号,以便客户端知道每个二进制消息所属的流。

服务器推送:通常,服务器仅在客户端要求时才向客户端设备提供内容。但是,这种方法并不总是适用于现代网页,因为现代网页通常涉及客户端必须请求的数十个独立资源。HTTP/2 通过允许服务器在客户端请求之前向客户端“推送”内容来解决此问题。服务器还发送一条消息,让客户知道预期推送的内容是什么,就像鲍勃在发送整本书之前向爱丽丝发送小说目录一样。

标头压缩:小文件的加载速度比大文件快。为了提高 Web 性能,HTTP/1.1 和 HTTP/2 都会压缩 HTTP 消息以使其更小。但是,HTTP/2 使用一种称为 HPACK 的更高级压缩方法,可以消除 HTTP 标头数据包中的多余信息。这样可以从每个 HTTP 数据包中消除几个字节。考虑到即使只加载一个网页时所涉及的 HTTP 数据包的数量,这些字节会迅速累加,从而加快了加载速度。

什么是 HTTP/3?

HTTP/3 是 HTTP 协议的下一个建议版本。HTTP/3 尚未在 Web 上得到广泛采用,但是它的使用正在增长。HTTP/3 和旧版协议之间的主要区别在于,HTTP/3 运行于 QUIC 之上,而不是 TCP。QUIC 是一种更快、更安全的传输层协议,旨在满足现代 Internet 的需求。

Cloudflare 如何帮助开发人员实施 HTTP/2 以获得更快性能?

Cloudflare 支持 HTTP/2 的所有功能。Cloudflare 上的 Web 资产可以免费开启 HTTP/2,点击一下便可。除了 HTTP/2 外,Cloudflare 还支持 HTTP/3