IIS 上で HTTP/2 と共に ASP.NET Core を使用する
Note
これは、この記事の最新バージョンではありません。 現在のリリースについては、この記事の .NET 8 バージョンを参照してください。
警告
このバージョンの ASP.NET Core はサポート対象から除外されました。 詳細については、「.NET および .NET Core サポート ポリシー」を参照してください。 現在のリリースについては、この記事の .NET 8 バージョンを参照してください。
重要
この情報はリリース前の製品に関する事項であり、正式版がリリースされるまでに大幅に変更される可能性があります。 Microsoft はここに示されている情報について、明示か黙示かを問わず、一切保証しません。
現在のリリースについては、この記事の .NET 8 バージョンを参照してください。
作成者: Justin Kotalik
HTTP/2 は、次の IIS 展開シナリオでの ASP.NET Core でサポートされます。
- Windows Server 2016 以降、Windows 10 以降
- IIS 10 以降
- TLS 1.2 以降の接続
- アウト プロセスでホスティングしている場合: 一般向けのエッジ サーバーでは HTTP/2 を使用しますが、Kestrel サーバーへのリバース プロキシ接続では HTTP/1.1 を使用します。
インプロセスの展開の場合、HTTP/2 接続が確立されると、HttpRequest.Protocol
によって HTTP/2
が報告されます。 アウトプロセスの展開の場合、HTTP/2 接続が確立されると、HttpRequest.Protocol
によって HTTP/1.1
が報告されます。
インプロセス ホスティング モデルとアウトプロセス ホスティング モデルの詳細については、「IIS の ASP.NET Core モジュール (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 ヘッダーに似ていますが、応答本文の送信後に送信される点が異なります。 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 仕様の「エラーコード」セクションを参照してください。
ASP.NET Core