共用方式為


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

作者:Justin Kotalik

在下列 IIS 部署案例中,ASP.NET Core 支援 HTTP/2

  • Windows Server 2016 或更新版本/Windows 10 或更新版本
  • IIS 10 或更新版本
  • TLS 1.2 或更新版本連線
  • 跨處理序裝載時:公開 Edge Server 連線使用 HTTP/2,但是對 Kestrel 伺服器的反向 Proxy 連線使用 HTTP/1.1。

針對建立 HTTP/2 連線時的同處理序部署,HttpRequest.Protocol 會回報 HTTP/2。 針對建立 HTTP/2 連線時的跨處理序部署,HttpRequest.Protocol 會回報 HTTP/1.1

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

根據預設,HTTPS/TLS 連線會啟用 HTTP/2。 如果 HTTP/2 連線尚未建立,連線會退為 HTTP/1.1。 如需使用 IIS 部署之 HTTP/2 設定的詳細資訊,請參閱 IIS 上的 HTTP/2

支援 gRPC 的進階 HTTP/2 功能

IIS 中的其他 HTTP/2 功能支援 gRPC,包括支援回應結尾和傳送重設框架。

在 IIS 上執行 gRPC 的需求:

  • 同處理序裝載。
  • Windows 11 組建 22000 或更新版本、Windows Server 2022 組建 20348 或更新版本。
  • TLS 1.2 或更新版本連線。

結尾

HTTP 結尾與 HTTP 標頭類似,差別在於 HTTP 結尾是在傳送回應本文之後傳送。 對於 IIS 和 HTTP.sys,僅支援 HTTP/2 回應結尾。

if (httpContext.Response.SupportsTrailers())
{
    httpContext.Response.DeclareTrailer("trailername");	

    // Write body
    httpContext.Response.WriteAsync("Hello world");

    httpContext.Response.AppendTrailer("trailername", "TrailerValue");
}

在上述範例程式碼中:

  • SupportsTrailers 確保回應支援結尾。
  • DeclareTrailer 將指定的結尾名稱新增至 Trailer 回應標頭。 宣告回應的結尾是選擇性,但建議使用。 如果呼叫 DeclareTrailer,則必須在傳送回應標頭之前進行。
  • AppendTrailer 會附加結尾。

Reset

重設可讓伺服器使用指定的錯誤碼重設 HTTP/2 要求。 重設要求被視為中止。

var resetFeature = httpContext.Features.Get<IHttpResetFeature>();
resetFeature.Reset(errorCode: 2);

Reset 在上述程式碼範例中,指定 INTERNAL_ERROR 錯誤碼。 如需 HTTP/2 錯誤碼的詳細資訊,請瀏覽 HTTP/2 規格錯誤碼一節。