在 IIS 上搭配使用 ASP.NET Core 與 HTTP/2
注意
這不是這篇文章的最新版本。 如需目前版本,請參閱本文的 .NET 8 版本。
警告
不再支援此版本的 ASP.NET Core。 如需詳細資訊,請參閱 .NET 和 .NET Core 支援原則。 如需目前版本,請參閱本文的 .NET 8 版本。
在下列 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 規格錯誤碼一節。