HTTP / 2:HTTP / 1.1,好处和使用方法之间的区别

Factory Github上也提供了有关如何为ubuntu和服务器推送使用设置HTTP / 2的详细信息。

什么是HTTP?

如果您不熟悉此主题,请继续阅读本节,但是如果您对此很熟悉,请跳过本段,直接进入下一段。

对于本主题的新手来说,超文本传输协议(HTTP)是一种应用程序协议,目前是万维网数据通信的基础。

HTTP基于客户端/服务器模型。 客户端/服务器模型可以解释为通过请求和响应进行通信的两台计算机,客户端(服务的接收方)和服务器(服务的提供方)。

一个简单而抽象的例子就是饭店客人和服务员。 来宾(客户)向服务员(服务器)请求(发送请求)一顿饭,然后服务员从餐厅厨师那里获取饭菜(您的应用程序逻辑)并将饭菜带给来宾。

这是一个非常简单的示例,但它也是可以帮助您理解概念的示例。

还有更多有趣的HTTP概念和实用程序需要讨论,但是本文的重点是(不够的)著名的HTTP / 2。

什么是HTTP / 2?

2015年,互联网工程任务组(IETF)发布了HTTP / 2,这是最有用的互联网协议HTTP的第二个主要版本。 它源自较早的实验SPDY协议。

开发HTTP / 2的主要目标是:

· 协议协商机制-协议选择,例如 HTTP / 1.1,HTTP / 2或其他。

· 与HTTP / 1.1的高级兼容性-方法,状态代码,URI和标头字段。

· 页面加载速度的改善幅度:

· 压缩请求头

· 二进制协议

· HTTP / 2服务器推送

· 通过单个TCP连接请求多路复用

· 请求流水线

· HOL阻止(标题行)—程序包阻止

请求多路复用

HTTP / 2可以通过单个TCP连接并行发送多个数据请求。 这是HTTP / 2协议的最高级功能,因为它允许您从一台服务器异步下载Web文件。 大多数现代浏览器将TCP连接限制为一台服务器。

HTTP / 2:HTTP / 1.1,好处和使用方法之间的区别

这样可以减少额外的往返时间(RTT),使您的网站加载速度更快,而无需进行任何优化,并且不需要域分片。

标头压缩

HTTP / 2压缩大量冗余头帧。 它使用HPACK规范作为标头压缩的简单安全方法。 客户端和服务器都维护在先前的客户端-服务器请求中使用的标头列表。

HPACK在将每个标头传输到服务器之前先压缩每个标头的单独值,然后服务器在先前传输的标头值列表中查找编码信息,以重建完整的标头信息。

HTTP / 2:HTTP / 1.1,好处和使用方法之间的区别

二进制协议

最新的HTTP版本在功能和属性(例如从文本协议转换为二进制协议)方面已经有了重大发展。 HTTP1.x用于处理文本命令以完成请求-响应周期。 HTTP / 2将使用二进制命令(分别为1s和0s)执行相同的任务。 此属性减轻了框架的复杂性,并简化了由于包含文本和可选空格的命令而导致混淆的命令的实现。

使用HTTP / 2实现的浏览器会将相同的文本命令转换为二进制命令,然后再通过网络进行传输。

HTTP / 2:HTTP / 1.1,好处和使用方法之间的区别

好处:

· 解析数据的开销低-在HTTP / 2与HTTP1中,这是一个至关重要的价值主张。

· 不太容易出错。

· 网络足迹更小。

· 有效的网络资源利用。

· 消除了与HTTP1.x的文本性质相关的安全问题,例如响应拆分攻击。

· 启用HTTP / 2的其他功能,包括压缩,多路复用,优先级划分,流控制和TLS的有效处理。

· 命令的紧凑表示,易于处理和实现。

· 在客户端和服务器之间的数据处理方面高效且强大。

· 减少网络延迟并提高吞吐量。

HTTP / 2服务器推送

此功能使服务器可以向客户端发送其他未缓存的信息,但这些信息会在以后的请求中得到预期。 例如,如果客户端请求资源X,并且可以理解资源Y被请求的文件引用,则服务器可以选择将Y与X一起推送,而不是等待适当的客户端请求。

HTTP / 2:HTTP / 1.1,好处和使用方法之间的区别

好处:

· 客户端将推送的资源保存在缓存中。

· 客户端可以跨不同页面重用这些缓存的资源。

· 服务器可以在同一TCP连接中将推送的资源与原始请求的信息进行多路复用。

· 服务器可以确定推送资源的优先级-HTTP / 2与HTTP1的关键性能差异。

· 客户端可以拒绝推送资源以维护有效的缓存资源存储库,或者完全禁用服务器推送。

· 客户端还可以限制同时多路复用的推送流的数量。

如果您还记得有关餐厅和服务员客人的故事,那将是一个例子

对于HTTP / 1.1和HTTP / 2协议,略有不同。 想象一下,服务员是TCP连接,您想点餐和一瓶水。 对于HTTP / 1.1,这意味着您要请一位服务员吃饭,而请另一位服务员喝水,因此您将分配两个TCP连接。 对于HTTP / 2,这意味着您只要求一个服务员为两个服务员,但他会分别给他们带来服务。 您只分配一个TCP连接,这将已经导致服务器负载降低,并且服务器将为下一个客户端(来宾)有一个额外的空闲连接(服务员)。

HTTP / 1.1和HTTP / 2之间的真正区别在于服务器推送示例。

想象一下,客人(客户)要求(发送请求)服务员(服务器)进餐,然后服务员从餐厅厨师那里拿到饭菜(您的应用程序逻辑),但是服务员还认为您需要一瓶水,所以他也带来, 这样的最终结果将只有一个TCP连接,只有一个请求将大大降低服务器负载。

作为这些机制的简单展示,我做了一个简单的页面示例。

HTTP / 2:HTTP / 1.1,好处和使用方法之间的区别

我们这里有一个简单的页面,其中包含100张支票图像,我将用它们来演示HTTP / 1.1,HTTP / 2和HTTP / 2服务器推送。

上图中需要注意的重要一点是请求数,加载时间,协议列,启动器列和瀑布图本身(很遗憾,我们可以看到如何通过多个批次发出请求,但是很难从中看到其他数据 TTFB和内容下载时间;例如资源调度和连接开始时间)。

对于HTTP / 1.1:

HTTP / 2:HTTP / 1.1,好处和使用方法之间的区别

请求数:102

加载时间:12.97s

通讯协定:" http / 1.1"

发起者列:第一个发起者是用户/客户端,其余请求由对客户端的响应发起,客户端意识到他需要其他资源(在本例中为图像)。

瀑布图:我们可以看到如何通过多个批次(TCP连接)发出请求。

对于HTTP / 2:

HTTP / 2:HTTP / 1.1,好处和使用方法之间的区别

请求数:102

载入时间:11.19s

通讯协定:「h2」(HTTP / 2)

发起者列:第一个发起者是用户/客户端,其余请求由对客户端的响应发起,客户端意识到他需要其他资源(在本例中为图像)。

瀑布图:我们可以看到如何通过2个批次(TCP连接)发出请求。

注意加载时间。 在这种情况下,它比HTTP / 1.1示例的加载时间要短一些,但不必总是如此。 此示例显示了客户端请求的多路复用。

HTTP / 2服务器推送:

HTTP / 2:HTTP / 1.1,好处和使用方法之间的区别

请求数:102

加载时间:3.17 s

通讯协定:「h2」(HTTP / 2)

发起方列:第一个发起方是用户/客户端,其余请求通过服务器的推送来发起(实际上是一个请求/响应周期)。

瀑布图:我们可以看到如何通过1个批处理(1个TCP连接)发出请求。

浏览器兼容性

HTTP / 2:HTTP / 1.1,好处和使用方法之间的区别


大多数现代浏览器完全支持HTTP / 2协议,但Opera mini(所有版本)和UC Browser for Android除外(红色)。也有像IE11这样的具有部分支持(浅绿色)的组件。

您可以在以下链接上找到有关浏览器支持的更多详细信息:

使用HTTP / 2并加速您的网站

HTTP / 2为我们提供了许多新的机制,可以缓解HTTP / 1.1问题,并可以提高您的网页性能。 当前,它得到了Web客户端的广泛支持,因此可以轻松实现。 尽管HTTP / 2协议的实现很容易,但是您应该记住,使用它可能需要更改机制(例如,将资产提供给客户端),以充分利用该协议的潜力。

如果您有关于此主题的其他信息和经验,请随时与他人分享,如果您认为对您的同事或朋友有帮助,也可以分享此文章。

从我们的团队中获取更多信息@工厂博客

(本文翻译自Factory.hr的文章《HTTP/2: the difference between HTTP/1.1, benefits and how to use it》,参考:https://medium.com/@factoryhr/http-2-the-difference-between-http-1-1-benefits-and-how-to-use-it-38094fa0e95b)

您可能还会对下面的文章感兴趣: