Every HTTP/3 frame on a request stream has the same shape:
Frame {
Type (varint),
Length (varint),
Frame Payload (..),
}
The frame type selects the payload schema. RFC 9114 §7.2 lists
the seven core types (DATA, HEADERS, CANCEL_PUSH, SETTINGS,
PUSH_PROMISE, GOAWAY, MAX_PUSH_ID); receivers are required to
ignore (not error on) unknown types so the wire format can be
extended without protocol negotiation.
This module is intentionally sans-I/O: the codec works on byte
spans + buffers and never touches a socket or a QUIC stream
adapter. The codec layer is the load-bearing primitive the
future reactor + QUIC stream multiplexer will compose on top of.
References:
- RFC 9114 §7 "HTTP/3 Frames".
- RFC 9000 §16 (varint format; reused via :mod:
flare.quic.varint).
Aliases
comptime H3_FRAME_TYPE_DATA = UInt64(0)
comptime H3_FRAME_TYPE_CANCEL_PUSH = UInt64(3)
comptime H3_FRAME_TYPE_SETTINGS = UInt64(4)
comptime H3_FRAME_TYPE_PUSH_PROMISE = UInt64(5)
comptime H3_FRAME_TYPE_GOAWAY = UInt64(7)
comptime H3_FRAME_TYPE_MAX_PUSH_ID = UInt64(13)
comptime H3_FRAME_TYPE_H2_PRIORITY = UInt64(2)
HTTP/2 PRIORITY's type, reserved in HTTP/3 (RFC 9114 sec 7.2.8, 11.2.1): receipt on any stream is H3_FRAME_UNEXPECTED.
comptime H3_FRAME_TYPE_H2_PING = UInt64(6)
HTTP/2 PING's type, reserved in HTTP/3 (see :data:H3_FRAME_TYPE_H2_PRIORITY).
comptime H3_FRAME_TYPE_H2_WINDOW_UPDATE = UInt64(8)
HTTP/2 WINDOW_UPDATE's type, reserved in HTTP/3.
comptime H3_FRAME_TYPE_H2_CONTINUATION = UInt64(9)
HTTP/2 CONTINUATION's type, reserved in HTTP/3.
comptime H3_SETTINGS_QPACK_MAX_TABLE_CAPACITY = UInt64(1)
comptime H3_SETTINGS_MAX_FIELD_SECTION_SIZE = UInt64(6)
comptime H3_SETTINGS_QPACK_BLOCKED_STREAMS = UInt64(7)
comptime H3_SETTINGS_ENABLE_CONNECT_PROTOCOL = UInt64(8)
RFC 9220 — Bootstrapping WebSockets with HTTP/3.
comptime H3_SETTINGS_H3_DATAGRAM = UInt64(51)
RFC 9297 sec 2.1.1 — HTTP Datagrams; the value is 0 or 1.