<?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-rfc2629 version 1.5.6 -->
<?rfc toc="yes"?>
<?rfc tocindent="yes"?>
<?rfc sortrefs="yes"?>
<?rfc symrefs="yes"?>
<?rfc strict="yes"?>
<?rfc compact="yes"?>
<?rfc comments="yes"?>
<?rfc inline="yes"?>
<rfc xmlns:xi="http://www.w3.org/2001/XInclude" ipr="trust200902" docName="draft-nottingham-http-structure-retrofit-00" category="info" obsoletes="" updates="" submissionType="IETF" xml:lang="en" tocInclude="true" sortRefs="true" symRefs="true" version="3">
  <!-- xml2rfc v2v3 conversion 3.10.0 -->
  <front>
    <title>Retrofit Structured Fields for HTTP</title>
    <seriesInfo name="Internet-Draft" value="draft-nottingham-http-structure-retrofit-00"/>
    <author initials="M." surname="Nottingham" fullname="Mark Nottingham">
      <organization/>
      <address>
        <postal>
          <postalLine>Prahran</postalLine>
          <postalLine>VIC</postalLine>
          <postalLine>Australia</postalLine>
        </postal>
        <email>mnot@mnot.net</email>
        <uri>https://www.mnot.net/</uri>
      </address>
    </author>
    <date/>
    <area>General</area>
    <keyword>Internet-Draft</keyword>
    <abstract>
      <t>This specification defines how a selection of existing HTTP fields can be handled as Structured Fields.</t>
    </abstract>
    <note>
      <name>Note to Readers</name>
      <t><em>RFC EDITOR: please remove this section before publication</em></t>
      <t>The issues list for this draft can be found at <eref target="https://github.com/mnot/I-D/labels/http-structure-retrofit">https://github.com/mnot/I-D/labels/http-structure-retrofit</eref>.</t>
      <t>The most recent (often, unpublished) draft is at <eref target="https://mnot.github.io/I-D/http-structure-retrofit/">https://mnot.github.io/I-D/http-structure-retrofit/</eref>.</t>
      <t>Recent changes are listed at <eref target="https://github.com/mnot/I-D/commits/gh-pages/http-structure-retrofit">https://github.com/mnot/I-D/commits/gh-pages/http-structure-retrofit</eref>.</t>
      <t>See also the draft's current status in the IETF datatracker, at
<eref target="https://datatracker.ietf.org/doc/draft-nottingham-http-structure-retrofit/">https://datatracker.ietf.org/doc/draft-nottingham-http-structure-retrofit/</eref>.</t>
    </note>
  </front>
  <middle>
    <section anchor="introduction" numbered="true" toc="default">
      <name>Introduction</name>
      <t>Structured Field Values for HTTP <xref target="STRUCTURED-FIELDS" format="default"/> introduced a data model with associated parsing and serialisation algorithms for HTTP field values. Header fields that are defined as Structured Fields can realise a number of benefits, including:</t>
      <ul spacing="normal">
        <li>Improved interoperability and security: precisely defined parsing and serialisation algorithms are typically not available for fields defined with just ABNF and/or prose.</li>
        <li>Reuse of common implementations: many parsers for other fields are specific to a single field or a small family of fields</li>
        <li>Canonical form: because a deterministic serialisation algorithm is defined for each type, Structure Fields have a canonical representation</li>
        <li>Enhanced API support: a regular data model makes it easier to expose field values as a native data structure in implementations</li>
        <li>Alternative serialisations: While <xref target="STRUCTURED-FIELDS" format="default"/> defines a textual serialisation of that data model, other, more efficient serialisations of the underlying data model are also possible.</li>
      </ul>
      <t>However, a field needs to be defined as a Structured Field for these benefits to be realised. Many existing fields are not, making up the bulk of header and trailer fields seen in HTTP traffic on the Internet.</t>
      <t>This specification defines how a selection of existing HTTP fields can be handled as Structured Fields, so that these benefits can be realised -- thereby making them Retrofit Structured Fields.</t>
      <t>It does so using two techniques. <xref target="compatible" format="default"/> lists compatible fields -- those that can be handled as if they were Structured Fields due to the similarity of their defined syntax to that in Structured Fields. <xref target="mapped" format="default"/> lists mapped fields -- those whose syntax needs to be transformed into an underlying data model which is then mapped into that defined by Structured Fields.</t>
      <t>While implementations can parse and serialise Compatible Fields as Structured Fields subject to the caveats in <xref target="compatible" format="default"/>, a sender cannot generate mapped fields from <xref target="mapped" format="default"/> and expect them to be understood and acted upon by the recipient without prior negotiation. This specification does not define such a mechanism.</t>
      <section anchor="notational-conventions" numbered="true" toc="default">
        <name>Notational Conventions</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>
      </section>
      <section anchor="compatible" numbered="true" toc="default">
        <name>Compatible Fields</name>
        <t>HTTP fields with the following names can usually have their values handled as Structured Fields according to the listed parsing and serialisation algorithms in <xref target="RFC8941" format="default"/>, subject to the listed caveats.</t>
        <t>The listed types are chosen for compatibility with the defined syntax of the field as well as with actual Internet traffic (see <xref target="numbers" format="default"/>). However, not all instances of these fields will successfully parse. This might be because the field value is clearly invalid, or it might be because it is valid but not parseable as a Structured Field.</t>
        <t>As such, an application using this specification will need to consider how to handle these field values. Depending on its requirements, it might be advisable to reject such values, treat them as opaque strings, or attempt to recover a structured value from them in an ad hoc fashion.</t>
        <ul spacing="normal">
          <li>Accept - List</li>
          <li>Accept-Encoding - List</li>
          <li>Accept-Language - List</li>
          <li>Accept-Patch - List</li>
          <li>Accept-Ranges - List</li>
          <li>Access-Control-Allow-Credentials - Item</li>
          <li>Access-Control-Allow-Headers - List</li>
          <li>Access-Control-Allow-Methods - List</li>
          <li>Access-Control-Allow-Origin - Item</li>
          <li>Access-Control-Expose-Headers - List</li>
          <li>Access-Control-Max-Age - Item</li>
          <li>Access-Control-Request-Headers - List</li>
          <li>Access-Control-Request-Method - Item</li>
          <li>Age - Item</li>
          <li>Allow - List</li>
          <li>ALPN - List</li>
          <li>Alt-Svc - Dictionary</li>
          <li>Alt-Used - Item</li>
          <li>Cache-Control - Dictionary</li>
          <li>Connection - List</li>
          <li>Content-Encoding - List</li>
          <li>Content-Language - List</li>
          <li>Content-Length - List</li>
          <li>Content-Type - Item</li>
          <li>Cross-Origin-Resource-Policy - Item</li>
          <li>Expect - Item</li>
          <li>Expect-CT - Dictionary</li>
          <li>Host - Item</li>
          <li>Keep-Alive - Dictionary</li>
          <li>Origin - Item</li>
          <li>Pragma - Dictionary</li>
          <li>Prefer - Dictionary</li>
          <li>Preference-Applied - Dictionary</li>
          <li>Retry-After - Item</li>
          <li>Surrogate-Control - Dictionary</li>
          <li>TE - List</li>
          <li>Timing-Allow-Origin: List</li>
          <li>Trailer - List</li>
          <li>Transfer-Encoding - List</li>
          <li>Vary - List</li>
          <li>X-Content-Type-Options - Item</li>
          <li>X-Frame-Options - Item</li>
          <li>X-XSS-Protection - List</li>
        </ul>
        <t>Note the following caveats:</t>
        <dl>
          <dt>
Parameters:  </dt>
          <dd>
            <t>HTTP parameter names are case-insensitive (as per <xref section="5.6.6" sectionFormat="of" target="HTTP" format="default"/>), but Structured Fields require them to be all-lowercase. Although the vast majority of parameters seen in typical traffic are all-lowercase, compatibility can be improved by force-lowercasing parameters when encountered.</t>
          </dd>
          <dt>
Empty Field Values:  </dt>
          <dd>
            <t>Empty and whitespace-only field values are considered errors in Structured Fields. For compatible fields, an empty field indicates that the field should be silently ignored.</t>
          </dd>
          <dt>
Alt-Svc:  </dt>
          <dd>
            <t>Some ALPN tokens (e.g., <tt>h3-Q43</tt>) do not conform to key's syntax. Since the final version of HTTP/3 uses the <tt>h3</tt> token, this shouldn't be a long-term issue, although future tokens may again violate this assumption.</t>
          </dd>
          <dt>
Cache-Control, Expect-CT, Pragma, Prefer, Preference-Applied, Surrogate-Control:  </dt>
          <dd>
            <t>These Dictionary-based fields consider the key to be case-insensitive, but Structured Fields requires keys to be all-lowercase. Although the vast majority of values seen in typical traffic are all-lowercase, compatibility can be improved by force-lowercasing these Dictionary keys when encountered.</t>
          </dd>
          <dt>
Content-Length:  </dt>
          <dd>
            <t>Content-Length is defined as a List because it is not uncommon for implementations to mistakenly send multiple values. See <xref section="8.6" sectionFormat="of" target="HTTP" format="default"/> for handling requirements.</t>
          </dd>
          <dt>
Retry-After:  </dt>
          <dd>
            <t>Only the delta-seconds form of Retry-After is supported; a Retry-After value containing a http-date will need to be either converted into delta-seconds or represented as a raw value.</t>
          </dd>
        </dl>
      </section>
      <section anchor="mapped" numbered="true" toc="default">
        <name>Mapped Fields</name>
        <t>HTTP fields with the following names can have their values represented in Structured Fields by mapping them into its data types and then serialising the result using an alternative field name.</t>
        <t>For example, the Date HTTP header field carries a string representing a date:</t>
        <sourcecode type="http-message"><![CDATA[
Date: Sun, 06 Nov 1994 08:49:37 GMT
]]></sourcecode>
        <t>Its value is more efficiently represented as an integer number of delta seconds from the Unix epoch (00:00:00 UTC on 1 January 1970, minus leap seconds). Thus, the example above would be mapped as:</t>
        <sourcecode type="http-message"><![CDATA[
SF-Date: 784072177
]]></sourcecode>
        <t>As in <xref target="compatible" format="default"/>, these fields are unable to represent values that are not Structured Fields, and so an application using this specification will need to how to support such values. Typically, serialising them using the original field name is sufficient.</t>
        <t>Each field name listed below indicates a replacement field name and a means of mapping its original value into a Structured Field.</t>
        <section anchor="urls" numbered="true" toc="default">
          <name>URLs</name>
          <t>The following field names (paired with their replacement field names) have values that can be represented as Structured Fields by considering the original field's value as a string.</t>
          <ul spacing="normal">
            <li>Content-Location - SF-Content-Location</li>
            <li>Location - SF-Location</li>
            <li>Referer - SF-Referer</li>
          </ul>
          <t>For example, a Location field could be represented as:</t>
          <sourcecode type="http-message"><![CDATA[
SF-Location: "https://example.com/foo"
]]></sourcecode>
        </section>
        <section anchor="dates" numbered="true" toc="default">
          <name>Dates</name>
          <t>The following field names (paired with their replacement field names) have values that can be represented as Structured Fields by parsing their payload according to <xref target="RFC7231" format="default"/>, Section 7.1.1.1, and representing the result as an integer number of seconds delta from the Unix Epoch (00:00:00 UTC on 1 January 1970, minus leap seconds).</t>
          <ul spacing="normal">
            <li>Date - SF-Date</li>
            <li>Expires - SF-Expires</li>
            <li>If-Modified-Since - SF-IMS</li>
            <li>If-Unmodified-Since - SF-IUS</li>
            <li>Last-Modified - SF-LM</li>
          </ul>
          <t>For example, an Expires field could be represented as:</t>
          <sourcecode type="http-message"><![CDATA[
SF-Expires: 1571965240
]]></sourcecode>
        </section>
        <section anchor="etags" numbered="true" toc="default">
          <name>ETags</name>
          <t>The following field names (paired with their replacement field names) have values that can be represented as Structured Fields by representing the entity-tag as a string, and the weakness flag as a boolean "w" parameter on it, where true indicates that the entity-tag is weak; if 0 or unset, the entity-tag is strong.</t>
          <ul spacing="normal">
            <li>ETag - SF-ETag</li>
          </ul>
          <t>For example:</t>
          <sourcecode type="http-message"><![CDATA[
SF-ETag: "abcdef"; w=?1
]]></sourcecode>
          <t>If-None-Match is a list of the structure described above.</t>
          <ul spacing="normal">
            <li>If-None-Match - SF-INM</li>
          </ul>
          <t>For example:</t>
          <sourcecode type="http-message"><![CDATA[
SF-INM: "abcdef"; w=?1, "ghijkl"
]]></sourcecode>
        </section>
        <section anchor="links" numbered="true" toc="default">
          <name>Links</name>
          <t>The field-value of the Link header field <xref target="RFC8288" format="default"/> can be represented as a Structured Field by representing the URI-Reference as a string, and link-param as parameters.</t>
          <ul spacing="normal">
            <li>Link: SF-Link</li>
          </ul>
          <t>For example:</t>
          <sourcecode type="http-message"><![CDATA[
SF-Link: "/terms"; rel="copyright"; anchor="#foo"
]]></sourcecode>
        </section>
        <section anchor="cookies" numbered="true" toc="default">
          <name>Cookies</name>
          <t>The field-values of the Cookie and Set-Cookie fields <xref target="RFC6265" format="default"/> can be represented in Structured Fields as a List with parameters and a Dictionary, respectively.</t>
          <t>The serialisation is almost identical, except that the Expires parameter is always a string (as it can contain a comma), multiple cookie-strings can appear in Set-Cookie, and cookie-pairs are delimited in Cookie by a comma, rather than a semicolon.</t>
          <ul spacing="normal">
            <li>Set-Cookie: SF-Set-Cookie</li>
            <li>Cookie: SF-Cookie</li>
          </ul>
          <sourcecode type="http-message"><![CDATA[
SF-Set-Cookie: lang=en-US; expires="Wed, 09 Jun 2021 10:18:14 GMT";
               samesite=Strict
SF-Cookie: SID=31d4d96e407aad42, lang=en-US
]]></sourcecode>
          <ul spacing="normal">
            <li>ISSUE: explicitly convert Expires to an integer? <eref target="https://github.com/mnot/I-D/issues/308">https://github.com/mnot/I-D/issues/308</eref></li>
            <li>ISSUE: dictionary keys cannot contain UC alpha. <eref target="https://github.com/mnot/I-D/issues/312">https://github.com/mnot/I-D/issues/312</eref></li>
            <li>ISSUE: explicitly allow non-string content. <eref target="https://github.com/mnot/I-D/issues/313">https://github.com/mnot/I-D/issues/313</eref></li>
          </ul>
        </section>
      </section>
      <section anchor="iana-considerations" numbered="true" toc="default">
        <name>IANA Considerations</name>
        <t>IANA is asked to register the following entries in the HTTP Field Name Registry with a status of "permanent" and referring to this document:</t>
        <ul spacing="normal">
          <li>SF-Content-Location</li>
          <li>SF-Location</li>
          <li>SF-Referer</li>
          <li>SF-Date</li>
          <li>SF-Expires</li>
          <li>SF-IMS</li>
          <li>SF-IUS</li>
          <li>SF-LM</li>
          <li>SF-ETag</li>
          <li>SF-INM</li>
          <li>SF-Link</li>
          <li>SF-Set-Cookie</li>
          <li>SF-Cookie</li>
        </ul>
      </section>
    </section>
    <section anchor="security-considerations" numbered="true" toc="default">
      <name>Security Considerations</name>
      <t><xref target="compatible" format="default"/> identifies existing HTTP fields that can be parsed and serialised with the algorithms defined in <xref target="STRUCTURED-FIELDS" format="default"/>. Variances from other implementations might be exploitable, particularly if they allow an attacker to target one implementation in a chain (e.g., an intermediary). However, given the considerable variance in parsers already deployed, convergence towards a single parsing algorithm is likely to have a net security benefit in the longer term.</t>
      <t><xref target="mapped" format="default"/> defines alternative representations of existing fields. Because downstream consumers might interpret the message differently based upon whether they recognise the alternative representation, implementations are prohibited from generating such fields unless they have negotiated support for them with their peer. This specification does not define such a mechanism, but any such definition needs to consider the implications of doing so carefully.</t>
    </section>
  </middle>
  <back>
    <references>
      <name>Normative References</name>
      <reference anchor="RFC2119" target="https://www.rfc-editor.org/info/rfc2119">
        <front>
          <title>Key words for use in RFCs to Indicate Requirement Levels</title>
          <author fullname="S. Bradner" initials="S." surname="Bradner">
            <organization/>
          </author>
          <date month="March" year="1997"/>
          <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>
        <seriesInfo name="BCP" value="14"/>
        <seriesInfo name="RFC" value="2119"/>
        <seriesInfo name="DOI" value="10.17487/RFC2119"/>
      </reference>
      <reference anchor="HTTP" target="https://www.ietf.org/archive/id/draft-ietf-httpbis-semantics-19.txt">
        <front>
          <title>HTTP Semantics</title>
          <author fullname="Roy T. Fielding">
            <organization>Adobe</organization>
          </author>
          <author fullname="Mark Nottingham">
            <organization>Fastly</organization>
          </author>
          <author fullname="Julian Reschke">
            <organization>greenbytes GmbH</organization>
          </author>
          <date day="12" month="September" year="2021"/>
          <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.

   This document updates RFC 3864 and obsoletes RFC 2818, RFC 7231, RFC
   7232, RFC 7233, RFC 7235, RFC 7538, RFC 7615, RFC 7694, and portions
   of RFC 7230.

            </t>
          </abstract>
        </front>
        <seriesInfo name="Internet-Draft" value="draft-ietf-httpbis-semantics-19"/>
      </reference>
      <reference anchor="STRUCTURED-FIELDS" target="https://www.rfc-editor.org/info/rfc8941">
        <front>
          <title>Structured Field Values for HTTP</title>
          <author fullname="M. Nottingham" initials="M." surname="Nottingham">
            <organization/>
          </author>
          <author fullname="P-H. Kamp" initials="P-H." surname="Kamp">
            <organization/>
          </author>
          <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="RFC8174" target="https://www.rfc-editor.org/info/rfc8174">
        <front>
          <title>Ambiguity of Uppercase vs Lowercase in RFC 2119 Key Words</title>
          <author fullname="B. Leiba" initials="B." surname="Leiba">
            <organization/>
          </author>
          <date month="May" year="2017"/>
          <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>
        <seriesInfo name="BCP" value="14"/>
        <seriesInfo name="RFC" value="8174"/>
        <seriesInfo name="DOI" value="10.17487/RFC8174"/>
      </reference>
      <reference anchor="RFC8941" target="https://www.rfc-editor.org/info/rfc8941">
        <front>
          <title>Structured Field Values for HTTP</title>
          <author fullname="M. Nottingham" initials="M." surname="Nottingham">
            <organization/>
          </author>
          <author fullname="P-H. Kamp" initials="P-H." surname="Kamp">
            <organization/>
          </author>
          <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="RFC7231" target="https://www.rfc-editor.org/info/rfc7231">
        <front>
          <title>Hypertext Transfer Protocol (HTTP/1.1): Semantics and Content</title>
          <author fullname="R. Fielding" initials="R." role="editor" surname="Fielding">
            <organization/>
          </author>
          <author fullname="J. Reschke" initials="J." role="editor" surname="Reschke">
            <organization/>
          </author>
          <date month="June" year="2014"/>
          <abstract>
            <t>The Hypertext Transfer Protocol (HTTP) is a stateless \%application- level protocol for distributed, collaborative, hypertext information systems.  This document defines the semantics of HTTP/1.1 messages, as expressed by request methods, request header fields, response status codes, and response header fields, along with the payload of messages (metadata and body content) and mechanisms for content negotiation.</t>
          </abstract>
        </front>
        <seriesInfo name="RFC" value="7231"/>
        <seriesInfo name="DOI" value="10.17487/RFC7231"/>
      </reference>
      <reference anchor="RFC8288" target="https://www.rfc-editor.org/info/rfc8288">
        <front>
          <title>Web Linking</title>
          <author fullname="M. Nottingham" initials="M." surname="Nottingham">
            <organization/>
          </author>
          <date month="October" year="2017"/>
          <abstract>
            <t>This specification defines a model for the relationships between resources on the Web ("links") and the type of those relationships ("link relation types").</t>
            <t>It also defines the serialisation of such links in HTTP headers with the Link header field.</t>
          </abstract>
        </front>
        <seriesInfo name="RFC" value="8288"/>
        <seriesInfo name="DOI" value="10.17487/RFC8288"/>
      </reference>
      <reference anchor="RFC6265" target="https://www.rfc-editor.org/info/rfc6265">
        <front>
          <title>HTTP State Management Mechanism</title>
          <author fullname="A. Barth" initials="A." surname="Barth">
            <organization/>
          </author>
          <date month="April" year="2011"/>
          <abstract>
            <t>This document defines the HTTP Cookie and Set-Cookie header fields. These header fields can be used by HTTP servers to store state (called cookies) at HTTP user agents, letting the servers maintain a stateful session over the mostly stateless HTTP protocol.  Although cookies have many historical infelicities that degrade their security and privacy, the Cookie and Set-Cookie header fields are widely used on the Internet.  This document obsoletes RFC 2965.  [STANDARDS-TRACK]</t>
          </abstract>
        </front>
        <seriesInfo name="RFC" value="6265"/>
        <seriesInfo name="DOI" value="10.17487/RFC6265"/>
      </reference>
    </references>
    <section anchor="numbers" numbered="true" toc="default">
      <name>Data Supporting Field Compatibility</name>
      <t>To help guide decisions about compatible fields, the HTTP response headers captured by the HTTP Archive <eref target="https://httparchive.org">https://httparchive.org</eref> in September 2021 (representing more than 528,000,000 HTTP exchanges) were parsed as Structured Fields using the types listed in <xref target="compatible" format="default"/>, with the indicated number of successful header instances, failures, and the resulting failure rate:</t>
      <artwork name="" type="" align="left" alt=""><![CDATA[
accept                                 9,099 /        34 =   0.372%*
accept-encoding                      116,708 /        58 =   0.050%*
accept-language                      127,710 /        95 =   0.074%*
accept-patch                             281 /         0 =   0.000%
accept-ranges                    289,341,375 /     7,776 =   0.003%
access-control-allow-credentials  36,159,371 /     2,671 =   0.007%
access-control-allow-headers      25,980,519 /    23,181 =   0.089%
access-control-allow-methods      32,071,437 /    17,424 =   0.054%
access-control-allow-origin      165,719,859 /   130,247 =   0.079%
access-control-expose-headers     20,787,683 /     1,973 =   0.009%
access-control-max-age             9,549,494 /     9,846 =   0.103%
access-control-request-headers       165,882 /       503 =   0.302%*
access-control-request-method        346,135 /    30,680 =   8.142%*
age                              107,395,872 /    36,649 =   0.034%
allow                                579,822 /       281 =   0.048%
alt-svc                           56,773,977 / 4,914,119 =   7.966%
cache-control                    395,402,834 / 1,146,080 =   0.289%
connection                       112,017,641 /     3,491 =   0.003%
content-encoding                 225,568,224 /       237 =   0.000%
content-language                   3,339,291 /     1,744 =   0.052%
content-length                   422,415,406 /       126 =   0.000%
content-type                     503,950,894 /   507,133 =   0.101%
cross-origin-resource-policy     102,483,430 /       799 =   0.001%
expect                                     0 /        53 = 100.000%*
expect-ct                         54,129,244 /    80,333 =   0.148%
host                                  57,134 /     1,486 =   2.535%*
keep-alive                        50,606,877 /     1,509 =   0.003%
origin                                32,438 /     1,396 =   4.126%*
pragma                            66,321,848 /    97,328 =   0.147%
preference-applied                       189 /         0 =   0.000%
referrer-policy                   14,274,787 /     8,091 =   0.057%
retry-after                          523,533 /     7,585 =   1.428%
surrogate-control                    282,846 /       976 =   0.344%
te                                         1 /         0 =   0.000%
timing-allow-origin               91,979,983 /         8 =   0.000%
trailer                                1,171 /         0 =   0.000%
transfer-encoding                 15,098,518 /         0 =   0.000%
vary                             246,483,644 /    69,607 =   0.028%
x-content-type-options           166,063,072 /   237,255 =   0.143%
x-frame-options                   56,863,322 / 1,014,464 =   1.753%
x-xss-protection                 132,739,109 /   347,133 =   0.261%
]]></artwork>
      <t>Note that this data set only includes response headers, although some request headers are present, indicated with an asterisk (because, the Web). Also, Dictionary and Parameter keys have not been force-lowercased, with the result that any values containing uppercase keys are considered to fail.</t>
      <t>The top thirty header fields in that data set that were not considered compatible are (* indicates that the field is mapped in <xref target="mapped" format="default"/>):</t>
      <ul spacing="normal">
        <li>*date: 524,810,577</li>
        <li>server: 470,777,294</li>
        <li>*last-modified: 383,437,099</li>
        <li>*expires: 292,109,781</li>
        <li>*etag: 255,788,799</li>
        <li>strict-transport-security: 111,993,787</li>
        <li>x-cache: 70,713,258</li>
        <li>via: 55,983,914</li>
        <li>cf-ray: 54,556,881</li>
        <li>p3p: 54,479,183</li>
        <li>report-to: 54,056,804</li>
        <li>cf-cache-status: 53,536,789</li>
        <li>nel: 44,815,769</li>
        <li>x-powered-by: 37,281,354</li>
        <li>content-security-policy-report-only: 33,104,387</li>
        <li>*location: 30,533,957</li>
        <li>x-amz-cf-pop: 28,549,182</li>
        <li>x-amz-cf-id: 28,444,359</li>
        <li>content-security-policy: 25,404,401</li>
        <li>x-served-by: 23,277,252</li>
        <li>x-cache-hits: 21,842,899</li>
        <li>*link: 20,761,372</li>
        <li>x-timer: 18,780,130</li>
        <li>content-disposition: 18,516,671</li>
        <li>x-request-id: 16,048,668</li>
        <li>referrer-policy: 15,596,734</li>
        <li>x-cdn: 10,153,756</li>
        <li>x-amz-version-id: 9,786,024</li>
        <li>x-amz-request-id: 9,680,689</li>
        <li>x-dc: 9,557,728</li>
      </ul>
    </section>
  </back>
  <!-- ##markdown-source:
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
G1PagH+ak/MZjfQR4gz9Ued/AHcAFiqAQQAA

-->

</rfc>
