HTTP/2 允许开发人员自定义优先级或 Web 资产的加载顺序。HTTP/2 与HTTP/1 相比,还提供了许多其他性能改进。
阅读本文后,您将能够:
复制文章链接
HTTP 代表超文本传输协议,是几乎所有 Web 应用的基础。更具体地说,HTTP 是计算机和服务器用来请求和发送信息的方法。例如,当某人在笔记本电脑上导航至 cloudflare.com 时,其 Web 浏览器会向 Cloudflare 服务器发送 HTTP 请求,以获取页面上显示的内容。然后,Cloudflare 服务器使用浏览器显示给用户的文本、图像和格式发送 HTTP 响应。
HTTP 的第一个可用版本诞生于 1997 年。由于它经历了多个开发阶段,因此 HTTP 的第一个版本称为 HTTP/1.1。此版本仍在网络上使用。
2015年,一个名为 HTTP/2 的新版本被创建。HTTP/2 解决了 HTTP/1.1 的创造者们没有预料到的几个问题。特别是,HTTP/2 比 HTTP/1.1 更快、更有效。HTTP/2 更快的方式之一是它在加载过程中如何优先处理内容。
在 Web 性能的背景中,优先顺序是指加载内容的顺序。假设用户访问新闻网站并导航到一篇文章。应该先加载文章顶部的照片?应该先加载文章的文本?应该先加载横幅广告?
优先顺序会影响网页的加载时间。例如,某些资源(例如大型 JavaScript 文件)如果必须先加载,则可能会妨碍页面其余部分的加载。如果最后加载这些妨碍渲染的资源,则可以一次加载页面的更多部分。
另外,这些页面资源的加载顺序会影响用户对页面加载时间的感知。如果仅首先加载幕后内容(如 CSS 文件)或用户无法立即看到的内容(如页面底部的横幅广告),则用户会认为该页面根本没有加载。如果首先加载对用户最重要的内容(例如页面顶部的图像),则用户会觉得页面加载速度更快。
在 HTTP/2 中,开发人员可以动手进行细致的优先顺序控制。这样,他们可以将页面加载的感知速度和实际速度最大化到 HTTP/1.1 无法企及的水平。
HTTP/2 提供了一个称为加权优先顺序的功能。开发人员可以决定每次首先加载哪些页面资源。在 HTTP/2 中,当客户端请求网页时,服务器会一次性将多个数据流发送到客户端,而不是逐个依次发送。这种数据传输方法称为多路复用。开发人员可以为这些数据流分别分配一个不同的加权值,该值告诉客户端首先要呈现哪个数据流。
想象一下,Alice 想要阅读她的朋友 Bob 写的小说,但是 Alice 和 Bob 都只通过普通邮件沟通。Alice 给 Bob 写信,要求 Bob 将小说寄给她。Bob 决定以 HTTP/1.1 方式发送小说:一次寄出一个章节,并且仅在收到 Alice 确认她已收到上一章的回信后才寄出下一章。使用这种内容交付方法,Alice 需要数周时间才能读完 Bob 的小说。
现在,假设 Bob 决定以 HTTP/2 方式将小说发送给 Alice:这时,他分开发送小说的各个章节(以保持在邮局的大小限制内),但一次性发送了所有章节。他还为每一章编号:第 1 章、第 2 章,等等。现在,Alice 同时收到整部小说,并可以按自己的时间以正确的顺序进行编排。如果缺少某一章,她可以发送快速答复以索取这一特定章节;如果不缺,则过程完毕,Alice 可以在短短几天内读完小说。
在 HTTP/2 中,数据是一次性发送的,就像 Bob 一次性向 Alice 发送多个章节一样。而且与 Bob 一样,开发人员也可以在 HTTP/2 中为各章编号。他们可以决定是否首先加载网页文本、CSS 文件、JavaScript 或对用户体验最重要的内容。
多路复用:HTTP/1.1 依次加载各个资源,因此,如果无法加载某一资源,它将阻碍其后的所有其他资源。相比之下,HTTP/2 可以使用单个 TCP 连接来一次发送多个数据流,使得任何资源都不会会阻碍其他资源。为此,HTTP/2 将数据拆分为二进制代码消息并为这些消息编号,以便客户端知道每个二进制消息所属的流。
服务器推送:通常,服务器仅在客户端要求时才向客户端设备提供内容。但是,这种方法并不总是适用于现代网页,因为现代网页通常涉及客户端必须请求的数十个独立资源。HTTP/2 通过允许服务器在客户端请求之前向客户端“推送”内容来解决此问题。服务器还发送一条消息,让客户知道预期推送的内容是什么,就像 Bob 在发送整本书之前向 Alice 发送小说目录一样。
标头压缩:小文件的加载速度比大文件快。为了提高 Web 性能,HTTP/1.1 和 HTTP/2 都会压缩 HTTP 消息以使其更小。但是,HTTP/2 使用一种称为 HPACK 的更高级压缩方法,可以消除 HTTP 标头数据包中的多余信息。这样可以从每个 HTTP 数据包中消除几个字节。考虑到即使只加载一个网页时所涉及的 HTTP 数据包的数量,这些字节会迅速累加,从而加快了加载速度。
HTTP/3 是 HTTP 协议的下一个建议版本。HTTP/3 尚未在 Web 上得到广泛采用,但是它的使用正在增长。HTTP/3 和旧版协议之间的主要区别在于,HTTP/3 运行于 QUIC 而不是 TCP 之上。QUIC 是一种更快、更安全的传输层协议,旨在满足现代互联网的需求。
Cloudflare 支持 HTTP/2 的所有功能。Cloudflare 上的 Web 资产可以免费开启 HTTP/2,点击一下便可。除了 HTTP/2 外,Cloudflare 还支持 HTTP/3。如果您受到最近 HTTP/2 快速重置攻击的影响,请联系我们立即获得保护。