.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
相关产品推荐
相关产品推荐

