Verwenden von HTTP/2 mit dem ASP.NET Core-Kestrel-Webserver
Hinweis
Dies ist nicht die neueste Version dieses Artikels. Informationen zum aktuellen Release finden Sie in der .NET 8-Version dieses Artikels.
Warnung
Diese Version von ASP.NET Core wird nicht mehr unterstützt. Weitere Informationen finden Sie in der Supportrichtlinie für .NET und .NET Core. Informationen zum aktuellen Release finden Sie in der .NET 8-Version dieses Artikels.
Wichtig
Diese Informationen beziehen sich auf ein Vorabversionsprodukt, das vor der kommerziellen Freigabe möglicherweise noch wesentlichen Änderungen unterliegt. Microsoft gibt keine Garantie, weder ausdrücklich noch impliziert, hinsichtlich der hier bereitgestellten Informationen.
Informationen zum aktuellen Release finden Sie in der .NET 8-Version dieses Artikels.
HTTP/2 ist für ASP.NET Core-Apps verfügbar, wenn die folgenden Basisanforderungen erfüllt sind:
- Betriebssystem
- Windows Server 2016/Windows 10 oder höher‡
- Linux mit OpenSSL 1.0.2 oder höher (z.B. Ubuntu 16.04 oder höher)
- macOS 10.15 oder höher
- Zielframework: .NET Core 2.2 oder höher
- ALPN-Verbindung (Application-Layer Protocol Negotiation)
- TLS 1.2-Verbindung oder höher
‡Kestrel bietet eingeschränkte Unterstützung für HTTP/2 unter Windows Server 2012 R2 und Windows 8.1. Die Unterstützung ist eingeschränkt, weil die Liste der unterstützten TLS-Verschlüsselungssammlungen unter diesen Betriebssystemen begrenzt ist. Zum Sichern von TLS-Verbindungen ist möglicherweise ein durch einen Elliptic Curve Digital Signature Algorithm (ECDSA) generiertes Zertifikat erforderlich.
Wenn eine HTTP/2-Verbindung hergestellt wurde, meldet HttpRequest.ProtocolHTTP/2
.
Ab .NET Core 3.0 ist HTTP/2 standardmäßig aktiviert. Weitere Informationen zur Konfiguration finden Sie in den Abschnitten Kestrel-HTTP/2-Einschränkungen und ListenOptions.Protocols.
Erweiterte HTTP/2-Features
Zusätzliche HTTP/2-Features in Kestrel zur Unterstützung von gRPC, einschließlich der Unterstützung für Antwortnachspanne und das Senden von Frames zum Zurücksetzen
Trailer
HTTP-Nachspanne ähneln den HTTP-Headers, jedoch werden sie erst gesendet, nachdem der Antworttext gesendet wurde. Für IIS und HTTP.sys werden nur HTTP/2-Antwortnachspanne unterstützt.
if (httpContext.Response.SupportsTrailers())
{
httpContext.Response.DeclareTrailer("trailername");
// Write body
httpContext.Response.WriteAsync("Hello world");
httpContext.Response.AppendTrailer("trailername", "TrailerValue");
}
Im vorherigen Beispielcode:
- stellt
SupportsTrailers
sicher, dass Nachspanne für die Antwort unterstützt werden. - fügt
DeclareTrailer
dem AntwortheaderTrailer
den angegebenen Namen für den Nachspann hinzu. Das Deklarieren des Nachspanns einer Antwort ist optional, wird jedoch empfohlen. WennDeclareTrailer
aufgerufen wird, muss der Nachspann deklariert werden, bevor Antwortheader gesendet werden. - fügt
AppendTrailer
den Nachspann an.
Reset
Durch die Option „Zurücksetzen“ kann der Server eine HTTP/2-Anforderung mit einem angegebenen Fehlercode zurücksetzen. Eine Anforderung zum Zurücksetzen wird als abgebrochen betrachtet.
var resetFeature = httpContext.Features.Get<IHttpResetFeature>();
resetFeature.Reset(errorCode: 2);
Reset
gibt im vorangehenden Codebeispiel den Fehlercode INTERNAL_ERROR
an. Weitere Informationen zu HTTP/2-Fehlercodes finden Sie im Abschnitt HTTP/2-Spezifikationsfehlercode.
HTTP/2 ist für ASP.NET Core-Apps verfügbar, wenn die folgenden Basisanforderungen erfüllt sind:
- Betriebssystem†
- Windows Server 2016/Windows 10 oder höher‡
- Linux mit OpenSSL 1.0.2 oder höher (z.B. Ubuntu 16.04 oder höher)
- Zielframework: .NET Core 2.2 oder höher
- ALPN-Verbindung (Application-Layer Protocol Negotiation)
- TLS 1.2-Verbindung oder höher
†HTTP/2 wird in einem zukünftigen Release unter macOS unterstützt. ‡Kestrel bietet eingeschränkte Unterstützung für HTTP/2 unter Windows Server 2012 R2 und Windows 8.1. Die Unterstützung ist eingeschränkt, weil die Liste der unterstützten TLS-Verschlüsselungssammlungen unter diesen Betriebssystemen begrenzt ist. Zum Sichern von TLS-Verbindungen ist möglicherweise ein durch einen Elliptic Curve Digital Signature Algorithm (ECDSA) generiertes Zertifikat erforderlich.
Wenn eine HTTP/2-Verbindung hergestellt wurde, meldet HttpRequest.ProtocolHTTP/2
.
Ab .NET Core 3.0 ist HTTP/2 standardmäßig aktiviert. Weitere Informationen zur Konfiguration finden Sie in den Abschnitten Kestrel-HTTP/2-Einschränkungen und ListenOptions.Protocols.
Erweiterte HTTP/2-Features
Zusätzliche HTTP/2-Features in Kestrel zur Unterstützung von gRPC, einschließlich der Unterstützung für Antwortnachspanne und das Senden von Frames zum Zurücksetzen
Trailer
HTTP-Nachspanne ähneln den HTTP-Headers, jedoch werden sie erst gesendet, nachdem der Antworttext gesendet wurde. Für IIS und HTTP.sys werden nur HTTP/2-Antwortnachspanne unterstützt.
if (httpContext.Response.SupportsTrailers())
{
httpContext.Response.DeclareTrailer("trailername");
// Write body
httpContext.Response.WriteAsync("Hello world");
httpContext.Response.AppendTrailer("trailername", "TrailerValue");
}
Im vorherigen Beispielcode:
- stellt
SupportsTrailers
sicher, dass Nachspanne für die Antwort unterstützt werden. - fügt
DeclareTrailer
dem AntwortheaderTrailer
den angegebenen Namen für den Nachspann hinzu. Das Deklarieren des Nachspanns einer Antwort ist optional, wird jedoch empfohlen. WennDeclareTrailer
aufgerufen wird, muss der Nachspann deklariert werden, bevor Antwortheader gesendet werden. - fügt
AppendTrailer
den Nachspann an.
Reset
Durch die Option „Zurücksetzen“ kann der Server eine HTTP/2-Anforderung mit einem angegebenen Fehlercode zurücksetzen. Eine Anforderung zum Zurücksetzen wird als abgebrochen betrachtet.
var resetFeature = httpContext.Features.Get<IHttpResetFeature>();
resetFeature.Reset(errorCode: 2);
Reset
gibt im vorangehenden Codebeispiel den Fehlercode INTERNAL_ERROR
an. Weitere Informationen zu HTTP/2-Fehlercodes finden Sie im Abschnitt HTTP/2-Spezifikationsfehlercode.
HTTP/2 ist für ASP.NET Core-Apps verfügbar, wenn die folgenden Basisanforderungen erfüllt sind:
- Betriebssystem†
- Windows Server 2016/Windows 10 oder höher‡
- Linux mit OpenSSL 1.0.2 oder höher (z.B. Ubuntu 16.04 oder höher)
- Zielframework: .NET Core 2.2 oder höher
- ALPN-Verbindung (Application-Layer Protocol Negotiation)
- TLS 1.2-Verbindung oder höher
†HTTP/2 wird in einem zukünftigen Release unter macOS unterstützt. ‡Kestrel bietet eingeschränkte Unterstützung für HTTP/2 unter Windows Server 2012 R2 und Windows 8.1. Die Unterstützung ist eingeschränkt, weil die Liste der unterstützten TLS-Verschlüsselungssammlungen unter diesen Betriebssystemen begrenzt ist. Zum Sichern von TLS-Verbindungen ist möglicherweise ein durch einen Elliptic Curve Digital Signature Algorithm (ECDSA) generiertes Zertifikat erforderlich.
Wenn eine HTTP/2-Verbindung hergestellt wurde, meldet HttpRequest.ProtocolHTTP/2
.
Ab .NET Core 3.0 ist HTTP/2 standardmäßig aktiviert. Weitere Informationen zur Konfiguration finden Sie in den Abschnitten Kestrel-HTTP/2-Einschränkungen und ListenOptions.Protocols.
Erweiterte HTTP/2-Features
Zusätzliche HTTP/2-Features in Kestrel zur Unterstützung von gRPC, einschließlich der Unterstützung für Antwortnachspanne und das Senden von Frames zum Zurücksetzen
Trailer
HTTP-Nachspanne ähneln den HTTP-Headers, jedoch werden sie erst gesendet, nachdem der Antworttext gesendet wurde. Für IIS und HTTP.sys werden nur HTTP/2-Antwortnachspanne unterstützt.
if (httpContext.Response.SupportsTrailers())
{
httpContext.Response.DeclareTrailer("trailername");
// Write body
httpContext.Response.WriteAsync("Hello world");
httpContext.Response.AppendTrailer("trailername", "TrailerValue");
}
Im vorherigen Beispielcode:
- stellt
SupportsTrailers
sicher, dass Nachspanne für die Antwort unterstützt werden. - fügt
DeclareTrailer
dem AntwortheaderTrailer
den angegebenen Namen für den Nachspann hinzu. Das Deklarieren des Nachspanns einer Antwort ist optional, wird jedoch empfohlen. WennDeclareTrailer
aufgerufen wird, muss der Nachspann deklariert werden, bevor Antwortheader gesendet werden. - fügt
AppendTrailer
den Nachspann an.
Reset
Durch die Option „Zurücksetzen“ kann der Server eine HTTP/2-Anforderung mit einem angegebenen Fehlercode zurücksetzen. Eine Anforderung zum Zurücksetzen wird als abgebrochen betrachtet.
var resetFeature = httpContext.Features.Get<IHttpResetFeature>();
resetFeature.Reset(errorCode: 2);
Reset
gibt im vorangehenden Codebeispiel den Fehlercode INTERNAL_ERROR
an. Weitere Informationen zu HTTP/2-Fehlercodes finden Sie im Abschnitt HTTP/2-Spezifikationsfehlercode.