大量图像 - HTTP/1.1 与 HTTP/2?

Posted

技术标签:

【中文标题】大量图像 - HTTP/1.1 与 HTTP/2?【英文标题】:Huge amount of images - HTTP/1.1 vs HTTP/2? 【发布时间】:2019-07-23 05:59:55 【问题描述】:

我要编写的程序需要下载大量的高清图像。该程序的想法是拒绝在一个 HTTP 请求中下载所有这些(不可能将它们全部归档到一个文件中)。出于这个原因,程序将一次从服务器请求一个图像。我发现 HTTP/2 可以提供帮助,因为它支持多路复用技术。所有 HTTP 请求都将在一个 TCP 连接上执行。我在这个网站上发现了令人鼓舞的统计数据:https://www.tunetheweb.com/blog/http-versus-https-versus-http2/。提交的 360 度图像下载测试显示 HTTP/1.1 和 HTTP/2 之间存在巨大差异。我开始使用本教程逐步配置我的 Apache 服务器 (v. 2.4.29):https://helgeklein.com/blog/2018/11/enabling-http-2-in-apache-on-ubuntu-18-04/。下载大约 300 张大小约为 1MB 的图像,这两个版本的 HTTP 协议之间的差异可以忽略不计。测试在 html 文件上运行,该文件包含带有指向存储在同一服务器上的图像的超链接的标签。

HTTP 请求大小仅 0.1MB 不同,下载时间更长。在各种浏览器(Google Chrome、Opera、Firefox)上重新运行测试,结果总是相似——协议的改变带来了微薄的利润。我也尝试过使用“HTTP Server Push”技术,但也无济于事。

在某些问题中使用 HTTP/2 协议是好的步骤吗?是否配置服务器不正确?测试环境搭建好了吗?

【问题讨论】:

it’s impossible to archive all of them into one file 为什么? @tkausl 因为我是否必须下载所有这些并不明显。有时我必须下载其中的 5 个,另一次全部下载,然后只下载一半。每次都归档听起来不是一个好计划 一个接一个地下载文件非常容易。但是如果你想只显示实际在视图中的图像,你应该使用延迟加载技术,像这样:appelsiini.net/projects/lazyload @ZorgoZ 描述的 HTML 网站只是协议的简单测试。目标请求将从移动应用程序发送,主要是快速下载大量大图像。但不是渲染它们,而是拯救它们。我拒绝根据应用程序的请求动态下载它们(需要全部下载) @Andret 好的,这让你的目标更清晰。流式传输它们呢?在流中连接服务器端并在客户端拆分。 【参考方案1】:

您链接到的那个网站的作者 (https://www.tunetheweb.com/blog/http-versus-https-versus-http2/)。

HTTP/2 允许通过multiplexing 几乎并行地进行多个下载,从而更好地利用网络。对于具有大量小带宽请求的站点,这可能会产生巨大的影响。这是因为在 HTTP/1.1 下 TCP 连接通常在很长一段时间内都是空闲的,因为小请求会在客户端和服务器之间来回传输,因此您没有充分利用可用带宽。 HTTP/2 修复了这个问题,以更好地利用带宽。

对于带宽受限的网站,HTTP/2 的影响较小,因为无论如何您都在充分利用带宽,因为在几次请求之后,带宽无论如何都会被完全使用。所以 HTTP 层并没有真正的低效率。此外,增加多个 HTTP/1.1 连接的代价是值得的,因为您将更多地使用这些连接(不像在典型的网站上,当您打开第 6 个连接时,您通常只使用它一个请求并再次关闭它)。

事实上,HTTP/2 在您的情况下可能对您不利,因为可以并行下载大约 100 个资源,获得 1/100 的带宽,因此在 HTTP/1.1 下分批下载 100 个而不是分批 6 个.这意味着可能会有很长的延迟,然后会显示 100 张图像,此时您可能更喜欢按顺序下载图像,因此慢慢滴入。出于这个原因,Chrome 按顺序排列优先级,而 Firefox 则更多地以并行方式工作。我不知道你的应用是做什么的。

无耻的插件,但我实际上已经出版了一本关于这件事的书,如果你想了解更多细节:https://www.manning.com/books/http2-in-action。请参阅我网站顶部的折扣代码以获得更便宜的价格!

附:我还想问您为什么要将大量高清图像发送到移动设备。似乎很浪费,尤其是在带宽和存储空间有限的移动设备上。至少,您应该仅在移动设备使用 WiFi 时执行此操作,以减少用户产生高成本的机会。但这与您的问题有些无关(尽管使用较小的“预览图像”,您可能不受带宽限制,因此可能会开始看到 HTTP/1.1 和 HTTP/2 之间的差异)。

【讨论】:

以上是关于大量图像 - HTTP/1.1 与 HTTP/2?的主要内容,如果未能解决你的问题,请参考以下文章

如果 HTTP/1.1 客户端与仅 HTTP/2 的服务器通信会怎样,如果 HTTP/2 客户端与仅 HTTP/1.1 的服务器通信会怎样?

与 HTTP/1.1 相比,HTTP/2 如何提供更快的浏览速度?

PHP:获取 HTTP 协议版本(HTTP/1.1 与 HTTP/2)

计算机网络HTTP 与 HTTPS ( HTTP 发展过程 | HTTP/1.1 与 HTTP/2 对比 | HTTP 报文格式 )

http/2.0与http/1.1的区别

在 HTTP/2 中使用图像精灵有意义吗?