<?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 sortrefs="yes"?>
<?rfc symrefs="yes"?>
<rfc xmlns:xi="http://www.w3.org/2001/XInclude" ipr="trust200902" docName="draft-bishop-httpbis-distributed-origin-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 abbrev="Distributed HTTP Origins">Distributed HTTP Origins: Solution Space Exploration</title>
    <seriesInfo name="Internet-Draft" value="draft-bishop-httpbis-distributed-origin-00"/>
    <author initials="M." surname="Bishop" fullname="Mike Bishop">
      <organization>Akamai Technologies</organization>
      <address>
        <email>mbishop@evequefou.be</email>
      </address>
    </author>
    <date year="2021" month="October" day="04"/>
    <area>General</area>
    <workgroup>HTTP Working Group</workgroup>
    <keyword>Internet-Draft</keyword>
    <abstract>
      <t>Certain content libraries are logically a single origin, but too large to be
practically served by a single origin server. This document discusses existing
solutions and explores possible directions for future protocol development.</t>
    </abstract>
    <note removeInRFC="true">
      <name>Discussion Venues</name>
      <t>Discussion of this document takes place on the
    mailing list (httpbis@ietf.org),
  which is archived at <eref target="https://mailarchive.ietf.org/arch/browse/httpbis/"/>.</t>
      <t>Source for this draft and an issue tracker can be found at
  <eref target="https://github.com/MikeBishop/alt-svc-bis"/>.</t>
    </note>
  </front>
  <middle>
    <section anchor="introduction" numbered="true" toc="default">
      <name>Introduction</name>
      <t>With increasingly large content deployments, certain origins become too large to
contain all the data which is logically connected on the same server. A similar
issue exists on CDNs, where an origin being served through a reverse-proxy
contains too many large resources for a single instance to cache effectively.</t>
      <t>Examples of this abound in the real world -- consider the video libraries of
Netflix or YouTube, the photo library of Facebook, or the software library of
any large software publisher which must make available multiple full and patch
versions of multiple editions of multiple software products.</t>
      <t>While there are existing ways to address this problem, they are suboptimal in
various ways.  This document discusses existing approaches (<xref target="existing" format="default"/>),
previous standards efforts which may provide solutions (<xref target="previous" format="default"/>), and
possible directions for future development (<xref target="proposals" format="default"/>).</t>
      <section anchor="conventions-and-definitions" numbered="true" toc="default">
        <name>Conventions and Definitions</name>
        <t>The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", "SHOULD",
"SHOULD NOT", "RECOMMENDED", "NOT RECOMMENDED", "MAY", and "OPTIONAL" in this
document are to be interpreted as described in BCP 14 <xref target="RFC2119" format="default"/> <xref target="RFC8174" format="default"/>
when, and only when, they appear in all capitals, as shown here.</t>
      </section>
    </section>
    <section anchor="existing" numbered="true" toc="default">
      <name>Existing Solutions</name>
      <t>In the real world, the origin users initially visit in a browser is typically one that a
human can remember and type.  This user-facing origin serves HTML that references
content, which may be on other origins.  A similar approach exists in non-browser cases,
where a user-locatable front-end indicates the actual location of the desired content.</t>
      <section anchor="content-specific-hostnames" numbered="true" toc="default">
        <name>Content-Specific Hostnames</name>
        <t>One solution, visible in multiple services, uses granular hostnames to identify
the server or servers with the particular content in question, such as
<tt>r2---sn-jpocxaa-j8bl.googlevideo.com</tt>. This hostname, with its own HTTP origin,
controls a particular slice of the media available on YouTube.com.  The YouTube
service indicates to a player loading a video which origin contains or caches
the requested content.</t>
        <t>Note that there are several ways of providing these hostnames to clients, depending
on the interaction model between the client and the server.  For example:</t>
        <ul spacing="normal">
          <li>The server might generate HTML or JSON content in response to an initial request,
providing absolute URIs for each dependent resource which indicate the specific
host from which the resource can be retrieved</li>
          <li>The server might return a 3XX (Redirect) response to a client's query for a
resource, directing the client to the resource at a different hostname</li>
          <li>An API might enable a client to query for the location of a resource before
requesting it</li>
        </ul>
        <t>One drawback of this approach is that the content belongs to a different origin
than the primary origin of the page.  While this is less of an issue in APIs or
bulk data transfer, this limits the types of requests that can be made and the
access to the data from scripts loaded by the primary origin without first
making CORS preflight requests <xref target="CORS" format="default"/>, which introduce additional latency.</t>
        <t>This approach can also complicate certain protocol features which rely on previous
contact with the server.  The primary server typically cannot provide Alt-Svc
entries for the secondary, though the targeting of the specific hostname may
avoid the need for Alt-Svc.  TLS session resumption and 0-RTT will typically
not be usable, adding latency to the request.</t>
      </section>
      <section anchor="internal-load-balancing" numbered="true" toc="default">
        <name>Internal Load-Balancing</name>
        <t>A second solution, which is generally not visible to the client, is to have all
requests terminated by a front-end which does not cache or serve any content directly.
Rather, this front-end is responsible for inspecting the request, identifying the
server which can actually respond, and forwarding the request to that server.</t>
        <t>This solution has its own challenges.  While the data access and storage
requirements can be distributed amongst back-end machines, throughput on the
front-end load balancer becomes a bottleneck.  For certain protocols, direct
server return (DSR) avoids this bottleneck by sending response packets back to
the client instead of sending them via the load balancer. However, DSR is
challenging with reliable and encrypted protocols, and even moreso with
multiplexed protocols like HTTP/2 or HTTP/3.</t>
      </section>
    </section>
    <section anchor="previous" numbered="true" toc="default">
      <name>Previous Standards Efforts</name>
      <t>Several previous drafts in the IETF have offered partial solutions for
this problem, but have not been published as RFCs or achieved widespread adoption.</t>
      <section anchor="out-of-band-encoding" numbered="true" toc="default">
        <name>Out-of-Band Encoding</name>
        <t><xref target="OOB" format="default"/> describes an HTTP content coding that can
be used to describe the location of a secondary resource that contains the
payload.  The origin returns an HTTP field set which describes the content,
including a Content-Encoding header which indicates the content can be fetched
from a different URL, typically hosted on a different origin server.</t>
        <t>This approach is similar in spirit to Content-Specific Hostnames as described in
<xref target="content-specific-hostnames" format="default"/>, except that the resources continue to belong to
a single origin regardless of which origin server actually delivers the bytes.
Unlike Content-Specific Hostnames, however, a separate request must be made for
each resource -- first to the origin server to receive the headers, then to the
secondary server to retrieve the content of the response.</t>
        <section anchor="resource-map" numbered="true" toc="default">
          <name>Resource Map</name>
          <t><xref target="SCD" format="default"/> references a possible extension to this idea, where
the origin server would indicate to a client that a particular set of resources
would all be available from a particular secondary server.  However, the specifics
of this interaction were not identified in that draft.</t>
          <t>One drawback to this approach is that an origin might prefer not to distribute
the full set of endpoints or resources, either because this information is
considered proprietary or because the set itself is large enough to be
prohibitive.</t>
        </section>
      </section>
      <section anchor="alternative-services" numbered="true" toc="default">
        <name>Alternative Services</name>
        <t><xref target="AltSvc" format="default"/> describes a way in which an origin server can delegate authority
over the origin to another host which might be preferable in some way.  However,
this mechanism delegates the entire origin and cannot be subdivided.</t>
        <t>A 421 response being used to work around this dramatically reduces efficiency,
as the client has no insight into which paths the alternative might or might not
support.</t>
      </section>
    </section>
    <section anchor="proposals" numbered="true" toc="default">
      <name>Possible Future Directions</name>
      <t>Any new solution should fit within the following constraints:</t>
      <ul spacing="normal">
        <li>No new feature to address this scenario can expect to entirely replace the
existing approaches given client upgrade and hardware replacement schedules,
so the solution needs to be easily layered on top of current approaches.  This
likely implies a client-advertised extension.</li>
        <li>Unlike Alt-Svc (<xref target="AltSvc" format="default"/>), the solution should permit
delegation of portions of the origin's URI space to one or more secondary servers.</li>
        <li>Unlike resource maps (<xref target="resource-map" format="default"/>), the solution should permit
incremental new information about secondary server(s) and delegated ranges of
resources.</li>
      </ul>
      <t>This section describes one possible solution in this vein, based on HTTP
Alternative Services <xref target="AltSvc" format="default"/>.  The components of this solution might
be generally useful and incorporated into various specifications,
or might be tightly coupled and belong in a single specification.</t>
      <t>Other solutions within these constraints should also be considered.</t>
      <section anchor="scope-restricted-alt-svc-entries" numbered="true" toc="default">
        <name>Scope-Restricted Alt-Svc Entries</name>
        <t>When an alternative service is advertised by an origin, by default the indicated
server is authoritative for all resources in the origin.  The <tt>scope</tt> parameter
can be used to adjust this scope.</t>
        <t>The <tt>scope</tt> parameter contains the path portion of a URI; see <xref section="3.3" sectionFormat="of" target="RFC3986" format="default"/>.  The indicated alternative is authoritative only for resources where
the path begins with the indicated prefix.</t>
        <sourcecode type="abnf"><![CDATA[
scope = DQUOTE path DQUOTE ; see [RFC3986], Section 3.3
]]></sourcecode>
        <t>For example:</t>
        <sourcecode type="http-message"><![CDATA[
Alt-Svc: h2=":443"; ma=3600; scope="/sn-jpocxaa-j8bl/",
         h2=":443"; ma=3600; scope="/sn-5ualdn7s"
]]></sourcecode>
        <t>A scope-restricted alternative SHOULD NOT be sent requests for resources unless
the <tt>path</tt> portion of the URI is a prefix match with the indicated scope.</t>
        <t><xref target="AltSvc" format="default"/> indicates that parameters are optional to understand.  Therefore,
origin servers SHOULD NOT send an alternative service advertisement to a client
which has not indicated support for this extension (<xref target="altsvc-params" format="default"/>).
Alternatives MUST be prepared to receive requests for any resource in the
origin.  However, the alternative MAY respond with a 421 (Misdirected Request)
to any request it is unable to serve.</t>
      </section>
      <section anchor="altsvc-params" numbered="true" toc="default">
        <name>Indicating Support for Alt-Svc Parameters</name>
        <t>Certain origins might prefer to take different actions based on whether the
client supports HTTP Alternative Services or not.  For example, many clients
are unable to implement the <tt>persist</tt> parameter defined in <xref target="AltSvc" format="default"/>. Servers
that offer alternatives based on the client's current network connection might
choose not to send Alt-Svc entries to such a client.</t>
        <t>The client can optionally send an <tt>Accept-Alt-Svc</tt> request header field
indicating which Alt-Svc parameters it is able to understand.  The content of
this field is an <tt>sf-list</tt> <xref target="RFC8941" format="default"/> of Alt-Svc parameter names.  To reduce
fingerprinting surface, the contents of the list SHOULD be sorted
alphabetically.</t>
        <t>For example:</t>
        <artwork name="" type="" align="left" alt=""><![CDATA[
Accept-Alt-Svc: host, ma, persist, scope
]]></artwork>
        <t>A server MAY publish alternative services containing parameters which are not
understood by the client, since unknown parameters are ignored per <xref target="AltSvc" format="default"/>.</t>
        <t>While <xref target="AltSvc" format="default"/> enables an alternative to reside on a different host than the
origin server, not all clients implement this behavior.  This draft registers
the "host" parameter for Alt-Svc to enable clients to indicate support for
Alt-Svc entries which provide a different hostname from the origin.  The
"host" parameter MUST NOT be used in Alt-Svc field generation and MUST be
ignored if present.</t>
        <t>The presence of this header can be assumed to indicate support for Alt-Svc, even
if empty.</t>
      </section>
      <section anchor="incremental-alt-svc-advertisements" numbered="true" toc="default">
        <name>Incremental Alt-Svc Advertisements</name>
        <t><xref target="AltSvc" format="default"/> says that when an Alt-Svc response header field is received from an
origin, its value invalidates and replaces all cached alternative services for
that origin.</t>
        <t>In certain circumstances, a server might prefer not to publish the full list of
alternatives, but instead incrementally add to them.  For example, a server
might provide scope-restricted alternatives as a client makes requests for
resources in various scopes.</t>
        <t>This draft defines the <tt>Additional-Alt-Svc</tt> header field.  The parsing and
semantics of this field are identical to that of <tt>Alt-Svc</tt>, with the following
modifications:</t>
        <ul spacing="normal">
          <li>The value MUST NOT be "clear"</li>
          <li>The entries presented augment, rather than replace, any cached alternatives
already known to the client.</li>
        </ul>
      </section>
      <section anchor="the-3nn-use-alternative-status-code" numbered="true" toc="default">
        <name>The 3NN (Use Alternative) Status Code</name>
        <t>This document defines a new status code directing that a client attempt to
satisfy the request from an alternative.</t>
        <t>A server MUST include an <tt>Alt-Svc</tt> or <tt>Additional-Alt-Svc</tt> header field in the
response indicating which alternative(s) the client can use to satisfy the given
request.  A server MUST NOT send the 3NN status code in response to a request
which did not contain the <tt>Accept-Alt-Svc</tt> header field.</t>
        <t>Upon receipt of this status code, a client SHOULD choose an alternative service
and retry the request with that alternative.  If all configured alternatives
are unsuccessful, or the client chooses not to use an alternative, the client
MAY retry the request with the origin server, omitting the <tt>Accept-Alt-Svc</tt> header
field.</t>
      </section>
    </section>
    <section anchor="security-considerations" numbered="true" toc="default">
      <name>Security Considerations</name>
      <t>TODO Security</t>
    </section>
    <section anchor="iana-considerations" numbered="true" toc="default">
      <name>IANA Considerations</name>
      <t>Lots of stuff to register later.</t>
    </section>
  </middle>
  <back>
    <references>
      <name>References</name>
      <references>
        <name>Normative References</name>
        <reference anchor="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="RFC3986">
          <front>
            <title>Uniform Resource Identifier (URI): Generic Syntax</title>
            <author fullname="T. Berners-Lee" initials="T." surname="Berners-Lee">
              <organization/>
            </author>
            <author fullname="R. Fielding" initials="R." surname="Fielding">
              <organization/>
            </author>
            <author fullname="L. Masinter" initials="L." surname="Masinter">
              <organization/>
            </author>
            <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="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">
          <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>
      </references>
      <references>
        <name>Informative References</name>
        <reference anchor="CORS" target="https://developer.mozilla.org/en-US/docs/Web/HTTP/CORS">
          <front>
            <title>Cross-Origin Resource Sharing (CORS)</title>
            <author>
              <organization/>
            </author>
            <date>n.d.</date>
          </front>
        </reference>
        <reference anchor="OOB">
          <front>
            <title>'Out-Of-Band' Content Coding for HTTP</title>
            <author fullname="Julian F. Reschke">
              <organization>greenbytes GmbH</organization>
            </author>
            <author fullname="Salvatore Loreto">
              <organization>Ericsson</organization>
            </author>
            <date day="24" month="June" year="2017"/>
            <abstract>
              <t>   This document describes an Hypertext Transfer Protocol (HTTP) content
   coding that can be used to describe the location of a secondary
   resource that contains the payload.

              </t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-reschke-http-oob-encoding-12"/>
        </reference>
        <reference anchor="SCD">
          <front>
            <title>An Architecture for Secure Content Delegation using HTTP</title>
            <author fullname="Martin Thomson">
	 </author>
            <author fullname="Göran AP Eriksson">
	 </author>
            <author fullname="Christer Holmberg">
	 </author>
            <date day="30" month="October" year="2016"/>
            <abstract>
              <t>   An architecture is described for content distribution using a
   secondary server that might be operated with reduced privileges.
   This architecture allows a primary server to delegate the
   responsibility for delivery of the payload of an HTTP response to a
   secondary server.  The secondary server is unable to modify this
   content.  The content is encrypted, which in some cases will prevent
   the secondary server from learning about the content.

              </t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-thomson-http-scd-02"/>
        </reference>
        <reference anchor="AltSvc">
          <front>
            <title>HTTP Alternative Services</title>
            <author fullname="M. Nottingham" initials="M." surname="Nottingham">
              <organization/>
            </author>
            <author fullname="P. McManus" initials="P." surname="McManus">
              <organization/>
            </author>
            <author fullname="J. Reschke" initials="J." surname="Reschke">
              <organization/>
            </author>
            <date month="April" year="2016"/>
            <abstract>
              <t>This document specifies "Alternative Services" for HTTP, which allow an origin's resources to be authoritatively available at a separate network location, possibly accessed with a different protocol configuration.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="7838"/>
          <seriesInfo name="DOI" value="10.17487/RFC7838"/>
        </reference>
      </references>
    </references>
    <section numbered="false" anchor="acknowledgments" toc="default">
      <name>Acknowledgments</name>
      <t>TODO acknowledge.</t>
    </section>
  </back>
  <!-- ##markdown-source:
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
xqXN+CXC4v8BWHuuhpcxAAA=

-->

</rfc>
