Zum Hauptinhalt springen

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