Every header is emitted as a Literal-without-Indexing field
(§6.2.2). The dynamic table on the encoder side is always
empty, which is RFC-legal: HPACK explicitly allows the
encoder to choose not to use the dynamic table at all
(RFC 7541 §2.3.3 / §4.1). This trades a little wire bandwidth
for a much simpler encoder + zero risk of CRIME-class
information leaks across requests.
allow_huffman gates H=1 literal emission. When
False (default) the encoder emits raw H=0 literals,
matching the legacy wire output byte-for-byte. When True
each literal is emitted as the shorter of raw vs Huffman
(the Huffman length is computed first; the raw form wins
on tie). Since the dynamic table is empty either way, no
cross-request information can leak through compressed-length
side channels: every literal is encoded against the static
Appendix B Huffman table, independent of any prior request's
bytes. Callers that worry about a per-request compression-
side channel against secret tokens should leave the flag off.
A future follow-up can teach the encoder to look up the static
table for the most common headers (:status, :method,
etc.) without touching the dynamic table.