<?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.43 (Ruby 3.4.9) -->
<rfc xmlns:xi="http://www.w3.org/2001/XInclude" ipr="trust200902" docName="draft-ietf-httpbis-connect-tcp-18" category="std" consensus="true" submissionType="IETF" tocInclude="true" sortRefs="true" symRefs="true" version="3">
  <!-- xml2rfc v2v3 conversion 3.34.1 -->
  <front>
    <title abbrev="CONNECT-TCP">Template-Driven HTTP CONNECT Proxying for TCP</title>
    <seriesInfo name="Internet-Draft" value="draft-ietf-httpbis-connect-tcp-18"/>
    <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="November" day="02"/>
    <area>wit</area>
    <workgroup>httpbis</workgroup>
    <abstract>
      <?line 45?>

<t>TCP tunneling using HTTP CONNECT has long been part of the core HTTP specification.  However, this tunneling functionality has several important deficiencies due to the lack of a well-defined HTTP origin or path.  This specification remedies those deficiencies by defining CONNECT-TCP, an alternative protocol for tunneling TCP in HTTP.  A proxy service for this protocol is described by a URI Template, similar to the CONNECT-UDP and CONNECT-IP protocols.</t>
    </abstract>
  </front>
  <middle>
    <?line 49?>

<section anchor="introduction">
      <name>Introduction</name>
      <section anchor="history">
        <name>History</name>
        <t>HTTP has used the CONNECT method for tunneling 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 the target destination (<xref section="9.3.6" sectionFormat="comma" target="RFC9110"/>). Prior to this specification, this was the only mechanism defined for proxying TCP over HTTP.  In this specification, this arrangement is referred to as a "classic HTTP CONNECT proxy".</t>
        <t>HTTP/3 <xref target="RFC9114"/> 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 tunneling 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="CAPSULE"/> 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 number, 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="ALT-SVC"/> or Strict-Transport-Security <xref target="HSTS"/>).</t>
        <t>Classic HTTP CONNECT requests are not extensible to carry in-stream metadata. For example, the WRAP_UP capsule <xref target="I-D.ietf-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 tunneling 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?>

<t>In this document, the term "proxy" refers to the HTTP server that acts upon a client's TCP tunneling request. If there are HTTP intermediaries (as defined in Section 3.7 of [HTTP]) between the client and the proxy, those are referred to as "intermediaries" or "gateways" in this document.</t>
      <t>The term "endpoint" describes an implementation of this specification in either client or proxy role.</t>
      <t>The protocol defined in this specification is termed "CONNECT-TCP".</t>
      <t>The term "CONNECT-TCP proxy" refers to a proxy that is identified by a URI Template for CONNECT-TCP.</t>
    </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 (Sections <xref target="CONNECT-UDP" section="2" sectionFormat="bare"/> and <xref target="CONNECT-UDP" section="3" sectionFormat="bare"/> of <xref target="CONNECT-UDP"/>), and are subject to the same validation rules.  Clients <bcp14>MUST</bcp14> substitute the destination host and port number into this template to produce a 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>If the request is well-formed and permissible, the proxy <bcp14>MUST</bcp14> attempt to establish the TCP connection before sending a final success or failure response.</t>
      <section anchor="payload-transport">
        <name>Payload Transport</name>
        <t>When using CONNECT-TCP, TCP payload data is sent in the payload of new Capsule Types named DATA and FINAL_DATA (see <xref target="fig-capsules"/> and registrations in <xref target="data-capsule"/>).  The ordered concatenation of these capsule payloads, which <bcp14>MAY</bcp14> be empty, 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>
        <figure anchor="fig-capsules">
          <name>DATA and FINAL_DATA Capsule Formats, using notation from Section 1.3 of [QUIC]</name>
          <artwork><![CDATA[
DATA Capsule {
  Type (i) = 0x08,
  Length (i),  # may be zero
  TCP Payload (..),
}

FINAL_DATA Capsule {
  Type (i) = 0x09,
  Length (i),  # may be zero
  TCP Payload (..),
}
]]></artwork>
        </figure>
        <t>The boundaries between DATA and FINAL_DATA capsules are not significant, and are not expected to match TCP segments, TLS records, HTTP DATA frames, QUIC STREAM frames, etc.  Recipients <bcp14>SHOULD</bcp14> begin forwarding payload from a DATA or FINAL_DATA capsule without waiting to receive the entire capsule, especially if the capsule is large.</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>
        <t>For example, an intermediary holding two successive DATA capsules in its transmission buffer could merge them, saving at least 2 bytes of encapsulation overhead when they are forwarded.</t>
        <t>This protocol supports backward-compatible extensions via additional Capsule Types, as described in <xref section="3.2" sectionFormat="of" target="CAPSULE"/>.</t>
      </section>
      <section anchor="in-http11">
        <name>In HTTP/1.1</name>
        <t>In HTTP/1.1 <xref target="RFC9112"/>, 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 whose value identifies 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 field (as recommended in <xref section="3.4" sectionFormat="comma" target="CAPSULE"/>).</t>
          </li>
        </ul>
        <t>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 field (as above).</t>
          </li>
        </ul>
        <t>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>CONNECT-TCP in HTTP/1.1: Example request for a connection to 192.0.2.1:443 via https://example.com/proxy{?target_host,target_port}</name>
          <sourcecode type="http-message"><![CDATA[
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
]]></sourcecode>
        </figure>
        <figure>
          <name>CONNECT-TCP in HTTP/1.1: Initial response</name>
          <sourcecode type="http-message"><![CDATA[
HTTP/1.1 100 Continue
]]></sourcecode>
        </figure>
        <figure>
          <name>CONNECT-TCP in HTTP/1.1: Final success response</name>
          <sourcecode type="http-message"><![CDATA[
HTTP/1.1 101 Switching Protocols
Connection: Upgrade
Upgrade: connect-tcp
Capsule-Protocol: ?1
Proxy-Status: example.com
]]></sourcecode>
        </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 CONNECT-TCP 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="CAPSULE"/>).</t>
        <figure>
          <name>CONNECT-TCP in HTTP/2: Example request to [2001:db8::1]:443</name>
          <artwork><![CDATA[
HEADERS
:method = CONNECT
:scheme = https
:authority = example.com
: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 CONNECT-TCP proxy has an unambiguous origin of its own.  Origin-scoped headers apply to this origin when they are associated with a CONNECT-TCP response.  Here are some origin-scoped headers that could potentially be sent by a CONNECT-TCP proxy:</t>
          <ul spacing="normal">
            <li>
              <t>Alt-Svc <xref target="ALT-SVC"/></t>
            </li>
            <li>
              <t>Strict-Transport-Security <xref target="HSTS"/></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 CONNECT-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 CONNECT-TCP proxy does not use the 407 (Proxy Authentication Required) status code and related header fields (<xref section="11.7" sectionFormat="comma" target="RFC9110"/>) because they do not traverse HTTP gateways (see <xref target="gateway-compatibility"/>).</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>
          <t>TLS Client Certificate authentication can also be used (see <xref target="gateway-compatibility"/>).</t>
        </section>
        <section anchor="caching-headers">
          <name>Caching Headers</name>
          <t>In HTTP/2 and HTTP/3, this specification uses the CONNECT method, which is not subject to caching (<xref section="9.3.6" sectionFormat="comma" target="RFC9110"/>).  However, in HTTP/1.1, the method is GET, which in other usages can be cacheable.  To minimize discrepancies between HTTP versions, the following requirements apply when using HTTP/1.1:</t>
          <ul spacing="normal">
            <li>
              <t>If the response has a heuristically cacheable status code (<xref section="15.1" sectionFormat="comma" target="RFC9110"/>), it <bcp14>SHOULD</bcp14> also carry a "Cache-Control: no-store" header field (<xref section="5.2" sectionFormat="comma" target="HTTP-CACHING"/>).
              </t>
              <ul spacing="normal">
                <li>
                  <t>This can occur if the request is rejected or the connection fails.</t>
                </li>
              </ul>
            </li>
            <li>
              <t>The proxy <bcp14>SHOULD NOT</bcp14> attach any other caching-related header fields to the response.</t>
            </li>
          </ul>
        </section>
      </section>
      <section anchor="closing-connections">
        <name>Closing Connections</name>
        <t>Connection termination is essentially symmetrical for proxies and their clients, which we refer to here as the "endpoints" of a request.</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="QUIC"/> 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="TLS"/>.</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>Any locally imposed timeout (<xref target="timeouts"/>) <bcp14>MUST</bcp14> be treated as an abrupt closure of the affected stream or connection.</t>
        <t>The mandatory behaviors above enable endpoints to detect any truncation of incoming TCP data.  The recommended behaviors propagate any TCP errors through the tunnel.</t>
        <t>In HTTP/3, endpoints <bcp14>MAY</bcp14> negotiate and use the RESET_STREAM_AT frame in order to reduce data loss during an abrupt closure <xref target="I-D.ietf-quic-reliable-stream-reset"/>.  However, RESET_STREAM_AT may not be very effective in this case, as TCP implementations will typically discard pending data when a RST is received.</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="480" viewBox="0 0 480 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 264,32 L 264,64" fill="none" stroke="black"/>
                <path d="M 352,64 L 352,160" fill="none" stroke="black"/>
                <path d="M 368,32 L 368,64" fill="none" stroke="black"/>
                <path d="M 408,32 L 408,64" fill="none" stroke="black"/>
                <path d="M 456,64 L 456,160" fill="none" stroke="black"/>
                <path d="M 472,32 L 472,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 264,32 L 368,32" fill="none" stroke="black"/>
                <path d="M 408,32 L 472,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 264,64 L 368,64" fill="none" stroke="black"/>
                <path d="M 408,64 L 472,64" fill="none" stroke="black"/>
                <path d="M 24,80 L 48,80" fill="none" stroke="black"/>
                <path d="M 96,80 L 192,80" fill="none" stroke="black"/>
                <path d="M 288,80 L 376,80" fill="none" stroke="black"/>
                <path d="M 424,80 L 448,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 384,96" fill="none" stroke="black"/>
                <path d="M 416,96 L 448,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 384,112" fill="none" stroke="black"/>
                <path d="M 416,112 L 456,112" fill="none" stroke="black"/>
                <path d="M 136,128 L 168,128" fill="none" stroke="black"/>
                <path d="M 304,128 L 352,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 344,144" fill="none" stroke="black"/>
                <polygon class="arrowhead" points="456,96 444,90.4 444,101.6" fill="black" transform="rotate(0,448,96)"/>
                <polygon class="arrowhead" points="456,80 444,74.4 444,85.6" fill="black" transform="rotate(0,448,80)"/>
                <polygon class="arrowhead" points="368,112 356,106.4 356,117.6" fill="black" transform="rotate(180,360,112)"/>
                <polygon class="arrowhead" points="352,144 340,138.4 340,149.6" fill="black" transform="rotate(0,344,144)"/>
                <polygon class="arrowhead" points="352,96 340,90.4 340,101.6" fill="black" transform="rotate(0,344,96)"/>
                <polygon class="arrowhead" points="352,80 340,74.4 340,85.6" fill="black" transform="rotate(0,344,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="308" y="52">Endpoint</text>
                  <text x="352" y="52">B</text>
                  <text x="432" y="52">TCP</text>
                  <text x="456" y="52">B</text>
                  <text x="72" y="84">"abc"</text>
                  <text x="240" y="84">DATA{"abc"}</text>
                  <text x="400" y="84">"abc"</text>
                  <text x="72" y="100">FIN</text>
                  <text x="236" y="100">FINAL_DATA{""}</text>
                  <text x="400" y="100">FIN</text>
                  <text x="72" y="116">FIN</text>
                  <text x="236" y="116">FINAL_DATA{""}</text>
                  <text x="400" 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="480" viewBox="0 0 480 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 264,32 L 264,64" fill="none" stroke="black"/>
                <path d="M 352,64 L 352,96" fill="none" stroke="black"/>
                <path d="M 368,32 L 368,64" fill="none" stroke="black"/>
                <path d="M 408,32 L 408,64" fill="none" stroke="black"/>
                <path d="M 456,64 L 456,96" fill="none" stroke="black"/>
                <path d="M 472,32 L 472,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 264,32 L 368,32" fill="none" stroke="black"/>
                <path d="M 408,32 L 472,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 264,64 L 368,64" fill="none" stroke="black"/>
                <path d="M 408,64 L 472,64" fill="none" stroke="black"/>
                <path d="M 24,80 L 56,80" fill="none" stroke="black"/>
                <path d="M 88,80 L 160,80" fill="none" stroke="black"/>
                <path d="M 320,80 L 384,80" fill="none" stroke="black"/>
                <path d="M 416,80 L 448,80" fill="none" stroke="black"/>
                <polygon class="arrowhead" points="456,80 444,74.4 444,85.6" fill="black" transform="rotate(0,448,80)"/>
                <polygon class="arrowhead" points="352,80 340,74.4 340,85.6" fill="black" transform="rotate(0,344,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="308" y="52">Endpoint</text>
                  <text x="352" y="52">B</text>
                  <text x="432" y="52">TCP</text>
                  <text x="456" y="52">B</text>
                  <text x="72" y="84">RST</text>
                  <text x="240" y="84">RST_STREAM{CON_ERR}</text>
                  <text x="400" 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="480" viewBox="0 0 480 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 264,32 L 264,64" fill="none" stroke="black"/>
                <path d="M 352,64 L 352,128" fill="none" stroke="black"/>
                <path d="M 368,32 L 368,64" fill="none" stroke="black"/>
                <path d="M 408,32 L 408,64" fill="none" stroke="black"/>
                <path d="M 456,64 L 456,128" fill="none" stroke="black"/>
                <path d="M 472,32 L 472,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 264,32 L 368,32" fill="none" stroke="black"/>
                <path d="M 408,32 L 472,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 264,64 L 368,64" fill="none" stroke="black"/>
                <path d="M 408,64 L 472,64" fill="none" stroke="black"/>
                <path d="M 24,80 L 48,80" fill="none" stroke="black"/>
                <path d="M 96,80 L 192,80" fill="none" stroke="black"/>
                <path d="M 288,80 L 376,80" fill="none" stroke="black"/>
                <path d="M 424,80 L 448,80" fill="none" stroke="black"/>
                <path d="M 128,112 L 144,112" fill="none" stroke="black"/>
                <path d="M 328,112 L 384,112" fill="none" stroke="black"/>
                <path d="M 416,112 L 448,112" fill="none" stroke="black"/>
                <polygon class="arrowhead" points="456,112 444,106.4 444,117.6" fill="black" transform="rotate(0,448,112)"/>
                <polygon class="arrowhead" points="456,80 444,74.4 444,85.6" fill="black" transform="rotate(0,448,80)"/>
                <polygon class="arrowhead" points="352,112 340,106.4 340,117.6" fill="black" transform="rotate(0,344,112)"/>
                <polygon class="arrowhead" points="352,80 340,74.4 340,85.6" fill="black" transform="rotate(0,344,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="308" y="52">Endpoint</text>
                  <text x="352" y="52">B</text>
                  <text x="432" y="52">TCP</text>
                  <text x="456" y="52">B</text>
                  <text x="72" y="84">"abc"</text>
                  <text x="240" y="84">DATA{"abc"}</text>
                  <text x="400" y="84">"abc"</text>
                  <text x="172" y="100">(...</text>
                  <text x="224" y="100">timeout</text>
                  <text x="264" y="100">@</text>
                  <text x="280" y="100">A</text>
                  <text x="308" y="100">...)</text>
                  <text x="160" y="116">FIN</text>
                  <text x="192" y="116">(no</text>
                  <text x="264" y="116">close_notify)</text>
                  <text x="400" 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="480" viewBox="0 0 480 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 264,32 L 264,64" fill="none" stroke="black"/>
                <path d="M 352,64 L 352,176" fill="none" stroke="black"/>
                <path d="M 368,32 L 368,64" fill="none" stroke="black"/>
                <path d="M 408,32 L 408,64" fill="none" stroke="black"/>
                <path d="M 456,64 L 456,176" fill="none" stroke="black"/>
                <path d="M 472,32 L 472,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 264,32 L 368,32" fill="none" stroke="black"/>
                <path d="M 408,32 L 472,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 264,64 L 368,64" fill="none" stroke="black"/>
                <path d="M 408,64 L 472,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 392,80" fill="none" stroke="black"/>
                <path d="M 424,80 L 448,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 384,128" fill="none" stroke="black"/>
                <path d="M 432,128 L 456,128" fill="none" stroke="black"/>
                <path d="M 136,144 L 168,144" fill="none" stroke="black"/>
                <path d="M 304,144 L 352,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 392,160" fill="none" stroke="black"/>
                <path d="M 424,160 L 448,160" fill="none" stroke="black"/>
                <polygon class="arrowhead" points="456,160 444,154.4 444,165.6" fill="black" transform="rotate(0,448,160)"/>
                <polygon class="arrowhead" points="456,80 444,74.4 444,85.6" fill="black" transform="rotate(0,448,80)"/>
                <polygon class="arrowhead" points="368,128 356,122.4 356,133.6" fill="black" transform="rotate(180,360,128)"/>
                <polygon class="arrowhead" points="352,160 340,154.4 340,165.6" fill="black" transform="rotate(0,344,160)"/>
                <polygon class="arrowhead" points="352,80 340,74.4 340,85.6" fill="black" transform="rotate(0,344,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="308" y="52">Endpoint</text>
                  <text x="352" y="52">B</text>
                  <text x="432" y="52">TCP</text>
                  <text x="456" y="52">B</text>
                  <text x="80" y="84">FIN</text>
                  <text x="244" y="84">FINAL_DATA{""}</text>
                  <text x="408" y="84">FIN</text>
                  <text x="80" y="116">(FIN)</text>
                  <text x="408" y="116">(FIN)</text>
                  <text x="80" y="132">"abc"</text>
                  <text x="240" y="132">FINAL_DATA{"abc"}</text>
                  <text x="408" 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="408" 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 anchor="handling-invalid-data">
          <name>Handling Invalid Data</name>
          <t>An endpoint that receives invalid data from its peer is subject to the same requirements as when receiving an abrupt closure of the receive stream (see <xref target="closing-connections"/>).  Some examples of invalid data include:</t>
          <ul spacing="normal">
            <li>
              <t>A second FINAL_DATA capsule.</t>
            </li>
            <li>
              <t>A DATA capsule after FINAL_DATA.</t>
            </li>
            <li>
              <t>Data that results in a parsing error under the Capsule Protocol.</t>
            </li>
            <li>
              <t>A capsule that is truncated by the end of the stream.</t>
            </li>
            <li>
              <t>A capsule that would require unreasonable effort to process.</t>
            </li>
          </ul>
          <t>Note that very large DATA and FINAL_DATA capsules are still valid, as they can be forwarded incrementally using a bounded memory buffer.</t>
        </section>
      </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="QUIC"/>).  Proxies <bcp14>MUST</bcp14> buffer this "optimistic" content until the TCP stream becomes writable, and discard it if the TCP connection fails.</t>
        <t>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.3.10" sectionFormat="comma" target="TLS"/>).  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 <tt>target_host</tt> when a request arrives in early data, but delay the TCP connection until the TLS handshake completes.</t>
        <t>When DNS resolution of <tt>target_host</tt> produces IP addresses from multiple address families, proxies <bcp14>SHOULD</bcp14> use a racing procedure such as Happy Eyeballs <xref target="HEv2"/> to accelerate connection establishment.  Proxies that race multiple connection attempts <bcp14>MUST</bcp14> buffer any optimistic content until a connection is selected and <bcp14>MUST NOT</bcp14> transmit any payload data on the other connections.</t>
      </section>
      <section anchor="indicating-failure">
        <name>Indicating Failure</name>
        <t>Failure to initiate a tunnel is indicated by the HTTP status code.</t>
        <t>A 4xx status code indicates that the request is malformed or impermissible.  For example, if the proxy performs DNS resolution of <tt>target_host</tt> and receives an IP address that is disallowed by the proxy's policy, it might return 403 (Forbidden).</t>
        <t>A 5xx status code indicates a failure in the attempt, such as when a TCP connection was attempted but did not succeed.  The 502 (Bad Gateway) and 504 (Gateway Timeout) status codes are commonly used.</t>
        <t>The 429 (Too Many Requests) and 503 (Service Unavailable) status codes indicate a temporary failure, and can carry a Retry-After response header field (<xref section="10.2.3" sectionFormat="comma" target="RFC9110"/>).  If included, this field applies to all requests using this URI Template.</t>
      </section>
      <section anchor="conveying-metadata">
        <name>Conveying Metadata</name>
        <t>This specification supports the 100 (Continue) status code (<xref section="15.2.1" sectionFormat="comma" target="RFC9110"/>) in any HTTP version.  Proxies <bcp14>SHOULD</bcp14> send this status code whenever they accept a request, without waiting for the proxy-destination TCP handshake to succeed or fail.  This allows for a few useful improvements:</t>
        <ul spacing="normal">
          <li>
            <t>Clients can provide a clearer status indication while waiting for the destination host to respond.  (TCP handshakes can hang for several minutes before failing.)</t>
          </li>
          <li>
            <t>Clients can apply separate timeouts to the tunneling request and connection establishment.</t>
          </li>
          <li>
            <t>In HTTP/2 and HTTP/3, clients have the option to delay some or all of the optimistic payload data until after confirming that the request is permissible.  This strategy reduces wasted effort when the request is rejected.</t>
          </li>
        </ul>
        <t>Note that a client in this specification cannot send an "Expect: 100-continue" request header field, because the request does not include any "content" (<xref section="10.1.1" sectionFormat="comma" target="RFC9110"/>).</t>
        <t>Proxies implementing this specification <bcp14>SHOULD</bcp14> include a Proxy-Status response header field <xref target="PROXY-STATUS"/> 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, CONNECT-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 (<xref target="gateway-compatibility"/>).</t>
        <t>CONNECT-TCP proxies can also be made invisible to probes from unauthorized clients:</t>
        <ul spacing="normal">
          <li>
            <t>The URI template can include a high-entropy path, similar to Capability URLs <xref target="CAPABILITY"/>.</t>
          </li>
          <li>
            <t>The proxy can require HTTP Concealed Authentication (<xref section="6.4" sectionFormat="comma" target="CONCEALED"/>).</t>
          </li>
        </ul>
      </section>
      <section anchor="clients">
        <name>Clients</name>
        <t>This specification does not require any specific type of configuration input.  Suitable configuration input types include:</t>
        <ul spacing="normal">
          <li>
            <t>A URI Template string, as described in <xref target="specification"/>.</t>
          </li>
          <li>
            <t>An IP address or hostname, with optional or required port and scheme (as often used to describe classic HTTP CONNECT proxies).  A corresponding CONNECT-TCP proxy might be found in two ways:
            </t>
            <ul spacing="normal">
              <li>
                <t>At the default template for "connect-tcp" (<xref target="fig-default"/>).</t>
              </li>
              <li>
                <t>In the "proxies" array of a provisioning domain resource retrieved from the corresponding ".well-known" URI (Sections <xref target="I-D.ietf-intarea-proxy-config" section="2" sectionFormat="bare"/> and <xref target="I-D.ietf-intarea-proxy-config" section="3" sectionFormat="bare"/> of <xref target="I-D.ietf-intarea-proxy-config"/>).</t>
              </li>
            </ul>
          </li>
          <li>
            <t>A provisioning domain resource, configured directly or identified by a local or remote URI (e.g., using "file://" or "https://").</t>
          </li>
        </ul>
        <figure anchor="fig-default">
          <name>Registered default template</name>
          <artwork><![CDATA[
https://$PROXY_HOST:$PROXY_PORT/.well-known/masque
                 /tcp/{target_host}/{target_port}/
]]></artwork>
        </figure>
        <t>All of these input types <bcp14>MAY</bcp14> share a single input string, as they can be disambiguated reliably by parsing and probing.  However, it may be preferable to indicate the configuration input type explicitly, to reduce probing delays while supporting clients with differing capabilities.</t>
        <t>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's status code is 426 (Upgrade Required), with an "Upgrade: connect-tcp" response header.</t>
          </li>
          <li>
            <t>In any HTTP version: the response's 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" (<xref target="fig-default"/>).  If this request succeeds, the client <bcp14>SHOULD</bcp14> record a preference for CONNECT-TCP to avoid further retry delays.</t>
      </section>
      <section anchor="gateway-compatibility">
        <name>Gateways</name>
        <t>CONNECT-TCP requests can traverse standard HTTP gateways 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 <bcp14>MUST</bcp14>:</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>
        <t>If the proxy relies on TLS Client Certificates for client authentication, the gateway <bcp14>MUST</bcp14> perform this authentication itself or pass the relevant information to the origin (e.g., using a Client-Cert request header field <xref target="RFC9440"/>).</t>
      </section>
    </section>
    <section anchor="security-considerations">
      <name>Security Considerations</name>
      <t>CONNECT-TCP 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.  The "destination_ip_prohibited" Proxy Error Type from <xref section="2.3.5" sectionFormat="of" target="PROXY-STATUS"/> can be useful when rejecting unauthorized requests.</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>
      <t>See <xref section="7" sectionFormat="of" target="CONNECT-UDP"/> for a comparison of the risks of operating a TCP or UDP proxy.</t>
      <section anchor="resource-exhaustion">
        <name>Resource Exhaustion attacks</name>
        <t>A malicious client can 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 section="1.1" sectionFormat="comma" 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 forwarding data.  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>Mitigations:
                </t>
                <ul spacing="normal">
                  <li>
                    <t>Enable the PAWS optimization (<xref section="5" sectionFormat="comma" target="RFC7323"/>) across successive connections (e.g., Linux's <tt>tcp_tw_reuse=1</tt> <xref target="SYSCTL"/>).  This makes TIME-WAIT 4-tuples rapidly reusable if the destination enables TCP Timestamps, which most do.</t>
                  </li>
                  <li>
                    <t>Allocate a large range of IP addresses for TCP connections (especially in IPv6).</t>
                  </li>
                  <li>
                    <t>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.</t>
                  </li>
                  <li>
                    <t>If necessary, perform an abrupt TCP closure that destroys the Transmission Control Block.  Note that reusing a 4-tuple in this way can increase the risk of interference between successive connections.</t>
                  </li>
                </ul>
              </li>
            </ul>
          </li>
        </ul>
      </section>
      <section anchor="client-authentication">
        <name>Client Authentication</name>
        <t>A proxy server operating without access controls on the open internet (an "open proxy") is likely to be discovered and misused quickly by attackers.  HTTP client authentication is the most common way to avoid this misuse.</t>
        <t><xref target="authentication-headers"/> describes how to use HTTP client authentication with this specification.  Each HTTP client authentication scheme offers distinct security properties, so care should be taken to select an appropriate scheme for each deployment.  See <xref section="17.16" sectionFormat="comma" target="RFC9110"/> for additional guidance related to HTTP authentication.</t>
      </section>
      <section anchor="tls-early-data">
        <name>TLS Early Data</name>
        <t>This specification supports sending both proxying requests and optimistic payload data in TLS early data (<xref target="latency-optimizations"/>).  TLS 1.3 recommends, but does not require, replay protection for this data (<xref section="8" sectionFormat="comma" target="TLS"/>), so a replay attack could cause the proxy service to establish multiple connections to the target, and to deliver any optimistic payload data on each of these connections.  When such a replay attack would cause harm (e.g., when the optimistic data represents a non-idempotent application command), clients <bcp14>MUST NOT</bcp14> use TLS early data.</t>
        <t>See <xref section="6" sectionFormat="of" target="RFC8470"/> for additional relevant security considerations.</t>
      </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="TLS"/>, 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 tunneled 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="timeouts">
        <name>Timeouts</name>
        <t>Except when actively sending or receiving data, an endpoint is always waiting for an event from its peer or its TCP connection.  HTTP and TCP are designed to ensure that such an event always arrives, so the connection is never permanently stuck in any state until it is fully closed.  However, for efficient operation, it may be necessary to adjust the settings for TCP keep-alives (<xref section="3.8.4" sectionFormat="comma" target="TCP"/>), QUIC idle timeouts (<xref section="10.1" sectionFormat="comma" target="QUIC"/>), HTTP/2 PING frames (<xref section="6.7" sectionFormat="comma" target="RFC9113"/>), and other transport options.</t>
        <t>Endpoints <bcp14>MAY</bcp14> impose additional timeouts, especially as a defense against certain resource exhaustion attacks (<xref target="resource-exhaustion"/>).  However, operators should apply timeouts cautiously to minimize the impact on connections that are functioning but slow.   See <xref target="closing-connections"/> for related requirements.</t>
        <t>For example, enabling PING frames on idle HTTP/2 connections allows the operator to prevent some kinds of failures and detect failed connections faster, but it uses more bandwidth, CPU time, and radio power, and increases the risk of false-positive connection failures.  Optimal transport settings will depend on the network environment (e.g., mobile vs. fixed), characteristics of the tunneled application, and many other considerations.</t>
      </section>
      <section anchor="scope-of-packet-level-metadata">
        <name>Scope of Packet-Level Metadata</name>
        <t>This specification does not provide a way to pass packet-level metadata such as IPv6 Extension Headers <xref section="4" sectionFormat="comma" target="RFC2460"/>, DiffServ Codepoints (DSCP) <xref target="RFC2474"/>, or Explicit Congestion Notification (ECN) marks <xref target="RFC3168"/> through the tunnel.  TCP options and non-fatal ICMP messages (e.g., Packet Too Big) are similarly not relayed.  Instead, these signals are processed by the relevant endpoint of this specification, which is also the TCP endpoint and only relays payload data through the tunnel.</t>
        <t>Consumption and generation of these signals on each connection is controlled by the endpoint, and is independent from any behaviors of the other endpoint and any similar signals on the tunnel's HTTP connection.  If the operator has requirements related to these behaviors, it must configure the relevant endpoint (typically the proxy) accordingly.</t>
      </section>
      <section anchor="ip-address-sharing">
        <name>IP address sharing</name>
        <t>A TCP proxy typically uses the same IP address to establish connections on behalf of multiple clients, especially in IPv4. <xref target="RFC6269"/> provides guidance regarding difficulties that can arise from IP address sharing, including in this arrangement.</t>
      </section>
      <section anchor="diagnostics-and-monitoring">
        <name>Diagnostics and Monitoring</name>
        <t>A proxy in this protocol reports success or failure in each response via the HTTP status code and the Proxy-Status response header field.  Monitoring those error codes is a sensible way to assess the functioning of a proxy server.  Other relevant performance indicators may include:</t>
        <ul spacing="normal">
          <li>
            <t>Abrupt closure rates</t>
          </li>
          <li>
            <t>Number of active tunnels per user</t>
          </li>
          <li>
            <t>Total throughput in each direction</t>
          </li>
          <li>
            <t>Number of bytes buffered</t>
          </li>
          <li>
            <t>Connection duration</t>
          </li>
          <li>
            <t>Time spent establishing or closing connections</t>
          </li>
          <li>
            <t>Number of half-closed or WAIT-state connections</t>
          </li>
          <li>
            <t>DNS resolution delay</t>
          </li>
        </ul>
        <t>An increase in any of these measures could indicate an operational problem or a resource exhaustion attack (<xref target="resource-exhaustion"/>).  See <xref target="resource-exhaustion"/> for guidance on relevant defenses and limits.</t>
      </section>
    </section>
    <section anchor="iana-considerations">
      <name>IANA Considerations</name>
      <section anchor="new-upgrade-token">
        <name>New Upgrade Token</name>
        <t>IANA is requested to add the following entry to the "HTTP Upgrade Tokens" registry under "Hypertext Transfer Protocol (HTTP) Upgrade Token Registry" registry group:</t>
        <table>
          <thead>
            <tr>
              <th align="left">Value</th>
              <th align="left">Description</th>
              <th align="left">Expected Version Tokens</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">(None)</td>
              <td align="left">(This document)</td>
            </tr>
          </tbody>
        </table>
        <section removeInRFC="true" anchor="interop-testing">
          <name>Interop testing</name>
          <t>For interoperability testing of this draft version, implementations <bcp14>SHALL</bcp14> use the value "connect-tcp-12".</t>
        </section>
      </section>
      <section anchor="iana-template">
        <name>New MASQUE Default Template</name>
        <t>IANA is requested to add the following entry to the "MASQUE URI Suffixes" registry under "Multiplexed Application Substrate over QUIC Encryption (MASQUE)" registry group:</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>IANA is requested to add the following entry to the "HTTP Capsule Types" registry under "Multiplexed Application Substrate over QUIC Encryption (MASQUE)" registry group:</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">0x08</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">0x09</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>
      </section>
    </section>
  </middle>
  <back>
    <displayreference target="RFC9110" to="HTTP"/>
    <displayreference target="RFC9112" to="HTTP/1.1"/>
    <displayreference target="RFC9113" to="HTTP/2"/>
    <displayreference target="RFC9114" to="HTTP/3"/>
    <references anchor="sec-combined-references">
      <name>References</name>
      <references anchor="sec-normative-references">
        <name>Normative References</name>
        <reference anchor="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="RFC9112">
          <front>
            <title>HTTP/1.1</title>
            <author fullname="R. Fielding" initials="R." role="editor" surname="Fielding"/>
            <author fullname="M. Nottingham" initials="M." role="editor" surname="Nottingham"/>
            <author fullname="J. Reschke" initials="J." role="editor" surname="Reschke"/>
            <date month="June" year="2022"/>
            <abstract>
              <t>The Hypertext Transfer Protocol (HTTP) is a stateless application-level protocol for distributed, collaborative, hypertext information systems. This document specifies the HTTP/1.1 message syntax, message parsing, connection management, and related security concerns.</t>
              <t>This document obsoletes portions of RFC 7230.</t>
            </abstract>
          </front>
          <seriesInfo name="STD" value="99"/>
          <seriesInfo name="RFC" value="9112"/>
          <seriesInfo name="DOI" value="10.17487/RFC9112"/>
        </reference>
        <reference anchor="RFC9113">
          <front>
            <title>HTTP/2</title>
            <author fullname="M. Thomson" initials="M." role="editor" surname="Thomson"/>
            <author fullname="C. Benfield" initials="C." role="editor" surname="Benfield"/>
            <date month="June" year="2022"/>
            <abstract>
              <t>This specification describes an optimized expression of the semantics of the Hypertext Transfer Protocol (HTTP), referred to as HTTP version 2 (HTTP/2). HTTP/2 enables a more efficient use of network resources and a reduced latency by introducing field compression and allowing multiple concurrent exchanges on the same connection.</t>
              <t>This document obsoletes RFCs 7540 and 8740.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="9113"/>
          <seriesInfo name="DOI" value="10.17487/RFC9113"/>
        </reference>
        <reference anchor="RFC9114">
          <front>
            <title>HTTP/3</title>
            <author fullname="M. Bishop" initials="M." role="editor" surname="Bishop"/>
            <date month="June" year="2022"/>
            <abstract>
              <t>The QUIC transport protocol has several features that are desirable in a transport for HTTP, such as stream multiplexing, per-stream flow control, and low-latency connection establishment. This document describes a mapping of HTTP semantics over QUIC. This document also identifies HTTP/2 features that are subsumed by QUIC and describes how HTTP/2 extensions can be ported to HTTP/3.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="9114"/>
          <seriesInfo name="DOI" value="10.17487/RFC9114"/>
        </reference>
        <reference anchor="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="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="CAPSULE">
          <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="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="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="TLS">
          <front>
            <title>The Transport Layer Security (TLS) Protocol Version 1.3</title>
            <author fullname="E. Rescorla" initials="E." surname="Rescorla"/>
            <date month="July" year="2026"/>
            <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 obsoletes RFC 8446, which specified TLS 1.3. This document obsoletes RFC 5246 (specifying TLS 1.2) and RFCs 5077, 6961, 7627, and 8422, all of which pertain to TLS 1.2 or earlier, and updates RFCs 5705 and 6066. This document also specifies new requirements for TLS 1.2 implementations.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="9846"/>
          <seriesInfo name="DOI" value="10.17487/RFC9846"/>
        </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="PROXY-STATUS">
          <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>
        <reference anchor="TCP">
          <front>
            <title>Transmission Control Protocol (TCP)</title>
            <author fullname="W. Eddy" initials="W." role="editor" surname="Eddy"/>
            <date month="August" year="2022"/>
            <abstract>
              <t>This document specifies the Transmission Control Protocol (TCP). TCP is an important transport-layer protocol in the Internet protocol stack, and it has continuously evolved over decades of use and growth of the Internet. Over this time, a number of changes have been made to TCP as it was specified in RFC 793, though these have only been documented in a piecemeal fashion. This document collects and brings those changes together with the protocol specification from RFC 793. This document obsoletes RFC 793, as well as RFCs 879, 2873, 6093, 6429, 6528, and 6691 that updated parts of RFC 793. It updates RFCs 1011 and 1122, and it should be considered as a replacement for the portions of those documents dealing with TCP requirements. It also updates RFC 5961 by adding a small clarification in reset handling while in the SYN-RECEIVED state. The TCP header control bits from RFC 793 have also been updated based on RFC 3168.</t>
            </abstract>
          </front>
          <seriesInfo name="STD" value="7"/>
          <seriesInfo name="RFC" value="9293"/>
          <seriesInfo name="DOI" value="10.17487/RFC9293"/>
        </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="SYSCTL" target="https://www.kernel.org/doc/html/v7.1/networking/ip-sysctl.html">
          <front>
            <title>IP Sysctl -- The Linux Kernel documentation</title>
            <author>
              <organization/>
            </author>
            <date year="2026" month="June"/>
          </front>
        </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="ALT-SVC">
          <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="HSTS">
          <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.ietf-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="7" month="July" year="2025"/>
            <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-ietf-httpbis-wrap-up-01"/>
        </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="HTTP-CACHING">
          <front>
            <title>HTTP Caching</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 defines HTTP caches and the associated header fields that control cache behavior or indicate cacheable response messages.</t>
              <t>This document obsoletes RFC 7234.</t>
            </abstract>
          </front>
          <seriesInfo name="STD" value="98"/>
          <seriesInfo name="RFC" value="9111"/>
          <seriesInfo name="DOI" value="10.17487/RFC9111"/>
        </reference>
        <reference anchor="I-D.ietf-quic-reliable-stream-reset">
          <front>
            <title>QUIC Stream Resets with Partial Delivery</title>
            <author fullname="Marten Seemann" initials="M." surname="Seemann">
         </author>
            <author fullname="Kazuho Oku" initials="K." surname="Oku">
              <organization>Fastly</organization>
            </author>
            <date day="6" month="September" year="2026"/>
            <abstract>
              <t>   QUIC defines a RESET_STREAM frame to abort sending on a stream.  When
   a sender resets a stream, it also stops retransmitting STREAM frames
   for this stream in the event of packet loss.  On the receiving side,
   there is no guarantee that any data sent on that stream is delivered.

   This document defines a new QUIC frame, the RESET_STREAM_AT frame,
   that allows resetting a stream, while guaranteeing delivery of stream
   data up to a certain byte offset.

              </t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-ietf-quic-reliable-stream-reset-11"/>
        </reference>
        <reference anchor="HEv2">
          <front>
            <title>Happy Eyeballs Version 2: Better Connectivity Using Concurrency</title>
            <author fullname="D. Schinazi" initials="D." surname="Schinazi"/>
            <author fullname="T. Pauly" initials="T." surname="Pauly"/>
            <date month="December" year="2017"/>
            <abstract>
              <t>Many communication protocols operating over the modern Internet use hostnames. These often resolve to multiple IP addresses, each of which may have different performance and connectivity characteristics. Since specific addresses or address families (IPv4 or IPv6) may be blocked, broken, or sub-optimal on a network, clients that attempt multiple connections in parallel have a chance of establishing a connection more quickly. This document specifies requirements for algorithms that reduce this user-visible delay and provides an example algorithm, referred to as "Happy Eyeballs". This document obsoletes the original algorithm description in RFC 6555.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="8305"/>
          <seriesInfo name="DOI" value="10.17487/RFC8305"/>
        </reference>
        <reference anchor="CONCEALED">
          <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.ietf-intarea-proxy-config">
          <front>
            <title>Communicating Proxy Configurations in Provisioning Domains</title>
            <author fullname="Tommy Pauly" initials="T." surname="Pauly">
              <organization>Apple, Inc.</organization>
            </author>
            <author fullname="Dragana Damjanovic" initials="D." surname="Damjanovic">
              <organization>Microsoft</organization>
            </author>
            <author fullname="Yaroslav Rosomakho" initials="Y." surname="Rosomakho">
              <organization>Zscaler</organization>
            </author>
            <date day="19" month="May" year="2026"/>
            <abstract>
              <t>   This document defines a mechanism for accessing provisioning domain
   information associated with a proxy, such as other proxy URIs that
   support different protocols and information about which destinations
   are accessible using a proxy.

Discussion Venues

   This note is to be removed before publishing as an RFC.

   Source for this draft and an issue tracker can be found at
   https://github.com/tfpauly/privacy-proxy.

              </t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-ietf-intarea-proxy-config-14"/>
        </reference>
        <reference anchor="RFC9440">
          <front>
            <title>Client-Cert HTTP Header Field</title>
            <author fullname="B. Campbell" initials="B." surname="Campbell"/>
            <author fullname="M. Bishop" initials="M." surname="Bishop"/>
            <date month="July" year="2023"/>
            <abstract>
              <t>This document describes HTTP extension header fields that allow a TLS terminating reverse proxy (TTRP) to convey the client certificate information of a mutually authenticated TLS connection to the origin server in a common and predictable manner.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="9440"/>
          <seriesInfo name="DOI" value="10.17487/RFC9440"/>
        </reference>
        <reference anchor="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>
        <reference anchor="RFC2460">
          <front>
            <title>Internet Protocol, Version 6 (IPv6) Specification</title>
            <author fullname="S. Deering" initials="S." surname="Deering"/>
            <author fullname="R. Hinden" initials="R." surname="Hinden"/>
            <date month="December" year="1998"/>
            <abstract>
              <t>This document specifies version 6 of the Internet Protocol (IPv6), also sometimes referred to as IP Next Generation or IPng. [STANDARDS-TRACK]</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="2460"/>
          <seriesInfo name="DOI" value="10.17487/RFC2460"/>
        </reference>
        <reference anchor="RFC2474">
          <front>
            <title>Definition of the Differentiated Services Field (DS Field) in the IPv4 and IPv6 Headers</title>
            <author fullname="K. Nichols" initials="K." surname="Nichols"/>
            <author fullname="S. Blake" initials="S." surname="Blake"/>
            <author fullname="F. Baker" initials="F." surname="Baker"/>
            <author fullname="D. Black" initials="D." surname="Black"/>
            <date month="December" year="1998"/>
            <abstract>
              <t>This document defines the IP header field, called the DS (for differentiated services) field. [STANDARDS-TRACK]</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="2474"/>
          <seriesInfo name="DOI" value="10.17487/RFC2474"/>
        </reference>
        <reference anchor="RFC3168">
          <front>
            <title>The Addition of Explicit Congestion Notification (ECN) to IP</title>
            <author fullname="K. Ramakrishnan" initials="K." surname="Ramakrishnan"/>
            <author fullname="S. Floyd" initials="S." surname="Floyd"/>
            <author fullname="D. Black" initials="D." surname="Black"/>
            <date month="September" year="2001"/>
            <abstract>
              <t>This memo specifies the incorporation of ECN (Explicit Congestion Notification) to TCP and IP, including ECN's use of two bits in the IP header. [STANDARDS-TRACK]</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="3168"/>
          <seriesInfo name="DOI" value="10.17487/RFC3168"/>
        </reference>
        <reference anchor="RFC6269">
          <front>
            <title>Issues with IP Address Sharing</title>
            <author fullname="M. Ford" initials="M." role="editor" surname="Ford"/>
            <author fullname="M. Boucadair" initials="M." surname="Boucadair"/>
            <author fullname="A. Durand" initials="A." surname="Durand"/>
            <author fullname="P. Levis" initials="P." surname="Levis"/>
            <author fullname="P. Roberts" initials="P." surname="Roberts"/>
            <date month="June" year="2011"/>
            <abstract>
              <t>The completion of IPv4 address allocations from IANA and the Regional Internet Registries (RIRs) is causing service providers around the world to question how they will continue providing IPv4 connectivity service to their subscribers when there are no longer sufficient IPv4 addresses to allocate them one per subscriber. Several possible solutions to this problem are now emerging based around the idea of shared IPv4 addressing. These solutions give rise to a number of issues, and this memo identifies those common to all such address sharing approaches. Such issues include application failures, additional service monitoring complexity, new security vulnerabilities, and so on. Solution-specific discussions are out of scope.</t>
              <t>Deploying IPv6 is the only perennial way to ease pressure on the public IPv4 address pool without the need for address sharing mechanisms that give rise to the issues identified herein. This document is not an Internet Standards Track specification; it is published for informational purposes.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="6269"/>
          <seriesInfo name="DOI" value="10.17487/RFC6269"/>
        </reference>
      </references>
    </references>
    <?line 519?>

<section numbered="false" anchor="acknowledgments">
      <name>Acknowledgments</name>
      <t>This document benefited from close review and suggested changes by:</t>
      <ul spacing="normal">
        <li>
          <t>Mohamed Boucadair</t>
        </li>
        <li>
          <t>Deb Cooley</t>
        </li>
        <li>
          <t>Gorry Fairhurst</t>
        </li>
        <li>
          <t>Thomas Fossati</t>
        </li>
        <li>
          <t>Amos Jeffries</t>
        </li>
        <li>
          <t>Mahesh Jethanandani</t>
        </li>
        <li>
          <t>Antun Jurkovic</t>
        </li>
        <li>
          <t>Eric Kinnear</t>
        </li>
        <li>
          <t>Kyle Nekritz</t>
        </li>
        <li>
          <t>Kazuho Oku</t>
        </li>
        <li>
          <t>Tommy Pauly</t>
        </li>
        <li>
          <t>Yaroslav Romakho</t>
        </li>
        <li>
          <t>David Schinazi</t>
        </li>
        <li>
          <t>Ketan Talaulikar</t>
        </li>
        <li>
          <t>Willy Tarreau</t>
        </li>
      </ul>
    </section>
  </back>
  <!-- ##markdown-source:
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
p1bvPNl+8hi2prhE2U3pUjpgCvNmwN85E3OATMwB0l/AHOK8zbs7Qfh9InXL
Lk3mGB7jW9c5hrN6tJwsC/iwVM0jKkniEaCDASN3YTq8z5TF/GYn6w1Ow8jQ
aP9PPw2CJdgVvGdu2WjF+zqcS0cUIotV9U4ZsKXpama/Y3teBDkny+7mU7Mm
IfcWgM5EGNFuQoNJ/OLidm3lYMh5rqwGyRSEbeNEp/RZPFWR3NDJqFXmAohO
Tulv7xbhnF2XlxH5Aola6rmazxCnGhN0+TKa61W5OJlyNB/ZKa+Y5NhQ0VWX
i2QMh+7QDjfYv5HM5uv3gvuxgBuuqTkYTgtNRBSVLkUwpRUm0LpC2wfIiKwF
75QUC+AhzNKAi02IahDuCK2FqyKvL69C/agH36vAzRzYopLIo22vdcwJIWXu
00y+fBgguYNE9HlPa/cpxytxWK+7xkmljh2kgqyBR3SsU3ViW5Or2SSYBXq+
EKIqCzQ02Yl+okz9pDXslSYtjmaz4EOS1jhPs3RO54CsrDHpZ4nmA6v3nPEY
KA3P3cYDzluVAbdNoMubIuC7PmLnGAQneV5Z4rKlC9X4lUXU2Y2ij4dbHEJN
vcuGz1hSldgrQGMNYPgVMKiyfIDcX9t2DCBHipY5ONg/eE1GyguZaKuZ6PFw
m3HCmIGEjQHFfEzSwbnOgyBkYX+VYIFmoIX2fpLOvK9aqLlJ8JAMsysW7XJk
ihKDbrakekwcdTyQkFLguyGkDRw5cCq7oC2tlYxCLzfLJWmoEIHJzCf0cpqy
8O3UZSf4KN+tJlBgJeKvF4z3uRDIoJg2btShRkA17BVmU2/4EFvZFQt/IFLA
I4YhOg15lKKHE+fRaB9jiQTNOXbXEaIY/q7xumKEraFdgNGP13Y1FeBuyiDO
j98cDX7aPz4HwhycvBsdHTLqq3gNVKY4DMlBT1bKeFYNLTKOHk/bmKcR0suC
+P+09gZO14gutqojBu/I4KyT36albQ2hmNw9SHJR1IsK0wpbSIKUPOIZRb4o
Us1G8IlEynCkhmSgzHYPCG81Aixjsyb5esf7Ho7Ozt6d/U+jtiSCb0zRm5sh
63gOe8vl9qkZ2Nx+BsYyDCfevm/i7lm96RkkfTwZ7vKET6OB2VhFwhQJsj2J
K17V1QS5Zy6gl3CAEYBFmkEyIzHnJ6I7vLtnu0+a5T9ZWT5mccP5ic5G5x5F
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

-->

</rfc>
