閱讀英文

共用方式為


在 IIS 上搭配使用 ASP.NET Core 與 HTTP/3

注意

這不是這篇文章的最新版本。 如需目前的版本,請參閱 本文的 .NET 9 版本。

警告

不再支援此版本的 ASP.NET Core。 如需詳細資訊,請參閱 .NET 和 .NET Core 支持原則。 如需目前的版本,請參閱 本文的 .NET 9 版本。

重要

這些發行前產品的相關資訊在產品正式發行前可能會有大幅修改。 Microsoft 對此處提供的資訊,不做任何明確或隱含的瑕疵擔保。

如需目前的版本,請參閱 本文的 .NET 9 版本。

作者:Chris Ross

在下列 IIS 案例中,ASP.NET Core 完全支援 HTTP/3

  • 內含式
  • 跨處理序。 在跨處理序中,IIS 會使用 HTTP/3 來回應用戶端,但與 Kestrel 伺服器的反向 Proxy 連線會使用 HTTP/1.1。

如需有關同處理序和跨處理序主控模型的詳細資訊,請參閱適用於 IIS 的 ASP.NET Core Module (ANCM)

也需要符合下列需求:

針對建立 HTTP/3 連線時的同處理序部署,HttpRequest.Protocol 會回報 HTTP/3。 針對建立 HTTP/3 連線時的跨處理序部署,HttpRequest.Protocol 會回報 HTTP/1.1,因為這是 IIS 對 Kestrel 的要求進行 Proxy 處理的方式。

Alt-Svc

HTTP/3 會透過 alt-svc 標頭探索為從 HTTP/1.1 或 HTTP/2 的升級。 這表示第一個要求通常會在切換至 HTTP/3 之前使用 HTTP/1.1 或 HTTP/2。 IIS 不會自動新增 alt-svc 標頭,而是應用程式必須新增此標頭。 下列程式碼是新增 alt-svc 回應標頭的中介軟體範例。

C#
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)

也需要符合下列需求:

針對建立 HTTP/3 連線時的同處理序部署,HttpRequest.Protocol 會回報 HTTP/3。 針對建立 HTTP/3 連線時的跨處理序部署,HttpRequest.Protocol 會回報 HTTP/1.1,因為這是 IIS 對 Kestrel 的要求進行 Proxy 處理的方式。

Alt-Svc

HTTP/3 會透過 alt-svc 標頭探索為從 HTTP/1.1 或 HTTP/2 的升級。 這表示第一個要求通常會在切換至 HTTP/3 之前使用 HTTP/1.1 或 HTTP/2。 IIS 不會自動新增 alt-svc 標頭,而是應用程式必須新增此標頭。 下列程式碼是新增 alt-svc 回應標頭的中介軟體範例。

C#
app.Use((context, next) =>
{
    context.Response.Headers.AltSvc = "h3=\":443\"";
    return next(context);
});

提早將上述程式碼放在要求管線中。

IIS 也支援傳送 AltSvc HTTP/2 通訊協定訊息 (而不是回應標頭) 來通知用戶端有關 HTTP/3 可供使用。 請參閱 EnableAltSvc 登錄機碼。 請注意,這需要使用主機名稱而非 IP 位址的 netsh sslcert 繫結。