Skip to main content

Appendix A. Considerations for Transitioning from HTTP/2

HTTP/3 is based on the HTTP/2 design and shares core semantics. This appendix summarizes the major differences between HTTP/2 and HTTP/3 to help implementers understand the relationship between the two protocols.

A.1. Streams

HTTP/3 uses QUIC streams, while HTTP/2 uses a stream abstraction over TCP. Key differences:

  • Stream Identifiers: Stream IDs in HTTP/3 are assigned by QUIC, not by HTTP/3
  • Stream Priority: HTTP/3 does not include HTTP/2's stream priority scheme
  • Flow Control: HTTP/3 uses QUIC's flow control mechanisms

A.2. HTTP Frame Types

Many HTTP/2 frame types are preserved or modified in HTTP/3:

Preserved Frame Types:

  • DATA (0x00) - Similar functionality
  • HEADERS (0x01) - Similar functionality
  • SETTINGS (0x04) - Similar but only on control stream
  • PUSH_PROMISE (0x05) - Similar functionality
  • GOAWAY (0x07) - Similar functionality

Removed or Replaced HTTP/2 Frame Types:

  • PRIORITY (0x02) - Removed in HTTP/3
  • RST_STREAM (0x03) - Replaced by QUIC's RESET_STREAM
  • PING (0x06) - Replaced by QUIC's PING frame
  • WINDOW_UPDATE (0x08) - Replaced by QUIC's flow control
  • CONTINUATION (0x09) - Not needed in HTTP/3

New Frame Types in HTTP/3:

  • CANCEL_PUSH (0x03) - Cancel server push
  • MAX_PUSH_ID (0x0d) - Control push ID space

A.3. HTTP/2 SETTINGS Parameters

Settings in HTTP/3 differ from HTTP/2:

Removed Settings:

  • SETTINGS_HEADER_TABLE_SIZE - Replaced by QPACK settings
  • SETTINGS_ENABLE_PUSH - Controlled via MAX_PUSH_ID
  • SETTINGS_MAX_CONCURRENT_STREAMS - Controlled by QUIC transport parameters
  • SETTINGS_INITIAL_WINDOW_SIZE - Replaced by QUIC flow control
  • SETTINGS_MAX_FRAME_SIZE - Not needed in HTTP/3
  • SETTINGS_MAX_HEADER_LIST_SIZE - Replaced by SETTINGS_MAX_FIELD_SECTION_SIZE

Preserved Settings:

  • SETTINGS_MAX_FIELD_SECTION_SIZE (0x06) - Similar to HTTP/2's SETTINGS_MAX_HEADER_LIST_SIZE

A.4. HTTP/2 Error Codes

HTTP/3 defines its own set of error codes that differ from HTTP/2's error codes. Implementers should note the mapping relationships but should not assume direct one-to-one correspondence.

A.5. Other Differences

Connection Management:

  • HTTP/3 uses QUIC's connection management, including connection migration and multipath support
  • HTTP/2's connection preface is not needed

Server Push:

  • Server push mechanism in HTTP/3 is similar to HTTP/2 but uses different frames and stream types
  • Push IDs are explicit in HTTP/3

Field Compression:

  • HTTP/3 uses QPACK instead of HPACK
  • QPACK is designed to handle out-of-order delivery

Extensibility:

  • HTTP/3 provides more flexible extension mechanisms
  • New frame types, settings, and stream types can be used without negotiation