<?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.39 (Ruby 3.4.9) -->
<rfc xmlns:xi="http://www.w3.org/2001/XInclude" ipr="trust200902" docName="draft-thomson-ptth-potato-02" category="std" consensus="true" submissionType="IETF" tocInclude="true" sortRefs="true" symRefs="true" version="3">
  <!-- xml2rfc v2v3 conversion 3.34.0 -->
  <front>
    <title abbrev="🥔">🥔 (‮P̷̙̩̩̖̦̦̮̲͖͗̅͋̇̊o̷̢͚̼͎͉̙̩̻̱̊̂̽̀̅̚͟͡t̴̤̖̞͖̰̐̇̋̍̑̓̏̕͝ȁ̷̩̹͎͖̮͚͋͑̏̀̓̂͡͞ͅt̗̹̩̭͈̳̫͈͈̒͆̃̿̚͝͠o͖͓͈̩̻̤͎͐̐͐̅̂́͟‬) - HTTP, Inverted</title>
    <seriesInfo name="Internet-Draft" value="draft-thomson-ptth-potato-02"/>
    <author fullname="Martin Thomson">
      <organization>Mozilla</organization>
      <address>
        <email>mt@lowentropy.net</email>
      </address>
    </author>
    <date year="2026" month="July" day="20"/>
    <area>Web and Internet Transport</area>
    <workgroup>Protocol for Transposed Transactions over HTTP</workgroup>
    <keyword>b̤͇̜̯̪̼̱̲͕͊͋̑͆̽̏́͑a̧̨̬͙̟̤̟̓͆̓̄̒̚ç̧͇̥͔͕̼͋̏͆̉̍͢ǩ̴͇͙͎̹̼̳̫͗̏̂̊̆̉̌͘͟͝w̸̗̼͔̲̗͍͙͎͋̈́̀̔̋̓̒͡a̸̡̲͍̱̥͎̦͐̋͌́͑̃̓̚ŗ̷̧̥̖̙̀͆̈͊͡d̗̲̦̻͚̥̐̌̐̐͂̄͠s̵̢͚͈̖̟̽͊̅̐͐͗͘͟͠</keyword>
    <keyword>recursion</keyword>
    <keyword>left-handed thread</keyword>
    <abstract>
      <?line 45?>

<t>This document defines 🥔 (‮P̷̙̩̩̖̦̦̮̲͖͗̅͋̇̊o̷̢͚̼͎͉̙̩̻̱̊̂̽̀̅̚͟͡t̴̤̖̞͖̰̐̇̋̍̑̓̏̕͝ȁ̷̩̹͎͖̮͚͋͑̏̀̓̂͡͞ͅt̗̹̩̭͈̳̫͈͈̒͆̃̿̚͝͠o͖͓͈̩̻̤͎͐̐͐̅̂́͟‬),
a suite of reversed versions of HTTP for origin servers.</t>
    </abstract>
    <note removeInRFC="true">
      <name>About This Document</name>
      <t>
        The latest revision of this draft can be found at <eref target="https://martinthomson.github.io/potato/draft-thomson-ptth-potato.html"/>.
        Status information for this document may be found at <eref target="https://datatracker.ietf.org/doc/draft-thomson-ptth-potato/"/>.
      </t>
      <t>
        Discussion of this document takes place on the
        Protocol for Transposed Transactions over HTTP Working Group mailing list (<eref target="mailto:ptth@ietf.org"/>),
        which is archived at <eref target="https://mailarchive.ietf.org/arch/browse/ptth/"/>.
        Subscribe at <eref target="https://www.ietf.org/mailman/listinfo/ptth/"/>.
      </t>
      <t>Source for this draft and an issue tracker can be found at
        <eref target="https://github.com/martinthomson/potato"/>.</t>
    </note>
  </front>
  <middle>
    <?line 51?>

<section anchor="introduction">
      <name>Introduction</name>
      <t>Operating an HTTP server that is accessable on the public internet
creates an unmanageable risk of denial of service
for many organizations,
especially smaller operators.
Content delivery networks (CDNs) are able to provide a measure of protection.
This helps, but only to a degree.
A CDN typically operates as a gateway,
which imposes requirements on origin servers
for reachability, security, and scalability
that can be operationally challenging.</t>
      <t>An alternative deployment model has emerged as a means of addressing this concern,
where, rather than have the gateway initiate a connection to the origin,
the origin connects to the gateway.</t>
      <artset>
        <artwork type="svg"><svg xmlns="http://www.w3.org/2000/svg" version="1.1" height="256" width="544" viewBox="0 0 544 256" class="diagram" text-anchor="middle" font-family="monospace" font-size="13px" stroke-linecap="round">
            <path d="M 8,32 L 8,64" fill="none" stroke="black"/>
            <path d="M 40,64 L 40,112" fill="none" stroke="black"/>
            <path d="M 40,144 L 40,240" fill="none" stroke="black"/>
            <path d="M 80,32 L 80,64" fill="none" stroke="black"/>
            <path d="M 128,32 L 128,64" fill="none" stroke="black"/>
            <path d="M 168,64 L 168,112" fill="none" stroke="black"/>
            <path d="M 168,144 L 168,240" fill="none" stroke="black"/>
            <path d="M 208,32 L 208,64" fill="none" stroke="black"/>
            <path d="M 264,32 L 264,64" fill="none" stroke="black"/>
            <path d="M 304,64 L 304,80" fill="none" stroke="black"/>
            <path d="M 304,144 L 304,168" fill="none" stroke="black"/>
            <path d="M 304,216 L 304,240" fill="none" stroke="black"/>
            <path d="M 352,32 L 352,64" fill="none" stroke="black"/>
            <path d="M 392,32 L 392,64" fill="none" stroke="black"/>
            <path d="M 424,64 L 424,112" fill="none" stroke="black"/>
            <path d="M 424,144 L 424,240" fill="none" stroke="black"/>
            <path d="M 448,160 L 448,224" fill="none" stroke="black"/>
            <path d="M 464,32 L 464,64" fill="none" stroke="black"/>
            <path d="M 8,32 L 80,32" fill="none" stroke="black"/>
            <path d="M 128,32 L 208,32" fill="none" stroke="black"/>
            <path d="M 264,32 L 352,32" fill="none" stroke="black"/>
            <path d="M 392,32 L 464,32" fill="none" stroke="black"/>
            <path d="M 8,64 L 80,64" fill="none" stroke="black"/>
            <path d="M 128,64 L 208,64" fill="none" stroke="black"/>
            <path d="M 264,64 L 352,64" fill="none" stroke="black"/>
            <path d="M 392,64 L 464,64" fill="none" stroke="black"/>
            <path d="M 176,94 L 304,94" fill="none" stroke="black"/>
            <path d="M 176,98 L 304,98" fill="none" stroke="black"/>
            <path d="M 400,94 L 424,94" fill="none" stroke="black"/>
            <path d="M 400,98 L 424,98" fill="none" stroke="black"/>
            <path d="M 16,128 Q 18,124.8 20,128 Q 22,131.2 24,128 Q 26,124.8 28,128 Q 30,131.2 32,128 Q 34,124.8 36,128 Q 38,131.2 40,128 Q 42,124.8 44,128 Q 46,131.2 48,128 Q 50,124.8 52,128 Q 54,131.2 56,128 Q 58,124.8 60,128 Q 62,131.2 64,128 Q 66,124.8 68,128 Q 70,131.2 72,128 Q 74,124.8 76,128 Q 78,131.2 80,128 Q 82,124.8 84,128 Q 86,131.2 88,128 Q 90,124.8 92,128 Q 94,131.2 96,128 Q 98,124.8 100,128 Q 102,131.2 104,128 Q 106,124.8 108,128 Q 110,131.2 112,128 Q 114,124.8 116,128 Q 118,131.2 120,128 Q 122,124.8 124,128 Q 126,131.2 128,128 Q 130,124.8 132,128 Q 134,131.2 136,128 Q 138,124.8 140,128 Q 142,131.2 144,128 Q 146,124.8 148,128 Q 150,131.2 152,128 Q 154,124.8 156,128 Q 158,131.2 160,128 Q 162,124.8 164,128 Q 166,131.2 168,128 " fill="none" stroke="black"/>
            <path d="M 312,128 Q 314,124.8 316,128 Q 318,131.2 320,128 Q 322,124.8 324,128 Q 326,131.2 328,128 Q 330,124.8 332,128 Q 334,131.2 336,128 Q 338,124.8 340,128 Q 342,131.2 344,128 Q 346,124.8 348,128 Q 350,131.2 352,128 Q 354,124.8 356,128 Q 358,131.2 360,128 Q 362,124.8 364,128 Q 366,131.2 368,128 Q 370,124.8 372,128 Q 374,131.2 376,128 Q 378,124.8 380,128 Q 382,131.2 384,128 Q 386,124.8 388,128 Q 390,131.2 392,128 Q 394,124.8 396,128 Q 398,131.2 400,128 Q 402,124.8 404,128 Q 406,131.2 408,128 Q 410,124.8 412,128 Q 414,131.2 416,128 Q 418,124.8 420,128 Q 422,131.2 424,128 Q 426,124.8 428,128 Q 430,131.2 432,128 Q 434,124.8 436,128 Q 438,131.2 440,128 Q 442,124.8 444,128 Q 446,131.2 448,128 Q 450,124.8 452,128 Q 454,131.2 456,128 " fill="none" stroke="black"/>
            <path d="M 40,160 L 56,160" fill="none" stroke="black"/>
            <path d="M 136,160 L 160,160" fill="none" stroke="black"/>
            <path d="M 168,176 L 184,176" fill="none" stroke="black"/>
            <path d="M 264,176 L 416,176" fill="none" stroke="black"/>
            <path d="M 176,208 L 320,208" fill="none" stroke="black"/>
            <path d="M 408,208 L 424,208" fill="none" stroke="black"/>
            <path d="M 48,224 L 64,224" fill="none" stroke="black"/>
            <path d="M 152,224 L 168,224" fill="none" stroke="black"/>
            <polygon class="arrowhead" points="424,176 412,170.4 412,181.6" fill="black" transform="rotate(0,416,176)"/>
            <polygon class="arrowhead" points="184,208 172,202.4 172,213.6" fill="black" transform="rotate(180,176,208)"/>
            <polygon class="arrowhead" points="184,96 172,90.4 172,101.6" fill="black" transform="rotate(180,176,96)"/>
            <polygon class="arrowhead" points="168,160 156,154.4 156,165.6" fill="black" transform="rotate(0,160,160)"/>
            <polygon class="arrowhead" points="56,224 44,218.4 44,229.6" fill="black" transform="rotate(180,48,224)"/>
            <g class="text">
              <text x="44" y="52">Client</text>
              <text x="168" y="52">Gateway</text>
              <text x="308" y="52">Firewall</text>
              <text x="428" y="52">Origin</text>
              <text x="344" y="100">connect</text>
              <text x="384" y="100">🥔</text>
              <text x="304" y="116">|</text>
              <text x="196" y="132">some</text>
              <text x="236" y="132">time</text>
              <text x="280" y="132">later</text>
              <text x="96" y="164">request</text>
              <text x="492" y="164">messages</text>
              <text x="224" y="180">request</text>
              <text x="496" y="180">exchanged</text>
              <text x="304" y="196">|</text>
              <text x="476" y="196">over</text>
              <text x="364" y="212">response</text>
              <text x="492" y="212">existing</text>
              <text x="108" y="228">response</text>
              <text x="500" y="228">connection</text>
            </g>
          </svg>
        </artwork>
        <artwork type="ascii-art"><![CDATA[
+--------+     +---------+      +----------+    +--------+
| Client |     | Gateway |      | Firewall |    | Origin |
+---+----+     +----+----+      +----+-----+    +---+----+
    |               |                |              |
    |               |<================ connect 🥔 ===+
    |               |                |              |
 ~~~~~~~~~~~~~~~~~~~~ some time later ~~~~~~~~~~~~~~~~~~~
    |               |                |              |
    +-- request --->|                |              |  | messages
    |               +-- request ------------------->|  | exchanged
    |               |                |              |  | over
    |               |<------------------ response --+  | existing
    |<-- response --+                |              |  | connection
    |               |                |              |
]]></artwork>
      </artset>
      <t>This arrangement has several advantages.
It greatly simplifies the configuration of firewalls,
which are better able to authorize outward-bound connections.
It also changes the way that the origin scales up
in the case where multiple server instances are needed.</t>
      <t>This document defines alternative, "reversed", versions of HTTP <xref target="HTTP"/> protocols.
These protocols are all nearly identical to their "forward" counterparts,
with the exception that the client and server roles are inverted
after completing the transport and TLS layer establishment.</t>
      <t>This document defines reversed equivalents to
HTTP/1.1 <xref target="RFC9112"/> in <xref target="h1"/>,
HTTP/2 <xref target="RFC9113"/> in <xref target="h2"/>,
and HTTP/3 <xref target="RFC9114"/> in <xref target="h3"/>.</t>
      <section anchor="comparative-notes">
        <name>Comparative Notes</name>
        <t>This is one of a set of different options in this space.
Other designs include
reverse tunnels <xref target="I-D.kazuho-ptth-ptth"/>
and reverse HTTP transport <xref target="I-D.bt-httpbis-reverse-http"/>.</t>
        <t>These alternatives are all broadly capable of achieving the goal.</t>
        <t>Key points of divergence exist around the use of tunnels
(for reverse tunnels)
and how different roles are authenticated and authorized.</t>
        <t>There are some minor differences in use of terminology,
which need to be cleared up.</t>
      </section>
    </section>
    <section anchor="conventions-and-definitions">
      <name>Conventions and Definitions</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?>

<t>This document uses terminology from <xref target="HTTP"/>.</t>
      <t>Because having roles reversed can be especially confusing,
this document tries to be consistent in its use of language.</t>
      <t>The terms <em>client</em> and <em>server</em>,
when unqualified,
refer to the HTTP client and HTTP server roles respectively.</t>
      <t>In this document, a <em>gateway</em> will generally be the HTTP client
and an <em>origin server</em> will generally be the HTTP server.
These terms will be used where it makes sense.</t>
      <t>Where it is necessary to identify a client or server role
outside of the context of reversed HTTP,
the term will be qualified.
This typically will use the protocol where the role is used.
For example, "TLS client role" or "acting as QUIC client".</t>
    </section>
    <section anchor="overview-and-scope">
      <name>Overview and Scope</name>
      <t>This document describes how to establish reversed HTTP connections.</t>
      <t>The overall approach is
to allocate new Application-Layer Protocol Negotiation (ALPN) <xref target="ALPN"/>
identifiers to each reversed HTTP version.</t>
      <t>The origin server acts in the client role
for establishing the transport and security layers of a connection
to the gateway, which provides a server for those layers.
That is, for HTTP/1.1 and HTTP/2,
the origin server is the TCP and TLS client
and the gateway is the TCP and TLS server.
For HTTP/3, the origin server is the QUIC client
and the gateway is the QUIC server.</t>
      <t>If the gateway selects the reversed HTTP version
in the protocol negotiation,
the corresponding HTTP version is conducted
with the usual roles reversed.
The gateway becomes the HTTP client
and the origin server becomes the HTTP server.
No other changes are made to the protocol.</t>
      <t>The document explores some of the implications of this design,
including authorization (<xref target="auth-gateway"/> and <xref target="auth-origin"/>),
and interactions with some protocol features.
However, there are numerous factors that are relevant
when choosing an appropriate server deployment architecture.
This document will address only those
that are relevant to the design of the protocol
and essential to its secure and correct operation.</t>
      <t>This document does not define a protocol
that allows both endpoints to make requests over the same connection.
Separate connections can be used
if requests need to be exchanged in both directions.
Alternatively, tunnels (e.g., CONNECT or variants <xref target="RFC9298"/>)
within a regular HTTP connection
and a 🥔 variant can use that tunnel.
Finally, a 🥔 connection could also be established
and a tunnel with 🥔 variant inside,
but the role inversions
and the authentication and authorization that are involved
could be more confusing than helpful.</t>
    </section>
    <section anchor="reversed-http">
      <name>Reversed HTTP</name>
      <t>This section defines the basic operation of 🥔
for each major HTTP version.</t>
      <t>All versions of 🥔 require special handling
for questions of server authority.
Authorizing the origin server is discussed in <xref target="auth-origin"/>.
Similarly the means by which a gateway authorizes
an origin server are discussed in <xref target="auth-origin"/>.</t>
      <t>Most HTTP features,
including extensions to specific HTTP versions,
are unaffected by the reversal of the protocol.</t>
      <t>Only those features that depend on lower protocols layers
that also depend on assumptions
about how the the TLS or transport-layer role
relates to the HTTP client or server role.
Such features cannot be used without additional profiling.</t>
      <t>The features that cannot be used with 🥔
include:
the Client-Cert HTTP field <xref target="RFC9440"/>.</t>
      <t>A small adjustment to the operation of
the HTTP/3 Datagram extension <xref target="HTTP-DGRAM"/>
is described in <xref target="h3"/>.</t>
      <section anchor="h1">
        <name>🥔 for HTTP/1.1</name>
        <t>A reversed version of HTTP/1.1 <xref target="RFC9112"/>
is identified by the ALPN label "Ɩɥ"
or the byte sequence 0xc6, 0x96, 0xc9, 0xa5.</t>
        <t>To negotiate the use of 🥔 for HTTP/1.1,
an origin server advertises the "Ɩɥ" token
in its TLS handshake using ALPN <xref target="ALPN"/>
and a gateway selects that token.</t>
        <t>Once a TLS connection is established,
the origin server (as a TLS client) becomes the HTTP server
and the gateway (as TLS server) becomes the HTTP client.
Messages sent by the gateway are HTTP requests
and messages from the origin server are HTTP responses.</t>
        <t>HTTP/1.1 depends only on an undifferentiated stream of bytes.
No special considerations apply to this version.</t>
      </section>
      <section anchor="h2">
        <name>🥔 for HTTP/2</name>
        <t>A reversed version of HTTP/2 <xref target="RFC9113"/>
is identified by the ALPN label "Շɥ"
or the byte sequence 0xd5, 0x87, 0xc9, 0xa5.</t>
        <t>To negotiate the use of 🥔 for HTTP/2,
an origin server advertises the "Շɥ" token
in its TLS handshake using ALPN <xref target="ALPN"/>
and a gateway selects that token.</t>
        <t>Once a TLS connection is established,
the origin server (as a TLS client) becomes the HTTP/2 server
and the gateway (as TLS server) becomes the HTTP/2 client.
Each send a preface (<xref section="3.4" sectionFormat="of" target="RFC9113"/>)
and establishes an HTTP connection.</t>
        <t>HTTP/2 depends only on an undifferentiated stream of bytes.
No changes are necessary to the base protocol.</t>
        <t>In operation, the gateway (as HTTP/2 client) initiates requests
on odd-numbered streams,
just like a regular HTTP/2 connection.
Any push promises from the origin server (as HTTP server)
are sent on even-numbered streams.</t>
      </section>
      <section anchor="h3">
        <name>🥔 for HTTP/3</name>
        <t>A reversed version of HTTP/3 <xref target="RFC9114"/>
is identified by the ALPN label "Ɛɥ"
or the byte sequence 0xc6, 0x90, 0xc9, 0xa5.</t>
        <t>To negotiate the use of 🥔 for HTTP/3,
an origin server advertises the "Ɛɥ" token
in its QUIC handshake using ALPN <xref target="ALPN"/>
and a gateway selects that token.</t>
        <t>Once a QUIC connection is established,
the origin server (as a QUIC client) becomes the HTTP/3 server
and the gateway (as QUIC server) becomes the HTTP/3 client.</t>
        <t>Unlike HTTP/2, the streaming layer that HTTP/3 uses
is provided by QUIC.
Therefore, the identifiers given to streams change.
This should not be visible to the HTTP/3 layer;
the HTTP/3 design generally does not depend on stream identifiers
being in any particular form.</t>
        <t>One exception to this is the Quarter Stream ID concept
introduced in <xref section="2.1" sectionFormat="of" target="HTTP-DGRAM"/>.
Because requests in reversed HTTP/3 are made
on bi-directional, server-initiated streams,
those identifiers end with two bits (0b01);
see <xref section="2.1" sectionFormat="of" target="QUIC"/>.
To construct a Quarter Stream ID from a stream identifier,
any remainder is discarded.
To construct a stream identifier from a Quarter Stream ID
in reversed HTTP/3,
the value is multiplied by 4,
then the stream type (0b01) is added.
This adjustment only requires an understanding of the type of QUIC stream
that the HTTP client uses to make requests,
which works for regular HTTP/3 as well.</t>
        <aside>
          <t>Note that the same Quarter Stream ID adjustment is safe to use
in a regular HTTP/3 implementation of HTTP datagrams.</t>
        </aside>
        <t>Any extension that makes similar assumptions
about the structure of stream identifiers
can be adjusted in a similar manner.</t>
      </section>
    </section>
    <section anchor="auth-origin">
      <name>Authenticating and Authorizing Origin Servers</name>
      <t>Arrangements between gateways and origin servers
are often privately arranged.
Therefore, how a gateway chooses to authorize an origin server
does not necessarily benefit from having a single, standard mechanism.</t>
      <t>This section describes a few options
for origin server authentication.
None of these approaches is mandated,
as it is expected that private arrangements will be used
in most deployments.</t>
      <section anchor="auth-cert">
        <name>TLS Client Certificates</name>
        <t>TLS client certificates can be used to authenticate TLS clients.
That authentication could be used as the basis of authorization.</t>
        <t>The choice of how to authenticate a client certificate is complex.
Multiple options are possible,
each with different operational and deployment properties:</t>
        <ul spacing="normal">
          <li>
            <t>The gateway could use the same public key infrastructure (PKI) as the certificate
that the gateway itself offers (see <xref target="auth-gateway"/>).</t>
          </li>
          <li>
            <t>A completely separate PKI could be used.
This includes a PKI managed by the gateway.</t>
          </li>
          <li>
            <t>Self-signed certificates could be mapped
to specific authorizations.</t>
          </li>
        </ul>
        <t>This option might introduce some challenges in implementation or deployment.
Because the TLS connection that is established to the gateway
uses the same endpoint as other clients,
the TLS server software would need to make its protocol selection
before deciding to request a client certificate.</t>
      </section>
      <section anchor="auth-http">
        <name>HTTP Request</name>
        <t>Once a 🥔 connection is established,
the gateway could make a request to a pre-arranged resource.</t>
        <t>This request could be used to retrieve a shared secret
that authorizes the origin server.</t>
        <sourcecode type="http"><![CDATA[
GET /some/prearranged/resource HTTP/1.1
Host: origin.example

]]></sourcecode>
        <t>The origin server replies
and presents evidence of its authorization:</t>
        <sourcecode type="http"><![CDATA[
HTTP/1.1 200 OK

{some prearranged secret}
]]></sourcecode>
        <t>However, this is trivially vulnerable
to impersonation attack
if an adversary is able to capture the secret.</t>
        <t>A marginally more complex and more secure exchange
might involve the origin server producing a signed object
that covers a challenge produced by the gateway.</t>
        <t>TODO: Should this document define a protocol?</t>
      </section>
      <section anchor="authorization-for-limited-path-scope">
        <name>Authorization for Limited Path Scope</name>
        <t>A gateway does not need to authorize an origin server
to serve all requests for an origin.
A gateway might direct only a subset of URLs to a specific origin.</t>
        <t>Nor does a gateway need to limit its authorization
to a single origin.
A gateway could send requests for multiple origins,
varying host or port as configured.</t>
        <t>The choice of which requests are forwarded to an origin server
is a matter for gateway policy.
That policy might be guided by the choice of credential
presented by the origin server.</t>
        <t>If a HTTP request is used
to authorize the origin server,
the response might include information
that guides the gateway in determining
which requests are forwarded over the connection.
This could be as simple as
having the origin server list path prefixes that it can serve
or it could be bound to the credentials that are offered.</t>
        <t>This might be used to enable different deployment architectures
where the one logical origin server is distributed
across multiple instances,
with different paths being served by different hosts.</t>
        <t>This approach is also compatible with a gateway
that makes regular HTTP connections to some origin server nodes.
A gateway might forward requests
for the one origin
to origin servers that use both regular and reversed HTTP
based on whatever policy it chooses.</t>
      </section>
    </section>
    <section anchor="auth-gateway">
      <name>Authenticating Gateways</name>
      <t>An origin server <bcp14>MUST</bcp14> authenticate a gateway
unless an alternative means of authentication
is privately arranged.</t>
      <t>In all 🥔 variants,
when the the origin server establishes a TLS connection
to the gateway,
it confirms the identity of the gateway
according to the rules of the respective, non-🥔, HTTP version.</t>
      <t>The rules in <xref section="4.3" sectionFormat="of" target="HTTP"/>
regarding how clients determine whether a server can answer a request
are applied in reverse.
That is, an origin server that cannot successfully determine
that a gateway is authoritative for resources
<bcp14>MUST NOT</bcp14> answer requests from that gateway.</t>
      <t>Because the server and client roles are reversed,
some methods for expanding the scope that a server can claim authority for
are invalidated.
Mechanisms like the ORIGIN frame <xref target="ORIGIN"/> remain valid
as a means of limiting scope.</t>
      <t>These requirements do not exist to provide protection against impersonation,
which is generally the reason to require that a server establish authority.
They exist to protect things like the confidentiality of responses.</t>
      <t>TODO: For discovery, should this use
generic SVCB records, HTTPS records, or a new RR type?
It seems like HTTPS will work just fine for this.</t>
    </section>
    <section anchor="early">
      <name>TLS Early Data</name>
      <t>A gateway can use TLS session resumption
to make establishing connections more efficient.
This includes the possibility of enabling TLS early data.</t>
      <t>Unlike in regular HTTP
where a client can use TLS early data to make a request,
reversed HTTP gives the server an opportunity to speak first.
This has little value,
as an HTTP server generally has to wait for requests.</t>
      <t>This provides similar properties to the first flight of server application data
in a TLS 1.3 connection without early data.
There, the server is able to send first.</t>
      <t>Though that data has no replay risk,
the data that a server might send in any HTTP version without a request
is unlikely to produce side effects
that might be a problem if replayed.</t>
      <t>An origin can use early data to
reduce the latency of settings
or pre-populate header compression state.
These both only apply to HTTP/2 and HTTP/3.
These uses can avoid any replay attack risk,
as these do not cause side effects beyond the connection state.</t>
      <t>For a gateway,
the first flight of application data can be used to make requests.
However, this data is sent prior to receiving client certificates
if those are used to authorize the origin server; see <xref target="auth-cert"/>.
This flight might be used to initiate a request to authorize the origin server,
such as the option described in <xref target="auth-http"/>.</t>
    </section>
    <section anchor="sacm">
      <name>Scalability, Availability, and Connection Management</name>
      <t>A gateway that is configured to make connections to an origin server
is able to make connections as needed.
The origin server might deploy a load balancer to manage inbound connections.
When roles are reversed,
having the origin server be responsible for connection establishment
can mean that the gateway cannot assume that it is able
to make new connections as demand increases.</t>
      <t>This can mean that origin servers have a greater control
over their availability and service scaling.
Where an origin server that might need to scale up
to handle increased demand
might otherwise need to arrange for load balancing infrastructure,
that becomes something that the gateway assumes more responsibilty for.</t>
      <t>As a passive participant,
a gateway is not able to act if an origin server goes offline.
The origin server is responsible for establishing connections
when it becomes available.</t>
      <t>This can present scaling challenges
as a gateway cannot make additional connections
on the assumption that origin servers will scale to meet increased demand.
Gateways can attempt to make additional requests over existing connections,
but origin servers can use protocol features
designed to limit resource commitment --
such as stream limits and flow control --
to manage load.</t>
      <t>This document does not define any mechanism
that might allow the gateway to communicate
changes in demand for capacity to origin server instances.
Defining mechanisms to help
with adding or removing capacity on demand
is a matter for future work.</t>
      <t>The use of reversed HTTP/1.1 presents particular difficulty
for connection management,
which is borne by the origin server.
The lack of any concurrency features in that protocol
means that origin servers that use 🥔 for HTTP/1.1
will need to manage a pool of connections
if the gateway needs to handle requests
with any amount of concurrency or volume.
Consequently, a choice to use it is inadvisable
except for very specific conditions.</t>
    </section>
    <section anchor="security-considerations">
      <name>Security Considerations</name>
      <t>Using 🥔 changes the denial of service profile
for origin servers that rely on it.
Such servers are able to use different tools
to manage their reachability.</t>
      <t>A gateway becomes a more central part of managing load,
but the gateway no longer has direct control over connection establishment.
This alters how gateways and origin servers need to be configured
to handle scaling, availability, and connections;
see <xref target="sacm"/> for details.</t>
      <t>Other than these changes, the security considerations of HTTP
and the specific HTTP version in use apply in full.</t>
    </section>
    <section anchor="iana-considerations">
      <name>IANA Considerations</name>
      <t>TODO: Register ALPN labels.</t>
    </section>
  </middle>
  <back>
    <displayreference target="RFC9112" to="HTTP/1.1"/>
    <displayreference target="RFC9113" to="HTTP/2"/>
    <displayreference target="RFC9114" to="HTTP/3"/>
    <references anchor="sec-combined-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="RFC9112">
          <front>
            <title>HTTP/1.1</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 specifies the HTTP/1.1 message syntax, message parsing, connection management, and related security concerns.</t>
              <t>This document obsoletes portions of RFC 7230.</t>
            </abstract>
          </front>
          <seriesInfo name="STD" value="99"/>
          <seriesInfo name="RFC" value="9112"/>
          <seriesInfo name="DOI" value="10.17487/RFC9112"/>
        </reference>
        <reference anchor="RFC9113">
          <front>
            <title>HTTP/2</title>
            <author fullname="M. Thomson" initials="M." role="editor" surname="Thomson"/>
            <author fullname="C. Benfield" initials="C." role="editor" surname="Benfield"/>
            <date month="June" year="2022"/>
            <abstract>
              <t>This specification describes an optimized expression of the semantics of the Hypertext Transfer Protocol (HTTP), referred to as HTTP version 2 (HTTP/2). HTTP/2 enables a more efficient use of network resources and a reduced latency by introducing field compression and allowing multiple concurrent exchanges on the same connection.</t>
              <t>This document obsoletes RFCs 7540 and 8740.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="9113"/>
          <seriesInfo name="DOI" value="10.17487/RFC9113"/>
        </reference>
        <reference anchor="RFC9114">
          <front>
            <title>HTTP/3</title>
            <author fullname="M. Bishop" initials="M." role="editor" surname="Bishop"/>
            <date month="June" year="2022"/>
            <abstract>
              <t>The QUIC transport protocol has several features that are desirable in a transport for HTTP, such as stream multiplexing, per-stream flow control, and low-latency connection establishment. This document describes a mapping of HTTP semantics over QUIC. This document also identifies HTTP/2 features that are subsumed by QUIC and describes how HTTP/2 extensions can be ported to HTTP/3.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="9114"/>
          <seriesInfo name="DOI" value="10.17487/RFC9114"/>
        </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>
        <reference anchor="ALPN">
          <front>
            <title>Transport Layer Security (TLS) Application-Layer Protocol Negotiation Extension</title>
            <author fullname="S. Friedl" initials="S." surname="Friedl"/>
            <author fullname="A. Popov" initials="A." surname="Popov"/>
            <author fullname="A. Langley" initials="A." surname="Langley"/>
            <author fullname="E. Stephan" initials="E." surname="Stephan"/>
            <date month="July" year="2014"/>
            <abstract>
              <t>This document describes a Transport Layer Security (TLS) extension for application-layer protocol negotiation within the TLS handshake. For instances in which multiple application protocols are supported on the same TCP or UDP port, this extension allows the application layer to negotiate which protocol will be used within the TLS connection.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="7301"/>
          <seriesInfo name="DOI" value="10.17487/RFC7301"/>
        </reference>
        <reference anchor="HTTP-DGRAM">
          <front>
            <title>HTTP Datagrams and the Capsule Protocol</title>
            <author fullname="D. Schinazi" initials="D." surname="Schinazi"/>
            <author fullname="L. Pardue" initials="L." surname="Pardue"/>
            <date month="August" year="2022"/>
            <abstract>
              <t>This document describes HTTP Datagrams, a convention for conveying multiplexed, potentially unreliable datagrams inside an HTTP connection.</t>
              <t>In HTTP/3, HTTP Datagrams can be sent unreliably using the QUIC DATAGRAM extension. When the QUIC DATAGRAM frame is unavailable or undesirable, HTTP Datagrams can be sent using the Capsule Protocol, which is a more general convention for conveying data in HTTP connections.</t>
              <t>HTTP Datagrams and the Capsule Protocol are intended for use by HTTP extensions, not applications.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="9297"/>
          <seriesInfo name="DOI" value="10.17487/RFC9297"/>
        </reference>
        <reference anchor="QUIC">
          <front>
            <title>QUIC: A UDP-Based Multiplexed and Secure Transport</title>
            <author fullname="J. Iyengar" initials="J." role="editor" surname="Iyengar"/>
            <author fullname="M. Thomson" initials="M." role="editor" surname="Thomson"/>
            <date month="May" year="2021"/>
            <abstract>
              <t>This document defines the core of the QUIC transport protocol. QUIC provides applications with flow-controlled streams for structured communication, low-latency connection establishment, and network path migration. QUIC includes security measures that ensure confidentiality, integrity, and availability in a range of deployment circumstances. Accompanying documents describe the integration of TLS for key negotiation, loss detection, and an exemplary congestion control algorithm.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="9000"/>
          <seriesInfo name="DOI" value="10.17487/RFC9000"/>
        </reference>
      </references>
      <references anchor="sec-informative-references">
        <name>Informative References</name>
        <reference anchor="I-D.kazuho-ptth-ptth">
          <front>
            <title>Protocol for Transposed Transactions over HTTP</title>
            <author fullname="Kazuho Oku" initials="K." surname="Oku">
              <organization>Fastly</organization>
            </author>
            <date day="25" month="September" year="2025"/>
            <abstract>
              <t>   This document specifies the Protocol for Transposed Transactions over
   HTTP (PTTH), an HTTP extension that allows a backend server to
   establish an HTTP connection to a reverse proxy and transpose HTTP
   request flow.  The reverse proxy then forwards incoming requests to
   the backend server over the transposed connection.  This extension
   lets backend servers behind restrictive firewalls accept HTTP traffic
   through reverse proxies without changing firewall settings and with
   virtually zero overhead.

              </t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-kazuho-ptth-ptth-00"/>
        </reference>
        <reference anchor="I-D.bt-httpbis-reverse-http">
          <front>
            <title>Reverse HTTP Transport</title>
            <author fullname="Benjamin M. Schwartz" initials="B. M." surname="Schwartz">
              <organization>Meta Platforms, Inc.</organization>
            </author>
            <author fullname="Tirumaleswar Reddy.K" initials="T." surname="Reddy.K">
              <organization>Nokia</organization>
            </author>
            <author fullname="Mohamed Boucadair" initials="M." surname="Boucadair">
              <organization>Orange</organization>
            </author>
            <author fullname="Philipp S. Tiesel" initials="P. S." surname="Tiesel">
              <organization>SAP SE</organization>
            </author>
            <date day="23" month="October" year="2023"/>
            <abstract>
              <t>   This document defines a secure transport for HTTP in which the client
   and server roles are reversed.  This arrangement improves the origin
   server's protection from Layer 3 and Layer 4 denial-of-service
   attacks when an intermediary is in use.  It allows origin server's to
   be hosted without being publicly (and directly) accessible but allows
   clients to access these servers via an intermediary.

              </t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-bt-httpbis-reverse-http-01"/>
        </reference>
        <reference anchor="RFC9298">
          <front>
            <title>Proxying UDP in HTTP</title>
            <author fullname="D. Schinazi" initials="D." surname="Schinazi"/>
            <date month="August" year="2022"/>
            <abstract>
              <t>This document describes how to proxy UDP in HTTP, similar to how the HTTP CONNECT method allows proxying TCP in HTTP. More specifically, this document defines a protocol that allows an HTTP client to create a tunnel for UDP communications through an HTTP server that acts as a proxy.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="9298"/>
          <seriesInfo name="DOI" value="10.17487/RFC9298"/>
        </reference>
        <reference anchor="RFC9440">
          <front>
            <title>Client-Cert HTTP Header Field</title>
            <author fullname="B. Campbell" initials="B." surname="Campbell"/>
            <author fullname="M. Bishop" initials="M." surname="Bishop"/>
            <date month="July" year="2023"/>
            <abstract>
              <t>This document describes HTTP extension header fields that allow a TLS terminating reverse proxy (TTRP) to convey the client certificate information of a mutually authenticated TLS connection to the origin server in a common and predictable manner.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="9440"/>
          <seriesInfo name="DOI" value="10.17487/RFC9440"/>
        </reference>
        <reference anchor="ORIGIN">
          <front>
            <title>The ORIGIN HTTP/2 Frame</title>
            <author fullname="M. Nottingham" initials="M." surname="Nottingham"/>
            <author fullname="E. Nygren" initials="E." surname="Nygren"/>
            <date month="March" year="2018"/>
            <abstract>
              <t>This document specifies the ORIGIN frame for HTTP/2, to indicate what origins are available on a given connection.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="8336"/>
          <seriesInfo name="DOI" value="10.17487/RFC8336"/>
        </reference>
      </references>
    </references>
    <?line 589?>

<section numbered="false" anchor="acknowledgments">
      <name>Acknowledgments</name>
      <t>This draft is based on discussions with many people.
Both <contact asciiFullname="Kazuho Oku" fullname="奥 一穂"/>
and <contact fullname="Andrew McGregor"/> both made helpful contributions.</t>
    </section>
  </back>
  <!-- ##markdown-source:
H4sIAAAAAAAAA91cW48cx3V+71/RGb6Q1MwsyaUtaa2LV8uLFiK5DLmKYAR5
qOmpmW2zp3vc1b3L1WoFWbIs2bpYtmXJFmLLNkwrShwnURzYhm0EyEOAADOP
+QNGgrzmJ+Q751RVV8/MUg6Tl4SWyblUV5061++cOjW9Xi+q0irTG3HnPz+8
9258+vcv/fzm/P3Zq/M3Zq/Nvj773uxj/O+92U/xv5/PPpm/N/tlgY8/mL08
+938R/OXMPCD2W/nb8+/xkN/PP9w9pvZ381+Wc3emX1n/n3M8cbsrdk356/M
vjH7Ceb5AWb429kv1Owb8zfm38SHL82+jXl+gPk+nv0a87yKAT/HnJjhW/Pv
z786e2X2wfyHs3+cvT/7NYb89fz12d/P/mr++vz1Yv7O7B38/9XZy/Mvz9+b
fxtffYzVfzL/cP7271/62Zm4Fz+9u3uzG2/n+7qs9LATqcGg1Pt2s50oUZUe
F+XhRmyqYRQNiyRXE/BiWKpR1av2iokp8t60qvZ606JSVdE7dyEy9WCSGpMW
eXU4xeDty7tX4vhUrDJTYOY0H+qpxl951enGHT1Mq6JMVUZvtjefwj9FiVe3
dq90oryeDHS5EQ1Bx0aUFLnRuanNRlyVtY5A53qkSq0w63N6EKt8iK1Uusx1
Fe+WKjfToqw60UFR3hmXRT3FuJtlURVJkcUjrGLHGD2UlyqpQLWJC7CDWdOJ
7uhDPD7ciMCszmD+dYj9m2D67yCZL0M+P5m/Nvvz2d/M/nL2W0j1k/l3FKTx
yvyrkOdXZt+a/Wz+vdmHkOtH+PsvEjz7DTz7tdlbeOqj2b35u/PvQDd+PPvo
DjThzfn78+9i2pehPjTozflr8++RqCDX35JMZ784gE58Zf7S/Eezd6E238YC
7+P5d2efzN6fv4XBb89+pSDwN0DDm0zeKxj0yfwtkPYjLPc2dPRXJZ7/6ux1
6NTXZ/egcB9BLz+a/XIIHXpn9uaMVOZl0P4+Jv3p7DdQtHsGmvxdjH6VtGn+
Q5D5ATTpx3j2Q2jzP3SINaVO6pJEznzKNLRjD+IAY6s9CAiata/zGjKM4weV
RByLOnWegzjTfBxfpYno84lKM3xOavj5VFejflGO6XNVJnv4fK+qpmZjbY2G
0Ufpvu67YWv0wdqgLA6MXqMJ1ujBcVrt1QM8OlFlleZWz9dExWlABn00VWvu
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
1mJc/wWYb2j1sFAAAA==

-->

</rfc>
