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é.