Aller au contenu principal

5. Flux et multiplexage (Streams and Multiplexing)

Un « flux » (Stream) est une séquence indépendante et bidirectionnelle de trames (Bidirectional Sequence of Frames) échangées entre le client et le serveur au sein d'une connexion HTTP/2.

Caractéristiques principales

  • Les flux peuvent être établis et utilisés unilatéralement ou partagés par le client ou le serveur
  • Les flux peuvent être fermés par l'un ou l'autre point de terminaison
  • L'ordre des trames envoyées sur un flux est significatif
  • Les flux sont identifiés par un entier (identifiant de flux, Stream Identifier)
  • Les ID de flux initiés par les clients sont impairs ; ceux initiés par les serveurs sont pairs
  • L'ID de flux 0 est réservé aux messages de contrôle de connexion

5.1 États des flux (Stream States)

Les flux passent par divers états au cours de leur durée de vie :

                         +--------+
send PP | | recv PP
,--------| idle |--------.
/ | | \
v +--------+ v
+----------+ | +----------+
| | | send H / | |
,------| reserved | | recv H | reserved |------.
| | (local) | | | (remote) | |
| +----------+ v +----------+ |
| | +--------+ | |
| | recv ES | | send ES | |
| send H | ,-------| open |-------. | recv H |
| | / | | \ | |
| v v +--------+ v v |
| +----------+ | +----------+ |
| | half | | | half | |
| | closed | | send R / | closed | |
| | (remote) | | recv R | (local) | |
| +----------+ | +----------+ |
| | | | |
| | send ES / | recv ES / | |
| | send R / v send R / | |
| | recv R +--------+ recv R | |
| send R / `----------->| |<-----------' send R / |
| recv R | closed | recv R |
`----------------------->| |<----------------------'
+--------+

5.2 Contrôle de flux (Flow Control)

HTTP/2 fournit un contrôle de flux (Flow Control) en utilisant des trames WINDOW_UPDATE pour empêcher l'expéditeur de submerger le destinataire.

Principes :

  • Le contrôle de flux est spécifique à une connexion
  • Le contrôle de flux est directionnel
  • Le contrôle de flux est basé sur le crédit
  • La taille initiale de la fenêtre de contrôle de flux est de 65 535 octets
  • Le contrôle de flux s'applique aux trames DATA

5.3 Priorité des flux (Stream Priority)

Les clients peuvent attribuer une priorité (Priority) aux flux en utilisant des trames PRIORITY ou des trames HEADERS avec des informations de priorité.