Skip to main content

Template-Driven HTTP CONNECT Proxying for TCP
draft-ietf-httpbis-connect-tcp-17

Document Type Active Internet-Draft (httpbis WG)
Author Benjamin M. Schwartz
Last updated 2026-10-30 (Latest revision 2026-10-29)
Replaces draft-schwartz-httpbis-connect-tcp
RFC stream Internet Engineering Task Force (IETF)
Intended RFC status Proposed Standard
Formats
Reviews
Additional resources Mailing list discussion
Stream WG state Submitted to IESG for Publication
Document shepherd Tommy Pauly
Shepherd write-up Show Last changed 2026-08-17
IESG IESG state RFC Ed Queue
Action Holders
(None)
Consensus boilerplate Yes
Telechat date (None)
Responsible AD Mike Bishop
Send notices to tpauly@apple.com
IANA IANA review state Version Changed - Review Needed
IANA expert review state Expert Reviews OK
IANA expert review comments The MASQUE URI Suffixes registration has been approved.
RFC Editor RFC Editor status blocked: Author Input Required
Details
draft-ietf-httpbis-connect-tcp-17
httpbis                                                   B. M. Schwartz
Internet-Draft                                      Meta Platforms, Inc.
Intended status: Standards Track                         29 October 2026
Expires: 2 May 2027

             Template-Driven HTTP CONNECT Proxying for TCP
                   draft-ietf-httpbis-connect-tcp-17

Abstract

   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.

Status of This Memo

   This Internet-Draft is submitted in full conformance with the
   provisions of BCP 78 and BCP 79.

   Internet-Drafts are working documents of the Internet Engineering
   Task Force (IETF).  Note that other groups may also distribute
   working documents as Internet-Drafts.  The list of current Internet-
   Drafts is at https://datatracker.ietf.org/drafts/current/.

   Internet-Drafts are draft documents valid for a maximum of six months
   and may be updated, replaced, or obsoleted by other documents at any
   time.  It is inappropriate to use Internet-Drafts as reference
   material or to cite them other than as "work in progress."

   This Internet-Draft will expire on 2 May 2027.

Copyright Notice

   Copyright (c) 2026 IETF Trust and the persons identified as the
   document authors.  All rights reserved.

Schwartz                   Expires 2 May 2027                   [Page 1]
Internet-Draft            Templated CONNECT-TCP             October 2026

   This document is subject to BCP 78 and the IETF Trust's Legal
   Provisions Relating to IETF Documents (https://trustee.ietf.org/
   license-info) in effect on the date of publication of this document.
   Please review these documents carefully, as they describe your rights
   and restrictions with respect to this document.  Code Components
   extracted from this document must include Revised BSD License text as
   described in Section 4.e of the Trust Legal Provisions and are
   provided without warranty as described in the Revised BSD License.

Table of Contents

   1.  Introduction  . . . . . . . . . . . . . . . . . . . . . . . .   3
     1.1.  History . . . . . . . . . . . . . . . . . . . . . . . . .   3
     1.2.  Problems  . . . . . . . . . . . . . . . . . . . . . . . .   3
     1.3.  Overview  . . . . . . . . . . . . . . . . . . . . . . . .   4
   2.  Conventions and Definitions . . . . . . . . . . . . . . . . .   4
   3.  Specification . . . . . . . . . . . . . . . . . . . . . . . .   4
     3.1.  Payload Transport . . . . . . . . . . . . . . . . . . . .   5
     3.2.  In HTTP/1.1 . . . . . . . . . . . . . . . . . . . . . . .   6
     3.3.  In HTTP/2 and HTTP/3  . . . . . . . . . . . . . . . . . .   7
     3.4.  Use of Other Relevant Headers . . . . . . . . . . . . . .   8
       3.4.1.  Origin-scoped Headers . . . . . . . . . . . . . . . .   8
       3.4.2.  Authentication Headers  . . . . . . . . . . . . . . .   8
       3.4.3.  Caching Headers . . . . . . . . . . . . . . . . . . .   9
     3.5.  Closing Connections . . . . . . . . . . . . . . . . . . .   9
       3.5.1.  Handling Invalid Data . . . . . . . . . . . . . . . .  11
   4.  Additional Connection Setup Behaviors . . . . . . . . . . . .  12
     4.1.  Latency Optimizations . . . . . . . . . . . . . . . . . .  12
     4.2.  Indicating Failure  . . . . . . . . . . . . . . . . . . .  12
     4.3.  Conveying Metadata  . . . . . . . . . . . . . . . . . . .  13
   5.  Applicability . . . . . . . . . . . . . . . . . . . . . . . .  13
     5.1.  Servers . . . . . . . . . . . . . . . . . . . . . . . . .  13
     5.2.  Clients . . . . . . . . . . . . . . . . . . . . . . . . .  14
     5.3.  Gateways  . . . . . . . . . . . . . . . . . . . . . . . .  15
   6.  Security Considerations . . . . . . . . . . . . . . . . . . .  15
     6.1.  Resource Exhaustion attacks . . . . . . . . . . . . . . .  16
     6.2.  Client Authentication . . . . . . . . . . . . . . . . . .  17
     6.3.  TLS Early Data  . . . . . . . . . . . . . . . . . . . . .  17
   7.  Operational Considerations  . . . . . . . . . . . . . . . . .  17
     7.1.  Avoiding HTTP/1.1 . . . . . . . . . . . . . . . . . . . .  17
     7.2.  Timeouts  . . . . . . . . . . . . . . . . . . . . . . . .  18
     7.3.  Scope of Packet-Level Metadata  . . . . . . . . . . . . .  19
     7.4.  IP address sharing  . . . . . . . . . . . . . . . . . . .  19
     7.5.  Diagnostics and Monitoring  . . . . . . . . . . . . . . .  19
   8.  IANA Considerations . . . . . . . . . . . . . . . . . . . . .  20
     8.1.  New Upgrade Token . . . . . . . . . . . . . . . . . . . .  20
       8.1.1.  Interop testing . . . . . . . . . . . . . . . . . . .  20
     8.2.  New MASQUE Default Template . . . . . . . . . . . . . . .  20

Schwartz                   Expires 2 May 2027                   [Page 2]
Internet-Draft            Templated CONNECT-TCP             October 2026

     8.3.  New Capsule Type  . . . . . . . . . . . . . . . . . . . .  21
   9.  References  . . . . . . . . . . . . . . . . . . . . . . . . .  21
     9.1.  Normative References  . . . . . . . . . . . . . . . . . .  21
     9.2.  Informative References  . . . . . . . . . . . . . . . . .  23
   Acknowledgments . . . . . . . . . . . . . . . . . . . . . . . . .  25
   Author's Address  . . . . . . . . . . . . . . . . . . . . . . . .  26

1.  Introduction

1.1.  History

   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 ([HTTP], Section 9.3.6).  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".

   HTTP/3 [HTTP/3] uses a UDP transport, so it cannot be forwarded using
   the pre-existing CONNECT mechanism.  To enable forward proxying of
   HTTP/3, the MASQUE effort has defined proxy mechanisms that are
   capable of tunneling UDP datagrams [CONNECT-UDP], and more generally
   IP datagrams [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 [CAPSULE] on the client-
   proxy path.

1.2.  Problems

   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").

   The absence of an explicit origin for the proxy also rules out the
   usual defenses against server port misdirection attacks (see
   Section 7.4 of [HTTP]) and creates ambiguity about the use of origin-
   scoped response header fields (e.g., "Alt-Svc" [ALT-SVC] or "Strict-
   Transport-Security" [HSTS]).

   Classic HTTP CONNECT requests are not extensible to carry in-stream
   metadata.  For example, the WRAP_UP capsule
   [I-D.ietf-httpbis-wrap-up] cannot be used with classic HTTP CONNECT.

Schwartz                   Expires 2 May 2027                   [Page 3]
Internet-Draft            Templated CONNECT-TCP             October 2026

1.3.  Overview

   This specification describes an alternative mechanism for tunneling
   TCP in HTTP.  Like [CONNECT-UDP] and [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.

2.  Conventions and Definitions

   The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT",
   "SHOULD", "SHOULD NOT", "RECOMMENDED", "NOT RECOMMENDED", "MAY", and
   "OPTIONAL" in this document are to be interpreted as described in
   BCP 14 [RFC2119] [RFC8174] when, and only when, they appear in all
   capitals, as shown here.

   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.

   The term "endpoint" describes an implementation of this specification
   in either client or proxy role.

   The term "templated TCP proxy" refers to a proxy that is identified
   by a URI Template in accordance with this specification.

3.  Specification

   A template-driven TCP transport proxy for HTTP is identified by a URI
   Template [RFC6570] containing variables named "target_host" and
   "target_port".  This URI Template and its variable values MUST meet
   all the same requirements as for UDP proxying (Sections 2 and 3 of
   [CONNECT-UDP]), and are subject to the same validation rules.
   Clients MUST 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 Section 8.1).

   If the request is well-formed and permissible, the proxy MUST attempt
   to establish the TCP connection before sending a final success or
   failure response.

Schwartz                   Expires 2 May 2027                   [Page 4]
Internet-Draft            Templated CONNECT-TCP             October 2026

3.1.  Payload Transport

   When using "connect-tcp", TCP payload data is sent in the payload of
   new Capsule Types named DATA and FINAL_DATA (see Figure 1 and
   registrations in Section 8.3).  The ordered concatenation of these
   capsule payloads, which MAY 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 MUST NOT send any more DATA
   or FINAL_DATA capsules on this data stream.  See Section 3.5 for
   related requirements.

   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 (..),
   }

               Figure 1: DATA and FINAL_DATA Capsule Formats

   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 SHOULD begin
   forwarding payload from a DATA or FINAL_DATA capsule without waiting
   to receive the entire capsule, especially if the capsule is large.

   An intermediary MAY merge and split successive DATA and FINAL_DATA
   capsules, subject to the following requirements:

   *  There are no intervening capsules of other types.

   *  The order of payload content is preserved.

   *  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.

   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.

Schwartz                   Expires 2 May 2027                   [Page 5]
Internet-Draft            Templated CONNECT-TCP             October 2026

   This protocol supports backward-compatible extensions via additional
   Capsule Types, as described in Section 3.2 of [CAPSULE].

3.2.  In HTTP/1.1

   In HTTP/1.1 [HTTP/1.1], the client uses the proxy by issuing a
   request as follows:

   *  The method SHALL be "GET".

   *  The request's target SHALL correspond to the URI derived from
      expansion of the proxy's URI Template.

   *  The request SHALL include a single "Host" header field whose value
      identifies the proxy.

   *  The request SHALL include a "Connection" header field with the
      value "Upgrade".  (Note that this requirement is case-insensitive
      as per Section 7.6.1 of [HTTP].)

   *  The request SHALL include an "Upgrade" header field with the value
      "connect-tcp".

   *  The request SHOULD include a "Capsule-Protocol: ?1" header (as
      recommended in [CAPSULE], Section 3.4).

   If the TCP connection is successful, the response SHALL be as
   follows:

   *  The HTTP status code SHALL be "101 (Switching Protocols)".

   *  The response SHALL include a "Connection" header field with the
      value "Upgrade".

   *  The response SHALL include a single "Upgrade" header field with
      the value "connect-tcp".

   *  The response SHOULD include a "Capsule-Protocol: ?1" header (as
      above).

   If a TCP connection was not established, the proxy MUST NOT switch
   protocols to "connect-tcp", and the client MAY reuse this connection
   for additional HTTP requests.

Schwartz                   Expires 2 May 2027                   [Page 6]
Internet-Draft            Templated CONNECT-TCP             October 2026

   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

             Figure 2: Templated TCP proxy example in HTTP/1.1

3.3.  In HTTP/2 and HTTP/3

   In HTTP/2 and HTTP/3, the proxy MUST include
   SETTINGS_ENABLE_CONNECT_PROTOCOL in its SETTINGS frame
   [RFC8441][RFC9220].  The client uses the proxy by issuing an
   "extended CONNECT" request as follows:

   *  The :method pseudo-header field SHALL be "CONNECT".

   *  The :protocol pseudo-header field SHALL be "connect-tcp".

   *  The :authority pseudo-header field SHALL contain the authority of
      the proxy.

   *  The :path and :scheme pseudo-header fields SHALL contain the path
      and scheme of the request URI derived from the proxy's URI
      Template.

   A templated TCP proxying request that does not conform to all of
   these requirements represents a client error (see [HTTP],
   Section 15.5) and may be malformed (see Section 8.1.1 of [HTTP/2] and
   Section 4.1.2 of [HTTP/3]).

   Additionally, the "capsule-protocol" header field SHOULD be present
   with a value of "?1" (as recommended in [CAPSULE], Section 3.4).

Schwartz                   Expires 2 May 2027                   [Page 7]
Internet-Draft            Templated CONNECT-TCP             October 2026

   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
   ...

              Figure 3: Templated TCP proxy example in HTTP/2

3.4.  Use of Other Relevant Headers

3.4.1.  Origin-scoped Headers

   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.

   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:

   *  "Alt-Svc" [ALT-SVC]

   *  "Strict-Transport-Security" [HSTS]

   *  "Accept-CH" [RFC8942]

   *  "Set-Cookie" [RFC6265], which has configurable scope.

   *  "Clear-Site-Data" [CLEAR-SITE-DATA]

3.4.2.  Authentication Headers

   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 ([HTTP], Section 11.6).  A templated TCP proxy does not
   use the "407 (Proxy Authentication Required)" response code and
   related header fields ([HTTP], Section 11.7) because they do not
   traverse HTTP gateways (see Section 5.3).

Schwartz                   Expires 2 May 2027                   [Page 8]
Internet-Draft            Templated CONNECT-TCP             October 2026

   Clients SHOULD assume that all proxy resources generated by a single
   template share a protection space (i.e., a realm) ([HTTP],
   Section 11.5).  For many authentication schemes, this will allow the
   client to avoid waiting for a "401 (Unauthorized)" response before
   each new connection through the proxy.

   TLS Client Certificate authentication can also be used (see
   Section 5.3).

3.4.3.  Caching Headers

   In HTTP/2 and HTTP/3, this specification uses the CONNECT method,
   which is not subject to caching ([HTTP], Section 9.3.6).  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:

   *  If the response has a heuristically cacheable status code ([HTTP],
      Section 15.1), it SHOULD also carry a Cache-Control: no-store
      header field.

      -  This can occur if the request is rejected or the connection
         fails.

   *  The proxy SHOULD NOT attach any other caching-related header
      fields to the response.

3.5.  Closing Connections

   Connection termination is essentially symmetrical for proxies and
   their clients, which we refer to here as the "endpoints" of a
   request.

   When closing connections, endpoints are subject to the following
   requirements:

   *  When an endpoint receives a valid TCP FIN, it MUST send a
      FINAL_DATA capsule.

   *  When an endpoint receives a valid FINAL_DATA capsule, it MUST send
      a TCP FIN.

   *  When a TCP connection reaches the TIME-WAIT or CLOSED state, the
      associated endpoint MUST close its send stream.

      -  If the connection closed gracefully, the endpoint MUST close
         the send stream gracefully.

Schwartz                   Expires 2 May 2027                   [Page 9]
Internet-Draft            Templated CONNECT-TCP             October 2026

      -  Otherwise, the endpoint SHOULD close the send stream abruptly,
         using a mechanism appropriate to the HTTP version:

         o  HTTP/3: reset the stream with H3_CONNECT_ERROR; see [QUIC],
            Section 19.4 and [HTTP/3], Section 8.1.

         o  HTTP/2: reset the stream with CONNECT_ERROR; see [HTTP/2],
            Sections 6.4 and 7.

         o  HTTP/1.1 over TLS: TCP shutdown without a TLS closure alert;
            see [TLS], Section 6.1.

         o  HTTP/1.1 without TLS: TCP RST.

   *  When the receive stream is closed abruptly or without a FINAL_DATA
      capsule received, the endpoint SHOULD send a TCP RST if the TCP
      subsystem permits it.

   Any locally imposed timeout (Section 7.2) MUST be treated as an
   abrupt closure of the affected stream or connection.

   The mandatory behaviors above enable endpoints to detect any
   truncation of incoming TCP data.  The recommended behaviors propagate
   any TCP errors through the tunnel.

   In HTTP/3, endpoints MAY negotiate and use the RESET_STREAM_AT frame
   in order to reduce data loss during an abrupt closure
   [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.

   +-------+    +------------+     +------------+    +-------+
   | 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}----->|            |
     |            |                           |            |

           Figure 4: Simple graceful termination example (HTTP/3)

   +-------+    +------------+     +------------+    +-------+
   | TCP A |    | Endpoint A |     | Endpoint B |    | TCP B |
   +-+-----+    +-+----------+     +----------+-+    +-----+-+
     +----RST---->+----RST_STREAM{CON_ERR}--->+----RST---->|
     |            |                           |            |

Schwartz                   Expires 2 May 2027                  [Page 10]
Internet-Draft            Templated CONNECT-TCP             October 2026

           Figure 5: Simple TCP RST termination example (HTTP/2)

   +-------+    +------------+     +------------+    +-------+
   | TCP A |    | Endpoint A |     | Endpoint B |    | TCP B |
   +-+-----+    +-+----------+     +----------+-+    +-----+-+
     +---"abc"--->+--------DATA{"abc"}------->+---"abc"--->|
     |            |   (... timeout @ A ...)   |            |
     |            +--FIN (no close_notify) -->+----RST---->|
     |            |                           |            |

                    Figure 6: Timeout example (HTTP/1.1)

   +-------+    +------------+     +------------+    +-------+
   | 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--->|
     |            |                           |            |

                  Figure 7: RST after FIN example (HTTP/3)

3.5.1.  Handling Invalid Data

   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 Section 3.5).  Some examples of invalid data
   include:

   *  A second FINAL_DATA capsule.

   *  A DATA capsule after FINAL_DATA.

   *  Data that results in a parsing error under the Capsule Protocol.

   *  A capsule that is truncated by the end of the stream.

   *  A capsule that would require unreasonable effort to process.

   Note that very large DATA and FINAL_DATA capsules are still valid, as
   they can be forwarded incrementally using a bounded memory buffer.

Schwartz                   Expires 2 May 2027                  [Page 11]
Internet-Draft            Templated CONNECT-TCP             October 2026

4.  Additional Connection Setup Behaviors

   This section discusses some behaviors that are permitted or
   recommended in order to enhance the performance or functionality of
   connection setup.

4.1.  Latency Optimizations

   When using this specification in HTTP/2 or HTTP/3, clients MAY start
   sending TCP stream content optimistically, subject to flow control
   limits (Section 5.2 of [HTTP/2] or Section 4.1 of [QUIC]).  Proxies
   MUST buffer this "optimistic" content until the TCP stream becomes
   writable, and discard it if the TCP connection fails.

   Clients MUST NOT use "optimistic" behavior in HTTP/1.1, as this would
   interfere with reuse of the connection after an error response such
   as "401 (Unauthorized)".

   Servers that host a proxy under this specification MAY offer support
   for TLS early data in accordance with [RFC8470].  Clients MAY send
   "connect-tcp" requests in early data, and MAY include "optimistic"
   TCP content in early data (in HTTP/2 and HTTP/3).  At the TLS layer,
   proxies MAY ignore, reject, or accept the early_data extension
   ([TLS], Section 4.3.10).  At the HTTP layer, proxies MAY process the
   request immediately, return a "425 (Too Early)" response ([RFC8470],
   Section 5.2), 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
   target_host when a request arrives in early data, but delay the TCP
   connection until the TLS handshake completes.

   When DNS resolution of target_host produces multiple IP addresses,
   proxies SHOULD use a racing procedure such as Happy Eyeballs [HEv2]
   to accelerate connection establishment.  Proxies that race multiple
   connection attempts MUST buffer any optimistic content until a
   connection is selected and MUST NOT transmit any payload data on the
   other connections.

4.2.  Indicating Failure

   Failure to initiate a tunnel is indicated by the HTTP response status
   code.

   A 4XX status code indicates that the request is malformed or
   impermissible.  For example, if the proxy performs DNS resolution of
   target_host and receives an IP address that is disallowed by the
   proxy's policy, it might return 403 (Forbidden).

Schwartz                   Expires 2 May 2027                  [Page 12]
Internet-Draft            Templated CONNECT-TCP             October 2026

   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.

   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.

4.3.  Conveying Metadata

   This specification supports the "100 (Continue)" response status code
   ([HTTP], Section 15.2.1) in any HTTP version.  Proxies SHOULD 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:

   *  Clients can provide a clearer status indication while waiting for
      the destination host to respond.  (TCP handshakes can hang for
      several minutes before failing.)

   *  Clients can apply separate timeouts to the tunneling request and
      connection establishment.

   *  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.

   Note that a client in this specification cannot send an "Expect:
   100-continue" request header field, because the request does not
   include any "content" ([HTTP], Section 10.1.1).

   Proxies implementing this specification SHOULD include a "Proxy-
   Status" response header field [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 MUST NOT send trailer fields on "connect-tcp" streams.

5.  Applicability

5.1.  Servers

   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 (Section 5.3).

Schwartz                   Expires 2 May 2027                  [Page 13]
Internet-Draft            Templated CONNECT-TCP             October 2026

   Templated TCP proxies can also be made invisible to probes from
   unauthorized clients:

   *  The URI template can include a high-entropy path, similar to
      Capability URLs [CAPABILITY].

   *  The proxy can require HTTP Concealed Authentication ([CONCEALED],
      Section 6.4).

5.2.  Clients

   This specification does not require any specific type of
   configuration input.  Suitable configuration input types include:

   *  A URI Template string, as described in Section 3.

   *  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:

      -  At the default template for "connect-tcp" (Figure 8).

      -  In the "proxies" array of a provisioning domain resource
         retrieved from the corresponding .well-known URI (Sections 2
         and 3 of [I-D.ietf-intarea-proxy-config]).

   *  A provisioning domain resource, configured directly or identified
      by a local or remote URI (e.g., using "file://" or "https://").

   https://$PROXY_HOST:$PROXY_PORT/.well-known/masque
                    /tcp/{target_host}/{target_port}/

                   Figure 8: Registered default template

   All of these input types MAY 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.

   Clients SHOULD treat certain errors during classic HTTP CONNECT as
   indications that the proxy might only support "connect-tcp":

   *  In HTTP/1.1: the response status code is "426 (Upgrade Required)",
      with an "Upgrade: connect-tcp" response header.

   *  In any HTTP version: the response status code is "501 (Not
      Implemented)".

Schwartz                   Expires 2 May 2027                  [Page 14]
Internet-Draft            Templated CONNECT-TCP             October 2026

      -  Requires SETTINGS_ENABLE_CONNECT_PROTOCOL to have been
         negotiated in HTTP/2 or HTTP/3.

   If the client infers that classic HTTP CONNECT is not supported, it
   SHOULD retry the request using the registered default template for
   "connect-tcp" (Figure 8).  If this request succeeds, the client
   SHOULD record a preference for "connect-tcp" to avoid further retry
   delays.

5.3.  Gateways

   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 MUST:

   *  support Extended CONNECT (if acting as an HTTP/2 or HTTP/3
      server).

   *  support HTTP/1.1 Upgrade to "connect-tcp" (if acting as an
      HTTP/1.1 server).

      -  only after forwarding the upgrade request to the origin and
         observing a success response.

   *  forward the "connect-tcp" protocol to the origin.

   *  convert "connect-tcp" requests between all supported HTTP server
      and client versions.

   *  allow any "Proxy-Status" headers to traverse the gateway.

   If the proxy relies on TLS Client Certificates for client
   authentication, the gateway MUST perform this authentication itself
   or pass the relevant information to the origin (e.g., using a
   "Client-Cert" request header field [RFC9440]).

6.  Security Considerations

   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 [HTTP], Section 9.3.6) apply equally
   to both.  The destination_ip_prohibited Proxy Error Type from
   Section 2.3.5 of [PROXY-STATUS] can be useful when rejecting
   unauthorized requests.

Schwartz                   Expires 2 May 2027                  [Page 15]
Internet-Draft            Templated CONNECT-TCP             October 2026

   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.

   See Section 7 of [CONNECT-UDP] for a comparison of the risks of
   operating a TCP or UDP proxy.

6.1.  Resource Exhaustion attacks

   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:

   *  *Connection Pileup*: 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.

      -  Mitigation: Limit the number of concurrent connections per
         client.

   *  *Window Bloat*: An attacker can grow the receive window size by
      simulating a "long, fat network" ([RFC7323], Section 1.1), 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.

      -  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.

   *  *WAIT Abuse*: 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.

      -  Mitigations:

         o  Enable the PAWS optimization ([RFC7323], Section 5) across
            successive connections (e.g., Linux's tcp_tw_reuse=1
            [SYSCTL]).  This makes TIME-WAIT 4-tuples rapidly reusable
            if the destination enables TCP Timestamps, which most do.

Schwartz                   Expires 2 May 2027                  [Page 16]
Internet-Draft            Templated CONNECT-TCP             October 2026

         o  Allocate a large range of IP addresses for TCP connections
            (especially in IPv6).

         o  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.

         o  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.

6.2.  Client Authentication

   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.

   Section 3.4.2 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 [HTTP], Section 17.16
   for additional guidance related to HTTP authentication.

6.3.  TLS Early Data

   This specification supports sending both proxying requests and
   optimistic payload data in TLS early data (Section 4.1).  TLS 1.3
   recommends, but does not require, replay protection for this data
   ([TLS], Section 8), 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 MUST NOT
   use TLS early data.

   See Section 6 of [RFC8470] for additional relevant security
   considerations.

7.  Operational Considerations

7.1.  Avoiding HTTP/1.1

   While this specification is fully functional under HTTP/1.1,
   performance-sensitive deployments SHOULD use HTTP/2 or HTTP/3
   instead.  When using HTTP/1.1:

Schwartz                   Expires 2 May 2027                  [Page 17]
Internet-Draft            Templated CONNECT-TCP             October 2026

   *  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.

   *  The graceful and abrupt closure signals (Section 3.5) are more
      likely to be missing or corrupted:

      -  Some implementations may be unable to emit the recommended
         abrupt closure signals, due to limitations in their TCP and TLS
         subsystems.

      -  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 [TLS], but they are common nonetheless among
         HTTP/1.1 implementations today.

   *  The number of active connections through each client may be
      limited by the number of available TCP client ports, especially
      if:

      -  The client only has one IP address that can be used to reach
         the proxy.

      -  The client is shared between many parties, such as when acting
         as a gateway or concentrator.

      -  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.

7.2.  Timeouts

   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 ([TCP], Section 3.8.4), QUIC
   idle timeouts ([QUIC], Section 10.1), HTTP/2 PING frames ([HTTP/2],
   Section 6.7), and other transport options.

   Endpoints MAY impose additional timeouts, especially as a defense
   against certain resource exhaustion attacks (Section 6.1).  However,
   operators should apply timeouts cautiously to minimize the impact on
   connections that are functioning but slow.  See Section 3.5 for
   related requirements.

Schwartz                   Expires 2 May 2027                  [Page 18]
Internet-Draft            Templated CONNECT-TCP             October 2026

   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.

7.3.  Scope of Packet-Level Metadata

   This specification does not provide a way to pass packet-level
   metadata such as IPv6 Extension Headers [RFC2460], Section 4,
   DiffServ Codepoints (DSCP) [RFC2474], or Explicit Congestion
   Notification (ECN) marks [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.

   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.

7.4.  IP address sharing

   A TCP proxy typically uses the same IP address to establish
   connections on behalf of multiple clients, especially in IPv4.
   [RFC6269] provides guidance regarding difficulties that can arise
   from IP address sharing, including in this arrangement.

7.5.  Diagnostics and Monitoring

   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:

   *  Abrupt closure rates

   *  Number of active tunnels per user

   *  Total throughput in each direction

   *  Number of bytes buffered

Schwartz                   Expires 2 May 2027                  [Page 19]
Internet-Draft            Templated CONNECT-TCP             October 2026

   *  Connection duration

   *  Time spent establishing or closing connections

   *  Number of half-closed or WAIT-state connections

   *  DNS resolution delay

   An increase in any of these measures could indicate an operational
   problem or a resource exhaustion attack (Section 6.1).  See
   Section 6.1 for guidance on relevant defenses and limits.

8.  IANA Considerations

8.1.  New Upgrade Token

   IANA is requested to add the following entry to the "HTTP Upgrade
   Tokens" registry under "Hypertext Transfer Protocol (HTTP) Upgrade
   Token Registry" registry group:

       +===============+==============+================+===========+
       | Value         | Description  | Expected       | Reference |
       |               |              | Version Tokens |           |
       +===============+==============+================+===========+
       | "connect-tcp" | Proxying of  | (None)         | (This     |
       |               | TCP payloads |                | document) |
       +---------------+--------------+----------------+-----------+

                                  Table 1

8.1.1.  Interop testing

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

   For interoperability testing of this draft version, implementations
   SHALL use the value "connect-tcp-12".

8.2.  New MASQUE Default Template

   IANA is requested to add the following entry to the "MASQUE URI
   Suffixes" registry under "Multiplexed Application Substrate over QUIC
   Encryption (MASQUE)" registry group:

Schwartz                   Expires 2 May 2027                  [Page 20]
Internet-Draft            Templated CONNECT-TCP             October 2026

             +==============+==============+=================+
             | Path Segment | Description  | Reference       |
             +==============+==============+=================+
             | tcp          | TCP Proxying | (This document) |
             +--------------+--------------+-----------------+

                                  Table 2

8.3.  New Capsule Type

   IANA is requested to add the following entry to the "HTTP Capsule
   Types" registry under "Multiplexed Application Substrate over QUIC
   Encryption (MASQUE)" registry group:

   +=====+============+===========+============+============+=========+
   |Value| Capsule    | Status    | Reference  | Change     | Contact |
   |     | Type       |           |            | Controller |         |
   +=====+============+===========+============+============+=========+
   |0x08 | DATA       | permanent | (This      | IETF       | HTTPBIS |
   |     |            |           | document), |            |         |
   |     |            |           | Section 3  |            |         |
   +-----+------------+-----------+------------+------------+---------+
   |0x09 | FINAL_DATA | permanent | (This      | IETF       | HTTPBIS |
   |     |            |           | document), |            |         |
   |     |            |           | Section 3  |            |         |
   +-----+------------+-----------+------------+------------+---------+

                                 Table 3

9.  References

9.1.  Normative References

   [CAPSULE]  Schinazi, D. and L. Pardue, "HTTP Datagrams and the
              Capsule Protocol", RFC 9297, DOI 10.17487/RFC9297, August
              2022, <https://www.rfc-editor.org/rfc/rfc9297>.

   [CONNECT-UDP]
              Schinazi, D., "Proxying UDP in HTTP", RFC 9298,
              DOI 10.17487/RFC9298, August 2022,
              <https://www.rfc-editor.org/rfc/rfc9298>.

   [HTTP]     Fielding, R., Ed., Nottingham, M., Ed., and J. Reschke,
              Ed., "HTTP Semantics", STD 97, RFC 9110,
              DOI 10.17487/RFC9110, June 2022,
              <https://www.rfc-editor.org/rfc/rfc9110>.

Schwartz                   Expires 2 May 2027                  [Page 21]
Internet-Draft            Templated CONNECT-TCP             October 2026

   [HTTP/1.1] Fielding, R., Ed., Nottingham, M., Ed., and J. Reschke,
              Ed., "HTTP/1.1", STD 99, RFC 9112, DOI 10.17487/RFC9112,
              June 2022, <https://www.rfc-editor.org/rfc/rfc9112>.

   [HTTP/2]   Thomson, M., Ed. and C. Benfield, Ed., "HTTP/2", RFC 9113,
              DOI 10.17487/RFC9113, June 2022,
              <https://www.rfc-editor.org/rfc/rfc9113>.

   [HTTP/3]   Bishop, M., Ed., "HTTP/3", RFC 9114, DOI 10.17487/RFC9114,
              June 2022, <https://www.rfc-editor.org/rfc/rfc9114>.

   [PROXY-STATUS]
              Nottingham, M. and P. Sikora, "The Proxy-Status HTTP
              Response Header Field", RFC 9209, DOI 10.17487/RFC9209,
              June 2022, <https://www.rfc-editor.org/rfc/rfc9209>.

   [QUIC]     Iyengar, J., Ed. and M. Thomson, Ed., "QUIC: A UDP-Based
              Multiplexed and Secure Transport", RFC 9000,
              DOI 10.17487/RFC9000, May 2021,
              <https://www.rfc-editor.org/rfc/rfc9000>.

   [RFC2119]  Bradner, S., "Key words for use in RFCs to Indicate
              Requirement Levels", BCP 14, RFC 2119,
              DOI 10.17487/RFC2119, March 1997,
              <https://www.rfc-editor.org/rfc/rfc2119>.

   [RFC6570]  Gregorio, J., Fielding, R., Hadley, M., Nottingham, M.,
              and D. Orchard, "URI Template", RFC 6570,
              DOI 10.17487/RFC6570, March 2012,
              <https://www.rfc-editor.org/rfc/rfc6570>.

   [RFC8174]  Leiba, B., "Ambiguity of Uppercase vs Lowercase in RFC
              2119 Key Words", BCP 14, RFC 8174, DOI 10.17487/RFC8174,
              May 2017, <https://www.rfc-editor.org/rfc/rfc8174>.

   [RFC8441]  McManus, P., "Bootstrapping WebSockets with HTTP/2",
              RFC 8441, DOI 10.17487/RFC8441, September 2018,
              <https://www.rfc-editor.org/rfc/rfc8441>.

   [RFC8470]  Thomson, M., Nottingham, M., and W. Tarreau, "Using Early
              Data in HTTP", RFC 8470, DOI 10.17487/RFC8470, September
              2018, <https://www.rfc-editor.org/rfc/rfc8470>.

   [RFC9220]  Hamilton, R., "Bootstrapping WebSockets with HTTP/3",
              RFC 9220, DOI 10.17487/RFC9220, June 2022,
              <https://www.rfc-editor.org/rfc/rfc9220>.

Schwartz                   Expires 2 May 2027                  [Page 22]
Internet-Draft            Templated CONNECT-TCP             October 2026

   [TCP]      Eddy, W., Ed., "Transmission Control Protocol (TCP)",
              STD 7, RFC 9293, DOI 10.17487/RFC9293, August 2022,
              <https://www.rfc-editor.org/rfc/rfc9293>.

   [TLS]      Rescorla, E., "The Transport Layer Security (TLS) Protocol
              Version 1.3", RFC 9846, DOI 10.17487/RFC9846, July 2026,
              <https://www.rfc-editor.org/rfc/rfc9846>.

9.2.  Informative References

   [ALT-SVC]  Nottingham, M., McManus, P., and J. Reschke, "HTTP
              Alternative Services", RFC 7838, DOI 10.17487/RFC7838,
              April 2016, <https://www.rfc-editor.org/rfc/rfc7838>.

   [CAPABILITY]
              "Good Practices for Capability URLs", February 2014,
              <https://www.w3.org/TR/capability-urls/>.

   [CLEAR-SITE-DATA]
              "Clear Site Data", November 2017,
              <https://www.w3.org/TR/clear-site-data/>.

   [CONCEALED]
              Schinazi, D., Oliver, D., and J. Hoyland, "The Concealed
              HTTP Authentication Scheme", RFC 9729,
              DOI 10.17487/RFC9729, February 2025,
              <https://www.rfc-editor.org/rfc/rfc9729>.

   [CONNECT-IP]
              Pauly, T., Ed., Schinazi, D., Chernyakhovsky, A.,
              Kühlewind, M., and M. Westerlund, "Proxying IP in HTTP",
              RFC 9484, DOI 10.17487/RFC9484, October 2023,
              <https://www.rfc-editor.org/rfc/rfc9484>.

   [HEv2]     Schinazi, D. and T. Pauly, "Happy Eyeballs Version 2:
              Better Connectivity Using Concurrency", RFC 8305,
              DOI 10.17487/RFC8305, December 2017,
              <https://www.rfc-editor.org/rfc/rfc8305>.

   [HSTS]     Hodges, J., Jackson, C., and A. Barth, "HTTP Strict
              Transport Security (HSTS)", RFC 6797,
              DOI 10.17487/RFC6797, November 2012,
              <https://www.rfc-editor.org/rfc/rfc6797>.

Schwartz                   Expires 2 May 2027                  [Page 23]
Internet-Draft            Templated CONNECT-TCP             October 2026

   [I-D.ietf-httpbis-wrap-up]
              Schinazi, D. and L. Pardue, "The HTTP Wrap Up Capsule",
              Work in Progress, Internet-Draft, draft-ietf-httpbis-wrap-
              up-01, 7 July 2025,
              <https://datatracker.ietf.org/doc/html/draft-ietf-httpbis-
              wrap-up-01>.

   [I-D.ietf-intarea-proxy-config]
              Pauly, T., Damjanovic, D., and Y. Rosomakho,
              "Communicating Proxy Configurations in Provisioning
              Domains", Work in Progress, Internet-Draft, draft-ietf-
              intarea-proxy-config-14, 19 May 2026,
              <https://datatracker.ietf.org/doc/html/draft-ietf-intarea-
              proxy-config-14>.

   [I-D.ietf-quic-reliable-stream-reset]
              Seemann, M. and K. Oku, "QUIC Stream Resets with Partial
              Delivery", Work in Progress, Internet-Draft, draft-ietf-
              quic-reliable-stream-reset-11, 6 September 2026,
              <https://datatracker.ietf.org/doc/html/draft-ietf-quic-
              reliable-stream-reset-11>.

   [RFC2460]  Deering, S. and R. Hinden, "Internet Protocol, Version 6
              (IPv6) Specification", RFC 2460, DOI 10.17487/RFC2460,
              December 1998, <https://www.rfc-editor.org/rfc/rfc2460>.

   [RFC2474]  Nichols, K., Blake, S., Baker, F., and D. Black,
              "Definition of the Differentiated Services Field (DS
              Field) in the IPv4 and IPv6 Headers", RFC 2474,
              DOI 10.17487/RFC2474, December 1998,
              <https://www.rfc-editor.org/rfc/rfc2474>.

   [RFC3168]  Ramakrishnan, K., Floyd, S., and D. Black, "The Addition
              of Explicit Congestion Notification (ECN) to IP",
              RFC 3168, DOI 10.17487/RFC3168, September 2001,
              <https://www.rfc-editor.org/rfc/rfc3168>.

   [RFC6265]  Barth, A., "HTTP State Management Mechanism", RFC 6265,
              DOI 10.17487/RFC6265, April 2011,
              <https://www.rfc-editor.org/rfc/rfc6265>.

   [RFC6269]  Ford, M., Ed., Boucadair, M., Durand, A., Levis, P., and
              P. Roberts, "Issues with IP Address Sharing", RFC 6269,
              DOI 10.17487/RFC6269, June 2011,
              <https://www.rfc-editor.org/rfc/rfc6269>.

Schwartz                   Expires 2 May 2027                  [Page 24]
Internet-Draft            Templated CONNECT-TCP             October 2026

   [RFC7323]  Borman, D., Braden, B., Jacobson, V., and R.
              Scheffenegger, Ed., "TCP Extensions for High Performance",
              RFC 7323, DOI 10.17487/RFC7323, September 2014,
              <https://www.rfc-editor.org/rfc/rfc7323>.

   [RFC8942]  Grigorik, I. and Y. Weiss, "HTTP Client Hints", RFC 8942,
              DOI 10.17487/RFC8942, February 2021,
              <https://www.rfc-editor.org/rfc/rfc8942>.

   [RFC9440]  Campbell, B. and M. Bishop, "Client-Cert HTTP Header
              Field", RFC 9440, DOI 10.17487/RFC9440, July 2023,
              <https://www.rfc-editor.org/rfc/rfc9440>.

   [SYSCTL]   "IP Sysctl -- The Linux Kernel documentation", June 2026,
              <https://www.kernel.org/doc/html/v7.1/networking/ip-
              sysctl.html>.

Acknowledgments

   This document benefited from close review and suggested changes by:

   *  Mohamed Boucadair

   *  Deb Cooley

   *  Gorry Fairhurst

   *  Thomas Fossati

   *  Amos Jeffries

   *  Mahesh Jethanandani

   *  Antun Jurkovic

   *  Eric Kinnear

   *  Kyle Nekritz

   *  Kazuho Oku

   *  Tommy Pauly

   *  Yaroslav Romakho

   *  David Schinazi

   *  Ketan Talaulikar

Schwartz                   Expires 2 May 2027                  [Page 25]
Internet-Draft            Templated CONNECT-TCP             October 2026

   *  Willy Tarreau

Author's Address

   Benjamin M. Schwartz
   Meta Platforms, Inc.
   Email: ietf@bemasc.net

Schwartz                   Expires 2 May 2027                  [Page 26]