Notitie
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen u aan te melden of de directory te wijzigen.
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen de mappen te wijzigen.
Opmerking
Dit is niet de nieuwste versie van dit artikel. Zie de .NET 9-versie van dit artikel voor de huidige release.
Waarschuwing
Deze versie van ASP.NET Core wordt niet meer ondersteund. Zie het .NET- en .NET Core-ondersteuningsbeleid voor meer informatie. Zie de .NET 9-versie van dit artikel voor de huidige release.
Belangrijk
Deze informatie heeft betrekking op een pre-releaseproduct dat aanzienlijk kan worden gewijzigd voordat het commercieel wordt uitgebracht. Microsoft geeft geen garanties, uitdrukkelijk of impliciet, met betrekking tot de informatie die hier wordt verstrekt.
Zie de .NET 9-versie van dit artikel voor de huidige release.
HTTP/3 is een goedgekeurde standaard en de derde primaire versie van HTTP. In dit artikel worden de vereisten voor HTTP/3 besproken. HTTP/3 wordt volledig ondersteund in .NET 7 of hoger.
Belangrijk
Apps die zijn geconfigureerd om te profiteren van HTTP/3, moeten worden ontworpen om ook HTTP/1.1 en HTTP/2 te ondersteunen.
VOORDELEN VAN HTTP/3
HTTP/3:
- Is de nieuwste versie van het Hypertext Transfer Protocol.
- Bouwt voort op de sterke punten van
HTTP/2, terwijl het sommige van de beperkingen aanpakt, met name wat betreft prestaties, latentie, betrouwbaarheid en beveiliging.
| Eigenschap | HTTP/2 |
HTTP/3 |
|---|---|---|
| Vervoer | Maakt gebruik van TCP | Maakt gebruik van QUIC |
| Verbinding | Langzamer vanwege TCP + TLS | Sneller met 0-RTT QUIC |
| Configuratie | handdruk | Handdrukken |
| Hoofd-van-lijn | Beïnvloed door TCP-niveau | Geëlimineerd met QUIC |
| Blokkeren | Blokkeren | stream-multiplexen |
| Encryptie | TLS via TCP | TLS is ingebouwd in QUIC |
De belangrijkste verschillen van HTTP/2 tot:HTTP/3
-
TransportProtocol:
HTTP/3maakt gebruik van QUIC in plaats van TCP. QUIC biedt verbeterde prestaties, lagere latentie en betere betrouwbaarheid, met name op mobiele en lossy netwerken. -
Head-of-Line Blocking:
HTTP/2kan last hebben van kop-of-lijnblokkering op TCP-niveau, waarbij een vertraging in de ene stroom van invloed kan zijn op andere stromen.HTTP/3, met QUIC, biedt onafhankelijke streams, zodat pakketverlies in de ene stream de andere niet ophoudt. -
Verbindingsopbouw:
HTTP/3met QUIC kunnen verbindingen sneller tot stand brengen, soms in nul rondreistijd (0-RTT) voor terugkerende klanten, omdat het transport- en versleutelingshanddrukken combineert. -
Versleuteling:
HTTP/3vereist TLS 1.3-versleuteling, waarbij standaard verbeterde beveiliging wordt geboden, terwijl dit optioneel is inHTTP/2. -
Multiplexing: hoewel beide ondersteuning bieden voor multiplexing,
HTTP/3is de implementatie met QUIC efficiënter en voorkomt u de problemen met head-of-line-blokkeren op TCP-niveau. -
Verbindingsmigratie: QUIC zorgt
HTTP/3ervoor dat verbindingen behouden blijven, zelfs wanneer het IP-adres van een client verandert (zoals overschakelen van Wi-Fi naar mobiel), waardoor de gebruikerservaring van mobiele apparaten wordt verbeterd.
HTTP/3-vereisten
HTTP/3 maakt gebruik van QUIC als transportprotocol. De ASP.NET Core-implementatie van HTTP/3 is afhankelijk van MsQuic om QUIC-functionaliteit te bieden. Als gevolg hiervan is ASP.NET Core-ondersteuning van HTTP/3 afhankelijk van de vereisten van het MsQuic-platform. Zie QUIC-platformafhankelijkheden voor meer informatie over het installeren van MsQuic. Als het platform waarop Kestrel wordt uitgevoerd niet alle vereisten voor HTTP/3 heeft, wordt het uitgeschakeld, en zal Kestrel terugvallen op andere HTTP-protocollen.
Aan de slag
HTTP/3 is niet standaard ingeschakeld. Voeg configuratie toe aan Program.cs om HTTP/3 in te schakelen.
var builder = WebApplication.CreateBuilder(args);
builder.WebHost.ConfigureKestrel((context, options) =>
{
options.ListenAnyIP(5001, listenOptions =>
{
listenOptions.Protocols = HttpProtocols.Http1AndHttp2AndHttp3;
listenOptions.UseHttps();
});
});
Met de voorgaande code wordt poort 5001 geconfigureerd voor:
- Gebruik HTTP/3 naast HTTP/1.1 en HTTP/2 door op te
HttpProtocols.Http1AndHttp2AndHttp3geven. - Schakel HTTPS in met
UseHttps. HTTP/3 vereist HTTPS.
Omdat niet alle routers, firewalls en proxy's HTTP/3 correct ondersteunen, moet HTTP/3 samen met HTTP/1.1 en HTTP/2 worden geconfigureerd. U kunt dit doen door de ondersteunde protocollen van een eindpunt op te HttpProtocols.Http1AndHttp2AndHttp3 geven.
Zie Eindpunten configureren voor de ASP.NET Core Kestrel webservervoor meer informatie.
Alt-svc
HTTP/3 wordt gedetecteerd als een upgrade van HTTP/1.1 of HTTP/2 via de alt-svc-header. Dat betekent dat de eerste aanvraag normaal gesproken HTTP/1.1 of HTTP/2 gebruikt voordat u overschakelt naar HTTP/3.
Kestrel voegt automatisch de alt-svc header toe als HTTP/3 is ingeschakeld.
Localhost testen
Browsers staan zelfondertekende certificaten niet toe op HTTP/3, zoals het Kestrel ontwikkelingscertificaat.
HttpClientkan worden gebruikt voor het testen van localhost/loopback in .NET 6 of hoger. Er is extra configuratie vereist bij het maken vanHttpClienteen HTTP/3-aanvraag:- Ingesteld
HttpRequestMessage.Versionop 3.0 of - Stel
HttpRequestMessage.VersionPolicyin opHttpVersionPolicy.RequestVersionOrHigher.
- Ingesteld
Voor meer informatie over hoe je HTTP/3 met HttpClient kunt gebruiken, zie HTTP/3 met .NET.
HTTP/3 is een voorgestelde standaard en de derde primaire versie van HTTP. In dit artikel worden de vereisten voor HTTP/3 besproken. HTTP/3 wordt volledig ondersteund in .NET 7 of hoger.
Belangrijk
Apps die zijn geconfigureerd om te profiteren van HTTP/3, moeten worden ontworpen om ook HTTP/1.1 en HTTP/2 te ondersteunen.
HTTP/3-vereisten
HTTP/3 heeft verschillende vereisten, afhankelijk van het besturingssysteem. Als het platform waarop Kestrel wordt uitgevoerd niet aan alle vereisten voor HTTP/3 voldoet, wordt het uitgeschakeld, en valt Kestrel terug op andere HTTP-protocollen.
Ramen
- Windows 11 Build 22000 of hoger of Windows Server 2022.
- TLS 1.3- of hogerverbinding.
Linux
-
libmsquichet pakket is geïnstalleerd.
libmsquic wordt gepubliceerd via de officiële Linux-pakketopslagplaats van Microsoft op packages.microsoft.com. Ga als volgt te werk om dit pakket te installeren:
- Voeg de
packages.microsoft.comopslagplaats toe. Zie De Linux-softwareopslagplaats voor Microsoft-producten voor instructies. - Installeer het
libmsquicpakket met behulp van pakketbeheer van de distributie. Bijvoorbeeldapt install libmsquic=1.9*op Ubuntu.
Opmerking: .NET 6 is alleen compatibel met de 1.9.x-versies van libmsquic. Libmsquic 2.x is niet compatibel vanwege ingrijpende veranderingen. Libmsquic ontvangt updates voor 1.9.x wanneer dat nodig is om beveiligingsoplossingen op te nemen.
macOS
HTTP/3 wordt momenteel niet ondersteund in macOS en is mogelijk beschikbaar in een toekomstige release.
Aan de slag
HTTP/3 is niet standaard ingeschakeld. Voeg configuratie toe aan Program.cs om HTTP/3 in te schakelen.
var builder = WebApplication.CreateBuilder(args);
builder.WebHost.ConfigureKestrel((context, options) =>
{
options.ListenAnyIP(5001, listenOptions =>
{
listenOptions.Protocols = HttpProtocols.Http1AndHttp2AndHttp3;
listenOptions.UseHttps();
});
});
Met de voorgaande code wordt poort 5001 geconfigureerd voor:
- Gebruik HTTP/3 naast HTTP/1.1 en HTTP/2 door op te
HttpProtocols.Http1AndHttp2AndHttp3geven. - Schakel HTTPS in met
UseHttps. HTTP/3 vereist HTTPS.
Omdat niet alle routers, firewalls en proxy's HTTP/3 correct ondersteunen, moet HTTP/3 samen met HTTP/1.1 en HTTP/2 worden geconfigureerd. U kunt dit doen door de ondersteunde protocollen van een eindpunt op te HttpProtocols.Http1AndHttp2AndHttp3 geven.
Zie Eindpunten configureren voor de ASP.NET Core Kestrel webservervoor meer informatie.
Alt-svc
HTTP/3 wordt gedetecteerd als een upgrade van HTTP/1.1 of HTTP/2 via de alt-svc-header. Dat betekent dat de eerste aanvraag normaal gesproken HTTP/1.1 of HTTP/2 gebruikt voordat u overschakelt naar HTTP/3.
Kestrel voegt automatisch de alt-svc header toe als HTTP/3 is ingeschakeld.
Localhost testen
Browsers staan zelfondertekende certificaten niet toe op HTTP/3, zoals het Kestrel ontwikkelingscertificaat.
HttpClientkan worden gebruikt voor het testen van localhost/loopback in .NET 6 of hoger. Er is extra configuratie vereist bij het maken vanHttpClienteen HTTP/3-aanvraag:- Ingesteld
HttpRequestMessage.Versionop 3.0 of - Stel
HttpRequestMessage.VersionPolicyin opHttpVersionPolicy.RequestVersionOrHigher.
- Ingesteld
VOORDELEN VAN HTTP/3
HTTP/3 maakt gebruik van dezelfde semantiek als HTTP/1.1 en HTTP/2: dezelfde aanvraagmethoden, statuscodes en berichtvelden zijn van toepassing op alle versies. De verschillen zijn in het onderliggende transport. Zowel HTTP/1.1 als HTTP/2 gebruiken TCP als transport. HTTP/3 maakt gebruik van een nieuwe transporttechnologie die is ontwikkeld naast HTTP/3 met de naam QUIC.
HTTP/3 en QUIC hebben een aantal voordelen vergeleken met HTTP/1.1 en HTTP/2:
- Snellere reactietijd van de eerste aanvraag. QUIC en HTTP/3 onderhandelen over de verbinding in minder rondes tussen de Client en de Server. De eerste aanvraag bereikt de server sneller.
- Verbeterde ervaring bij verlies van verbindingspakketten. HTTP/2 maakt meervoudige overdracht van meerdere aanvragen mogelijk via één TCP-verbinding. Pakketverlies op de verbinding is van invloed op alle aanvragen. Dit probleem wordt 'head-of-line blocking' genoemd (kop-van-de-lijn blokkering). Omdat QUIC systeemeigen multiplexing biedt, hebben verloren pakketten alleen invloed op de aanvragen waar gegevens verloren zijn gegaan.
- Ondersteunt de overgang tussen netwerken. Deze functie is handig voor mobiele apparaten waar het gebruikelijk is om te schakelen tussen WIFI- en mobiele netwerken, omdat een mobiel apparaat de locatie wijzigt. Momenteel mislukken HTTP/1.1- en HTTP/2-verbindingen met een fout bij het schakelen tussen netwerken. Een app of webbrowser moet eventuele mislukte HTTP-aanvragen opnieuw proberen. Met HTTP/3 kan de app of webbrowser naadloos doorgaan wanneer een netwerk wordt gewijzigd. Kestrel biedt geen ondersteuning voor netwerkovergangen in .NET 6. Het is mogelijk beschikbaar in een toekomstige release.
HTTP/3 is de derde en aanstaande primaire versie van HTTP. In dit artikel worden de vereisten voor HTTP/3 besproken en hoe u Kestrel kunt configureren om het te gebruiken.
Belangrijk
HTTP/3 is beschikbaar in .NET 6 als preview-functie. De HTTP/3-specificatie is niet voltooid en er kunnen gedrags- of prestatieproblemen optreden in HTTP/3 met .NET 6.
Zie de sectie preview-functies die worden ondersteund voor meer informatie over ondersteuning voor preview-functies.
Apps die zijn geconfigureerd om te profiteren van HTTP/3, moeten worden ontworpen om ook HTTP/1.1 en HTTP/2 te ondersteunen. Als er problemen worden geïdentificeerd in HTTP/3, raden we u aan HTTP/3 uit te schakelen totdat de problemen in een toekomstige release van ASP.NET Core zijn opgelost. Belangrijke problemen worden gerapporteerd in de GitHub-opslagplaats aankondigingen.
HTTP/3-vereisten
HTTP/3 heeft verschillende vereisten, afhankelijk van het besturingssysteem. Als het platform waarop Kestrel wordt uitgevoerd niet aan alle vereisten voor HTTP/3 voldoet, wordt het uitgeschakeld, en valt Kestrel terug op andere HTTP-protocollen.
Ramen
- Windows 11 Build 22000 of hoger of Windows Server 2022.
- TLS 1.3- of hogerverbinding.
Linux
-
libmsquichet pakket is geïnstalleerd.
libmsquic wordt gepubliceerd via de officiële Linux-pakketopslagplaats van Microsoft op packages.microsoft.com. Ga als volgt te werk om dit pakket te installeren:
- Voeg de
packages.microsoft.comopslagplaats toe. Zie De Linux-softwareopslagplaats voor Microsoft-producten voor instructies. - Installeer het
libmsquicpakket met behulp van pakketbeheer van de distributie. Bijvoorbeeldapt install libmsquic=1.9*op Ubuntu.
Opmerking: .NET 6 is alleen compatibel met de 1.9.x-versies van libmsquic. Libmsquic 2.x is niet compatibel vanwege ingrijpende veranderingen. Libmsquic ontvangt updates voor 1.9.x wanneer dat nodig is om beveiligingsoplossingen op te nemen.
macOS
HTTP/3 wordt momenteel niet ondersteund in macOS en is mogelijk beschikbaar in een toekomstige release.
Aan de slag
HTTP/3 is niet standaard ingeschakeld. Voeg configuratie toe aan Program.cs om HTTP/3 in te schakelen.
var builder = WebApplication.CreateBuilder(args);
builder.WebHost.ConfigureKestrel((context, options) =>
{
options.ListenAnyIP(5001, listenOptions =>
{
listenOptions.Protocols = HttpProtocols.Http1AndHttp2AndHttp3;
listenOptions.UseHttps();
});
});
Met de voorgaande code wordt poort 5001 geconfigureerd voor:
- Gebruik HTTP/3 naast HTTP/1.1 en HTTP/2 door op te
HttpProtocols.Http1AndHttp2AndHttp3geven. - Schakel HTTPS in met
UseHttps. HTTP/3 vereist HTTPS.
Omdat niet alle routers, firewalls en proxy's HTTP/3 correct ondersteunen, moet HTTP/3 samen met HTTP/1.1 en HTTP/2 worden geconfigureerd. U kunt dit doen door de ondersteunde protocollen van een eindpunt op te HttpProtocols.Http1AndHttp2AndHttp3 geven.
Zie Eindpunten configureren voor de ASP.NET Core Kestrel webservervoor meer informatie.
Alt-svc
HTTP/3 wordt gedetecteerd als een upgrade van HTTP/1.1 of HTTP/2 via de alt-svc-header. Dat betekent dat de eerste aanvraag normaal gesproken HTTP/1.1 of HTTP/2 gebruikt voordat u overschakelt naar HTTP/3.
Kestrel voegt automatisch de alt-svc header toe als HTTP/3 is ingeschakeld.
Localhost testen
Browsers staan zelfondertekende certificaten niet toe op HTTP/3, zoals het Kestrel ontwikkelingscertificaat.
HttpClientkan worden gebruikt voor het testen van localhost/loopback in .NET 6 of hoger. Er is extra configuratie vereist bij het maken vanHttpClienteen HTTP/3-aanvraag:- Ingesteld
HttpRequestMessage.Versionop 3.0 of - Stel
HttpRequestMessage.VersionPolicyin opHttpVersionPolicy.RequestVersionOrHigher.
- Ingesteld
Beperkingen
Sommige HTTPS-scenario's worden nog niet ondersteund voor HTTP/3 in Kestrel. Wanneer u Microsoft.AspNetCore.Hosting.ListenOptionsHttpsExtensions.UseHttps aanroept met HttpsConnectionAdapterOptions terwijl u HTTP/3 gebruikt, heeft het instellen van de volgende opties op de HttpsConnectionAdapterOptions geen effect (no-op):
Het aanroepen van de volgende implementaties resulteert in een fout bij het gebruik van Microsoft.AspNetCore.Hosting.ListenOptionsHttpsExtensions.UseHttps HTTP/3.
- UseHttps(this ListenOptions listenOptions, ServerOptionsSelectionCallback serverOptionsSelectionCallback, object state, TimeSpan handshakeTimeout)
- UseHttps(ListenOptions listenOptions, TlsHandshakeCallbackOptions callbackOptions)
VOORDELEN VAN HTTP/3
HTTP/3 maakt gebruik van dezelfde semantiek als HTTP/1.1 en HTTP/2: dezelfde aanvraagmethoden, statuscodes en berichtvelden zijn van toepassing op alle versies. De verschillen zijn in het onderliggende transport. Zowel HTTP/1.1 als HTTP/2 gebruiken TCP als transport. HTTP/3 maakt gebruik van een nieuwe transporttechnologie die is ontwikkeld naast HTTP/3 met de naam QUIC.
HTTP/3 en QUIC hebben een aantal voordelen vergeleken met HTTP/1.1 en HTTP/2:
- Snellere reactietijd van de eerste aanvraag. QUIC en HTTP/3 onderhandelen over de verbinding in minder rondes tussen de Client en de Server. De eerste aanvraag bereikt de server sneller.
- Verbeterde ervaring bij verlies van verbindingspakketten. HTTP/2 maakt meervoudige overdracht van meerdere aanvragen mogelijk via één TCP-verbinding. Pakketverlies op de verbinding is van invloed op alle aanvragen. Dit probleem wordt 'head-of-line blocking' genoemd (kop-van-de-lijn blokkering). Omdat QUIC systeemeigen multiplexing biedt, hebben verloren pakketten alleen invloed op de aanvragen waar gegevens verloren zijn gegaan.
- Ondersteunt de overgang tussen netwerken. Deze functie is handig voor mobiele apparaten waar het gebruikelijk is om te schakelen tussen WIFI- en mobiele netwerken, omdat een mobiel apparaat de locatie wijzigt. Momenteel mislukken HTTP/1.1- en HTTP/2-verbindingen met een fout bij het schakelen tussen netwerken. Een app of webbrowser moet eventuele mislukte HTTP-aanvragen opnieuw proberen. Met HTTP/3 kan de app of webbrowser naadloos doorgaan wanneer een netwerk wordt gewijzigd. Kestrel biedt geen ondersteuning voor netwerkovergangen in .NET 6. Het is mogelijk beschikbaar in een toekomstige release.