HTTP/2 使用 HttpClient 下载速度比 HTTP/1.1 慢很多
HTTP/2 download speed is much slower than HTTP/1.1 with HttpClient
当我以 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);
我用我的 PC 和笔记本电脑(都是 Windows 10)使用不同的 ISP 和另一个支持 HTTP/2 的来源进行了测试 - 相同的行为。
如果我通过任何浏览器下载此文件 - 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 客户端实例。
当我以 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);
我用我的 PC 和笔记本电脑(都是 Windows 10)使用不同的 ISP 和另一个支持 HTTP/2 的来源进行了测试 - 相同的行为。
如果我通过任何浏览器下载此文件 - 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 客户端实例。