<?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-modern-http-proxies-00" category="std" consensus="true" submissionType="IETF" tocInclude="true" sortRefs="true" symRefs="true" version="3">
  <!-- xml2rfc v2v3 conversion 3.15.0 -->
  <front>
    <title abbrev="Modern HTTP Proxies">Modernizing HTTP Forward Proxy Functionality</title>
    <seriesInfo name="Internet-Draft" value="draft-schwartz-modern-http-proxies-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="October" day="14"/>
    <area>art</area>
    <workgroup>httpbis</workgroup>
    <keyword>Internet-Draft</keyword>
    <abstract>
      <t>HTTP proxying features have long been part of the core HTTP specification.  However, the core proxying functionality has several important deficiencies in modern HTTP environments.  This specification defines alternative proxy service configurations for HTTP requests and TCP connections.  These services are identified by URI Templates and designed for parallelism with DoH, MASQUE, and Oblivious HTTP.</t>
    </abstract>
  </front>
  <middle>
    <section anchor="introduction">
      <name>Introduction</name>
      <section anchor="history">
        <name>History</name>
        <t>An HTTP forward proxy (or just "proxy" in the HTTP standards) is an HTTP service that acts on behalf of the client as an intermediary for some or all HTTP requests.  HTTP/1.0 defines the initial HTTP proxying mechanism: the client formats its request target in "absolute form" (i.e. with a full URI in the Request-Line) and delivers it to the proxy, which reissues it to the origin specified in the URI (<xref section="5.1.2" sectionFormat="comma" target="RFC1945"/>).  In this specification, we call this behavior an "HTTP request proxy".</t>
        <t>With the introduction of "https" URIs, a new proxying mechanism was needed to enable TLS connections to traverse the proxy.  To enable this, HTTP/1.1 introduced the CONNECT method.  In this method, 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"/>).  In this specification, we call this behavior a "TCP transport proxy".</t>
        <t>These two methods sufficed until the introduction of HTTP/3, which uses a UDP transport.  The MASQUE effort has filled the gap by defining 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 request proxies and TCP transport 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 (virtual-hosting).  In HTTP/1.1, the "Host" header was introduced to support such virtual-hosting by distinguishing the hostname of the proxy (in the Host header) from the hostname of the destination (in the absolute-form request URI).  However, in HTTP/2 and HTTP/3, this distinction no longer exists.  As a result, classic HTTP request proxies are not compatible with virtual-hosting in HTTP/2 or HTTP/3.</t>
        <t>Classic TCP transport proxies can be used with a host that is specified as a domain name or an IP address.  However, because only a single IP address can be specified, Happy Eyeballs and cross-IP fallback can only be used when the host is a domain name.  For requests to succeed, the client must know which address families are supported by the proxy.</t>
      </section>
      <section anchor="overview">
        <name>Overview</name>
        <t>This specification describes alternative protocols for HTTP request proxies and TCP transport proxies in HTTP.  Like other modern HTTP access services such as DoH, CONNECT-UDP, and CONNECT-IP, the proxy 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="modern-http-request-proxies">
      <name>Modern HTTP Request Proxies</name>
      <t>A modern HTTP request proxy is identified by a URI Template containing a variable named "target_uri".  To convert an HTTP request into a proxied request, the client <bcp14>MUST</bcp14> substitute the request's URI into this variable, expand the template, and use the result as the new request URI.</t>
      <t>HTTP headers work the same as in classic HTTP request proxies.</t>
      <t>A modern HTTP request proxy is also suitable for use as an Oblivious HTTP relay, if it provides the required privacy guarantees.</t>
      <section anchor="example">
        <name>Example</name>
        <t>Consider a proxy identified as "https://example.com/proxy{?target_uri}".  Requests would then be transformed as follows:</t>
        <artwork><![CDATA[
Original request:
PATCH /resource HTTP/1.1
Host: api.example
Content-Type: application/example
...

Transformed request:
PATCH /proxy?target_uri=https%3A%2F%2Fapi.example%2Fresource HTTP/1.1
Host: example.com
Content-Type: application/example
Proxy-Authorization: ...
...
]]></artwork>
        <t>Notes on this example:</t>
        <ul spacing="normal">
          <li>The HTTP method is not altered.</li>
          <li>The request-related headers such as Content-Type are preserved, but the Host header (or :authority in HTTP/2 and HTTP/3) is altered.</li>
          <li>Certain characers in the target URI are percent-encoded during URI Template expansion.</li>
          <li>The scheme, which is implicit in the original request, is explicit in the transformed request.  The scheme in this example is "https", indicating that the client is asking the proxy to establish a secure connection to the target.</li>
          <li>The client can add Proxy-* headers to communicate with the proxy.</li>
        </ul>
      </section>
    </section>
    <section anchor="modern-tcp-transport-proxies">
      <name>Modern TCP transport proxies</name>
      <t>A modern 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".</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> be 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 the TCP connection failed, the proxy <bcp14>MUST NOT</bcp14> return a 101 or 2XX status code.</t>
        <t>If the proxy observes an unclean shutdown from the client (e.g. a TCP RST or TLS error), it <bcp14>SHOULD</bcp14> send a TCP RST to the target.  If the proxy receives a TCP RST 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>
        <section anchor="example-1">
          <name>Example</name>
          <t>Consider a proxy identified as "https://example.com/proxy{?target_host,tcp_port}".  To establish a TCP connection to 192.0.2.1:443, the following exchange would occur:</t>
          <figure>
            <name>Modern TCP transport proxy in HTTP/1.1</name>
            <sourcecode type="http-message"><![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
]]></sourcecode>
          </figure>
        </section>
      </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 streams <bcp14>SHALL</bcp14> conform to all the usual requirements for non-extended CONNECT in this HTTP version.</t>
      </section>
    </section>
    <section anchor="additional-examples">
      <name>Additional Examples</name>
      <section anchor="template-expansion">
        <name>Template expansion</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>
        <figure>
          <name>Multipurpose templates</name>
          <artwork><![CDATA[
Combined HTTP request and TCP transport proxy:
https://example.com/proxy{?target_uri,target_host,tcp_port}

Combined HTTP, TCP, UDP, and IP proxy with DoH server:
https://proxy.example/{?target_uri,target_host,tcp_port,port,target,ipproto,dns}
]]></artwork>
        </figure>
        <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>
      </section>
      <section anchor="sample-exchanges">
        <name>Sample exchanges</name>
        <t>A modern HTTP request proxy can be used as an Oblivious HTTP Relay.  For example, suppose the relay is identified as "https://proxy.example.org/relay{?target_uri}", and the Oblivious HTTP Gateway is "https://example.com/gateway".  The client would send requests to the proxy as follows:</t>
        <figure>
          <name>Use of an HTTP request proxy as an Oblivious relay</name>
          <sourcecode type="http-message"><![CDATA[
POST /relay?target_uri=https%3A%2F%2Fexample.com%2Fgateway HTTP/1.1
Host: proxy.example.org
Proxy-Authorization: ...
Content-Type: message/ohttp-req
...
]]></sourcecode>
        </figure>
        <t>If a modern HTTP request proxy supports HTTP/2 and Extended CONNECT, it is even possible to reach a modern TCP transport proxy through it:</t>
        <figure>
          <name>Use of a TCP transport proxy through an HTTP request proxy</name>
          <sourcecode type="http-message"><![CDATA[
CONNECT HTTP/2.0
:authority = request-proxy.example
:scheme = https
:path = /proxy?target_uri=https%3A%2F%2Ftransport-proxy.example%2Fproxy
    %3Ftarget_host%3Ddestination.example%26tcp_port%3D443
:protocol = connect-tcp
...
]]></sourcecode>
        </figure>
        <t>Modern TCP transport proxies support requests that offer multiple IP addresses:</t>
        <figure>
          <name>TCP transport proxy request with multiple IP addresses</name>
          <sourcecode type="http-message"><![CDATA[
CONNECT HTTP/2.0
:authority = request-proxy.example
:scheme = https
:path = /proxy?target_host=192.0.2.1,2001:db8::1&port=443
:protocol = connect-tcp
...
]]></sourcecode>
        </figure>
      </section>
    </section>
    <section anchor="security-considerations">
      <name>Security Considerations</name>
      <t>None</t>
    </section>
    <section anchor="operational-considerations">
      <name>Operational considerations</name>
      <t>Modern HTTP 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 these services.  A compatible 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="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>
      </references>
      <references>
        <name>Informative References</name>
        <reference anchor="RFC1945">
          <front>
            <title>Hypertext Transfer Protocol -- HTTP/1.0</title>
            <author fullname="T. Berners-Lee" initials="T." surname="Berners-Lee">
              <organization/>
            </author>
            <author fullname="R. Fielding" initials="R." surname="Fielding">
              <organization/>
            </author>
            <author fullname="H. Frystyk" initials="H." surname="Frystyk">
              <organization/>
            </author>
            <date month="May" year="1996"/>
            <abstract>
              <t>The Hypertext Transfer Protocol (HTTP) is an application-level protocol with the lightness and speed necessary for distributed, collaborative, hypermedia information systems.  This memo provides information for the Internet community.  This memo does not specify an Internet standard of any kind.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="1945"/>
          <seriesInfo name="DOI" value="10.17487/RFC1945"/>
        </reference>
        <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="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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
AtAljASA/w/cKwm92i4AAA==

-->

</rfc>
