Freigeben über


Verwenden von HTTP/3 mit dem Webserver ASP.NET Core Kestrel

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/2 auf, 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/3 verwendet 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/2 kann 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/3 Mit QUIC können Verbindungen schneller hergestellt werden, da sie Transport- und Verschlüsselungs-Handshakes kombiniert.
  • Verschlüsselung: HTTP/3 Mandatiert TLS 1.3-Verschlüsselung, die standardmäßig erweiterte Sicherheit bereitstellt, während sie in HTTP/2 optional 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/3 ermö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

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/2 auf, 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/3 verwendet 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/2 kann 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/3 Mit QUIC können Verbindungen schneller hergestellt werden, da sie Transport- und Verschlüsselungs-Handshakes kombiniert.
  • Verschlüsselung: HTTP/3 Mandatiert TLS 1.3-Verschlüsselung, die standardmäßig erweiterte Sicherheit bereitstellt, während sie in HTTP/2 optional 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/3 ermö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

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:

  1. Fügen Sie das packages.microsoft.com-Repository hinzu. Anweisungen finden Sie unter Linux Software Repository für Microsoft Products.
  2. Installieren Sie das libmsquic-Paket mithilfe des Paket-Managers der Distribution. Unter Ubuntu ist dies beispielsweise apt 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

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:

  1. Fügen Sie das packages.microsoft.com-Repository hinzu. Anweisungen finden Sie unter Linux Software Repository für Microsoft Products.
  2. Installieren Sie das libmsquic-Paket mithilfe des Paket-Managers der Distribution. Unter Ubuntu ist dies beispielsweise apt 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.

  • HttpClient kann für localhost/loopback-Tests in .NET 6 oder höher verwendet werden. Wenn Sie HttpClient verwenden, um eine HTTP/3-Anforderung zu senden, ist eine zusätzliche Konfiguration erforderlich:

    • Legen Sie HttpRequestMessage.Version auf 3.0 fest, oder:
    • Legen Sie HttpRequestMessage.VersionPolicy auf HttpVersionPolicy.RequestVersionOrHigher fest.

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:

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.