Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
Hinweis
Dies ist nicht die neueste Version dieses Artikels. Die aktuelle Version finden Sie in der .NET 10-Version dieses Artikels.
Warnung
Diese Version von ASP.NET Core wird nicht mehr unterstützt. Weitere Informationen finden Sie unter .NET und .NET Core Support Policy. Die aktuelle Version finden Sie in der .NET 10-Version dieses Artikels.
HTTP/3 ist ein anerkannter Standard und die dritte Hauptversion von HTTP. In diesem Artikel werden die Anforderungen für HTTP/3 erläutert. HTTP/3 wird in .NET 7 oder höher vollständig unterstützt.
Wichtig
Für HTTP/3 konfigurierte Apps sollten auch für die Unterstützung von HTTP/1.1 und HTTP/2 ausgelegt sein.
Vorteile von HTTP/3
HTTP/3:
- Ist die neueste Version des Hypertext Transfer Protocol.
- Baut auf den Stärken
HTTP/2auf, während einige seiner Einschränkungen behoben werden, insbesondere in Bezug auf Leistung, Latenz, Zuverlässigkeit und Sicherheit.
| Merkmal | HTTP/2 |
HTTP/3 |
|---|---|---|
| Transport | Verwendet TCP | Verwendet QUIC |
| Verbindung | Langsamer aufgrund von TCP + TLS | Kombiniert Transport- und Verschlüsselungs-Handshakes |
| Konfiguration | Händedruck | Händeschütteln |
| Kopfzeile | Beeinflusst von der TCP-Protokollebene | Mit QUIC eliminiert |
| Blockierung | Blockierung | Datenstrom-Multiplexing |
| Verschlüsselung | TLS über TCP | TLS ist in QUIC integriert |
Die wichtigsten Unterschiede zwischen HTTP/2 und HTTP/3 sind:
-
Transportprotokoll:
HTTP/3verwendet QUIC anstelle von TCP. QUIC bietet verbesserte Leistung, geringere Latenz und bessere Zuverlässigkeit, insbesondere in mobilen und verlustbehafteten Netzwerken. -
Head-of-Line Blocking:
HTTP/2kann durch Head-of-Line-Blockierung auf TCP-Ebene leiden, wobei sich eine Verzögerung in einem Datenstrom auf andere auswirken kann.HTTP/3, mit QUIC, stellt unabhängige Datenströme bereit, so dass der Paketverlust in einem Datenstrom die anderen Datenströme nicht beeinträchtigt. -
Verbindungseinrichtung:
HTTP/3Mit QUIC können Verbindungen schneller hergestellt werden, da sie Transport- und Verschlüsselungs-Handshakes kombiniert. -
Verschlüsselung:
HTTP/3Mandatiert TLS 1.3-Verschlüsselung, die standardmäßig erweiterte Sicherheit bereitstellt, während sie inHTTP/2optional ist. - Multiplexing: Während beide Multiplexing unterstützen, ist die Implementierung von mit QUIC effizienter und vermeidet Head-of-Line-Blockierungsprobleme auf TCP-Ebene.
-
Verbindungsmigration: QUIC in
HTTP/3ermöglicht das Beibehalten von Verbindungen auch dann, wenn sich die IP-Adresse eines Clients ändert (z. B. wechselt von Wi-Fi zu Mobilfunk), wodurch die Benutzerfreundlichkeit mobiler Geräte verbessert wird.
Frühe Anforderungsverarbeitung
Kestrel kann HTTP/3-Anforderungen verarbeiten, ohne zuerst auf den Steuerelementdatenstrom und den anfänglichen SETTINGS-Frame zu warten. Diese Optimierung reduziert die Latenz der ersten Anforderung für neue HTTP/3-Verbindungen.
In ASP.NET Core-Versionen vor .NET 11 wartete Kestrel auf den Empfang des QUIC-Steuerdatenstroms und des anfänglichen SETTINGS-Frames, bevor Anforderungsdatenströme verarbeitet werden. Diese Anforderung ist nicht mehr erforderlich, was bedeutet, dass die erste Anforderung für eine neue Verbindung schneller abgeschlossen wird.
HTTP/3-Anforderungen
HTTP/3 verwendet QUIC als Transportprotokoll. Die ASP.NET Core Implementierung von HTTP/3 hängt von MsQuic ab, um QUIC-Funktionen bereitzustellen. Daher hängt ASP.NET Core Unterstützung von HTTP/3 von msQuic-Plattformanforderungen ab. Weitere Informationen zum Installieren von MsQuic finden Sie unter QUIC Platform-Abhängigkeiten. Wenn die plattform, auf der ausgeführt wird, Kestrel nicht über alle Anforderungen für HTTP/3 verfügt, Kestrel deaktiviert HTTP/3 und greift auf andere HTTP-Protokolle zurück.
Erste Schritte
HTTP/3 ist standardmäßig nicht aktiviert. Fügen Sie die Konfiguration zu Program.cs hinzu, um HTTP/3 zu aktivieren.
var builder = WebApplication.CreateBuilder(args);
builder.WebHost.ConfigureKestrel((context, options) =>
{
options.ListenAnyIP(5001, listenOptions =>
{
listenOptions.Protocols = HttpProtocols.Http1AndHttp2AndHttp3;
listenOptions.UseHttps();
});
});
Mit dem vorangehenden Code wird Port 5001 für Folgendes konfiguriert:
- Verwenden von HTTP/3 zusammen mit HTTP/1.1 und HTTP/2 durch Angeben von
HttpProtocols.Http1AndHttp2AndHttp3 - Aktivieren Sie HTTPS mithilfe von
UseHttps. HTTP/3 erfordert HTTPS.
Da nicht alle Router, Firewalls und Proxys HTTP/3 ordnungsgemäß unterstützen, konfigurieren Sie HTTP/3 zusammen mit HTTP/1.1 und HTTP/2. Geben Sie HttpProtocols.Http1AndHttp2AndHttp3 als unterstützte Protokolle eines Endpunkts an.
Weitere Informationen finden Sie unter Configure-Endpunkte für den ASP.NET Core Kestrel Webserver.
Konfigurieren von QuicTransportOptions
Konfigurieren Sie QUIC-Transportoptionen durch Aufrufen der UseQuic Erweiterungsmethode für IWebHostBuilder.
var builder = WebApplication.CreateBuilder(args);
builder.WebHost.UseQuic(options =>
{
#pragma warning disable CA2252 // Using preview features
options.MaxBidirectionalStreamCount = 200;
#pragma warning restore CA2252
});
builder.WebHost.ConfigureKestrel((context, serverOptions) =>
{
serverOptions.ListenAnyIP(5001, listenOptions =>
{
listenOptions.Protocols = HttpProtocols.Http1AndHttp2AndHttp3;
listenOptions.UseHttps();
});
});
In der folgenden Tabelle werden die verfügbaren QuicTransportOptions beschrieben.
| Option | Standard | Description |
|---|---|---|
| MaxBidirectionalStreamCount | 100 |
Die maximale Anzahl gleichzeitiger bidirektionaler Datenströme pro Verbindung. |
| MaxUnidirectionalStreamCount | 10 |
Die maximale Anzahl gleichzeitiger unidirektionaler Datenströme pro Verbindung. |
| MaxReadBufferSize |
1024 * 1024 (1 MB) |
Die maximale Lesepuffergröße in Byte. |
| MaxWriteBufferSize |
64 * 1024 (64 KB) |
Die maximale Schreibpuffergröße in Byte. |
| Backlog | 512 |
Die maximale Länge der ausstehenden Verbindungswarteschlange. |
| DefaultStreamErrorCode |
0x010c (H3_ANFRAGE_STORNIERT) |
Fehlercode, der verwendet wird, wenn der Datenstrom die Lese- oder Schreibseite des Datenstroms intern abbrechen soll. |
| DefaultCloseErrorCode |
0x100 (H3_NO_ERROR) |
Fehlercode, der verwendet wird, wenn eine geöffnete Verbindung geschlossen wird. |
Alt-svc
HTTP/3 wird anhand des Headers alt-svc als Upgrade von HTTP/1.1 oder HTTP/2 erkannt. Das bedeutet, dass die erste Anforderung normalerweise HTTP/1.1 oder HTTP/2 verwendet, bevor der Wechsel zu HTTP/3 erfolgt.
Kestrel fügt den Header alt-svc automatisch hinzu, wenn HTTP/3 aktiviert ist.
Localhost-Testen
Browser unterstützen keine selbstsignierten Zertifikate unter HTTP/3, z. B. das Kestrel Entwicklungszertifikat.
Verwenden Sie
HttpClientfür Localhost- oder Loopbacktests in .NET 6 oder höher. Wenn Sie eine HTTP/3-Anforderung mitHttpClienterstellen, benötigen Sie zusätzliche Konfigurationen.- Legen Sie
HttpRequestMessage.Versionauf 3.0 fest, oder: - Legen Sie
HttpRequestMessage.VersionPolicyaufHttpVersionPolicy.RequestVersionOrHigherfest.
- Legen Sie
Weitere Informationen zur Verwendung von HTTP/3 mit HttpClient finden Sie unter HTTP/3 mit .NET.
HTTP/3 ist ein anerkannter Standard und die dritte Hauptversion von HTTP. In diesem Artikel werden die Anforderungen für HTTP/3 erläutert. HTTP/3 wird in .NET 7 oder höher vollständig unterstützt.
Wichtig
Für HTTP/3 konfigurierte Apps sollten auch für die Unterstützung von HTTP/1.1 und HTTP/2 ausgelegt sein.
Vorteile von HTTP/3
HTTP/3:
- Ist die neueste Version des Hypertext Transfer Protocol.
- Baut auf den Stärken
HTTP/2auf, während einige seiner Einschränkungen behoben werden, insbesondere in Bezug auf Leistung, Latenz, Zuverlässigkeit und Sicherheit.
| Merkmal | HTTP/2 |
HTTP/3 |
|---|---|---|
| Transport | Verwendet TCP | Verwendet QUIC |
| Verbindung | Langsamer aufgrund von TCP + TLS | Kombiniert Transport- und Verschlüsselungs-Handshakes |
| Konfiguration | Händedruck | Händeschütteln |
| Kopfzeile | Beeinflusst von der TCP-Protokollebene | Mit QUIC eliminiert |
| Blockierung | Blockierung | Datenstrom-Multiplexing |
| Verschlüsselung | TLS über TCP | TLS ist in QUIC integriert |
Die wichtigsten Unterschiede zwischen HTTP/2 und HTTP/3 sind:
-
Transportprotokoll:
HTTP/3verwendet QUIC anstelle von TCP. QUIC bietet verbesserte Leistung, geringere Latenz und bessere Zuverlässigkeit, insbesondere in mobilen und verlustbehafteten Netzwerken. -
Head-of-Line Blocking:
HTTP/2kann durch Head-of-Line-Blockierung auf TCP-Ebene leiden, wobei sich eine Verzögerung in einem Datenstrom auf andere auswirken kann.HTTP/3, mit QUIC, stellt unabhängige Datenströme bereit, so dass der Paketverlust in einem Datenstrom die anderen Datenströme nicht beeinträchtigt. -
Verbindungseinrichtung:
HTTP/3Mit QUIC können Verbindungen schneller hergestellt werden, da sie Transport- und Verschlüsselungs-Handshakes kombiniert. -
Verschlüsselung:
HTTP/3Mandatiert TLS 1.3-Verschlüsselung, die standardmäßig erweiterte Sicherheit bereitstellt, während sie inHTTP/2optional ist. - Multiplexing: Während beide Multiplexing unterstützen, ist die Implementierung von mit QUIC effizienter und vermeidet Head-of-Line-Blockierungsprobleme auf TCP-Ebene.
-
Verbindungsmigration: QUIC in
HTTP/3ermöglicht das Beibehalten von Verbindungen auch dann, wenn sich die IP-Adresse eines Clients ändert (z. B. wechselt von Wi-Fi zu Mobilfunk), wodurch die Benutzerfreundlichkeit mobiler Geräte verbessert wird.
HTTP/3-Anforderungen
HTTP/3 verwendet QUIC als Transportprotokoll. Die ASP.NET Core Implementierung von HTTP/3 hängt von MsQuic ab, um QUIC-Funktionen bereitzustellen. Daher hängt ASP.NET Core Unterstützung von HTTP/3 von msQuic-Plattformanforderungen ab. Weitere Informationen zum Installieren von MsQuic finden Sie unter QUIC Platform-Abhängigkeiten. Wenn die Plattform, auf der Kestrel ausgeführt wird, nicht über all die Anforderungen für HTTP/3 verfügt, ist HTTP/3 deaktiviert, und für Kestrel wird ein Fallback auf andere HTTP-Protokolle durchgeführt.
Erste Schritte
HTTP/3 ist nicht standardmäßig aktiviert. Fügen Sie die Konfiguration zu Program.cs hinzu, um HTTP/3 zu aktivieren.
var builder = WebApplication.CreateBuilder(args);
builder.WebHost.ConfigureKestrel((context, options) =>
{
options.ListenAnyIP(5001, listenOptions =>
{
listenOptions.Protocols = HttpProtocols.Http1AndHttp2AndHttp3;
listenOptions.UseHttps();
});
});
Mit dem vorangehenden Code wird Port 5001 für Folgendes konfiguriert:
- Verwenden von HTTP/3 zusammen mit HTTP/1.1 und HTTP/2 durch Angeben von
HttpProtocols.Http1AndHttp2AndHttp3 - Aktivieren von HTTPS mit
UseHttps. HTTP/3 erfordert HTTPS.
Da HTTP/3 nicht von allen Routern, Firewalls und Proxys ordnungsgemäß unterstützt wird, sollte HTTP/3 zusammen mit HTTP/1.1 und HTTP/2 konfiguriert werden. Dazu kann HttpProtocols.Http1AndHttp2AndHttp3 als unterstütztes Protokoll eines Endpunkts angegeben werden.
Weitere Informationen finden Sie unter Configure-Endpunkte für den ASP.NET Core Kestrel Webserver.
Konfigurieren von QuicTransportOptions
QUIC-Transportoptionen können durch Aufrufen der UseQuic-Erweiterungsmethode auf IWebHostBuilder konfiguriert werden.
var builder = WebApplication.CreateBuilder(args);
builder.WebHost.UseQuic(options =>
{
#pragma warning disable CA2252 // Using preview features
options.MaxBidirectionalStreamCount = 200;
#pragma warning restore CA2252
});
builder.WebHost.ConfigureKestrel((context, serverOptions) =>
{
serverOptions.ListenAnyIP(5001, listenOptions =>
{
listenOptions.Protocols = HttpProtocols.Http1AndHttp2AndHttp3;
listenOptions.UseHttps();
});
});
Eine vollständige Liste der verfügbaren QUIC-Transportoptionen und deren Beschreibungen finden Sie unter QuicTransportOptions.
Alt-svc
HTTP/3 wird anhand des Headers alt-svc als Upgrade von HTTP/1.1 oder HTTP/2 erkannt. Das bedeutet, dass die erste Anforderung normalerweise HTTP/1.1 oder HTTP/2 verwendet, bevor der Wechsel zu HTTP/3 erfolgt.
Kestrel fügt den Header alt-svc automatisch hinzu, wenn HTTP/3 aktiviert ist.
Localhost-Testen
Browser lassen keine selbstsignierten Zertifikate für HTTP/3 zu, z. B. das Kestrel-Entwicklungszertifikat.
HttpClientkann für localhost/loopback-Tests in .NET 6 oder höher verwendet werden. Wenn SieHttpClientverwenden, um eine HTTP/3-Anforderung zu senden, ist eine zusätzliche Konfiguration erforderlich:- Legen Sie
HttpRequestMessage.Versionauf 3.0 fest, oder: - Legen Sie
HttpRequestMessage.VersionPolicyaufHttpVersionPolicy.RequestVersionOrHigherfest.
- Legen Sie
Weitere Informationen zur Verwendung von HTTP/3 mit HttpClient finden Sie unter HTTP/3 mit .NET.
HTTP/3 ist ein vorgeschlagener Standard und die dritte Hauptversion von HTTP. In diesem Artikel werden die Anforderungen für HTTP/3 erläutert. HTTP/3 wird in .NET 7 oder höher vollständig unterstützt.
Wichtig
Für HTTP/3 konfigurierte Apps sollten auch für die Unterstützung von HTTP/1.1 und HTTP/2 ausgelegt sein.
HTTP/3-Anforderungen
HTTP/3 hat je nach Betriebssystem unterschiedliche Anforderungen. Wenn die Plattform, auf der Kestrel ausgeführt wird, nicht über all die Anforderungen für HTTP/3 verfügt, ist HTTP/3 deaktiviert, und für Kestrel wird ein Fallback auf andere HTTP-Protokolle durchgeführt.
Windows
- Windows 11 Build 22000 oder höher ODER Windows Server 2022.
- TLS 1.3-Verbindung oder höher.
Linux
- Das
libmsquic-Paket ist installiert.
libmsquic wird über das offizielle Linux-Paket-Repository von Microsoft unter packages.microsoft.com veröffentlicht. So installieren Sie das Paket:
- Fügen Sie das
packages.microsoft.com-Repository hinzu. Anweisungen finden Sie unter Linux Software Repository für Microsoft Products. - Installieren Sie das
libmsquic-Paket mithilfe des Paket-Managers der Distribution. Unter Ubuntu ist dies beispielsweiseapt install libmsquic=1.9*.
Note: .NET 6 ist nur mit den 1.9.x-Versionen von libmsquic kompatibel. Libmsquic 2.x ist aufgrund von einschneidenden Änderungen nicht kompatibel. Libmsquic empfängt Updates auf 1.9.x, wenn Sicherheitskorrekturen integriert werden müssen.
macOS
HTTP/3 wird derzeit unter macOS nicht unterstützt, möglicherweise ist es in einer zukünftigen Version verfügbar.
Erste Schritte
HTTP/3 ist nicht standardmäßig aktiviert. Fügen Sie die Konfiguration zu Program.cs hinzu, um HTTP/3 zu aktivieren.
var builder = WebApplication.CreateBuilder(args);
builder.WebHost.ConfigureKestrel((context, options) =>
{
options.ListenAnyIP(5001, listenOptions =>
{
listenOptions.Protocols = HttpProtocols.Http1AndHttp2AndHttp3;
listenOptions.UseHttps();
});
});
Mit dem vorangehenden Code wird Port 5001 für Folgendes konfiguriert:
- Verwenden von HTTP/3 zusammen mit HTTP/1.1 und HTTP/2 durch Angeben von
HttpProtocols.Http1AndHttp2AndHttp3 - Aktivieren von HTTPS mit
UseHttps. HTTP/3 erfordert HTTPS.
Da HTTP/3 nicht von allen Routern, Firewalls und Proxys ordnungsgemäß unterstützt wird, sollte HTTP/3 zusammen mit HTTP/1.1 und HTTP/2 konfiguriert werden. Dazu kann HttpProtocols.Http1AndHttp2AndHttp3 als unterstütztes Protokoll eines Endpunkts angegeben werden.
Weitere Informationen finden Sie unter Configure-Endpunkte für den ASP.NET Core Kestrel Webserver.
Alt-svc
HTTP/3 wird anhand des Headers alt-svc als Upgrade von HTTP/1.1 oder HTTP/2 erkannt. Das bedeutet, dass die erste Anforderung normalerweise HTTP/1.1 oder HTTP/2 verwendet, bevor der Wechsel zu HTTP/3 erfolgt.
Kestrel fügt den Header alt-svc automatisch hinzu, wenn HTTP/3 aktiviert ist.
Localhost-Testen
Browser lassen keine selbstsignierten Zertifikate für HTTP/3 zu, z. B. das Kestrel-Entwicklungszertifikat.
HttpClientkann für localhost/loopback-Tests in .NET 6 oder höher verwendet werden. Wenn SieHttpClientverwenden, um eine HTTP/3-Anforderung zu senden, ist eine zusätzliche Konfiguration erforderlich:- Legen Sie
HttpRequestMessage.Versionauf 3.0 fest, oder: - Legen Sie
HttpRequestMessage.VersionPolicyaufHttpVersionPolicy.RequestVersionOrHigherfest.
- Legen Sie
Vorteile von HTTP/3
HTTP/3 verwendet die gleiche Semantik wie HTTP/1.1 und HTTP/2: Alle Versionen verwenden die gleichen Anforderungsmethoden, Statuscodes und Nachrichtenfelder. Die Unterschiede bestehen im zugrunde liegenden Transport. Sowohl HTTP/1.1 als auch HTTP/2 verwenden TCP für den Datentransport. HTTP/3 verwendet eine neue Datentransporttechnologie, die parallel zu HTTP/3 entwickelt wurde und QUIC heißt.
HTTP/3 und QUIC bieten im Vergleich zu HTTP/1.1 und HTTP/2 eine Reihe von Vorteilen:
- Schnellere Antwortzeit der ersten Anforderung. QUIC und HTTP/3 handeln die Verbindung in weniger Roundtrips zwischen dem Client und dem Server aus. Die erste Anforderung erreicht den Server schneller.
- Verbesserte Benutzererfahrung bei Paketverlusten in der Verbindung. HTTP/2 führt Multiplexing für mehrere Aufrufe über eine einzige TCP-Verbindung aus. Paketverlust bei der Verbindung betrifft alle Anfragen. Dieses Problem wird als „Blockierung durch den Anfang der Schlange“ bezeichnet. Da QUIC natives Multiplexing bietet, wirken sich verlorene Pakete nur auf die Anforderungen aus, bei denen Daten verloren gegangen sind.
- Unterstützt den Übergang zwischen Netzwerken. Dieses Feature ist nützlich für mobile Geräte, bei denen ein Wechsel zwischen WLAN und Mobilfunknetzwerken üblich ist, wenn ein mobiles Gerät den Standort ändert. Derzeit tritt bei HTTP/1.1- und HTTP/2-Verbindungen beim Wechsel des Netzwerks ein Fehler auf. Eine App oder ein Webbrowser muss alle fehlgeschlagenen HTTP-Anforderungen wiederholen. Bei HTTP/3 kann die App oder der Webbrowser nahtlos fortfahren, wenn sich ein Netzwerk ändert. Kestrel unterstützt keine Netzwerkübergänge in .NET 6. Möglicherweise wird dies in einem zukünftigen Release unterstützt.
HTTP/3 ist die dritte und kommende Hauptversion von HTTP. In diesem Artikel werden die Anforderungen für HTTP/3 und die Konfiguration von Kestrel für die Verwendung von HTTP/3 erläutert.
Wichtig
HTTP/3 ist in .NET 6 als Preview-Feature verfügbar. Die HTTP/3-Spezifikation ist nicht abgeschlossen, und Verhaltens- oder Leistungsprobleme können in HTTP/3 mit .NET 6 vorhanden sein.
Weitere Informationen zur Unterstützung von Vorschaufunktionen finden Sie im Abschnitt Unterstützte Vorschaufunktionen.
Für HTTP/3 konfigurierte Apps sollten auch für die Unterstützung von HTTP/1.1 und HTTP/2 ausgelegt sein. Wenn Probleme in HTTP/3 identifiziert werden, empfehlen wir, HTTP/3 zu deaktivieren, bis die Probleme in einer zukünftigen Version von ASP.NET Core behoben werden. Wichtige Probleme werden beim Announcements GitHub Repository gemeldet.
HTTP/3-Anforderungen
HTTP/3 hat je nach Betriebssystem unterschiedliche Anforderungen. Wenn die Plattform, auf der Kestrel ausgeführt wird, nicht über all die Anforderungen für HTTP/3 verfügt, ist HTTP/3 deaktiviert, und für Kestrel wird ein Fallback auf andere HTTP-Protokolle durchgeführt.
Windows
- Windows 11 Build 22000 oder höher ODER Windows Server 2022.
- TLS 1.3-Verbindung oder höher.
Linux
- Das
libmsquic-Paket ist installiert.
libmsquic wird über das offizielle Linux-Paket-Repository von Microsoft unter packages.microsoft.com veröffentlicht. So installieren Sie das Paket:
- Fügen Sie das
packages.microsoft.com-Repository hinzu. Anweisungen finden Sie unter Linux Software Repository für Microsoft Products. - Installieren Sie das
libmsquic-Paket mithilfe des Paket-Managers der Distribution. Unter Ubuntu ist dies beispielsweiseapt install libmsquic=1.9*.
Note: .NET 6 ist nur mit den 1.9.x-Versionen von libmsquic kompatibel. Libmsquic 2.x ist aufgrund von einschneidenden Änderungen nicht kompatibel. Libmsquic empfängt Updates auf 1.9.x, wenn Sicherheitskorrekturen integriert werden müssen.
macOS
HTTP/3 wird derzeit unter macOS nicht unterstützt, möglicherweise ist es in einer zukünftigen Version verfügbar.
Erste Schritte
HTTP/3 ist nicht standardmäßig aktiviert. Fügen Sie die Konfiguration zu Program.cs hinzu, um HTTP/3 zu aktivieren.
var builder = WebApplication.CreateBuilder(args);
builder.WebHost.ConfigureKestrel((context, options) =>
{
options.ListenAnyIP(5001, listenOptions =>
{
listenOptions.Protocols = HttpProtocols.Http1AndHttp2AndHttp3;
listenOptions.UseHttps();
});
});
Mit dem vorangehenden Code wird Port 5001 für Folgendes konfiguriert:
- Verwenden von HTTP/3 zusammen mit HTTP/1.1 und HTTP/2 durch Angeben von
HttpProtocols.Http1AndHttp2AndHttp3 - Aktivieren von HTTPS mit
UseHttps. HTTP/3 erfordert HTTPS.
Da HTTP/3 nicht von allen Routern, Firewalls und Proxys ordnungsgemäß unterstützt wird, sollte HTTP/3 zusammen mit HTTP/1.1 und HTTP/2 konfiguriert werden. Dazu kann HttpProtocols.Http1AndHttp2AndHttp3 als unterstütztes Protokoll eines Endpunkts angegeben werden.
Weitere Informationen finden Sie unter Configure-Endpunkte für den ASP.NET Core Kestrel Webserver.
Alt-svc
HTTP/3 wird anhand des Headers alt-svc als Upgrade von HTTP/1.1 oder HTTP/2 erkannt. Das bedeutet, dass die erste Anforderung normalerweise HTTP/1.1 oder HTTP/2 verwendet, bevor der Wechsel zu HTTP/3 erfolgt.
Kestrel fügt den Header alt-svc automatisch hinzu, wenn HTTP/3 aktiviert ist.
Localhost-Testen
Browser lassen keine selbstsignierten Zertifikate für HTTP/3 zu, z. B. das Kestrel-Entwicklungszertifikat.
HttpClientkann für localhost/loopback-Tests in .NET 6 oder höher verwendet werden. Wenn SieHttpClientverwenden, um eine HTTP/3-Anforderung zu senden, ist eine zusätzliche Konfiguration erforderlich:- Legen Sie
HttpRequestMessage.Versionauf 3.0 fest, oder: - Legen Sie
HttpRequestMessage.VersionPolicyaufHttpVersionPolicy.RequestVersionOrHigherfest.
- Legen Sie
Einschränkungen
Einige HTTPS-Szenarios werden für HTTP/3 in Kestrel noch nicht unterstützt. Beim Aufrufen von Microsoft.AspNetCore.Hosting.ListenOptionsHttpsExtensions.UseHttps mit HttpsConnectionAdapterOptions bei Verwendung von HTTP/3 ist das Festlegen der folgenden Optionen für die HttpsConnectionAdapterOptions ein no-op (es macht nichts):
Wenn Sie die folgenden Implementierungen von Microsoft.AspNetCore.Hosting.ListenOptionsHttpsExtensions.UseHttps aufrufen, wird bei Verwendung von HTTP/3 ein Fehler ausgelöst:
- Verwenden Sie Https(this ListenOptions listenOptions, ServerOptionsSelectionCallback serverOptionsSelectionCallback, object state, TimeSpan handshakeTimeout)
- UseHttps(this ListenOptions listenOptions, TlsHandshakeCallbackOptions callbackOptions)
Vorteile von HTTP/3
HTTP/3 verwendet die gleiche Semantik wie HTTP/1.1 und HTTP/2: Alle Versionen verwenden die gleichen Anforderungsmethoden, Statuscodes und Nachrichtenfelder. Die Unterschiede bestehen im zugrunde liegenden Transport. Sowohl HTTP/1.1 als auch HTTP/2 verwenden TCP für den Datentransport. HTTP/3 verwendet eine neue Datentransporttechnologie, die parallel zu HTTP/3 entwickelt wurde und QUIC heißt.
HTTP/3 und QUIC bieten im Vergleich zu HTTP/1.1 und HTTP/2 eine Reihe von Vorteilen:
- Schnellere Antwortzeit der ersten Anforderung. QUIC und HTTP/3 handeln die Verbindung in weniger Roundtrips zwischen dem Client und dem Server aus. Die erste Anforderung erreicht den Server schneller.
- Verbesserte Benutzererfahrung bei Paketverlusten in der Verbindung. HTTP/2 führt Multiplexing für mehrere Aufrufe über eine einzige TCP-Verbindung aus. Paketverlust bei der Verbindung betrifft alle Anfragen. Dieses Problem wird als „Blockierung durch den Anfang der Schlange“ bezeichnet. Da QUIC natives Multiplexing bietet, wirken sich verlorene Pakete nur auf die Anforderungen aus, bei denen Daten verloren gegangen sind.
- Unterstützt den Übergang zwischen Netzwerken. Dieses Feature ist nützlich für mobile Geräte, bei denen ein Wechsel zwischen WLAN und Mobilfunknetzwerken üblich ist, wenn ein mobiles Gerät den Standort ändert. Derzeit tritt bei HTTP/1.1- und HTTP/2-Verbindungen beim Wechsel des Netzwerks ein Fehler auf. Eine App oder ein Webbrowser muss alle fehlgeschlagenen HTTP-Anforderungen wiederholen. Bei HTTP/3 kann die App oder der Webbrowser nahtlos fortfahren, wenn sich ein Netzwerk ändert. Kestrel unterstützt keine Netzwerkübergänge in .NET 6. Möglicherweise wird dies in einem zukünftigen Release unterstützt.