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

.NET Kestrel服务器Http1AndHttp2AndHttp3协议模式无法优先选择HTTP/2的问题求助

.NET Kestrel服务器Http1AndHttp2AndHttp3协议模式无法优先选择HTTP/2的问题求助

各位大佬好,我最近在搭一个多端口监听的.NET Kestrel服务器,遇到个头疼的问题想请教下大家。

我给不同端口配置了不同的HTTP协议规则,其中有个端口设置成了Http1AndHttp2AndHttp3模式,原本想着只要客户端支持HTTP/2,服务器就优先用HTTP/2来建立连接,但实际测试下来,不管用curl还是浏览器(都确认支持HTTP/2),大部分时候服务器还是 fallback到了HTTP/1.1,完全没达到预期的优先效果。

先给大家贴下我目前的服务器代码:

using Microsoft.AspNetCore.Builder;
using Microsoft.AspNetCore.Hosting;
using Microsoft.AspNetCore.Http;
using Microsoft.Extensions.Hosting;
using Microsoft.AspNetCore.Server.Kestrel.Core;

var builder = WebApplication.CreateBuilder(args);

// Configure Kestrel for h2c (HTTP/2 without TLS)
builder.WebHost.ConfigureKestrel(options =>
{
    // Listen on port 5000 for h2c (HTTP/2 without TLS)
    options.ListenAnyIP(5000, listenOptions =>
    {
        listenOptions.Protocols = HttpProtocols.Http2; // Only HTTP/2 Cleartext (h2c)
    });

    // Optionally, listen on port 5001 for HTTP/1 and HTTP/2 with TLS
    options.ListenAnyIP(5001, listenOptions =>
    {
        listenOptions.Protocols = HttpProtocols.Http1AndHttp2;
        listenOptions.UseHttps(); // HTTP/1.x and HTTP/2 with TLS
    });

    // Optionally, listen on port 5002 for Http1AndHttp2AndHttp3模式
    options.ListenAnyIP(5002, listenOptions =>
    {
        listenOptions.Protocols = HttpProtocols.Http1AndHttp2AndHttp3;
        listenOptions.UseHttps();
    });
});

var app = builder.Build();

app.MapGet("/", () => "Hello World!");

app.Run();

我已经排查过客户端的HTTP/2支持情况,确认是没问题的,但就是搞不懂为什么Kestrel不优先选HTTP/2。有没有大佬能帮我分析下可能的原因?或者有没有什么配置技巧能强制让Kestrel在多协议模式下优先选用HTTP/2呢?

备注:内容来源于stack exchange,提问作者mohaidar

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.15 13:00:32