Windows Server 上的 HTTP/3:IIS 可以,Nginx Win32 不行
在 IIS/ASP.NET Core 用 HTTPS + EnableHttp3 开启 HTTP/3,用 Alt-Svc 通告,测 UDP 443,并理解 Windows Nginx 的限制。
- 版本号
- 26100.33650
- 版本
- Standard / Datacenter
- 架构
- x64
- 支持
- 文档(E1)
- 证据
- E1官方文档
- 核验日期
- 2026-10-29
- 页面类型
- 概念
HTTP/3 是 QUIC/UDP 上的 HTTP,不是 TCP。Windows 上:
- IIS / ASP.NET Core 在 Windows Server 2022 / Windows 11+ 支持;需要 HTTPS 绑定和
EnableHttp3; - Windows Nginx 不能构建
ngx_http_v3_module;不要声称 Windows Nginx HTTP/3; - 边缘要 HTTP/3,用 IIS、Linux Nginx/Caddy 或 CDN,并且实测。
HTTP/3 不是所有应用都自动更快。它在丢包/高延迟链路和大量并行资源上有优势,去掉 TCP 队头阻塞;它不会修慢数据库。
IIS 条件
Section titled “IIS 条件”- Windows Server 2022 或更高 / Windows 11+。
- HTTPS 绑定(证书、SNI)。
EnableHttp3注册表值。- 防火墙/NAT 放行 UDP 443。
- 支持 HTTP/3 的客户端(当前 Chrome/Edge/Firefox),且能到 UDP 443。
开启:
New-ItemProperty -Path 'HKLM:\SYSTEM\CurrentControlSet\Services\HTTP\Parameters' ` -Name EnableHttp3 -PropertyType DWord -Value 1 -Force重启(或维护窗口重启 HTTP 栈)。不要在繁忙服务器上随便重启 HTTP.sys;它影响所有 HTTP 监听器,不只 IIS。
Alt-Svc
Section titled “Alt-Svc”浏览器从 HTTP/1.1 或 HTTP/2 通过 Alt-Svc 发现 HTTP/3:
Alt-Svc: h3=":443"; ma=86400IIS 不一定自动加。ASP.NET Core 在管道早期加:
app.Use((context, next) =>{ context.Response.Headers.AltSvc = "h3=\":443\""; return next(context);});IIS 也能用 EnableAltSvc 发 HTTP/2 Alt-Svc 帧;那条路径要求基于主机名的 netsh 证书绑定,不是只绑 IP。
第一次请求通常走 HTTP/1.1 或 HTTP/2,然后客户端升级。这是正常的,不是“HTTP/3 失败”。
In-process 与 out-of-process
Section titled “In-process 与 out-of-process”- In-process ASP.NET Core:请求报告
HTTP/3。 - Out-of-process(IIS → Kestrel):IIS 对客户端说 HTTP/3,但反代到 Kestrel 的那一跳是 HTTP/1.1,所以
HttpRequest.Protocol报 HTTP/1.1。
out-of-process 部署不要只用 HttpRequest.Protocol 证明客户端用了 HTTP/3。
netsh http show sslcert hostnameport=lab.example:443Get-NetFirewallRule -DisplayName '*HTTP*' | Select-Object DisplayName,Enabledcurl.exe --http3 -I https://lab.example/curl --http3 只有构建带 HTTP/3 支持才可用。浏览器 DevTools → Network → Protocol 列在 Alt-Svc 升级后应显示 h3。还是 h2,说明客户端没切;查 UDP 443 和 Alt-Svc。
Windows Nginx
Section titled “Windows Nginx”官方 ngx_http_v3_module 文档明确:该模块不能在 Win32 平台构建。Windows Nginx 没有受支持的 HTTP/3 终止开关。
选项:
- HTTP/3 终止在 IIS 或 Linux 反代/CDN;
- Windows Nginx 继续 HTTP/2,接受这个边界;
- 不要在不能服务
h3的服务器上通告h3。
什么时候值得
Section titled “什么时候值得”- 移动/丢包网络、大量并行资源。
- 已有 TLS/HTTP/2,且能开 UDP 443。
- 能测量(RUM 或受控客户端),不是只在实验室 curl。
不值得:
- 纯 API、小请求、快网络;
- 边缘不传 UDP;
- 要靠破坏 HTTP/2 回退来“证明”HTTP/3。
E1。实验室没有开启 IIS HTTP/3 或测 QUIC;只记录了条件。Windows 11 上的 Nginx 1.28.0 只验证了 8081 的 HTTP/1.1,不是 HTTP/3。Nginx Win32 限制来自官方模块文档。