You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

.NET 5中HttpClient发起HTTP/2请求响应版本始终为1.1问题求助

问题根因

  • 缺少HTTP版本策略配置:.NET 5中仅设置HttpRequestMessage.Version为2.0不足以强制优先使用HTTP/2,默认版本策略允许在判定不支持时自动降级到HTTP/1.1,未显式指定策略时会优先走兼容逻辑。
  • 系统版本不满足要求:Windows平台下HTTP/2的客户端支持最低要求为Windows 10 1607版本(内部版本号14393,即周年更新),低于该版本的Win10系统无法发起HTTP/2请求。
  • 请求不满足HTTP/2启用前提:绝大多数服务端的HTTP/2仅支持HTTPS协议传输,若请求的目标地址为HTTP明文协议,会直接降级到HTTP/1.1;同时需要确认目标服务端本身已开启HTTP/2支持。

修正方案

修正后的参考代码如下:

// 建议HttpClient静态复用,不要每次请求都新建实例
private static readonly HttpClient _httpClient = new HttpClient();

public void RequestHttp2Resource()
{
    string authToken =  "{jwt token}";
    _httpClient.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Bearer", authToken);

    var req = new HttpRequestMessage(HttpMethod.Get, "{url}")
    {
        Version = new Version(2, 0),
        // 新增版本策略配置:优先使用指定的2.0版本,不支持时再降级
        VersionPolicy = HttpVersionPolicy.RequestVersionOrHigher
    };

    // 仅示例,生产环境建议使用异步await方式调用,避免同步阻塞
    var response = _httpClient.SendAsync(req).ConfigureAwait(false).GetAwaiter().GetResult();
    var responseVersion = response.Version;
    Console.WriteLine(responseVersion);
}

如果需要严格要求必须使用HTTP/2、不接受降级,可以将VersionPolicy设置为HttpVersionPolicy.RequestVersionExact,若服务端不支持HTTP/2会直接抛出异常,方便排查定位问题。

内容的提问来源于stack exchange,提问作者Aniket Tiwari

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.26 16:57:00