<?xml version='1.0' encoding='utf-8'?>
<?xml-stylesheet type="text/xsl" href="rfc2629.xslt" ?>
<!-- generated by https://github.com/cabo/kramdown-rfc2629 version 1.2.13 -->
<!DOCTYPE rfc SYSTEM "rfc2629-xhtml.ent">
<?rfc toc="yes"?>
<?rfc sortrefs="yes"?>
<?rfc symrefs="yes"?>
<?rfc docmapping="yes"?>
<rfc xmlns:xi="http://www.w3.org/2001/XInclude" ipr="trust200902" docName="draft-ietf-quic-qpack-13" category="std" obsoletes="" updates="" submissionType="IETF" xml:lang="en" tocInclude="true" sortRefs="true" symRefs="true" version="3">
  <!-- xml2rfc v2v3 conversion 2.37.3 -->
  <front>
    <title abbrev="QPACK">QPACK: Header Compression for HTTP/3</title>
    <seriesInfo name="Internet-Draft" value="draft-ietf-quic-qpack-13"/>
    <author initials="C." surname="Krasic" fullname="Charles 'Buck' Krasic">
      <organization>Netflix</organization>
      <address>
        <email>ckrasic@netflix.com</email>
      </address>
    </author>
    <author initials="M." surname="Bishop" fullname="Mike Bishop">
      <organization>Akamai Technologies</organization>
      <address>
        <email>mbishop@evequefou.be</email>
      </address>
    </author>
    <author initials="A." surname="Frindell" fullname="Alan Frindell" role="editor">
      <organization>Facebook</organization>
      <address>
        <email>afrind@fb.com</email>
      </address>
    </author>
    <date year="2020" month="February" day="21"/>
    <area>Transport</area>
    <workgroup>QUIC</workgroup>
    <abstract>
      <t>This specification defines QPACK, a compression format for efficiently
representing HTTP header fields, to be used in HTTP/3. This is a variation of
HPACK header compression that seeks to reduce head-of-line blocking.</t>
    </abstract>
    <note>
      <name>Note to Readers</name>
      <t>Discussion of this draft takes place on the QUIC working group mailing list
(quic@ietf.org), which is archived at
<eref target="https://mailarchive.ietf.org/arch/search/?email_list=quic">https://mailarchive.ietf.org/arch/search/?email_list=quic</eref>.</t>
      <t>Working Group information can be found at <eref target="https://github.com/quicwg">https://github.com/quicwg</eref>; source
code and issues list for this draft can be found at
<eref target="https://github.com/quicwg/base-drafts/labels/-qpack">https://github.com/quicwg/base-drafts/labels/-qpack</eref>.</t>
    </note>
  </front>
  <middle>
    <section anchor="introduction" numbered="true" toc="default">
      <name>Introduction</name>
      <t>The QUIC transport protocol <xref target="QUIC-TRANSPORT" format="default"/> is designed to support HTTP
semantics, and its design subsumes many of the features of HTTP/2 <xref target="RFC7540" format="default"/>.
HTTP/2 uses HPACK <xref target="RFC7541" format="default"/> for header compression.  If HPACK were used for
HTTP/3 <xref target="HTTP3" format="default"/>, it would induce head-of-line blocking due to built-in
assumptions of a total ordering across frames on all streams.</t>
      <t>QPACK reuses core concepts from HPACK, but is redesigned to allow correctness in
the presence of out-of-order delivery, with flexibility for implementations to
balance between resilience against head-of-line blocking and optimal compression
ratio.  The design goals are to closely approach the compression ratio of HPACK
with substantially less head-of-line blocking under the same loss conditions.</t>
      <section anchor="conventions-and-definitions" numbered="true" toc="default">
        <name>Conventions and Definitions</name>
        <t>The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", "SHOULD",
"SHOULD NOT", "RECOMMENDED", "NOT RECOMMENDED", "MAY", and "OPTIONAL" in this
document are to be interpreted as described in BCP 14 <xref target="RFC2119" format="default"/> <xref target="RFC8174" format="default"/>
when, and only when, they appear in all capitals, as shown here.</t>
        <t>Definitions of terms that are used in this document:</t>
        <dl newline="false" spacing="normal">
          <dt>Header field:</dt>
          <dd>
  A name-value pair sent as part of an HTTP message.</dd>
          <dt>Header list:</dt>
          <dd>
  An ordered collection of header fields associated with an HTTP message.  A
header list can contain multiple header fields with the same name.  It can
also contain duplicate header fields.</dd>
          <dt>Header block:</dt>
          <dd>
  The compressed representation of a header list.</dd>
          <dt>Encoder:</dt>
          <dd>
  An implementation which transforms a header list into a header block.</dd>
          <dt>Decoder:</dt>
          <dd>
  An implementation which transforms a header block into a header list.</dd>
          <dt>Absolute Index:</dt>
          <dd>
  A unique index for each entry in the dynamic table.</dd>
          <dt>Base:</dt>
          <dd>
  A reference point for relative and post-base indices.  References to dynamic
table entries in header blocks are relative to a Base.</dd>
          <dt>Insert Count:</dt>
          <dd>
  The total number of entries inserted in the dynamic table.</dd>
        </dl>
        <t>QPACK is a name, not an acronym.</t>
      </section>
      <section anchor="notational-conventions" numbered="true" toc="default">
        <name>Notational Conventions</name>
        <t>Diagrams use the format described in Section 3.1 of <xref target="RFC2360" format="default"/>, with the
following additional conventions:</t>
        <dl newline="false" spacing="normal">
          <dt>x (A)</dt>
          <dd>
  Indicates that x is A bits long</dd>
          <dt>x (A+)</dt>
          <dd>
  Indicates that x uses the prefixed integer encoding defined in
<xref target="prefixed-integers" format="default"/>, beginning with an A-bit prefix.</dd>
          <dt>x ...</dt>
          <dd>
  Indicates that x is variable-length and extends to the end of the region.</dd>
        </dl>
      </section>
    </section>
    <section anchor="compression-process-overview" numbered="true" toc="default">
      <name>Compression Process Overview</name>
      <t>Like HPACK, QPACK uses two tables for associating header fields to indices.  The
static table (<xref target="header-table-static" format="default"/>) is predefined and contains common header
fields (some of them with an empty value).  The dynamic table
(<xref target="header-table-dynamic" format="default"/>) is built up over the course of the connection and can
be used by the encoder to index header fields in the encoded header lists.</t>
      <t>QPACK defines unidirectional streams for sending instructions from encoder to
decoder and vice versa.</t>
      <section anchor="encoder" numbered="true" toc="default">
        <name>Encoder</name>
        <t>An encoder converts a header list into a header block by emitting either an
indexed or a literal representation for each header field in the list; see
<xref target="header-block-representations" format="default"/>.  Indexed representations achieve high
compression by replacing the literal name and possibly the value with an index
to either the static or dynamic table.  References to the static table and
literal representations do not require any dynamic state and never risk
head-of-line blocking.  References to the dynamic table risk head-of-line
blocking if the encoder has not received an acknowledgement indicating the entry
is available at the decoder.</t>
        <t>An encoder MAY insert any entry in the dynamic table it chooses; it is not
limited to header fields it is compressing.</t>
        <t>QPACK preserves the ordering of header fields within each header list.  An
encoder MUST emit header field representations in the order they appear in the
input header list.</t>
        <t>QPACK is designed to contain the more complex state tracking to the encoder,
while the decoder is relatively simple.</t>
        <section anchor="reference-tracking" numbered="true" toc="default">
          <name>Reference Tracking</name>
          <t>An encoder MUST ensure that a header block which references a dynamic table
entry is not processed by the decoder after the referenced entry has been
evicted.  Hence the encoder needs to retain information about each compressed
header block that references the dynamic table until that header block is
acknowledged by the decoder; see <xref target="header-acknowledgement" format="default"/>.</t>
        </section>
        <section anchor="blocked-insertion" numbered="true" toc="default">
          <name>Limits on Dynamic Table Insertions</name>
          <t>Inserting entries into the dynamic table might not be possible if the table
contains entries which cannot be evicted.</t>
          <t>A dynamic table entry cannot be evicted immediately after insertion, even if it
has never been referenced. Once the insertion of a dynamic table entry has been
acknowledged and there are no outstanding unacknowledged references to the
entry, the entry becomes evictable.</t>
          <t>If the dynamic table does not contain enough room for a new entry without
evicting other entries, and the entries which would be evicted are not
evictable, the encoder MUST NOT insert that entry into the dynamic table
(including duplicates of existing entries). In order to avoid this, an encoder
that uses the dynamic table has to keep track of whether each entry is currently
evictable or not.</t>
          <section anchor="avoiding-prohibited-insertions" numbered="true" toc="default">
            <name>Avoiding Prohibited Insertions</name>
            <t>To ensure that the encoder is not prevented from adding new entries, the encoder
can avoid referencing entries that are close to eviction.  Rather than
reference such an entry, the encoder can emit a Duplicate instruction
(<xref target="duplicate" format="default"/>), and reference the duplicate instead.</t>
            <t>Determining which entries are too close to eviction to reference is an encoder
preference.  One heuristic is to target a fixed amount of available space in the
dynamic table: either unused space or space that can be reclaimed by evicting
non-blocking entries.  To achieve this, the encoder can maintain a draining
index, which is the smallest absolute index (<xref target="indexing" format="default"/>) in the dynamic table
that it will emit a reference for.  As new entries are inserted, the encoder
increases the draining index to maintain the section of the table that it will
not reference.  If the encoder does not create new references to entries with an
absolute index lower than the draining index, the number of unacknowledged
references to those entries will eventually become zero, allowing them to be
evicted.</t>
            <figure anchor="fig-draining-index">
              <name>Draining Dynamic Table Entries</name>
              <artwork type="drawing" name="" align="left" alt=""><![CDATA[
   +----------+---------------------------------+--------+
   | Draining |          Referenceable          | Unused |
   | Entries  |             Entries             | Space  |
   +----------+---------------------------------+--------+
   ^          ^                                 ^
   |          |                                 |
 Dropping    Draining Index               Insertion Point
  Point
]]></artwork>
            </figure>
          </section>
        </section>
        <section anchor="blocked-streams" numbered="true" toc="default">
          <name>Blocked Streams</name>
          <t>Because QUIC does not guarantee order between data on different streams, a
decoder might encounter a header block that references a dynamic table entry
that it has not yet received.</t>
          <t>Each header block contains a Required Insert Count (<xref target="header-prefix" format="default"/>), the
lowest possible value for the Insert Count with which the header block can be
decoded. For a header block with references to the dynamic table, the Required
Insert Count is one larger than the largest absolute index of all referenced
dynamic table entries. For a header block with no references to the dynamic
table, the Required Insert Count is zero.</t>
          <t>When the decoder receives a header block with a Required Insert Count greater
than its own Insert Count, the stream cannot be processed immediately, and is
considered "blocked"; see <xref target="blocked-decoding" format="default"/>.</t>
          <t>The decoder specifies an upper bound on the number of streams which can be
blocked using the SETTINGS_QPACK_BLOCKED_STREAMS setting; see <xref target="configuration" format="default"/>.
An encoder MUST limit the number of streams which could become blocked to the
value of SETTINGS_QPACK_BLOCKED_STREAMS at all times. If a decoder encounters
more blocked streams than it promised to support, it MUST treat this as a
connection error of type QPACK_DECOMPRESSION_FAILED.</t>
          <t>Note that the decoder might not become blocked on every stream which risks
becoming blocked.</t>
          <t>An encoder can decide whether to risk having a stream become blocked. If
permitted by the value of SETTINGS_QPACK_BLOCKED_STREAMS, compression efficiency
can often be improved by referencing dynamic table entries that are still in
transit, but if there is loss or reordering the stream can become blocked at the
decoder.  An encoder can avoid the risk of blocking by only referencing dynamic
table entries which have been acknowledged, but this could mean using
literals. Since literals make the header block larger, this can result in the
encoder becoming blocked on congestion or flow control limits.</t>
        </section>
        <section anchor="avoiding-flow-control-deadlocks" numbered="true" toc="default">
          <name>Avoiding Flow Control Deadlocks</name>
          <t>Writing instructions on streams that are limited by flow control can produce
deadlocks.</t>
          <t>A decoder might stop issuing flow control credit on the stream that carries a
header block until the necessary updates are received on the encoder
stream. If the granting of flow control credit on the encoder stream (or the
connection as a whole) depends on the consumption and release of data on the
stream carrying the header block, a deadlock might result.</t>
          <t>More generally, a stream containing a large instruction can become deadlocked if
the decoder withholds flow control credit until the instruction is completely
received.</t>
          <t>To avoid these deadlocks, an encoder SHOULD avoid writing an instruction unless
sufficient stream and connection flow control credit is available for the entire
instruction.</t>
        </section>
        <section anchor="known-received-count" numbered="true" toc="default">
          <name>Known Received Count</name>
          <t>The Known Received Count is the total number of dynamic table insertions and
duplications acknowledged by the decoder.  The encoder tracks the Known Received
Count in order to identify which dynamic table entries can be referenced without
potentially blocking a stream.  The decoder tracks the Known Received Count in
order to be able to send Insert Count Increment instructions.</t>
          <t>A Header Acknowledgement instruction (<xref target="header-acknowledgement" format="default"/>) implies that
the decoder has received all dynamic table state necessary to process
corresponding the header block.  If the Required Insert Count of the
acknowledged header block is greater than the current Known Received Count,
Known Received Count is updated to the value of the Required Insert Count.</t>
          <t>An Insert Count Increment instruction <xref target="insert-count-increment" format="default"/> increases the
Known Received Count by its Increment parameter.  See <xref target="new-table-entries" format="default"/> for
guidance.</t>
        </section>
      </section>
      <section anchor="decoder" numbered="true" toc="default">
        <name>Decoder</name>
        <t>As in HPACK, the decoder processes header blocks and emits the corresponding
header lists. It also processes instructions received on the encoder stream that
modify the dynamic table.  Note that header blocks and encoder stream
instructions arrive on separate streams.  This is unlike HPACK, where header
blocks can contain instructions that modify the dynamic table, and there is no
dedicated stream of HPACK instructions.</t>
        <t>The decoder MUST emit header fields in the order their representations appear in
the input header block.</t>
        <section anchor="blocked-decoding" numbered="true" toc="default">
          <name>Blocked Decoding</name>
          <t>Upon receipt of a header block, the decoder examines the Required Insert Count.
When the Required Insert Count is less than or equal to the decoder's Insert
Count, the header block can be processed immediately.  Otherwise, the stream on
which the header block was received becomes blocked.</t>
          <t>While blocked, header block data SHOULD remain in the blocked stream's flow
control window.  A stream becomes unblocked when the Insert Count becomes
greater than or equal to the Required Insert Count for all header blocks the
decoder has started reading from the stream.</t>
          <t>When processing header blocks, the decoder expects the Required Insert Count to
exactly match the value defined in <xref target="blocked-streams" format="default"/>. If it encounters a
smaller value than expected, it MUST treat this as a connection error of type
QPACK_DECOMPRESSION_FAILED; see <xref target="invalid-references" format="default"/>. If it encounters a
larger value than expected, it MAY treat this as a connection error of type
QPACK_DECOMPRESSION_FAILED.</t>
        </section>
        <section anchor="state-synchronization" numbered="true" toc="default">
          <name>State Synchronization</name>
          <t>The decoder signals the following events by emitting decoder instructions
(<xref target="decoder-instructions" format="default"/>) on the decoder stream.</t>
          <section anchor="completed-processing-of-a-header-block" numbered="true" toc="default">
            <name>Completed Processing of a Header Block</name>
            <t>After the decoder finishes decoding a header block containing dynamic table
references, it MUST emit a Header Acknowledgement instruction
(<xref target="header-acknowledgement" format="default"/>).  A stream may carry multiple header blocks in the
case of intermediate responses, trailers, and pushed requests.  The encoder
interprets each Header Acknowledgement instruction as acknowledging the earliest
unacknowledged header block containing dynamic table references sent on the
given stream.</t>
          </section>
          <section anchor="abandonment-of-a-stream" numbered="true" toc="default">
            <name>Abandonment of a Stream</name>
            <t>When an endpoint receives a stream reset before the end of a stream or before
all header blocks are processed on that stream, or when it abandons reading of a
stream, it generates a Stream Cancellation instruction; see
<xref target="stream-cancellation" format="default"/>.  This signals to the encoder that all references to the
dynamic table on that stream are no longer outstanding.  A decoder with a
maximum dynamic table capacity (<xref target="maximum-dynamic-table-capacity" format="default"/>) equal to
zero MAY omit sending Stream Cancellations, because the encoder cannot have
any dynamic table references.  An encoder cannot infer from this instruction
that any updates to the dynamic table have been received.</t>
            <t>The Header Acknowledgement and Stream Cancellation instructions permit the
encoder to remove references to entries in the dynamic table.  When an entry
with absolute index lower than the Known Received Count has zero references,
then it is considered evictable; see <xref target="blocked-insertion" format="default"/>.</t>
          </section>
          <section anchor="new-table-entries" numbered="true" toc="default">
            <name>New Table Entries</name>
            <t>After receiving new table entries on the encoder stream, the decoder chooses
when to emit Insert Count Increment instructions; see
<xref target="insert-count-increment" format="default"/>. Emitting this instruction after adding each new
dynamic table entry will provide the timeliest feedback to the encoder, but
could be redundant with other decoder feedback. By delaying an Insert Count
Increment instruction, the decoder might be able to coalesce multiple Insert
Count Increment instructions, or replace them entirely with Header
Acknowledgements; see <xref target="header-acknowledgement" format="default"/>. However, delaying too long
may lead to compression inefficiencies if the encoder waits for an entry to be
acknowledged before using it.</t>
          </section>
        </section>
        <section anchor="invalid-references" numbered="true" toc="default">
          <name>Invalid References</name>
          <t>If the decoder encounters a reference in a header block representation to a
dynamic table entry which has already been evicted or which has an absolute
index greater than or equal to the declared Required Insert Count
(<xref target="header-prefix" format="default"/>), it MUST treat this as a connection error of type
QPACK_DECOMPRESSION_FAILED.</t>
          <t>If the decoder encounters a reference in an encoder instruction to a dynamic
table entry which has already been evicted, it MUST treat this as a connection
error of type QPACK_ENCODER_STREAM_ERROR.</t>
        </section>
      </section>
    </section>
    <section anchor="header-tables" numbered="true" toc="default">
      <name>Header Tables</name>
      <t>Unlike in HPACK, entries in the QPACK static and dynamic tables are addressed
separately.  The following sections describe how entries in each table are
addressed.</t>
      <section anchor="header-table-static" numbered="true" toc="default">
        <name>Static Table</name>
        <t>The static table consists of a predefined static list of header fields, each of
which has a fixed index over time.  Its entries are defined in <xref target="static-table" format="default"/>.</t>
        <t>All entries in the static table have a name and a value.  However, values can be
empty (that is, have a length of 0).  Each entry is identified by a unique
index.</t>
        <t>Note that the QPACK static table is indexed from 0, whereas the HPACK static
table is indexed from 1.</t>
        <t>When the decoder encounters an invalid static table index in a header block
representation it MUST treat this as a connection error of type
QPACK_DECOMPRESSION_FAILED.  If this index is received on the encoder stream,
this MUST be treated as a connection error of type QPACK_ENCODER_STREAM_ERROR.</t>
      </section>
      <section anchor="header-table-dynamic" numbered="true" toc="default">
        <name>Dynamic Table</name>
        <t>The dynamic table consists of a list of header fields maintained in first-in,
first-out order. Each HTTP/3 endpoint holds a dynamic table that is initially
empty.  Entries are added by encoder instructions received on the encoder
stream; see <xref target="encoder-instructions" format="default"/>.</t>
        <t>The dynamic table can contain duplicate entries (i.e., entries with the same
name and same value).  Therefore, duplicate entries MUST NOT be treated as an
error by the decoder.</t>
        <t>Dynamic table entries can have empty values.</t>
        <section anchor="dynamic-table-size" numbered="true" toc="default">
          <name>Dynamic Table Size</name>
          <t>The size of the dynamic table is the sum of the size of its entries.</t>
          <t>The size of an entry is the sum of its name's length in bytes, its value's
length in bytes, and 32.  The size of an entry is calculated using the length of
its name and value without Huffman encoding applied.</t>
        </section>
        <section anchor="eviction" numbered="true" toc="default">
          <name>Dynamic Table Capacity and Eviction</name>
          <t>The encoder sets the capacity of the dynamic table, which serves as the upper
limit on its size.  The initial capacity of the dynamic table is zero.  The
encoder sends a Set Dynamic Table Capacity instruction
(<xref target="set-dynamic-capacity" format="default"/>) with a non-zero capacity to begin using the dynamic
table.</t>
          <t>Before a new entry is added to the dynamic table, entries are evicted from the
end of the dynamic table until the size of the dynamic table is less than or
equal to (table capacity - size of new entry). The encoder MUST NOT cause a
dynamic table entry to be evicted unless that entry is evictable; see
<xref target="blocked-insertion" format="default"/>.  The new entry is then added to the table.  It is an
error if the encoder attempts to add an entry that is larger than the dynamic
table capacity; the decoder MUST treat this as a connection error of type
QPACK_ENCODER_STREAM_ERROR.</t>
          <t>A new entry can reference an entry in the dynamic table that will be evicted
when adding this new entry into the dynamic table.  Implementations are
cautioned to avoid deleting the referenced name or value if the referenced entry
is evicted from the dynamic table prior to inserting the new entry.</t>
          <t>Whenever the dynamic table capacity is reduced by the encoder
(<xref target="set-dynamic-capacity" format="default"/>), entries are evicted from the end of the dynamic
table until the size of the dynamic table is less than or equal to the new table
capacity.  This mechanism can be used to completely clear entries from the
dynamic table by setting a capacity of 0, which can subsequently be restored.</t>
        </section>
        <section anchor="maximum-dynamic-table-capacity" numbered="true" toc="default">
          <name>Maximum Dynamic Table Capacity</name>
          <t>To bound the memory requirements of the decoder, the decoder limits the maximum
value the encoder is permitted to set for the dynamic table capacity.  In
HTTP/3, this limit is determined by the value of
SETTINGS_QPACK_MAX_TABLE_CAPACITY sent by the decoder; see <xref target="configuration" format="default"/>.
The encoder MUST not set a dynamic table capacity that exceeds this maximum, but
it can choose to use a lower dynamic table capacity; see
<xref target="set-dynamic-capacity" format="default"/>.</t>
          <t>For clients using 0-RTT data in HTTP/3, the server's maximum table capacity is
the remembered value of the setting, or zero if the value was not previously
sent.  When the client's 0-RTT value of the SETTING is zero, the server MAY set
it to a non-zero value in its SETTINGS frame. If the remembered value is
non-zero, the server MUST send the same non-zero value in its SETTINGS frame. If
it specifies any other value, or omits SETTINGS_QPACK_MAX_TABLE_CAPACITY from
SETTINGS, the encoder must treat this as a connection error of type
QPACK_DECODER_STREAM_ERROR.</t>
          <t>For HTTP/3 servers and HTTP/3 clients when 0-RTT is not attempted or is
rejected, the maximum table capacity is 0 until the encoder processes a SETTINGS
frame with a non-zero value of SETTINGS_QPACK_MAX_TABLE_CAPACITY.</t>
          <t>When the maximum table capacity is zero, the encoder MUST NOT insert entries
into the dynamic table, and MUST NOT send any encoder instructions on the
encoder stream.</t>
        </section>
        <section anchor="indexing" numbered="true" toc="default">
          <name>Absolute Indexing</name>
          <t>Each entry possesses an absolute index which is fixed for the lifetime of that
entry. The first entry inserted has an absolute index of "0"; indices increase
by one with each insertion.</t>
        </section>
        <section anchor="relative-indexing" numbered="true" toc="default">
          <name>Relative Indexing</name>
          <t>Relative indices begin at zero and increase in the opposite direction from the
absolute index.  Determining which entry has a relative index of "0" depends on
the context of the reference.</t>
          <t>In encoder instructions (<xref target="encoder-instructions" format="default"/>), a relative index of "0"
refers to the most recently inserted value in the dynamic table.  Note that this
means the entry referenced by a given relative index will change while
interpreting instructions on the encoder stream.</t>
          <figure>
            <name>Example Dynamic Table Indexing - Encoder Stream</name>
            <artwork type="drawing" name="" align="left" alt=""><![CDATA[
      +-----+---------------+-------+
      | n-1 |      ...      |   d   |  Absolute Index
      + - - +---------------+ - - - +
      |  0  |      ...      | n-d-1 |  Relative Index
      +-----+---------------+-------+
      ^                             |
      |                             V
Insertion Point               Dropping Point

n = count of entries inserted
d = count of entries dropped
]]></artwork>
          </figure>
          <t>Unlike in encoder instructions, relative indices in header block representations
are relative to the Base at the beginning of the header block; see
<xref target="header-prefix" format="default"/>. This ensures that references are stable even if header
blocks and dynamic table updates are processed out of order.</t>
          <t>In a header block a relative index of "0" refers to the entry with absolute
index equal to Base - 1.</t>
          <figure>
            <name>Example Dynamic Table Indexing - Relative Index in Header Block</name>
            <artwork type="drawing" name="" align="left" alt=""><![CDATA[
               Base
                |
                V
    +-----+-----+-----+-----+-------+
    | n-1 | n-2 | n-3 | ... |   d   |  Absolute Index
    +-----+-----+  -  +-----+   -   +
                |  0  | ... | n-d-3 |  Relative Index
                +-----+-----+-------+

n = count of entries inserted
d = count of entries dropped
In this example, Base = n - 2
]]></artwork>
          </figure>
        </section>
        <section anchor="post-base" numbered="true" toc="default">
          <name>Post-Base Indexing</name>
          <t>Post-Base indices are used in header block instructions for entries with
absolute indices greater than or equal to Base, starting at 0 for the entry with
absolute index equal to Base, and increasing in the same direction as the
absolute index.</t>
          <t>Post-Base indices allow an encoder to process a header block in a single pass
and include references to entries added while processing this (or other) header
blocks.</t>
          <figure>
            <name>Example Dynamic Table Indexing - Post-Base Index in Header Block</name>
            <artwork type="drawing" name="" align="left" alt=""><![CDATA[
               Base
                |
                V
    +-----+-----+-----+-----+-----+
    | n-1 | n-2 | n-3 | ... |  d  |  Absolute Index
    +-----+-----+-----+-----+-----+
    |  1  |  0  |                    Post-Base Index
    +-----+-----+

n = count of entries inserted
d = count of entries dropped
In this example, Base = n - 2
]]></artwork>
          </figure>
        </section>
      </section>
    </section>
    <section anchor="wire-format" numbered="true" toc="default">
      <name>Wire Format</name>
      <section anchor="primitives" numbered="true" toc="default">
        <name>Primitives</name>
        <section anchor="prefixed-integers" numbered="true" toc="default">
          <name>Prefixed Integers</name>
          <t>The prefixed integer from Section 5.1 of <xref target="RFC7541" format="default"/> is used heavily throughout
this document.  The format from <xref target="RFC7541" format="default"/> is used unmodified.  Note, however,
that QPACK uses some prefix sizes not actually used in HPACK.</t>
          <t>QPACK implementations MUST be able to decode integers up to and including 62
bits long.</t>
        </section>
        <section anchor="string-literals" numbered="true" toc="default">
          <name>String Literals</name>
          <t>The string literal defined by Section 5.2 of <xref target="RFC7541" format="default"/> is also used throughout.
This string format includes optional Huffman encoding.</t>
          <t>HPACK defines string literals to begin on a byte boundary.  They begin with a
single bit flag, denoted as 'H' in this document (indicating whether the string
is Huffman-coded), followed by the Length encoded as a 7-bit prefix integer,
and finally Length bytes of data. When Huffman encoding is enabled, the Huffman
table from Appendix B of <xref target="RFC7541" format="default"/> is used without modification.</t>
          <t>This document expands the definition of string literals and permits them to
begin other than on a byte boundary.  An "N-bit prefix string literal" begins
with the same Huffman flag, followed by the length encoded as an (N-1)-bit
prefix integer.  The prefix size, N, can have a value between 2 and 8 inclusive.
The remainder of the string literal is unmodified.</t>
          <t>A string literal without a prefix length noted is an 8-bit prefix string literal
and follows the definitions in <xref target="RFC7541" format="default"/> without modification.</t>
        </section>
      </section>
      <section anchor="enc-dec-stream-def" numbered="true" toc="default">
        <name>Encoder and Decoder Streams</name>
        <t>QPACK defines two unidirectional stream types:</t>
        <ul spacing="normal">
          <li>An encoder stream is a unidirectional stream of type <tt>0x02</tt>.
It carries an unframed sequence of encoder instructions from encoder
to decoder.</li>
          <li>A decoder stream is a unidirectional stream of type <tt>0x03</tt>.
It carries an unframed sequence of decoder instructions from decoder
to encoder.</li>
        </ul>
        <t>HTTP/3 endpoints contain a QPACK encoder and decoder. Each endpoint MUST
initiate at most one encoder stream and at most one decoder stream. Receipt of a
second instance of either stream type MUST be treated as a connection error of
type HTTP_STREAM_CREATION_ERROR. These streams MUST NOT be closed. Closure of
either unidirectional stream type MUST be treated as a connection error of type
HTTP_CLOSED_CRITICAL_STREAM.</t>
        <t>An endpoint MAY avoid creating an encoder stream if it's not going to be used
(for example if its encoder doesn't wish to use the dynamic table, or if the
maximum size of the dynamic table permitted by the peer is zero).</t>
        <t>An endpoint MAY avoid creating a decoder stream if its decoder sets the maximum
capacity of the dynamic table to zero.</t>
        <t>An endpoint MUST allow its peer to create an encoder stream and a decoder stream
even if the connection's settings prevent their use.</t>
      </section>
      <section anchor="encoder-instructions" numbered="true" toc="default">
        <name>Encoder Instructions</name>
        <t>An encoder sends encoder instructions on the encoder stream to set the capacity
of the dynamic table and add dynamic table entries.  Instructions adding table
entries can use existing entries to avoid transmitting redundant information.
The name can be transmitted as a reference to an existing entry in the static or
the dynamic table or as a string literal.  For entries which already exist in
the dynamic table, the full entry can also be used by reference, creating a
duplicate entry.</t>
        <t>This section specifies the following encoder instructions.</t>
        <section anchor="set-dynamic-capacity" numbered="true" toc="default">
          <name>Set Dynamic Table Capacity</name>
          <t>An encoder informs the decoder of a change to the dynamic table capacity using
an instruction which begins with the '001' three-bit pattern.  This is followed
by the new dynamic table capacity represented as an integer with a 5-bit prefix;
see <xref target="prefixed-integers" format="default"/>.</t>
          <figure anchor="fig-set-capacity">
            <name>Set Dynamic Table Capacity</name>
            <artwork type="drawing" name="" align="left" alt=""><![CDATA[
  0   1   2   3   4   5   6   7
+---+---+---+---+---+---+---+---+
| 0 | 0 | 1 |   Capacity (5+)   |
+---+---+---+-------------------+
]]></artwork>
          </figure>
          <t>The new capacity MUST be lower than or equal to the limit described in
<xref target="maximum-dynamic-table-capacity" format="default"/>.  In HTTP/3, this limit is the value of the
SETTINGS_QPACK_MAX_TABLE_CAPACITY parameter (<xref target="configuration" format="default"/>) received from
the decoder.  The decoder MUST treat a new dynamic table capacity value that
exceeds this limit as a connection error of type QPACK_ENCODER_STREAM_ERROR.</t>
          <t>Reducing the dynamic table capacity can cause entries to be evicted; see
<xref target="eviction" format="default"/>.  This MUST NOT cause the eviction of entries which are not
evictable; see <xref target="blocked-insertion" format="default"/>.  Changing the capacity of the dynamic
table is not acknowledged as this instruction does not insert an entry.</t>
        </section>
        <section anchor="insert-with-name-reference" numbered="true" toc="default">
          <name>Insert With Name Reference</name>
          <t>An encoder adds an entry to the dynamic table where the header field name
matches the header field name of an entry stored in the static or the dynamic
table using an instruction that starts with the '1' one-bit pattern.  The second
('T') bit indicates whether the reference is to the static or dynamic table. The
6-bit prefix integer (<xref target="prefixed-integers" format="default"/>) that follows is used to locate
the table entry for the header name.  When T=1, the number represents the static
table index; when T=0, the number is the relative index of the entry in the
dynamic table.</t>
          <t>The header name reference is followed by the header field value represented as a
string literal; see <xref target="string-literals" format="default"/>.</t>
          <figure>
            <name>Insert Header Field -- Indexed Name</name>
            <artwork type="drawing" name="" align="left" alt=""><![CDATA[
     0   1   2   3   4   5   6   7
   +---+---+---+---+---+---+---+---+
   | 1 | T |    Name Index (6+)    |
   +---+---+-----------------------+
   | H |     Value Length (7+)     |
   +---+---------------------------+
   |  Value String (Length bytes)  |
   +-------------------------------+
]]></artwork>
          </figure>
        </section>
        <section anchor="insert-without-name-reference" numbered="true" toc="default">
          <name>Insert Without Name Reference</name>
          <t>An encoder adds an entry to the dynamic table where both the header field name
and the header field value are represented as string literals using an
instruction that starts with the '01' two-bit pattern.</t>
          <t>This is followed by the name represented as a 6-bit prefix string literal, and
the value represented as an 8-bit prefix string literal; see
<xref target="string-literals" format="default"/>.</t>
          <figure>
            <name>Insert Header Field -- New Name</name>
            <artwork type="drawing" name="" align="left" alt=""><![CDATA[
     0   1   2   3   4   5   6   7
   +---+---+---+---+---+---+---+---+
   | 0 | 1 | H | Name Length (5+)  |
   +---+---+---+-------------------+
   |  Name String (Length bytes)   |
   +---+---------------------------+
   | H |     Value Length (7+)     |
   +---+---------------------------+
   |  Value String (Length bytes)  |
   +-------------------------------+
]]></artwork>
          </figure>
        </section>
        <section anchor="duplicate" numbered="true" toc="default">
          <name>Duplicate</name>
          <t>An encoder duplicates an existing entry in the dynamic table using an
instruction that begins with the '000' three-bit pattern.  This is followed by
the relative index of the existing entry represented as an integer with a 5-bit
prefix; see <xref target="prefixed-integers" format="default"/>.</t>
          <figure anchor="fig-index-with-duplication">
            <name>Duplicate</name>
            <artwork type="drawing" name="" align="left" alt=""><![CDATA[
     0   1   2   3   4   5   6   7
   +---+---+---+---+---+---+---+---+
   | 0 | 0 | 0 |    Index (5+)     |
   +---+---+---+-------------------+
]]></artwork>
          </figure>
          <t>The existing entry is re-inserted into the dynamic table without resending
either the name or the value. This is useful to avoid adding a reference to an
older entry, which might block inserting new entries.</t>
        </section>
      </section>
      <section anchor="decoder-instructions" numbered="true" toc="default">
        <name>Decoder Instructions</name>
        <t>A decoder sends decoder instructions on the decoder stream to inform the encoder
about the processing of header blocks and table updates to ensure consistency of
the dynamic table.</t>
        <t>This section specifies the following decoder instructions.</t>
        <section anchor="header-acknowledgement" numbered="true" toc="default">
          <name>Header Acknowledgement</name>
          <t>After processing a header block whose declared Required Insert Count is not
zero, the decoder emits a Header Acknowledgement instruction.  The instruction
begins with the '1' one-bit pattern which is followed by the header block's
associated stream ID encoded as a 7-bit prefix integer; see
<xref target="prefixed-integers" format="default"/>.</t>
          <t>This instruction is used as described in <xref target="known-received-count" format="default"/> and
in <xref target="state-synchronization" format="default"/>.</t>
          <figure anchor="fig-header-ack">
            <name>Header Acknowledgement</name>
            <artwork type="drawing" name="" align="left" alt=""><![CDATA[
  0   1   2   3   4   5   6   7
+---+---+---+---+---+---+---+---+
| 1 |      Stream ID (7+)       |
+---+---------------------------+
]]></artwork>
          </figure>
          <t>If an encoder receives a Header Acknowledgement instruction referring to a
stream on which every header block with a non-zero Required Insert Count has
already been acknowledged, that MUST be treated as a connection error of type
QPACK_DECODER_STREAM_ERROR.</t>
          <t>The Header Acknowledgement instruction might increase the Known Received Count;
see <xref target="known-received-count" format="default"/>.</t>
        </section>
        <section anchor="stream-cancellation" numbered="true" toc="default">
          <name>Stream Cancellation</name>
          <t>When a stream is reset or reading is abandoned, the decoder emits a Stream
Cancellation instruction. The instruction begins with the '01' two-bit
pattern, which is followed by the stream ID of the affected stream encoded as a
6-bit prefix integer.</t>
          <t>This instruction is used as described in <xref target="state-synchronization" format="default"/>.</t>
          <figure anchor="fig-stream-cancel">
            <name>Stream Cancellation</name>
            <artwork type="drawing" name="" align="left" alt=""><![CDATA[
  0   1   2   3   4   5   6   7
+---+---+---+---+---+---+---+---+
| 0 | 1 |     Stream ID (6+)    |
+---+---+-----------------------+
]]></artwork>
          </figure>
        </section>
        <section anchor="insert-count-increment" numbered="true" toc="default">
          <name>Insert Count Increment</name>
          <t>The Insert Count Increment instruction begins with the '00' two-bit pattern,
followed by the Increment encoded as a 6-bit prefix integer.  This instruction
increases the Known Received Count (<xref target="known-received-count" format="default"/>) by the value of
the Increment parameter.  The decoder should send an Increment value that
increases the Known Received Count to the total number of dynamic table
insertions and duplications processed so far.</t>
          <figure anchor="fig-size-sync">
            <name>Insert Count Increment</name>
            <artwork type="drawing" name="" align="left" alt=""><![CDATA[
  0   1   2   3   4   5   6   7
+---+---+---+---+---+---+---+---+
| 0 | 0 |     Increment (6+)    |
+---+---+-----------------------+
]]></artwork>
          </figure>
          <t>An encoder that receives an Increment field equal to zero, or one that increases
the Known Received Count beyond what the encoder has sent MUST treat this as a
connection error of type QPACK_DECODER_STREAM_ERROR.</t>
        </section>
      </section>
      <section anchor="header-block-representations" numbered="true" toc="default">
        <name>Header Block Representations</name>
        <t>A header block consists of a prefix and a possibly empty sequence of
representations defined in this section.  Each representation corresponds to a
single header field.  These representations reference the static table or the
dynamic table in a particular state, but do not modify that state.</t>
        <t>Header blocks are carried in frames on streams defined by the enclosing
protocol.</t>
        <section anchor="header-prefix" numbered="true" toc="default">
          <name>Header Block Prefix</name>
          <t>Each header block is prefixed with two integers.  The Required Insert Count is
encoded as an integer with an 8-bit prefix after the encoding described in
<xref target="ric" format="default"/>).  The Base is encoded as a sign bit ('S') and a Delta Base value with a
7-bit prefix; see <xref target="base" format="default"/>.</t>
          <figure anchor="fig-base-index">
            <name>Header Block</name>
            <artwork type="drawing" name="" align="left" alt=""><![CDATA[
  0   1   2   3   4   5   6   7
+---+---+---+---+---+---+---+---+
|   Required Insert Count (8+)  |
+---+---------------------------+
| S |      Delta Base (7+)      |
+---+---------------------------+
|      Compressed Headers     ...
+-------------------------------+
]]></artwork>
          </figure>
          <section anchor="ric" numbered="true" toc="default">
            <name>Required Insert Count</name>
            <t>Required Insert Count identifies the state of the dynamic table needed to
process the header block.  Blocking decoders use the Required Insert Count to
determine when it is safe to process the rest of the block.</t>
            <t>The encoder transforms the Required Insert Count as follows before encoding:</t>
            <artwork name="" type="" align="left" alt=""><![CDATA[
   if ReqInsertCount == 0:
      EncInsertCount = 0
   else:
      EncInsertCount = (ReqInsertCount mod (2 * MaxEntries)) + 1
]]></artwork>
            <t>Here <tt>MaxEntries</tt> is the maximum number of entries that the dynamic table can
have.  The smallest entry has empty name and value strings and has the size of
32.  Hence <tt>MaxEntries</tt> is calculated as</t>
            <artwork name="" type="" align="left" alt=""><![CDATA[
   MaxEntries = floor( MaxTableCapacity / 32 )
]]></artwork>
            <t><tt>MaxTableCapacity</tt> is the maximum capacity of the dynamic table as specified by
the decoder; see <xref target="maximum-dynamic-table-capacity" format="default"/>.</t>
            <t>This encoding limits the length of the prefix on long-lived connections.</t>
            <t>The decoder can reconstruct the Required Insert Count using an algorithm such as
the following.  If the decoder encounters a value of EncodedInsertCount that
could not have been produced by a conformant encoder, it MUST treat this as a
connection error of type QPACK_DECOMPRESSION_FAILED.</t>
            <t>TotalNumberOfInserts is the total number of inserts into the decoder's dynamic
table.</t>
            <artwork name="" type="" align="left" alt=""><![CDATA[
   FullRange = 2 * MaxEntries
   if EncodedInsertCount == 0:
      ReqInsertCount = 0
   else:
      if EncodedInsertCount > FullRange:
         Error
      MaxValue = TotalNumberOfInserts + MaxEntries

      # MaxWrapped is the largest possible value of
      # ReqInsertCount that is 0 mod 2*MaxEntries
      MaxWrapped = floor(MaxValue / FullRange) * FullRange
      ReqInsertCount = MaxWrapped + EncodedInsertCount - 1

      # If ReqInsertCount exceeds MaxValue, the Encoder's value
      # must have wrapped one fewer time
      if ReqInsertCount > MaxValue:
         if ReqInsertCount <= FullRange:
            Error
         ReqInsertCount -= FullRange

      # Value of 0 must be encoded as 0.
      if ReqInsertCount == 0:
         Error
]]></artwork>
            <t>For example, if the dynamic table is 100 bytes, then the Required Insert Count
will be encoded modulo 6.  If a decoder has received 10 inserts, then an encoded
value of 3 indicates that the Required Insert Count is 9 for the header block.</t>
          </section>
          <section anchor="base" numbered="true" toc="default">
            <name>Base</name>
            <t>The <tt>Base</tt> is used to resolve references in the dynamic table as described in
<xref target="relative-indexing" format="default"/>.</t>
            <t>To save space, the Base is encoded relative to the Required Insert Count using a
one-bit sign ('S') and the <tt>Delta Base</tt> value.  A sign bit of 0 indicates that
the Base is greater than or equal to the value of the Required Insert Count; the
decoder adds the value of Delta Base to the Required Insert Count to determine
the value of the Base.  A sign bit of 1 indicates that the Base is less than the
Required Insert Count; the decoder subtracts the value of Delta Base from the
Required Insert Count and also subtracts one to determine the value of the Base.
That is:</t>
            <artwork name="" type="" align="left" alt=""><![CDATA[
   if S == 0:
      Base = ReqInsertCount + DeltaBase
   else:
      Base = ReqInsertCount - DeltaBase - 1
]]></artwork>
            <t>A single-pass encoder determines the Base before encoding a header block.  If
the encoder inserted entries in the dynamic table while encoding the header
block, Required Insert Count will be greater than the Base, so the encoded
difference is negative and the sign bit is set to 1.  If the header block did
not reference the most recent entry in the table and did not insert any new
entries, the Base will be greater than the Required Insert Count, so the delta
will be positive and the sign bit is set to 0.</t>
            <t>An encoder that produces table updates before encoding a header block might set
Base to the value of Required Insert Count.  In such case, both the sign bit and
the Delta Base will be set to zero.</t>
            <t>A header block that does not reference the dynamic table can use any value for
the Base; setting Delta Base to zero is one of the most efficient encodings.</t>
            <t>For example, with a Required Insert Count of 9, a decoder receives an S bit of 1
and a Delta Base of 2.  This sets the Base to 6 and enables post-base indexing
for three entries.  In this example, a relative index of 1 refers to the 5th
entry that was added to the table; a post-base index of 1 refers to the 8th
entry.</t>
          </section>
        </section>
        <section anchor="indexed-header-field" numbered="true" toc="default">
          <name>Indexed Header Field</name>
          <t>An indexed header field representation identifies an entry in the static table,
or an entry in the dynamic table with an absolute index less than the value of
the Base.</t>
          <figure>
            <name>Indexed Header Field</name>
            <artwork type="drawing" name="" align="left" alt=""><![CDATA[
  0   1   2   3   4   5   6   7
+---+---+---+---+---+---+---+---+
| 1 | T |      Index (6+)       |
+---+---+-----------------------+
]]></artwork>
          </figure>
          <t>This representation starts with the '1' 1-bit pattern, followed by the 'T' bit
indicating whether the reference is into the static or dynamic table.  The 6-bit
prefix integer (<xref target="prefixed-integers" format="default"/>) that follows is used to locate the
table entry for the header field.  When T=1, the number represents the static
table index; when T=0, the number is the relative index of the entry in the
dynamic table.</t>
        </section>
        <section anchor="indexed-header-field-with-post-base-index" numbered="true" toc="default">
          <name>Indexed Header Field With Post-Base Index</name>
          <t>An indexed header field with post-base index representation identifies an entry
in the dynamic table with an absolute index greater than or equal to the value
of the Base.</t>
          <figure>
            <name>Indexed Header Field with Post-Base Index</name>
            <artwork type="drawing" name="" align="left" alt=""><![CDATA[
  0   1   2   3   4   5   6   7
+---+---+---+---+---+---+---+---+
| 0 | 0 | 0 | 1 |  Index (4+)   |
+---+---+---+---+---------------+
]]></artwork>
          </figure>
          <t>This representation starts with the '0001' 4-bit pattern.  This is followed by
the post-base index (<xref target="post-base" format="default"/>) of the matching header field, represented as
an integer with a 4-bit prefix; see <xref target="prefixed-integers" format="default"/>.</t>
        </section>
        <section anchor="literal-name-reference" numbered="true" toc="default">
          <name>Literal Header Field With Name Reference</name>
          <t>A literal header field with name reference representation encodes a header field
where the header field name matches the header field name of an entry in the
static table, or the header field name of an entry in the dynamic table with an
absolute index less than the value of the Base.</t>
          <figure>
            <name>Literal Header Field With Name Reference</name>
            <artwork type="drawing" name="" align="left" alt=""><![CDATA[
     0   1   2   3   4   5   6   7
   +---+---+---+---+---+---+---+---+
   | 0 | 1 | N | T |Name Index (4+)|
   +---+---+---+---+---------------+
   | H |     Value Length (7+)     |
   +---+---------------------------+
   |  Value String (Length bytes)  |
   +-------------------------------+
]]></artwork>
          </figure>
          <t>This representation starts with the '01' two-bit pattern.  The following bit,
'N', indicates whether an intermediary is permitted to add this header to the
dynamic header table on subsequent hops. When the 'N' bit is set, the encoded
header MUST always be encoded with a literal representation. In particular, when
a peer sends a header field that it received represented as a literal header
field with the 'N' bit set, it MUST use a literal representation to forward this
header field.  This bit is intended for protecting header field values that are
not to be put at risk by compressing them; see <xref target="security-considerations" format="default"/> for
more details.</t>
          <t>The fourth ('T') bit indicates whether the reference is to the static or dynamic
table.  The 4-bit prefix integer (<xref target="prefixed-integers" format="default"/>) that follows is
used to locate the table entry for the header name.  When T=1, the number
represents the static table index; when T=0, the number is the relative index of
the entry in the dynamic table.</t>
          <t>Only the header field name is taken from the dynamic table entry; the header
field value is encoded as an 8-bit prefix string literal; see
<xref target="string-literals" format="default"/>.</t>
        </section>
        <section anchor="literal-header-field-with-post-base-name-reference" numbered="true" toc="default">
          <name>Literal Header Field With Post-Base Name Reference</name>
          <t>A literal header field with post-base name reference representation encodes a
header field where the header field name matches the header field name of a
dynamic table entry with an absolute index greater than or equal to the value of
the Base.</t>
          <figure>
            <name>Literal Header Field With Post-Base Name Reference</name>
            <artwork type="drawing" name="" align="left" alt=""><![CDATA[
     0   1   2   3   4   5   6   7
   +---+---+---+---+---+---+---+---+
   | 0 | 0 | 0 | 0 | N |NameIdx(3+)|
   +---+---+---+---+---+-----------+
   | H |     Value Length (7+)     |
   +---+---------------------------+
   |  Value String (Length bytes)  |
   +-------------------------------+
]]></artwork>
          </figure>
          <t>This representation starts with the '0000' four-bit pattern.  The fifth bit is
the 'N' bit as described in <xref target="literal-name-reference" format="default"/>.  This is followed by a
post-base index of the dynamic table entry (<xref target="post-base" format="default"/>) encoded as an
integer with a 3-bit prefix; see <xref target="prefixed-integers" format="default"/>.</t>
          <t>Only the header field name is taken from the dynamic table entry; the header
field value is encoded as an 8-bit prefix string literal; see
<xref target="string-literals" format="default"/>.</t>
        </section>
        <section anchor="literal-header-field-without-name-reference" numbered="true" toc="default">
          <name>Literal Header Field Without Name Reference</name>
          <t>The literal header field without name reference representation encodes a header
field name and a header field value as string literals.</t>
          <figure>
            <name>Literal Header Field Without Name Reference</name>
            <artwork type="drawing" name="" align="left" alt=""><![CDATA[
     0   1   2   3   4   5   6   7
   +---+---+---+---+---+---+---+---+
   | 0 | 0 | 1 | N | H |NameLen(3+)|
   +---+---+---+---+---+-----------+
   |  Name String (Length bytes)   |
   +---+---------------------------+
   | H |     Value Length (7+)     |
   +---+---------------------------+
   |  Value String (Length bytes)  |
   +-------------------------------+
]]></artwork>
          </figure>
          <t>This representation begins with the '001' three-bit pattern.  The fourth bit is
the 'N' bit as described in <xref target="literal-name-reference" format="default"/>.  The name follows,
represented as a 4-bit prefix string literal, then the value, represented as an
8-bit prefix string literal; see <xref target="string-literals" format="default"/>.</t>
        </section>
      </section>
    </section>
    <section anchor="configuration" numbered="true" toc="default">
      <name>Configuration</name>
      <t>QPACK defines two settings which are included in the HTTP/3 SETTINGS frame.</t>
      <dl newline="false" spacing="normal">
        <dt>SETTINGS_QPACK_MAX_TABLE_CAPACITY (0x1):</dt>
        <dd>
  The default value is zero.  See <xref target="header-table-dynamic" format="default"/> for usage.  This is
the equivalent of the SETTINGS_HEADER_TABLE_SIZE from HTTP/2.</dd>
        <dt>SETTINGS_QPACK_BLOCKED_STREAMS (0x7):</dt>
        <dd>
  The default value is zero.  See <xref target="blocked-streams" format="default"/>.</dd>
      </dl>
    </section>
    <section anchor="error-handling" numbered="true" toc="default">
      <name>Error Handling</name>
      <t>The following error codes are defined for HTTP/3 to indicate failures of
QPACK which prevent the connection from continuing:</t>
      <dl newline="false" spacing="normal">
        <dt>QPACK_DECOMPRESSION_FAILED (0x200):</dt>
        <dd>
  The decoder failed to interpret a header block and is not able to continue
decoding that header block.</dd>
        <dt>QPACK_ENCODER_STREAM_ERROR (0x201):</dt>
        <dd>
  The decoder failed to interpret an encoder instruction received on the
encoder stream.</dd>
        <dt>QPACK_DECODER_STREAM_ERROR (0x202):</dt>
        <dd>
  The encoder failed to interpret a decoder instruction received on the
decoder stream.</dd>
      </dl>
    </section>
    <section anchor="security-considerations" numbered="true" toc="default">
      <name>Security Considerations</name>
      <t>TBD.  Also see Section 7.1 of <xref target="RFC7541" format="default"/>.</t>
      <t>While the negotiated limit on the dynamic table size accounts for much of the
memory that can be consumed by a QPACK implementation, data which cannot be
immediately sent due to flow control is not affected by this limit.
Implementations should limit the size of unsent data, especially on the decoder
stream where flexibility to choose what to send is limited.  Possible responses
to an excess of unsent data might include limiting the ability of the peer to
open new streams, reading only from the encoder stream, or closing the
connection.</t>
    </section>
    <section anchor="iana-considerations" numbered="true" toc="default">
      <name>IANA Considerations</name>
      <section anchor="settings-registration" numbered="true" toc="default">
        <name>Settings Registration</name>
        <t>This document specifies two settings. The entries in the following table are
registered in the "HTTP/3 Settings" registry established in <xref target="HTTP3" format="default"/>.</t>
        <table align="center">
          <thead>
            <tr>
              <th align="left">Setting Name</th>
              <th align="center">Code</th>
              <th align="left">Specification</th>
              <th align="left">Default</th>
            </tr>
          </thead>
          <tbody>
            <tr>
              <td align="left">QPACK_MAX_TABLE_CAPACITY</td>
              <td align="center">0x1</td>
              <td align="left">
                <xref target="configuration" format="default"/></td>
              <td align="left">0</td>
            </tr>
            <tr>
              <td align="left">QPACK_BLOCKED_STREAMS</td>
              <td align="center">0x7</td>
              <td align="left">
                <xref target="configuration" format="default"/></td>
              <td align="left">0</td>
            </tr>
          </tbody>
        </table>
      </section>
      <section anchor="stream-type-registration" numbered="true" toc="default">
        <name>Stream Type Registration</name>
        <t>This document specifies two stream types. The entries in the following table are
registered in the "HTTP/3 Stream Type" registry established in <xref target="HTTP3" format="default"/>.</t>
        <table align="center">
          <thead>
            <tr>
              <th align="left">Stream Type</th>
              <th align="center">Code</th>
              <th align="left">Specification</th>
              <th align="left">Sender</th>
            </tr>
          </thead>
          <tbody>
            <tr>
              <td align="left">QPACK Encoder Stream</td>
              <td align="center">0x02</td>
              <td align="left">
                <xref target="enc-dec-stream-def" format="default"/></td>
              <td align="left">Both</td>
            </tr>
            <tr>
              <td align="left">QPACK Decoder Stream</td>
              <td align="center">0x03</td>
              <td align="left">
                <xref target="enc-dec-stream-def" format="default"/></td>
              <td align="left">Both</td>
            </tr>
          </tbody>
        </table>
      </section>
      <section anchor="error-code-registration" numbered="true" toc="default">
        <name>Error Code Registration</name>
        <t>This document specifies three error codes. The entries in the following table
are registered in the "HTTP/3 Error Code" registry established in <xref target="HTTP3" format="default"/>.</t>
        <table align="center">
          <thead>
            <tr>
              <th align="left">Name</th>
              <th align="left">Code</th>
              <th align="left">Description</th>
              <th align="left">Specification</th>
            </tr>
          </thead>
          <tbody>
            <tr>
              <td align="left">QPACK_DECOMPRESSION_FAILED</td>
              <td align="left">0x200</td>
              <td align="left">Decompression of a header block failed</td>
              <td align="left">
                <xref target="error-handling" format="default"/></td>
            </tr>
            <tr>
              <td align="left">QPACK_ENCODER_STREAM_ERROR</td>
              <td align="left">0x201</td>
              <td align="left">Error on the encoder stream</td>
              <td align="left">
                <xref target="error-handling" format="default"/></td>
            </tr>
            <tr>
              <td align="left">QPACK_DECODER_STREAM_ERROR</td>
              <td align="left">0x202</td>
              <td align="left">Error on the decoder stream</td>
              <td align="left">
                <xref target="error-handling" format="default"/></td>
            </tr>
          </tbody>
        </table>
      </section>
    </section>
  </middle>
  <back>
    <references>
      <name>References</name>
      <references>
        <name>Normative References</name>
        <reference anchor="HTTP3">
          <front>
            <title>Hypertext Transfer Protocol Version 3 (HTTP/3)</title>
            <seriesInfo name="Internet-Draft" value="draft-ietf-quic-http-26"/>
            <author initials="M." surname="Bishop" fullname="Mike Bishop" role="editor">
              <organization>Akamai Technologies</organization>
            </author>
            <date year="2020" month="February" day="21"/>
          </front>
        </reference>
        <reference anchor="QUIC-TRANSPORT">
          <front>
            <title>QUIC: A UDP-Based Multiplexed and Secure Transport</title>
            <seriesInfo name="Internet-Draft" value="draft-ietf-quic-transport-26"/>
            <author initials="J." surname="Iyengar" fullname="Jana Iyengar" role="editor">
              <organization>Fastly</organization>
            </author>
            <author initials="M." surname="Thomson" fullname="Martin Thomson" role="editor">
              <organization>Mozilla</organization>
            </author>
            <date year="2020" month="February" day="21"/>
          </front>
        </reference>
        <reference anchor="RFC7541" target="https://www.rfc-editor.org/info/rfc7541">
          <front>
            <title>HPACK: Header Compression for HTTP/2</title>
            <seriesInfo name="DOI" value="10.17487/RFC7541"/>
            <seriesInfo name="RFC" value="7541"/>
            <author initials="R." surname="Peon" fullname="R. Peon">
              <organization/>
            </author>
            <author initials="H." surname="Ruellan" fullname="H. Ruellan">
              <organization/>
            </author>
            <date year="2015" month="May"/>
            <abstract>
              <t>This specification defines HPACK, a compression format for efficiently representing HTTP header fields, to be used in HTTP/2.</t>
            </abstract>
          </front>
        </reference>
        <reference anchor="RFC2119" target="https://www.rfc-editor.org/info/rfc2119">
          <front>
            <title>Key words for use in RFCs to Indicate Requirement Levels</title>
            <seriesInfo name="DOI" value="10.17487/RFC2119"/>
            <seriesInfo name="RFC" value="2119"/>
            <seriesInfo name="BCP" value="14"/>
            <author initials="S." surname="Bradner" fullname="S. Bradner">
              <organization/>
            </author>
            <date year="1997" month="March"/>
            <abstract>
              <t>In many standards track documents several words are used to signify the requirements in the specification.  These words are often capitalized. This document defines these words as they should be interpreted in IETF documents.  This document specifies an Internet Best Current Practices for the Internet Community, and requests discussion and suggestions for improvements.</t>
            </abstract>
          </front>
        </reference>
        <reference anchor="RFC8174" target="https://www.rfc-editor.org/info/rfc8174">
          <front>
            <title>Ambiguity of Uppercase vs Lowercase in RFC 2119 Key Words</title>
            <seriesInfo name="DOI" value="10.17487/RFC8174"/>
            <seriesInfo name="RFC" value="8174"/>
            <seriesInfo name="BCP" value="14"/>
            <author initials="B." surname="Leiba" fullname="B. Leiba">
              <organization/>
            </author>
            <date year="2017" month="May"/>
            <abstract>
              <t>RFC 2119 specifies common key words that may be used in protocol  specifications.  This document aims to reduce the ambiguity by clarifying that only UPPERCASE usage of the key words have the  defined special meanings.</t>
            </abstract>
          </front>
        </reference>
      </references>
      <references>
        <name>Informative References</name>
        <reference anchor="RFC7540" target="https://www.rfc-editor.org/info/rfc7540">
          <front>
            <title>Hypertext Transfer Protocol Version 2 (HTTP/2)</title>
            <seriesInfo name="DOI" value="10.17487/RFC7540"/>
            <seriesInfo name="RFC" value="7540"/>
            <author initials="M." surname="Belshe" fullname="M. Belshe">
              <organization/>
            </author>
            <author initials="R." surname="Peon" fullname="R. Peon">
              <organization/>
            </author>
            <author initials="M." surname="Thomson" fullname="M. Thomson" role="editor">
              <organization/>
            </author>
            <date year="2015" month="May"/>
            <abstract>
              <t>This specification describes an optimized expression of the semantics of the Hypertext Transfer Protocol (HTTP), referred to as HTTP version 2 (HTTP/2).  HTTP/2 enables a more efficient use of network resources and a reduced perception of latency by introducing header field compression and allowing multiple concurrent exchanges on the same connection.  It also introduces unsolicited push of representations from servers to clients.</t>
              <t>This specification is an alternative to, but does not obsolete, the HTTP/1.1 message syntax.  HTTP's existing semantics remain unchanged.</t>
            </abstract>
          </front>
        </reference>
        <reference anchor="RFC2360" target="https://www.rfc-editor.org/info/rfc2360">
          <front>
            <title>Guide for Internet Standards Writers</title>
            <seriesInfo name="DOI" value="10.17487/RFC2360"/>
            <seriesInfo name="RFC" value="2360"/>
            <seriesInfo name="BCP" value="22"/>
            <author initials="G." surname="Scott" fullname="G. Scott">
              <organization/>
            </author>
            <date year="1998" month="June"/>
            <abstract>
              <t>This document is a guide for Internet standard writers.  It defines those characteristics that make standards coherent, unambiguous, and easy to interpret.  This document specifies an Internet Best Current Practices for the Internet Community, and requests discussion and suggestions for improvements.</t>
            </abstract>
          </front>
        </reference>
      </references>
    </references>
    <section anchor="static-table" numbered="true" toc="default">
      <name>Static Table</name>
      <table align="center">
        <thead>
          <tr>
            <th align="left">Index</th>
            <th align="left">Name</th>
            <th align="left">Value</th>
          </tr>
        </thead>
        <tbody>
          <tr>
            <td align="left">0</td>
            <td align="left">:authority</td>
            <td align="left">&nbsp;</td>
          </tr>
          <tr>
            <td align="left">1</td>
            <td align="left">:path</td>
            <td align="left">/</td>
          </tr>
          <tr>
            <td align="left">2</td>
            <td align="left">age</td>
            <td align="left">0</td>
          </tr>
          <tr>
            <td align="left">3</td>
            <td align="left">content-disposition</td>
            <td align="left">&nbsp;</td>
          </tr>
          <tr>
            <td align="left">4</td>
            <td align="left">content-length</td>
            <td align="left">0</td>
          </tr>
          <tr>
            <td align="left">5</td>
            <td align="left">cookie</td>
            <td align="left">&nbsp;</td>
          </tr>
          <tr>
            <td align="left">6</td>
            <td align="left">date</td>
            <td align="left">&nbsp;</td>
          </tr>
          <tr>
            <td align="left">7</td>
            <td align="left">etag</td>
            <td align="left">&nbsp;</td>
          </tr>
          <tr>
            <td align="left">8</td>
            <td align="left">if-modified-since</td>
            <td align="left">&nbsp;</td>
          </tr>
          <tr>
            <td align="left">9</td>
            <td align="left">if-none-match</td>
            <td align="left">&nbsp;</td>
          </tr>
          <tr>
            <td align="left">10</td>
            <td align="left">last-modified</td>
            <td align="left">&nbsp;</td>
          </tr>
          <tr>
            <td align="left">11</td>
            <td align="left">link</td>
            <td align="left">&nbsp;</td>
          </tr>
          <tr>
            <td align="left">12</td>
            <td align="left">location</td>
            <td align="left">&nbsp;</td>
          </tr>
          <tr>
            <td align="left">13</td>
            <td align="left">referer</td>
            <td align="left">&nbsp;</td>
          </tr>
          <tr>
            <td align="left">14</td>
            <td align="left">set-cookie</td>
            <td align="left">&nbsp;</td>
          </tr>
          <tr>
            <td align="left">15</td>
            <td align="left">:method</td>
            <td align="left">CONNECT</td>
          </tr>
          <tr>
            <td align="left">16</td>
            <td align="left">:method</td>
            <td align="left">DELETE</td>
          </tr>
          <tr>
            <td align="left">17</td>
            <td align="left">:method</td>
            <td align="left">GET</td>
          </tr>
          <tr>
            <td align="left">18</td>
            <td align="left">:method</td>
            <td align="left">HEAD</td>
          </tr>
          <tr>
            <td align="left">19</td>
            <td align="left">:method</td>
            <td align="left">OPTIONS</td>
          </tr>
          <tr>
            <td align="left">20</td>
            <td align="left">:method</td>
            <td align="left">POST</td>
          </tr>
          <tr>
            <td align="left">21</td>
            <td align="left">:method</td>
            <td align="left">PUT</td>
          </tr>
          <tr>
            <td align="left">22</td>
            <td align="left">:scheme</td>
            <td align="left">http</td>
          </tr>
          <tr>
            <td align="left">23</td>
            <td align="left">:scheme</td>
            <td align="left">https</td>
          </tr>
          <tr>
            <td align="left">24</td>
            <td align="left">:status</td>
            <td align="left">103</td>
          </tr>
          <tr>
            <td align="left">25</td>
            <td align="left">:status</td>
            <td align="left">200</td>
          </tr>
          <tr>
            <td align="left">26</td>
            <td align="left">:status</td>
            <td align="left">304</td>
          </tr>
          <tr>
            <td align="left">27</td>
            <td align="left">:status</td>
            <td align="left">404</td>
          </tr>
          <tr>
            <td align="left">28</td>
            <td align="left">:status</td>
            <td align="left">503</td>
          </tr>
          <tr>
            <td align="left">29</td>
            <td align="left">accept</td>
            <td align="left">*/*</td>
          </tr>
          <tr>
            <td align="left">30</td>
            <td align="left">accept</td>
            <td align="left">application/dns-message</td>
          </tr>
          <tr>
            <td align="left">31</td>
            <td align="left">accept-encoding</td>
            <td align="left">gzip, deflate, br</td>
          </tr>
          <tr>
            <td align="left">32</td>
            <td align="left">accept-ranges</td>
            <td align="left">bytes</td>
          </tr>
          <tr>
            <td align="left">33</td>
            <td align="left">access-control-allow-headers</td>
            <td align="left">cache-control</td>
          </tr>
          <tr>
            <td align="left">34</td>
            <td align="left">access-control-allow-headers</td>
            <td align="left">content-type</td>
          </tr>
          <tr>
            <td align="left">35</td>
            <td align="left">access-control-allow-origin</td>
            <td align="left">*</td>
          </tr>
          <tr>
            <td align="left">36</td>
            <td align="left">cache-control</td>
            <td align="left">max-age=0</td>
          </tr>
          <tr>
            <td align="left">37</td>
            <td align="left">cache-control</td>
            <td align="left">max-age=2592000</td>
          </tr>
          <tr>
            <td align="left">38</td>
            <td align="left">cache-control</td>
            <td align="left">max-age=604800</td>
          </tr>
          <tr>
            <td align="left">39</td>
            <td align="left">cache-control</td>
            <td align="left">no-cache</td>
          </tr>
          <tr>
            <td align="left">40</td>
            <td align="left">cache-control</td>
            <td align="left">no-store</td>
          </tr>
          <tr>
            <td align="left">41</td>
            <td align="left">cache-control</td>
            <td align="left">public, max-age=31536000</td>
          </tr>
          <tr>
            <td align="left">42</td>
            <td align="left">content-encoding</td>
            <td align="left">br</td>
          </tr>
          <tr>
            <td align="left">43</td>
            <td align="left">content-encoding</td>
            <td align="left">gzip</td>
          </tr>
          <tr>
            <td align="left">44</td>
            <td align="left">content-type</td>
            <td align="left">application/dns-message</td>
          </tr>
          <tr>
            <td align="left">45</td>
            <td align="left">content-type</td>
            <td align="left">application/javascript</td>
          </tr>
          <tr>
            <td align="left">46</td>
            <td align="left">content-type</td>
            <td align="left">application/json</td>
          </tr>
          <tr>
            <td align="left">47</td>
            <td align="left">content-type</td>
            <td align="left">application/x-www-form-urlencoded</td>
          </tr>
          <tr>
            <td align="left">48</td>
            <td align="left">content-type</td>
            <td align="left">image/gif</td>
          </tr>
          <tr>
            <td align="left">49</td>
            <td align="left">content-type</td>
            <td align="left">image/jpeg</td>
          </tr>
          <tr>
            <td align="left">50</td>
            <td align="left">content-type</td>
            <td align="left">image/png</td>
          </tr>
          <tr>
            <td align="left">51</td>
            <td align="left">content-type</td>
            <td align="left">text/css</td>
          </tr>
          <tr>
            <td align="left">52</td>
            <td align="left">content-type</td>
            <td align="left">text/html; charset=utf-8</td>
          </tr>
          <tr>
            <td align="left">53</td>
            <td align="left">content-type</td>
            <td align="left">text/plain</td>
          </tr>
          <tr>
            <td align="left">54</td>
            <td align="left">content-type</td>
            <td align="left">text/plain;charset=utf-8</td>
          </tr>
          <tr>
            <td align="left">55</td>
            <td align="left">range</td>
            <td align="left">bytes=0-</td>
          </tr>
          <tr>
            <td align="left">56</td>
            <td align="left">strict-transport-security</td>
            <td align="left">max-age=31536000</td>
          </tr>
          <tr>
            <td align="left">57</td>
            <td align="left">strict-transport-security</td>
            <td align="left">max-age=31536000; includesubdomains</td>
          </tr>
          <tr>
            <td align="left">58</td>
            <td align="left">strict-transport-security</td>
            <td align="left">max-age=31536000; includesubdomains; preload</td>
          </tr>
          <tr>
            <td align="left">59</td>
            <td align="left">vary</td>
            <td align="left">accept-encoding</td>
          </tr>
          <tr>
            <td align="left">60</td>
            <td align="left">vary</td>
            <td align="left">origin</td>
          </tr>
          <tr>
            <td align="left">61</td>
            <td align="left">x-content-type-options</td>
            <td align="left">nosniff</td>
          </tr>
          <tr>
            <td align="left">62</td>
            <td align="left">x-xss-protection</td>
            <td align="left">1; mode=block</td>
          </tr>
          <tr>
            <td align="left">63</td>
            <td align="left">:status</td>
            <td align="left">100</td>
          </tr>
          <tr>
            <td align="left">64</td>
            <td align="left">:status</td>
            <td align="left">204</td>
          </tr>
          <tr>
            <td align="left">65</td>
            <td align="left">:status</td>
            <td align="left">206</td>
          </tr>
          <tr>
            <td align="left">66</td>
            <td align="left">:status</td>
            <td align="left">302</td>
          </tr>
          <tr>
            <td align="left">67</td>
            <td align="left">:status</td>
            <td align="left">400</td>
          </tr>
          <tr>
            <td align="left">68</td>
            <td align="left">:status</td>
            <td align="left">403</td>
          </tr>
          <tr>
            <td align="left">69</td>
            <td align="left">:status</td>
            <td align="left">421</td>
          </tr>
          <tr>
            <td align="left">70</td>
            <td align="left">:status</td>
            <td align="left">425</td>
          </tr>
          <tr>
            <td align="left">71</td>
            <td align="left">:status</td>
            <td align="left">500</td>
          </tr>
          <tr>
            <td align="left">72</td>
            <td align="left">accept-language</td>
            <td align="left">&nbsp;</td>
          </tr>
          <tr>
            <td align="left">73</td>
            <td align="left">access-control-allow-credentials</td>
            <td align="left">FALSE</td>
          </tr>
          <tr>
            <td align="left">74</td>
            <td align="left">access-control-allow-credentials</td>
            <td align="left">TRUE</td>
          </tr>
          <tr>
            <td align="left">75</td>
            <td align="left">access-control-allow-headers</td>
            <td align="left">*</td>
          </tr>
          <tr>
            <td align="left">76</td>
            <td align="left">access-control-allow-methods</td>
            <td align="left">get</td>
          </tr>
          <tr>
            <td align="left">77</td>
            <td align="left">access-control-allow-methods</td>
            <td align="left">get, post, options</td>
          </tr>
          <tr>
            <td align="left">78</td>
            <td align="left">access-control-allow-methods</td>
            <td align="left">options</td>
          </tr>
          <tr>
            <td align="left">79</td>
            <td align="left">access-control-expose-headers</td>
            <td align="left">content-length</td>
          </tr>
          <tr>
            <td align="left">80</td>
            <td align="left">access-control-request-headers</td>
            <td align="left">content-type</td>
          </tr>
          <tr>
            <td align="left">81</td>
            <td align="left">access-control-request-method</td>
            <td align="left">get</td>
          </tr>
          <tr>
            <td align="left">82</td>
            <td align="left">access-control-request-method</td>
            <td align="left">post</td>
          </tr>
          <tr>
            <td align="left">83</td>
            <td align="left">alt-svc</td>
            <td align="left">clear</td>
          </tr>
          <tr>
            <td align="left">84</td>
            <td align="left">authorization</td>
            <td align="left">&nbsp;</td>
          </tr>
          <tr>
            <td align="left">85</td>
            <td align="left">content-security-policy</td>
            <td align="left">script-src 'none'; object-src 'none'; base-uri 'none'</td>
          </tr>
          <tr>
            <td align="left">86</td>
            <td align="left">early-data</td>
            <td align="left">1</td>
          </tr>
          <tr>
            <td align="left">87</td>
            <td align="left">expect-ct</td>
            <td align="left">&nbsp;</td>
          </tr>
          <tr>
            <td align="left">88</td>
            <td align="left">forwarded</td>
            <td align="left">&nbsp;</td>
          </tr>
          <tr>
            <td align="left">89</td>
            <td align="left">if-range</td>
            <td align="left">&nbsp;</td>
          </tr>
          <tr>
            <td align="left">90</td>
            <td align="left">origin</td>
            <td align="left">&nbsp;</td>
          </tr>
          <tr>
            <td align="left">91</td>
            <td align="left">purpose</td>
            <td align="left">prefetch</td>
          </tr>
          <tr>
            <td align="left">92</td>
            <td align="left">server</td>
            <td align="left">&nbsp;</td>
          </tr>
          <tr>
            <td align="left">93</td>
            <td align="left">timing-allow-origin</td>
            <td align="left">*</td>
          </tr>
          <tr>
            <td align="left">94</td>
            <td align="left">upgrade-insecure-requests</td>
            <td align="left">1</td>
          </tr>
          <tr>
            <td align="left">95</td>
            <td align="left">user-agent</td>
            <td align="left">&nbsp;</td>
          </tr>
          <tr>
            <td align="left">96</td>
            <td align="left">x-forwarded-for</td>
            <td align="left">&nbsp;</td>
          </tr>
          <tr>
            <td align="left">97</td>
            <td align="left">x-frame-options</td>
            <td align="left">deny</td>
          </tr>
          <tr>
            <td align="left">98</td>
            <td align="left">x-frame-options</td>
            <td align="left">sameorigin</td>
          </tr>
        </tbody>
      </table>
    </section>
    <section anchor="sample-one-pass-encoding-algorithm" numbered="true" toc="default">
      <name>Sample One Pass Encoding Algorithm</name>
      <t>Pseudo-code for single pass encoding, excluding handling of duplicates,
non-blocking mode, and reference tracking.</t>
      <artwork name="" type="" align="left" alt=""><![CDATA[
baseIndex = dynamicTable.baseIndex
largestReference = 0
for header in headers:
  staticIdx = staticTable.getIndex(header)
  if staticIdx:
    encodeIndexReference(streamBuffer, staticIdx)
    continue

  dynamicIdx = dynamicTable.getIndex(header)
  if !dynamicIdx:
    # No matching entry.  Either insert+index or encode literal
    nameIdx = getNameIndex(header)
    if shouldIndex(header) and dynamicTable.canIndex(header):
      encodeLiteralWithIncrementalIndex(controlBuffer, nameIdx,
                                        header)
      dynamicTable.add(header)
      dynamicIdx = dynamicTable.baseIndex

  if !dynamicIdx:
    # Couldn't index it, literal
    if nameIdx <= staticTable.size:
      encodeLiteral(streamBuffer, nameIndex, header)
    else:
      # encode literal, possibly with nameIdx above baseIndex
      encodeDynamicLiteral(streamBuffer, nameIndex, baseIndex,
                           header)
      largestReference = max(largestReference,
                             dynamicTable.toAbsolute(nameIdx))
  else:
    # Dynamic index reference
    assert(dynamicIdx)
    largestReference = max(largestReference, dynamicIdx)
    # Encode dynamicIdx, possibly with dynamicIdx above baseIndex
    encodeDynamicIndexReference(streamBuffer, dynamicIdx,
                                baseIndex)

# encode the prefix
encodeInteger(prefixBuffer, 0x00, largestReference, 8)
if baseIndex >= largestReference:
  encodeInteger(prefixBuffer, 0, baseIndex - largestReference, 7)
else:
  encodeInteger(prefixBuffer, 0x80,
                largestReference  - baseIndex, 7)

return controlBuffer, prefixBuffer + streamBuffer
]]></artwork>
    </section>
    <section anchor="change-log" numbered="true" toc="default">
      <name>Change Log</name>
      <ul empty="true" spacing="normal">
        <li>
          <strong>RFC Editor's Note:</strong> Please remove this section prior to publication of a
final version of this document.</li>
      </ul>
      <section anchor="since-draft-ietf-quic-qpack-12" numbered="true" toc="default">
        <name>Since draft-ietf-quic-qpack-12</name>
        <t>Editorial changes only</t>
      </section>
      <section anchor="since-draft-ietf-quic-qpack-11" numbered="true" toc="default">
        <name>Since draft-ietf-quic-qpack-11</name>
        <t>Editorial changes only</t>
      </section>
      <section anchor="since-draft-ietf-quic-qpack-10" numbered="true" toc="default">
        <name>Since draft-ietf-quic-qpack-10</name>
        <t>Editorial changes only</t>
      </section>
      <section anchor="since-draft-ietf-quic-qpack-09" numbered="true" toc="default">
        <name>Since draft-ietf-quic-qpack-09</name>
        <ul spacing="normal">
          <li>Decoders MUST emit Header Acknowledgements (#2939)</li>
          <li>Updated error code for multiple encoder or decoder streams (#2970)</li>
          <li>Added explicit defaults for new SETTINGS (#2974)</li>
        </ul>
      </section>
      <section anchor="since-draft-ietf-quic-qpack-08" numbered="true" toc="default">
        <name>Since draft-ietf-quic-qpack-08</name>
        <ul spacing="normal">
          <li>Endpoints are permitted to create encoder and decoder streams even if they
can't use them (#2100, #2529)</li>
          <li>Maximum values for settings removed (#2766, #2767)</li>
        </ul>
      </section>
      <section anchor="since-draft-ietf-quic-qpack-06" numbered="true" toc="default">
        <name>Since draft-ietf-quic-qpack-06</name>
        <ul spacing="normal">
          <li>Clarify initial dynamic table capacity maximums (#2276, #2330, #2330)</li>
        </ul>
      </section>
      <section anchor="since-draft-ietf-quic-qpack-05" numbered="true" toc="default">
        <name>Since draft-ietf-quic-qpack-05</name>
        <ul spacing="normal">
          <li>Introduced the terms dynamic table capacity and maximum dynamic table
capacity.</li>
          <li>Renamed SETTINGS_HEADER_TABLE_SIZE to SETTINGS_QPACK_MAX_TABLE_CAPACITY.</li>
        </ul>
      </section>
      <section anchor="since-draft-ietf-quic-qpack-04" numbered="true" toc="default">
        <name>Since draft-ietf-quic-qpack-04</name>
        <ul spacing="normal">
          <li>Changed calculation of Delta Base Index to avoid an illegal value (#2002,
#2005)</li>
        </ul>
      </section>
      <section anchor="since-draft-ietf-quic-qpack-03" numbered="true" toc="default">
        <name>Since draft-ietf-quic-qpack-03</name>
        <ul spacing="normal">
          <li>Change HTTP settings defaults (#2038)</li>
          <li>Substantial editorial reorganization</li>
        </ul>
      </section>
      <section anchor="since-draft-ietf-quic-qpack-02" numbered="true" toc="default">
        <name>Since draft-ietf-quic-qpack-02</name>
        <ul spacing="normal">
          <li>Largest Reference encoded modulo MaxEntries (#1763)</li>
          <li>New Static Table (#1355)</li>
          <li>Table Size Update with Insert Count=0 is a connection error (#1762)</li>
          <li>Stream Cancellations are optional when SETTINGS_HEADER_TABLE_SIZE=0 (#1761)</li>
          <li>Implementations must handle 62 bit integers (#1760)</li>
          <li>Different error types for each QPACK stream, other changes to error
handling (#1726)</li>
          <li>Preserve header field order (#1725)</li>
          <li>Initial table size is the maximum permitted when table is first usable (#1642)</li>
        </ul>
      </section>
      <section anchor="since-draft-ietf-quic-qpack-01" numbered="true" toc="default">
        <name>Since draft-ietf-quic-qpack-01</name>
        <ul spacing="normal">
          <li>Only header blocks that reference the dynamic table are acknowledged (#1603,
#1605)</li>
        </ul>
      </section>
      <section anchor="since-draft-ietf-quic-qpack-00" numbered="true" toc="default">
        <name>Since draft-ietf-quic-qpack-00</name>
        <ul spacing="normal">
          <li>Renumbered instructions for consistency (#1471, #1472)</li>
          <li>Decoder is allowed to validate largest reference (#1404, #1469)</li>
          <li>Header block acknowledgments also acknowledge the associated largest reference
(#1370, #1400)</li>
          <li>Added an acknowledgment for unread streams (#1371, #1400)</li>
          <li>Removed framing from encoder stream (#1361,#1467)</li>
          <li>Control streams use typed unidirectional streams rather than fixed stream IDs
(#910,#1359)</li>
        </ul>
      </section>
      <section anchor="since-draft-ietf-quic-qcram-00" numbered="true" toc="default">
        <name>Since draft-ietf-quic-qcram-00</name>
        <ul spacing="normal">
          <li>Separate instruction sets for table updates and header blocks (#1235, #1142,
#1141)</li>
          <li>Reworked indexing scheme (#1176, #1145, #1136, #1130, #1125, #1314)</li>
          <li>Added mechanisms that support one-pass encoding (#1138, #1320)</li>
          <li>Added a setting to control the number of blocked decoders (#238, #1140, #1143)</li>
          <li>Moved table updates and acknowledgments to dedicated streams (#1121, #1122,
#1238)</li>
        </ul>
      </section>
    </section>
    <section numbered="false" anchor="acknowledgments" toc="default">
      <name>Acknowledgments</name>
      <t>This draft draws heavily on the text of <xref target="RFC7541" format="default"/>.  The indirect input of
those authors is gratefully acknowledged, as well as ideas from:</t>
      <ul spacing="normal">
        <li>Ryan Hamilton</li>
        <li>Patrick McManus</li>
        <li>Kazuho Oku</li>
        <li>Biren Roy</li>
        <li>Ian Swett</li>
        <li>Dmitri Tikhonov</li>
      </ul>
      <t>Buck's contribution was supported by Google during his employment there.</t>
      <t>A substantial portion of Mike's contribution was supported by Microsoft during
his employment there.</t>
    </section>
  </back>
  <!-- ##markdown-source:
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
dij/F+Anihxo/gAA

-->
</rfc>
