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

ASP.NET Core中如何限制HTTP协议版本低于2.0的请求

在ASP.NET Core中限制HTTP/2.0以下版本的请求

当然可以,你可以通过自定义中间件或者配置Kestrel服务器两种方式在Startup.cs中实现该限制,具体做法如下:

方法一:自定义中间件(通用所有托管场景)

在Startup.cs的Configure方法中添加自定义中间件,在请求进入业务逻辑前拦截不符合版本要求的请求:

public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
{
    // 版本限制中间件需放在其他业务中间件之前
    app.Use(async (context, next) =>
    {
        // 仅允许HTTP/2及以上版本的请求
        if (context.Request.Protocol is not "HTTP/2" and not "HTTP/3")
        {
            context.Response.StatusCode = StatusCodes.Status400BadRequest;
            await context.Response.WriteAsync("仅支持HTTP/2.0及以上版本的请求");
            return;
        }

        // 版本合规,继续执行后续逻辑
        await next();
    });

    // 其他中间件配置(路由、MVC等)
    app.UseRouting();
    app.UseEndpoints(endpoints =>
    {
        endpoints.MapControllers();
    });
}

方法二:配置Kestrel服务器(仅Kestrel托管场景)

如果你的应用使用Kestrel作为服务器,可以直接从服务器层面禁用HTTP/1.x协议,只开放HTTP/2及以上版本。在Startup.cs的ConfigureServices方法中添加配置:

public void ConfigureServices(IServiceCollection services)
{
    services.Configure<KestrelServerOptions>(options =>
    {
        options.ConfigureEndpointDefaults(listenOptions =>
        {
            // 指定仅支持HTTP/2和HTTP/3
            listenOptions.Protocols = HttpProtocols.Http2 | HttpProtocols.Http3;
        });
    });

    // 其他服务注册
    services.AddControllers();
}

这种方式效率更高,不符合要求的请求会被Kestrel直接拒绝,不会进入应用管道。注意:

  • HTTP/2默认需要TLS(HTTPS)环境,生产环境不建议启用明文HTTP/2
  • HTTP/3需要.NET 6及以上版本支持,且需配合相应服务器配置

内容的提问来源于stack exchange,提问作者Saurabh Soni

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.31 14:55:27