<?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-17" category="std" consensus="true" submissionType="IETF" tocInclude="true" sortRefs="true" symRefs="true" version="3">
  <!-- xml2rfc v2v3 conversion 3.34.1 -->
  <front>
    <title abbrev="Templated CONNECT-TCP">Template-Driven HTTP CONNECT Proxying for TCP</title>
    <seriesInfo name="Internet-Draft" value="draft-ietf-httpbis-connect-tcp-17"/>
    <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="October" day="29"/>
    <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 defines an alternative HTTP proxy service configuration for TCP connections.  This configuration is described by a URI Template, similar to the CONNECT-UDP and CONNECT-IP protocols.</t>
    </abstract>
  </front>
  <middle>
    <?line 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 term "templated TCP proxy" refers to a proxy that is identified by a URI Template in accordance with this specification.</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</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 (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 (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>Templated TCP proxy example in HTTP/1.1</name>
          <artwork><![CDATA[
Client                                                 Proxy

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

                            HTTP/1.1 100 Continue

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

                            HTTP/1.1 101 Switching Protocols
                            Connection: Upgrade
                            Upgrade: connect-tcp
                            Capsule-Protocol: ?1
                            Proxy-Status: example.com
]]></artwork>
        </figure>
      </section>
      <section anchor="in-http2-and-http3">
        <name>In HTTP/2 and HTTP/3</name>
        <t>In HTTP/2 and HTTP/3, the proxy <bcp14>MUST</bcp14> include SETTINGS_ENABLE_CONNECT_PROTOCOL in its SETTINGS frame <xref target="RFC8441"/><xref target="RFC9220"/>.  The client uses the proxy by issuing an "extended CONNECT" request as follows:</t>
        <ul spacing="normal">
          <li>
            <t>The :method pseudo-header field <bcp14>SHALL</bcp14> be "CONNECT".</t>
          </li>
          <li>
            <t>The :protocol pseudo-header field <bcp14>SHALL</bcp14> be "connect-tcp".</t>
          </li>
          <li>
            <t>The :authority pseudo-header field <bcp14>SHALL</bcp14> contain the authority of the proxy.</t>
          </li>
          <li>
            <t>The :path and :scheme pseudo-header fields <bcp14>SHALL</bcp14> contain the path and scheme of the request URI derived from the proxy's URI Template.</t>
          </li>
        </ul>
        <t>A templated TCP proxying request that does not conform to all of these requirements represents a client error (see <xref section="15.5" sectionFormat="comma" target="RFC9110"/>) and may be malformed (see <xref section="8.1.1" sectionFormat="of" target="RFC9113"/> and <xref section="4.1.2" sectionFormat="of" target="RFC9114"/>).</t>
        <t>Additionally, the "capsule-protocol" header field <bcp14>SHOULD</bcp14> be present with a value of "?1" (as recommended in <xref section="3.4" sectionFormat="comma" target="CAPSULE"/>).</t>
        <figure>
          <name>Templated TCP proxy example in HTTP/2</name>
          <artwork><![CDATA[
HEADERS
:method = CONNECT
:scheme = https
:authority = templated-proxy.example
:path = /proxy?target_host=2001%3Adb8%3A%3A1&target_port=443
:protocol = connect-tcp
capsule-protocol = ?1
...
]]></artwork>
        </figure>
      </section>
      <section anchor="use-of-other-relevant-headers">
        <name>Use of Other Relevant Headers</name>
        <section anchor="origin-scoped-headers">
          <name>Origin-scoped Headers</name>
          <t>Ordinary HTTP headers apply only to the single resource identified in the request or response.  An origin-scoped HTTP header is a special response header that is intended to change the client's behavior for subsequent requests to any resource on this origin.</t>
          <t>Unlike classic HTTP CONNECT proxies, a templated TCP proxy has an unambiguous origin of its own.  Origin-scoped headers apply to this origin when they are associated with a templated TCP proxy response.  Here are some origin-scoped headers that could potentially be sent by a templated TCP proxy:</t>
          <ul spacing="normal">
            <li>
              <t>"Alt-Svc" <xref target="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 templated TCP proxy normally uses ordinary HTTP authentication via the "401 (Unauthorized)" response code, the "WWW-Authenticate" response header field, and the "Authorization" request header field (<xref section="11.6" sectionFormat="comma" target="RFC9110"/>).  A templated TCP proxy does not use the "407 (Proxy Authentication Required)" response code and related header fields (<xref section="11.7" sectionFormat="comma" target="RFC9110"/>) because they do not traverse HTTP gateways (see <xref target="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 <tt>Cache-Control: no-store</tt> header field.
              </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 the <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 multiple IP addresses, 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 response 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.  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)" response 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, templated 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>Templated 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 templated 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 status code is "426 (Upgrade Required)", with an "Upgrade: connect-tcp" response header.</t>
          </li>
          <li>
            <t>In any HTTP version: the response status code is "501 (Not Implemented)".
            </t>
            <ul spacing="normal">
              <li>
                <t>Requires SETTINGS_ENABLE_CONNECT_PROTOCOL to have been negotiated in HTTP/2 or HTTP/3.</t>
              </li>
            </ul>
          </li>
        </ul>
        <t>If the client infers that classic HTTP CONNECT is not supported, it <bcp14>SHOULD</bcp14> retry the request using the registered default template for "connect-tcp" (<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>Templated TCP proxy 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>Template-driven TCP proxying is largely subject to the same security risks as classic HTTP CONNECT.  For example, any restrictions on authorized use of the proxy (see <xref section="9.3.6" sectionFormat="comma" target="RFC9110"/>) apply equally to both.  The <tt>destination_ip_prohibited</tt> 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="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 515?>

<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:
H4sIAAAAAAAAA91963bbSJLmfz5FLmt3SnKJtG6+adtVI0tyWd2yrRHlrq7T
p48LIpMSSiTAwUUyy1Y/yz7LPtnGFxGZyAQhuS8z+6PnzExZIJCZyIx7fBEY
DAa9Kq1mds/0z+18MUsqOzgs0hubmTfn56fm4P27d0cH5+a0yD8t0+zSTPPC
nB+c9nvJxUVhb4LnJu7mAf8+pkuXebHcM2U16fUm+ThL5jTPpEim1SC11XRw
VVWLi7QcjPMss+NqUI0Xg61nvXRR7JmqqMtqe3PzxeZ2Lylssmdu06pX1hfz
tCzTPKuWCxrs+Oj8de82L64vi7xe7BkdsdcrqySbfExmeUZ3LW3ZK+dJUX38
zzqvbLlnsry3SPfMn6t8vGHKvKgKOy3pX8s5/vGXXi+pq6u82OuZQc/Q/8jS
X9ns12SeZubt0IzGV7c04m/8c15cJln6W1LRwvbMW1sl5pS2hPZqTqMeZ+Mh
32bnSTrbM3j3f7+gP8rxMLNVr5fRffTsjaX5zNnrgxdbW5t7/MQkLWlvaQ9x
GP7H7Y4fH28Nt/wNO103bPufd7t+3uml2TRcyMH+6f6r45Pj85/ldqWTH/N8
QuSQjKt0bEumh4NkkVyks7Ramg9nJ6UMTse/Z7aem9f2oqiTYmm2N7d2ZaCk
uLSVHFa59/jx7e3t8HZnSJv4+Pzs8dgPNqiLWfkYKzk52j8bjI7PjwaH++f7
0XIOZjYpzCitrDlMqiSYe2fTvMtv7PzCFpj72d8yNwYblDTYgMZIMPfo59HB
+Uk05fGpGS3LcTUzg4E5v7LmJM3qT+YPtsjszBCh13ObVUwM4Vbsmt/XmaWl
bD+9dynXPAYvh8Z5fFXNZ49vng23HhOdgMyJAx+ni0HJ0w/xc683oFUkF2WF
I+n1iPdMVRM/zcCtdYn/H3HyVVIaYotLc2GJyRdEwyafmopeY5wXVu4tF3ac
TtMxv8PQmDf5rb2xxQbdlpbB8NM6G+OWhM8eI5e4L5mZdL4grkqyykwsDZTa
jP6vNJPamirn2WbJ+BozJ+bWzmYD3JaRDOH58yK9JDYj0lok1RUt4BzzRqsy
8kBpkswks4r2jQlXnl9AWtFaihuiUXqvbJpe1oU8pwLMqNChS6WbIL6RLkxs
OS7SC1rWxZIW+uHs2DhpR8Iinaczoj19Hyf8Phye0poaYXjMyyFBk8/KoZzW
PJ1MZrbX+4ZEQ1Xkk5qXQX9/Y96kZUVCs9fj98CO1iVNH0xg5pZE04TfozmJ
1hvR4rKx9YKBXvCnKzptIQcdaINHLex/1raslBrdHmNfzVVO1/EqOEqT1eCk
Db6AB2WPaRUkBiclL2CRLGd5Qn9cELWCupiqZnT4lX9M56GdrdJMNnrt8+f/
oVJvw4zkDcyL4c7w6d3d+pBkTZrrLreJQAnylrYJY+fZbEnbM74iYVzOjSMp
7NTC6S+sk6RCwXtD+3Kc3T9uUhRJdmnBzaAGUg22KHAauUmwQf3xLCFlNI4Z
jKfqD+UIH+8Y/3a7d3c4TTwJIiGGzUpsLTSQSSszTrIsr2jz3K7SVHJist92
YD+l2LbLgBb0ZUHCubFZcjHzjzcvTWwmi5Ezf7s/+o8PR8ZOpzhYEJnbKjlU
Pyq2NaGzI7nAYpnGhqzwVIfXgKC8LBK6l140YIKXeOntF8/v7oRm5pAulzaD
eKBjOo6f/KFhF35w9zntFvOljWiliybNWkpiZLGY0enREtd5vSRwcmxgmil/
8hkVtszrgjgDckXWZbPJoMoH9J9gQRjhtqAx3Qj89GGwYNKOow8nR3SkeUjn
A9lBFlvM0GQ40ZrmpXK03FXirHHQTuIIURFx8AmA/S4gv2ZgBtrnRA8Gbw9T
ZANX2kx5e0WCwRZuoISeH9cFBLOTP8NGkHdSrsqCMqI6zDvJDShzTAyxFNZo
iUpnOUBbHGdlZZMJk9pSeDLNJuAsy0O6l2iOUfWPiIahyGIi9xveqSRbqlIi
cU6vNy3yOY+BJc7rWZUuiCwnzBjjKhb9ZHypaNCHlcXk7ss6La/w6xy7jSMz
a3Q72ZlXzXiOYsp1qCO6T3UT7qT/9G/SoqpJ4emK+ut07CBa0sgWIhgaLjP2
E6iTeFyfZuHttzeZkQAo6hkde15X/ENdYlBiS5uxxLhMUtpW9xq8a2QIT9JC
xWVSVaRPS7NWWkvU6aTos+EuVuDEK8lT3vUxGdQVhp1f0CGCRJKLZmZetCx0
UI5z8ADtwoLUCh0enSwOIbUzkvNrdng53DD9/Vk1GN2M+2Dk/ZPzweiPB+Di
Z893noNBCtMfVUVKFv65k3mDkRInP/NmdD7CA0+fvXgGmd/rHTxIn2BPnKP9
VNH+pJBLRPVCnlg0mfPJHIoyAUsPzWtagv2UkOa2IgF/Ots//fjhFFKtpH3H
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
CvP4nMxUm9S9/wd0Ixe5pIsAAA==

-->

</rfc>
