.NET 11 来了!ASP.NET Core 新特性全解析,HTTP/2/HTTP/3 这次真的变了

导语:.NET 11 的 ASP.NET Core 更新文档已经上线,从 Kestrel 网络栈到 Blazor、SignalR、OpenAPI,几十个新特性一口气放出。其中最值得关注、也最容易被忽略的,是一批围绕 HTTP/2 / HTTP/3 和底层网络性能的改进。这篇文章带你快速过一遍重点,文末附完整特性清单。
NET 11 性能优化全景架构


一、重点聚焦:HTTP/2 / HTTP/3 的进化

如果说以前的版本是在"支持" HTTP/2 和 HTTP/3,那么 .NET 11 则是在认真"打磨"它们。这一版针对现代网络协议做了三件大事:

1️⃣ HTTP/3 请求处理提前,首请求延迟大幅降低

过去的 Kestrel 在处理 HTTP/3 新连接时,会先等待控制流和 SETTINGS 帧就绪,然后才开始处理应用请求。这意味着新连接上的第一个请求白白多等了一个握手往返。

.NET 11 的 Kestrel 不再等待控制流和 SETTINGS 帧,直接开始处理 HTTP/3 请求,显著减少了新连接上第一个请求的延迟。

对于面向移动端、网络环境复杂、连接频繁新建销毁的场景(这正是 QUIC/HTTP/3 的主场),这个优化是实打实的体验提升。

2️⃣ HTTP/2 和 HTTP/3 尾部标头终于有超时保护

这也是一个容易被忽视但非常关键的健壮性改进:

  • Kestrel 现在会把 RequestHeadersTimeout 同时应用到 HTTP/2 和 HTTP/3 的碎片化尾部标头(trailers)上。
  • 此前这个超时只保护初始请求标头。如果客户端故意只发一半的尾部 HEADERS 帧,Kestrel 可能让连接无限期挂起——这是一个潜在的慢速攻击(Slowloris 类)面。
  • 现在,等待尾部标头完成的连接同样受超时约束,默认 10 秒可配置:
builder.WebHost.ConfigureKestrel(options =>
{
    options.Limits.RequestHeadersTimeout = TimeSpan.FromSeconds(10);
});

3️⃣ HTTP/1.1 解析器重构:畸形请求吞吐量提升 20–40%

虽然不是 HTTP/2/3,但属于同一批网络栈性能工作:Kestrel 的 HTTP/1.1 请求解析器改为不抛异常的代码路径,解析器返回一个结果结构体(成功 / 不完整 / 错误),而不是每次失败都抛 BadHttpRequestException

在面对大量畸形请求时(端口扫描、恶意流量、配置错误的客户端),吞吐量提升 20–40%,且对正常请求处理零影响。

配套安全增强:TLS 通道绑定与可观测性

网络栈还顺手收了一波安全与诊断能力:

  • 协商式身份验证(Negotiate)使用 TLS 通道绑定令牌:Kestrel 上的 Kerberos/NTLM 认证现在绑定到 HTTPS 连接的 TLS 终结点,防止凭据被中继,无需任何配置变更。
  • ITlsHandshakeFeature.Exception:TLS 握手失败的原因终于可以被中间件和日志捕获,不再是裸的 IOException
  • UseTlsClientHelloListener:新的连接中间件方式检查 ClientHello,替代已弃用的回调形态。
  • ITlsConnectionFeature.TryGetChannelBindingBytes:应用可直接读取通道绑定令牌防范中继攻击;HTTP.sys 侧还新增 HttpAuthenticationHardeningLevel(Legacy / Medium / Strict)分级控制。

二、性能与中间件:Zstandard、runtime-async 与缓存行为

Zstandard(zstd)压缩开箱即用

响应压缩和请求解压缩中间件新增 Zstandard 支持,且默认启用。zstd 在压缩率和速度上全面优于 gzip,对高流量 API 是免费的带宽红利:

builder.Services.AddResponseCompression();
builder.Services.AddRequestDecompression();
builder.Services.Configure<ZstandardCompressionProviderOptions>(options =>
{
    options.CompressionOptions = new ZstandardCompressionOptions
    {
        Quality = 6 // 1-22,越高压缩越好、越慢
    };
});

响应压缩始终输出 Vary: Accept-Encoding

防止共享缓存和 CDN 把压缩内容发给没请求压缩的客户端(或反之),属于缓存正确性修复。

共享框架启用 runtime-async

ASP.NET Core 共享框架库在 net11.0+ 上启用 runtime-async 编译——由运行时而非编译器生成 async/await 状态机,减少每次 await 的内存分配。纯内部实现变更,应用无需改代码即自动受益。

其他打磨

  • HTTP 日志中间件池化 ResponseBufferingStream,减少每次请求分配
  • 速率限制中间件返回精确的 Retry-After 标头;修复 TokenBucket 零许可获取、链式限制器补填转发的 bug
  • 原生支持 OpenTelemetry HTTP 语义约定属性(http.request.methodurl.path 等),不再需要 OpenTelemetry.Instrumentation.AspNetCore

三、SignalR:不断线刷新身份验证

  • 身份验证刷新:SignalR 连接在访问令牌过期时可刷新认证而不断开。服务器除 /negotiate 外新增 /refresh 终结点,客户端在过期前自动重新认证。
  • 客户端可取消普通 Hub 调用:此前只有流式调用可取消,现在 InvokeAsyncCancellationToken 即可。
  • .NET 客户端与 TypeScript 客户端均支持刷新,且在协商重定向(如 Azure SignalR 服务)后依然有效。
app.MapRazorComponents<App>()
    .AddInteractiveServerRenderMode(options =>
    {
        options.ConfigureConnection = dispatcherOptions =>
        {
            dispatcherOptions.CloseOnAuthenticationExpiration = true;
            dispatcherOptions.AllowStatefulReconnects = true;
        };
    });

四、OpenAPI:默认 3.2,二进制响应与 SSE

  • 默认面向 OpenAPI 3.2HTTP QUERY 被识别为已知操作类型
  • 文件下载类终结点(FileContentResultFileStreamResult 等)自动映射为 type: string, format: binary 架构
  • SSE(服务器发送事件) 端点用 3.2 的 itemSchema 描述
  • [Obsolete] 自动映射为 deprecated: true
  • 构建时生成文档可用 OpenApiGenerationEnvironment 指定环境

五、最小 API 与验证

  • 终结点筛选器可观察参数绑定失败:筛选器管道在绑定失败(400)时也会运行,可替换响应正文
  • C# 联合类型(union):凡是用 System.Text.Json 的地方都支持,OpenAPI 中呈现为 anyOf
  • 异步验证端到端AsyncValidationAttribute + IAsyncValidatableObject,查库、调远程 API 不再阻塞线程
  • [ShortCircuit] 特性:路由匹配后立即执行,跳过其余中间件管道,适合健康检查、robots.txt 等场景

六、Blazor:AI 组件登场(篇幅最大的一次更新)

  • 实验性 Blazor AI 组件Microsoft.AspNetCore.Components.AI 包):流式聊天、富文本与工具渲染、人工审批流,并支持通过 AG-UI 协议接入远程 Agent
  • QuickGrid 大改:分页排序状态搬进 URL(?page=2&sort=Name),天然支持链接分享、前进后退和静态 SSR;新增行点击事件
  • Virtualize 增强:支持不等高项、原生滚动锚定、AnchorMode(Start/End 适合信息流和聊天)、ScrollToItemAsync 编程滚动
  • 静态 SSR:TempData 与会话持久化、CacheView 缓存子树渲染输出、客户端表单验证
  • 服务器触发线路暂停:计划停机、实例排空时优雅暂停电路
  • 标签页隐藏自动暂停电路(AutoPause)、WASM 支持 IHostedService 与环境变量配置、WithBrowserOptions 服务端配置客户端行为等

七、值得注意的其他新东西

  • MCP 服务器模板内置dotnet new mcpserver 随 .NET SDK 捆绑,AI Agent 工具一键起步
  • dotnet user-jwts 支持无项目文件的单文件应用(--file
  • Kestrel TLS 握手可观测性(见上文)
  • 更多细节与迁移指南见微软官方文档

写在最后

.NET 11 的 ASP.NET Core 更新呈现出两个清晰的主线:

  1. 网络栈现代化收尾——HTTP/3 首请求提速、HTTP/2/3 尾部标头超时、HTTP/1.1 解析器去异常化、zstd、runtime-async,一次扎实的"内功"升级;
  2. AI 时代的应用形态——MCP 模板、Blazor AI 组件、AG-UI 协议支持,Web 框架正在为 Agent 驱动的交互做好准备。

如果你维护着跑在 Kestrel 上的高并发服务,HTTP/2/3 相关的三项改进值得在升级后第一时间压测验证;如果你在探索 AI 应用,MCP + Blazor AI 组件的组合值得现在就开始尝鲜。

官方文档:https://learn.microsoft.com/zh-cn/aspnet/core/release-notes/aspnetcore-11

你对哪个特性最感兴趣?欢迎在评论区聊聊。


参考来源:Microsoft Learn ——《.NET 11 中 ASP.NET Core 的新增功能》(页面最后更新于 2026-09-14)。本文将在后续预览版发布后持续更新。

posted @ 2026-09-20 06:51  张善友  阅读(0)  评论(0)    收藏  举报