【问题标题】:Huge amount of images - HTTP/1.1 vs HTTP/2?大量图像 - HTTP/1.1 与 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 好的,这让你的目标更清晰。流式传输它们呢?在流中连接服务器端并在客户端拆分。

标签: image http request http2 http-1.1


【解决方案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 之间的差异)。

【讨论】:

    猜你喜欢
    • 2016-09-10
    • 2016-04-15
    • 2010-09-19
    • 2017-06-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-07-19
    • 2016-07-29
    相关资源
    最近更新 更多