Notes
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de vous connecter ou de modifier des répertoires.
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de modifier des répertoires.
Remarque
Ceci n’est pas la dernière version de cet article. Pour la version actuelle, consultez la version .NET 9 de cet article.
Avertissement
Cette version d’ASP.NET Core n’est plus prise en charge. Pour plus d’informations, consultez la stratégie de support .NET et .NET Core. Pour la version actuelle, consultez la version .NET 9 de cet article.
Important
Ces informations portent sur la préversion du produit, qui est susceptible d’être en grande partie modifié avant sa commercialisation. Microsoft n’offre aucune garantie, expresse ou implicite, concernant les informations fournies ici.
Pour la version actuelle, consultez la version .NET 9 de cet article.
HTTP/3 est une norme approuvée et la troisième version majeure du protocole HTTP. Cet article présente la configuration requise pour HTTP/3. HTTP/3 est entièrement pris en charge dans .NET 7 ou version ultérieure.
Important
Les applications configurées pour tirer parti de HTTP/3 doivent être conçues pour prendre également en charge HTTP/1.1 et HTTP/2.
Avantages de HTTP/3
HTTP/3
:
- Version la plus récente du protocole de transfert hypertexte.
- S’appuie sur les points forts de
HTTP/2
tout en répondant à certaines de ses limitations, en particulier en termes de performances, de latence, de fiabilité et de sécurité.
Caractéristique | HTTP/2 |
HTTP/3 |
---|---|---|
Transport | Utilise TCP | Utilise QUIC |
Connexion | Plus lent en raison du protocole TCP + TLS | Plus rapide avec 0-RTT QUIC |
Configuration | poignée de main | poignées de main |
Tête de ligne | Affecté par le niveau TCP | Éliminé grâce à QUIC |
Blocage | bloquant | multiplexage de flux |
Chiffrement | TLS sur TCP | TLS est intégré à QUIC |
Les principales différences entre HTTP/2
et HTTP/3
sont les suivantes :
-
Protocole de transport :
HTTP/3
utilise QUIC au lieu de TCP. QUIC offre des performances améliorées, une latence plus faible et une meilleure fiabilité, en particulier sur les réseaux mobiles et de perte. -
Blocage de la tête de ligne :
HTTP/2
peut souffrir du blocage de la tête de ligne au niveau TCP, où un retard dans un flux peut affecter d’autres personnes.HTTP/3
, avec QUIC, fournit des flux indépendants, de sorte que la perte de paquets dans un flux n'interrompt pas les autres. -
Établissement de la connexion :
HTTP/3
avec QUIC peut établir des connexions plus rapidement, parfois en zéro temps d'aller-retour (0-RTT) pour les clients revenants, car il combine les handshakes de transport et de chiffrement. -
Chiffrement :
HTTP/3
impose le chiffrement TLS 1.3, fournissant une sécurité renforcée par défaut, tandis qu’il est facultatif dansHTTP/2
. -
Multiplexage : bien que les deux prennent en charge le multiplexage,
HTTP/3
l’implémentation de QUIC est plus efficace et évite les problèmes de blocage de ligne de niveau TCP. -
Migration de connexion : QUIC
HTTP/3
permet aux connexions de persister même lorsque l’adresse IP d’un client change (comme passer de Wi-Fi à cellulaire), améliorant l’expérience utilisateur mobile.
Configuration requise pour HTTP/3
HTTP/3 utilise QUIC comme protocole de transport. L’implémentation principale de HTTP/3 ASP.NET dépend de MsQuic pour fournir des fonctionnalités QUIC. Par conséquent, la prise en charge de HTTP/3 par ASP.NET Core dépend des exigences de la plateforme MsQuic. Pour plus d’informations sur l’installation de MsQuic, consultez dépendances de la plateforme QUIC. Si la plateforme sur laquelle s’exécute Kestrel ne présente pas toute la configuration requise pour HTTP/3, celui-ci est désactivé et Kestrel bascule vers d’autres protocoles HTTP.
Prise en main
HTTP/3 n’est pas activé par défaut. Ajoutez la configuration à Program.cs
pour activer HTTP/3.
var builder = WebApplication.CreateBuilder(args);
builder.WebHost.ConfigureKestrel((context, options) =>
{
options.ListenAnyIP(5001, listenOptions =>
{
listenOptions.Protocols = HttpProtocols.Http1AndHttp2AndHttp3;
listenOptions.UseHttps();
});
});
Le code précédent configure le port 5001 pour :
- Utiliser HTTP/3 avec HTTP/1.1 et HTTP/2 en spécifiant
HttpProtocols.Http1AndHttp2AndHttp3
. - Activer HTTPS avec
UseHttps
. HTTP/3 nécessite HTTPS.
Comme tous les routeurs, pare-feu et proxys prennent correctement en charge HTTP/3, ce dernier doit être configuré avec HTTP/1.1 et HTTP/2. Pour ce faire, spécifiez HttpProtocols.Http1AndHttp2AndHttp3
en tant que protocoles pris en charge par un point de terminaison.
Pour plus d’informations, consultez Configurer des points de terminaison pour le serveur web ASP.NET Core Kestrel.
Alt-svc
HTTP/3 est découvert comme une mise à niveau à partir de HTTP/1.1 ou HTTP/2 via l’en-tête alt-svc
. Cela signifie que la première requête utilise normalement HTTP/1.1 ou HTTP/2 avant de passer à HTTP/3.
Kestrel ajoute automatiquement l’en-tête alt-svc
si HTTP/3 est activé.
Test localhost
Les navigateurs n’autorisent pas les certificats auto-signés sur HTTP/3, tels que le certificat de développement Kestrel.
HttpClient
peut être utilisé pour le test localhost/bouclage dans .NET 6 ou version ultérieure. Une configuration supplémentaire est requise lors de l’utilisation deHttpClient
pour effectuer une requête HTTP/3 :- Définissez
HttpRequestMessage.Version
sur 3.0, ou - Affectez la valeur
HttpRequestMessage.VersionPolicy
àHttpVersionPolicy.RequestVersionOrHigher
.
- Définissez
Pour plus d’informations sur l’utilisation de HTTP/3 avec HttpClient
, consultez HTTP/3 avec .NET.
HTTP/3 est une norme proposée et la troisième version majeure du protocole HTTP. Cet article décrit la configuration requise pour HTTP/3. HTTP/3 est entièrement pris en charge dans .NET 7 ou version ultérieure.
Important
Les applications configurées pour tirer parti de HTTP/3 doivent être conçues pour prendre également en charge HTTP/1.1 et HTTP/2.
Configuration requise pour HTTP/3
La configuration requise pour HTTP/3 dépend du système d’exploitation. Si la plateforme sur laquelle Kestrel s’exécute ne présente pas toute la configuration requise pour HTTP/3, celui-ci est désactivé et Kestrel bascule vers d’autres protocoles HTTP.
Fenêtres
- Windows 11 build 22000 ou version ultérieure OU Windows Server 2022.
- TLS 1.3 ou connexion ultérieure.
Linux
- Package
libmsquic
installé.
libmsquic
est publié via le référentiel officiel de packages Linux de Microsoft à l’adresse packages.microsoft.com
. Pour installer ce package :
- Ajoutez le référentiel
packages.microsoft.com
. Consultez Référentiel logiciel Linux pour les produits Microsoft pour obtenir des instructions. - Installez le package
libmsquic
à l’aide du gestionnaire de package de la distribution. Par exemple,apt install libmsquic=1.9*
sur Ubuntu.
Remarque : .NET 6 est compatible uniquement avec les versions 1.9.x de libmsquic. Libmsquic 2.x n’est pas compatible en raison de changements cassants. Libmsquic reçoit des mises à jour pour 1.9.x quand il est nécessaire d’intégrer des correctifs de sécurité.
macOS
HTTP/3 n’est actuellement pas pris en charge sur macOS et sera peut-être disponible dans une version ultérieure.
Prise en main
HTTP/3 n’est pas activé par défaut. Ajoutez la configuration à Program.cs
pour activer HTTP/3.
var builder = WebApplication.CreateBuilder(args);
builder.WebHost.ConfigureKestrel((context, options) =>
{
options.ListenAnyIP(5001, listenOptions =>
{
listenOptions.Protocols = HttpProtocols.Http1AndHttp2AndHttp3;
listenOptions.UseHttps();
});
});
Le code précédent configure le port 5001 pour :
- Utiliser HTTP/3 avec HTTP/1.1 et HTTP/2 en spécifiant
HttpProtocols.Http1AndHttp2AndHttp3
. - Activer HTTPS avec
UseHttps
. HTTP/3 nécessite HTTPS.
Comme tous les routeurs, pare-feu et proxys prennent correctement en charge HTTP/3, ce dernier doit être configuré avec HTTP/1.1 et HTTP/2. Pour ce faire, spécifiez HttpProtocols.Http1AndHttp2AndHttp3
en tant que protocoles pris en charge par un point de terminaison.
Pour plus d’informations, consultez Configurer des points de terminaison pour le serveur web ASP.NET Core Kestrel.
Alt-svc
HTTP/3 est découvert comme une mise à niveau à partir de HTTP/1.1 ou HTTP/2 via l’en-tête alt-svc
. Cela signifie que la première requête utilise normalement HTTP/1.1 ou HTTP/2 avant de passer à HTTP/3.
Kestrel ajoute automatiquement l’en-tête alt-svc
si HTTP/3 est activé.
Test localhost
Les navigateurs n’autorisent pas les certificats auto-signés sur HTTP/3, tels que le certificat de développement Kestrel.
HttpClient
peut être utilisé pour le test localhost/bouclage dans .NET 6 ou version ultérieure. Une configuration supplémentaire est requise lors de l’utilisation deHttpClient
pour effectuer une requête HTTP/3 :- Définissez
HttpRequestMessage.Version
sur 3.0, ou - Affectez la valeur
HttpRequestMessage.VersionPolicy
àHttpVersionPolicy.RequestVersionOrHigher
.
- Définissez
Avantages de HTTP/3
HTTP/3 utilise la même sémantique que HTTP/1.1 et HTTP/2 : les mêmes méthodes de requête, codes d’état et champs de message s’appliquent à toutes les versions. Les différences se trouvent dans le transport sous-jacent. HTTP/1.1 et HTTP/2 utilisent TCP comme transport. HTTP/3 utilise une nouvelle technologie de transport développée avec HTTP/3 appelé QUIC.
HTTP/3 et QUIC présentent un certain nombre d’avantages par rapport à HTTP/1.1 et HTTP/2 :
- Temps de réponse plus rapide de la première requête. QUIC et HTTP/3 négocient la connexion avec moins d’allers-retours entre le client et le serveur. La première requête atteint le serveur plus rapidement.
- Amélioration de l’expérience en cas de perte de paquets de connexion. HTTP/2 multiplexe plusieurs requêtes via une connexion TCP. La perte de paquets sur la connexion affecte toutes les requêtes. Ce problème est appelé « blocage en tête de ligne ». Étant donné que QUIC fournit un multiplexage natif, les paquets perdus affectent uniquement les requêtes dans lesquelles des données ont été perdues.
- Prend en charge la transition entre les réseaux. Cette fonctionnalité est utile pour les appareils mobiles qui passent couramment entre le WIFI et les réseaux cellulaires lors des déplacements de leur utilisateur. Actuellement, les connexions HTTP/1.1 et HTTP/2 échouent avec une erreur lors d’un basculement entre réseaux. Une application ou un navigateur web doit retenter les requêtes HTTP ayant échoué. HTTP/3 permet à l’application ou au navigateur web de continuer à fonctionner de manière transparente en cas de changements de réseau. Kestrel ne prend pas en charge les transitions réseau dans .NET 6. Il peut être disponible dans une prochaine version.
HTTP/3 est la troisième et prochaine version majeure du protocole HTTP. Cet article décrit les conditions requises pour HTTP/3 et comment configurer Kestrel pour l’utiliser.
Important
HTTP/3 est disponible dans .NET 6 en tant que fonctionnalité d’évaluation. La spécification HTTP/3 n’est pas finalisée et des problèmes de comportement ou de performances peuvent exister dans HTTP/3 avec .NET 6.
Pour plus d’informations sur la prise en charge des fonctionnalités d’évaluation, consultez la section Fonctionnalités d’évaluation prises en charge.
Les applications configurées pour tirer parti de HTTP/3 doivent être conçues pour prendre également en charge HTTP/1.1 et HTTP/2. Si des problèmes sont identifiés dans HTTP/3, nous vous recommandons de désactiver HTTP/3 jusqu’à ce que ces problèmes soient résolus dans une prochaine version d’ASP.NET Core. Des problèmes importants sont signalés dans le dépôt GitHub Annonces.
Configuration requise pour HTTP/3
La configuration requise pour HTTP/3 dépend du système d’exploitation. Si la plateforme sur laquelle Kestrel s’exécute ne présente pas toute la configuration requise pour HTTP/3, celui-ci est désactivé et Kestrel bascule vers d’autres protocoles HTTP.
Fenêtres
- Windows 11 build 22000 ou version ultérieure OU Windows Server 2022.
- TLS 1.3 ou connexion ultérieure.
Linux
- Package
libmsquic
installé.
libmsquic
est publié via le référentiel officiel de packages Linux de Microsoft à l’adresse packages.microsoft.com
. Pour installer ce package :
- Ajoutez le référentiel
packages.microsoft.com
. Consultez Référentiel logiciel Linux pour les produits Microsoft pour obtenir des instructions. - Installez le package
libmsquic
à l’aide du gestionnaire de package de la distribution. Par exemple,apt install libmsquic=1.9*
sur Ubuntu.
Remarque : .NET 6 est compatible uniquement avec les versions 1.9.x de libmsquic. Libmsquic 2.x n’est pas compatible en raison de changements cassants. Libmsquic reçoit des mises à jour pour 1.9.x quand il est nécessaire d’intégrer des correctifs de sécurité.
macOS
HTTP/3 n’est actuellement pas pris en charge sur macOS et sera peut-être disponible dans une version ultérieure.
Prise en main
HTTP/3 n’est pas activé par défaut. Ajoutez la configuration à Program.cs
pour activer HTTP/3.
var builder = WebApplication.CreateBuilder(args);
builder.WebHost.ConfigureKestrel((context, options) =>
{
options.ListenAnyIP(5001, listenOptions =>
{
listenOptions.Protocols = HttpProtocols.Http1AndHttp2AndHttp3;
listenOptions.UseHttps();
});
});
Le code précédent configure le port 5001 pour :
- Utiliser HTTP/3 avec HTTP/1.1 et HTTP/2 en spécifiant
HttpProtocols.Http1AndHttp2AndHttp3
. - Activer HTTPS avec
UseHttps
. HTTP/3 nécessite HTTPS.
Comme tous les routeurs, pare-feu et proxys prennent correctement en charge HTTP/3, ce dernier doit être configuré avec HTTP/1.1 et HTTP/2. Pour ce faire, spécifiez HttpProtocols.Http1AndHttp2AndHttp3
en tant que protocoles pris en charge par un point de terminaison.
Pour plus d’informations, consultez Configurer des points de terminaison pour le serveur web ASP.NET Core Kestrel.
Alt-svc
HTTP/3 est découvert comme une mise à niveau à partir de HTTP/1.1 ou HTTP/2 via l’en-tête alt-svc
. Cela signifie que la première requête utilise normalement HTTP/1.1 ou HTTP/2 avant de passer à HTTP/3.
Kestrel ajoute automatiquement l’en-tête alt-svc
si HTTP/3 est activé.
Test localhost
Les navigateurs n’autorisent pas les certificats auto-signés sur HTTP/3, tels que le certificat de développement Kestrel.
HttpClient
peut être utilisé pour le test localhost/bouclage dans .NET 6 ou version ultérieure. Une configuration supplémentaire est requise lors de l’utilisation deHttpClient
pour effectuer une requête HTTP/3 :- Définissez
HttpRequestMessage.Version
sur 3.0, ou - Affectez la valeur
HttpRequestMessage.VersionPolicy
àHttpVersionPolicy.RequestVersionOrHigher
.
- Définissez
Limites
Certains scénarios HTTPS ne sont pas encore pris en charge pour HTTP/3 dans Kestrel. Lors de l’appel de Microsoft.AspNetCore.Hosting.ListenOptionsHttpsExtensions.UseHttps
avec HttpsConnectionAdapterOptions lors de l’utilisation de HTTP/3, la définition des options suivantes sur HttpsConnectionAdapterOptions n’a aucun effet (no-op) :
L’appel des implémentations suivantes de Microsoft.AspNetCore.Hosting.ListenOptionsHttpsExtensions.UseHttps
lève une erreur lors de l’utilisation de HTTP/3 :
- UseHttps(this ListenOptions listenOptions, ServerOptionsSelectionCallback serverOptionsSelectionCallback, object state, TimeSpan handshakeTimeout)
- UseHttps(this ListenOptions listenOptions, TlsHandshakeCallbackOptions callbackOptions)
Avantages de HTTP/3
HTTP/3 utilise la même sémantique que HTTP/1.1 et HTTP/2 : les mêmes méthodes de requête, codes d’état et champs de message s’appliquent à toutes les versions. Les différences se trouvent dans le transport sous-jacent. HTTP/1.1 et HTTP/2 utilisent TCP comme transport. HTTP/3 utilise une nouvelle technologie de transport développée avec HTTP/3 appelé QUIC.
HTTP/3 et QUIC présentent un certain nombre d’avantages par rapport à HTTP/1.1 et HTTP/2 :
- Temps de réponse plus rapide de la première requête. QUIC et HTTP/3 négocient la connexion avec moins d’allers-retours entre le client et le serveur. La première requête atteint le serveur plus rapidement.
- Amélioration de l’expérience en cas de perte de paquets de connexion. HTTP/2 multiplexe plusieurs requêtes via une connexion TCP. La perte de paquets sur la connexion affecte toutes les requêtes. Ce problème est appelé « blocage en tête de ligne ». Étant donné que QUIC fournit un multiplexage natif, les paquets perdus affectent uniquement les requêtes dans lesquelles des données ont été perdues.
- Prend en charge la transition entre les réseaux. Cette fonctionnalité est utile pour les appareils mobiles qui passent couramment entre le WIFI et les réseaux cellulaires lors des déplacements de leur utilisateur. Actuellement, les connexions HTTP/1.1 et HTTP/2 échouent avec une erreur lors d’un basculement entre réseaux. Une application ou un navigateur web doit retenter les requêtes HTTP ayant échoué. HTTP/3 permet à l’application ou au navigateur web de continuer à fonctionner de manière transparente en cas de changements de réseau. Kestrel ne prend pas en charge les transitions réseau dans .NET 6. Il peut être disponible dans une prochaine version.