<?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.34 (Ruby 3.4.9) -->
<rfc xmlns:xi="http://www.w3.org/2001/XInclude" ipr="trust200902" docName="draft-ietf-httpbis-connect-tcp-11" category="std" consensus="true" submissionType="IETF" tocInclude="true" sortRefs="true" symRefs="true" version="3">
  <!-- xml2rfc v2v3 conversion 3.32.0 -->
  <front>
    <title abbrev="Templated CONNECT-TCP">Template-Driven HTTP CONNECT Proxying for TCP</title>
    <seriesInfo name="Internet-Draft" value="draft-ietf-httpbis-connect-tcp-11"/>
    <author initials="B. M." surname="Schwartz" fullname="Benjamin M. Schwartz">
      <organization>Meta Platforms, Inc.</organization>
      <address>
        <email>ietf@bemasc.net</email>
      </address>
    </author>
    <date year="2026" month="March" day="20"/>
    <area>wit</area>
    <workgroup>httpbis</workgroup>
    <abstract>
      <?line 34?>

<t>TCP proxying using HTTP CONNECT has long been part of the core HTTP specification.  However, this proxying functionality has several important deficiencies in modern HTTP environments.  This specification defines an alternative HTTP proxy service configuration for TCP connections.  This configuration is described by a URI Template, similar to the CONNECT-UDP and CONNECT-IP protocols.</t>
    </abstract>
  </front>
  <middle>
    <?line 38?>

<section anchor="introduction">
      <name>Introduction</name>
      <section anchor="history">
        <name>History</name>
        <t>HTTP has used the CONNECT method for proxying TCP connections since HTTP/1.1.  When using CONNECT, the request target specifies a host and port number, and the proxy forwards TCP payloads between the client and this destination (<xref section="9.3.6" sectionFormat="comma" target="RFC9110"/>).  To date, this is the only mechanism defined for proxying TCP over HTTP.  In this specification, this is referred to as a "classic HTTP CONNECT proxy".</t>
        <t>HTTP/3 uses a UDP transport, so it cannot be forwarded using the pre-existing CONNECT mechanism.  To enable forward proxying of HTTP/3, the MASQUE effort has defined proxy mechanisms that are capable of proxying UDP datagrams <xref target="CONNECT-UDP"/>, and more generally IP datagrams <xref target="CONNECT-IP"/>.  The destination host and port number (if applicable) are encoded into the HTTP resource path, and end-to-end datagrams are wrapped into HTTP Datagrams <xref target="RFC9297"/> on the client-proxy path.</t>
      </section>
      <section anchor="problems">
        <name>Problems</name>
        <t>HTTP clients can be configured to use proxies by selecting a proxy hostname, a port, and whether to use a security protocol. However, Classic HTTP CONNECT requests using the proxy do not carry this configuration information. Instead, they only indicate the hostname and port of the target. This prevents any HTTP server from hosting multiple distinct proxy services, as the server cannot distinguish them by path (as with distinct resources) or by origin (as in "virtual hosting").</t>
        <t>The absence of an explicit origin for the proxy also rules out the usual defenses against server port misdirection attacks (see <xref section="7.4" sectionFormat="of" target="RFC9110"/>) and creates ambiguity about the use of origin-scoped response header fields (e.g., "Alt-Svc" <xref target="RFC7838"/>, "Strict-Transport-Security" <xref target="RFC6797"/>).</t>
        <t>Classic HTTP CONNECT requests cannot carry in-stream metadata. For example, the WRAP_UP capsule <xref target="I-D.schinazi-httpbis-wrap-up"/> cannot be used with Classic HTTP CONNECT.</t>
      </section>
      <section anchor="overview">
        <name>Overview</name>
        <t>This specification describes an alternative mechanism for proxying TCP in HTTP.  Like <xref target="CONNECT-UDP"/> and <xref target="CONNECT-IP"/>, the proxy service is identified by a URI Template.  Proxy interactions reuse standard HTTP components and semantics, avoiding changes to the core HTTP protocol.</t>
      </section>
    </section>
    <section anchor="conventions-and-definitions">
      <name>Conventions and Definitions</name>
      <t>The key words "<bcp14>MUST</bcp14>", "<bcp14>MUST NOT</bcp14>", "<bcp14>REQUIRED</bcp14>", "<bcp14>SHALL</bcp14>", "<bcp14>SHALL
NOT</bcp14>", "<bcp14>SHOULD</bcp14>", "<bcp14>SHOULD NOT</bcp14>", "<bcp14>RECOMMENDED</bcp14>", "<bcp14>NOT RECOMMENDED</bcp14>",
"<bcp14>MAY</bcp14>", and "<bcp14>OPTIONAL</bcp14>" in this document are to be interpreted as
described in BCP 14 <xref target="RFC2119"/> <xref target="RFC8174"/> when, and only when, they
appear in all capitals, as shown here.</t>
      <?line -18?>

</section>
    <section anchor="specification">
      <name>Specification</name>
      <t>A template-driven TCP transport proxy for HTTP is identified by a URI Template <xref target="RFC6570"/> containing variables named "target_host" and "target_port".  This URI Template and its variable values <bcp14>MUST</bcp14> meet all the same requirements as for UDP proxying (<xref section="2" sectionFormat="comma" target="RFC9298"/>), and are subject to the same validation rules.  The client <bcp14>MUST</bcp14> substitute the destination host and port number into this template to produce the request URI.  The derived URI serves as the destination of a Capsule Protocol connection using the Upgrade Token "connect-tcp" (see registration in <xref target="new-upgrade-token"/>).</t>
      <t>When using "connect-tcp", TCP payload data is sent in the payload of new Capsule Types named DATA and FINAL_DATA (see registrations in <xref target="data-capsule"/>).  The ordered concatenation of these capsule payloads represents the TCP payload data.  A FINAL_DATA capsule additionally indicates that the sender has closed this stream, semantically equivalent to TCP FIN.  After sending a FINAL_DATA capsule, an endpoint <bcp14>MUST NOT</bcp14> send any more DATA or FINAL_DATA capsules on this data stream. (See <xref target="closing-connections"/> for related requirements.)</t>
      <t>An intermediary <bcp14>MAY</bcp14> merge and split successive DATA and FINAL_DATA capsules, subject to the following requirements:</t>
      <ul spacing="normal">
        <li>
          <t>There are no intervening capsules of other types.</t>
        </li>
        <li>
          <t>The order of payload content is preserved.</t>
        </li>
        <li>
          <t>The final emitted capsule uses the same capsule type (DATA or FINAL_DATA) as the final input capsule, and all others use the DATA capsule type.</t>
        </li>
      </ul>
      <section anchor="in-http11">
        <name>In HTTP/1.1</name>
        <t>In HTTP/1.1, the client uses the proxy by issuing a request as follows:</t>
        <ul spacing="normal">
          <li>
            <t>The method <bcp14>SHALL</bcp14> be "GET".</t>
          </li>
          <li>
            <t>The request's target <bcp14>SHALL</bcp14> correspond to the URI derived from expansion of the proxy's URI Template.</t>
          </li>
          <li>
            <t>The request <bcp14>SHALL</bcp14> include a single "Host" header field containing the origin of the proxy.</t>
          </li>
          <li>
            <t>The request <bcp14>SHALL</bcp14> include a "Connection" header field with the value "Upgrade".  (Note that this requirement is case-insensitive as per <xref section="7.6.1" sectionFormat="of" target="RFC9110"/>.)</t>
          </li>
          <li>
            <t>The request <bcp14>SHALL</bcp14> include an "Upgrade" header field with the value "connect-tcp".</t>
          </li>
          <li>
            <t>The request <bcp14>SHOULD</bcp14> include a "Capsule-Protocol: ?1" header (as recommended in <xref section="3.4" sectionFormat="comma" target="RFC9297"/>).</t>
          </li>
        </ul>
        <t>If the request is well-formed and permissible, the proxy <bcp14>MUST</bcp14> attempt to establish the TCP connection before sending any response status code other than "100 (Continue)" (see <xref target="conveying-metadata"/>).  If the TCP connection is successful, the response <bcp14>SHALL</bcp14> be as follows:</t>
        <ul spacing="normal">
          <li>
            <t>The HTTP status code <bcp14>SHALL</bcp14> be "101 (Switching Protocols)".</t>
          </li>
          <li>
            <t>The response <bcp14>SHALL</bcp14> include a "Connection" header field with the value "Upgrade".</t>
          </li>
          <li>
            <t>The response <bcp14>SHALL</bcp14> include a single "Upgrade" header field with the value "connect-tcp".</t>
          </li>
          <li>
            <t>The response <bcp14>SHOULD</bcp14> include a "Capsule-Protocol: ?1" header (as above).</t>
          </li>
        </ul>
        <t>If the request is malformed or impermissible, the proxy <bcp14>MUST</bcp14> return a 4XX error code.  If a TCP connection was not established, the proxy <bcp14>MUST NOT</bcp14> switch protocols to "connect-tcp", and the client <bcp14>MAY</bcp14> reuse this connection for additional HTTP requests.</t>
        <figure>
          <name>Templated TCP proxy example in HTTP/1.1</name>
          <artwork><![CDATA[
Client                                                 Proxy

GET /proxy?target_host=192.0.2.1&target_port=443 HTTP/1.1
Host: example.com
Connection: Upgrade
Upgrade: connect-tcp
Capsule-Protocol: ?1

** Proxy establishes a TCP connection to 192.0.2.1:443 **

                            HTTP/1.1 101 Switching Protocols
                            Connection: Upgrade
                            Upgrade: connect-tcp
                            Capsule-Protocol: ?1
]]></artwork>
        </figure>
      </section>
      <section anchor="in-http2-and-http3">
        <name>In HTTP/2 and HTTP/3</name>
        <t>In HTTP/2 and HTTP/3, the proxy <bcp14>MUST</bcp14> include SETTINGS_ENABLE_CONNECT_PROTOCOL in its SETTINGS frame <xref target="RFC8441"/><xref target="RFC9220"/>.  The client uses the proxy by issuing an "extended CONNECT" request as follows:</t>
        <ul spacing="normal">
          <li>
            <t>The :method pseudo-header field <bcp14>SHALL</bcp14> be "CONNECT".</t>
          </li>
          <li>
            <t>The :protocol pseudo-header field <bcp14>SHALL</bcp14> be "connect-tcp".</t>
          </li>
          <li>
            <t>The :authority pseudo-header field <bcp14>SHALL</bcp14> contain the authority of the proxy.</t>
          </li>
          <li>
            <t>The :path and :scheme pseudo-header fields <bcp14>SHALL</bcp14> contain the path and scheme of the request URI derived from the proxy's URI Template.</t>
          </li>
        </ul>
        <t>A templated TCP proxying request that does not conform to all of these requirements represents a client error (see <xref section="15.5" sectionFormat="comma" target="RFC9110"/>) and may be malformed (see <xref section="8.1.1" sectionFormat="of" target="RFC9113"/> and <xref section="4.1.2" sectionFormat="of" target="RFC9114"/>).</t>
        <t>Additionally the "capsule-protocol" header field <bcp14>SHOULD</bcp14> be present with a value of "?1" (as recommended in <xref section="3.4" sectionFormat="comma" target="RFC9297"/>).</t>
        <figure>
          <name>Templated TCP proxy example in HTTP/2</name>
          <artwork><![CDATA[
HEADERS
:method = CONNECT
:scheme = https
:authority = request-proxy.example
:path = /proxy?target_host=2001%3Adb8%3A%3A1&target_port=443
:protocol = connect-tcp
capsule-protocol = ?1
...
]]></artwork>
        </figure>
      </section>
      <section anchor="use-of-other-relevant-headers">
        <name>Use of Other Relevant Headers</name>
        <section anchor="origin-scoped-headers">
          <name>Origin-scoped Headers</name>
          <t>Ordinary HTTP headers apply only to the single resource identified in the request or response.  An origin-scoped HTTP header is a special response header that is intended to change the client's behavior for subsequent requests to any resource on this origin.</t>
          <t>Unlike classic HTTP CONNECT proxies, a templated TCP proxy has an unambiguous origin of its own.  Origin-scoped headers apply to this origin when they are associated with a templated TCP proxy response.  Here are some origin-scoped headers that could potentially be sent by a templated TCP proxy:</t>
          <ul spacing="normal">
            <li>
              <t>"Alt-Svc" <xref target="RFC7838"/></t>
            </li>
            <li>
              <t>"Strict-Transport-Security" <xref target="RFC6797"/></t>
            </li>
            <li>
              <t>"Public-Key-Pins" <xref target="RFC7469"/></t>
            </li>
            <li>
              <t>"Accept-CH" <xref target="RFC8942"/></t>
            </li>
            <li>
              <t>"Set-Cookie" <xref target="RFC6265"/>, which has configurable scope.</t>
            </li>
            <li>
              <t>"Clear-Site-Data" <xref target="CLEAR-SITE-DATA"/></t>
            </li>
          </ul>
        </section>
        <section anchor="authentication-headers">
          <name>Authentication Headers</name>
          <t>Authentication to a templated TCP proxy normally uses ordinary HTTP authentication via the "401 (Unauthorized)" response code, the "WWW-Authenticate" response header field, and the "Authorization" request header field (<xref section="11.6" sectionFormat="comma" target="RFC9110"/>).  A templated TCP proxy does not use the "407 (Proxy Authentication Required)" response code and related header fields (<xref section="11.7" sectionFormat="comma" target="RFC9110"/>) because they do not traverse HTTP gateways (see <xref target="operational-considerations"/>).</t>
          <t>Clients <bcp14>SHOULD</bcp14> assume that all proxy resources generated by a single template share a protection space (i.e., a realm) (<xref section="11.5" sectionFormat="comma" target="RFC9110"/>).  For many authentication schemes, this will allow the client to avoid waiting for a "401 (Unauthorized)" response before each new connection through the proxy.</t>
        </section>
      </section>
      <section anchor="closing-connections">
        <name>Closing Connections</name>
        <t>Connection termination is essentially symmetrical for proxies and their clients.  In this section, we use the term "endpoint" to describe an implementation of this specification in either role.</t>
        <t>When closing connections, endpoints are subject to the following requirements:</t>
        <ul spacing="normal">
          <li>
            <t>When an endpoint receives a valid TCP FIN, it <bcp14>MUST</bcp14> send a FINAL_DATA capsule.</t>
          </li>
          <li>
            <t>When an endpoint receives a valid FINAL_DATA capsule, it <bcp14>MUST</bcp14> send a TCP FIN.</t>
          </li>
          <li>
            <t>When a TCP connection reaches the TIME-WAIT or CLOSED state, the associated endpoint <bcp14>MUST</bcp14> close its send stream.
            </t>
            <ul spacing="normal">
              <li>
                <t>If the connection closed gracefully, the endpoint <bcp14>MUST</bcp14> close the send stream gracefully.</t>
              </li>
              <li>
                <t>Otherwise, the endpoint <bcp14>SHOULD</bcp14> close the send stream abruptly, using a mechanism appropriate to the HTTP version:
                </t>
                <ul spacing="normal">
                  <li>
                    <t>HTTP/3: reset the stream with H3_CONNECT_ERROR;
see <xref section="19.4" sectionFormat="comma" target="RFC9000"/> and <xref section="8.1" sectionFormat="comma" target="RFC9114"/></t>
                  </li>
                  <li>
                    <t>HTTP/2: reset the stream with CONNECT_ERROR;
see <xref target="RFC9113"/>, Sections 6.4 and 7</t>
                  </li>
                  <li>
                    <t>HTTP/1.1 over TLS: TCP shutdown without a TLS closure alert;
see <xref section="6.1" sectionFormat="comma" target="RFC8446"/>.</t>
                  </li>
                  <li>
                    <t>HTTP/1.1 without TLS: TCP RST</t>
                  </li>
                </ul>
              </li>
            </ul>
          </li>
          <li>
            <t>When the receive stream is closed abruptly or without a FINAL_DATA capsule received, the endpoint <bcp14>SHOULD</bcp14> send a TCP RST if the TCP subsystem permits it.</t>
          </li>
        </ul>
        <t>The mandatory behaviors above enable endpoints to detect any truncation of incoming TCP data.  The recommended behaviors propagate any TCP errors through the proxy connection.</t>
        <figure>
          <name>Simple graceful termination example (HTTP/3)</name>
          <artset>
            <artwork type="svg"><svg xmlns="http://www.w3.org/2000/svg" version="1.1" height="176" width="472" viewBox="0 0 472 176" class="diagram" text-anchor="middle" font-family="monospace" font-size="13px" stroke-linecap="round">
                <path d="M 8,32 L 8,64" fill="none" stroke="black"/>
                <path d="M 24,64 L 24,160" fill="none" stroke="black"/>
                <path d="M 72,32 L 72,64" fill="none" stroke="black"/>
                <path d="M 112,32 L 112,64" fill="none" stroke="black"/>
                <path d="M 128,64 L 128,160" fill="none" stroke="black"/>
                <path d="M 216,32 L 216,64" fill="none" stroke="black"/>
                <path d="M 256,32 L 256,64" fill="none" stroke="black"/>
                <path d="M 344,64 L 344,160" fill="none" stroke="black"/>
                <path d="M 360,32 L 360,64" fill="none" stroke="black"/>
                <path d="M 400,32 L 400,64" fill="none" stroke="black"/>
                <path d="M 448,64 L 448,160" fill="none" stroke="black"/>
                <path d="M 464,32 L 464,64" fill="none" stroke="black"/>
                <path d="M 8,32 L 72,32" fill="none" stroke="black"/>
                <path d="M 112,32 L 216,32" fill="none" stroke="black"/>
                <path d="M 256,32 L 360,32" fill="none" stroke="black"/>
                <path d="M 400,32 L 464,32" fill="none" stroke="black"/>
                <path d="M 8,64 L 72,64" fill="none" stroke="black"/>
                <path d="M 112,64 L 216,64" fill="none" stroke="black"/>
                <path d="M 256,64 L 360,64" fill="none" stroke="black"/>
                <path d="M 400,64 L 464,64" fill="none" stroke="black"/>
                <path d="M 24,80 L 48,80" fill="none" stroke="black"/>
                <path d="M 96,80 L 184,80" fill="none" stroke="black"/>
                <path d="M 280,80 L 368,80" fill="none" stroke="black"/>
                <path d="M 416,80 L 440,80" fill="none" stroke="black"/>
                <path d="M 24,96 L 56,96" fill="none" stroke="black"/>
                <path d="M 88,96 L 176,96" fill="none" stroke="black"/>
                <path d="M 296,96 L 376,96" fill="none" stroke="black"/>
                <path d="M 408,96 L 440,96" fill="none" stroke="black"/>
                <path d="M 32,112 L 56,112" fill="none" stroke="black"/>
                <path d="M 88,112 L 176,112" fill="none" stroke="black"/>
                <path d="M 296,112 L 376,112" fill="none" stroke="black"/>
                <path d="M 408,112 L 448,112" fill="none" stroke="black"/>
                <path d="M 136,128 L 168,128" fill="none" stroke="black"/>
                <path d="M 304,128 L 344,128" fill="none" stroke="black"/>
                <path d="M 24,144 L 48,144" fill="none" stroke="black"/>
                <path d="M 104,144 L 168,144" fill="none" stroke="black"/>
                <path d="M 304,144 L 336,144" fill="none" stroke="black"/>
                <polygon class="arrowhead" points="448,96 436,90.4 436,101.6" fill="black" transform="rotate(0,440,96)"/>
                <polygon class="arrowhead" points="448,80 436,74.4 436,85.6" fill="black" transform="rotate(0,440,80)"/>
                <polygon class="arrowhead" points="360,112 348,106.4 348,117.6" fill="black" transform="rotate(180,352,112)"/>
                <polygon class="arrowhead" points="344,144 332,138.4 332,149.6" fill="black" transform="rotate(0,336,144)"/>
                <polygon class="arrowhead" points="344,96 332,90.4 332,101.6" fill="black" transform="rotate(0,336,96)"/>
                <polygon class="arrowhead" points="344,80 332,74.4 332,85.6" fill="black" transform="rotate(0,336,80)"/>
                <polygon class="arrowhead" points="144,128 132,122.4 132,133.6" fill="black" transform="rotate(180,136,128)"/>
                <polygon class="arrowhead" points="144,112 132,106.4 132,117.6" fill="black" transform="rotate(180,136,112)"/>
                <polygon class="arrowhead" points="128,144 116,138.4 116,149.6" fill="black" transform="rotate(0,120,144)"/>
                <polygon class="arrowhead" points="128,96 116,90.4 116,101.6" fill="black" transform="rotate(0,120,96)"/>
                <polygon class="arrowhead" points="128,80 116,74.4 116,85.6" fill="black" transform="rotate(0,120,80)"/>
                <polygon class="arrowhead" points="40,112 28,106.4 28,117.6" fill="black" transform="rotate(180,32,112)"/>
                <g class="text">
                  <text x="32" y="52">TCP</text>
                  <text x="56" y="52">A</text>
                  <text x="156" y="52">Endpoint</text>
                  <text x="200" y="52">A</text>
                  <text x="300" y="52">Endpoint</text>
                  <text x="344" y="52">B</text>
                  <text x="424" y="52">TCP</text>
                  <text x="448" y="52">B</text>
                  <text x="72" y="84">"abc"</text>
                  <text x="232" y="84">DATA{"abc"}</text>
                  <text x="392" y="84">"abc"</text>
                  <text x="72" y="100">FIN</text>
                  <text x="236" y="100">FINAL_DATA{""}</text>
                  <text x="392" y="100">FIN</text>
                  <text x="72" y="116">FIN</text>
                  <text x="236" y="116">FINAL_DATA{""}</text>
                  <text x="392" y="116">FIN</text>
                  <text x="236" y="132">QUIC.STREAM{FIN}</text>
                  <text x="76" y="148">FINACK</text>
                  <text x="236" y="148">QUIC.STREAM{FIN}</text>
                </g>
              </svg>
            </artwork>
            <artwork type="ascii-art"><![CDATA[
+-------+    +------------+    +------------+    +-------+
| TCP A |    | Endpoint A |    | Endpoint B |    | TCP B |
+-+-----+    +-+----------+    +----------+-+    +-----+-+
  +---"abc"--->+-------DATA{"abc"}------->+---"abc"--->|
  +----FIN---->+------FINAL_DATA{""}----->+----FIN---->|
  |<---FIN-----+<-----FINAL_DATA{""}------+<---FIN-----+
  |            |<----QUIC.STREAM{FIN}-----+            |
  +---FINACK-->+-----QUIC.STREAM{FIN}---->|            |
  |            |                          |            |
]]></artwork>
          </artset>
        </figure>
        <figure>
          <name>Simple TCP RST termination example (HTTP/2)</name>
          <artset>
            <artwork type="svg"><svg xmlns="http://www.w3.org/2000/svg" version="1.1" height="112" width="472" viewBox="0 0 472 112" class="diagram" text-anchor="middle" font-family="monospace" font-size="13px" stroke-linecap="round">
                <path d="M 8,32 L 8,64" fill="none" stroke="black"/>
                <path d="M 24,64 L 24,96" fill="none" stroke="black"/>
                <path d="M 72,32 L 72,64" fill="none" stroke="black"/>
                <path d="M 112,32 L 112,64" fill="none" stroke="black"/>
                <path d="M 128,64 L 128,96" fill="none" stroke="black"/>
                <path d="M 216,32 L 216,64" fill="none" stroke="black"/>
                <path d="M 256,32 L 256,64" fill="none" stroke="black"/>
                <path d="M 344,64 L 344,96" fill="none" stroke="black"/>
                <path d="M 360,32 L 360,64" fill="none" stroke="black"/>
                <path d="M 400,32 L 400,64" fill="none" stroke="black"/>
                <path d="M 448,64 L 448,96" fill="none" stroke="black"/>
                <path d="M 464,32 L 464,64" fill="none" stroke="black"/>
                <path d="M 8,32 L 72,32" fill="none" stroke="black"/>
                <path d="M 112,32 L 216,32" fill="none" stroke="black"/>
                <path d="M 256,32 L 360,32" fill="none" stroke="black"/>
                <path d="M 400,32 L 464,32" fill="none" stroke="black"/>
                <path d="M 8,64 L 72,64" fill="none" stroke="black"/>
                <path d="M 112,64 L 216,64" fill="none" stroke="black"/>
                <path d="M 256,64 L 360,64" fill="none" stroke="black"/>
                <path d="M 400,64 L 464,64" fill="none" stroke="black"/>
                <path d="M 24,80 L 56,80" fill="none" stroke="black"/>
                <path d="M 88,80 L 152,80" fill="none" stroke="black"/>
                <path d="M 312,80 L 376,80" fill="none" stroke="black"/>
                <path d="M 408,80 L 440,80" fill="none" stroke="black"/>
                <polygon class="arrowhead" points="448,80 436,74.4 436,85.6" fill="black" transform="rotate(0,440,80)"/>
                <polygon class="arrowhead" points="344,80 332,74.4 332,85.6" fill="black" transform="rotate(0,336,80)"/>
                <polygon class="arrowhead" points="128,80 116,74.4 116,85.6" fill="black" transform="rotate(0,120,80)"/>
                <g class="text">
                  <text x="32" y="52">TCP</text>
                  <text x="56" y="52">A</text>
                  <text x="156" y="52">Endpoint</text>
                  <text x="200" y="52">A</text>
                  <text x="300" y="52">Endpoint</text>
                  <text x="344" y="52">B</text>
                  <text x="424" y="52">TCP</text>
                  <text x="448" y="52">B</text>
                  <text x="72" y="84">RST</text>
                  <text x="232" y="84">RST_STREAM{CON_ERR}</text>
                  <text x="392" y="84">RST</text>
                </g>
              </svg>
            </artwork>
            <artwork type="ascii-art"><![CDATA[
+-------+    +------------+    +------------+    +-------+
| TCP A |    | Endpoint A |    | Endpoint B |    | TCP B |
+-+-----+    +-+----------+    +----------+-+    +-----+-+
  +----RST---->+---RST_STREAM{CON_ERR}--->+----RST---->|
  |            |                          |            |
]]></artwork>
          </artset>
        </figure>
        <figure>
          <name>Timeout example (HTTP/1.1)</name>
          <artset>
            <artwork type="svg"><svg xmlns="http://www.w3.org/2000/svg" version="1.1" height="144" width="472" viewBox="0 0 472 144" class="diagram" text-anchor="middle" font-family="monospace" font-size="13px" stroke-linecap="round">
                <path d="M 8,32 L 8,64" fill="none" stroke="black"/>
                <path d="M 24,64 L 24,128" fill="none" stroke="black"/>
                <path d="M 72,32 L 72,64" fill="none" stroke="black"/>
                <path d="M 112,32 L 112,64" fill="none" stroke="black"/>
                <path d="M 128,64 L 128,128" fill="none" stroke="black"/>
                <path d="M 216,32 L 216,64" fill="none" stroke="black"/>
                <path d="M 256,32 L 256,64" fill="none" stroke="black"/>
                <path d="M 344,64 L 344,128" fill="none" stroke="black"/>
                <path d="M 360,32 L 360,64" fill="none" stroke="black"/>
                <path d="M 400,32 L 400,64" fill="none" stroke="black"/>
                <path d="M 448,64 L 448,128" fill="none" stroke="black"/>
                <path d="M 464,32 L 464,64" fill="none" stroke="black"/>
                <path d="M 8,32 L 72,32" fill="none" stroke="black"/>
                <path d="M 112,32 L 216,32" fill="none" stroke="black"/>
                <path d="M 256,32 L 360,32" fill="none" stroke="black"/>
                <path d="M 400,32 L 464,32" fill="none" stroke="black"/>
                <path d="M 8,64 L 72,64" fill="none" stroke="black"/>
                <path d="M 112,64 L 216,64" fill="none" stroke="black"/>
                <path d="M 256,64 L 360,64" fill="none" stroke="black"/>
                <path d="M 400,64 L 464,64" fill="none" stroke="black"/>
                <path d="M 24,80 L 48,80" fill="none" stroke="black"/>
                <path d="M 96,80 L 184,80" fill="none" stroke="black"/>
                <path d="M 280,80 L 368,80" fill="none" stroke="black"/>
                <path d="M 416,80 L 440,80" fill="none" stroke="black"/>
                <path d="M 128,112 L 144,112" fill="none" stroke="black"/>
                <path d="M 312,112 L 376,112" fill="none" stroke="black"/>
                <path d="M 408,112 L 440,112" fill="none" stroke="black"/>
                <polygon class="arrowhead" points="448,112 436,106.4 436,117.6" fill="black" transform="rotate(0,440,112)"/>
                <polygon class="arrowhead" points="448,80 436,74.4 436,85.6" fill="black" transform="rotate(0,440,80)"/>
                <polygon class="arrowhead" points="344,112 332,106.4 332,117.6" fill="black" transform="rotate(0,336,112)"/>
                <polygon class="arrowhead" points="344,80 332,74.4 332,85.6" fill="black" transform="rotate(0,336,80)"/>
                <polygon class="arrowhead" points="128,80 116,74.4 116,85.6" fill="black" transform="rotate(0,120,80)"/>
                <g class="text">
                  <text x="32" y="52">TCP</text>
                  <text x="56" y="52">A</text>
                  <text x="156" y="52">Endpoint</text>
                  <text x="200" y="52">A</text>
                  <text x="300" y="52">Endpoint</text>
                  <text x="344" y="52">B</text>
                  <text x="424" y="52">TCP</text>
                  <text x="448" y="52">B</text>
                  <text x="72" y="84">"abc"</text>
                  <text x="232" y="84">DATA{"abc"}</text>
                  <text x="392" y="84">"abc"</text>
                  <text x="164" y="100">(...</text>
                  <text x="216" y="100">timeout</text>
                  <text x="256" y="100">@</text>
                  <text x="272" y="100">A</text>
                  <text x="300" y="100">...)</text>
                  <text x="160" y="116">FIN</text>
                  <text x="192" y="116">(no</text>
                  <text x="260" y="116">close_notify</text>
                  <text x="392" y="116">RST</text>
                </g>
              </svg>
            </artwork>
            <artwork type="ascii-art"><![CDATA[
+-------+    +------------+    +------------+    +-------+
| TCP A |    | Endpoint A |    | Endpoint B |    | TCP B |
+-+-----+    +-+----------+    +----------+-+    +-----+-+
  +---"abc"--->+-------DATA{"abc"}------->+---"abc"--->|
  |            |  (... timeout @ A ...)   |            |
  |            +--FIN (no close_notify)-->+----RST---->|
  |            |                          |            |
]]></artwork>
          </artset>
        </figure>
        <figure>
          <name>RST after FIN example (HTTP/3)</name>
          <artset>
            <artwork type="svg"><svg xmlns="http://www.w3.org/2000/svg" version="1.1" height="192" width="472" viewBox="0 0 472 192" class="diagram" text-anchor="middle" font-family="monospace" font-size="13px" stroke-linecap="round">
                <path d="M 8,32 L 8,64" fill="none" stroke="black"/>
                <path d="M 24,64 L 24,176" fill="none" stroke="black"/>
                <path d="M 72,32 L 72,64" fill="none" stroke="black"/>
                <path d="M 112,32 L 112,64" fill="none" stroke="black"/>
                <path d="M 128,64 L 128,176" fill="none" stroke="black"/>
                <path d="M 216,32 L 216,64" fill="none" stroke="black"/>
                <path d="M 256,32 L 256,64" fill="none" stroke="black"/>
                <path d="M 344,64 L 344,176" fill="none" stroke="black"/>
                <path d="M 360,32 L 360,64" fill="none" stroke="black"/>
                <path d="M 400,32 L 400,64" fill="none" stroke="black"/>
                <path d="M 448,64 L 448,176" fill="none" stroke="black"/>
                <path d="M 464,32 L 464,64" fill="none" stroke="black"/>
                <path d="M 8,32 L 72,32" fill="none" stroke="black"/>
                <path d="M 112,32 L 216,32" fill="none" stroke="black"/>
                <path d="M 256,32 L 360,32" fill="none" stroke="black"/>
                <path d="M 400,32 L 464,32" fill="none" stroke="black"/>
                <path d="M 8,64 L 72,64" fill="none" stroke="black"/>
                <path d="M 112,64 L 216,64" fill="none" stroke="black"/>
                <path d="M 256,64 L 360,64" fill="none" stroke="black"/>
                <path d="M 400,64 L 464,64" fill="none" stroke="black"/>
                <path d="M 24,80 L 64,80" fill="none" stroke="black"/>
                <path d="M 96,80 L 184,80" fill="none" stroke="black"/>
                <path d="M 304,80 L 384,80" fill="none" stroke="black"/>
                <path d="M 416,80 L 440,80" fill="none" stroke="black"/>
                <path d="M 32,128 L 56,128" fill="none" stroke="black"/>
                <path d="M 104,128 L 168,128" fill="none" stroke="black"/>
                <path d="M 312,128 L 376,128" fill="none" stroke="black"/>
                <path d="M 424,128 L 448,128" fill="none" stroke="black"/>
                <path d="M 136,144 L 168,144" fill="none" stroke="black"/>
                <path d="M 304,144 L 344,144" fill="none" stroke="black"/>
                <path d="M 24,160 L 64,160" fill="none" stroke="black"/>
                <path d="M 96,160 L 168,160" fill="none" stroke="black"/>
                <path d="M 304,160 L 384,160" fill="none" stroke="black"/>
                <path d="M 416,160 L 440,160" fill="none" stroke="black"/>
                <polygon class="arrowhead" points="448,160 436,154.4 436,165.6" fill="black" transform="rotate(0,440,160)"/>
                <polygon class="arrowhead" points="448,80 436,74.4 436,85.6" fill="black" transform="rotate(0,440,80)"/>
                <polygon class="arrowhead" points="360,128 348,122.4 348,133.6" fill="black" transform="rotate(180,352,128)"/>
                <polygon class="arrowhead" points="344,160 332,154.4 332,165.6" fill="black" transform="rotate(0,336,160)"/>
                <polygon class="arrowhead" points="344,80 332,74.4 332,85.6" fill="black" transform="rotate(0,336,80)"/>
                <polygon class="arrowhead" points="144,144 132,138.4 132,149.6" fill="black" transform="rotate(180,136,144)"/>
                <polygon class="arrowhead" points="144,128 132,122.4 132,133.6" fill="black" transform="rotate(180,136,128)"/>
                <polygon class="arrowhead" points="128,160 116,154.4 116,165.6" fill="black" transform="rotate(0,120,160)"/>
                <polygon class="arrowhead" points="128,80 116,74.4 116,85.6" fill="black" transform="rotate(0,120,80)"/>
                <polygon class="arrowhead" points="40,128 28,122.4 28,133.6" fill="black" transform="rotate(180,32,128)"/>
                <g class="text">
                  <text x="32" y="52">TCP</text>
                  <text x="56" y="52">A</text>
                  <text x="156" y="52">Endpoint</text>
                  <text x="200" y="52">A</text>
                  <text x="300" y="52">Endpoint</text>
                  <text x="344" y="52">B</text>
                  <text x="424" y="52">TCP</text>
                  <text x="448" y="52">B</text>
                  <text x="80" y="84">FIN</text>
                  <text x="244" y="84">FINAL_DATA{""}</text>
                  <text x="400" y="84">FIN</text>
                  <text x="80" y="116">(FIN)</text>
                  <text x="400" y="116">(FIN)</text>
                  <text x="80" y="132">"abc"</text>
                  <text x="240" y="132">FINAL_DATA{"abc"}</text>
                  <text x="400" y="132">"abc"</text>
                  <text x="236" y="148">QUIC.STREAM{FIN}</text>
                  <text x="80" y="164">RST</text>
                  <text x="236" y="164">H3_CONNECT_ERROR</text>
                  <text x="400" y="164">RST</text>
                </g>
              </svg>
            </artwork>
            <artwork type="ascii-art"><![CDATA[
+-------+    +------------+    +------------+    +-------+
| TCP A |    | Endpoint A |    | Endpoint B |    | TCP B |
+-+-----+    +-+----------+    +----------+-+    +-----+-+
  +-----FIN--->+-------FINAL_DATA{""}---->+-----FIN--->|
  |            |                          |            |
  |    (FIN)   |                          |    (FIN)   |
  |<---"abc"---+<----FINAL_DATA{"abc"}----+<---"abc"---+
  |            |<----QUIC.STREAM{FIN}-----+            |
  +-----RST--->+-----H3_CONNECT_ERROR---->+-----RST--->|
  |            |                          |            |
]]></artwork>
          </artset>
        </figure>
      </section>
    </section>
    <section anchor="additional-connection-setup-behaviors">
      <name>Additional Connection Setup Behaviors</name>
      <t>This section discusses some behaviors that are permitted or recommended in order to enhance the performance or functionality of connection setup.</t>
      <section anchor="latency-optimizations">
        <name>Latency optimizations</name>
        <t>When using this specification in HTTP/2 or HTTP/3, clients <bcp14>MAY</bcp14> start sending TCP stream content optimistically, subject to flow control limits (<xref section="5.2" sectionFormat="of" target="RFC9113"/> or <xref section="4.1" sectionFormat="of" target="RFC9000"/>).  Proxies <bcp14>MUST</bcp14> buffer this "optimistic" content until the TCP stream becomes writable, and discard it if the TCP connection fails.  (Clients <bcp14>MUST NOT</bcp14> use "optimistic" behavior in HTTP/1.1, as this would interfere with reuse of the connection after an error response such as "401 (Unauthorized)".)</t>
        <t>Servers that host a proxy under this specification <bcp14>MAY</bcp14> offer support for TLS early data in accordance with <xref target="RFC8470"/>.  Clients <bcp14>MAY</bcp14> send "connect-tcp" requests in early data, and <bcp14>MAY</bcp14> include "optimistic" TCP content in early data (in HTTP/2 and HTTP/3).  At the TLS layer, proxies <bcp14>MAY</bcp14> ignore, reject, or accept the <tt>early_data</tt> extension (<xref section="4.2.10" sectionFormat="comma" target="RFC8446"/>).  At the HTTP layer, proxies <bcp14>MAY</bcp14> process the request immediately, return a "425 (Too Early)" response (<xref section="5.2" sectionFormat="comma" target="RFC8470"/>), or delay some or all processing of the request until the handshake completes.  For example, a proxy with limited anti-replay defenses might choose to perform DNS resolution of the <tt>target_host</tt> when a request arrives in early data, but delay the TCP connection until the TLS handshake completes.</t>
      </section>
      <section anchor="conveying-metadata">
        <name>Conveying metadata</name>
        <t>This specification supports the "Expect: 100-continue" request header (<xref section="10.1.1" sectionFormat="comma" target="RFC9110"/>) in any HTTP version.  The "100 (Continue)" status code confirms receipt of a request at the proxy without waiting for the proxy-destination TCP handshake to succeed or fail.  This might be particularly helpful when the destination host is not responding, as TCP handshakes can hang for several minutes before failing.  Clients <bcp14>MAY</bcp14> send "Expect: 100-continue", and proxies <bcp14>MUST</bcp14> respect it by returning "100 (Continue)" if the request is not immediately rejected.</t>
        <t>Proxies implementing this specification <bcp14>SHOULD</bcp14> include a "Proxy-Status" response header field <xref target="RFC9209"/> in any success or failure response (i.e., status codes 101, 2XX, 4XX, or 5XX) to support advanced client behaviors and diagnostics.  Clients and proxies <bcp14>MUST NOT</bcp14> send trailer fields on "connect-tcp" streams.</t>
      </section>
    </section>
    <section anchor="applicability">
      <name>Applicability</name>
      <section anchor="servers">
        <name>Servers</name>
        <t>For server operators, template-driven TCP proxies are particularly valuable in situations where virtual-hosting is needed, or where multiple proxies must share an origin.  For example, the proxy might benefit from sharing an HTTP gateway that provides DDoS defense, performs request sanitization, or enforces user authorization.</t>
        <t>The URI template can also be structured to generate high-entropy Capability URLs <xref target="CAPABILITY"/>, so that only authorized users can discover the proxy service.</t>
      </section>
      <section anchor="clients">
        <name>Clients</name>
        <t>Clients that support both classic HTTP CONNECT proxies and template-driven TCP proxies <bcp14>MAY</bcp14> accept both types via a single configuration string.  If the configuration string can be parsed as a URI Template containing the required variables, it is a template-driven TCP proxy.  Otherwise, it is presumed to represent a classic HTTP CONNECT proxy.</t>
        <t>In some cases, it is valuable to allow "connect-tcp" clients to reach "connect-tcp"-only proxies when using a legacy configuration method that cannot convey a URI Template.  To support this arrangement, clients <bcp14>SHOULD</bcp14> treat certain errors during classic HTTP CONNECT as indications that the proxy might only support "connect-tcp":</t>
        <ul spacing="normal">
          <li>
            <t>In HTTP/1.1: the response status code is "426 (Upgrade Required)", with an "Upgrade: connect-tcp" response header.</t>
          </li>
          <li>
            <t>In any HTTP version: the response status code is "501 (Not Implemented)".
            </t>
            <ul spacing="normal">
              <li>
                <t>Requires SETTINGS_ENABLE_CONNECT_PROTOCOL to have been negotiated in HTTP/2 or HTTP/3.</t>
              </li>
            </ul>
          </li>
        </ul>
        <t>If the client infers that classic HTTP CONNECT is not supported, it <bcp14>SHOULD</bcp14> retry the request using the registered default template for "connect-tcp":</t>
        <figure>
          <name>Registered default template</name>
          <artwork><![CDATA[
https://$PROXY_HOST:$PROXY_PORT/.well-known/masque
                 /tcp/{target_host}/{target_port}/
]]></artwork>
        </figure>
        <t>If this request succeeds, the client <bcp14>SHOULD</bcp14> record a preference for "connect-tcp" to avoid further retry delays.</t>
      </section>
    </section>
    <section anchor="security-considerations">
      <name>Security Considerations</name>
      <t>Template-driven TCP proxying is largely subject to the same security risks as classic HTTP CONNECT.  For example, any restrictions on authorized use of the proxy (see <xref section="9.3.6" sectionFormat="comma" target="RFC9110"/>) apply equally to both.</t>
      <t>A small additional risk is posed by the use of a URI Template parser on the client side.  The template input string could be crafted to exploit any vulnerabilities in the parser implementation.  Client implementers should apply their usual precautions for code that processes untrusted inputs.</t>
      <section anchor="resource-exhaustion-attacks">
        <name>Resource Exhaustion attacks</name>
        <t>A malicious client can achieve cause highly asymmetric resource usage at the proxy by colluding with a destination server and violating the ordinary rules of TCP or HTTP.  Some example attacks, and mitigations that proxies can apply:</t>
        <ul spacing="normal">
          <li>
            <t><strong>Connection Pileup</strong>: A malicious client can attempt to open a large number of connections to exhaust the proxy's memory, port, or file descriptor limits. When using HTTP/2 or HTTP/3, each incremental TCP connection imposes a much higher cost on the proxy than on the attacker.
            </t>
            <ul spacing="normal">
              <li>
                <t>Mitigation: Limit the number of concurrent connections per client.</t>
              </li>
            </ul>
          </li>
          <li>
            <t><strong>Window Bloat</strong>: An attacker can grow the receive window size by simulating a "long, fat network" <xref target="RFC7323"/>, then fill the window (from the sender) and stop acknowledging it (at the receiver).  This leaves the proxy buffering up to 1 GiB of TCP data until some timeout, while the attacker does not have to retain a large buffer.
            </t>
            <ul spacing="normal">
              <li>
                <t>Mitigation: Limit the maximum receive window for TCP and HTTP connections, and the size of userspace buffers used for proxying.  Alternatively, monitor the connections' send queues and limit the total buffered data per client.</t>
              </li>
            </ul>
          </li>
          <li>
            <t><strong>WAIT Abuse</strong>: An attacker can force the proxy into a TIME-WAIT, CLOSE-WAIT, or FIN-WAIT state until the timer expires, tying up a proxy-to-destination 4-tuple for up to four minutes after the client's connection is closed.
            </t>
            <ul spacing="normal">
              <li>
                <t>Mitigation: Limit the number of connections for each client to each destination, even if those connections are in a waiting state and the corresponding CONNECT stream is closed.  Alternatively, allocate a large range of IP addresses for TCP connections (especially in IPv6).</t>
              </li>
            </ul>
          </li>
        </ul>
      </section>
    </section>
    <section anchor="operational-considerations">
      <name>Operational Considerations</name>
      <section anchor="avoiding-http11">
        <name>Avoiding HTTP/1.1</name>
        <t>While this specification is fully functional under HTTP/1.1, performance-sensitive deployments <bcp14>SHOULD</bcp14> use HTTP/2 or HTTP/3 instead.  When using HTTP/1.1:</t>
        <ul spacing="normal">
          <li>
            <t>Each CONNECT request requires a new TCP and TLS connection, imposing a higher cost in setup latency, congestion control convergence, CPU time, and data transfer.</t>
          </li>
          <li>
            <t>The graceful and abrupt closure signals (<xref target="closing-connections"/>) are more likely to be missing or corrupted:
            </t>
            <ul spacing="normal">
              <li>
                <t>Some implementations may be unable to emit the recommended abrupt closure signals, due to limitations in their TCP and TLS subsystems.</t>
              </li>
              <li>
                <t>Faulty implementations may fail to send a TLS closure alert during graceful shutdown, or fail to report an error when the expected closure alert is not received.  These misbehaviors are not compliant with <xref target="RFC8446"/>, but they are common nonetheless among HTTP/1.1 implementations today.</t>
              </li>
            </ul>
          </li>
          <li>
            <t>The number of active connections through each client may be limited by the number of available TCP client ports, especially if:
            </t>
            <ul spacing="normal">
              <li>
                <t>The client only has one IP address that can be used to reach the proxy.</t>
              </li>
              <li>
                <t>The client is shared between many parties, such as when acting as a gateway or concentrator.</t>
              </li>
              <li>
                <t>The proxied connections are often closed by the destination. This causes the client to initiate closure of the client-to-proxy connection, leaving the client in a TIME-WAIT state for up to four minutes.</t>
              </li>
            </ul>
          </li>
        </ul>
      </section>
      <section anchor="gateway-compatibility">
        <name>Gateway Compatibility</name>
        <t>Templated TCP proxies can make use of standard HTTP gateways and path-routing to ease implementation and allow use of shared infrastructure.  However, current gateways might need modifications to support TCP proxy services.  To be compatible, a gateway must:</t>
        <ul spacing="normal">
          <li>
            <t>support Extended CONNECT (if acting as an HTTP/2 or HTTP/3 server).</t>
          </li>
          <li>
            <t>support HTTP/1.1 Upgrade to "connect-tcp" (if acting as an HTTP/1.1 server)
            </t>
            <ul spacing="normal">
              <li>
                <t>only after forwarding the upgrade request to the origin and observing a success response.</t>
              </li>
            </ul>
          </li>
          <li>
            <t>forward the "connect-tcp" protocol to the origin.</t>
          </li>
          <li>
            <t>convert "connect-tcp" requests between all supported HTTP server and client versions.</t>
          </li>
          <li>
            <t>allow any "Proxy-Status" headers to traverse the gateway.</t>
          </li>
        </ul>
      </section>
    </section>
    <section anchor="iana-considerations">
      <name>IANA Considerations</name>
      <section anchor="new-upgrade-token">
        <name>New Upgrade Token</name>
        <t>IF APPROVED, IANA is requested to add the following entry to the HTTP Upgrade Token Registry:</t>
        <table>
          <thead>
            <tr>
              <th align="left">Value</th>
              <th align="left">Description</th>
              <th align="left">Reference</th>
            </tr>
          </thead>
          <tbody>
            <tr>
              <td align="left">"connect-tcp"</td>
              <td align="left">Proxying of TCP payloads</td>
              <td align="left">(This document)</td>
            </tr>
          </tbody>
        </table>
        <t>For interoperability testing of this draft version, implementations <bcp14>SHALL</bcp14> use the value "connect-tcp-07".</t>
      </section>
      <section anchor="iana-template">
        <name>New MASQUE Default Template</name>
        <t>IF APPROVED, IANA is requested to add the following entry to the "MASQUE URI Suffixes" registry:</t>
        <table>
          <thead>
            <tr>
              <th align="left">Path Segment</th>
              <th align="left">Description</th>
              <th align="left">Reference</th>
            </tr>
          </thead>
          <tbody>
            <tr>
              <td align="left">tcp</td>
              <td align="left">TCP Proxying</td>
              <td align="left">(This document)</td>
            </tr>
          </tbody>
        </table>
      </section>
      <section anchor="data-capsule">
        <name>New Capsule Type</name>
        <t>IF APPROVED, IANA is requested to add the following entry to the "HTTP Capsule Types" registry:</t>
        <table>
          <thead>
            <tr>
              <th align="left">Value</th>
              <th align="left">Capsule Type</th>
              <th align="left">Status</th>
              <th align="left">Reference</th>
              <th align="left">Change Controller</th>
              <th align="left">Contact</th>
            </tr>
          </thead>
          <tbody>
            <tr>
              <td align="left">(TBD)</td>
              <td align="left">DATA</td>
              <td align="left">permanent</td>
              <td align="left">(This document), <xref target="specification"/></td>
              <td align="left">IETF</td>
              <td align="left">HTTPBIS</td>
            </tr>
            <tr>
              <td align="left">(TBD)</td>
              <td align="left">FINAL_DATA</td>
              <td align="left">permanent</td>
              <td align="left">(This document), <xref target="specification"/></td>
              <td align="left">IETF</td>
              <td align="left">HTTPBIS</td>
            </tr>
          </tbody>
        </table>
        <t>For this draft version of the protocol, the Capsule Type values <tt>0x2028d7f0</tt> and <tt>0x2028d7f1</tt> shall be used provisionally for testing, under the names "DATA-08" and "FINAL_DATA-08".</t>
      </section>
    </section>
  </middle>
  <back>
    <references anchor="sec-combined-references">
      <name>References</name>
      <references anchor="sec-normative-references">
        <name>Normative 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="RFC9297">
          <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="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="RFC6570">
          <front>
            <title>URI Template</title>
            <author fullname="J. Gregorio" initials="J." surname="Gregorio"/>
            <author fullname="R. Fielding" initials="R." surname="Fielding"/>
            <author fullname="M. Hadley" initials="M." surname="Hadley"/>
            <author fullname="M. Nottingham" initials="M." surname="Nottingham"/>
            <author fullname="D. Orchard" initials="D." surname="Orchard"/>
            <date month="March" year="2012"/>
            <abstract>
              <t>A URI Template is a compact sequence of characters for describing a range of Uniform Resource Identifiers through variable expansion. This specification defines the URI Template syntax and the process for expanding a URI Template into a URI reference, along with guidelines for the use of URI Templates on the Internet. [STANDARDS-TRACK]</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="6570"/>
          <seriesInfo name="DOI" value="10.17487/RFC6570"/>
        </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="RFC8441">
          <front>
            <title>Bootstrapping WebSockets with HTTP/2</title>
            <author fullname="P. McManus" initials="P." surname="McManus"/>
            <date month="September" year="2018"/>
            <abstract>
              <t>This document defines a mechanism for running the WebSocket Protocol (RFC 6455) over a single stream of an HTTP/2 connection.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="8441"/>
          <seriesInfo name="DOI" value="10.17487/RFC8441"/>
        </reference>
        <reference anchor="RFC9220">
          <front>
            <title>Bootstrapping WebSockets with HTTP/3</title>
            <author fullname="R. Hamilton" initials="R." surname="Hamilton"/>
            <date month="June" year="2022"/>
            <abstract>
              <t>The mechanism for running the WebSocket Protocol over a single stream of an HTTP/2 connection is equally applicable to HTTP/3, but the HTTP-version-specific details need to be specified. This document describes how the mechanism is adapted for HTTP/3.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="9220"/>
          <seriesInfo name="DOI" value="10.17487/RFC9220"/>
        </reference>
        <reference anchor="RFC9113">
          <front>
            <title>HTTP/2</title>
            <author fullname="M. Thomson" initials="M." role="editor" surname="Thomson"/>
            <author fullname="C. Benfield" initials="C." role="editor" surname="Benfield"/>
            <date month="June" year="2022"/>
            <abstract>
              <t>This specification describes an optimized expression of the semantics of the Hypertext Transfer Protocol (HTTP), referred to as HTTP version 2 (HTTP/2). HTTP/2 enables a more efficient use of network resources and a reduced latency by introducing field compression and allowing multiple concurrent exchanges on the same connection.</t>
              <t>This document obsoletes RFCs 7540 and 8740.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="9113"/>
          <seriesInfo name="DOI" value="10.17487/RFC9113"/>
        </reference>
        <reference anchor="RFC9114">
          <front>
            <title>HTTP/3</title>
            <author fullname="M. Bishop" initials="M." role="editor" surname="Bishop"/>
            <date month="June" year="2022"/>
            <abstract>
              <t>The QUIC transport protocol has several features that are desirable in a transport for HTTP, such as stream multiplexing, per-stream flow control, and low-latency connection establishment. This document describes a mapping of HTTP semantics over QUIC. This document also identifies HTTP/2 features that are subsumed by QUIC and describes how HTTP/2 extensions can be ported to HTTP/3.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="9114"/>
          <seriesInfo name="DOI" value="10.17487/RFC9114"/>
        </reference>
        <reference anchor="RFC9000">
          <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="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="RFC8470">
          <front>
            <title>Using Early Data in HTTP</title>
            <author fullname="M. Thomson" initials="M." surname="Thomson"/>
            <author fullname="M. Nottingham" initials="M." surname="Nottingham"/>
            <author fullname="W. Tarreau" initials="W." surname="Tarreau"/>
            <date month="September" year="2018"/>
            <abstract>
              <t>Using TLS early data creates an exposure to the possibility of a replay attack. This document defines mechanisms that allow clients to communicate with servers about HTTP requests that are sent in early data. Techniques are described that use these mechanisms to mitigate the risk of replay.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="8470"/>
          <seriesInfo name="DOI" value="10.17487/RFC8470"/>
        </reference>
        <reference anchor="RFC9209">
          <front>
            <title>The Proxy-Status HTTP Response Header Field</title>
            <author fullname="M. Nottingham" initials="M." surname="Nottingham"/>
            <author fullname="P. Sikora" initials="P." surname="Sikora"/>
            <date month="June" year="2022"/>
            <abstract>
              <t>This document defines the Proxy-Status HTTP response field to convey the details of an intermediary's response handling, including generated errors.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="9209"/>
          <seriesInfo name="DOI" value="10.17487/RFC9209"/>
        </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="CLEAR-SITE-DATA" target="https://www.w3.org/TR/clear-site-data/">
          <front>
            <title>Clear Site Data</title>
            <author>
              <organization/>
            </author>
            <date year="2017" month="November"/>
          </front>
        </reference>
        <reference anchor="CONNECT-UDP">
          <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="CONNECT-IP">
          <front>
            <title>Proxying IP in HTTP</title>
            <author fullname="T. Pauly" initials="T." role="editor" surname="Pauly"/>
            <author fullname="D. Schinazi" initials="D." surname="Schinazi"/>
            <author fullname="A. Chernyakhovsky" initials="A." surname="Chernyakhovsky"/>
            <author fullname="M. Kühlewind" initials="M." surname="Kühlewind"/>
            <author fullname="M. Westerlund" initials="M." surname="Westerlund"/>
            <date month="October" 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="RFC" value="9484"/>
          <seriesInfo name="DOI" value="10.17487/RFC9484"/>
        </reference>
        <reference anchor="RFC7838">
          <front>
            <title>HTTP Alternative Services</title>
            <author fullname="M. Nottingham" initials="M." surname="Nottingham"/>
            <author fullname="P. McManus" initials="P." surname="McManus"/>
            <author fullname="J. Reschke" initials="J." surname="Reschke"/>
            <date month="April" year="2016"/>
            <abstract>
              <t>This document specifies "Alternative Services" for HTTP, which allow an origin's resources to be authoritatively available at a separate network location, possibly accessed with a different protocol configuration.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="7838"/>
          <seriesInfo name="DOI" value="10.17487/RFC7838"/>
        </reference>
        <reference anchor="RFC6797">
          <front>
            <title>HTTP Strict Transport Security (HSTS)</title>
            <author fullname="J. Hodges" initials="J." surname="Hodges"/>
            <author fullname="C. Jackson" initials="C." surname="Jackson"/>
            <author fullname="A. Barth" initials="A." surname="Barth"/>
            <date month="November" year="2012"/>
            <abstract>
              <t>This specification defines a mechanism enabling web sites to declare themselves accessible only via secure connections and/or for users to be able to direct their user agent(s) to interact with given sites only over secure connections. This overall policy is referred to as HTTP Strict Transport Security (HSTS). The policy is declared by web sites via the Strict-Transport-Security HTTP response header field and/or by other means, such as user agent configuration, for example. [STANDARDS-TRACK]</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="6797"/>
          <seriesInfo name="DOI" value="10.17487/RFC6797"/>
        </reference>
        <reference anchor="I-D.schinazi-httpbis-wrap-up">
          <front>
            <title>The HTTP Wrap Up Capsule</title>
            <author fullname="David Schinazi" initials="D." surname="Schinazi">
              <organization>Google LLC</organization>
            </author>
            <author fullname="Lucas Pardue" initials="L." surname="Pardue">
              <organization>Cloudflare</organization>
            </author>
            <date day="16" month="October" year="2024"/>
            <abstract>
              <t>   HTTP intermediaries sometimes need to terminate long-lived request
   streams in order to facilitate load balancing or impose data limits.
   However, Web browsers commonly cannot retry failed proxied requests
   when they cannot ascertain whether an in-progress request was acted
   on.  To avoid user-visible failures, it is best for the intermediary
   to inform the client of upcoming request stream terminations in
   advance of the actual termination so that the client can wrap up
   existing operations related to that stream and start sending new work
   to a different stream or connection.  This document specifies a new
   "WRAP_UP" capsule that allows a proxy to instruct a client that it
   should not start new requests on a tunneled connection, while still
   allowing it to finish existing requests.

              </t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-schinazi-httpbis-wrap-up-01"/>
        </reference>
        <reference anchor="RFC7469">
          <front>
            <title>Public Key Pinning Extension for HTTP</title>
            <author fullname="C. Evans" initials="C." surname="Evans"/>
            <author fullname="C. Palmer" initials="C." surname="Palmer"/>
            <author fullname="R. Sleevi" initials="R." surname="Sleevi"/>
            <date month="April" year="2015"/>
            <abstract>
              <t>This document defines a new HTTP header that allows web host operators to instruct user agents to remember ("pin") the hosts' cryptographic identities over a period of time. During that time, user agents (UAs) will require that the host presents a certificate chain including at least one Subject Public Key Info structure whose fingerprint matches one of the pinned fingerprints for that host. By effectively reducing the number of trusted authorities who can authenticate the domain during the lifetime of the pin, pinning may reduce the incidence of man-in-the-middle attacks due to compromised Certification Authorities.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="7469"/>
          <seriesInfo name="DOI" value="10.17487/RFC7469"/>
        </reference>
        <reference anchor="RFC8942">
          <front>
            <title>HTTP Client Hints</title>
            <author fullname="I. Grigorik" initials="I." surname="Grigorik"/>
            <author fullname="Y. Weiss" initials="Y." surname="Weiss"/>
            <date month="February" year="2021"/>
            <abstract>
              <t>HTTP defines proactive content negotiation to allow servers to select the appropriate response for a given request, based upon the user agent's characteristics, as expressed in request headers. In practice, user agents are often unwilling to send those request headers, because it is not clear whether they will be used, and sending them impacts both performance and privacy.</t>
              <t>This document defines an Accept-CH response header that servers can use to advertise their use of request headers for proactive content negotiation, along with a set of guidelines for the creation of such headers, colloquially known as "Client Hints."</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="8942"/>
          <seriesInfo name="DOI" value="10.17487/RFC8942"/>
        </reference>
        <reference anchor="RFC6265">
          <front>
            <title>HTTP State Management Mechanism</title>
            <author fullname="A. Barth" initials="A." surname="Barth"/>
            <date month="April" year="2011"/>
            <abstract>
              <t>This document defines the HTTP Cookie and Set-Cookie header fields. These header fields can be used by HTTP servers to store state (called cookies) at HTTP user agents, letting the servers maintain a stateful session over the mostly stateless HTTP protocol. Although cookies have many historical infelicities that degrade their security and privacy, the Cookie and Set-Cookie header fields are widely used on the Internet. This document obsoletes RFC 2965. [STANDARDS-TRACK]</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="6265"/>
          <seriesInfo name="DOI" value="10.17487/RFC6265"/>
        </reference>
        <reference anchor="RFC7323">
          <front>
            <title>TCP Extensions for High Performance</title>
            <author fullname="D. Borman" initials="D." surname="Borman"/>
            <author fullname="B. Braden" initials="B." surname="Braden"/>
            <author fullname="V. Jacobson" initials="V." surname="Jacobson"/>
            <author fullname="R. Scheffenegger" initials="R." role="editor" surname="Scheffenegger"/>
            <date month="September" year="2014"/>
            <abstract>
              <t>This document specifies a set of TCP extensions to improve performance over paths with a large bandwidth * delay product and to provide reliable operation over very high-speed paths. It defines the TCP Window Scale (WS) option and the TCP Timestamps (TS) option and their semantics. The Window Scale option is used to support larger receive windows, while the Timestamps option can be used for at least two distinct mechanisms, Protection Against Wrapped Sequences (PAWS) and Round-Trip Time Measurement (RTTM), that are also described herein.</t>
              <t>This document obsoletes RFC 1323 and describes changes from it.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="7323"/>
          <seriesInfo name="DOI" value="10.17487/RFC7323"/>
        </reference>
      </references>
    </references>
    <?line 365?>

<section numbered="false" anchor="acknowledgments">
      <name>Acknowledgments</name>
      <t>Thanks to Amos Jeffries, Tommy Pauly, Kyle Nekritz, David Schinazi, and Kazuho Oku for close review and suggested changes.</t>
    </section>
  </back>
  <!-- ##markdown-source:
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
DxzjOd0tXgAA

-->

</rfc>
