ASP.NET Core Kestrel Web サーバーで HTTP/2 を使用する
Note
これは、この記事の最新バージョンではありません。 現在のリリースについては、この記事の .NET 9 バージョンを参照してください。
警告
このバージョンの ASP.NET Core はサポート対象から除外されました。 詳細については、「.NET および .NET Core サポート ポリシー」を参照してください。 現在のリリースについては、この記事の .NET 8 バージョンを参照してください。
重要
この情報はリリース前の製品に関する事項であり、正式版がリリースされるまでに大幅に変更される可能性があります。 Microsoft はここに示されている情報について、明示か黙示かを問わず、一切保証しません。
現在のリリースについては、この記事の .NET 9 バージョンを参照してください。
Http/2 は、次の基本要件が満たされている場合に、ASP.NET Core アプリで使用できます。
- オペレーティング システム
- Windows Server 2016 または Windows 10 以降‡
- OpenSSL 1.0.2 以降を使用した Linux (Ubuntu 16.04 以降など)
- macOS 10.15 以降
- ターゲット フレームワーク: .NET Core 2.2 以降
- アプリケーション レイヤー プロトコル ネゴシエーション (ALPN) 接続
- TLS 1.2 以降の接続
‡Kestrel では、Windows Server 2012 R2 および Windows 8.1 上での HTTP/2 のサポートは制限されています。 サポートが制限されている理由は、これらのオペレーティング システムで使用できる TLS 暗号のスイートのリストが制限されているためです。 TLS 接続をセキュリティで保護するためには、楕円曲線デジタル署名アルゴリズム (ECDSA) を使用して生成した証明書が必要になる場合があります。
Http/2 接続が確立されると、HttpRequest.Protocol が HTTP/2
を報告します。
.NET Core 3.0 以降では、HTTP/2 は既定で有効になっています。 構成の詳細については、Kestrel HTTP/2 の制限に関するセクションと、「ListenOptions.Protocols」セクションを参照してください。
高度な HTTP/2 機能
Kestrel 内の追加の HTTP/2 機能により、gRPC がサポートされています。これには、応答トレーラーやリセット フレームの送信に関するサポートが含まれます。
予告編
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 仕様の「エラーコード」セクションを参照してください。
Http/2 は、次の基本要件が満たされている場合に、ASP.NET Core アプリで使用できます。
- オペレーティング システム†
- Windows Server 2016 または Windows 10 以降‡
- OpenSSL 1.0.2 以降を使用した Linux (Ubuntu 16.04 以降など)
- ターゲット フレームワーク: .NET Core 2.2 以降
- アプリケーション レイヤー プロトコル ネゴシエーション (ALPN) 接続
- TLS 1.2 以降の接続
†将来のリリースでは HTTP/2 が macOS 上でサポートされるようになります。 ‡Kestrel では、Windows Server 2012 R2 および Windows 8.1 上での HTTP/2 のサポートは制限されています。 サポートが制限されている理由は、これらのオペレーティング システムで使用できる TLS 暗号のスイートのリストが制限されているためです。 TLS 接続をセキュリティで保護するためには、楕円曲線デジタル署名アルゴリズム (ECDSA) を使用して生成した証明書が必要になる場合があります。
Http/2 接続が確立されると、HttpRequest.Protocol が HTTP/2
を報告します。
.NET Core 3.0 以降では、HTTP/2 は既定で有効になっています。 構成の詳細については、Kestrel HTTP/2 の制限に関するセクションと、「ListenOptions.Protocols」セクションを参照してください。
高度な HTTP/2 機能
Kestrel 内の追加の HTTP/2 機能により、gRPC がサポートされています。これには、応答トレーラーやリセット フレームの送信に関するサポートが含まれます。
予告編
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 仕様の「エラーコード」セクションを参照してください。
Http/2 は、次の基本要件が満たされている場合に、ASP.NET Core アプリで使用できます。
- オペレーティング システム†
- Windows Server 2016 または Windows 10 以降‡
- OpenSSL 1.0.2 以降を使用した Linux (Ubuntu 16.04 以降など)
- ターゲット フレームワーク: .NET Core 2.2 以降
- アプリケーション レイヤー プロトコル ネゴシエーション (ALPN) 接続
- TLS 1.2 以降の接続
†将来のリリースでは HTTP/2 が macOS 上でサポートされるようになります。 ‡Kestrel では、Windows Server 2012 R2 および Windows 8.1 上での HTTP/2 のサポートは制限されています。 サポートが制限されている理由は、これらのオペレーティング システムで使用できる TLS 暗号のスイートのリストが制限されているためです。 TLS 接続をセキュリティで保護するためには、楕円曲線デジタル署名アルゴリズム (ECDSA) を使用して生成した証明書が必要になる場合があります。
Http/2 接続が確立されると、HttpRequest.Protocol が HTTP/2
を報告します。
.NET Core 3.0 以降では、HTTP/2 は既定で有効になっています。 構成の詳細については、Kestrel HTTP/2 の制限に関するセクションと、「ListenOptions.Protocols」セクションを参照してください。
高度な HTTP/2 機能
Kestrel 内の追加の HTTP/2 機能により、gRPC がサポートされています。これには、応答トレーラーやリセット フレームの送信に関するサポートが含まれます。
予告編
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