事件
在 IIS 上搭配使用 ASP.NET Core 與 HTTP/3
注意
這不是這篇文章的最新版本。 如需目前的版本,請參閱 本文的 .NET 9 版本。
警告
不再支援此版本的 ASP.NET Core。 如需詳細資訊,請參閱 .NET 和 .NET Core 支持原則。 如需目前的版本,請參閱 本文的 .NET 9 版本。
作者:Chris Ross
在下列 IIS 案例中,ASP.NET Core 完全支援 HTTP/3:
- 內含式
- 跨處理序。 在跨處理序中,IIS 會使用 HTTP/3 來回應用戶端,但與 Kestrel 伺服器的反向 Proxy 連線會使用 HTTP/1.1。
如需有關同處理序和跨處理序主控模型的詳細資訊,請參閱適用於 IIS 的 ASP.NET Core Module (ANCM)。
也需要符合下列需求:
- Windows Server 2022/Windows 11 或更新版本
- 使用
https
URL 繫結。 - 已設定 EnableHttp3 登錄機碼。
針對建立 HTTP/3 連線時的同處理序部署,HttpRequest.Protocol
會回報 HTTP/3
。 針對建立 HTTP/3 連線時的跨處理序部署,HttpRequest.Protocol
會回報 HTTP/1.1
,因為這是 IIS 對 Kestrel 的要求進行 Proxy 處理的方式。
HTTP/3 會透過 alt-svc
標頭探索為從 HTTP/1.1 或 HTTP/2 的升級。 這表示第一個要求通常會在切換至 HTTP/3 之前使用 HTTP/1.1 或 HTTP/2。 IIS 不會自動新增 alt-svc
標頭,而是應用程式必須新增此標頭。 下列程式碼是新增 alt-svc
回應標頭的中介軟體範例。
app.Use((context, next) =>
{
context.Response.Headers.AltSvc = "h3=\":443\"";
return next(context);
});
提早將上述程式碼放在要求管線中。
IIS 也支援傳送 AltSvc HTTP/2 通訊協定訊息 (而不是回應標頭) 來通知用戶端有關 HTTP/3 可供使用。 請參閱 EnableAltSvc 登錄機碼。 請注意,這需要使用主機名稱而非 IP 位址的 netsh sslcert 繫結。
在下列 IIS 部署案例中,ASP.NET Core 支援 HTTP/3:
- 內含式
- 跨處理序。 在跨處理序中,IIS 會使用 HTTP/3 來回應用戶端,但與 Kestrel 伺服器的反向 Proxy 連線會使用 HTTP/1.1。
如需有關同處理序和跨處理序主控模型的詳細資訊,請參閱適用於 IIS 的 ASP.NET Core Module (ANCM)。
也需要符合下列需求:
- Windows Server 2022/Windows 11 或更新版本
- 使用
https
URL 繫結。 - 已設定 EnableHttp3 登錄機碼。
針對建立 HTTP/3 連線時的同處理序部署,HttpRequest.Protocol
會回報 HTTP/3
。 針對建立 HTTP/3 連線時的跨處理序部署,HttpRequest.Protocol
會回報 HTTP/1.1
,因為這是 IIS 對 Kestrel 的要求進行 Proxy 處理的方式。
HTTP/3 會透過 alt-svc
標頭探索為從 HTTP/1.1 或 HTTP/2 的升級。 這表示第一個要求通常會在切換至 HTTP/3 之前使用 HTTP/1.1 或 HTTP/2。 IIS 不會自動新增 alt-svc
標頭,而是應用程式必須新增此標頭。 下列程式碼是新增 alt-svc
回應標頭的中介軟體範例。
app.Use((context, next) =>
{
context.Response.Headers.AltSvc = "h3=\":443\"";
return next(context);
});
提早將上述程式碼放在要求管線中。
IIS 也支援傳送 AltSvc HTTP/2 通訊協定訊息 (而不是回應標頭) 來通知用戶端有關 HTTP/3 可供使用。 請參閱 EnableAltSvc 登錄機碼。 請注意,這需要使用主機名稱而非 IP 位址的 netsh sslcert 繫結。
其他資源
訓練