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