Aller au contenu principal

2. Aperçu du Protocole HTTP/2

HTTP/2 fournit un transport optimisé pour la sémantique HTTP. HTTP/2 prend en charge toutes les fonctionnalités principales de HTTP mais vise à être plus efficace que HTTP/1.1.

HTTP/2 est un protocole de couche application orienté connexion qui s'exécute sur une connexion TCP ([TCP]). Le client est l'initiateur de la connexion TCP.

L'unité de protocole de base dans HTTP/2 est une trame (Section 4.1). Chaque type de trame sert un objectif différent. Par exemple, les trames HEADERS et DATA forment la base des requêtes et réponses HTTP (Section 8.1); d'autres types de trames comme SETTINGS, WINDOW_UPDATE et PUSH_PROMISE sont utilisés pour soutenir d'autres fonctionnalités HTTP/2.

Le multiplexage des requêtes est réalisé en associant chaque échange requête/réponse HTTP à son propre flux (Section 5). Les flux sont largement indépendants les uns des autres, de sorte qu'une requête ou une réponse bloquée ou en attente n'empêche pas la progression sur d'autres flux.

L'utilisation efficace du multiplexage dépend du contrôle de flux et de la priorisation. Le contrôle de flux (Section 5.2) garantit qu'il est possible d'utiliser efficacement les flux multiplexés en limitant les données transmises à ce que le récepteur est capable de traiter. La priorisation (Section 5.3) garantit que les ressources limitées sont utilisées de la manière la plus efficace. Cette révision de HTTP/2 déprécie le schéma de signalisation de priorité de [RFC7540].

Étant donné que les champs HTTP utilisés dans une connexion peuvent contenir de grandes quantités de données redondantes, les trames qui les contiennent sont compressées (Section 4.3). Cela a un impact particulièrement avantageux sur les tailles de requête dans le cas commun, permettant de compresser de nombreuses requêtes en un seul paquet.

Enfin, HTTP/2 ajoute un nouveau mode d'interaction optionnel par lequel un serveur peut pousser des réponses à un client (Section 8.4). Cela est destiné à permettre à un serveur d'envoyer de manière spéculative des données à un client que le serveur anticipe que le client aura besoin, échangeant une certaine utilisation du réseau contre un gain de latence potentiel. Le serveur fait cela en synthétisant une requête, qu'il envoie sous forme de trame PUSH_PROMISE. Le serveur est alors capable d'envoyer une réponse à la requête synthétique sur un flux séparé.

2.1. Organisation du Document

La spécification HTTP/2 est divisée en quatre parties:

  • Démarrage de HTTP/2 (Section 3) couvre comment une connexion HTTP/2 est initiée.

  • Les couches trame (Section 4) et flux (Section 5) décrivent la manière dont les trames HTTP/2 sont structurées et formées en flux multiplexés.

  • Les définitions de trame (Section 6) et d'erreur (Section 7) incluent les détails des types de trame et d'erreur utilisés dans HTTP/2.

  • Les mappages HTTP (Section 8) et les exigences supplémentaires (Section 9) décrivent comment la sémantique HTTP est exprimée en utilisant des trames et des flux.

Bien que certains des concepts de couche trame et flux soient isolés de HTTP, cette spécification ne définit pas une couche de trame complètement générique. Les couches trame et flux sont adaptées aux besoins de HTTP.

2.2. Conventions et Terminologie

Les mots-clés "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", "SHOULD", "SHOULD NOT", "RECOMMENDED", "NOT RECOMMENDED", "MAY" et "OPTIONAL" 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 montré ici.

Toutes les valeurs numériques sont en ordre d'octets réseau. Les valeurs sont non signées sauf indication contraire. Les valeurs littérales sont fournies en décimal ou hexadécimal selon le cas. Les littéraux hexadécimaux sont préfixés par "0x" pour les distinguer des littéraux décimaux.

Cette spécification décrit les formats binaires en utilisant les conventions décrites dans la Section 1.3 de RFC 9000 [QUIC]. Notez que ce format utilise l'ordre d'octets réseau et que les bits de valeur élevée sont listés avant les bits de valeur faible.

Les termes suivants sont utilisés:

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

connection: Une connexion de couche transport entre deux points de terminaison.

connection error: Une erreur qui affecte toute la connexion HTTP/2.

endpoint: Soit le client soit le serveur de la connexion.

frame: La plus petite unité de communication au sein d'une connexion HTTP/2, composée d'un en-tête et d'une séquence d'octets de longueur variable structurée selon le type de trame.

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

receiver: Un point de terminaison qui reçoit des trames.

sender: Un point de terminaison qui transmet des trames.

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

stream: Un flux bidirectionnel de trames au sein de la connexion HTTP/2.

stream error: Une erreur sur le flux HTTP/2 individuel.

Enfin, les termes "gateway", "intermediary", "proxy" et "tunnel" sont définis dans la Section 3.7 de [HTTP]. Les intermédiaires agissent à la fois comme client et serveur à différents moments.

Le terme "content" tel qu'il s'applique aux corps de message est défini dans la Section 6.4 de [HTTP].