<?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.36 (Ruby 3.4.9) -->
<rfc xmlns:xi="http://www.w3.org/2001/XInclude" ipr="trust200902" docName="draft-thomson-ptth-potato-01" category="std" consensus="true" submissionType="IETF" tocInclude="true" sortRefs="true" symRefs="true" version="3">
  <!-- xml2rfc v2v3 conversion 3.33.0 -->
  <front>
    <title abbrev="🥔">🥔 (Potato) - Reverse HTTP</title>
    <seriesInfo name="Internet-Draft" value="draft-thomson-ptth-potato-01"/>
    <author fullname="Martin Thomson">
      <organization>Mozilla</organization>
      <address>
        <email>mt@lowentropy.net</email>
      </address>
    </author>
    <date year="2026" month="May" day="14"/>
    <area>Web and Internet Transport</area>
    <workgroup>Protocol for Transposed Transactions over HTTP</workgroup>
    <keyword>next generation</keyword>
    <keyword>unicorn</keyword>
    <keyword>sparkling distributed ledger</keyword>
    <abstract>
      <?line 45?>

<t>This document defines 🥔 (Potato),
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"/>,
HTTP/2 <xref target="RFC9113"/>,
and HTTP/3 <xref target="RFC9114"/>.</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="rh3"/>.</t>
      <section anchor="rh1">
        <name>🥔 for HTTP/1.1</name>
        <t>A reversed version of HTTP/1.1 <xref target="RFC9112"/>
is identified by the ALPN label "ph1".</t>
        <t>To negotiate the use of 🥔 for HTTP/1.1,
an origin server advertises the "ph1" 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="rh2">
        <name>🥔 for HTTP/2</name>
        <t>A reversed version of HTTP/2 <xref target="RFC9113"/>
is identified by the ALPN label "ph2".</t>
        <t>To negotiate the use of 🥔 for HTTP/2,
an origin server advertises the "ph2" 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="rh3">
        <name>🥔 for HTTP/3</name>
        <t>A reversed version of HTTP/3 <xref target="RFC9114"/>
is identified by the ALPN label "ph3".</t>
        <t>To negotiate the use of 🥔 for HTTP/3,
an origin server advertises the "ph3" 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>
        <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 582?>

<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:
H4sIAAAAAAAAA9VczXIcR3K+91OUoQtJzQwIgLGrxepnIfBHCJEETUJWbDh8
qOmumSmxp3u2qxvgCILC4Wfw3b7swW/gs5/FDl/9CM4vs6q6umfAlWVfrNhY
zvRUV2Vl5c+XP4XpdJq1ti3NqTr4r3/68z+qB2/qVrf1QzVVb821aZxR31xd
vTnI9HzemGs/7CDLdWuWdbM9Va4tsqyo80qvaZai0Yt22q7qtaur6aZtV9MN
zzh9fJS5br62ztm6arcbGnzx7Oq5Up8oXbqaZrZVYTaG/q9qDybqwBS2rRur
S3y5OPua/qkb+vT26vlBVnXruWlOs4LoOM3yunKmcp07VW3TmYzoPMl0YzTN
+r2ZK10V6qJqTVOZVl01unKbumkPspu6eb9s6m5D4940dVvndakWtIof40wh
H3XeEtVO1cQSz5D3ZkuvF6cZsaoyH1q1NJVpNMbhUVfZvG74o9vo5n1pq6Uq
rGsbO+9amrc0xdI02bWpOtqBUr+WDqWEmQff02awyAtMhOdrbUt6jkP4gzXt
YlY3SzzXTb6i56u23bjTw0MMwyN7bWZh2CEeHM6b+saZQ0xwiBeXtl11c3p1
rZvWVv6UD+WAMaCk03DtYO5k4Ezen9nav3J4r7TMVu26PMgy3dGPDXhMsyu1
6MpS5OzgFc+sruTdA/6ZCNeV/ZHP4FS9qn+0Zan5F+N5sW7/UNY3JGBNvdnO
SBpojapu1vTKNZ8CeHqq3j4//93R0WP6Lp+OT3kWOr5NqUnmMerwaHYUB5zs
G3Acf36y7+eTLLPVol88m81mWTadTpWek5jQUWfZ1co6RcrVrYlmVZiFrYxT
A02dZFq5zrZG1QvViM4WCv+IpCx4NZYm0qYl8cyZBj/TYrza2hZFabLsE6hI
Uxcdy1iWXW5YnEmidCVzyIuqXelWEV06z41zel7S0hU9NWrTzUubK+tVLctJ
BUkiMEFXrXWll4aHN9a9B2Wk6qTf+ISpbW4ykEkDt4OzdJPMuI3JaWy5VW5N
/xAZNdNXYyPnZFGEQSWxstmSQrbQbacenD997R6SyBvFK7e12jT1tS3ou1ob
7bqGGUcPW8MbnwnTV6bcuIkiXaXN0ar0oqb5l40xs+xM0bTQO5szSUIKNkr/
U0v6eKO3k+xmZfOVsmsosKOz+VNnG4OTdGDY8DR458SufKXntrTtdkK/5F3D
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

-->

</rfc>
