跳转到内容

Windows Server 上的 HTTP/3:IIS 可以,Nginx Win32 不行

核验于 2 分钟阅读

在 IIS/ASP.NET Core 用 HTTPS + EnableHttp3 开启 HTTP/3,用 Alt-Svc 通告,测 UDP 443,并理解 Windows Nginx 的限制。

测试环境Standard / Datacenter · 版本号 26100.33650 · x64
E1
版本号
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 队头阻塞;它不会修慢数据库。

  • 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。

浏览器从 HTTP/1.1 或 HTTP/2 通过 Alt-Svc 发现 HTTP/3:

Alt-Svc: h3=":443"; ma=86400

IIS 不一定自动加。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 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:443
Get-NetFirewallRule -DisplayName '*HTTP*' | Select-Object DisplayName,Enabled
curl.exe --http3 -I https://lab.example/

curl --http3 只有构建带 HTTP/3 支持才可用。浏览器 DevTools → Network → Protocol 列在 Alt-Svc 升级后应显示 h3。还是 h2,说明客户端没切;查 UDP 443 和 Alt-Svc。

官方 ngx_http_v3_module 文档明确:该模块不能在 Win32 平台构建。Windows Nginx 没有受支持的 HTTP/3 终止开关。

选项:

  • HTTP/3 终止在 IIS 或 Linux 反代/CDN;
  • Windows Nginx 继续 HTTP/2,接受这个边界;
  • 不要在不能服务 h3 的服务器上通告 h3。
  • 移动/丢包网络、大量并行资源。
  • 已有 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 限制来自官方模块文档。

来源