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

标签 http http2 http-1.1

我能理解为什么多路复用服务器推送 有助于加快网页加载速度并减少服务器端的工作量。但我还了解到,二进制协议(protocol) header 压缩请求优先级也有助于http/2<的性能提升 通过 http/1。这三个功能实际上如何促进改进?

最佳答案

二进制协议(protocol)

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

header 压缩

这可能会产生巨大的潜在影响。大多数请求(和响应)重复大量数据。因此,通过压缩 header (通过将重复的 header 替换为跨请求的引用而不是像 HTTP 正文压缩那样在请求内进行压缩来工作)can significantly reduce the size of request (但对于 header 通常不是总响应的重要部分的响应而言,情况就不太一样了)。

请求的优先级

这是 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 (网站所有者和网络开发人员目前几乎没有办法影响它)。事实上,糟糕的优先级决策实际上会使 HTTP/2 比 HTTP/1.1 慢,因为 6 个连接的限制被取消,并且数百个资源可以并行下载,所有资源都在争夺相同的带宽。我怀疑在实现方面会有更多的研究和变化,但规范不需要太多变化,因为它已经允许非常复杂的优先级排序,正如我提到的那样。

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

关于http - 除了多路复用和服务器推送之外,是什么让 http/2 比 http/1 更快?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53618419/

相关文章:

java - HTTP/1.1 完全禁用客户端缓存

ajax - 如何知道 HTTP 请求来自 Ajax?

带有 HTTP/2 APNS API 的 VOIP 应用程序的 iOS Pushkit 框架

swift - 使用 SwiftNIO 和 SwiftNIOHTTP2 作为 HTTP2 客户端

go - 是否需要通过 gprc 流客户端重新创建新流?

php - 如何在 Laravel 中使用分块传输编码?

python - 将 HTTP/1.1 与 SimpleHTTPRequestHandler 结合使用

javascript - 使用 Titanium 的 RESTful 服务

javascript - 在 Node.js 中,如何将字符串转换为 json?

php - 确保 http 出现在网址中