搭配 ASP.NET Core web 伺服器使用 HTTP/2 Kestrel

如果符合下列基本需求,則可以針對 ASP.NET Core 應用程式使用 HTTP/2

  • 作業系統†
    • Windows Server 2016/Windows 10 或更新版本‡
    • Linux 含 OpenSSL 1.0.2 或更新版本 (例如 Ubuntu 16.04 或更新版本)
  • 目標 Framework:.NET Core 2.2 或更新版本
  • Application-Layer Protocol Negotiation (ALPN) 連線
  • TLS 1.2 或更新版本連線

†未來版本的 macOS 上將會支援 HTTP/2。 ‡KestrelWindows Server 2012 R2 和 Windows 8.1 對 HTTP/2 的支援有限。 支援有限的原因是這些作業系統上的支援 TLS 密碼編譯套件清單有限。 可能需要使用橢圓曲線數位簽章演算法 (ECDSA) 產生的憑證來保護 TLS 連線。

如果已建立 HTTP/2 連線,HttpRequest.Protocol 會報告 HTTP/2

從 .NET Core 3.0 開始,預設會啟用 HTTP/2。 如需有關設定的詳細資訊,請參閱 Kestrel HTTP/2 限制>listenoptions一節。

Advanced HTTP/2 功能

支援 gRPC 中的額外 HTTP/2 功能 Kestrel ,包括對回應結尾和傳送重設框架的支援。

預告片

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 規格錯誤碼一節