Anteckning
Åtkomst till den här sidan kräver auktorisering. Du kan prova att logga in eller ändra kataloger.
Åtkomst till den här sidan kräver auktorisering. Du kan prova att ändra kataloger.
Varning
Den här versionen av ASP.NET Core stöds inte längre. Mer information finns i supportpolicyn för .NET och .NET Core. För den nuvarande utgåvan, se .NET 9-versionen av den här artikeln .
Viktigt!
Den här informationen gäller en förhandsversionsprodukt som kan ändras avsevärt innan den släpps kommersiellt. Microsoft lämnar inga garantier, uttryckliga eller underförstådda, med avseende på den information som tillhandahålls här.
För den nuvarande utgåvan, se .NET 9-versionen av den här artikeln .
HTTP/3 är en godkänd standard och den tredje huvudversionen av HTTP. I den här artikeln beskrivs kraven för HTTP/3. HTTP/3 stöds fullt ut i .NET 7 eller senare.
Viktigt!
Appar som har konfigurerats för att dra nytta av HTTP/3 bör utformas för att även stödja HTTP/1.1 och HTTP/2.
HTTP/3-förmåner
              HTTP/3:
- Är den senaste versionen av Hypertext Transfer Protocol.
- Bygger på fördelarna med HTTP/2att hantera vissa av dess begränsningar, särskilt när det gäller prestanda, svarstid, tillförlitlighet och säkerhet.
| Egenskap | HTTP/2 | HTTP/3 | 
|---|---|---|
| Transport | Använder TCP | Använder QUIC | 
| Anslutning | Långsammare på grund av TCP + TLS | Snabbare med 0-RTT QUIC | 
| Inställningar | handskakning | Handslag | 
| Huvudlinje | Påverkas av TCP-nivå | Eliminerad med QUIC | 
| Blockera | blockering | strömma multiplexering | 
| Kryptering | TLS över TCP | TLS är inbyggt i QUIC | 
De viktigaste skillnaderna från HTTP/2 till HTTP/3 är:
- 
              Transport Protocol: HTTP/3använder QUIC i stället för TCP. QUIC erbjuder bättre prestanda, kortare svarstid och bättre tillförlitlighet, särskilt i mobila och förlustfyllda nätverk.
- 
              Head-of-Line Blockering: HTTP/2kan drabbas av head-of-line blockering på TCP-nivå, där en fördröjning i en ström kan påverka andra.HTTP/3, med QUIC, tillhandahåller oberoende strömmar, så paketförlust i en ström stoppar inte andra.
- 
              Anslutningsetablering: HTTP/3med QUIC kan upprätta anslutningar snabbare, ibland med noll omgångstid (0-RTT) för återkommande klienter, eftersom det kombinerar handskakningar för transport och kryptering.
- 
              Kryptering: HTTP/3kräver TLS 1.3-kryptering, vilket ger förbättrad säkerhet som standard, medan det är valfritt iHTTP/2.
- 
              Multiplexing: Båda stöder multiplexering, HTTP/3men implementeringen med QUIC är effektivare och undviker problem med blockering på TCP-nivå.
- 
              Anslutningsmigrering: QUIC i HTTP/3gör att anslutningar kan bevaras även när en klients IP-adress ändras (t.ex. att växla från Wi-Fi till mobil), vilket förbättrar användarupplevelsen för mobilen.
HTTP/3-krav
HTTP/3 använder QUIC som transportprotokoll. ASP.NET Core-implementeringen av HTTP/3 är beroende av MsQuic för att tillhandahålla QUIC-funktioner. Därför är ASP.NET Core-stöd för HTTP/3 beroende av msQuic-plattformskrav. Mer information om hur du installerar MsQuic finns i QUIC Platform-beroenden. Om plattformen som Kestrel körs på inte har alla krav för HTTP/3 inaktiveras den och Kestrel återgår till andra HTTP-protokoll.
Komma igång
HTTP/3 är inte aktiverat som standard. Lägg till konfiguration för Program.cs att aktivera HTTP/3.
var builder = WebApplication.CreateBuilder(args);
builder.WebHost.ConfigureKestrel((context, options) =>
{
    options.ListenAnyIP(5001, listenOptions =>
    {
        listenOptions.Protocols = HttpProtocols.Http1AndHttp2AndHttp3;
        listenOptions.UseHttps();
    });
});
Föregående kod konfigurerar port 5001 till:
- Använd HTTP/3 tillsammans med HTTP/1.1 och HTTP/2 genom att ange HttpProtocols.Http1AndHttp2AndHttp3.
- Aktivera HTTPS med UseHttps. HTTP/3 kräver HTTPS.
Eftersom inte alla routrar, brandväggar och proxyservrar stöder HTTP/3 korrekt bör HTTP/3 konfigureras tillsammans med HTTP/1.1 och HTTP/2. Detta kan göras genom att ange HttpProtocols.Http1AndHttp2AndHttp3 som protokoll som stöds av en slutpunkt.
Mer information finns i Konfigurera slutpunkter för ASP.NET Core Kestrel-webbservern.
Alt-svc
HTTP/3 identifieras som en uppgradering från HTTP/1.1 eller HTTP/2 via alt-svc-huvudet. Det innebär att den första begäran normalt använder HTTP/1.1 eller HTTP/2 innan den växlar till HTTP/3. 
              Kestrel lägger automatiskt till alt-svc rubriken om HTTP/3 är aktiverat.
Localhost-testning
- Webbläsare tillåter inte självsignerade certifikat på HTTP/3, till exempel utvecklingscertifikatet Kestrel . 
- HttpClientkan användas för localhost/loopback-testning i .NET 6 eller senare. Extra konfiguration krävs när du använder- HttpClientför att göra en HTTP/3-begäran:- Ange HttpRequestMessage.Versiontill 3.0 eller
- Ställ in HttpRequestMessage.VersionPolicypåHttpVersionPolicy.RequestVersionOrHigher.
 
- Ange 
Mer information om hur du använder HTTP/3 med HttpClientfinns i HTTP/3 med .NET.
HTTP/3 är en föreslagen standard och den tredje huvudversionen av HTTP. I den här artikeln beskrivs kraven för HTTP/3. HTTP/3 stöds fullt ut i .NET 7 eller senare.
Viktigt!
Appar som har konfigurerats för att dra nytta av HTTP/3 bör utformas för att även stödja HTTP/1.1 och HTTP/2.
HTTP/3-krav
HTTP/3 har olika krav beroende på operativsystemet. Om plattformen som Kestrel körs på inte har alla krav för HTTP/3 inaktiveras den och Kestrel återgår till andra HTTP-protokoll.
Windows
- Windows 11 Build 22000 eller senare ELLER Windows Server 2022.
- TLS 1.3 eller senare anslutning.
Linux
- 
              libmsquicpaket har installerats.
              libmsquic publiceras via Microsofts officiella Linux-paketlagringsplats på packages.microsoft.com. Så här installerar du det här paketet:
- Lägg till lagringsplatsen packages.microsoft.com. Se Linux Software Repository for Microsoft Products (Linux-lagringsplats för Microsoft-produkter ) för anvisningar.
- 
              libmsquicInstallera paketet med distributionens pakethanterare. Till exempelapt install libmsquic=1.9*på Ubuntu.
Obs! .NET 6 är endast kompatibelt med 1.9.x-versionerna av libmsquic. Libmsquic 2.x är inte kompatibelt på grund av genombrottsförändringar. Libmsquic tar emot uppdateringar till 1.9.x när det behövs för att införliva säkerhetskorrigeringar.
macOS
HTTP/3 stöds inte för närvarande på macOS och kan vara tillgängligt i en framtida version.
Komma igång
HTTP/3 är inte aktiverat som standard. Lägg till konfiguration för Program.cs att aktivera HTTP/3.
var builder = WebApplication.CreateBuilder(args);
builder.WebHost.ConfigureKestrel((context, options) =>
{
    options.ListenAnyIP(5001, listenOptions =>
    {
        listenOptions.Protocols = HttpProtocols.Http1AndHttp2AndHttp3;
        listenOptions.UseHttps();
    });
});
Föregående kod konfigurerar port 5001 till:
- Använd HTTP/3 tillsammans med HTTP/1.1 och HTTP/2 genom att ange HttpProtocols.Http1AndHttp2AndHttp3.
- Aktivera HTTPS med UseHttps. HTTP/3 kräver HTTPS.
Eftersom inte alla routrar, brandväggar och proxyservrar stöder HTTP/3 korrekt bör HTTP/3 konfigureras tillsammans med HTTP/1.1 och HTTP/2. Detta kan göras genom att ange HttpProtocols.Http1AndHttp2AndHttp3 som protokoll som stöds av en slutpunkt.
Mer information finns i Konfigurera slutpunkter för ASP.NET Core Kestrel-webbservern.
Alt-svc
HTTP/3 identifieras som en uppgradering från HTTP/1.1 eller HTTP/2 via alt-svc-huvudet. Det innebär att den första begäran normalt använder HTTP/1.1 eller HTTP/2 innan den växlar till HTTP/3. 
              Kestrel lägger automatiskt till alt-svc rubriken om HTTP/3 är aktiverat.
Localhost-testning
- Webbläsare tillåter inte självsignerade certifikat på HTTP/3, till exempel Kestrel utvecklingscertifikatet. 
- HttpClientkan användas för localhost/loopback-testning i .NET 6 eller senare. Extra konfiguration krävs när du använder- HttpClientför att göra en HTTP/3-begäran:- Ange HttpRequestMessage.Versiontill 3.0 eller
- Ställ in HttpRequestMessage.VersionPolicypåHttpVersionPolicy.RequestVersionOrHigher.
 
- Ange 
HTTP/3-förmåner
HTTP/3 använder samma semantik som HTTP/1.1 och HTTP/2: samma metoder för begäran, statuskoder och meddelandefält gäller för alla versioner. Skillnaderna finns i den underliggande transporten. Både HTTP/1.1 och HTTP/2 använder TCP som transport. HTTP/3 använder en ny transportteknik som utvecklats tillsammans med HTTP/3 som kallas QUIC.
HTTP/3 och QUIC har ett antal fördelar jämfört med HTTP/1.1 och HTTP/2:
- Snabbare svarstid för den första begäran. QUIC och HTTP/3 förhandlar om anslutningen i färre turer mellan klienten och servern. Den första begäran når servern snabbare.
- Förbättrad upplevelse när det uppstår förlust av anslutningspaket. HTTP/2 multiplexar flera begäranden via en TCP-anslutning. Paketförlust på anslutningen påverkar alla begäranden. Det här problemet kallas "head-of-line blocking". Eftersom QUIC tillhandahåller intern multiplexering påverkar förlorade paket endast begäranden där data har gått förlorade.
- Stöder övergång mellan nätverk. Den här funktionen är användbar för mobila enheter där det är vanligt att växla mellan WIFI och mobilnät när en mobil enhet byter plats. För närvarande misslyckas HTTP/1.1- och HTTP/2-anslutningar med ett fel vid byte av nätverk. En app eller webbläsare måste försöka igen med misslyckade HTTP-begäranden. MED HTTP/3 kan appen eller webbläsaren sömlöst fortsätta när ett nätverk ändras. Kestrel stöder inte nätverksövergångar i .NET 6. Den kan vara tillgänglig i en framtida version.
HTTP/3 är den tredje och kommande huvudversionen av HTTP. I den här artikeln beskrivs kraven för HTTP/3 och hur du konfigurerar Kestrel att använda den.
Viktigt!
HTTP/3 är tillgängligt i .NET 6 som en förhandsgranskningsfunktion. HTTP/3-specifikationen är inte slutförd och beteende- eller prestandaproblem kan finnas i HTTP/3 med .NET 6.
Mer information om stöd för förhandsversionsfunktioner finns i avsnittet för förhandsversionsfunktioner som stöds.
Appar som har konfigurerats för att dra nytta av HTTP/3 bör utformas för att även stödja HTTP/1.1 och HTTP/2. Om problem identifieras i HTTP/3 rekommenderar vi att du inaktiverar HTTP/3 tills problemen har lösts i en framtida version av ASP.NET Core. Betydande problem rapporteras på GitHub-lagringsplatsen Meddelanden.
HTTP/3-krav
HTTP/3 har olika krav beroende på operativsystemet. Om plattformen som Kestrel körs på inte har alla krav för HTTP/3 inaktiveras den och Kestrel återgår till andra HTTP-protokoll.
Windows
- Windows 11 Build 22000 eller senare ELLER Windows Server 2022.
- TLS 1.3 eller senare anslutning.
Linux
- 
              libmsquicpaket har installerats.
              libmsquic publiceras via Microsofts officiella Linux-paketlagringsplats på packages.microsoft.com. Så här installerar du det här paketet:
- Lägg till lagringsplatsen packages.microsoft.com. Se Linux Software Repository for Microsoft Products (Linux-lagringsplats för Microsoft-produkter ) för anvisningar.
- 
              libmsquicInstallera paketet med distributionens pakethanterare. Till exempelapt install libmsquic=1.9*på Ubuntu.
Obs! .NET 6 är endast kompatibelt med 1.9.x-versionerna av libmsquic. Libmsquic 2.x är inte kompatibelt på grund av genombrottsförändringar. Libmsquic tar emot uppdateringar till 1.9.x när det behövs för att införliva säkerhetskorrigeringar.
macOS
HTTP/3 stöds inte för närvarande på macOS och kan vara tillgängligt i en framtida version.
Komma igång
HTTP/3 är inte aktiverat som standard. Lägg till konfiguration för Program.cs att aktivera HTTP/3.
var builder = WebApplication.CreateBuilder(args);
builder.WebHost.ConfigureKestrel((context, options) =>
{
    options.ListenAnyIP(5001, listenOptions =>
    {
        listenOptions.Protocols = HttpProtocols.Http1AndHttp2AndHttp3;
        listenOptions.UseHttps();
    });
});
Föregående kod konfigurerar port 5001 till:
- Använd HTTP/3 tillsammans med HTTP/1.1 och HTTP/2 genom att ange HttpProtocols.Http1AndHttp2AndHttp3.
- Aktivera HTTPS med UseHttps. HTTP/3 kräver HTTPS.
Eftersom inte alla routrar, brandväggar och proxyservrar stöder HTTP/3 korrekt bör HTTP/3 konfigureras tillsammans med HTTP/1.1 och HTTP/2. Detta kan göras genom att ange HttpProtocols.Http1AndHttp2AndHttp3 som protokoll som stöds av en slutpunkt.
Mer information finns i Konfigurera slutpunkter för ASP.NET Core Kestrel-webbservern.
Alt-svc
HTTP/3 identifieras som en uppgradering från HTTP/1.1 eller HTTP/2 via alt-svc-huvudet. Det innebär att den första begäran normalt använder HTTP/1.1 eller HTTP/2 innan den växlar till HTTP/3. 
              Kestrel lägger automatiskt till alt-svc rubriken om HTTP/3 är aktiverat.
Localhost-testning
- Webbläsare tillåter inte självsignerade certifikat på HTTP/3, till exempel Kestrel utvecklingscertifikatet. 
- HttpClientkan användas för localhost/loopback-testning i .NET 6 eller senare. Extra konfiguration krävs när du använder- HttpClientför att göra en HTTP/3-begäran:- Ange HttpRequestMessage.Versiontill 3.0 eller
- Ställ in HttpRequestMessage.VersionPolicypåHttpVersionPolicy.RequestVersionOrHigher.
 
- Ange 
Begränsningar
Vissa HTTPS-scenarier stöds ännu inte för HTTP/3 i Kestrel. När du använder HTTP/3 och anropar Microsoft.AspNetCore.Hosting.ListenOptionsHttpsExtensions.UseHttps med HttpsConnectionAdapterOptions gör följande alternativ på HttpsConnectionAdapterOptions ingenting (no-op):
Genom att anropa följande implementeringar av Microsoft.AspNetCore.Hosting.ListenOptionsHttpsExtensions.UseHttps kommer det att utlösa ett fel när du använder HTTP/3.
- UseHttps(this ListenOptions listenOptions, ServerOptionsSelectionCallback serverOptionsSelectionCallback, object state, TimeSpan handshakeTimeout)
- UseHttps(this ListenOptions listenOptions, TlsHandshakeCallbackOptions callbackOptions)
HTTP/3-förmåner
HTTP/3 använder samma semantik som HTTP/1.1 och HTTP/2: samma metoder för begäran, statuskoder och meddelandefält gäller för alla versioner. Skillnaderna finns i den underliggande transporten. Både HTTP/1.1 och HTTP/2 använder TCP som transport. HTTP/3 använder en ny transportteknik som utvecklats tillsammans med HTTP/3 som kallas QUIC.
HTTP/3 och QUIC har ett antal fördelar jämfört med HTTP/1.1 och HTTP/2:
- Snabbare svarstid för den första begäran. QUIC och HTTP/3 förhandlar om anslutningen i färre turer mellan klienten och servern. Den första begäran når servern snabbare.
- Förbättrad upplevelse när det uppstår förlust av anslutningspaket. HTTP/2 multiplexar flera begäranden via en TCP-anslutning. Paketförlust på anslutningen påverkar alla begäranden. Det här problemet kallas "head-of-line blocking". Eftersom QUIC tillhandahåller intern multiplexering påverkar förlorade paket endast begäranden där data har gått förlorade.
- Stöder övergång mellan nätverk. Den här funktionen är användbar för mobila enheter där det är vanligt att växla mellan WIFI och mobilnät när en mobil enhet byter plats. För närvarande misslyckas HTTP/1.1- och HTTP/2-anslutningar med ett fel vid byte av nätverk. En app eller webbläsare måste försöka igen med misslyckade HTTP-begäranden. MED HTTP/3 kan appen eller webbläsaren sömlöst fortsätta när ett nätverk ändras. Kestrel stöder inte nätverksövergångar i .NET 6. Den kan vara tillgänglig i en framtida version.
ASP.NET Core