<?xml version='1.0' encoding='utf-8'?>
<!DOCTYPE rfc [
  <!ENTITY nbsp    "&#160;">
  <!ENTITY zwsp   "&#8203;">
  <!ENTITY nbhy   "&#8209;">
  <!ENTITY wj     "&#8288;">
]>
<?xml-stylesheet type="text/xsl" href="rfc2629.xslt" ?>
<!-- generated by https://github.com/cabo/kramdown-rfc version 1.7.29 (Ruby 3.3.6) -->
<rfc xmlns:xi="http://www.w3.org/2001/XInclude" ipr="trust200902" docName="draft-schwartz-modern-http-proxies-01" category="std" consensus="true" submissionType="IETF" tocInclude="true" sortRefs="true" symRefs="true" version="3">
  <!-- xml2rfc v2v3 conversion 3.28.1 -->
  <front>
    <title abbrev="Templated HTTP Request Proxies">Template-Driven HTTP Request Proxying</title>
    <seriesInfo name="Internet-Draft" value="draft-schwartz-modern-http-proxies-01"/>
    <author initials="B. M." surname="Schwartz" fullname="Benjamin M. Schwartz">
      <organization>Meta Platforms, Inc.</organization>
      <address>
        <email>ietf@bemasc.net</email>
      </address>
    </author>
    <date year="2025" month="May" day="01"/>
    <area>art</area>
    <workgroup>httpbis</workgroup>
    <keyword>Internet-Draft</keyword>
    <abstract>
      <?line 28?>

<t>HTTP request proxying behaviors have long been part of the core HTTP specification.  However, the core request proxying functionality has several important deficiencies in modern HTTP environments.  This specification defines an alternative proxy service configuration for HTTP requests.  The proxy service is identified by a URI Template, similarly to "connect-tcp" and "connect-udp".</t>
    </abstract>
  </front>
  <middle>
    <?line 32?>

<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 defined 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 the request to the origin specified in the URI (<xref section="5.1.2" sectionFormat="comma" target="RFC1945"/>).  In this specification, we call this behavior a "classic HTTP request proxy".</t>
        <t>In HTTP/1.1, proxy requests are additionally required to carry a Host header whose value matches the authority in the Request URI (not the name of the proxy server).  In HTTP/2 and HTTP/3, the destination host is specified in the :authority pseudo-header field (<xref section="8.3.1" sectionFormat="comma" target="RFC9113"/>).</t>
      </section>
      <section anchor="problems">
        <name>Problems</name>
        <t>HTTP clients can be configured to use proxies by selecting a proxy host, a port, and whether to use a security protocol. However, requests to the proxy do not carry this configuration information. Instead, they only indicate the URI of the requested resource. This prevents any HTTP server from hosting multiple distinct proxy services, as the server cannot distinguish them by path (as with distinct resources) or by origin (as in "virtual hosting").</t>
        <t>The absence of an explicit origin for the proxy also rules out the usual defenses against server port misdirection attacks (see <xref section="7.4" sectionFormat="of" target="RFC9110"/>).</t>
        <!--
### Context Mixing

Classic HTTP request proxies forward the entire request, including all its headers, with a few exceptions:

* The Proxy-Authenticate, Proxy-Authorization, Proxy-Authentication-Info, and Proxy-Status headers are not forwarded.
* In HTTP/1.1, the Host header, and connection-specific headers listed in Connection header, are not forwarded.
* Proxies are required to add a Via header identifying the proxy.
* For TRACE and OPTIONS methods, proxies are required to check and decrement the Max-Forwards header.

In HTTP/2 and HTTP/3, this leaves no way to attach metadata to the request between the client and the proxy.
-->

</section>
      <section anchor="overview">
        <name>Overview</name>
        <t>This specification describes an alternative protocol for an HTTP request proxy.  Like CONNECT-TCP, CONNECT-UDP, and CONNECT-IP, the proxy is identified by a URI Template.</t>
      </section>
    </section>
    <section anchor="conventions-and-definitions">
      <name>Conventions and Definitions</name>
      <t>The key words "<bcp14>MUST</bcp14>", "<bcp14>MUST NOT</bcp14>", "<bcp14>REQUIRED</bcp14>", "<bcp14>SHALL</bcp14>", "<bcp14>SHALL
NOT</bcp14>", "<bcp14>SHOULD</bcp14>", "<bcp14>SHOULD NOT</bcp14>", "<bcp14>RECOMMENDED</bcp14>", "<bcp14>NOT RECOMMENDED</bcp14>",
"<bcp14>MAY</bcp14>", and "<bcp14>OPTIONAL</bcp14>" in this document are to be interpreted as
described in BCP 14 <xref target="RFC2119"/> <xref target="RFC8174"/> when, and only when, they
appear in all capitals, as shown here.</t>
      <?line -18?>

</section>
    <section anchor="requirements">
      <name>Requirements</name>
      <section anchor="use-of-templates">
        <name>Use of Templates</name>
        <t>A templated 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 and status codes are processed in the same way as in classic HTTP request proxies.</t>
        <t>A templated HTTP request proxy is also suitable for use as an Oblivious HTTP relay, if it provides the required privacy guarantees.</t>
      </section>
      <section anchor="configuration">
        <name>Configuration</name>
        <t>Clients that support both classic HTTP request proxies and template-driven 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 "target_uri" variable, it is a template-driven request proxy.  Otherwise, it is presumed to represent a classic HTTP request proxy.</t>
        <t>This specification defines a new Proxy-Status parameter: "use_template" (see registration in <xref target="iana-considerations"/>), which conveys a preferred URI Template for the proxy.  Upon receipt of this parameter, the client <bcp14>SHOULD</bcp14> update its configuration to use the new template for the remainder of the session if possible, and retry the request using the new template if it also received a Proxy-Status "error" parameter.</t>
        <t>If the client is configured with a classic HTTP request proxy, and the template string is the special value "default", the client <bcp14>MUST</bcp14> use the following default proxy template:</t>
        <figure>
          <name>Registered default template</name>
          <artwork><![CDATA[
https://$PROXY_HOST:$PROXY_PORT/.well-known/masque
                 /http/{target_uri}
]]></artwork>
        </figure>
        <t>This allows a virtual-hosted proxy server to learn the proxy's hostname, which is not present in the initial request.</t>
      </section>
    </section>
    <section anchor="examples">
      <name>Examples</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>
          <t>The HTTP method is not altered.</t>
        </li>
        <li>
          <t>The request-related headers such as Content-Type are preserved, but the Host header (or :authority in HTTP/2 and HTTP/3) is altered.</t>
        </li>
        <li>
          <t>Certain characters in the target URI are percent-encoded during URI Template expansion.</t>
        </li>
        <li>
          <t>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.</t>
        </li>
        <li>
          <t>The client can add Proxy-* headers to communicate with the proxy.</t>
        </li>
      </ul>
      <t>A templated 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 templated HTTP request proxy supports HTTP/2 and Extended CONNECT, it is even possible to reach a CONNECT-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%26target_port%3D443
:protocol = connect-tcp
capsule-protocol: ?1
...
]]></sourcecode>
      </figure>
      <t>A proxy can use the "use_template" proxy status error to reconfigure existing clients:</t>
      <figure>
        <name>Updating the configured template with 'use_template'</name>
        <sourcecode type="http-message"><![CDATA[
GET /main?target_uri=https%3A%2F%2Fexample.com%2F HTTP/1.1
Host: proxy.example.org
Proxy-Authorization: ...
Content-Type: message/ohttp-req
...

HTTP/1.1 200 OK
Proxy-Status: proxy.example.org; \
    use_template="https://proxy.example.org/beta{?target_uri}"; \
    details="You have been assigned to the beta test group"
Content-Type: message/ohttp-resp
...
]]></sourcecode>
      </figure>
      <t>If the client's proxy configuration string was "proxy-foo.example.org:54321", the client will start by issuing a classic HTTP proxy request, but the proxy can use the "use_template" parameter to inform the client that it should use templated requests instead:</t>
      <figure>
        <name>Using 'use_template' to upgrade from classic to templated proxying</name>
        <sourcecode type="http-message"><![CDATA[
GET https://example.com/ HTTP/1.1
Proxy-Authorization: ...
Host: example.com
Accept: text/html

HTTP/1.1 400 Bad Request
Proxy-Status: proxy-no-template.example.org; \
    use_template="default"; \
    error="http_request_denied"; \
    details="Proxy template required"

GET /http/https%3A%2F%2Fexample.com%2F HTTP/1.1
Proxy-Authorization: ...
Host: proxy-foo.example.org:54321
Accept: text/html

HTTP/1.1 200 OK
Content-Type: text/html
Content-Length: ...
...
]]></sourcecode>
      </figure>
    </section>
    <section anchor="security-considerations">
      <name>Security Considerations</name>
      <t>None</t>
    </section>
    <section anchor="operational-considerations">
      <name>Operational Considerations</name>
      <t>Templated HTTP proxies can make use of standard HTTP gateways and path-routing to ease implementation and allow use of shared infrastructure.  To be compatible, a gateway must forward Proxy-* request headers to the origin.</t>
    </section>
    <section anchor="iana-considerations">
      <name>IANA Considerations</name>
      <t>IF APPROVED, IANA is requested to add the following entry to the "MASQUE URI Suffixes" registry:</t>
      <table>
        <thead>
          <tr>
            <th align="left">Path Segment</th>
            <th align="left">Description</th>
            <th align="left">Reference</th>
          </tr>
        </thead>
        <tbody>
          <tr>
            <td align="left">http</td>
            <td align="left">HTTP Request Proxying</td>
            <td align="left">(This document)</td>
          </tr>
        </tbody>
      </table>
      <t>IF APPROVED, IANA is requested to add the following entry to the "HTTP Proxy Status Parameters" registry:</t>
      <ul spacing="normal">
        <li>
          <t>Name: use_template</t>
        </li>
        <li>
          <t>Description: A URI Template that should be used for requests to this proxy server.  The special value "default" indicates that the client should use the default template for the configured proxy hostname (which is not known to the proxy).</t>
        </li>
        <li>
          <t>Reference: (This document)</t>
        </li>
      </ul>
    </section>
  </middle>
  <back>
    <references anchor="sec-combined-references">
      <name>References</name>
      <references anchor="sec-normative-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"/>
            <date month="March" year="1997"/>
            <abstract>
              <t>In many standards track documents several words are used to signify the requirements in the specification. These words are often capitalized. This document defines these words as they should be interpreted in IETF documents. This document specifies an Internet Best Current Practices for the Internet Community, and requests discussion and suggestions for improvements.</t>
            </abstract>
          </front>
          <seriesInfo name="BCP" value="14"/>
          <seriesInfo name="RFC" value="2119"/>
          <seriesInfo name="DOI" value="10.17487/RFC2119"/>
        </reference>
        <reference anchor="RFC8174">
          <front>
            <title>Ambiguity of Uppercase vs Lowercase in RFC 2119 Key Words</title>
            <author fullname="B. Leiba" initials="B." surname="Leiba"/>
            <date month="May" year="2017"/>
            <abstract>
              <t>RFC 2119 specifies common key words that may be used in protocol specifications. This document aims to reduce the ambiguity by clarifying that only UPPERCASE usage of the key words have the defined special meanings.</t>
            </abstract>
          </front>
          <seriesInfo name="BCP" value="14"/>
          <seriesInfo name="RFC" value="8174"/>
          <seriesInfo name="DOI" value="10.17487/RFC8174"/>
        </reference>
      </references>
      <references anchor="sec-informative-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"/>
            <author fullname="R. Fielding" initials="R." surname="Fielding"/>
            <author fullname="H. Frystyk" initials="H." surname="Frystyk"/>
            <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="RFC9113">
          <front>
            <title>HTTP/2</title>
            <author fullname="M. Thomson" initials="M." role="editor" surname="Thomson"/>
            <author fullname="C. Benfield" initials="C." role="editor" surname="Benfield"/>
            <date month="June" year="2022"/>
            <abstract>
              <t>This specification describes an optimized expression of the semantics of the Hypertext Transfer Protocol (HTTP), referred to as HTTP version 2 (HTTP/2). HTTP/2 enables a more efficient use of network resources and a reduced latency by introducing field compression and allowing multiple concurrent exchanges on the same connection.</t>
              <t>This document obsoletes RFCs 7540 and 8740.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="9113"/>
          <seriesInfo name="DOI" value="10.17487/RFC9113"/>
        </reference>
        <reference anchor="RFC9110">
          <front>
            <title>HTTP Semantics</title>
            <author fullname="R. Fielding" initials="R." role="editor" surname="Fielding"/>
            <author fullname="M. Nottingham" initials="M." role="editor" surname="Nottingham"/>
            <author fullname="J. Reschke" initials="J." role="editor" surname="Reschke"/>
            <date month="June" year="2022"/>
            <abstract>
              <t>The Hypertext Transfer Protocol (HTTP) is a stateless application-level protocol for distributed, collaborative, hypertext information systems. This document describes the overall architecture of HTTP, establishes common terminology, and defines aspects of the protocol that are shared by all versions. In this definition are core protocol elements, extensibility mechanisms, and the "http" and "https" Uniform Resource Identifier (URI) schemes.</t>
              <t>This document updates RFC 3864 and obsoletes RFCs 2818, 7231, 7232, 7233, 7235, 7538, 7615, 7694, and portions of 7230.</t>
            </abstract>
          </front>
          <seriesInfo name="STD" value="97"/>
          <seriesInfo name="RFC" value="9110"/>
          <seriesInfo name="DOI" value="10.17487/RFC9110"/>
        </reference>
      </references>
    </references>
    <?line 231?>

<section numbered="false" anchor="acknowledgments">
      <name>Acknowledgments</name>
      <t>TODO acknowledge.</t>
    </section>
  </back>
  <!-- ##markdown-source:
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

-->

</rfc>
