<?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.6.26 (Ruby 2.7.4) -->
<rfc xmlns:xi="http://www.w3.org/2001/XInclude" ipr="trust200902" docName="draft-schwartz-httpbis-connect-tcp-01" category="std" consensus="true" submissionType="IETF" tocInclude="true" sortRefs="true" symRefs="true" version="3">
  <!-- xml2rfc v2v3 conversion 3.16.0 -->
  <front>
    <title abbrev="Templated CONNECT-TCP">Template-Driven HTTP CONNECT Proxying for TCP</title>
    <seriesInfo name="Internet-Draft" value="draft-schwartz-httpbis-connect-tcp-latest"/>
    <author initials="B. M." surname="Schwartz" fullname="Benjamin M. Schwartz">
      <organization>Google LLC</organization>
      <address>
        <email>ietf@bemasc.net</email>
      </address>
    </author>
    <date year="2023" month="March" day="09"/>
    <area>art</area>
    <workgroup>httpbis</workgroup>
    <keyword>Internet-Draft</keyword>
    <abstract>
      <t>TCP proxying using HTTP CONNECT has long been part of the core HTTP specification.  However, this proxying functionality has several important deficiencies in modern HTTP environments.  This specification defines an alternative HTTP proxy service configuration for TCP connections.  This configuration is described by a URI Template, similar to the CONNECT-UDP and CONNECT-IP protocols.</t>
    </abstract>
  </front>
  <middle>
    <section anchor="introduction">
      <name>Introduction</name>
      <section anchor="history">
        <name>History</name>
        <t>HTTP has used the CONNECT method for proxying TCP connections since HTTP/1.1.  When using CONNECT, the request target specifies a host and port number, and the proxy forwards TCP payloads between the client and this destination (<xref section="9.3.6" sectionFormat="comma" target="RFC9110"/>).  To date, this is the only mechanism defined for proxying TCP over HTTP.  In this specification, this is referred to as a "classic HTTP CONNECT proxy".</t>
        <t>HTTP/3 uses a UDP transport, so it cannot be forwarded using the pre-existing CONNECT mechanism.  To enable forward proxying of HTTP/3, the MASQUE effort has defined proxy mechanisms that are capable of proxying UDP datagrams <xref target="RFC9298"/>, and more generally IP datagrams <xref target="I-D.ietf-masque-connect-ip"/>.  The destination host and port number (if applicable) are encoded into the HTTP resource path, and end-to-end datagrams are wrapped into HTTP Datagrams <xref target="RFC9297"/> on the client-proxy path.</t>
      </section>
      <section anchor="problems">
        <name>Problems</name>
        <t>Classic HTTP CONNECT proxies are identified by an origin.  The proxy does not have a path of its own.  This prevents any origin from hosting multiple distinct proxy services.</t>
        <t>Ordinarily, HTTP allows multiple origin hostnames to share a single server IP address and port number (i.e., virtual-hosting), by specifying the applicable hostname in the "Host" or ":authority" header field.  However, classic HTTP CONNECT proxies use these fields to indicate the CONNECT request's destination (<xref section="3.2.3" sectionFormat="comma" target="RFC9112"/>), leaving no way to determine the proxy's origin from the request.  As a result, classic HTTP CONNECT proxies cannot be deployed using virtual-hosting, nor can they apply the usual defenses against server port misdirection attacks (see <xref section="7.4" sectionFormat="of" target="RFC9110"/>).</t>
        <t>Classic HTTP CONNECT proxies can be used to reach a target host that is specified as a domain name or an IP address.  However, because only a single target host can be specified, proxy-driven Happy Eyeballs and cross-IP fallback can only be used when the host is a domain name.  For IP-targeted requests to succeed, the client must know which address families are supported by the proxy via some out-of-band mechanism, or open multiple independent CONNECT requests and abandon any that prove unnecessary.</t>
      </section>
      <section anchor="overview">
        <name>Overview</name>
        <t>This specification describes an alternative mechanism for proxying TCP in HTTP.  Like <xref target="RFC9298"/> and <xref target="I-D.ietf-masque-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>
    </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 "tcp_port".  The client substitutes the destination host and port number into these variables to produce the request URI.</t>
      <t>The "target_host" variable <bcp14>MUST</bcp14> be a domain name, an IP address literal, or a list of IP addresses.  The "tcp_port" variable <bcp14>MUST</bcp14> be a single integer.  If "target_host" is a list (as in <xref section="2.4.2" sectionFormat="of" target="RFC6570"/>), the server <bcp14>SHOULD</bcp14> perform the same connection procedure as if these addresses had been returned in response to A and AAAA queries for a domain name.</t>
      <section anchor="in-http11">
        <name>In HTTP/1.1</name>
        <t>In HTTP/1.1, the client uses the proxy by issuing a request as follows:</t>
        <ul spacing="normal">
          <li>The method <bcp14>SHALL</bcp14> be "GET".</li>
          <li>The request <bcp14>SHALL</bcp14> include a single Host header field containing the origin of the proxy.</li>
          <li>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"/>.)</li>
          <li>The request <bcp14>SHALL</bcp14> include an "Upgrade" header field with the value "connect-tcp".</li>
          <li>The request's target <bcp14>SHALL</bcp14> correspond to the URI derived from expansion of the proxy's URI Template.</li>
        </ul>
        <t>If the request is well-formed and permissible, the proxy <bcp14>MUST</bcp14> attempt the TCP connection before returning its response header.  If the TCP connection is successful, the response <bcp14>SHALL</bcp14> be as follows:</t>
        <ul spacing="normal">
          <li>The HTTP status code <bcp14>SHALL</bcp14> be 101 (Switching Protocols).</li>
          <li>The response <bcp14>SHALL</bcp14> include a Connection header field with the value "Upgrade".</li>
          <li>The response <bcp14>SHALL</bcp14> include a single Upgrade header field with the value "connect-tcp".</li>
        </ul>
        <t>If the request is malformed or impermissible, the proxy <bcp14>MUST</bcp14> return a 4XX error code.  If a TCP connection was not established, the proxy <bcp14>MUST NOT</bcp14> switch protocols to "connect-tcp".</t>
        <t>From this point on, the connection <bcp14>SHALL</bcp14> conform to all the usual requirements for classic CONNECT proxies in HTTP/1.1 (<xref section="9.3.6" sectionFormat="comma" target="RFC9110"/>).  Additionally, if the proxy observes a connection error from the client (e.g., a TCP RST, TCP timeout, or TLS error), it <bcp14>SHOULD</bcp14> send a TCP RST to the target.  If the proxy observes a connection error from the target, it <bcp14>SHOULD</bcp14> send a TLS "internal_error" alert to the client, or set the TCP RST bit if TLS is not in use.</t>
        <figure>
          <name>Templated TCP proxy example in HTTP/1.1</name>
          <artwork><![CDATA[
Client                                                 Proxy

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

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

                            HTTP/1.1 101 Switching Protocols
                            Connection: Upgrade
                            Upgrade: connect-tcp
]]></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 client uses the proxy by issuing an "extended CONNECT" request as follows:</t>
        <ul spacing="normal">
          <li>The :method pseudo-header field <bcp14>SHALL</bcp14> be "CONNECT".</li>
          <li>The :protocol pseudo-header field <bcp14>SHALL</bcp14> be "connect-tcp".</li>
          <li>The :authority pseudo-header field <bcp14>SHALL</bcp14> contain the authority of the proxy.</li>
          <li>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.</li>
        </ul>
        <t>From this point on, the request and response <bcp14>SHALL</bcp14> conform to all the usual requirements for classic CONNECT proxies in this HTTP version (see <xref section="8.5" sectionFormat="of" target="RFC9113"/> and <xref section="4.4" sectionFormat="of" target="RFC9114"/>).</t>
        <figure>
          <name>Templated TCP proxy example in HTTP/2</name>
          <artwork><![CDATA[
HEADERS
:method = CONNECT
:scheme = https
:authority = request-proxy.example
:path = /proxy?target_host=192.0.2.1,2001:db8::1&tcp_port=443
:protocol = connect-tcp
...
]]></artwork>
        </figure>
      </section>
      <section anchor="use-of-100-continue">
        <name>Use of 100 (Continue)</name>
        <t>This protocol is compatible with the use of an "Expect: 100-continue" request header (<xref section="10.1.1" sectionFormat="comma" target="RFC9110"/>) in any HTTP version.  The "100 Continue" response confirms receipt of a request at the proxy without waiting for the proxy-destination TCP handshake to succeed or fail.  This may be particularly helpful when the destination host is not responding, as TCP handshakes can hang for several minutes before failing.</t>
      </section>
    </section>
    <section anchor="applicability">
      <name>Applicability</name>
      <section anchor="servers">
        <name>Servers</name>
        <t>For server operators, template-driven TCP proxies are particularly valuable in situations where virtual-hosting is needed, or where multiple proxies must share an origin.  For example, the proxy might benefit from sharing an HTTP gateway that provides DDoS defense, performs request sanitization, or enforces user authorization.</t>
        <t>The URI template can also be structured to generate high-entropy Capability URLs <xref target="CAPABILITY"/>, so that only authorized users can discover the proxy service.</t>
      </section>
      <section anchor="clients">
        <name>Clients</name>
        <t>Clients that support both classic HTTP CONNECT proxies and template-driven TCP proxies <bcp14>MAY</bcp14> accept both types via a single configuration string.  If the configuration string can be parsed as a URI Template containing the required variables, it is a template-driven TCP proxy.  Otherwise, it is presumed to represent a classic HTTP CONNECT proxy.</t>
      </section>
      <section anchor="multi-purpose-proxies">
        <name>Multi-purpose proxies</name>
        <t>The names of the variables in the URI Template uniquely identify the capabilities of the proxy.  Undefined variables are permitted in URI Templates, so a single template can be used for multiple purposes.</t>
        <t>Multipurpose templates can be useful when a single client may benefit from access to multiple complementary services (e.g., TCP and UDP), or when the proxy is used by a variety of clients with different needs.</t>
        <figure>
          <name>Example multipurpose template for a combined TCP, UDP, and IP proxy and DoH server</name>
          <artwork><![CDATA[
https://proxy.example/{?target_host,tcp_port,target_port,
                        target,ipproto,dns}
]]></artwork>
        </figure>
      </section>
    </section>
    <section anchor="security-considerations">
      <name>Security Considerations</name>
      <t>TODO</t>
    </section>
    <section anchor="operational-considerations">
      <name>Operational Considerations</name>
      <t>Templated TCP proxies can make use of standard HTTP gateways and path-routing to ease implementation and allow use of shared infrastructure.  However, current gateways might need modifications to support TCP proxy services.  To be compatible, a gateway must:</t>
      <ul spacing="normal">
        <li>support Extended CONNECT.</li>
        <li>convert HTTP/1.1 Upgrade requests into Extended CONNECT.</li>
        <li>allow the Extended CONNECT method to pass through to the origin.</li>
        <li>forward Proxy-* request headers to the origin.</li>
      </ul>
    </section>
    <section anchor="iana-considerations">
      <name>IANA Considerations</name>
      <t>IF APPROVED, IANA is requested to add the following entry to the HTTP Upgrade Token Registry:</t>
      <ul spacing="normal">
        <li>Value: "connect-tcp"</li>
        <li>Description: Proxying of TCP payloads</li>
        <li>Reference: (This document)</li>
      </ul>
    </section>
  </middle>
  <back>
    <references>
      <name>References</name>
      <references>
        <name>Normative References</name>
        <reference anchor="RFC9110">
          <front>
            <title>HTTP Semantics</title>
            <author fullname="R. Fielding" initials="R." role="editor" surname="Fielding">
              <organization/>
            </author>
            <author fullname="M. Nottingham" initials="M." role="editor" surname="Nottingham">
              <organization/>
            </author>
            <author fullname="J. Reschke" initials="J." role="editor" surname="Reschke">
              <organization/>
            </author>
            <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="RFC2119">
          <front>
            <title>Key words for use in RFCs to Indicate Requirement Levels</title>
            <author fullname="S. Bradner" initials="S." surname="Bradner">
              <organization/>
            </author>
            <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">
              <organization/>
            </author>
            <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">
              <organization/>
            </author>
            <author fullname="R. Fielding" initials="R." surname="Fielding">
              <organization/>
            </author>
            <author fullname="M. Hadley" initials="M." surname="Hadley">
              <organization/>
            </author>
            <author fullname="M. Nottingham" initials="M." surname="Nottingham">
              <organization/>
            </author>
            <author fullname="D. Orchard" initials="D." surname="Orchard">
              <organization/>
            </author>
            <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="RFC9113">
          <front>
            <title>HTTP/2</title>
            <author fullname="M. Thomson" initials="M." role="editor" surname="Thomson">
              <organization/>
            </author>
            <author fullname="C. Benfield" initials="C." role="editor" surname="Benfield">
              <organization/>
            </author>
            <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">
              <organization/>
            </author>
            <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>
      </references>
      <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="RFC9298">
          <front>
            <title>Proxying UDP in HTTP</title>
            <author fullname="D. Schinazi" initials="D." surname="Schinazi">
              <organization/>
            </author>
            <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="I-D.ietf-masque-connect-ip">
          <front>
            <title>Proxying IP in HTTP</title>
            <author fullname="Tommy Pauly" initials="T." surname="Pauly">
              <organization>Apple Inc.</organization>
            </author>
            <author fullname="David Schinazi" initials="D." surname="Schinazi">
              <organization>Google LLC</organization>
            </author>
            <author fullname="Alex Chernyakhovsky" initials="A." surname="Chernyakhovsky">
              <organization>Google LLC</organization>
            </author>
            <author fullname="Mirja Kühlewind" initials="M." surname="Kühlewind">
              <organization>Ericsson</organization>
            </author>
            <author fullname="Magnus Westerlund" initials="M." surname="Westerlund">
              <organization>Ericsson</organization>
            </author>
            <date day="1" month="March" 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 a proxy.  This document updates RFC 9298.

              </t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-ietf-masque-connect-ip-08"/>
        </reference>
        <reference anchor="RFC9297">
          <front>
            <title>HTTP Datagrams and the Capsule Protocol</title>
            <author fullname="D. Schinazi" initials="D." surname="Schinazi">
              <organization/>
            </author>
            <author fullname="L. Pardue" initials="L." surname="Pardue">
              <organization/>
            </author>
            <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="RFC9112">
          <front>
            <title>HTTP/1.1</title>
            <author fullname="R. Fielding" initials="R." role="editor" surname="Fielding">
              <organization/>
            </author>
            <author fullname="M. Nottingham" initials="M." role="editor" surname="Nottingham">
              <organization/>
            </author>
            <author fullname="J. Reschke" initials="J." role="editor" surname="Reschke">
              <organization/>
            </author>
            <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>
      </references>
    </references>
    <section numbered="false" anchor="acknowledgments">
      <name>Acknowledgments</name>
      <t>Thanks to Amos Jeffries for close review.</t>
    </section>
  </back>
  <!-- ##markdown-source:
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
5bKZVscpRV2p6EJyHP0PShxJHzspAAA=

-->

</rfc>
