Použití protokolu HTTP/3 s webovým serverem ASP.NET Core Kestrel
Poznámka:
Toto není nejnovější verze tohoto článku. Aktuální verzi najdete v tomto článku ve verzi .NET 9.
Upozorňující
Tato verze ASP.NET Core se už nepodporuje. Další informace najdete v zásadách podpory .NET a .NET Core. Aktuální verzi najdete v tomto článku ve verzi .NET 9.
Důležité
Tyto informace se týkají předběžného vydání produktu, který může být podstatně změněn před komerčním vydáním. Microsoft neposkytuje žádné záruky, výslovné ani předpokládané, týkající se zde uváděných informací.
Aktuální verzi najdete v tomto článku ve verzi .NET 9.
HTTP/3 je schválený standard a třetí hlavní verze HTTP. Tento článek popisuje požadavky na HTTP/3. PROTOKOL HTTP/3 je plně podporovaný ve verzi ASP.NET Core 7.0 a novější.
Důležité
Aplikace nakonfigurované tak, aby využívaly výhod protokolu HTTP/3, by měly být navržené tak, aby podporovaly také PROTOKOL HTTP/1.1 a HTTP/2.
Požadavky HTTP/3
PROTOKOL HTTP/3 má různé požadavky v závislosti na operačním systému. Pokud platforma, na které Kestrel běží, nemá všechny požadavky na HTTP/3, je zakázaná a Kestrel vrátí se k jiným protokolům HTTP.
Windows
- Windows 11 Build 22000 nebo novější nebo Windows Server 2022.
- Připojení TLS 1.3 nebo novější
Linux
libmsquic
nainstalován balíček.
libmsquic
se publikuje prostřednictvím oficiálního úložiště balíčků Pro Linux od Microsoftu na adrese packages.microsoft.com
. Instalace tohoto balíčku:
packages.microsoft.com
Přidejte úložiště. Pokyny najdete v úložišti softwaru pro Linux pro produkty Microsoft.libmsquic
Nainstalujte balíček pomocí správce balíčků distribuce. Napříkladapt install libmsquic=1.9*
na Ubuntu.
Poznámka: .NET 6 je kompatibilní pouze s verzemi 1.9.x libmsquic. Knihovna Libmsquic 2.x není kompatibilní kvůli zásadním změnám. Knihovna Libmsquic obdrží aktualizace na verzi 1.9.x, pokud je potřeba začlenit opravy zabezpečení.
macOS
Http/3 se v současné době v macOS nepodporuje a může být k dispozici v budoucí verzi.
Začínáme
Protokol HTTP/3 není ve výchozím nastavení povolený. Přidejte konfiguraci pro Program.cs
povolení protokolu HTTP/3.
var builder = WebApplication.CreateBuilder(args);
builder.WebHost.ConfigureKestrel((context, options) =>
{
options.ListenAnyIP(5001, listenOptions =>
{
listenOptions.Protocols = HttpProtocols.Http1AndHttp2AndHttp3;
listenOptions.UseHttps();
});
});
Předchozí kód nakonfiguruje port 5001 na:
- Pomocí příkazu HTTP/3 spolu s protokolem HTTP/1.1 a HTTP/2 zadejte
HttpProtocols.Http1AndHttp2AndHttp3
. - Povolte HTTPS pomocí
UseHttps
. HTTP/3 vyžaduje HTTPS.
Vzhledem k tomu, že ne všechny směrovače, brány firewall a proxy servery správně podporují protokol HTTP/3, měl by být protokol HTTP/3 nakonfigurovaný společně s protokolem HTTP/1.1 a HTTP/2. Můžete to provést zadáním HttpProtocols.Http1AndHttp2AndHttp3
podporovaných protokolů koncového bodu.
Další informace najdete v tématu Konfigurace koncových bodů pro webový server ASP.NET CoreKestrel.
Alt-svc
Http/3 se zjistí jako upgrade z HTTP/1.1 nebo HTTP/2 prostřednictvím hlavičky alt-svc
. To znamená, že první požadavek bude před přepnutím na HTTP/3 normálně používat HTTP/1.1 nebo HTTP/2. Kestrel automaticky přidá hlavičku alt-svc
, pokud je povolený protokol HTTP/3.
Testování místního hostitele
Prohlížeče neumožňují certifikáty podepsané svým držitelem v protokolu HTTP/3, jako Kestrel je například vývojový certifikát.
HttpClient
lze použít pro testování localhost/loopback v .NET 6 nebo novější. Při použitíHttpClient
k vytvoření požadavku HTTP/3 se vyžaduje další konfigurace:- Nastavit
HttpRequestMessage.Version
na hodnotu 3.0 nebo - Nastavte
HttpRequestMessage.VersionPolicy
na hodnotuHttpVersionPolicy.RequestVersionOrHigher
.
- Nastavit
Výhody HTTP/3
Http/3 používá stejnou sémantiku jako HTTP/1.1 a HTTP/2: stejné metody požadavků, stavové kódy a pole zpráv platí pro všechny verze. Rozdíly jsou v podkladové dopravě. Protokol HTTP/1.1 i HTTP/2 používají jako přenos protokol TCP. HTTP/3 používá novou transportní technologii vyvinutou společně s protokolem HTTP/3 s názvem QUIC.
HTTP/3 a QUIC mají v porovnání s HTTP/1.1 a HTTP/2 řadu výhod:
- Rychlejší doba odezvy prvního požadavku QUIC a HTTP/3 vyjednávají připojení v menším počtu odezv mezi klientem a serverem. První požadavek dosáhne serveru rychleji.
- Vylepšené prostředí, když dojde ke ztrátě paketů připojení. Http/2 multiplexes multiplexes multiple requests via one TCP connection. Ztráta paketů v připojení má vliv na všechny požadavky. Tento problém se nazývá "head-of-line blocking". Vzhledem k tomu, že QUIC poskytuje nativní multiplexování, ztracené pakety mají vliv pouze na požadavky, u kterých došlo ke ztrátě dat.
- Podporuje přechod mezi sítěmi. Tato funkce je užitečná pro mobilní zařízení, kde je běžné přepínat mezi WI-FI a mobilními sítěmi, protože mobilní zařízení mění umístění. V současné době připojení HTTP/1.1 a HTTP/2 selžou s chybou při přepínání sítí. Aplikace nebo webové prohlížeče musí opakovat všechny neúspěšné požadavky HTTP. HTTP/3 umožňuje aplikaci nebo webovému prohlížeči bezproblémově pokračovat, když dojde ke změně sítě. Kestrel nepodporuje přechody sítě v .NET 8. Může být k dispozici v budoucí verzi.
HTTP/3 je navržený standard a třetí hlavní verze HTTP. Tento článek popisuje požadavky na HTTP/3. PROTOKOL HTTP/3 je plně podporovaný ve verzi ASP.NET Core 7.0 a novější.
Důležité
Aplikace nakonfigurované tak, aby využívaly výhod protokolu HTTP/3, by měly být navržené tak, aby podporovaly také PROTOKOL HTTP/1.1 a HTTP/2.
Požadavky HTTP/3
PROTOKOL HTTP/3 má různé požadavky v závislosti na operačním systému. Pokud platforma, na které Kestrel běží, nemá všechny požadavky na HTTP/3, je zakázaná a Kestrel bude se vysunout do jiných protokolů HTTP.
Windows
- Windows 11 Build 22000 nebo novější nebo Windows Server 2022.
- Připojení TLS 1.3 nebo novější
Linux
libmsquic
nainstalován balíček.
libmsquic
se publikuje prostřednictvím oficiálního úložiště balíčků Pro Linux od Microsoftu na adrese packages.microsoft.com
. Instalace tohoto balíčku:
packages.microsoft.com
Přidejte úložiště. Pokyny najdete v úložišti softwaru pro Linux pro produkty Microsoft.libmsquic
Nainstalujte balíček pomocí správce balíčků distribuce. Napříkladapt install libmsquic=1.9*
na Ubuntu.
Poznámka: .NET 6 je kompatibilní pouze s verzemi 1.9.x libmsquic. Knihovna Libmsquic 2.x není kompatibilní kvůli zásadním změnám. Knihovna Libmsquic obdrží aktualizace na verzi 1.9.x, pokud je potřeba začlenit opravy zabezpečení.
macOS
Http/3 se v současné době v macOS nepodporuje a může být k dispozici v budoucí verzi.
Začínáme
Protokol HTTP/3 není ve výchozím nastavení povolený. Přidejte konfiguraci pro Program.cs
povolení protokolu HTTP/3.
var builder = WebApplication.CreateBuilder(args);
builder.WebHost.ConfigureKestrel((context, options) =>
{
options.ListenAnyIP(5001, listenOptions =>
{
listenOptions.Protocols = HttpProtocols.Http1AndHttp2AndHttp3;
listenOptions.UseHttps();
});
});
Předchozí kód nakonfiguruje port 5001 na:
- Pomocí příkazu HTTP/3 spolu s protokolem HTTP/1.1 a HTTP/2 zadejte
HttpProtocols.Http1AndHttp2AndHttp3
. - Povolte HTTPS pomocí
UseHttps
. HTTP/3 vyžaduje HTTPS.
Vzhledem k tomu, že ne všechny směrovače, brány firewall a proxy servery správně podporují protokol HTTP/3, měl by být protokol HTTP/3 nakonfigurovaný společně s protokolem HTTP/1.1 a HTTP/2. Můžete to provést zadáním HttpProtocols.Http1AndHttp2AndHttp3
podporovaných protokolů koncového bodu.
Další informace najdete v tématu Konfigurace koncových bodů pro webový server ASP.NET CoreKestrel.
Alt-svc
Http/3 se zjistí jako upgrade z HTTP/1.1 nebo HTTP/2 prostřednictvím hlavičky alt-svc
. To znamená, že první požadavek bude před přepnutím na HTTP/3 normálně používat HTTP/1.1 nebo HTTP/2. Kestrel automaticky přidá hlavičku alt-svc
, pokud je povolený protokol HTTP/3.
Testování místního hostitele
Prohlížeče neumožňují certifikáty podepsané svým držitelem na adrese HTTP/3, jako je například vývojový Kestrel certifikát.
HttpClient
lze použít pro testování localhost/loopback v .NET 6 nebo novější. Při použitíHttpClient
k vytvoření požadavku HTTP/3 se vyžaduje další konfigurace:- Nastavit
HttpRequestMessage.Version
na hodnotu 3.0 nebo - Nastavte
HttpRequestMessage.VersionPolicy
na hodnotuHttpVersionPolicy.RequestVersionOrHigher
.
- Nastavit
Výhody HTTP/3
Http/3 používá stejnou sémantiku jako HTTP/1.1 a HTTP/2: stejné metody požadavků, stavové kódy a pole zpráv platí pro všechny verze. Rozdíly jsou v podkladové dopravě. Protokol HTTP/1.1 i HTTP/2 používají jako přenos protokol TCP. HTTP/3 používá novou transportní technologii vyvinutou společně s protokolem HTTP/3 s názvem QUIC.
HTTP/3 a QUIC mají v porovnání s HTTP/1.1 a HTTP/2 řadu výhod:
- Rychlejší doba odezvy prvního požadavku QUIC a HTTP/3 vyjednávají připojení v menším počtu odezv mezi klientem a serverem. První požadavek dosáhne serveru rychleji.
- Vylepšené prostředí, když dojde ke ztrátě paketů připojení. Http/2 multiplexes multiplexes multiple requests via one TCP connection. Ztráta paketů v připojení má vliv na všechny požadavky. Tento problém se nazývá "head-of-line blocking". Vzhledem k tomu, že QUIC poskytuje nativní multiplexování, ztracené pakety mají vliv pouze na požadavky, u kterých došlo ke ztrátě dat.
- Podporuje přechod mezi sítěmi. Tato funkce je užitečná pro mobilní zařízení, kde je běžné přepínat mezi WI-FI a mobilními sítěmi, protože mobilní zařízení mění umístění. Aktuálně připojení HTTP/1.1 a HTTP/2 selžou s chybou při přepínání sítí. Aplikace nebo webové prohlížeče musí opakovat všechny neúspěšné požadavky HTTP. HTTP/3 umožňuje aplikaci nebo webovému prohlížeči bezproblémově pokračovat, když dojde ke změně sítě. Kestrel nepodporuje přechody sítě v .NET 6. Může být k dispozici v budoucí verzi.
HTTP/3 je třetí a nadcházející hlavní verze HTTP. Tento článek popisuje požadavky na HTTP/3 a postup jeho konfigurace Kestrel .
Důležité
Protokol HTTP/3 je k dispozici v .NET 6 jako funkce Preview. Specifikace HTTP/3 není dokončená a problémy s chováním nebo výkonem můžou existovat v protokolu HTTP/3 s .NET 6.
Další informace o podpoře funkcí ve verzi Preview najdete v části podporované funkce ve verzi Preview.
Aplikace nakonfigurované tak, aby využívaly výhod protokolu HTTP/3, by měly být navržené tak, aby podporovaly také PROTOKOL HTTP/1.1 a HTTP/2. Pokud jsou problémy identifikované v protokolu HTTP/3, doporučujeme zakázat http/3, dokud se problémy nevyřeší v budoucí verzi ASP.NET Core. Významné problémy se hlásí v úložišti Oznámení na GitHubu.
Požadavky HTTP/3
PROTOKOL HTTP/3 má různé požadavky v závislosti na operačním systému. Pokud platforma, na které Kestrel běží, nemá všechny požadavky na HTTP/3, je zakázaná a Kestrel bude se vysunout do jiných protokolů HTTP.
Windows
- Windows 11 Build 22000 nebo novější nebo Windows Server 2022.
- Připojení TLS 1.3 nebo novější
Linux
libmsquic
nainstalován balíček.
libmsquic
se publikuje prostřednictvím oficiálního úložiště balíčků Pro Linux od Microsoftu na adrese packages.microsoft.com
. Instalace tohoto balíčku:
packages.microsoft.com
Přidejte úložiště. Pokyny najdete v úložišti softwaru pro Linux pro produkty Microsoft.libmsquic
Nainstalujte balíček pomocí správce balíčků distribuce. Napříkladapt install libmsquic=1.9*
na Ubuntu.
Poznámka: .NET 6 je kompatibilní pouze s verzemi 1.9.x libmsquic. Knihovna Libmsquic 2.x není kompatibilní kvůli zásadním změnám. Knihovna Libmsquic obdrží aktualizace na verzi 1.9.x, pokud je potřeba začlenit opravy zabezpečení.
macOS
Http/3 se v současné době v macOS nepodporuje a může být k dispozici v budoucí verzi.
Začínáme
Protokol HTTP/3 není ve výchozím nastavení povolený. Přidejte konfiguraci pro Program.cs
povolení protokolu HTTP/3.
var builder = WebApplication.CreateBuilder(args);
builder.WebHost.ConfigureKestrel((context, options) =>
{
options.ListenAnyIP(5001, listenOptions =>
{
listenOptions.Protocols = HttpProtocols.Http1AndHttp2AndHttp3;
listenOptions.UseHttps();
});
});
Předchozí kód nakonfiguruje port 5001 na:
- Pomocí příkazu HTTP/3 spolu s protokolem HTTP/1.1 a HTTP/2 zadejte
HttpProtocols.Http1AndHttp2AndHttp3
. - Povolte HTTPS pomocí
UseHttps
. HTTP/3 vyžaduje HTTPS.
Vzhledem k tomu, že ne všechny směrovače, brány firewall a proxy servery správně podporují protokol HTTP/3, měl by být protokol HTTP/3 nakonfigurovaný společně s protokolem HTTP/1.1 a HTTP/2. Můžete to provést zadáním HttpProtocols.Http1AndHttp2AndHttp3
podporovaných protokolů koncového bodu.
Další informace najdete v tématu Konfigurace koncových bodů pro webový server ASP.NET CoreKestrel.
Alt-svc
Http/3 se zjistí jako upgrade z HTTP/1.1 nebo HTTP/2 prostřednictvím hlavičky alt-svc
. To znamená, že první požadavek bude před přepnutím na HTTP/3 normálně používat HTTP/1.1 nebo HTTP/2. Kestrel automaticky přidá hlavičku alt-svc
, pokud je povolený protokol HTTP/3.
Testování místního hostitele
Prohlížeče neumožňují certifikáty podepsané svým držitelem na adrese HTTP/3, jako je například vývojový Kestrel certifikát.
HttpClient
lze použít pro testování localhost/loopback v .NET 6 nebo novější. Při použitíHttpClient
k vytvoření požadavku HTTP/3 se vyžaduje další konfigurace:- Nastavit
HttpRequestMessage.Version
na hodnotu 3.0 nebo - Nastavte
HttpRequestMessage.VersionPolicy
na hodnotuHttpVersionPolicy.RequestVersionOrHigher
.
- Nastavit
Omezení
Některé scénáře HTTPS zatím nejsou podporovány pro http/3 v Kestrel. Při volání Microsoft.AspNetCore.Hosting.ListenOptionsHttpsExtensions.UseHttps
při HttpsConnectionAdapterOptions použití protokolu HTTP/3 je nastavení následujících možností na HttpsConnectionAdapterOptions typu no-op (nic nedělá):
Volání následujících implementací Microsoft.AspNetCore.Hosting.ListenOptionsHttpsExtensions.UseHttps
vyvolání chyby při použití HTTP/3:
- UseHttps(this ListenOptions listenOptions, ServerOptionsSelectionCallback serverOptionsSelectionCallback, object state, TimeSpan handshakeTimeout)
- UseHttps(tento listenOptions listenOptions, TlsHandshakeCallbackOptions callbackOptions)
Výhody HTTP/3
Http/3 používá stejnou sémantiku jako HTTP/1.1 a HTTP/2: stejné metody požadavků, stavové kódy a pole zpráv platí pro všechny verze. Rozdíly jsou v podkladové dopravě. Protokol HTTP/1.1 i HTTP/2 používají jako přenos protokol TCP. HTTP/3 používá novou transportní technologii vyvinutou společně s protokolem HTTP/3 s názvem QUIC.
HTTP/3 a QUIC mají v porovnání s HTTP/1.1 a HTTP/2 řadu výhod:
- Rychlejší doba odezvy prvního požadavku QUIC a HTTP/3 vyjednávají připojení v menším počtu odezv mezi klientem a serverem. První požadavek dosáhne serveru rychleji.
- Vylepšené prostředí, když dojde ke ztrátě paketů připojení. Http/2 multiplexes multiplexes multiple requests via one TCP connection. Ztráta paketů v připojení má vliv na všechny požadavky. Tento problém se nazývá "head-of-line blocking". Vzhledem k tomu, že QUIC poskytuje nativní multiplexování, ztracené pakety mají vliv pouze na požadavky, u kterých došlo ke ztrátě dat.
- Podporuje přechod mezi sítěmi. Tato funkce je užitečná pro mobilní zařízení, kde je běžné přepínat mezi WI-FI a mobilními sítěmi, protože mobilní zařízení mění umístění. Aktuálně připojení HTTP/1.1 a HTTP/2 selžou s chybou při přepínání sítí. Aplikace nebo webové prohlížeče musí opakovat všechny neúspěšné požadavky HTTP. HTTP/3 umožňuje aplikaci nebo webovému prohlížeči bezproblémově pokračovat, když dojde ke změně sítě. Kestrel nepodporuje přechody sítě v .NET 6. Může být k dispozici v budoucí verzi.