Separating field references from table updates

Independent QUIC streams need not arrive in one order, so a request referencing an unseen entry must wait. QPACK retains static and dynamic tables but sends insertions and capacity instructions on a dedicated encoder stream.

The decoder stream returns acknowledgments, cancellations and insertion feedback, helping the encoder track usable or releasable references. These streams coordinate compression state rather than carrying additional HTTP business requests.

References: [1]

Required Insert Count determines readiness

A field section’s Required Insert Count identifies how much dynamic-table state must already be present. If the decoder has not reached it, the stream blocks; sections without dynamic references use zero and avoid that dependency.

Settings bound potentially blocked streams. Referencing only acknowledged entries reduces risk, while permitted speculative references can improve compression. QPACK therefore does not promise that decoding never blocks.

References: [1]

Capacity, live references and flow control

Capacity alone does not authorize evicting the oldest entry: unacknowledged or outstanding references can keep it live. Encoders track those dependencies until acknowledgment or cancellation permits eviction.

Compression streams themselves use QUIC flow control. A request awaiting an update can deadlock if that update awaits credit dependent on consuming the request. Instruction sizing, stream credit and connection credit must therefore be considered together.

References: [1]