【发布时间】:2020-12-28 08:13:56
【问题描述】:
当我以 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 存在同样的问题
【问题讨论】:
-
你用其他网站测试过吗?或者它是特定于这个的?
-
两个 HTTP 版本的二进制文件下载速度必须相同。 ISP 在技术上可以使用 ALG 来限制速度,但我不知道它为什么会这样做。尝试不同的 Web 服务器。顺便说一句,如果您将
response读作Stream,请考虑HttpCompletionOption.ResponseHeadersRead和ConfigureAwait(false)。如果是常规(非二进制文件)HTTP 流量,请设置 GZipAccept-Encoding支持。出于测试目的,您可以设置类似于 Web 浏览器的请求标头。 -
@mjwills 是的,我尝试了其他网站以及 GCE 上使用 nginx 的自己的网站
-
@aepot
HttpCompletionOption.ResponseHeadersRead和阅读为Stream也没有帮助。是的,我尝试设置浏览器在请求中发送的所有标头(包括 Accept-Encoding) - 没有 -
Also I gave this code to my friend in another city and he doesn't have such problem.那很可能和你的ISP有关。
标签: c# .net windows .net-core http2