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