<?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.17 (Ruby 3.1.2) -->
<rfc xmlns:xi="http://www.w3.org/2001/XInclude" ipr="trust200902" docName="draft-schwartz-httpbis-connect-tcp-00" category="std" consensus="true" submissionType="IETF" tocInclude="true" sortRefs="true" symRefs="true" version="3">
  <!-- xml2rfc v2v3 conversion 3.15.2 -->
  <front>
    <title abbrev="Templated CONNECT-TCP">Template-Driven HTTP CONNECT Proxying for TCP</title>
    <seriesInfo name="Internet-Draft" value="draft-schwartz-httpbis-connect-tcp-00"/>
    <author initials="B. M." surname="Schwartz" fullname="Benjamin M. Schwartz">
      <organization>Google LLC</organization>
      <address>
        <email>bemasc@google.com</email>
      </address>
    </author>
    <date year="2022" month="November" day="11"/>
    <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 the pre-existing CONNECT mechanism was not applicable.  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, not a URI.  The proxy service does not have a path of its own.  This prevents any origin from hosting multiple distinct proxy services and makes it difficult to manage a proxy service in a fashion similar to other HTTP services.</t>
        <t>In some circumstances, it may be possible to work around this limitation by hosting many origins on a single server IP address (i.e., virtual-hosting).  In HTTP/1.1, the "Host" header enables such virtual-hosting by distinguishing the hostname of the proxy (in the Host header) from the hostname of the destination (in the request target).  However, in HTTP/2 and HTTP/3, this distinction no longer exists.  As a result, classic HTTP CONNECT proxies are not compatible with virtual-hosting in HTTP/2 or HTTP/3.</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> return a 101 or 2XX status code.</t>
        <t>From this point on, the connection <bcp14>SHALL</bcp14> confirm 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

                            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>
    <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>Template-driven proxies can also be placed on 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 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>IP Proxying Support for 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="27" month="September" year="2022"/>
            <abstract>
              <t>   This document describes a method of proxying IP packets over HTTP.
   This protocol is similar to CONNECT-UDP, but allows transmitting
   arbitrary IP packets, without being limited to just TCP like CONNECT
   or UDP like CONNECT-UDP.

              </t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-ietf-masque-connect-ip-03"/>
        </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>
      </references>
    </references>
    <section numbered="false" anchor="acknowledgments">
      <name>Acknowledgments</name>
      <t>TODO acknowledge.</t>
    </section>
  </back>
  <!-- ##markdown-source:
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

-->

</rfc>
