<?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.17 (Ruby 3.3.1) -->
<?rfc tocindent="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-availability-hints-01" category="std" consensus="true" tocInclude="true" sortRefs="true" symRefs="true" version="3">
  <!-- xml2rfc v2v3 conversion 3.21.0 -->
  <front>
    <title>HTTP Availability Hints</title>
    <seriesInfo name="Internet-Draft" value="draft-nottingham-http-availability-hints-01"/>
    <author initials="M." surname="Nottingham" fullname="Mark Nottingham">
      <organization/>
      <address>
        <postal>
          <postalLine>Prahran</postalLine>
          <postalLine>Australia</postalLine>
        </postal>
        <email>mnot@mnot.net</email>
        <uri>https://www.mnot.net/</uri>
      </address>
    </author>
    <date/>
    <keyword>Internet-Draft</keyword>
    <abstract>
      <?line 38?>

<t>This specification defines availability hints, a new class of HTTP responses headers that augment the information in the Vary header field.</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-nottingham-http-availability-hints/"/>.
      </t>
      <t>
         information can be found at <eref target="https://mnot.github.io/I-D/"/>.
      </t>
      <t>Source for this draft and an issue tracker can be found at
        <eref target="https://github.com/mnot/I-D/labels/availability-hints"/>.</t>
    </note>
  </front>
  <middle>
    <?line 42?>

<section anchor="introduction">
      <name>Introduction</name>
      <t>The HTTP Vary header field (<xref section="12.5.5" sectionFormat="of" target="HTTP"/>) allows an origin server to describe what aspects of requests affect the content of its responses. This information is useful in many ways: most prominently, downstream caches can use it to select the correct stored response for a given request (<xref section="4.1" sectionFormat="of" target="HTTP-CACHING"/>).</t>
      <t>However, the information conveyed by Vary is limited. If the request headers enumerated in it are considered as a n-dimensional space with each field representing an axis, this response header:</t>
      <sourcecode type="http-message"><![CDATA[
Vary: Accept-Encoding, Accept-Language, ECT
]]></sourcecode>
      <t>indicates that there is a three-dimensional space of potential responses that could be sent. However, nothing more is conveyed; the number and nature of the entries on each axis are not available, leaving caches and other downstream consumers none the wiser as to how broad this space is, or how to navigate it.</t>
      <t>This design makes using Vary difficult. A cache doesn't have enough information available to decide whether one of its stored responses is the best to satisfy a given request in all but the most simple circumstances.</t>
      <t>For example, if a request indicates that the client prefers responses in the French language, but will also accept English, and the cache has a stored English response, what is the appropriate action? Should it serve the English response, or should it make a request to the server for a French response and hope that one might be available -- adding significant latency if it is not?</t>
      <t>This specification defines a new type of HTTP header field -- an <em>availability hint</em> -- that augments the information on a single axis of content negotiation, by describing the selection of responses that a server has available along that axis. So, our example above could have three availability hints added to it:</t>
      <sourcecode type="http-message"><![CDATA[
Vary: Accept-Encoding, Accept-Language, ECT
Avail-Encoding: gzip, br
Avail-Language: fr, en;d
Avail-ECT: ("slow-2g" "2g" "3g"), ("4g");d
]]></sourcecode>
      <t>This says that there are two encodings available -- gzip and brotli -- beyond the mandatory "identity" encoding; that both French and English are available, but English is the default; and that there are two different representations available depending on the Effective Connection Type that the client advertises, with "4g" being the default. (note that because it it not yet standardised, this specification does not define the Avail-ECT header field; it is only used as an example above).</t>
      <t>Caches and other clients can use this information to determine when a request can be satisfied by a stored response, and what other options might be available. Using the example above, we can know that the response to a request an ECT of "2g" can also be used for a request with "3g".</t>
      <t>Availability hints have some limitations. While a server's preferences along a single axis of negotiation can be conveyed by the corresponding availability hint, its relative preferences between multiple axes are not. In the example above, it isn't possible to know whether the server prefers that downstream caches and clients use the brotli-encoded French version over the gzip-encoded English version.</t>
      <t>Likewise, it is't possible to convey "holes" in the dimensional space described by Vary. For example, a gzip-encoded French response may not be available from the server. This specification does not attempt to address this shortcoming.</t>
      <t>Availability hints do not specify exactly how caches should behave in all circumstances. Because they operate as an optimisation, they often have different behaviours based upon the specific requirements of their deployment. Availability hints are designed to better inform their operation, not constrain it.</t>
      <t>Finally, availability hints need to be defined for each axis of content negotiation in use, and the recipient (such as a cache) needs to understand that type of availability hint. If either condition is not true, that axis of negotiation will fall back to the behaviour specified by Vary.</t>
      <t><xref target="define"/> describes how availability hints are defined. <xref target="process"/> specifies how availability hints are processed, with respect to the Vary header field. <xref target="definitions"/> defines a number of availability hints for existing HTTP content negotiation mechanisms.</t>
      <section anchor="notational-conventions">
        <name>Notational Conventions</name>
        <t>The key words "<bcp14>MUST</bcp14>", "<bcp14>MUST NOT</bcp14>", "<bcp14>REQUIRED</bcp14>", "<bcp14>SHALL</bcp14>", "<bcp14>SHALL
NOT</bcp14>", "<bcp14>SHOULD</bcp14>", "<bcp14>SHOULD NOT</bcp14>", "<bcp14>RECOMMENDED</bcp14>", "<bcp14>NOT RECOMMENDED</bcp14>",
"<bcp14>MAY</bcp14>", and "<bcp14>OPTIONAL</bcp14>" in this document are to be interpreted as
described in BCP 14 <xref target="RFC2119"/> <xref target="RFC8174"/> when, and only when, they
appear in all capitals, as shown here.</t>
        <?line -18?>

</section>
    </section>
    <section anchor="define">
      <name>Defining Availability Hints</name>
      <t>An availability hint applies to a single axis of HTTP proactive content negotiation; for example, that enabled by the <tt>Accept-Encoding</tt> request header field.</t>
      <t>A specification for an availability hint needs to convey the following information:</t>
      <ol spacing="normal" type="1"><li>
          <t>The definition of a response header field that describes the available responses along that axis of content negotiation. By convention, these header fields typically begin with "Avail-".</t>
        </li>
        <li>
          <t>An algorithm or guidelines for using that information to determine whether a stored response can be selected for a presented request (per <xref section="4.1" sectionFormat="of" target="HTTP-CACHING"/>).</t>
        </li>
      </ol>
      <t>The response header field should be defined as a Structured Field <xref target="STRUCTURED-FIELDS"/>.</t>
      <t>It is recommended that the selection algorithm operate solely using information in the stored responses and presented request, if possible. If the selection algorithm can return multiple available responses, they should indicate an order of preference.</t>
      <t>Either the response header field or the algorithm should indicate which of the available responses is the default -- i.e., which is used if none match.</t>
    </section>
    <section anchor="process">
      <name>Calculating Cache Keys with Availability Hints</name>
      <t>When a cache is presented with a response that has both a Vary header field and one or more availability hints, this specification augments the process defined in <xref section="4.1" sectionFormat="of" target="HTTP-CACHING"/>.</t>
      <t>While Vary processing is defined in terms of whether the header fields from two requests match, availability hints invoke a different processing model. When they are present, the set of stored responses that can be used to satisfy a presented request is found by following these steps:</t>
      <ol spacing="normal" type="1"><li>
          <t>Determine the Vary header field and availability hints present for the requested URL. They <bcp14>SHOULD</bcp14> be obtained from the most recently obtained response for that URL (per <xref section="4" sectionFormat="of" target="HTTP-CACHING"/>, but without applying the Vary header field per <xref section="4.1" sectionFormat="of" target="HTTP-CACHING"/>), although they <bcp14>MAY</bcp14> be obtained from any response allowed to be used for that URL.</t>
        </li>
        <li>
          <t>For each content negotiation axis in the Vary header field, determine which stored responses can be selected by running the corresponding selection algorithm, as defined by the associated availability hint.
          </t>
          <ol spacing="normal" type="1"><li>
              <t>If an axis of content negotiation is not recognised or implemented by the cache, fall back to selecting available responses for that axis using the rules described in <xref section="4.1" sectionFormat="of" target="HTTP-CACHING"/>.</t>
            </li>
          </ol>
        </li>
        <li>
          <t>Return the intersection of the results of (2).</t>
        </li>
      </ol>
      <t>This specification does not define how to select the most appropriate response when more than one is returned, but it is <bcp14>RECOMMENDED</bcp14> that client preferences be observed when expressed.</t>
      <t>If a received availability hint does not conform to the data structure defined in its specification (for example, a Structured Fields List of Strings is anticipated, but one item in the List is an Integer), that field <bcp14>SHOULD</bcp14> be ignored (with the implication that processing for that axis of content negotiation will fall back to Vary behavior). Note that unrecognised Parameters on Structured Fields are ignored and therefore do not trigger this fallback, unless explicitly specified otherwise.</t>
    </section>
    <section anchor="definitions">
      <name>Availability Hint Definitions</name>
      <t>The following subsections define availability hints for a selection of existing content negotiation mechanisms.</t>
      <section anchor="avail-encoding">
        <name>Content Encoding</name>
        <t>The Avail-Encoding response header field is the availability hint for content negotiation using the Accept-Encoding request header field defined in <xref section="12.5.3" sectionFormat="of" target="HTTP"/>. For example:</t>
        <sourcecode type="http-message"><![CDATA[
Vary: Accept-Encoding
Avail-Encoding: gzip, br
]]></sourcecode>
        <t>Avail-Encoding is a Structured Field, whose value is a List (<xref section="3.1" sectionFormat="of" target="STRUCTURED-FIELDS"/>) of Tokens (<xref section="3.3.4" sectionFormat="of" target="STRUCTURED-FIELDS"/>). Each list item indicates a content-coding that is available for the resource. Additionally, the "identity" encoding is always considered to be available, and is the default encoding.</t>
        <t>The selection algorithm for this axis of content negotiation is described in <xref section="12.5.3" sectionFormat="of" target="HTTP"/>.</t>
      </section>
      <section anchor="avail-format">
        <name>Content Format</name>
        <t>The Avail-Format response header field is the availability hint for content negotiation using the Accept request header field defined in <xref section="12.5.1" sectionFormat="of" target="HTTP"/>. For example:</t>
        <sourcecode type="http-message"><![CDATA[
Vary: Accept
Avail-Format: image/png, image/gif;d
]]></sourcecode>
        <t>Avail-Format is a Structured Field, whose value is a List (<xref section="3.1" sectionFormat="of" target="STRUCTURED-FIELDS"/>) of Tokens (<xref section="3.3.4" sectionFormat="of" target="STRUCTURED-FIELDS"/>). Each list item indicates a media type ("type/subtype") that is available for the resource.</t>
        <t>A single member of the List <bcp14>MAY</bcp14> have the "d" parameter, which indicates that member is the default format.</t>
        <t>The selection algorithm for this axis of content negotiation is described in <xref section="12.5.1" sectionFormat="of" target="HTTP"/>.</t>
      </section>
      <section anchor="avail-language">
        <name>Content Language</name>
        <t>The Avail-Language response header field is the availability hint for content negotiation using the Accept-Language request header field defined in <xref section="12.5.4" sectionFormat="of" target="HTTP"/>. For example:</t>
        <sourcecode type="http-message"><![CDATA[
Vary: Accept-Language
Avail-Language: en-uk, en-us;d, fr, de
]]></sourcecode>
        <t>Avail-Format is a Structured Field, whose value is a List (<xref section="3.1" sectionFormat="of" target="STRUCTURED-FIELDS"/>) of Tokens (<xref section="3.3.4" sectionFormat="of" target="STRUCTURED-FIELDS"/>). Each list item indicates a language tag that is available for the resource.</t>
        <t>A single member of the List <bcp14>MAY</bcp14> have the "d" parameter, which indicates that member is the default language.</t>
        <t>The selection algorithm for this axis of content negotiation is described in <xref section="12.5.4" sectionFormat="of" target="HTTP"/>.</t>
      </section>
      <section anchor="cookie-indices">
        <name>Cookie</name>
        <t>The Cookie-Indices response header field is the availability hint for content negotiation using the Cookie request header field defined in <xref target="RFC6265"/>. For example:</t>
        <sourcecode type="http-message"><![CDATA[
Vary: Cookie
Cookie-Indices: "id", "sid"
]]></sourcecode>
        <t>Cookie-Indices is a Structured Field, whose value is a List (<xref section="3.1" sectionFormat="of" target="STRUCTURED-FIELDS"/>) of Strings (<xref section="3.3.3" sectionFormat="of" target="STRUCTURED-FIELDS"/>). Each list item indicates a cookie name whose value is to be considered when selecting responses. Unlisted cookies are, by implication, ignored for that purpose.</t>
        <t>The selection algorithm for Cookie-Indices, given a set of stored_responses a presented_request, and the value of Cookie-Indices:</t>
        <ol spacing="normal" type="1"><li>
            <t>Let available_responses be an empty set.</t>
          </li>
          <li>
            <t>For each stored_response in stored_responses:
            </t>
            <ol spacing="normal" type="1"><li>
                <t>For each cookie_index in Cookie-Indices:
                </t>
                <ol spacing="normal" type="1"><li>
                    <t>Let presented_values be a list of the values of the cookies with the name cookie_index in presented_request, lexicographically sorted. If no cookie with the name cookie_index is present in presented_request, let presented_values be an empty list.</t>
                  </li>
                  <li>
                    <t>Let stored_values be a list of the values of the cookies with the name cookie_index in stored_response, lexicographically sorted. If no cookie with the name cookie_index is present in stored_response, let stored_values be an empty list.</t>
                  </li>
                  <li>
                    <t>If presented_values does not equal stored_values, continue to the next stored_response.</t>
                  </li>
                </ol>
              </li>
              <li>
                <t>Add stored_response to available_responses.</t>
              </li>
            </ol>
          </li>
          <li>
            <t>Return available_responses.</t>
          </li>
        </ol>
        <t>Note that this algorithm requires storing the cookies from the associated request with each response.</t>
      </section>
    </section>
    <section anchor="iana-considerations">
      <name>IANA Considerations</name>
      <t>IANA is asked to update the "Hypertext Transfer Protocol (HTTP) Field Name Registry" registry
according as follows:</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">Avail-Encoding</td>
            <td align="left">permanent</td>
            <td align="left">
              <xref target="avail-encoding"/></td>
          </tr>
          <tr>
            <td align="left">Avail-Format</td>
            <td align="left">permanent</td>
            <td align="left">
              <xref target="avail-format"/></td>
          </tr>
          <tr>
            <td align="left">Avail-Language</td>
            <td align="left">permanent</td>
            <td align="left">
              <xref target="avail-language"/></td>
          </tr>
          <tr>
            <td align="left">Cookie-Indices</td>
            <td align="left">permanent</td>
            <td align="left">
              <xref target="cookie-indices"/></td>
          </tr>
        </tbody>
      </table>
    </section>
    <section anchor="security-considerations">
      <name>Security Considerations</name>
      <t>Availability hints reveal information about the state of the server, and therefore could help an attacker understand better how to bypass defenses. For example, Cookie-Indices reveals information about what cookies might affect the content of responses.</t>
      <t>Recipients of availability hints should not assume that the information within them are complete or correct.</t>
    </section>
  </middle>
  <back>
    <references>
      <name>References</name>
      <references anchor="sec-normative-references">
        <name>Normative References</name>
        <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>
        <reference anchor="HTTP-CACHING">
          <front>
            <title>HTTP Caching</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 defines HTTP caches and the associated header fields that control cache behavior or indicate cacheable response messages.</t>
              <t>This document obsoletes RFC 7234.</t>
            </abstract>
          </front>
          <seriesInfo name="STD" value="98"/>
          <seriesInfo name="RFC" value="9111"/>
          <seriesInfo name="DOI" value="10.17487/RFC9111"/>
        </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="RFC2119">
          <front>
            <title>Key words for use in RFCs to Indicate Requirement Levels</title>
            <author fullname="S. Bradner" initials="S." surname="Bradner"/>
            <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="RFC8174">
          <front>
            <title>Ambiguity of Uppercase vs Lowercase in RFC 2119 Key Words</title>
            <author fullname="B. Leiba" initials="B." surname="Leiba"/>
            <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>
      </references>
      <references anchor="sec-informative-references">
        <name>Informative References</name>
        <reference anchor="RFC6265">
          <front>
            <title>HTTP State Management Mechanism</title>
            <author fullname="A. Barth" initials="A." surname="Barth"/>
            <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>
    </references>
  </back>
  <!-- ##markdown-source:
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

-->

</rfc>
