Aller au contenu principal

2. HTTP/3 Protocol Overview (Aperçu du protocole HTTP/3)

HTTP/3 fournit un transport pour la sémantique HTTP en utilisant le protocole de transport QUIC (QUIC Transport Protocol) et une couche de tramage interne (Framing Layer) similaire à HTTP/2.

Une fois qu'un client sait qu'un serveur HTTP/3 existe à un certain point de terminaison, il ouvre une connexion QUIC. QUIC fournit la négociation de protocole (Protocol Negotiation), le multiplexage basé sur les flux (Stream-Based Multiplexing) et le contrôle de flux (Flow Control). La découverte d'un point de terminaison HTTP/3 est décrite dans la section 3.1.

Dans chaque flux, l'unité de base de communication HTTP/3 est une trame (Frame) (section 7.2). Chaque type de trame a un objectif différent. Par exemple, les trames HEADERS et DATA forment la base des requêtes et réponses HTTP (section 4.1). Les trames qui s'appliquent à l'ensemble de la connexion sont transmises sur un flux de contrôle dédié (Control Stream).

Le multiplexage des requêtes est effectué en utilisant l'abstraction de flux QUIC (Stream Abstraction), qui est décrite dans la section 2 de [QUIC-TRANSPORT]. Chaque paire requête-réponse consomme un seul flux QUIC. Les flux sont indépendants les uns des autres, de sorte qu'un flux bloqué ou subissant une perte de paquets n'empêche pas la progression des autres flux.

Le push serveur (Server Push) est un mode d'interaction introduit dans HTTP/2 ([HTTP/2]) qui permet à un serveur de pousser un échange requête-réponse vers un client en anticipation de la requête indiquée par le client. Cela fait un compromis entre l'utilisation du réseau et un gain de latence potentiel. Plusieurs trames HTTP/3 sont utilisées pour gérer le push serveur, telles que PUSH_PROMISE, MAX_PUSH_ID et CANCEL_PUSH.

Comme dans HTTP/2, les champs de requête et de réponse (Fields) sont compressés pour la transmission. Parce que HPACK ([HPACK]) s'appuie sur la transmission ordonnée des sections de champs compressés (Field Sections) (une garantie non fournie par QUIC), HTTP/3 remplace HPACK par QPACK ([QPACK]). QPACK utilise des flux unidirectionnels séparés pour modifier et suivre l'état de la table de champs (Field Table State), tandis que les sections de champs encodées font référence à l'état de la table sans le modifier.

2.1. Document Organization (Organisation du document)

Les sections suivantes fournissent un aperçu détaillé du cycle de vie d'une connexion HTTP/3 :

  • "Connection Setup and Management" (Configuration et gestion de la connexion) (section 3) couvre la manière dont un point de terminaison HTTP/3 est découvert et une connexion HTTP/3 est établie.

  • "Expressing HTTP Semantics in HTTP/3" (Expression de la sémantique HTTP dans HTTP/3) (section 4) décrit comment la sémantique HTTP est exprimée à l'aide de trames.

  • "Connection Closure" (Fermeture de connexion) (section 5) décrit comment les connexions HTTP/3 sont terminées, soit gracieusement, soit brusquement.

Les détails du protocole filaire (Wire Protocol) et les interactions avec le transport sont décrits dans les sections suivantes :

  • "Stream Mapping and Usage" (Mappage et utilisation des flux) (section 6) décrit la manière dont les flux QUIC sont utilisés.

  • "HTTP Framing Layer" (Couche de tramage HTTP) (section 7) décrit les trames utilisées sur la plupart des flux.

  • "Error Handling" (Gestion des erreurs) (section 8) décrit comment les conditions d'erreur sont traitées et exprimées, soit sur un flux particulier, soit pour la connexion dans son ensemble.

Des ressources supplémentaires sont fournies dans les sections finales :

  • "Extensions to HTTP/3" (Extensions à HTTP/3) (section 9) décrit comment de nouvelles capacités peuvent être ajoutées dans de futurs documents.

  • Une comparaison plus détaillée entre HTTP/2 et HTTP/3 peut être trouvée dans l'annexe A.

2.2. Conventions and Terminology (Conventions et terminologie)

Les mots-clés "MUST" (doit), "MUST NOT" (ne doit pas), "REQUIRED" (requis), "SHALL" (doit), "SHALL NOT" (ne doit pas), "SHOULD" (devrait), "SHOULD NOT" (ne devrait pas), "RECOMMENDED" (recommandé), "NOT RECOMMENDED" (non recommandé), "MAY" (peut) et "OPTIONAL" (optionnel) dans ce document doivent être interprétés comme décrit dans BCP 14 [RFC2119] [RFC8174] quand, et seulement quand, ils apparaissent en majuscules, comme indiqué ici.

Ce document utilise l'encodage d'entiers de longueur variable (Variable-Length Integer Encoding) de [QUIC-TRANSPORT].

Les termes suivants sont utilisés :

abort (interruption) : Une terminaison abrupte d'une connexion ou d'un flux, éventuellement due à une condition d'erreur.

client : Le point de terminaison qui initie une connexion HTTP/3. Les clients envoient des requêtes HTTP et reçoivent des réponses HTTP.

connection (connexion) : Une connexion de couche transport entre deux points de terminaison utilisant QUIC comme protocole de transport.

connection error (erreur de connexion) : Une erreur qui affecte l'ensemble de la connexion HTTP/3.

endpoint (point de terminaison) : Le client ou le serveur de la connexion.

frame (trame) : La plus petite unité de communication sur un flux dans HTTP/3, composée d'un en-tête et d'une séquence d'octets de longueur variable structurée selon le type de trame.

Des éléments de protocole appelés "trames" existent à la fois dans ce document et dans [QUIC-TRANSPORT]. Lorsque des trames de [QUIC-TRANSPORT] sont référencées, le nom de la trame sera préfixé par "QUIC". Par exemple, "QUIC CONNECTION_CLOSE frames". Les références sans ce préfixe font référence aux trames définies dans la section 7.2.

HTTP/3 connection (connexion HTTP/3) : Une connexion QUIC où le protocole d'application négocié est HTTP/3.

peer (pair) : Un point de terminaison. Lors de la discussion d'un point de terminaison particulier, "peer" fait référence au point de terminaison distant du sujet principal de discussion.

receiver (récepteur) : Un point de terminaison qui reçoit des trames.

sender (émetteur) : Un point de terminaison qui transmet des trames.

server (serveur) : Le point de terminaison qui accepte une connexion HTTP/3. Les serveurs reçoivent des requêtes HTTP et envoient des réponses HTTP.

stream (flux) : Un flux d'octets bidirectionnel ou unidirectionnel (Bytestream) fourni par le transport QUIC. Tous les flux au sein d'une connexion HTTP/3 peuvent être considérés comme des "flux HTTP/3", mais plusieurs types de flux sont définis dans HTTP/3.

stream error (erreur de flux) : Une erreur au niveau de l'application sur le flux individuel.

Le terme "content" (contenu) est défini dans la section 6.4 de [HTTP].

Enfin, les termes "resource" (ressource), "message", "user agent" (agent utilisateur), "origin server" (serveur d'origine), "gateway" (passerelle), "intermediary" (intermédiaire), "proxy" et "tunnel" sont définis dans la section 3 de [HTTP].

Les diagrammes de paquets (Packet Diagrams) dans ce document utilisent le format défini dans la section 1.3 de [QUIC-TRANSPORT] pour illustrer l'ordre et la taille des champs.