<?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.23 (Ruby 3.3.6) -->
<rfc xmlns:xi="http://www.w3.org/2001/XInclude" ipr="trust200902" docName="draft-various-httpbis-h3-webtrans-00" category="std" consensus="true" submissionType="IETF" tocInclude="true" sortRefs="true" symRefs="true" version="3">
  <!-- xml2rfc v2v3 conversion 3.27.0 -->
  <front>
    <title abbrev="HTTP/3 over WebTransport">Forward and Reverse HTTP/3 over WebTransport</title>
    <seriesInfo name="Internet-Draft" value="draft-various-httpbis-h3-webtrans-00"/>
    <author fullname="Benjamin M. Schwartz">
      <organization>Meta Platforms, Inc.</organization>
      <address>
        <email>ietf@bemasc.net</email>
      </address>
    </author>
    <author initials="Y." surname="Rosomakho" fullname="Yaroslav Rosomakho">
      <organization>Zscaler</organization>
      <address>
        <email>yrosomakho@zscaler.com</email>
      </address>
    </author>
    <date year="2025" month="February" day="19"/>
    <area/>
    <workgroup>HTTP</workgroup>
    <abstract>
      <?line 48?>

<t>HTTP/3 was initially specified only for use with the QUIC version 1 transport protocol.  This specification defines how to use HTTP/3 over a WebTransport session, which can be implemented using any WebTransport protocol.  This enables operation of HTTP/3 when UDP based transport is not available, as well as server-initiated HTTP/3 requests.</t>
    </abstract>
    <note removeInRFC="true">
      <name>About This Document</name>
      <t>
        The latest revision of this draft can be found at <eref target="https://bemasc.github.io/h3-webtrans/draft-various-httpbis-h3-webtrans.html"/>.
        Status information for this document may be found at <eref target="https://datatracker.ietf.org/doc/draft-various-httpbis-h3-webtrans/"/>.
      </t>
      <t>
        Discussion of this document takes place on the
        HTTP  mailing list (<eref target="mailto:ietf-http-wg@w3.org"/>),
        which is archived at <eref target="https://lists.w3.org/Archives/Public/ietf-http-wg/"/>.
      </t>
      <t>Source for this draft and an issue tracker can be found at
        <eref target="https://github.com/bemasc/h3-webtrans"/>.</t>
    </note>
  </front>
  <middle>
    <?line 52?>

<section anchor="introduction">
      <name>Introduction</name>
      <t>HTTP versions 2 <xref target="H2"/> and earlier were primarily specified to run over a reliable stream transport.  Initially, this transport was normally TCP, but TLS over TCP <xref target="TLS13"/> is now often used instead.  Other reliable stream transports are also used, especially for interprocess HTTP requests on a single host.</t>
      <t>HTTP version 3 <xref target="H3"/> was specified only to run on QUIC version 1 <xref target="QUIC"/>, but its specification anticipates support for other transports (<xref section="3.2" sectionFormat="comma" target="H3"/>):</t>
      <ul empty="true">
        <li>
          <t>The use of other QUIC transport versions with HTTP/3 <bcp14>MAY</bcp14> be defined by future specifications.</t>
        </li>
      </ul>
      <t>In fact, nothing in HTTP/3 relies on the transport being a QUIC version at all, so long as it provides transport capabilities similar to QUICv1.  These include:</t>
      <ul spacing="normal">
        <li>
          <t>A session establishment procedure.</t>
        </li>
        <li>
          <t>Support for multiple streams within a session.</t>
        </li>
        <li>
          <t>Unidirectional and bidirectional streams, initiated by either party.</t>
        </li>
        <li>
          <t>Transmission of independent datagrams (for HTTP/3 Datagrams <xref target="HTTP-DGRAM"/>).</t>
        </li>
      </ul>
      <t>Another transport system that provides these capabilities is the WebTransport session interface <xref target="WEBTRANS"/>, which we refer to here as "WebTransport".  WebTransport can be implemented within an HTTP/2 <xref target="WEBTRANS-H2"/> or HTTP/3 <xref target="WEBTRANS-H3"/> connection, and implementations based on WebSocket and other protocols have been proposed.  A WebTransport server endpoint can always be identified by a URI, which might or might not use the "https" URI scheme.</t>
      <t>After a WebTransport session is established, the interface presented to the client and server are largely identical.  Either party can open or accept new streams of either type, send datagrams, and eventually terminate the session.  Thus, once we have defined HTTP/3 over WebTransport (H3-WT), it is straightforward to define Reverse H3-WT, in which the HTTP client and server roles are reversed.</t>
      <t>H3-WT is a general-purpose specification that may be put to various uses.  One motivating use case for Forward H3-WT is to enable HTTP/3 over a TCP-based WebTransport protocol, for cases where the client and server prefer HTTP/3 but a network element only permits TCP.  Other creative uses are also possible.</t>
      <t>For Reverse H3-WT, one motivating use case is to enable a hidden backend server to delegate TCP server functions to a proxy server.  With this specification, the hidden backend can create a Reverse H3-WT session over which the proxy can issue multiple HTTP CONNECT requests.</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 anchor="roles">
        <name>Roles</name>
        <t>To distinguish actions on the WebTransport session from actions on the H3-WT connection that it carries, we define the following roles:</t>
        <ul spacing="normal">
          <li>
            <t>Dialer - initiates the WebTransport session</t>
          </li>
          <li>
            <t>Listener - accepts the WebTransport session</t>
          </li>
          <li>
            <t>Client - sends requests on the H3-WT session</t>
          </li>
          <li>
            <t>Server - receives these HTTP requests</t>
          </li>
          <li>
            <t>Participant - A Client or Server.</t>
          </li>
        </ul>
        <t>In Forward H3-WT, the Dialer is the Client.  In Reverse H3-WT, the Dialer is the Server.</t>
      </section>
    </section>
    <section anchor="specification">
      <name>Specification</name>
      <section anchor="establishment">
        <name>Establishment</name>
        <t>Establishment of an H3-WT session is not constrained by this specification.  Any new WebTransport session <bcp14>MAY</bcp14> be used with this specification, subject to prior arrangement by the endpoints.  This specification does not constrain any URLs or protocol IDs associated with the session establishment process.</t>
        <t>A future specification could allocate TLS ALPN IDs that indicate the use of this specification with a particular WebTransport protocol.</t>
      </section>
      <section anchor="applicability">
        <name>Applicability</name>
        <t>An H3-WT connection can carry HTTP requests with any method, scheme, authority, and path.  These values are not constrained by any similar values that may have applied to the WebTransport session itself.  For example, if the Listener's URI is "https://my-origin.example.com/wt", this does not limit the origins to which requests may be sent on the H3-WT connection.</t>
        <t>Clients <bcp14>MUST</bcp14> determine the permissible set of origins for an H3-WT session by private arrangement (see <xref target="security-considerations"/>).  Servers <bcp14>SHOULD</bcp14> send an ORIGIN frame <xref target="ORIGIN"/> at the beginning of the connection to indicate which origins are actually available on the session, unless that set is unambiguous (i.e., fixed by private arrangement) or unbounded (e.g., in the case of a proxy service).</t>
      </section>
      <section anchor="streams">
        <name>Streams</name>
        <t>To create a stream, participants use WebTransport's "create a unidirectional stream" or "create a bidirectional stream" operation.  If this operation fails, it <bcp14>MUST</bcp14> produce a connection error of type H3_STREAM_CREATION_ERROR.</t>
        <t>To accept a stream, participants use WebTransport's "receive a unidirectional stream" and "receive a bidirectional stream" operations.  Participants <bcp14>MUST</bcp14> accept additional unidirectional streams whenever there are fewer than 3 active, and <bcp14>SHOULD</bcp14> accept additional bidirectional streams whenever there are fewer than 100.</t>
        <t>If the Client receives a bidirectional stream, and no HTTP extension has been negotiated to permit this stream, it <bcp14>MUST</bcp14> produce a connection error of type H3_STREAM_CREATION_ERROR.</t>
        <section anchor="stream-ids">
          <name>Stream IDs</name>
          <t>WebTransport streams do not expose a Stream ID.  To enable HTTP/3 functions that rely on Stream IDs, such as GOAWAY (<xref section="7.2.6" sectionFormat="comma" target="H3"/>) and Datagrams, the creator of each stream <bcp14>MUST</bcp14> write the H3-WT Stream ID at the beginning of each stream, and the H3-WT receiver must consume this Stream ID before passing the stream to HTTP/3.</t>
          <t>The H3-WT Stream ID is encoded as a QUIC variable-length integer (<xref section="16" sectionFormat="comma" target="QUIC"/>) and follows the QUICv1 stream numbering convention (<xref section="2.1" sectionFormat="comma" target="QUIC"/>), so the Client's first stream has stream ID 0x00.</t>
        </section>
      </section>
      <section anchor="datagrams">
        <name>Datagrams</name>
        <t>If SETTINGS_H3_DATAGRAM was negotiated on the H3-WT connection, participants send and receive each HTTP/3 Datagram using the WebTransport "send a datagram" and "receive a datagram" operations.  HTTP/3 <bcp14>MUST</bcp14> derive the datagram's Quarter Stream ID from the corresponding stream's H3-WT Stream ID.</t>
        <t>Note that datagrams in H3-WT may be unreliable even when H3-WT is running over a reliable protocol, as the HTTP request or the WebTransport session may be forwarded by an intermediary onto a connection that uses a different protocol.</t>
      </section>
      <section anchor="closure-and-errors">
        <name>Closure and Errors</name>
        <t>When closing a stream successfully, participants use the WebTransport "send bytes" operation with a FIN indication.  Receipt of a FIN indication in "receive bytes" indicates successful completion of the stream.</t>
        <t>When closing a stream abruptly, the stream error code is passed to the WebTransport "abort send side" or "abort receive side" operation as appropriate, and retrieved by the other participant from the "send side aborted" or "receive side aborted" event.</t>
        <t>An H3-WT connection is terminated using the WebTransport "terminate a session" operation.  The connection error is passed to this operation and retrieved by the other participant from the "session terminated" event.</t>
      </section>
    </section>
    <section anchor="security-considerations">
      <name>Security Considerations</name>
      <t>HTTP clients generally rely on the transport (TCP, TLS, or QUIC) to ensure that they are connected to the intended server before sending a request.  For "https" URIs, this involves TLS server authentication.  In H3-WT, the implementor is responsible for employing suitable authentication of the WebTransport session.  WebTransport guarantees TLS-equivalent authentication of the Listener to the Dialer, which may be sufficient for some Forward H3-WT deployments.  Authentication of the Dialer to the Listener can be accomplished using TLS client authentication (if exposed by the WebTransport protocol), HTTP Authentication (when using WebTransport over HTTP), or Capability URLs <xref target="CAPABILITY"/> (when using WebTransport with a URI scheme that supports a non-empty path).</t>
      <t>If the WebTransport protocol exposes a TLS Exported Authenticator capability, participants <bcp14>MAY</bcp14> use it to enable Secondary Certificate Authentication <xref target="I-D.ietf-httpbis-secondary-server-certs"/> and/or HTTP Concealed Authentication <xref target="RFC9729"/> within the H3-WT session.</t>
    </section>
    <section anchor="examples">
      <name>Examples</name>
      <section anchor="hidden-origin-configuration">
        <name>Hidden Origin Configuration</name>
        <t>In some cases, it can be desirable for an HTTP origin server to operate through a public gateway without exposing a publicly reachable IP address.  For example, the origin server might be subject to request flood attacks if its IP address were publicly reachable.  Reverse H3-WT allows a hidden origin server to make itself available only to the gateway.</t>
        <t>One potential implementation proceeds as follows:</t>
        <ol spacing="normal" type="1"><li>
            <t>The public gateway instructs the origin operator to use "https://gateway.example/reverse/$customer_id" as the URL for Reverse H3-WT, along with a specified secret Bearer token.</t>
          </li>
          <li>
            <t>The origin operator selects a generic HTTP gateway implementation that supports Reverse H3-WT over HTTP with Bearer authentication, and configures it to forward requests to the origin server.</t>
          </li>
          <li>
            <t>The origin operator configures this local gateway with the specified URL and Bearer token for Reverse H3-WT.</t>
          </li>
          <li>
            <t>The local gateway opens a WebTransport session to the public gateway using an Extended CONNECT request to the specified URL.</t>
          </li>
          <li>
            <t>The public gateway verifies that the Extended CONNECT request carries the correct Bearer token for this customer ID.</t>
          </li>
          <li>
            <t>The local gateway uses the ORIGIN frame to enumerate the origins that are available on this session.</t>
          </li>
          <li>
            <t>The public gateway validates that this customer is permitted to serve the indicated origins.</t>
          </li>
          <li>
            <t>The public gateway starts forwarding incoming HTTP requests for those origins over this session.</t>
          </li>
        </ol>
        <figure>
          <name>Hidden Origin Configuration</name>
          <artset>
            <artwork type="svg"><svg xmlns="http://www.w3.org/2000/svg" version="1.1" height="368" width="304" viewBox="0 0 304 368" class="diagram" text-anchor="middle" font-family="monospace" font-size="13px" stroke-linecap="round">
                <path d="M 40,32 L 40,64" fill="none" stroke="black"/>
                <path d="M 40,304 L 40,336" fill="none" stroke="black"/>
                <path d="M 104,72 L 104,112" fill="none" stroke="black"/>
                <path d="M 104,144 L 104,216" fill="none" stroke="black"/>
                <path d="M 104,264 L 104,304" fill="none" stroke="black"/>
                <path d="M 168,32 L 168,64" fill="none" stroke="black"/>
                <path d="M 176,304 L 176,336" fill="none" stroke="black"/>
                <path d="M 40,32 L 168,32" fill="none" stroke="black"/>
                <path d="M 40,64 L 168,64" fill="none" stroke="black"/>
                <path d="M 56,112 L 152,112" fill="none" stroke="black"/>
                <path d="M 56,144 L 152,144" fill="none" stroke="black"/>
                <path d="M 56,224 L 160,224" fill="none" stroke="black"/>
                <path d="M 56,256 L 160,256" fill="none" stroke="black"/>
                <path d="M 40,304 L 176,304" fill="none" stroke="black"/>
                <path d="M 40,336 L 176,336" fill="none" stroke="black"/>
                <path d="M 56,112 C 47.16936,112 40,119.16936 40,128" fill="none" stroke="black"/>
                <path d="M 152,112 C 160.83064,112 168,119.16936 168,128" fill="none" stroke="black"/>
                <path d="M 56,144 C 47.16936,144 40,136.83064 40,128" fill="none" stroke="black"/>
                <path d="M 152,144 C 160.83064,144 168,136.83064 168,128" fill="none" stroke="black"/>
                <path d="M 56,224 C 47.16936,224 40,231.16936 40,240" fill="none" stroke="black"/>
                <path d="M 160,224 C 168.83064,224 176,231.16936 176,240" fill="none" stroke="black"/>
                <path d="M 56,256 C 47.16936,256 40,248.83064 40,240" fill="none" stroke="black"/>
                <path d="M 160,256 C 168.83064,256 176,248.83064 176,240" fill="none" stroke="black"/>
                <polygon class="arrowhead" points="112,264 100,258.4 100,269.6" fill="black" transform="rotate(270,104,264)"/>
                <polygon class="arrowhead" points="112,216 100,210.4 100,221.6" fill="black" transform="rotate(90,104,216)"/>
                <polygon class="arrowhead" points="112,72 100,66.4 100,77.6" fill="black" transform="rotate(270,104,72)"/>
                <g class="text">
                  <text x="76" y="52">Origin</text>
                  <text x="132" y="52">Server</text>
                  <text x="264" y="100">Private</text>
                  <text x="264" y="116">Network</text>
                  <text x="72" y="132">Local</text>
                  <text x="128" y="132">Gateway</text>
                  <text x="52" y="180">┄┄┄┄┄┄┄┄┄┄┄┄</text>
                  <text x="152" y="180">┄┄┄┄┄┄┄┄┄┄┄</text>
                  <text x="244" y="180">Firewall</text>
                  <text x="76" y="244">Public</text>
                  <text x="136" y="244">Gateway</text>
                  <text x="260" y="276">Public</text>
                  <text x="268" y="292">Internet</text>
                  <text x="76" y="324">HTTP</text>
                  <text x="124" y="324">Client</text>
                </g>
              </svg>
            </artwork>
            <artwork type="ascii-art"><![CDATA[
                        .---------------.
                        | Origin Server |
                        `---------------`
                                ^
                                |                Private
                         .------+------.         Network
                        | Local Gateway |
                         `------+------`
                                |
                    ┄┄┄┄┄┄┄┄┄┄┄┄.┄┄┄┄┄┄┄┄┄┄┄  Firewall
                                |
                                v
                         .--------------.
                        | Public Gateway |
                         `--------------`
                                ^                Public
                                |                Internet
                        .-------+--------.
                        |  HTTP Client   |
                        `----------------`
]]></artwork>
          </artset>
        </figure>
      </section>
    </section>
    <section anchor="iana-considerations">
      <name>IANA Considerations</name>
      <t>This document has no IANA actions.</t>
    </section>
  </middle>
  <back>
    <displayreference target="H3" to="HTTP/3"/>
    <displayreference target="H2" to="HTTP/2"/>
    <references anchor="sec-combined-references">
      <name>References</name>
      <references anchor="sec-normative-references">
        <name>Normative References</name>
        <reference anchor="H3">
          <front>
            <title>HTTP/3</title>
            <author fullname="M. Bishop" initials="M." role="editor" surname="Bishop"/>
            <date month="June" year="2022"/>
            <abstract>
              <t>The QUIC transport protocol has several features that are desirable in a transport for HTTP, such as stream multiplexing, per-stream flow control, and low-latency connection establishment. This document describes a mapping of HTTP semantics over QUIC. This document also identifies HTTP/2 features that are subsumed by QUIC and describes how HTTP/2 extensions can be ported to HTTP/3.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="9114"/>
          <seriesInfo name="DOI" value="10.17487/RFC9114"/>
        </reference>
        <reference anchor="QUIC">
          <front>
            <title>QUIC: A UDP-Based Multiplexed and Secure Transport</title>
            <author fullname="J. Iyengar" initials="J." role="editor" surname="Iyengar"/>
            <author fullname="M. Thomson" initials="M." role="editor" surname="Thomson"/>
            <date month="May" year="2021"/>
            <abstract>
              <t>This document defines the core of the QUIC transport protocol. QUIC provides applications with flow-controlled streams for structured communication, low-latency connection establishment, and network path migration. QUIC includes security measures that ensure confidentiality, integrity, and availability in a range of deployment circumstances. Accompanying documents describe the integration of TLS for key negotiation, loss detection, and an exemplary congestion control algorithm.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="9000"/>
          <seriesInfo name="DOI" value="10.17487/RFC9000"/>
        </reference>
        <reference anchor="HTTP-DGRAM">
          <front>
            <title>HTTP Datagrams and the Capsule Protocol</title>
            <author fullname="D. Schinazi" initials="D." surname="Schinazi"/>
            <author fullname="L. Pardue" initials="L." surname="Pardue"/>
            <date month="August" year="2022"/>
            <abstract>
              <t>This document describes HTTP Datagrams, a convention for conveying multiplexed, potentially unreliable datagrams inside an HTTP connection.</t>
              <t>In HTTP/3, HTTP Datagrams can be sent unreliably using the QUIC DATAGRAM extension. When the QUIC DATAGRAM frame is unavailable or undesirable, HTTP Datagrams can be sent using the Capsule Protocol, which is a more general convention for conveying data in HTTP connections.</t>
              <t>HTTP Datagrams and the Capsule Protocol are intended for use by HTTP extensions, not applications.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="9297"/>
          <seriesInfo name="DOI" value="10.17487/RFC9297"/>
        </reference>
        <reference anchor="WEBTRANS">
          <front>
            <title>The WebTransport Protocol Framework</title>
            <author fullname="Victor Vasiliev" initials="V." surname="Vasiliev">
              <organization>Google</organization>
            </author>
            <date day="25" month="August" year="2024"/>
            <abstract>
              <t>   The WebTransport Protocol Framework enables clients constrained by
   the Web security model to communicate with a remote server using a
   secure multiplexed transport.  It consists of a set of individual
   protocols that are safe to expose to untrusted applications, combined
   with an abstract model that allows them to be used interchangeably.

   This document defines the overall requirements on the protocols used
   in WebTransport, as well as the common features of the protocols,
   support for some of which may be optional.

              </t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-ietf-webtrans-overview-08"/>
        </reference>
        <reference anchor="WEBTRANS-H2">
          <front>
            <title>WebTransport over HTTP/2</title>
            <author fullname="Alan Frindell" initials="A." surname="Frindell">
              <organization>Facebook Inc.</organization>
            </author>
            <author fullname="Eric Kinnear" initials="E." surname="Kinnear">
              <organization>Apple Inc.</organization>
            </author>
            <author fullname="Tommy Pauly" initials="T." surname="Pauly">
              <organization>Apple Inc.</organization>
            </author>
            <author fullname="Martin Thomson" initials="M." surname="Thomson">
              <organization>Mozilla</organization>
            </author>
            <author fullname="Victor Vasiliev" initials="V." surname="Vasiliev">
              <organization>Google</organization>
            </author>
            <author fullname="Guowu Xie" initials="G." surname="Xie">
              <organization>Facebook Inc.</organization>
            </author>
            <date day="21" month="October" year="2024"/>
            <abstract>
              <t>   WebTransport defines a set of low-level communications features
   designed for client-server interactions that are initiated by Web
   clients.  This document describes a protocol that can provide many of
   the capabilities of WebTransport over HTTP/2.  This protocol enables
   the use of WebTransport when a UDP-based protocol is not available.

              </t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-ietf-webtrans-http2-10"/>
        </reference>
        <reference anchor="WEBTRANS-H3">
          <front>
            <title>WebTransport over HTTP/3</title>
            <author fullname="Alan Frindell" initials="A." surname="Frindell">
              <organization>Facebook</organization>
            </author>
            <author fullname="Eric Kinnear" initials="E." surname="Kinnear">
              <organization>Apple Inc.</organization>
            </author>
            <author fullname="Victor Vasiliev" initials="V." surname="Vasiliev">
              <organization>Google</organization>
            </author>
            <date day="21" month="October" year="2024"/>
            <abstract>
              <t>   WebTransport [OVERVIEW] is a protocol framework that enables clients
   constrained by the Web security model to communicate with a remote
   server using a secure multiplexed transport.  This document describes
   a WebTransport protocol that is based on HTTP/3 [HTTP3] and provides
   support for unidirectional streams, bidirectional streams and
   datagrams, all multiplexed within the same HTTP/3 connection.

              </t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-ietf-webtrans-http3-11"/>
        </reference>
        <reference anchor="RFC2119">
          <front>
            <title>Key words for use in RFCs to Indicate Requirement Levels</title>
            <author fullname="S. Bradner" initials="S." surname="Bradner"/>
            <date month="March" year="1997"/>
            <abstract>
              <t>In many standards track documents several words are used to signify the requirements in the specification. These words are often capitalized. This document defines these words as they should be interpreted in IETF documents. This document specifies an Internet Best Current Practices for the Internet Community, and requests discussion and suggestions for improvements.</t>
            </abstract>
          </front>
          <seriesInfo name="BCP" value="14"/>
          <seriesInfo name="RFC" value="2119"/>
          <seriesInfo name="DOI" value="10.17487/RFC2119"/>
        </reference>
        <reference anchor="RFC8174">
          <front>
            <title>Ambiguity of Uppercase vs Lowercase in RFC 2119 Key Words</title>
            <author fullname="B. Leiba" initials="B." surname="Leiba"/>
            <date month="May" year="2017"/>
            <abstract>
              <t>RFC 2119 specifies common key words that may be used in protocol specifications. This document aims to reduce the ambiguity by clarifying that only UPPERCASE usage of the key words have the defined special meanings.</t>
            </abstract>
          </front>
          <seriesInfo name="BCP" value="14"/>
          <seriesInfo name="RFC" value="8174"/>
          <seriesInfo name="DOI" value="10.17487/RFC8174"/>
        </reference>
        <reference anchor="ORIGIN">
          <front>
            <title>The ORIGIN Extension in HTTP/3</title>
            <author fullname="M. Bishop" initials="M." surname="Bishop"/>
            <date month="June" year="2023"/>
            <abstract>
              <t>The ORIGIN frame for HTTP/2 is equally applicable to HTTP/3, but it needs to be separately registered. This document describes the ORIGIN frame for HTTP/3.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="9412"/>
          <seriesInfo name="DOI" value="10.17487/RFC9412"/>
        </reference>
      </references>
      <references anchor="sec-informative-references">
        <name>Informative References</name>
        <reference anchor="CAPABILITY" target="https://www.w3.org/TR/capability-urls/">
          <front>
            <title>Good Practices for Capability URLs</title>
            <author>
              <organization/>
            </author>
            <date year="2014" month="February"/>
          </front>
        </reference>
        <reference anchor="H2">
          <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="TLS13">
          <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="I-D.ietf-httpbis-secondary-server-certs">
          <front>
            <title>Secondary Certificate Authentication of HTTP Servers</title>
            <author fullname="Eric Gorbaty" initials="E." surname="Gorbaty">
              <organization>Apple</organization>
            </author>
            <author fullname="Mike Bishop" initials="M." surname="Bishop">
              <organization>Akamai</organization>
            </author>
            <date day="12" month="October" year="2024"/>
            <abstract>
              <t>   This document defines a way for HTTP/2 and HTTP/3 servers to send
   additional certificate-based credentials after a TLS connection is
   established, based on TLS Exported Authenticators.

              </t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-ietf-httpbis-secondary-server-certs-01"/>
        </reference>
        <reference anchor="RFC9729">
          <front>
            <title>The Concealed HTTP Authentication Scheme</title>
            <author fullname="D. Schinazi" initials="D." surname="Schinazi"/>
            <author fullname="D. Oliver" initials="D." surname="Oliver"/>
            <author fullname="J. Hoyland" initials="J." surname="Hoyland"/>
            <date month="February" year="2025"/>
            <abstract>
              <t>Most HTTP authentication schemes are probeable in the sense that it is possible for an unauthenticated client to probe whether an origin serves resources that require authentication. It is possible for an origin to hide the fact that it requires authentication by not generating Unauthorized status codes; however, that only works with non-cryptographic authentication schemes: cryptographic signatures require a fresh nonce to be signed. Prior to this document, there was no existing way for the origin to share such a nonce without exposing the fact that it serves resources that require authentication. This document defines a new non-probeable cryptographic authentication scheme.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="9729"/>
          <seriesInfo name="DOI" value="10.17487/RFC9729"/>
        </reference>
        <reference anchor="I-D.lentczner-rhttp">
          <front>
            <title>Reverse HTTP</title>
            <author fullname="Mark Lentczner" initials="M." surname="Lentczner">
              <organization>Linden Research</organization>
            </author>
            <author fullname="Donovan Preston" initials="D." surname="Preston">
         </author>
            <date day="4" month="March" year="2009"/>
            <abstract>
              <t>This memo explains a method for making HTTP requests to a host that
cannot be contacted directly.  Typically, such a host is behind a
firewall and/or a network address translation system.
              </t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-lentczner-rhttp-00"/>
        </reference>
        <reference anchor="I-D.benfield-http2-p2p">
          <front>
            <title>Peer-to-peer Extension to HTTP/2</title>
            <author fullname="Cory Benfield" initials="C." surname="Benfield">
         </author>
            <date day="9" month="October" year="2015"/>
            <abstract>
              <t>   This document introduces a negotiated extension to HTTP/2 that turns
   a single HTTP/2 connection into a bi-directional communication
   channel.

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

              </t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-bt-httpbis-reverse-http-01"/>
        </reference>
        <reference anchor="I-D.kazuho-httpbis-reverse-tunnel">
          <front>
            <title>Reverse Tunnel over HTTP</title>
            <author fullname="Kazuho Oku" initials="K." surname="Oku">
              <organization>Fastly</organization>
            </author>
            <date day="19" month="February" year="2024"/>
            <abstract>
              <t>   This document specifies an HTTP extension to establish bi-directional
   byte streams in the direction from servers to their clients,
   utilizing HTTP as a tunneling mechanism.  This approach not only
   facilitates communication between servers located behind firewalls
   and their known clients but also introduces the potential for these
   known clients to serve as relays.  In such configurations, clients
   can forward application protocol messages or relay TCP connections,
   allowing servers to interact with any client on the Internet without
   direct exposure.

              </t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-kazuho-httpbis-reverse-tunnel-00"/>
        </reference>
      </references>
    </references>
    <?line 205?>

<section numbered="false" anchor="acknowledgments">
      <name>Acknowledgments</name>
      <t>This specification is inspired by earlier proposals related to reversing connection establishment over HTTP, including:</t>
      <ul spacing="normal">
        <li>
          <t><xref target="I-D.lentczner-rhttp"/></t>
        </li>
        <li>
          <t><xref target="I-D.benfield-http2-p2p"/></t>
        </li>
        <li>
          <t><xref target="I-D.draft-bt-httpbis-reverse-http"/></t>
        </li>
        <li>
          <t><xref target="I-D.kazuho-httpbis-reverse-tunnel"/></t>
        </li>
      </ul>
    </section>
  </back>
  <!-- ##markdown-source:
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

-->

</rfc>
