<?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.1 (Ruby 3.2.2) -->
<rfc xmlns:xi="http://www.w3.org/2001/XInclude" ipr="trust200902" docName="draft-bt-httpbis-reverse-http-01" category="std" consensus="true" submissionType="IETF" tocInclude="true" sortRefs="true" symRefs="true" version="3">
  <!-- xml2rfc v2v3 conversion 3.18.2 -->
  <front>
    <title abbrev="Reverse HTTP">Reverse HTTP Transport</title>
    <seriesInfo name="Internet-Draft" value="draft-bt-httpbis-reverse-http-01"/>
    <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>
    <author initials="M." surname="Boucadair" fullname="Mohamed Boucadair">
      <organization>Orange</organization>
      <address>
        <email>mohamed.boucadair@orange.com</email>
      </address>
    </author>
    <author initials="P. S." surname="Tiesel" fullname="Philipp S. Tiesel">
      <organization>SAP SE</organization>
      <address>
        <email>philipp@tiesel.net</email>
      </address>
    </author>
    <date year="2023" month="October" day="23"/>
    <area>ART</area>
    <workgroup>HTTPBIS</workgroup>
    <keyword>Internet-Draft</keyword>
    <abstract>
      <?line 42?>

<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>
    <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-httpbis-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 47?>

<section anchor="introduction">
      <name>Introduction</name>
      <t>The Hypertext Transfer Protocol (HTTP) has long supported the ability of clients to access origins via an intermediary. There are a variety of well-defined intermediary types:</t>
      <ul spacing="normal">
        <li>
          <t>Client-selected
          </t>
          <ul spacing="normal">
            <li>
              <t>HTTP request proxies (a.k.a. forward proxies)</t>
            </li>
            <li>
              <t>Transport proxies (e.g., CONNECT (<xref section="9.3.6" sectionFormat="of" target="RFC9110"/>), CONNECT-UDP <xref target="RFC9298"/>)</t>
            </li>
            <li>
              <t>IP relays (e.g., CONNECT-IP <xref target="I-D.ietf-masque-connect-ip"/>)</t>
            </li>
            <li>
              <t>Oblivious HTTP Relays <xref target="I-D.ietf-ohai-ohttp"/></t>
            </li>
          </ul>
        </li>
        <li>
          <t>Origin-selected
          </t>
          <ul spacing="normal">
            <li>
              <t>HTTP gateways (a.k.a. reverse proxies)</t>
            </li>
            <li>
              <t>Transport load balancers (e.g., Performance-Enhancing Proxies (PEPs, Section 2.1.1 of <xref target="RFC3135"/>)</t>
            </li>
          </ul>
        </li>
      </ul>
      <t>Although these intermediaries differ widely in their functionality, many of them act as an HTTP 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 address 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 an attacker floods the origin server with requests/packets.  To prevent attackers from simply bypassing the intermediary, common practices include keeping the backend address hidden and/or instituting filtering rules (ACL, typically) 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 hidden backend IP address and/or port number, 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 DoS/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 roles of the Transport Layer Security (TLS) or QUIC transport that supports an HTTP connection: the origin acts as the transport client, and the intermediary acts as the server. HTTP operates normally inside the secure transport 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>Reverse HTTP: Protocol Overview</name>
      <t>The protocol defined in this document 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"/>).  These protocols represent HTTP/2 and HTTP/3, operating with the roles reversed but otherwise unmodified, except as follows:</t>
      <ul spacing="normal">
        <li>
          <t>The intermediary <bcp14>MUST</bcp14> send a TLS CertificateRequest message (<xref section="4.4.2" sectionFormat="of" target="RFC8446"/>) to indicate that certificate-based client authentication is required.</t>
        </li>
        <li>
          <t>The origin <bcp14>MUST</bcp14> respond with a valid certificate chain.</t>
        </li>
        <li>
          <t>Each party <bcp14>MUST</bcp14> send a SETTINGS frame (<xref section="6.5" sectionFormat="of" target="RFC9113"/>) as soon as the transport becomes writable to them.  This means that the intermediary will typically send its SETTINGS frame first.</t>
        </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>
              <t>Otherwise, use of Reverse HTTP with wildcard certificates would be impossible.</t>
            </li>
          </ul>
        </li>
        <li>
          <t>The intermediary <bcp14>MUST</bcp14> check the ORIGIN frame contents against the provided TLS client certificate.</t>
        </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 absent explicit policy (e.g., overload limit or ACL). For example, a policy can be provided to the intermediary to help determining unacceptable load threshold.</t>
      <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 number appears in the Origin Set, the proxy establishes a transport proxy connection to this origin over the Reverse HTTP connection.  For example, this corresponds to an HTTP CONNECT request for TCP, 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. By default, 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 <xref target="I-D.ietf-dnsop-svcb-https"/> with port-prefix naming, using the scheme "http-reverse" with a default port number of 443. Applicable SvcParamKeys include "alpn", "ipv4hint"/"ipv6hint", and "port". 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="compatibility">
        <name>Compatibility</name>
        <t>Reverse HTTP applies to a single hop of a multihop HTTP connection, especially the hop between an intermediary and the origin.  When used in this way, Reverse HTTP is compatible with any ordinary HTTP user agent, and user agents ordinarily cannot tell that Reverse HTTP is in use.  (Reverse HTTP does not alter the contents of the "Via" response header.)</t>
      </section>
      <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 (<xref section="2" sectionFormat="of" target="RFC6269"/>), 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 an 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 node 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. A local configuration may be provided to an intermediary to control the maximum number of active connections.</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>
        <ul empty="true">
          <li>
            <t>Note: define more what is meant precisly by "Very large", "multi-instance", etc.</t>
          </li>
        </ul>
      </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 outside a domain 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 that the origin knows that the client will issue a request before the request occurs.  However, in cases where an HTTP client is publicly reachable and produces frequent requests to one origin over a long period of time, Reverse HTTP may be applicable. It is out of scope of this document to identify a comprehensive list of the protocol applicability.</t>
      </section>
    </section>
    <section anchor="an-example">
      <name>An Example</name>
      <t>The following shows the example of the reverse HTTP in the context of Oblivious HTTP deployments.</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" stroke-linecap="round">
              <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>
    <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 Address Leaks</name>
        <t>One goal of Reverse HTTP is to prevent DoS/DDoS attackers from learning the IP addresses used by an origin to communicate with this intermediary. These IP addresses 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>
                <t>Origins <bcp14>SHOULD</bcp14> use different IP addresses for Reverse HTTP (unless the intermediary imposes a DNS confirmation requirement as described in <xref target="stolen-keys"/>).</t>
              </li>
            </ul>
          </li>
          <li>
            <t>In the <tt>Proxy-Status</tt> HTTP header field's "next-hop" attribute.
            </t>
            <ul spacing="normal">
              <li>
                <t>Intermediaries <bcp14>MUST NOT</bcp14> populate the "next-hop" attribute when using Reverse HTTP to the origin.</t>
              </li>
            </ul>
          </li>
          <li>
            <t>From the probes sent to intermediaries discovered from the "Via" header field.
            </t>
            <ul spacing="normal">
              <li>
                <t>Origins <bcp14>SHOULD</bcp14> use distinct, unrelated IP addresses to contact each intermediary.</t>
              </li>
            </ul>
          </li>
          <li>
            <t>From connection monitoring of the ALPN values in ClientHellos.
            </t>
            <ul spacing="normal">
              <li>
                <t>Intermediaries <bcp14>MAY</bcp14> use a single Encrypted ClientHello configuration for HTTP and Reverse HTTP.</t>
              </li>
            </ul>
          </li>
          <li>
            <t>From statistical analysis of traffic patterns.
            </t>
            <ul spacing="normal">
              <li>
                <t>Origins <bcp14>SHOULD</bcp14> regularly change the IP address that is used.</t>
              </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 filtering 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  (<xref section="8" sectionFormat="of" target="OHTTP"/>) as well as the security considerations for
Discovery of Oblivious Services via Service Binding Records (<xref section="6" sectionFormat="of" target="OHAI-SVCB"/>) apply.</t>
        <t><xref target="CONSISTENCY"/>
provides an analysis of the options for ensuring the key configurations are consistent between different clients. Clients <bcp14>MUST</bcp14> employ
techniques 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 rquests IANA to add 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 requested 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 anchor="sec-normative-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="RFC8446">
          <front>
            <title>The Transport Layer Security (TLS) Protocol Version 1.3</title>
            <author fullname="E. Rescorla" initials="E." surname="Rescorla"/>
            <date month="August" year="2018"/>
            <abstract>
              <t>This document specifies version 1.3 of the Transport Layer Security (TLS) protocol. TLS allows client/server applications to communicate over the Internet in a way that is designed to prevent eavesdropping, tampering, and message forgery.</t>
              <t>This document updates RFCs 5705 and 6066, and obsoletes RFCs 5077, 5246, and 6961. This document also specifies new requirements for TLS 1.2 implementations.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="8446"/>
          <seriesInfo name="DOI" value="10.17487/RFC8446"/>
        </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="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="I-D.ietf-dnsop-svcb-https">
          <front>
            <title>Service binding and parameter specification via the DNS (DNS SVCB and HTTPS RRs)</title>
            <author fullname="Benjamin M. Schwartz" initials="B. M." surname="Schwartz">
              <organization>Google</organization>
            </author>
            <author fullname="Mike Bishop" initials="M." surname="Bishop">
              <organization>Akamai Technologies</organization>
            </author>
            <author fullname="Erik Nygren" initials="E." surname="Nygren">
              <organization>Akamai Technologies</organization>
            </author>
            <date day="11" month="March" year="2023"/>
            <abstract>
              <t>   This document specifies the "SVCB" and "HTTPS" DNS resource record
   (RR) types to facilitate the lookup of information needed to make
   connections to network services, such as for HTTP origins.  SVCB
   records allow a service to be provided from multiple alternative
   endpoints, each with associated parameters (such as transport
   protocol configuration), and are extensible to support future uses
   (such as keys for encrypting the TLS ClientHello).  They also enable
   aliasing of apex domains, which is not possible with CNAME.  The
   HTTPS RR is a variation of SVCB for use with HTTP [HTTP].  By
   providing more information to the client before it attempts to
   establish a connection, these records offer potential benefits to
   both performance and privacy.

   TO BE REMOVED: This document is being collaborated on in Github at:
   https://github.com/MikeBishop/dns-alt-svc
   (https://github.com/MikeBishop/dns-alt-svc).  The most recent working
   version of the document, open issues, etc. should all be available
   there.  The authors (gratefully) accept pull requests.

              </t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-ietf-dnsop-svcb-https-12"/>
        </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 anchor="sec-informative-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.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.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="25" month="August" year="2023"/>
            <abstract>
              <t>   This document describes Oblivious HTTP, a protocol for forwarding
   encrypted HTTP messages.  Oblivious HTTP 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-10"/>
        </reference>
        <reference anchor="RFC3135">
          <front>
            <title>Performance Enhancing Proxies Intended to Mitigate Link-Related Degradations</title>
            <author fullname="J. Border" initials="J." surname="Border"/>
            <author fullname="M. Kojo" initials="M." surname="Kojo"/>
            <author fullname="J. Griner" initials="J." surname="Griner"/>
            <author fullname="G. Montenegro" initials="G." surname="Montenegro"/>
            <author fullname="Z. Shelby" initials="Z." surname="Shelby"/>
            <date month="June" year="2001"/>
            <abstract>
              <t>This document is a survey of Performance Enhancing Proxies (PEPs) often employed to improve degraded TCP performance caused by characteristics of specific link environments, for example, in satellite, wireless WAN, and wireless LAN environments. This memo provides information for the Internet community.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="3135"/>
          <seriesInfo name="DOI" value="10.17487/RFC3135"/>
        </reference>
        <reference anchor="RFC6269">
          <front>
            <title>Issues with IP Address Sharing</title>
            <author fullname="M. Ford" initials="M." role="editor" surname="Ford"/>
            <author fullname="M. Boucadair" initials="M." surname="Boucadair"/>
            <author fullname="A. Durand" initials="A." surname="Durand"/>
            <author fullname="P. Levis" initials="P." surname="Levis"/>
            <author fullname="P. Roberts" initials="P." surname="Roberts"/>
            <date month="June" year="2011"/>
            <abstract>
              <t>The completion of IPv4 address allocations from IANA and the Regional Internet Registries (RIRs) is causing service providers around the world to question how they will continue providing IPv4 connectivity service to their subscribers when there are no longer sufficient IPv4 addresses to allocate them one per subscriber. Several possible solutions to this problem are now emerging based around the idea of shared IPv4 addressing. These solutions give rise to a number of issues, and this memo identifies those common to all such address sharing approaches. Such issues include application failures, additional service monitoring complexity, new security vulnerabilities, and so on. Solution-specific discussions are out of scope.</t>
              <t>Deploying IPv6 is the only perennial way to ease pressure on the public IPv4 address pool without the need for address sharing mechanisms that give rise to the issues identified herein. This document is not an Internet Standards Track specification; it is published for informational purposes.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="6269"/>
          <seriesInfo name="DOI" value="10.17487/RFC6269"/>
        </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="25" month="August" year="2023"/>
            <abstract>
              <t>   This document describes Oblivious HTTP, a protocol for forwarding
   encrypted HTTP messages.  Oblivious HTTP 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-10"/>
        </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="6" month="October" 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-07"/>
        </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="10" month="July" year="2023"/>
            <abstract>
              <t>   This document describes the consistency requirements of protocols
   such as Privacy Pass, Oblivious DoH, and Oblivious HTTP for user
   privacy.  It presents definitions for consistency and then surveys
   mechanisms for providing consistency 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-01"/>
        </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>
