Anhang A. Überlegungen zum Übergang von HTTP/2 (Considerations for Transitioning from HTTP/2)
HTTP/3 basiert auf dem HTTP/2-Design und teilt die Kernsemanktik. Dieser Anhang fasst die Hauptunterschiede zwischen HTTP/2 und HTTP/3 zusammen, um Implementierern zu helfen, die Beziehung zwischen den beiden Protokollen zu verstehen.
A.1. Streams
HTTP/3 verwendet QUIC-Streams, während HTTP/2 eine Stream-Abstraktion über TCP verwendet. Hauptunterschiede:
- Stream-Identifikatoren: Stream-IDs in HTTP/3 werden von QUIC zugewiesen, nicht von HTTP/3
- Stream-Priorität: HTTP/3 enthält nicht das Stream-Prioritätsschema von HTTP/2
- Flusskontrolle: HTTP/3 verwendet die Flusskontrollmechanismen von QUIC
A.2. HTTP-Frame-Typen (HTTP Frame Types)
Viele HTTP/2-Frame-Typen werden in HTTP/3 beibehalten oder modifiziert:
Beibehaltene Frame-Typen:
- DATA (0x00) - Ähnliche Funktionalität
- HEADERS (0x01) - Ähnliche Funktionalität
- SETTINGS (0x04) - Ähnlich, aber nur auf Kontrollstream
- PUSH_PROMISE (0x05) - Ähnliche Funktionalität
- GOAWAY (0x07) - Ähnliche Funktionalität
Entfernte oder ersetzte HTTP/2-Frame-Typen:
- PRIORITY (0x02) - In HTTP/3 entfernt
- RST_STREAM (0x03) - Durch QUICs RESET_STREAM ersetzt
- PING (0x06) - Durch QUICs PING-Frame ersetzt
- WINDOW_UPDATE (0x08) - Durch QUICs Flusskontrolle ersetzt
- CONTINUATION (0x09) - In HTTP/3 nicht erforderlich
Neue Frame-Typen in HTTP/3:
- CANCEL_PUSH (0x03) - Server-Push abbrechen
- MAX_PUSH_ID (0x0d) - Push-ID-Raum kontrollieren
A.3. HTTP/2-SETTINGS-Parameter (HTTP/2 SETTINGS Parameters)
Einstellungen in HTTP/3 unterscheiden sich von HTTP/2:
Entfernte Einstellungen:
- SETTINGS_HEADER_TABLE_SIZE - Durch QPACK-Einstellungen ersetzt
- SETTINGS_ENABLE_PUSH - Über MAX_PUSH_ID gesteuert
- SETTINGS_MAX_CONCURRENT_STREAMS - Durch QUIC-Transportparameter gesteuert
- SETTINGS_INITIAL_WINDOW_SIZE - Durch QUIC-Flusskontrolle ersetzt
- SETTINGS_MAX_FRAME_SIZE - In HTTP/3 nicht erforderlich
- SETTINGS_MAX_HEADER_LIST_SIZE - Durch SETTINGS_MAX_FIELD_SECTION_SIZE ersetzt
Beibehaltene Einstellungen:
- SETTINGS_MAX_FIELD_SECTION_SIZE (0x06) - Ähnlich wie SETTINGS_MAX_HEADER_LIST_SIZE von HTTP/2
A.4. HTTP/2-Fehlercodes (HTTP/2 Error Codes)
HTTP/3 definiert einen eigenen Satz von Fehlercodes, die sich von den Fehlercodes von HTTP/2 unterscheiden. Implementierer sollten die Zuordnungsbeziehungen beachten, aber keine direkte Eins-zu-Eins-Entsprechung annehmen.
A.5. Weitere Unterschiede (Other Differences)
Verbindungsverwaltung:
- HTTP/3 verwendet QUICs Verbindungsverwaltung, einschließlich Verbindungsmigration und Multipfad-Unterstützung
- HTTP/2s Verbindungspräambel ist nicht erforderlich
Server-Push:
- Der Server-Push-Mechanismus in HTTP/3 ähnelt HTTP/2, verwendet jedoch unterschiedliche Frames und Stream-Typen
- Push-IDs sind in HTTP/3 explizit
Feldkomprimierung:
- HTTP/3 verwendet QPACK anstelle von HPACK
- QPACK ist für die Handhabung der ungeordneten Zustellung konzipiert
Erweiterbarkeit:
- HTTP/3 bietet flexiblere Erweiterungsmechanismen
- Neue Frame-Typen, Einstellungen und Stream-Typen können ohne Verhandlung verwendet werden