HTTP / 2下载速度比使用HttpClient的HTTP / 1.1慢得多

问题描述

当我使用HTTP / 2下载文件时,速度被锁定为16 mbps。 HTTP / 1.1的速度-90 mbps。代码很简单:

var url = "https://firebasestorage.googleapis.com/v0/b/xxxxxxxxxx/o/xxx.xxx?alt=media&token=xxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxx";
using var client = new HttpClient() { DefaultRequestVersion = new Version(2,0) };
using var response = await client.GetAsync(url);

我使用不同的ISP和其他支持HTTP / 2的来源在PC和笔记本电脑(均为Windows 10)上进行了测试-相同的行为。

如果我通过任何浏览器下载此文件-HTTP / 2速度与HTTP / 1.1速度相同。尽管Edge显示了“ http / 2.0 + quic / 46”协议。

我也将此代码提供给了我在另一个城市的朋友,他没有这种问题。

此问题的原因是什么? ISP可以某种方式减慢HTTP / 2流量吗?

UPD:.NET Core 3.1和.NET 5的相同问题

解决方法

我遇到了同样的问题并被定向到 this issue

这似乎是罪魁祸首。没有修复,但看起来它们是 tracking this for .NET 6 later this year

最好的解决方法似乎是对大于 64 KB 的下载使用单独的 HTTP/1.1 客户端实例。