<?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.6.35 (Ruby 3.0.2) -->
<rfc xmlns:xi="http://www.w3.org/2001/XInclude" ipr="trust200902" docName="draft-bt-httpbis-reverse-http-00" category="std" consensus="true" submissionType="IETF" tocInclude="true" sortRefs="true" symRefs="true" version="3">
  <!-- xml2rfc v2v3 conversion 3.17.4 -->
  <front>
    <title abbrev="Reverse HTTP">Reverse HTTP Transport</title>
    <seriesInfo name="Internet-Draft" value="draft-bt-httpbis-reverse-http-00"/>
    <author initials="B. M." surname="Schwartz" fullname="Benjamin M. Schwartz">
      <organization>Meta Platforms, Inc.</organization>
      <address>
        <email>ietf@bemasc.net</email>
      </address>
    </author>
    <author initials="T." surname="Reddy" fullname="Tirumaleswar Reddy">
      <organization>Nokia</organization>
      <address>
        <email>kondtir@gmail.com</email>
      </address>
    </author>
    <date year="2023" month="July" day="10"/>
    <area>ART</area>
    <workgroup>HTTPBIS</workgroup>
    <keyword>Internet-Draft</keyword>
    <abstract>
      <?line 35?>

<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 DDoS attacks when an intermediary is in use. It allows origin server's to be hosted without being publicly accessible but allows the clients to access these servers via an intermediary.</t>
    </abstract>
    <note removeInRFC="true">
      <name>About This Document</name>
      <t>
        Status information for this document may be found at <eref target="https://datatracker.ietf.org/doc/draft-bt-reverse-http/"/>.
      </t>
      <t>
        Discussion of this document takes place on the
        HTTPBIS Working Group mailing list (<eref target="mailto:ietf-http-wg@w3.org"/>),
        which is archived at <eref target="http://lists.w3.org/Archives/Public/ietf-http-wg/"/>.
      </t>
    </note>
  </front>
  <middle>
    <?line 40?>

<section anchor="introduction">
      <name>Introduction</name>
      <t>The HTTP protocol has long supported the ability of clients to access origins via an intermediary.  There are now a variety of well-defined intermediary types:</t>
      <ul spacing="normal">
        <li>
          <t>Client-selected
          </t>
          <ul spacing="normal">
            <li>HTTP request proxies (a.k.a. forward proxies)</li>
            <li>Transport proxies (e.g., CONNECT (see Section 9.3.6 of <xref target="RFC9110"/>), CONNECT-UDP <xref target="RFC9298"/>)</li>
            <li>IP relays (e.g., CONNECT-IP <xref target="I-D.draft-ietf-masque-connect-ip"/>)</li>
            <li>Oblivious HTTP Relays <xref target="I-D.draft-ietf-ohai-ohttp"/></li>
          </ul>
        </li>
        <li>
          <t>Origin-selected
          </t>
          <ul spacing="normal">
            <li>HTTP gateways (a.k.a. reverse proxies)</li>
            <li>Transport load balancers</li>
          </ul>
        </li>
      </ul>
      <t>Although these intermediaries differ widely in their functionality, they all generally act as a client when connecting to the origin.  Client-selected intermediaries reach the origin based on its hostname or IP address specified in the HTTP request, while origin-selected intermediaries first translate this destination into a "backend address".</t>
      <t>One of the main advantages of origin-selected intermediaries is their ability to defend the origin from attacks, especially Denial of Service (DoS) and Distributed Denial-of-Service (DDoS) attacks in which the attacker floods the origin server with requests or packets.  To prevent attackers from simply bypassing the intermediary, common practices include keeping the backend address secret and/or instituting firewall rules that only allow packets from the intermediary.  These practices are reasonably effective with origin-selected intermediaries, but they cannot be used with client-selected intermediaries, as those intermediaries do not know the secret backend address, and the origin does not know their "exit" IP addresses.</t>
      <t>This specification defines a protocol for HTTP connections between origins and arbitrary intermediaries that can limit the impact of Layer 3 and Layer 4 DDoS attacks. When this protocol is in use, origins have the ability to partition the infrastructure that serves each intermediary. This ensures that attacks targeting the origin's public IP address 
or attacks via one intermediary will not affect any other intermediaries. By partitioning the infrastructure, the impact of the attacks is contained within the affected intermediary or the origin's public IP address.</t>
      <t>This protocol works by reversing the TLS or QUIC transport that supports the HTTP connection: the origin acts as the transport client, and the intermediary acts as the server.  Inside the secure transport, HTTP operates normally, but with the client and server roles reversed.</t>
    </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?>

</section>
    <section anchor="protocol">
      <name>Protocol</name>
      <t>The new protocol is termed "Reverse HTTP".  The "Reverse HTTP/2" version is identified by the ALPN ID "h2-reverse", and "Reverse HTTP/3" by "h3-reverse" (see <xref target="iana-alpn"/> for registrations).  These protocols represent HTTP/2 and HTTP/3, operating with the roles reversed but otherwise unmodified, except as follows:</t>
      <ul spacing="normal">
        <li>The intermediary <bcp14>MUST</bcp14> send a TLS CertificateRequest message to indicate that certificate-based client authentication is required.</li>
        <li>The origin <bcp14>MUST</bcp14> respond with a valid certificate chain.</li>
        <li>Each party <bcp14>MUST</bcp14> send a SETTINGS frame as soon as the transport becomes writable to them.  This means that the intermediary will typically send its SETTINGS frame first.</li>
        <li>
          <t>The origin <bcp14>MUST</bcp14> immediately send an ORIGIN frame identifying the origins it claims.  This frame is used as originally defined, except that wildcard names are permitted (contrary to <xref section="2.2" sectionFormat="of" target="RFC8336"/>).
          </t>
          <ul spacing="normal">
            <li>Otherwise, use of Reverse HTTP with wildcard certificates would be impossible.</li>
          </ul>
        </li>
        <li>The intermediary <bcp14>MUST</bcp14> check the ORIGIN frame contents against the provided TLS client certificate.</li>
      </ul>
      <t>Reverse HTTP/1.1 is not defined, as the lack of multiplexing renders it unsuitable for this use.</t>
      <t>Once this process has completed, the origin has proved ownership of the Origin Set and is ready to receive requests.  The intermediary <bcp14>SHOULD</bcp14> direct subsequent HTTP requests for this origin over this Reverse HTTP channel unless it appears to be overloaded.</t>
      <figure>
        <name>Example: Reverse HTTP/2 for Oblivious HTTP</name>
        <artset>
          <artwork type="svg"><svg xmlns="http://www.w3.org/2000/svg" version="1.1" height="768" width="592" viewBox="0 0 592 768" class="diagram" text-anchor="middle" font-family="monospace" font-size="13px">
              <path d="M 8,48 L 8,96" fill="none" stroke="black"/>
              <path d="M 48,96 L 48,752" fill="none" stroke="black"/>
              <path d="M 64,336 L 64,368" fill="none" stroke="black"/>
              <path d="M 88,48 L 88,96" fill="none" stroke="black"/>
              <path d="M 184,48 L 184,96" fill="none" stroke="black"/>
              <path d="M 192,336 L 192,368" fill="none" stroke="black"/>
              <path d="M 224,96 L 224,752" fill="none" stroke="black"/>
              <path d="M 272,48 L 272,96" fill="none" stroke="black"/>
              <path d="M 320,48 L 320,96" fill="none" stroke="black"/>
              <path d="M 344,48 L 344,96" fill="none" stroke="black"/>
              <path d="M 392,96 L 392,752" fill="none" stroke="black"/>
              <path d="M 432,48 L 432,96" fill="none" stroke="black"/>
              <path d="M 472,48 L 472,96" fill="none" stroke="black"/>
              <path d="M 512,96 L 512,752" fill="none" stroke="black"/>
              <path d="M 560,48 L 560,96" fill="none" stroke="black"/>
              <path d="M 584,48 L 584,96" fill="none" stroke="black"/>
              <path d="M 336,32 L 568,32" fill="none" stroke="black"/>
              <path d="M 8,48 L 88,48" fill="none" stroke="black"/>
              <path d="M 184,48 L 272,48" fill="none" stroke="black"/>
              <path d="M 344,48 L 432,48" fill="none" stroke="black"/>
              <path d="M 472,48 L 560,48" fill="none" stroke="black"/>
              <path d="M 8,96 L 88,96" fill="none" stroke="black"/>
              <path d="M 184,96 L 272,96" fill="none" stroke="black"/>
              <path d="M 344,96 L 432,96" fill="none" stroke="black"/>
              <path d="M 472,96 L 560,96" fill="none" stroke="black"/>
              <path d="M 336,112 L 384,112" fill="none" stroke="black"/>
              <path d="M 400,112 L 504,112" fill="none" stroke="black"/>
              <path d="M 520,112 L 568,112" fill="none" stroke="black"/>
              <path d="M 232,160 L 392,160" fill="none" stroke="black"/>
              <path d="M 232,208 L 392,208" fill="none" stroke="black"/>
              <path d="M 224,256 L 384,256" fill="none" stroke="black"/>
              <path d="M 232,304 L 392,304" fill="none" stroke="black"/>
              <path d="M 80,320 L 176,320" fill="none" stroke="black"/>
              <path d="M 80,384 L 176,384" fill="none" stroke="black"/>
              <path d="M 48,480 L 216,480" fill="none" stroke="black"/>
              <path d="M 224,544 L 384,544" fill="none" stroke="black"/>
              <path d="M 392,560 L 504,560" fill="none" stroke="black"/>
              <path d="M 400,608 L 512,608" fill="none" stroke="black"/>
              <path d="M 232,672 L 392,672" fill="none" stroke="black"/>
              <path d="M 56,736 L 224,736" fill="none" stroke="black"/>
              <path d="M 336,32 C 327.16936,32 320,39.16936 320,48" fill="none" stroke="black"/>
              <path d="M 568,32 C 576.83064,32 584,39.16936 584,48" fill="none" stroke="black"/>
              <path d="M 336,112 C 327.16936,112 320,104.83064 320,96" fill="none" stroke="black"/>
              <path d="M 568,112 C 576.83064,112 584,104.83064 584,96" fill="none" stroke="black"/>
              <path d="M 80,320 C 71.16936,320 64,327.16936 64,336" fill="none" stroke="black"/>
              <path d="M 176,320 C 184.83064,320 192,327.16936 192,336" fill="none" stroke="black"/>
              <path d="M 208,352 C 199.16936,352 192,359.16936 192,368" fill="none" stroke="black"/>
              <path d="M 208,352 C 199.16936,352 192,344.83064 192,336" fill="none" stroke="black"/>
              <path d="M 208,352 C 216.83064,352 224,359.16936 224,368" fill="none" stroke="black"/>
              <path d="M 208,352 C 216.83064,352 224,344.83064 224,336" fill="none" stroke="black"/>
              <path d="M 80,384 C 71.16936,384 64,376.83064 64,368" fill="none" stroke="black"/>
              <path d="M 176,384 C 184.83064,384 192,376.83064 192,368" fill="none" stroke="black"/>
              <polygon class="arrowhead" points="512,560 500,554.4 500,565.6" fill="black" transform="rotate(0,504,560)"/>
              <polygon class="arrowhead" points="408,608 396,602.4 396,613.6" fill="black" transform="rotate(180,400,608)"/>
              <polygon class="arrowhead" points="392,544 380,538.4 380,549.6" fill="black" transform="rotate(0,384,544)"/>
              <polygon class="arrowhead" points="392,256 380,250.4 380,261.6" fill="black" transform="rotate(0,384,256)"/>
              <polygon class="arrowhead" points="240,672 228,666.4 228,677.6" fill="black" transform="rotate(180,232,672)"/>
              <polygon class="arrowhead" points="240,304 228,298.4 228,309.6" fill="black" transform="rotate(180,232,304)"/>
              <polygon class="arrowhead" points="240,208 228,202.4 228,213.6" fill="black" transform="rotate(180,232,208)"/>
              <polygon class="arrowhead" points="240,160 228,154.4 228,165.6" fill="black" transform="rotate(180,232,160)"/>
              <polygon class="arrowhead" points="224,480 212,474.4 212,485.6" fill="black" transform="rotate(0,216,480)"/>
              <polygon class="arrowhead" points="64,736 52,730.4 52,741.6" fill="black" transform="rotate(180,56,736)"/>
              <g class="text">
                <text x="44" y="68">Client</text>
                <text x="216" y="68">Relay</text>
                <text x="384" y="68">Gateway</text>
                <text x="508" y="68">Target</text>
                <text x="228" y="84">Resource</text>
                <text x="388" y="84">Resource</text>
                <text x="516" y="84">Resource</text>
                <text x="268" y="132">Initiate</text>
                <text x="320" y="132">TCP</text>
                <text x="272" y="148">handshake</text>
                <text x="268" y="180">Initiate</text>
                <text x="320" y="180">TLS</text>
                <text x="356" y="180">with</text>
                <text x="304" y="196">ALPN="h2-reverse"</text>
                <text x="312" y="228">CertificateRequest,</text>
                <text x="252" y="244">HTTP</text>
                <text x="308" y="244">SETTINGS</text>
                <text x="308" y="276">CertificateVerify,</text>
                <text x="272" y="292">SETTINGS,</text>
                <text x="340" y="292">ORIGIN</text>
                <text x="108" y="340">Validate</text>
                <text x="120" y="356">certificate</text>
                <text x="176" y="356">&amp;</text>
                <text x="92" y="372">role</text>
                <text x="148" y="372">reversal</text>
                <text x="80" y="420">Relay</text>
                <text x="88" y="436">Request</text>
                <text x="68" y="452">[+</text>
                <text x="132" y="452">Encapsulated</text>
                <text x="112" y="468">Request</text>
                <text x="152" y="468">]</text>
                <text x="264" y="484">Gateway</text>
                <text x="264" y="500">Request</text>
                <text x="244" y="516">[+</text>
                <text x="308" y="516">Encapsulated</text>
                <text x="288" y="532">Request</text>
                <text x="328" y="532">]</text>
                <text x="432" y="548">Request</text>
                <text x="468" y="596">Response</text>
                <text x="352" y="612">Gateway</text>
                <text x="348" y="628">Response</text>
                <text x="268" y="644">[+</text>
                <text x="332" y="644">Encapsulated</text>
                <text x="332" y="660">Response</text>
                <text x="376" y="660">]</text>
                <text x="160" y="676">Relay</text>
                <text x="148" y="692">Response</text>
                <text x="68" y="708">[+</text>
                <text x="132" y="708">Encapsulated</text>
                <text x="132" y="724">Response</text>
                <text x="176" y="724">]</text>
              </g>
            </svg>
          </artwork>
          <artwork type="ascii-art"><![CDATA[
                                        .------------------------------.
+---------+           +----------+     |  +----------+    +----------+  |
| Client  |           | Relay    |     |  | Gateway  |    | Target   |  |
|         |           | Resource |     |  | Resource |    | Resource |  |
+----+----+           +----+-----+     |  +-----+----+    +----+-----+  |
     |                     |            `-------|--------------|-------'
     |                     | Initiate TCP       |              |
     |                     | handshake          |              |
     |                     |<-------------------+              |
     |                     | Initiate TLS with  |              |
     |                     | ALPN="h2-reverse"  |              |
     |                     |<-------------------+              |
     |                     | CertificateRequest,|              |
     |                     | HTTP SETTINGS      |              |
     |                     +------------------->|              |
     |                     | CertificateVerify, |              |
     |                     | SETTINGS, ORIGIN   |              |
     |                     |<-------------------+              |
     |  .-------------.    |                    |              |
     | | Validate      |   |                    |              |
     | | certificate & |+-+|                    |              |
     | | role reversal |   |                    |              |
     |  `-------------'    |                    |              |
     |                     |                    |              |
     | Relay               |                    |              |
     | Request             |                    |              |
     | [+ Encapsulated     |                    |              |
     |    Request ]        |                    |              |
     +-------------------->| Gateway            |              |
     |                     | Request            |              |
     |                     | [+ Encapsulated    |              |
     |                     |    Request ]       |              |
     |                     +------------------->| Request      |
     |                     |                    +------------->|
     |                     |                    |              |
     |                     |                    |     Response |
     |                     |            Gateway |<-------------+
     |                     |           Response |              |
     |                     |    [+ Encapsulated |              |
     |                     |         Response ] |              |
     |           Relay     |<-------------------+              |
     |        Response     |                    |              |
     | [+ Encapsulated     |                    |              |
     |      Response ]     |                    |              |
     |<--------------------+                    |              |
     |                     |                    |              |
]]></artwork>
        </artset>
      </figure>
      <section anchor="use-with-transport-proxies">
        <name>Use with transport proxies</name>
        <t>Transport proxies do not normally act as HTTP clients, so they cannot use Reverse HTTP directly.  Instead, if a transport proxy receives a request whose destination host and port appears in the Origin Set, the proxy establishes a transport proxy connection to this origin over the Reverse HTTP connection.  For TCP, this corresponds to an HTTP CONNECT request, and for UDP it corresponds to an extended-CONNECT request with the "connect-udp" protocol, using the registered .well-known URI template.</t>
        <t>Note that transport destinations identified by an IP address can only use this mechanism if the origin's certificate includes that IP address explicitly.</t>
        <t>For IP relays, the destination does not include a port number.  The intermediary <bcp14>MUST</bcp14> add a port number of 443 before attempting to forward packets using this procedure.</t>
      </section>
      <section anchor="discovery-of-client-selected-intermediaries">
        <name>Discovery of client-selected intermediaries</name>
        <t>The HTTP "Via" header can indicate the presence of a client-selected intermediary.  If a "Via" header arrives with an unrecognized host, the origin <bcp14>MAY</bcp14> attempt a Reverse HTTP connection for use by future requests from this intermediary.  If the intermediary does not confirm the protocol via ALPN, the origin <bcp14>MUST</bcp14> close the connection.</t>
      </section>
    </section>
    <section anchor="svcb">
      <name>Service Binding mapping</name>
      <t>Intermediaries that support Reverse HTTP <bcp14>SHOULD</bcp14> indicate this by publishing a SVCB record with port-prefix naming, using the scheme "http-reverse" with a default port of 443.  Applicable SvcParamKeys include "alpn", "ipv4hint"/"ipv6hint", "port", and "ech".  There is no default ALPN value, so the "alpn" key is <bcp14>REQUIRED</bcp14>.</t>
      <figure>
        <name>Example records for a forward proxy that supports Reverse HTTP</name>
        <sourcecode type="Zone"><![CDATA[
proxy.example.net.               IN HTTPS 1 . alpn=h2,h3 ech=ABC..123
_http-reverse.proxy.example.net. IN SVCB  1 proxy.example.net. \
      alpn=h2-reverse,h3-reverse ech=ABC..123
]]></sourcecode>
      </figure>
    </section>
    <section anchor="operational-considerations">
      <name>Operational Considerations</name>
      <section anchor="efficiency">
        <name>Efficiency</name>
        <t>Reverse HTTP does not use appreciably more bandwidth or CPU time than ordinary HTTP on active connections.  However, it is much less efficient for idle connections, which use memory and other connection-related resources on the intermediary even when no requests are being processed.</t>
      </section>
      <section anchor="connection-management">
        <name>Connection management</name>
        <t>To accommodate loss of state in firewalls or translators, especially in the absence
of application traffic, the origin <bcp14>SHOULD</bcp14> use appropriate transport-level keepalives and <bcp14>MUST</bcp14>
re-establish a new connection when application-level communication has failed.</t>
        <t>Origins backed by multiple servers <bcp14>MAY</bcp14> attempt to establish a separate Reverse HTTP connection from each one in order to tolerate equipment failures and support optimized path selection.  However, intermediaries <bcp14>SHOULD</bcp14> limit the number of idle Reverse HTTP connections operated on behalf of each registrable domain, in order to avoid resource exhaustion attacks.</t>
        <t>For very high-traffic origins and multi-instance intermediaries, a disruption could occur if the intermediary immediately directs all user traffic onto the first Reverse HTTP connection.  Very large intermediaries <bcp14>SHOULD</bcp14> ensure that transitions to Reverse HTTP are gradual, so that large origins have time to establish multiple connections.</t>
      </section>
      <section anchor="non-public-origins">
        <name>Non-public origins</name>
        <t>In some cases, an HTTP origin may be intended exclusively for use via one or more client-selected intermediaries that are known to the origin.  In this situation, the publication of DNS records for the origin is <bcp14>OPTIONAL</bcp14>.</t>
      </section>
      <section anchor="other-applications">
        <name>Other applications</name>
        <t>Reverse HTTP is principally intended for use between intermediaries and origins.  It is not applicable to general HTTP clients, as it requires the origin to know that the client will issue a request before the request occurs.  However, in cases where the HTTP client is publicly reachable and produces frequent requests to one origin over a long period of time, Reverse HTTP may be applicable.</t>
      </section>
    </section>
    <section anchor="security">
      <name>Security Considerations</name>
      <section anchor="stolen-keys">
        <name>Stolen key attacks</name>
        <t>As noted in <xref section="4" sectionFormat="of" target="RFC8336"/>, accepting ORIGIN frames without DNS confirmation facilitates the use of stolen keys, and thus increases the incentive to steal these keys.  The mitigations listed in that section also apply here, and are <bcp14>RECOMMENDED</bcp14>.  Intermediaries also <bcp14>MAY</bcp14> impose a DNS confirmation requirement, although this weakens the DoS/DDoS defense provided by Reverse HTTP (<xref target="ip-leaks"/>).</t>
        <ul empty="true">
          <li>
            <t>QUESTION: Should we do more about this?  For example, we could define an OID to mark these certificates as Reverse HTTP-only, or we could commit to an IP range by placing a MAC in a DNS record and revealing the message via a SETTINGS value.</t>
          </li>
        </ul>
      </section>
      <section anchor="ip-leaks">
        <name>IP leaks</name>
        <t>One goal of Reverse HTTP is to prevent DoS/DDoS attackers from learning the IP addresses used by the origin to communicate with this intermediary.  This IP address can be leaked in various ways, requiring certain mitigations:</t>
        <ul spacing="normal">
          <li>
            <t>In the ordinary DNS address records for the origin.
            </t>
            <ul spacing="normal">
              <li>Origins <bcp14>SHOULD</bcp14> use different IPs for Reverse HTTP (unless the intermediary imposes a DNS confirmation requirement as described in <xref target="stolen-keys"/>).</li>
            </ul>
          </li>
          <li>
            <t>In the <tt>Proxy-Status</tt> HTTP header field's "next-hop" attribute.
            </t>
            <ul spacing="normal">
              <li>Intermediaries <bcp14>MUST NOT</bcp14> populate the "next-hop" attribute when using Reverse HTTP to the origin.</li>
            </ul>
          </li>
          <li>
            <t>From the probes sent to intermediaries discovered from the "Via" header field.
            </t>
            <ul spacing="normal">
              <li>Origins <bcp14>SHOULD</bcp14> use distinct, unrelated IP addresses to contact each intermediary.</li>
            </ul>
          </li>
          <li>
            <t>From connection monitoring of the ALPN values in ClientHellos.
            </t>
            <ul spacing="normal">
              <li>Intermediaries <bcp14>MAY</bcp14> use a single Encrypted ClientHello configuration for HTTP and Reverse HTTP.</li>
            </ul>
          </li>
          <li>
            <t>From statistical analysis of traffic patterns.
            </t>
            <ul spacing="normal">
              <li>Origins <bcp14>SHOULD</bcp14> regularly change the IP address that is used.</li>
            </ul>
          </li>
        </ul>
        <t>Even if the origin's Reverse HTTP IP addresses do leak, Reverse HTTP still provides significant protection by simplifying the firewall rules required to block unsolicited connections.</t>
      </section>
      <section anchor="key-consistency-with-oblivious-http">
        <name>Key consistency with Oblivious HTTP</name>
        <t>The security considerations for the Oblivious HTTP protocol (Section 8 of <xref target="OHTTP"/>) as well as the security considerations for
Discovery of Oblivious Services via Service Binding Records (Section 6 of <xref target="OHAI-SVCB"/>) apply. <xref target="CONSISTENCY"/>
provides an analysis of the options for ensuring the key configurations are consistent between different clients. Clients <bcp14>MUST</bcp14> employ
some technique to mitigate key targeting attacks. Note that the option of confirming the key with a shared proxy as described in <xref target="CONSISTENCY"/>
will work if the Oblivious HTTP relay and the forward proxy operate from a single origin.</t>
      </section>
    </section>
    <section anchor="iana">
      <name>IANA Considerations</name>
      <section anchor="iana-alpn">
        <name>ALPN IDs</name>
        <t>This document creates two new registrations in the "TLS Application-Layer Protocol Negotiation (ALPN) Protocol IDs" registry
<xref target="RFC7301"/>:</t>
        <table>
          <thead>
            <tr>
              <th align="left">Protocol</th>
              <th align="left">Identification Sequence</th>
              <th align="left">Specification</th>
            </tr>
          </thead>
          <tbody>
            <tr>
              <td align="left">Reverse HTTP/2</td>
              <td align="left">0x68 0x32 0x2d 0x72 0x65 0x76 0x65 0x72 0x73 0x65 ("h2-reverse")</td>
              <td align="left">(This document)</td>
            </tr>
            <tr>
              <td align="left">Reverse HTTP/3</td>
              <td align="left">0x68 0x33 0x2d 0x72 0x65 0x76 0x65 0x72 0x73 0x65 ("h3-reverse")</td>
              <td align="left">(This document)</td>
            </tr>
          </tbody>
        </table>
      </section>
      <section anchor="new-scheme">
        <name>New Scheme</name>
        <t>Per <xref target="Attrleaf"/>, IANA is directed to add the following entry to the DNS Underscore Global Scoped Entry Registry:</t>
        <table>
          <thead>
            <tr>
              <th align="left">RR TYPE</th>
              <th align="left">_NODE NAME</th>
              <th align="left">Reference</th>
            </tr>
          </thead>
          <tbody>
            <tr>
              <td align="left">SVCB</td>
              <td align="left">_http-reverse</td>
              <td align="left">(This document, <xref target="svcb"/>)</td>
            </tr>
          </tbody>
        </table>
        <ul empty="true">
          <li>
            <t>TODO: Register the URI scheme as well.</t>
          </li>
        </ul>
      </section>
    </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"/>
            <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="RFC8336">
          <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>
        <reference anchor="RFC7301">
          <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>
      </references>
      <references>
        <name>Informative References</name>
        <reference anchor="RFC9110">
          <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="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="I-D.draft-ietf-masque-connect-ip">
          <front>
            <title>Proxying IP in HTTP</title>
            <author fullname="Tommy Pauly" initials="T." surname="Pauly">
              <organization>Apple Inc.</organization>
            </author>
            <author fullname="David Schinazi" initials="D." surname="Schinazi">
              <organization>Google LLC</organization>
            </author>
            <author fullname="Alex Chernyakhovsky" initials="A." surname="Chernyakhovsky">
              <organization>Google LLC</organization>
            </author>
            <author fullname="Mirja Kühlewind" initials="M." surname="Kühlewind">
              <organization>Ericsson</organization>
            </author>
            <author fullname="Magnus Westerlund" initials="M." surname="Westerlund">
              <organization>Ericsson</organization>
            </author>
            <date day="28" month="April" year="2023"/>
            <abstract>
              <t>   This document describes how to proxy IP packets in HTTP.  This
   protocol is similar to UDP proxying in HTTP, but allows transmitting
   arbitrary IP packets.  More specifically, this document defines a
   protocol that allows an HTTP client to create an IP tunnel through an
   HTTP server that acts as an IP proxy.  This document updates RFC
   9298.

              </t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-ietf-masque-connect-ip-13"/>
        </reference>
        <reference anchor="I-D.draft-ietf-ohai-ohttp">
          <front>
            <title>Oblivious HTTP</title>
            <author fullname="Martin Thomson" initials="M." surname="Thomson">
              <organization>Mozilla</organization>
            </author>
            <author fullname="Christopher A. Wood" initials="C. A." surname="Wood">
              <organization>Cloudflare</organization>
            </author>
            <date day="15" month="March" year="2023"/>
            <abstract>
              <t>   This document describes a system for forwarding encrypted HTTP
   messages.  This allows a client to make multiple requests to an
   origin server without that server being able to link those requests
   to the client or to identify the requests as having come from the
   same client, while placing only limited trust in the nodes used to
   forward the messages.

              </t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-ietf-ohai-ohttp-08"/>
        </reference>
        <reference anchor="OHTTP">
          <front>
            <title>Oblivious HTTP</title>
            <author fullname="Martin Thomson" initials="M." surname="Thomson">
              <organization>Mozilla</organization>
            </author>
            <author fullname="Christopher A. Wood" initials="C. A." surname="Wood">
              <organization>Cloudflare</organization>
            </author>
            <date day="15" month="March" year="2023"/>
            <abstract>
              <t>   This document describes a system for forwarding encrypted HTTP
   messages.  This allows a client to make multiple requests to an
   origin server without that server being able to link those requests
   to the client or to identify the requests as having come from the
   same client, while placing only limited trust in the nodes used to
   forward the messages.

              </t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-ietf-ohai-ohttp-08"/>
        </reference>
        <reference anchor="OHAI-SVCB">
          <front>
            <title>Discovery of Oblivious Services via Service Binding Records</title>
            <author fullname="Tommy Pauly" initials="T." surname="Pauly">
              <organization>Apple Inc.</organization>
            </author>
            <author fullname="Tirumaleswar Reddy.K" initials="T." surname="Reddy.K">
              <organization>Nokia</organization>
            </author>
            <date day="19" month="June" year="2023"/>
            <abstract>
              <t>   This document defines a parameter that can be included in SVCB and
   HTTPS DNS resource records to denote that a service is accessible
   using Oblivious HTTP, by offering an Oblivious Gateway Resource
   through which to access the target.  This document also defines a
   mechanism to learn the key configuration of the discovered Oblivious
   Gateway Resource.

              </t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-ietf-ohai-svcb-config-04"/>
        </reference>
        <reference anchor="CONSISTENCY">
          <front>
            <title>Key Consistency and Discovery</title>
            <author fullname="Alex Davidson" initials="A." surname="Davidson">
              <organization>Brave Software</organization>
            </author>
            <author fullname="Matthew Finkel" initials="M." surname="Finkel">
              <organization>The Tor Project</organization>
            </author>
            <author fullname="Martin Thomson" initials="M." surname="Thomson">
              <organization>Mozilla</organization>
            </author>
            <author fullname="Christopher A. Wood" initials="C. A." surname="Wood">
              <organization>Cloudflare</organization>
            </author>
            <date day="24" month="October" year="2022"/>
            <abstract>
              <t>   This document describes the key consistency and correctness
   requirements of protocols such as Privacy Pass, Oblivious DoH, and
   Oblivious HTTP for user privacy.  It discusses several mechanisms and
   proposals for enabling user privacy in varying threat models.  In
   concludes with discussion of open problems in this area.

              </t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-ietf-privacypass-key-consistency-00"/>
        </reference>
        <reference anchor="Attrleaf">
          <front>
            <title>Scoped Interpretation of DNS Resource Records through "Underscored" Naming of Attribute Leaves</title>
            <author fullname="D. Crocker" initials="D." surname="Crocker"/>
            <date month="March" year="2019"/>
            <abstract>
              <t>Formally, any DNS Resource Record (RR) may occur under any domain name. However, some services use an operational convention for defining specific interpretations of an RRset by locating the records in a DNS branch under the parent domain to which the RRset actually applies. The top of this subordinate branch is defined by a naming convention that uses a reserved node name, which begins with the underscore character (e.g., "_name"). The underscored naming construct defines a semantic scope for DNS record types that are associated with the parent domain above the underscored branch. This specification explores the nature of this DNS usage and defines the "Underscored and Globally Scoped DNS Node Names" registry with IANA. The purpose of this registry is to avoid collisions resulting from the use of the same underscored name for different services.</t>
            </abstract>
          </front>
          <seriesInfo name="BCP" value="222"/>
          <seriesInfo name="RFC" value="8552"/>
          <seriesInfo name="DOI" value="10.17487/RFC8552"/>
        </reference>
      </references>
    </references>
  </back>
  <!-- ##markdown-source:
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

-->

</rfc>
