Mixing indices and literals
A field list is an ordered collection of name-value pairs that can include duplicates. HPACK can reference an entire table entry or send a literal value with a literal or indexed name, preserving the decoded order.
The static table supplies predefined common fields; the dynamic table stores connection-specific entries for reuse. Encoders choose their strategy while decoders follow the transmitted updates, rather than every encoder sharing one optimization heuristic.
References: [1]
Capacity and direction are separate
The dynamic table starts empty, inserts at the front and evicts older entries from the end under its capacity limit. Entry size counts unencoded name and value lengths plus 32 bytes of specified overhead, not their compressed wire length.
Request and response dynamic tables are independent. Insertions and evictions change index meanings, so a block must be interpreted in the correct connection state rather than copied between unrelated contexts.
References: [1]
Fixed Huffman coding and sensitive fields
Literals can use raw bytes or the specification’s fixed Huffman code, rather than applying general DEFLATE to the whole list. Table references and Huffman coding reduce redundancy at different levels.
A never-indexed literal directs intermediaries not to reencode the field as an indexed entry. Avoiding indexing does not make a field confidential: HPACK is not encryption, and transport protection and compression side channels remain separate concerns.
References: [1]