Remarque
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.
HTTP/3 est la troisième version majeure standardisée de HTTP. 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 technologie de transport développée avec HTTP/3 appelé QUIC.
HTTP/3 et QUIC présentent plusieurs avantages par rapport à HTTP/1.1 et HTTP/2 :
- Temps de réponse plus rapide pour la première requête. QUIC et HTTP/3 négocient la connexion en moins d’allers-retours entre le client et le serveur. La première requête atteint le serveur plus rapidement.
- Expérience améliorée 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 demandes où les données ont été perdues.
- Prend en charge la transition entre les réseaux. Cette fonctionnalité est utile pour les appareils mobiles où il est courant de basculer entre le WIFI et les réseaux cellulaires en tant qu’appareil mobile change d’emplacement. Actuellement, les connexions HTTP/1.1 et HTTP/2 échouent avec une erreur lors du basculement de réseaux. Une application ou un navigateur web doit réessayer 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. HttpClient et Kestrel ne supportent pas les transitions réseau dans .NET 7. Il peut être disponible dans une prochaine version.
Importante
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, il est recommandé de désactiver HTTP/3 jusqu’à ce que les problèmes soient résolus dans une prochaine version de .NET.
Paramètres HttpClient
La version HTTP peut être configurée en définissant HttpRequestMessage.Version sur 3.0. Toutefois, étant donné que tous les routeurs, pare-feu et proxys ne prennent pas en charge HTTP/3 correctement, il est recommandé de configurer HTTP/3 avec HTTP/1.1 et HTTP/2. Dans HttpClient, cela peut être effectué en spécifiant :
- HttpRequestMessage.Version à 1.1.
- HttpRequestMessage.VersionPolicy à HttpVersionPolicy.RequestVersionOrHigher.
Dépendances de plateforme
HTTP/3 utilise QUIC comme protocole de transport. L’implémentation .NET de HTTP/3 utilise MsQuic pour fournir des fonctionnalités QUIC. Par conséquent, la prise en charge de HTTP/3 par .NET dépend des conditions requises par la plateforme MsQuic. Pour plus d’informations sur l’installation de MsQuic, consultez dépendances de la plateforme QUIC. Si la plateforme sur laquelle HttpClient s’exécute n’a pas toutes les conditions requises pour HTTP/3, elle est désactivée.
Utilisation de HttpClient
L’exemple de code suivant utilise des instructions de niveau supérieur et montre comment spécifier HTTP3 dans la requête :
// See https://aka.ms/new-console-template for more information
using System.Net;
using var client = new HttpClient
{
DefaultRequestVersion = HttpVersion.Version30,
DefaultVersionPolicy = HttpVersionPolicy.RequestVersionExact
};
Console.WriteLine("--- localhost:5001 ---");
HttpResponseMessage resp = await client.GetAsync("https://localhost:5001/");
string body = await resp.Content.ReadAsStringAsync();
Console.WriteLine(
$"status: {resp.StatusCode}, version: {resp.Version}, " +
$"body: {body.Substring(0, Math.Min(100, body.Length))}");
Prise en charge de HTTP/3 dans .NET 6
Dans .NET 6, HTTP/3 est disponible en préversion , car la spécification HTTP/3 n’a pas encore été finalisée. Des problèmes de comportement ou de performances peuvent exister dans HTTP/3 avec .NET 6. Pour plus d’informations sur les fonctionnalités en préversion, consultez la spécification des fonctionnalités d’aperçu.
Pour activer la prise en charge de HTTP/3 dans .NET 6, incluez le RuntimeHostConfigurationOption nœud dans le fichier projet pour activer HTTP/3 avec HttpClient:
<ItemGroup>
<RuntimeHostConfigurationOption Value="true"
Include="System.Net.SocketsHttpHandler.Http3Support" />
</ItemGroup>
Vous pouvez également appeler System.AppContext.SetSwitch à partir de votre code d’application ou définir la DOTNET_SYSTEM_NET_HTTP_SOCKETSHTTPHANDLER_HTTP3SUPPORT variable d’environnement sur true. Pour plus d’informations, consultez les variables d’environnement .NET : DOTNET_SYSTEM_NET_HTTP_*.
La raison d’exiger un indicateur de configuration pour HTTP/3 consiste à protéger les applications contre la rupture future lors de l’utilisation de la stratégie RequestVersionOrHigherde version. Lors de l’appel d’un serveur qui utilise actuellement HTTP/1.1 et HTTP/2, si le serveur effectue une mise à niveau ultérieure vers HTTP/3, le client tente d’utiliser HTTP/3 et peut potentiellement être incompatible, car la norme n’est pas finale et peut donc changer après la publication de .NET 6.
.NET 6 est uniquement compatible avec les versions 1.9.x de libmsquic. Libmsquic 2.x n’est pas compatible avec .NET 6 en raison de modifications non compatibles dans la bibliothèque. Libmsquic reçoit des mises à jour pour 1.9.x quand il est nécessaire d’intégrer des correctifs de sécurité.
Serveur HTTP/3
HTTP/3 est pris en charge par ASP.NET avec le serveur Kestrel dans .NET 6 (en préversion) et .NET 7 (est entièrement pris en charge). Pour plus d’informations, consultez utiliser HTTP/3 avec le serveur web ASP.NET Core Kestrel.
Serveurs de test publics
Celui-ci héberge un site pour HTTP/3 qui peut être utilisé pour tester le client à l’adresse https://cloudflare-quic.com.