Sdílet prostřednictvím


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 ve verzi .NET 8 tohoto článku.

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 ve verzi .NET 8 tohoto článku.

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:

  1. packages.microsoft.com Přidejte úložiště. Pokyny najdete v úložišti softwaru pro Linux pro produkty Microsoft.
  2. libmsquic Nainstalujte balíček pomocí správce balíčků distribuce. Například apt 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

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:

  1. packages.microsoft.com Přidejte úložiště. Pokyny najdete v úložišti softwaru pro Linux pro produkty Microsoft.
  2. libmsquic Nainstalujte balíček pomocí správce balíčků distribuce. Například apt 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

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:

  1. packages.microsoft.com Přidejte úložiště. Pokyny najdete v úložišti softwaru pro Linux pro produkty Microsoft.
  2. libmsquic Nainstalujte balíček pomocí správce balíčků distribuce. Například apt 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 hodnotu HttpVersionPolicy.RequestVersionOrHigher.

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:

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.