什么是 HTTP/2

大约 5 分钟networking网络httpcomputer-networkinghttp/2

什么是 HTTP/2

HTTP/2 是超文本传输协议(HTTP)的最新进化。HTTP是用于在万维网上请求和接收页面和数据的网络协议。这种新技术最终将替代二十多年前标准化的HTTP/1.1。

HTTP/2 如何与 HTTP/1.1 不同?

或许更容易理解 HTTP/2 的原名:HTTP/2.0。它起源于 Google 在 2009 年设计的 SPDY(发音为 speedy)协议。

HTTP/1.1 存在一些问题。它是在网页很少超过100Kb、没有 CSS 可用的时候创建的,而 JavaScript 被引入后也很少用于基本表单验证或简单效果之外的其他用途。高带宽、Ajax 强力驱动的单页应用程序和客户端框架在很多年之后才出现。没有人能预见页面会发出多于几个请求。

HTTP/2 的主要目标是减少延迟。它使用了一些技术来提高效率...

1. HTTP/2 是二进制数据

HTTP/1.1 使用文本数据,这在网络上通常不那么高效。

2. HTTP/2 头部被压缩

请求发送的信息描述了数据、它的来源、类型、长度、可以缓存多长时间等等。与 HTTP/1.1 不同,这些信息在 HTTP/2 中被压缩了。

3. HTTP/2 使用流水线技术

在 HTTP/1.1 中,服务器必须按照请求接收的顺序发送响应。HTTP/2 是异步的,因此可以更快地处理较小或较快的响应。

4. HTTP/2 是多路复用的

在 HTTP/1.1 中,一次 TCP 连接只能处理一个请求。浏览器通常会打开 4 到 8 个连接,但是大型或慢速资源可能会导致其他文件下载被延迟。HTTP/2 允许在同一(单个)连接上同时处理多个请求和响应消息。

5. HTTP/2 实现了服务器推送

服务器可以在请求前发送资产。例如,您可能在网页底部引用了一个脚本。在 HTTP/1.1 中,浏览器将下载 HTML,解析它,然后在遇到 <script> 标签时加载 JavaScript 文件。HTTP/2 服务器可以在浏览器知道它需要之前将 JavaScript 文件推送到浏览器中。

HTTP/2 是否明显更好?

结果因系统而异,但在安全连接上,HTTP/1.1 vs HTTP/2 with HTTPS test toolopen in new window 通常报告 HTTP/2 更快,速度提高了10倍。

HTTP/2 是否可以立即使用?

可以。但是,只有当 Web 服务器和浏览器都支持该协议时,才会启用 HTTP/2。当任一端失败时,连接通常会回退到 HTTP/1.1。到 2016 年底,近 11% 的前十万个网站支持 HTTP/2。Firefox、Safari、Edge、Chrome 和其他基于 Blink 的浏览器的所有最新版本都支持该协议。

您可以通过将您的网站 URL 输入到 由 keycdn.com 提供的 HTTP/2 Test 工具open in new window 中来测试您的主机是否已启用 HTTP/2。

如果您使用托管或共享托管,可能需要启用 HTTP/2。一些托管商可能会将其作为您可以打开或关闭的选项,如果不确定,请直接联系他们。

理想情况下,最好使用默认启用 HTTP/2 的 Web 主机,例如SiteGroundopen in new window。他们在所有服务器上都支持 HTTP/2,无需进一步操作。此外,他们有免费的 Let's Encrypt SSL 证书,在使用 HTTP/2 时这是必须的,因为大多数浏览器仅支持加密的 HTTP/2。

如果您正在运行自己的专用或虚拟服务器,则需要为您正在使用的 Web 服务器启用 HTTP/2。大多数支持直接协议或可安装模块。其中包括 Apache、nginx、LiteSpeed、Microsoft IIS 和 Node.js/Express,但请注意,功能可能会有所不同。例如,nginx 在撰写本文时不支持 HTTP/2 服务器推送。有关详细信息,请参阅您的文档。

我需要更新我的网站吗?

不需要-HTTP/2 与 HTTP/1.1 兼容。但是,在更高效的 HTTP/2 世界中,您今天使用的一些良好开发实践可能会变成反模式。

您可能正在使用构建系统或手动过程来:

  • 将许多图像合并成单个图像精灵
  • 在 HTML 页面或 CSS 文件中内联图像
  • 将 CSS 和 JavaScript 连接并缩小为单个文件。

减少请求数量对 HTTP/1.1 连接有好处,但是在 HTTP/2 连接中,许多请求成本要低得多。最好交付多个文件,因为如果一个文件更改,您只需要发送更新即可。

您还可能会将资产移动到不同的域或 CDN,以允许更多的 HTTP/1.1 连接。对于 HTTP/2,这是不必要的,因为您可以在单个连接上发出任意数量的请求。可能会因为需要打开额外的 DNS 查找和 TCP 连接而影响性能。

话虽如此,我建议采用实用主义方法。除非您合并了经常更改的大型源文件,否则连接通常不会成为问题。保留您的构建流程,除非您可以证明大部分用户都可以使用 HTTP/2,且多个文件或单个域提供了显着的性能提升。

上次编辑于:
贡献者: Shen Yuan,mickmetalholic