Aller au contenu principal

Annexe A. Considérations pour la transition depuis HTTP/2 (Considerations for Transitioning from HTTP/2)

HTTP/3 est basé sur la conception d'HTTP/2 et partage la sémantique de base. Cette annexe résume les principales différences entre HTTP/2 et HTTP/3 pour aider les implémenteurs à comprendre la relation entre les deux protocoles.

A.1. Flux (Streams)

HTTP/3 utilise les flux QUIC, tandis qu'HTTP/2 utilise une abstraction de flux sur TCP. Différences clés :

  • Identificateurs de flux : Les ID de flux dans HTTP/3 sont attribués par QUIC, pas par HTTP/3
  • Priorité des flux : HTTP/3 n'inclut pas le schéma de priorité des flux d'HTTP/2
  • Contrôle de flux : HTTP/3 utilise les mécanismes de contrôle de flux de QUIC

A.2. Types de trames HTTP (HTTP Frame Types)

De nombreux types de trames HTTP/2 sont préservés ou modifiés dans HTTP/3 :

Types de trames préservés :

  • DATA (0x00) - Fonctionnalité similaire
  • HEADERS (0x01) - Fonctionnalité similaire
  • SETTINGS (0x04) - Similaire mais uniquement sur le flux de contrôle
  • PUSH_PROMISE (0x05) - Fonctionnalité similaire
  • GOAWAY (0x07) - Fonctionnalité similaire

Types de trames HTTP/2 supprimés ou remplacés :

  • PRIORITY (0x02) - Supprimé dans HTTP/3
  • RST_STREAM (0x03) - Remplacé par RESET_STREAM de QUIC
  • PING (0x06) - Remplacé par la trame PING de QUIC
  • WINDOW_UPDATE (0x08) - Remplacé par le contrôle de flux de QUIC
  • CONTINUATION (0x09) - Non nécessaire dans HTTP/3

Nouveaux types de trames dans HTTP/3 :

  • CANCEL_PUSH (0x03) - Annuler le push serveur
  • MAX_PUSH_ID (0x0d) - Contrôler l'espace d'ID de push

A.3. Paramètres SETTINGS HTTP/2 (HTTP/2 SETTINGS Parameters)

Les paramètres dans HTTP/3 diffèrent d'HTTP/2 :

Paramètres supprimés :

  • SETTINGS_HEADER_TABLE_SIZE - Remplacé par les paramètres QPACK
  • SETTINGS_ENABLE_PUSH - Contrôlé via MAX_PUSH_ID
  • SETTINGS_MAX_CONCURRENT_STREAMS - Contrôlé par les paramètres de transport QUIC
  • SETTINGS_INITIAL_WINDOW_SIZE - Remplacé par le contrôle de flux QUIC
  • SETTINGS_MAX_FRAME_SIZE - Non nécessaire dans HTTP/3
  • SETTINGS_MAX_HEADER_LIST_SIZE - Remplacé par SETTINGS_MAX_FIELD_SECTION_SIZE

Paramètres préservés :

  • SETTINGS_MAX_FIELD_SECTION_SIZE (0x06) - Similaire à SETTINGS_MAX_HEADER_LIST_SIZE d'HTTP/2

A.4. Codes d'erreur HTTP/2 (HTTP/2 Error Codes)

HTTP/3 définit son propre ensemble de codes d'erreur qui diffèrent des codes d'erreur d'HTTP/2. Les implémenteurs doivent noter les relations de correspondance mais ne doivent pas supposer une correspondance directe un-à-un.

A.5. Autres différences (Other Differences)

Gestion des connexions :

  • HTTP/3 utilise la gestion des connexions de QUIC, y compris la migration de connexion et le support multichemin
  • Le préambule de connexion d'HTTP/2 n'est pas nécessaire

Push serveur :

  • Le mécanisme de push serveur dans HTTP/3 est similaire à HTTP/2 mais utilise différentes trames et types de flux
  • Les ID de push sont explicites dans HTTP/3

Compression des champs :

  • HTTP/3 utilise QPACK au lieu de HPACK
  • QPACK est conçu pour gérer la livraison dans le désordre

Extensibilité :

  • HTTP/3 fournit des mécanismes d'extension plus flexibles
  • Les nouveaux types de trames, paramètres et types de flux peuvent être utilisés sans négociation