<?xml version='1.0' encoding='utf-8'?>
<!DOCTYPE rfc [
  <!ENTITY nbsp    "&#160;">
  <!ENTITY zwsp   "&#8203;">
  <!ENTITY nbhy   "&#8209;">
  <!ENTITY wj     "&#8288;">
]>
<?xml-stylesheet type="text/xsl" href="rfc2629.xslt" ?>
<!-- generated by https://github.com/cabo/kramdown-rfc version 1.7.4 (Ruby 3.2.2) -->
<rfc xmlns:xi="http://www.w3.org/2001/XInclude" ipr="trust200902" docName="draft-ietf-httpbis-compression-dictionary-01" category="std" consensus="true" tocInclude="true" sortRefs="true" symRefs="true" version="3">
  <!-- xml2rfc v2v3 conversion 3.18.2 -->
  <front>
    <title abbrev="compression-dictionary">Compression Dictionary Transport</title>
    <seriesInfo name="Internet-Draft" value="draft-ietf-httpbis-compression-dictionary-01"/>
    <author initials="P." surname="Meenan" fullname="Patrick Meenan" role="editor">
      <organization>Google LLC</organization>
      <address>
        <email>pmeenan@google.com</email>
      </address>
    </author>
    <author initials="Y." surname="Weiss" fullname="Yoav Weiss" role="editor">
      <organization>Google LLC</organization>
      <address>
        <email>yoavweiss@google.com</email>
      </address>
    </author>
    <date year="2023" month="December" day="11"/>
    <area>ART</area>
    <workgroup>HTTP</workgroup>
    <keyword>compression dictionary</keyword>
    <keyword>shared brotli</keyword>
    <keyword>zstandard dictionary</keyword>
    <keyword>delta compression</keyword>
    <abstract>
      <?line 53?>

<t>This specification defines a mechanism for using designated <xref target="HTTP"/> responses
as an external dictionary for future HTTP responses for compression schemes
that support using external dictionaries (e.g., Brotli <xref target="RFC7932"/> and
Zstandard <xref target="RFC8878"/>).</t>
    </abstract>
    <note removeInRFC="true">
      <name>About This Document</name>
      <t>
        Status information for this document may be found at <eref target="https://datatracker.ietf.org/doc/draft-ietf-httpbis-compression-dictionary/"/>.
      </t>
      <t>
        Discussion of this document takes place on the
        HTTP Working Group mailing list (<eref target="mailto:ietf-http-wg@w3.org"/>),
        which is archived at <eref target="https://lists.w3.org/Archives/Public/ietf-http-wg/"/>.
        Working Group information can be found at <eref target="https://httpwg.org/"/>.
      </t>
      <t>Source for this draft and an issue tracker can be found at
        <eref target="https://github.com/httpwg/http-extensions/labels/compression-dictionary"/>.</t>
    </note>
  </front>
  <middle>
    <?line 60?>

<section anchor="introduction">
      <name>Introduction</name>
      <t>This specification defines a mechanism for using designated <xref target="HTTP"/> responses
as an external dictionary for future HTTP responses for compression schemes
that support using external dictionaries (e.g., Brotli <xref target="RFC7932"/> and
Zstandard <xref target="RFC8878"/>).</t>
      <t>This document describes the HTTP headers used for negotiating dictionary usage
and registers media types for content encoding Brotli and Zstandard using a
negotiated dictionary.</t>
      <t>This document uses the line folding strategies described in <xref target="FOLDING"/>.</t>
    </section>
    <section anchor="dictionary-negotiation">
      <name>Dictionary Negotiation</name>
      <section anchor="use-as-dictionary">
        <name>Use-As-Dictionary</name>
        <t>When responding to a HTTP Request, a server can advertise that the response can
be used as a dictionary for future requests for URLs that match the rules
specified in the Use-As-Dictionary response header.</t>
        <t>The Use-As-Dictionary response header is a Structured Field
<xref target="STRUCTURED-FIELDS"/> sf-dictionary with values for "match", "match-dest",
"ttl", "id", and "type".</t>
        <section anchor="match">
          <name>match</name>
          <t>The "match" value of the Use-As-Dictionary header is a sf-string value
that provides the URLPattern to use for request matching
(https://urlpattern.spec.whatwg.org/).</t>
          <t>The URLPattern used for matching does not support using Regular expressions.</t>
          <t>The following algorithm will return TRUE for a valid match pattern and FALSE
for an invalid pattern that MUST NOT be used:</t>
          <ol spacing="normal" type="1"><li>
              <t>Let MATCH be the value of "match" for the given dictionary.</t>
            </li>
            <li>
              <t>Let URL be the URL of the dictionary request.</t>
            </li>
            <li>
              <t>Let PATTERN be a URLPattern constructed by setting input=MATCH,
and baseURL=URL (https://urlpattern.spec.whatwg.org/).</t>
            </li>
            <li>
              <t>If PATTERN has regexp groups then return FALSE
(https://urlpattern.spec.whatwg.org/#urlpattern-has-regexp-groups).</t>
            </li>
            <li>
              <t>Return True.</t>
            </li>
          </ol>
          <t>The "match" value is required and MUST be included in the
Use-As-Dictionary sf-dictionary for the dictionary to be considered valid.</t>
        </section>
        <section anchor="match-dest">
          <name>match-dest</name>
          <t>The "match-dest" value of the Use-As-Dictionary header is a sf-string value
that provides a request destination
(https://fetch.spec.whatwg.org/#concept-request-destination).</t>
          <t>An empty string for "match-dest" MUST match all destinations.</t>
          <t>For clients that do not support request destinations or if the value of
"match-dest" is a value that is not supported by the client then the client
MUST treat it as an empty string and match all destinations.</t>
          <t>The "match-dest" value is optional and defaults to the empty string.</t>
        </section>
        <section anchor="ttl">
          <name>ttl</name>
          <t>The "ttl" value of the Use-As-Dictionary header is a sf-integer value that
provides the time in seconds that the dictionary is valid for (time to live).</t>
          <t>The "ttl" is independent of the cache lifetime of the resource being used for
the dictionary. If the underlying resource is evicted from cache then it is
also removed but this allows for setting an explicit time to live for use as a
dictionary independent of the underlying resource in cache. Expired resources
can still be useful as dictionaries while they are in cache and can be used for
fetching updates of the expired resource. It can also be useful to artificially
limit the life of a dictionary in cases where the dictionary is updated
frequently which can help limit the number of possible incoming dictionary
variations.</t>
          <t>The "ttl" value is optional and defaults to 1209600 (14 days).</t>
        </section>
        <section anchor="id">
          <name>id</name>
          <t>The "id" value of the Use-As-Dictionary header is a sf-string value that
specifies a server identifier for the dictionary. If an "id" value is present
then it MUST be sent to the server in a "Dictionary-ID" request header when
the dictionary is advertised as being available.</t>
          <t>The server identifier MUST be treated as an opaque string by the client.</t>
          <t>The server identifier MUST NOT be relied upon by the server to guarantee the
contents of the dictionary. The dictionary hash MUST be validated before use.</t>
          <t>The "id" value string length (after any decoding) supports up to 1024
characters.</t>
          <t>The "id" value is optional.</t>
        </section>
        <section anchor="type">
          <name>type</name>
          <t>The "type" value of the Use-As-Dictionary header is a sf-string value that
describes the file format of the supplied dictionary.</t>
          <t>"raw" is the only defined dictionary format which represents an unformatted
blob of bytes suitable for any compression scheme to use.</t>
          <t>If a client receives a dictionary with a type that it does not understand, it
MUST NOT use the dictionary.</t>
          <t>The "type" value is optional and defaults to "raw".</t>
        </section>
        <section anchor="examples">
          <name>Examples</name>
          <section anchor="path-prefix">
            <name>Path Prefix</name>
            <t>A response that contained a response header:</t>
            <sourcecode type="http-message"><![CDATA[
NOTE: '\' line wrapping per RFC 8792

Use-As-Dictionary: \
  match="/product/*", match-dest="document", ttl=604800
]]></sourcecode>
            <t>Would specify matching any document request for a URL with a path prefix of
/product/ on the same <xref target="Origin"/> as the original request, and expiring as a
dictionary in 7 days independent of the cache lifetime of the resource.</t>
          </section>
          <section anchor="versioned-directories">
            <name>Versioned Directories</name>
            <t>A response that contained a response header:</t>
            <sourcecode type="http-message"><![CDATA[
Use-As-Dictionary: match="/app/*/main.js"
]]></sourcecode>
            <t>Would match main.js in any directory under /app/ and expiring as a dictionary
in one year.</t>
          </section>
        </section>
      </section>
      <section anchor="available-dictionary">
        <name>Available-Dictionary</name>
        <t>When a HTTP client makes a request for a resource for which it has an
appropriate dictionary, it can add a "Available-Dictionary" request header
to the request to indicate to the server that it has a dictionary available to
use for compression.</t>
        <t>The "Available-Dictionary" request header is a Structured Field
<xref target="STRUCTURED-FIELDS"/> sf-binary <xref target="SHA-256"/> hash of the contents of a single
available dictionary.</t>
        <t>The client MUST only send a single "Available-Dictionary" request header
with a single hash value for the best available match that it has available.</t>
        <t>For example:</t>
        <sourcecode type="http-message"><![CDATA[
Available-Dictionary: :pZGm1Av0IEBKARczz7exkNYsZb8LzaMrV7J32a2fFG4=:
]]></sourcecode>
        <section anchor="dictionary-freshness-requirement">
          <name>Dictionary freshness requirement</name>
          <t>To be considered as a match, the dictionary must not yet be expired as a
dictionary. When iterating through dictionaries looking for a match, the
expiration time of the dictionary is calculated by taking the last time the
dictionary was fetched and adding the "ttl" seconds from the
"Use-As-Dictionary" response. If the current time is beyond the expiration time
of the dictionary, it MUST be ignored.</t>
        </section>
        <section anchor="dictionary-url-matching">
          <name>Dictionary URL matching</name>
          <t>When a dictionary is stored as a result of a "Use-As-Dictionary" directive, it
includes "match" and "match-dest" strings that are used to match an outgoing
request from a client to the available dictionaries.</t>
          <t>Dictionaries MUST have been served from the same {Origin} as the outgoing
request to match.</t>
          <t>To see if an outbound request matches a given dictionary, the following
algorithm will return TRUE for a successful match and FALSE for no-match:</t>
          <ol spacing="normal" type="1"><li>
              <t>If the current client supports request destinations:
              </t>
              <ul spacing="normal">
                <li>
                  <t>Let DEST be the value of "match-dest" for the given dictionary.</t>
                </li>
                <li>
                  <t>Let REQUEST_DEST be the value of the destination for the current
 request.</t>
                </li>
                <li>
                  <t>If DEST is not an empty string and If DEST and REQUEST_DEST are not the
 same value, return FALSE</t>
                </li>
              </ul>
            </li>
            <li>
              <t>Let BASEURL be the URL of the dictionary request.</t>
            </li>
            <li>
              <t>Let URL represent the URL of the outbound request being checked.</t>
            </li>
            <li>
              <t>If the {Origin} of BASEURL and the {Origin} of URL are not the same, return
FALSE.</t>
            </li>
            <li>
              <t>Let MATCH be the value of "match" for the given dictionary.</t>
            </li>
            <li>
              <t>Let PATTERN be a URLPattern constructed by setting input=MATCH,
and baseURL=BASEURL (https://urlpattern.spec.whatwg.org/).</t>
            </li>
            <li>
              <t>Return the result of running the "test" method of PATTERN with input=URL
(https://urlpattern.spec.whatwg.org/#ref-for-dom-urlpattern-test)</t>
            </li>
          </ol>
        </section>
        <section anchor="multiple-matching-dictionaries">
          <name>Multiple matching dictionaries</name>
          <t>When there are multiple dictionaries that match a given request URL, the client
MUST pick a single dictionary using the following rules:
1. For clients that support request destinations, a dictionary that specifies
and matches a "match-dest" takes precedence over a match that does not use a
destination.
1. Given equivalent destination precedence, the dictionary with the longest
"match" takes precedence.
1. Given equivalent destination and match length precedence, the most recently
fetched dictionary takes precedence.</t>
        </section>
      </section>
      <section anchor="dictionary-id">
        <name>Dictionary-ID</name>
        <t>When a HTTP client makes a request for a resource for which it has an
appropriate dictionary and the dictionary was stored with a server-provided
"id" in the Use-As-Dictionary response then the client MUST echo the stored
"id" in a "Dictionary-ID" request header.</t>
        <t>The "Dictionary-ID" request header is a Structured Field <xref target="STRUCTURED-FIELDS"/>
sf-string of up to 1024 characters (after any decoding) and MUST be identical
to the server-provided "id".</t>
        <t>For example:</t>
        <sourcecode type="http-message"><![CDATA[
Available-Dictionary: :pZGm1Av0IEBKARczz7exkNYsZb8LzaMrV7J32a2fFG4=:
Dictionary-ID: "/v1/main.js 33a64df551425fcc55e4d42a148795d9f25f89d4"
]]></sourcecode>
      </section>
      <section anchor="content-dictionary">
        <name>Content-Dictionary</name>
        <t>When a HTTP server responds with a resource that is encoded with a dictionary
the server MUST send the hash of the dictionary that was used in the
"Content-Dictionary" response header.</t>
        <t>The "Content-Dictionary" response header is a Structured Field
<xref target="STRUCTURED-FIELDS"/> sf-dictionary <xref target="SHA-256"/> hash of the contents of the
dictionary that was used to encode the response.</t>
        <t>If the HTTP response contains a "Content-Dictionary" response header with the
hash of a dictionary that the client does not have available then the client
cannot decode or use the HTTP response.</t>
        <t>For example:</t>
        <sourcecode type="http-message"><![CDATA[
Content-Dictionary: :pZGm1Av0IEBKARczz7exkNYsZb8LzaMrV7J32a2fFG4=:
]]></sourcecode>
      </section>
    </section>
    <section anchor="negotiating-the-compression-algorithm">
      <name>Negotiating the compression algorithm</name>
      <t>When a compression dictionary is available for use for a given request, the
algorithm to be used is negotiated through the regular mechanism for
negotiating content encoding in HTTP.</t>
      <t>This document introduces two new content encoding algorithms:</t>
      <table>
        <thead>
          <tr>
            <th align="left">Content-Encoding</th>
            <th align="left">Description</th>
          </tr>
        </thead>
        <tbody>
          <tr>
            <td align="left">br-d</td>
            <td align="left">Brotli using an external compression dictionary</td>
          </tr>
          <tr>
            <td align="left">zstd-d</td>
            <td align="left">Zstandard using an external compression dictionary</td>
          </tr>
        </tbody>
      </table>
      <t>The dictionary to use is negotiated separately and advertised in the
"Available-Dictionary" request header.</t>
      <section anchor="accept-encoding">
        <name>Accept-Encoding</name>
        <t>The client adds the algorithms that it supports to the "Accept-Encoding"
request header. e.g.:</t>
        <sourcecode type="http-message"><![CDATA[
Accept-Encoding: gzip, deflate, br, zstd, br-d, zstd-d
]]></sourcecode>
      </section>
      <section anchor="content-encoding">
        <name>Content-Encoding</name>
        <t>If a server supports one of the dictionary algorithms advertised by the client
and chooses to compress the content of the response using the dictionary that
the client has advertised then it sets the "Content-Encoding" response header
to the appropriate value for the algorithm selected. e.g.:</t>
        <sourcecode type="http-message"><![CDATA[
Content-Encoding: br-d
]]></sourcecode>
        <t>If the response is cacheable, it MUST include a "Vary" header to prevent caches
serving dictionary-compressed resources to clients that don't support them or
serving the response compressed with the wrong dictionary:</t>
        <sourcecode type="http-message"><![CDATA[
Vary: accept-encoding, available-dictionary
]]></sourcecode>
      </section>
    </section>
    <section anchor="iana-considerations">
      <name>IANA Considerations</name>
      <section anchor="content-encoding-1">
        <name>Content Encoding</name>
        <t>IANA is asked to update the "HTTP Content Coding Registry" registry
(<xref target="HTTP"/>) according to the table below:</t>
        <table>
          <thead>
            <tr>
              <th align="left">Name</th>
              <th align="left">Description</th>
              <th align="left">Reference</th>
            </tr>
          </thead>
          <tbody>
            <tr>
              <td align="left">br-d</td>
              <td align="left">A stream of bytes compressed using the Brotli protocol with an external dictionary</td>
              <td align="left">
                <xref target="RFC7932"/></td>
            </tr>
            <tr>
              <td align="left">zstd-d</td>
              <td align="left">A stream of bytes compressed using the Zstandard protocol with an external dictionary</td>
              <td align="left">
                <xref target="RFC8878"/></td>
            </tr>
          </tbody>
        </table>
      </section>
      <section anchor="header-field-registration">
        <name>Header Field Registration</name>
        <t>IANA is asked to update the
"Hypertext Transfer Protocol (HTTP) Field Name Registry" registry
(<xref target="HTTP"/>) according to the table below:</t>
        <table>
          <thead>
            <tr>
              <th align="left">Field Name</th>
              <th align="left">Status</th>
              <th align="left">Reference</th>
            </tr>
          </thead>
          <tbody>
            <tr>
              <td align="left">Use-As-Dictionary</td>
              <td align="left">permanent</td>
              <td align="left">
                <xref target="use-as-dictionary"/> of this document</td>
            </tr>
            <tr>
              <td align="left">Available-Dictionary</td>
              <td align="left">permanent</td>
              <td align="left">
                <xref target="available-dictionary"/> of this document</td>
            </tr>
            <tr>
              <td align="left">Dictionary-ID</td>
              <td align="left">permanent</td>
              <td align="left">
                <xref target="dictionary-id"/> of this document</td>
            </tr>
            <tr>
              <td align="left">Content-Dictionary</td>
              <td align="left">permanent</td>
              <td align="left">
                <xref target="content-dictionary"/> of this document</td>
            </tr>
          </tbody>
        </table>
      </section>
    </section>
    <section anchor="compatibility-considerations">
      <name>Compatibility Considerations</name>
      <t>To minimize the risk of middle-boxes incorrectly processing
dictionary-compressed responses, compression dictionary transport MUST only
be used in secure contexts (HTTPS).</t>
    </section>
    <section anchor="security-considerations">
      <name>Security Considerations</name>
      <t>The security considerations for Brotli <xref target="RFC7932"/> and Zstandard
<xref target="RFC8878"/> apply to the dictionary-based versions of the respective
algorithms.</t>
      <section anchor="changing-content">
        <name>Changing content</name>
        <t>The dictionary must be treated with the same security precautions as
the content, because a change to the dictionary can result in a
change to the decompressed content.</t>
        <t>The dictionary is validated using a SHA-256 hash of the content to make sure
that the client and server are both using the same dictionary. The strength
of the SHA-256 hash algorithm isn't explicitly needed to counter attacks
since the dictionary is being served from the same origin as the content. That
said, if a weakness is discovered in SHA-256 and it is determined that the
dictionary negotiation should use a different hash algorithm, the
"Use-As-Dictionary" response header can be extended to specify a different
algorithm and the server would just ignore any "Available-Dictionary" requests
that do not use the updated hash.</t>
      </section>
      <section anchor="reading-content">
        <name>Reading content</name>
        <t>The CRIME attack shows that it's a bad idea to compress data from
mixed (e.g. public and private) sources -- the data sources include
not only the compressed data but also the dictionaries. For example,
if you compress secret cookies using a public-data-only dictionary,
you still leak information about the cookies.</t>
        <t>Not only can the dictionary reveal information about the compressed
data, but vice versa, data compressed with the dictionary can reveal
the contents of the dictionary when an adversary can control parts of
data to compress and see the compressed size. On the other hand, if
the adversary can control the dictionary, the adversary can learn
information about the compressed data.</t>
      </section>
      <section anchor="security-mitigations">
        <name>Security Mitigations</name>
        <t>If any of the mitigations do not pass, the client MUST drop the response and
return an error.</t>
        <section anchor="cross-origin-protection">
          <name>Cross-origin protection</name>
          <t>To make sure that a dictionary can only impact content from the same origin
where the dictionary was served, the URLPattern used for matching a
dictionary to requests is guaranteed to be for the same origin that the
dictionary is served from.</t>
        </section>
        <section anchor="response-readability">
          <name>Response readability</name>
          <t>For clients, like web browsers, that provide additional protection against the
readability of the payload of a response and against user tracking, additional
protections MUST be taken to make sure that the use of dictionary-based
compression does not reveal information that would not otherwise be available.</t>
          <t>In these cases, dictionary compression MUST only be used when both the
dictionary and the compressed response are fully readable by the client.</t>
          <t>In browser terms, that means that both are either same-origin to the context
they are being fetched from or that the response is cross-origin and passes
the CORS check (https://fetch.spec.whatwg.org/#cors-check).</t>
          <section anchor="same-origin">
            <name>Same-Origin</name>
            <t>On the client-side, same-origin determination is defined in the fetch spec (https://html.spec.whatwg.org/multipage/browsers.html#origin).</t>
            <t>On the server-side, a request with a "Sec-Fetch-Site:" request header with a value of "same-origin" is to be considered a same-origin request.</t>
            <ul spacing="normal">
              <li>
                <t>For any request that is same-origin:
                </t>
                <ul spacing="normal">
                  <li>
                    <t>Response MAY be used as a dictionary.</t>
                  </li>
                  <li>
                    <t>Response MAY be compressed by an available dictionary.</t>
                  </li>
                </ul>
              </li>
            </ul>
          </section>
          <section anchor="cross-origin">
            <name>Cross-Origin</name>
            <t>For requests that are not same-origin (<xref target="same-origin"/>), the "mode" of the request can be used to determine the readability of the response.</t>
            <t>For clients that conform to the fetch spec, the mode of the request is stored in the RequestMode attribute of the request (https://fetch.spec.whatwg.org/#requestmode).</t>
            <t>For servers responding to clients that expose the request mode information, the value of the mode is sent in the "Sec-Fetch-Mode" request header.</t>
            <t>If a "Sec-Fetch-Mode" request header is not present, the server SHOULD allow for the dictionary compression to be used.</t>
            <ol spacing="normal" type="1"><li>
                <t>If the mode is "navigate" or "same-origin":
                </t>
                <ul spacing="normal">
                  <li>
                    <t>Response MAY be used as a dictionary.</t>
                  </li>
                  <li>
                    <t>Response MAY be compressed by an available dictionary.</t>
                  </li>
                </ul>
              </li>
              <li>
                <t>If the mode is "cors":
                </t>
                <ul spacing="normal">
                  <li>
                    <t>For clients, apply the CORS check from the fetch spec (https://fetch.spec.whatwg.org/#cors-check) which includes credentials checking restrictions that may not be possible to check on the server.
                    </t>
                    <ul spacing="normal">
                      <li>
                        <t>If the CORS check passes:
                        </t>
                        <ul spacing="normal">
                          <li>
                            <t>Response MAY be used as a dictionary.</t>
                          </li>
                          <li>
                            <t>Response MAY be compressed by an available dictionary.</t>
                          </li>
                        </ul>
                      </li>
                      <li>
                        <t>Else:
                        </t>
                        <ul spacing="normal">
                          <li>
                            <t>Response MUST NOT be used as a dictionary.</t>
                          </li>
                          <li>
                            <t>Response MUST NOT be compressed by an available dictionary.</t>
                          </li>
                        </ul>
                      </li>
                    </ul>
                  </li>
                  <li>
                    <t>For servers:
                    </t>
                    <ul spacing="normal">
                      <li>
                        <t>If the response does not include an "Access-Control-Allow-Origin" response header:
                        </t>
                        <ul spacing="normal">
                          <li>
                            <t>Response MUST NOT be used as a dictionary.</t>
                          </li>
                          <li>
                            <t>Response MUST NOT be compressed by an available dictionary.</t>
                          </li>
                        </ul>
                      </li>
                      <li>
                        <t>If the request does not include an "Origin" request header:
                        </t>
                        <ul spacing="normal">
                          <li>
                            <t>Response MUST NOT be used as a dictionary.</t>
                          </li>
                          <li>
                            <t>Response MUST NOT be compressed by an available dictionary.</t>
                          </li>
                        </ul>
                      </li>
                      <li>
                        <t>If the value of the "Access-Control-Allow-Origin" response header is "*":
                        </t>
                        <ul spacing="normal">
                          <li>
                            <t>Response MAY be used as a dictionary.</t>
                          </li>
                          <li>
                            <t>Response MAY be compressed by an available dictionary.</t>
                          </li>
                        </ul>
                      </li>
                      <li>
                        <t>If the value of the "Access-Control-Allow-Origin" response header matches the value of the "Origin" request header:
                        </t>
                        <ul spacing="normal">
                          <li>
                            <t>Response MAY be used as a dictionary.</t>
                          </li>
                          <li>
                            <t>Response MAY be compressed by an available dictionary.</t>
                          </li>
                        </ul>
                      </li>
                    </ul>
                  </li>
                </ul>
              </li>
              <li>
                <t>If the mode is any other value (including "no-cors"):
                </t>
                <ul spacing="normal">
                  <li>
                    <t>Response MUST NOT be used as a dictionary.</t>
                  </li>
                  <li>
                    <t>Response MUST NOT be compressed by an available dictionary.</t>
                  </li>
                </ul>
              </li>
            </ol>
          </section>
        </section>
      </section>
    </section>
    <section anchor="privacy-considerations">
      <name>Privacy Considerations</name>
      <t>Since dictionaries are advertised in future requests using the hash of the
content of the dictionary, it is possible to abuse the dictionary to turn it
into a tracking cookie.</t>
      <t>To mitigate any additional tracking concerns, clients MUST treat dictionaries
in the same way that they treat cookies. This includes partitioning the storage
as cookies are partitioned as well as clearing the dictionaries whenever
cookies are cleared.</t>
    </section>
  </middle>
  <back>
    <references>
      <name>References</name>
      <references anchor="sec-normative-references">
        <name>Normative References</name>
        <reference anchor="FOLDING">
          <front>
            <title>Handling Long Lines in Content of Internet-Drafts and RFCs</title>
            <author fullname="K. Watsen" initials="K." surname="Watsen"/>
            <author fullname="E. Auerswald" initials="E." surname="Auerswald"/>
            <author fullname="A. Farrel" initials="A." surname="Farrel"/>
            <author fullname="Q. Wu" initials="Q." surname="Wu"/>
            <date month="June" year="2020"/>
            <abstract>
              <t>This document defines two strategies for handling long lines in width-bounded text content. One strategy, called the "single backslash" strategy, is based on the historical use of a single backslash ('\') character to indicate where line-folding has occurred, with the continuation occurring with the first character that is not a space character (' ') on the next line. The second strategy, called the "double backslash" strategy, extends the first strategy by adding a second backslash character to identify where the continuation begins and is thereby able to handle cases not supported by the first strategy. Both strategies use a self-describing header enabling automated reconstitution of the original content.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="8792"/>
          <seriesInfo name="DOI" value="10.17487/RFC8792"/>
        </reference>
        <reference anchor="HTTP">
          <front>
            <title>HTTP Semantics</title>
            <author fullname="R. Fielding" initials="R." role="editor" surname="Fielding"/>
            <author fullname="M. Nottingham" initials="M." role="editor" surname="Nottingham"/>
            <author fullname="J. Reschke" initials="J." role="editor" surname="Reschke"/>
            <date month="June" year="2022"/>
            <abstract>
              <t>The Hypertext Transfer Protocol (HTTP) is a stateless application-level protocol for distributed, collaborative, hypertext information systems. This document describes the overall architecture of HTTP, establishes common terminology, and defines aspects of the protocol that are shared by all versions. In this definition are core protocol elements, extensibility mechanisms, and the "http" and "https" Uniform Resource Identifier (URI) schemes.</t>
              <t>This document updates RFC 3864 and obsoletes RFCs 2818, 7231, 7232, 7233, 7235, 7538, 7615, 7694, and portions of 7230.</t>
            </abstract>
          </front>
          <seriesInfo name="STD" value="97"/>
          <seriesInfo name="RFC" value="9110"/>
          <seriesInfo name="DOI" value="10.17487/RFC9110"/>
        </reference>
      </references>
      <references anchor="sec-informative-references">
        <name>Informative References</name>
        <reference anchor="Origin">
          <front>
            <title>The Web Origin Concept</title>
            <author fullname="A. Barth" initials="A." surname="Barth"/>
            <date month="December" year="2011"/>
            <abstract>
              <t>This document defines the concept of an "origin", which is often used as the scope of authority or privilege by user agents. Typically, user agents isolate content retrieved from different origins to prevent malicious web site operators from interfering with the operation of benign web sites. In addition to outlining the principles that underlie the concept of origin, this document details how to determine the origin of a URI and how to serialize an origin into a string. It also defines an HTTP header field, named "Origin", that indicates which origins are associated with an HTTP request. [STANDARDS-TRACK]</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="6454"/>
          <seriesInfo name="DOI" value="10.17487/RFC6454"/>
        </reference>
        <reference anchor="ABNF">
          <front>
            <title>Augmented BNF for Syntax Specifications: ABNF</title>
            <author fullname="D. Crocker" initials="D." role="editor" surname="Crocker"/>
            <author fullname="P. Overell" initials="P." surname="Overell"/>
            <date month="January" year="2008"/>
            <abstract>
              <t>Internet technical specifications often need to define a formal syntax. Over the years, a modified version of Backus-Naur Form (BNF), called Augmented BNF (ABNF), has been popular among many Internet specifications. The current specification documents ABNF. It balances compactness and simplicity with reasonable representational power. The differences between standard BNF and ABNF involve naming rules, repetition, alternatives, order-independence, and value ranges. This specification also supplies additional rule definitions and encoding for a core lexical analyzer of the type common to several Internet specifications. [STANDARDS-TRACK]</t>
            </abstract>
          </front>
          <seriesInfo name="STD" value="68"/>
          <seriesInfo name="RFC" value="5234"/>
          <seriesInfo name="DOI" value="10.17487/RFC5234"/>
        </reference>
        <reference anchor="STRUCTURED-FIELDS">
          <front>
            <title>Structured Field Values for HTTP</title>
            <author fullname="M. Nottingham" initials="M." surname="Nottingham"/>
            <author fullname="P-H. Kamp" surname="P-H. Kamp"/>
            <date month="February" year="2021"/>
            <abstract>
              <t>This document describes a set of data types and associated algorithms that are intended to make it easier and safer to define and handle HTTP header and trailer fields, known as "Structured Fields", "Structured Headers", or "Structured Trailers". It is intended for use by specifications of new HTTP fields that wish to use a common syntax that is more restrictive than traditional HTTP field values.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="8941"/>
          <seriesInfo name="DOI" value="10.17487/RFC8941"/>
        </reference>
        <reference anchor="URL">
          <front>
            <title>Uniform Resource Identifier (URI): Generic Syntax</title>
            <author fullname="T. Berners-Lee" initials="T." surname="Berners-Lee"/>
            <author fullname="R. Fielding" initials="R." surname="Fielding"/>
            <author fullname="L. Masinter" initials="L." surname="Masinter"/>
            <date month="January" year="2005"/>
            <abstract>
              <t>A Uniform Resource Identifier (URI) is a compact sequence of characters that identifies an abstract or physical resource. This specification defines the generic URI syntax and a process for resolving URI references that might be in relative form, along with guidelines and security considerations for the use of URIs on the Internet. The URI syntax defines a grammar that is a superset of all valid URIs, allowing an implementation to parse the common components of a URI reference without knowing the scheme-specific requirements of every possible identifier. This specification does not define a generative grammar for URIs; that task is performed by the individual specifications of each URI scheme. [STANDARDS-TRACK]</t>
            </abstract>
          </front>
          <seriesInfo name="STD" value="66"/>
          <seriesInfo name="RFC" value="3986"/>
          <seriesInfo name="DOI" value="10.17487/RFC3986"/>
        </reference>
        <reference anchor="SHA-256">
          <front>
            <title>US Secure Hash Algorithms (SHA and SHA-based HMAC and HKDF)</title>
            <author fullname="D. Eastlake 3rd" initials="D." surname="Eastlake 3rd"/>
            <author fullname="T. Hansen" initials="T." surname="Hansen"/>
            <date month="May" year="2011"/>
            <abstract>
              <t>Federal Information Processing Standard, FIPS</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="6234"/>
          <seriesInfo name="DOI" value="10.17487/RFC6234"/>
        </reference>
        <reference anchor="RFC7932">
          <front>
            <title>Brotli Compressed Data Format</title>
            <author fullname="J. Alakuijala" initials="J." surname="Alakuijala"/>
            <author fullname="Z. Szabadka" initials="Z." surname="Szabadka"/>
            <date month="July" year="2016"/>
            <abstract>
              <t>This specification defines a lossless compressed data format that compresses data using a combination of the LZ77 algorithm and Huffman coding, with efficiency comparable to the best currently available general-purpose compression methods.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="7932"/>
          <seriesInfo name="DOI" value="10.17487/RFC7932"/>
        </reference>
        <reference anchor="RFC8878">
          <front>
            <title>Zstandard Compression and the 'application/zstd' Media Type</title>
            <author fullname="Y. Collet" initials="Y." surname="Collet"/>
            <author fullname="M. Kucherawy" initials="M." role="editor" surname="Kucherawy"/>
            <date month="February" year="2021"/>
            <abstract>
              <t>Zstandard, or "zstd" (pronounced "zee standard"), is a lossless data compression mechanism. This document describes the mechanism and registers a media type, content encoding, and a structured syntax suffix to be used when transporting zstd-compressed content via MIME.</t>
              <t>Despite use of the word "standard" as part of Zstandard, readers are advised that this document is not an Internet Standards Track specification; it is being published for informational purposes only.</t>
              <t>This document replaces and obsoletes RFC 8478.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="8878"/>
          <seriesInfo name="DOI" value="10.17487/RFC8878"/>
        </reference>
      </references>
    </references>
    <?line 508?>



  </back>
  <!-- ##markdown-source:
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
lKBEUSRnQKQQ/wvSY7nd/E4AAA==

-->

</rfc>
