除了多路复用和服务器推送之外,是啥让 http/2 比 http/1 更快?

Posted

技术标签:

【中文标题】除了多路复用和服务器推送之外,是啥让 http/2 比 http/1 更快?【英文标题】:What make http/2 faster than http/1 beyond multiplexing and server push?除了多路复用和服务器推送之外,是什么让 http/2 比 http/1 更快? 【发布时间】:2019-05-06 04:52:25 【问题描述】:

我可以理解为什么multiplexingserver push 有助于加快网页加载并减少服务器端的工作量。但我也了解到binary protocolheader compressionprioritization of requests 也有助于提高http/2 的性能而不是http/1。这三个功能实际上对改进有何贡献?

【问题讨论】:

***.com/questions/42746364/… 可能重复? 【参考方案1】:

二进制协议

除了允许multiplexing 之外,这实际上并没有太大帮助(这对性能有很大帮助)。是的,程序解析二进制数据包比解析文本更容易,但我不认为这会带来巨大的性能吹嘘。正如我所说,使用二进制的主要原因是为了其他好处(多路复用和标头压缩)以及使解析更容易,而不是性能。

标题压缩

这可能会产生巨大的潜在影响。大多数请求(和响应)都会重复大量数据。因此,通过压缩标头(通过使用跨请求的引用替换重复的标头而不是通过像 HTTP 正文压缩那样在请求中进行压缩来工作)can significantly reduce the size of request (但对于标头通常不是总响应的重要部分的响应而言,则更少) .

请求的优先级

这是 HTTP/2 中更有趣的部分之一,它具有巨大的潜力,但尚未进行优化。可以这样想:假设您有 3 个关键的 CSS 文件和 3 个巨大的图像要下载。在 HTTP/1.1 下,将打开 6 个连接,所有 6 个项目将并行下载。这可能看起来不错,但这意味着不太重要的图像文件正在用尽带宽,这些带宽应该更好地用于关键的 CSS 文件。使用 HTTP/2,您可以说“首先以高优先级下载关键的 CSS,只有在完成后,才查看这 3 个图像文件”。不幸的是,尽管 HTTP/2 有一个优先级模型,可以根据需要进行复杂的优先级排序(有些人认为太复杂了!)browsers and servers don’t currently use it well(而网站所有者和 Web 开发人员目前几乎没有办法影响它)。事实上,糟糕的优先级决策实际上会使 HTTP/2 比 HTTP/1.1 慢,因为 6 个连接的限制被取消,数百个资源都可以并行下载,所有资源都在争夺相同的带宽。我怀疑在实现方面会有更多的研究和更改,但规范中不需要太多更改,因为它已经允许非常复杂的优先级,正如我提到的那样。

几十年来,我们一直在针对 HTTP/1.1 进行优化,并从中榨取了很多。我怀疑我们还有很多东西要摆脱 HTTP/2(以及 HTTP/3 的出现)。如果有兴趣了解有关此主题的更多信息,请查看我的upcoming book。

【讨论】:

以上是关于除了多路复用和服务器推送之外,是啥让 http/2 比 http/1 更快?的主要内容,如果未能解决你的问题,请参考以下文章

使用 Berkeley 套接字进行多路复用

HTTP/2之服务器推送(Server Push)最佳实践

Okhttp3、http2多路复用POST请求高峰负载时响应时间长

http2续

如何在 OkHttp 上进行多路复用?

计算机科学中的术语多路复用是啥意思?