<?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.24 (Ruby 3.3.6) -->
<rfc xmlns:xi="http://www.w3.org/2001/XInclude" ipr="trust200902" docName="draft-ietf-httpbis-connect-tcp-07" category="std" consensus="true" submissionType="IETF" tocInclude="true" sortRefs="true" symRefs="true" version="3">
  <!-- xml2rfc v2v3 conversion 3.28.0 -->
  <front>
    <title abbrev="Templated CONNECT-TCP">Template-Driven HTTP CONNECT Proxying for TCP</title>
    <seriesInfo name="Internet-Draft" value="draft-ietf-httpbis-connect-tcp-07"/>
    <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="March" day="17"/>
    <area>art</area>
    <workgroup>httpbis</workgroup>
    <keyword>Internet-Draft</keyword>
    <abstract>
      <?line 35?>

<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>
    <?line 39?>

<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="CONNECT-UDP"/>, and more generally IP datagrams <xref target="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>HTTP clients can be configured to use proxies by selecting a proxy hostname, a port, and whether to use a security protocol. However, Classic HTTP CONNECT requests using the proxy do not carry this configuration information. Instead, they only indicate the hostname and port of the target. This prevents any HTTP server from hosting multiple distinct proxy services, as the server cannot distinguish them by path (as with distinct resources) or by origin (as in "virtual hosting").</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"/>) and creates ambiguity about the use of origin-scoped response header fields (e.g., "Alt-Svc" <xref target="RFC7838"/>, "Strict-Transport-Security" <xref target="RFC6797"/>).</t>
        <t>Classic HTTP CONNECT requests cannot carry in-stream metadata. For example, the WRAP_UP capsule <xref target="I-D.schinazi-httpbis-wrap-up"/> cannot be used with Classic HTTP CONNECT.</t>
      </section>
      <section anchor="overview">
        <name>Overview</name>
        <t>This specification describes an alternative mechanism for proxying TCP in HTTP.  Like <xref target="CONNECT-UDP"/> and <xref target="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>
      <?line -18?>

</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 "target_port".  This URI Template and its variable values <bcp14>MUST</bcp14> meet all the same requirements as for UDP proxying (<xref section="2" sectionFormat="comma" target="RFC9298"/>), and are subject to the same validation rules.  The client <bcp14>MUST</bcp14> substitute the destination host and port number into this template to produce the request URI.  The derived URI serves as the destination of a Capsule Protocol connection using the Upgrade Token "connect-tcp" (see registration in <xref target="new-upgrade-token"/>).</t>
      <t>When using "connect-tcp", TCP payload data is sent in the payload of a new Capsule Type named DATA (see registration in <xref target="data-capsule"/>).  The ordered concatenation of DATA capsule payloads represents the TCP payload data.</t>
      <t>An intermediary <bcp14>MAY</bcp14> merge and split successive DATA capsules, subject to the following requirements:</t>
      <ul spacing="normal">
        <li>
          <t>There are no intervening capsules of other types.</t>
        </li>
        <li>
          <t>The order of payload content is preserved.</t>
        </li>
      </ul>
      <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>
            <t>The method <bcp14>SHALL</bcp14> be "GET".</t>
          </li>
          <li>
            <t>The request's target <bcp14>SHALL</bcp14> correspond to the URI derived from expansion of the proxy's URI Template.</t>
          </li>
          <li>
            <t>The request <bcp14>SHALL</bcp14> include a single "Host" header field containing the origin of the proxy.</t>
          </li>
          <li>
            <t>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"/>.)</t>
          </li>
          <li>
            <t>The request <bcp14>SHALL</bcp14> include an "Upgrade" header field with the value "connect-tcp".</t>
          </li>
          <li>
            <t>The request <bcp14>SHOULD</bcp14> include a "Capsule-Protocol: ?1" header.</t>
          </li>
        </ul>
        <t>If the request is well-formed and permissible, the proxy <bcp14>MUST</bcp14> attempt to establish the TCP connection before sending any response status code other than "100 (Continue)" (see <xref target="conveying-metadata"/>).  If the TCP connection is successful, the response <bcp14>SHALL</bcp14> be as follows:</t>
        <ul spacing="normal">
          <li>
            <t>The HTTP status code <bcp14>SHALL</bcp14> be "101 (Switching Protocols)".</t>
          </li>
          <li>
            <t>The response <bcp14>SHALL</bcp14> include a "Connection" header field with the value "Upgrade".</t>
          </li>
          <li>
            <t>The response <bcp14>SHALL</bcp14> include a single "Upgrade" header field with the value "connect-tcp".</t>
          </li>
          <li>
            <t>The response <bcp14>SHOULD</bcp14> include a "Capsule-Protocol: ?1" header.</t>
          </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", and the client <bcp14>MAY</bcp14> reuse this connection for additional HTTP requests.</t>
        <figure>
          <name>Templated TCP proxy example in HTTP/1.1</name>
          <artwork><![CDATA[
Client                                                 Proxy

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

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

                            HTTP/1.1 101 Switching Protocols
                            Connection: Upgrade
                            Upgrade: connect-tcp
                            Capsule-Protocol: ?1
]]></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 proxy <bcp14>MUST</bcp14> include SETTINGS_ENABLE_CONNECT_PROTOCOL in its SETTINGS frame <xref target="RFC8441"/><xref target="RFC9220"/>.  The client uses the proxy by issuing an "extended CONNECT" request as follows:</t>
        <ul spacing="normal">
          <li>
            <t>The :method pseudo-header field <bcp14>SHALL</bcp14> be "CONNECT".</t>
          </li>
          <li>
            <t>The :protocol pseudo-header field <bcp14>SHALL</bcp14> be "connect-tcp".</t>
          </li>
          <li>
            <t>The :authority pseudo-header field <bcp14>SHALL</bcp14> contain the authority of the proxy.</t>
          </li>
          <li>
            <t>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.</t>
          </li>
        </ul>
        <t>A templated TCP proxying request that does not conform to all of these requirements represents a client error (see <xref section="15.5" sectionFormat="comma" target="RFC9110"/>) and may be malformed (see <xref section="8.1.1" sectionFormat="of" target="RFC9113"/> and <xref section="4.1.2" 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=2001%3Adb8%3A%3A1&target_port=443
:protocol = connect-tcp
capsule-protocol = ?1
...
]]></artwork>
        </figure>
      </section>
      <section anchor="use-of-other-relevant-headers">
        <name>Use of Other Relevant Headers</name>
        <section anchor="origin-scoped-headers">
          <name>Origin-scoped Headers</name>
          <t>Ordinary HTTP headers apply only to the single resource identified in the request or response.  An origin-scoped HTTP header is a special response header that is intended to change the client's behavior for subsequent requests to any resource on this origin.</t>
          <t>Unlike classic HTTP CONNECT proxies, a templated TCP proxy has an unambiguous origin of its own.  Origin-scoped headers apply to this origin when they are associated with a templated TCP proxy response.  Here are some origin-scoped headers that could potentially be sent by a templated TCP proxy:</t>
          <ul spacing="normal">
            <li>
              <t>"Alt-Svc" <xref target="RFC7838"/></t>
            </li>
            <li>
              <t>"Strict-Transport-Security" <xref target="RFC6797"/></t>
            </li>
            <li>
              <t>"Public-Key-Pins" <xref target="RFC7469"/></t>
            </li>
            <li>
              <t>"Accept-CH" <xref target="RFC8942"/></t>
            </li>
            <li>
              <t>"Set-Cookie" <xref target="RFC6265"/>, which has configurable scope.</t>
            </li>
            <li>
              <t>"Clear-Site-Data" <xref target="CLEAR-SITE-DATA"/></t>
            </li>
          </ul>
        </section>
        <section anchor="authentication-headers">
          <name>Authentication Headers</name>
          <t>Authentication to a templated TCP proxy normally uses ordinary HTTP authentication via the "401 (Unauthorized)" response code, the "WWW-Authenticate" response header field, and the "Authorization" request header field (<xref section="11.6" sectionFormat="comma" target="RFC9110"/>).  A templated TCP proxy does not use the "407 (Proxy Authentication Required)" response code and related header fields (<xref section="11.7" sectionFormat="comma" target="RFC9110"/>) because they do not traverse HTTP gateways (see <xref target="operational-considerations"/>).</t>
          <t>Clients <bcp14>SHOULD</bcp14> assume that all proxy resources generated by a single template share a protection space (i.e., a realm) (<xref section="11.5" sectionFormat="comma" target="RFC9110"/>).  For many authentication schemes, this will allow the client to avoid waiting for a "401 (Unauthorized)" response before each new connection through the proxy.</t>
        </section>
      </section>
      <section anchor="closing-connections">
        <name>Closing Connections</name>
        <t>In each HTTP version, any requirements related to closing connections in Classic HTTP CONNECT also apply to "connect-tcp", with the following modifications:</t>
        <ul spacing="normal">
          <li>
            <t>In HTTP/1.1, endpoints <bcp14>SHOULD</bcp14> close the connection in an error state to indicate receipt of a TCP connection error (e.g., a TCP RST or timeout).  Acceptable error states include sending an incomplete DATA capsule (as defined in <xref section="3.3" sectionFormat="of" target="RFC9297"/>), a TLS Error Alert (<xref section="6.2" sectionFormat="comma" target="RFC8446"/>), or a TCP RST (if TLS is not in use).  When a connection is terminated in an error state, the receiving endpoint <bcp14>SHOULD</bcp14> send a TCP RST if the underlying TCP implementation permits it.</t>
          </li>
          <li>
            <t>In HTTP/2 and HTTP/3, senders <bcp14>MAY</bcp14> use an incomplete DATA capsule to indicate a TCP connection error, instead of (or in addition to) the signals defined for TCP connection errors in Classic HTTP CONNECT.  Recipients <bcp14>MUST</bcp14> recognize any incomplete capsule as a TCP connection error.</t>
          </li>
          <li>
            <t>Intermediaries <bcp14>MUST</bcp14> propagate connection shutdown errors, including when translating between different HTTP versions.</t>
          </li>
        </ul>
      </section>
    </section>
    <section anchor="additional-connection-setup-behaviors">
      <name>Additional Connection Setup Behaviors</name>
      <t>This section discusses some behaviors that are permitted or recommended in order to enhance the performance or functionality of connection setup.</t>
      <section anchor="latency-optimizations">
        <name>Latency optimizations</name>
        <t>When using this specification in HTTP/2 or HTTP/3, clients <bcp14>MAY</bcp14> start sending TCP stream content optimistically, subject to flow control limits (<xref section="5.2" sectionFormat="of" target="RFC9113"/> or <xref section="4.1" sectionFormat="of" target="RFC9000"/>).  Proxies <bcp14>MUST</bcp14> buffer this "optimistic" content until the TCP stream becomes writable, and discard it if the TCP connection fails.  (Clients <bcp14>MUST NOT</bcp14> use "optimistic" behavior in HTTP/1.1, as this would interfere with reuse of the connection after an error response such as "401 (Unauthorized)".)</t>
        <t>Servers that host a proxy under this specification <bcp14>MAY</bcp14> offer support for TLS early data in accordance with <xref target="RFC8470"/>.  Clients <bcp14>MAY</bcp14> send "connect-tcp" requests in early data, and <bcp14>MAY</bcp14> include "optimistic" TCP content in early data (in HTTP/2 and HTTP/3).  At the TLS layer, proxies <bcp14>MAY</bcp14> ignore, reject, or accept the <tt>early_data</tt> extension (<xref section="4.2.10" sectionFormat="comma" target="RFC8446"/>).  At the HTTP layer, proxies <bcp14>MAY</bcp14> process the request immediately, return a "425 (Too Early)" response (<xref section="5.2" sectionFormat="comma" target="RFC8470"/>), or delay some or all processing of the request until the handshake completes.  For example, a proxy with limited anti-replay defenses might choose to perform DNS resolution of the <tt>target_host</tt> when a request arrives in early data, but delay the TCP connection until the TLS handshake completes.</t>
      </section>
      <section anchor="conveying-metadata">
        <name>Conveying metadata</name>
        <t>This specification supports the "Expect: 100-continue" request header (<xref section="10.1.1" sectionFormat="comma" target="RFC9110"/>) in any HTTP version.  The "100 (Continue)" status code confirms receipt of a request at the proxy without waiting for the proxy-destination TCP handshake to succeed or fail.  This might be particularly helpful when the destination host is not responding, as TCP handshakes can hang for several minutes before failing.  Clients <bcp14>MAY</bcp14> send "Expect: 100-continue", and proxies <bcp14>MUST</bcp14> respect it by returning "100 (Continue)" if the request is not immediately rejected.</t>
        <t>Proxies implementing this specification <bcp14>SHOULD</bcp14> include a "Proxy-Status" response header <xref target="RFC9209"/> in any success or failure response (i.e., status codes 101, 2XX, 4XX, or 5XX) to support advanced client behaviors and diagnostics.  In HTTP/2 or HTTP/3, proxies <bcp14>MAY</bcp14> additionally send a "Proxy-Status" trailer in the event of an unclean shutdown.</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>
        <t>In some cases, it is valuable to allow "connect-tcp" clients to reach "connect-tcp"-only proxies when using a legacy configuration method that cannot convey a URI Template.  To support this arrangement, clients <bcp14>SHOULD</bcp14> treat certain errors during classic HTTP CONNECT as indications that the proxy might only support "connect-tcp":</t>
        <ul spacing="normal">
          <li>
            <t>In HTTP/1.1: the response status code is "426 (Upgrade Required)", with an "Upgrade: connect-tcp" response header.</t>
          </li>
          <li>
            <t>In any HTTP version: the response status code is "501 (Not Implemented)".
            </t>
            <ul spacing="normal">
              <li>
                <t>Requires SETTINGS_ENABLE_CONNECT_PROTOCOL to have been negotiated in HTTP/2 or HTTP/3.</t>
              </li>
            </ul>
          </li>
        </ul>
        <t>If the client infers that classic HTTP CONNECT is not supported, it <bcp14>SHOULD</bcp14> retry the request using the registered default template for "connect-tcp":</t>
        <figure>
          <name>Registered default template</name>
          <artwork><![CDATA[
https://$PROXY_HOST:$PROXY_PORT/.well-known/masque
                 /tcp/{target_host}/{target_port}/
]]></artwork>
        </figure>
        <t>If this request succeeds, the client <bcp14>SHOULD</bcp14> record a preference for "connect-tcp" to avoid further retry delays.</t>
      </section>
    </section>
    <section anchor="security-considerations">
      <name>Security Considerations</name>
      <t>Template-driven TCP proxying is largely subject to the same security risks as classic HTTP CONNECT.  For example, any restrictions on authorized use of the proxy (see <xref section="9.3.6" sectionFormat="comma" target="RFC9110"/>) apply equally to both.</t>
      <t>A small additional risk is posed by the use of a URI Template parser on the client side.  The template input string could be crafted to exploit any vulnerabilities in the parser implementation.  Client implementers should apply their usual precautions for code that processes untrusted inputs.</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>
          <t>support Extended CONNECT (if acting as an HTTP/2 or HTTP/3 server).</t>
        </li>
        <li>
          <t>support HTTP/1.1 Upgrade to "connect-tcp" (if acting as an HTTP/1.1 server)
          </t>
          <ul spacing="normal">
            <li>
              <t>only after forwarding the upgrade request to the origin and observing a success response.</t>
            </li>
          </ul>
        </li>
        <li>
          <t>forward the "connect-tcp" protocol to the origin.</t>
        </li>
        <li>
          <t>convert "connect-tcp" requests between all supported HTTP server and client versions.</t>
        </li>
        <li>
          <t>allow any "Proxy-Status" headers to traverse the gateway.</t>
        </li>
      </ul>
    </section>
    <section anchor="iana-considerations">
      <name>IANA Considerations</name>
      <section anchor="new-upgrade-token">
        <name>New Upgrade Token</name>
        <t>IF APPROVED, IANA is requested to add the following entry to the HTTP Upgrade Token Registry:</t>
        <table>
          <thead>
            <tr>
              <th align="left">Value</th>
              <th align="left">Description</th>
              <th align="left">Reference</th>
            </tr>
          </thead>
          <tbody>
            <tr>
              <td align="left">"connect-tcp"</td>
              <td align="left">Proxying of TCP payloads</td>
              <td align="left">(This document)</td>
            </tr>
          </tbody>
        </table>
        <t>For interoperability testing of this draft version, implementations <bcp14>SHALL</bcp14> use the value "connect-tcp-07".</t>
      </section>
      <section anchor="iana-template">
        <name>New MASQUE Default Template</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">tcp</td>
              <td align="left">TCP Proxying</td>
              <td align="left">(This document)</td>
            </tr>
          </tbody>
        </table>
      </section>
      <section anchor="data-capsule">
        <name>New Capsule Type</name>
        <t>IF APPROVED, IANA is requested to add the following entry to the "HTTP Capsule Types" registry:</t>
        <table>
          <thead>
            <tr>
              <th align="left">Value</th>
              <th align="left">Capsule Type</th>
              <th align="left">Status</th>
              <th align="left">Reference</th>
              <th align="left">Change Controller</th>
              <th align="left">Contact</th>
            </tr>
          </thead>
          <tbody>
            <tr>
              <td align="left">(TBD)</td>
              <td align="left">DATA</td>
              <td align="left">permanent</td>
              <td align="left">(This document), <xref target="specification"/></td>
              <td align="left">IETF</td>
              <td align="left">HTTPBIS</td>
            </tr>
          </tbody>
        </table>
        <t>For this draft version of the protocol, the Capsule Type value <tt>0x2028d7ee</tt> shall be used provisionally for testing, under the name "DATA-07".</t>
      </section>
    </section>
  </middle>
  <back>
    <references anchor="sec-combined-references">
      <name>References</name>
      <references anchor="sec-normative-references">
        <name>Normative References</name>
        <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>
        <reference anchor="RFC9297">
          <front>
            <title>HTTP Datagrams and the Capsule Protocol</title>
            <author fullname="D. Schinazi" initials="D." surname="Schinazi"/>
            <author fullname="L. Pardue" initials="L." surname="Pardue"/>
            <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="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>
        <reference anchor="RFC6570">
          <front>
            <title>URI Template</title>
            <author fullname="J. Gregorio" initials="J." surname="Gregorio"/>
            <author fullname="R. Fielding" initials="R." surname="Fielding"/>
            <author fullname="M. Hadley" initials="M." surname="Hadley"/>
            <author fullname="M. Nottingham" initials="M." surname="Nottingham"/>
            <author fullname="D. Orchard" initials="D." surname="Orchard"/>
            <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="RFC9298">
          <front>
            <title>Proxying UDP in HTTP</title>
            <author fullname="D. Schinazi" initials="D." surname="Schinazi"/>
            <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="RFC8441">
          <front>
            <title>Bootstrapping WebSockets with HTTP/2</title>
            <author fullname="P. McManus" initials="P." surname="McManus"/>
            <date month="September" year="2018"/>
            <abstract>
              <t>This document defines a mechanism for running the WebSocket Protocol (RFC 6455) over a single stream of an HTTP/2 connection.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="8441"/>
          <seriesInfo name="DOI" value="10.17487/RFC8441"/>
        </reference>
        <reference anchor="RFC9220">
          <front>
            <title>Bootstrapping WebSockets with HTTP/3</title>
            <author fullname="R. Hamilton" initials="R." surname="Hamilton"/>
            <date month="June" year="2022"/>
            <abstract>
              <t>The mechanism for running the WebSocket Protocol over a single stream of an HTTP/2 connection is equally applicable to HTTP/3, but the HTTP-version-specific details need to be specified. This document describes how the mechanism is adapted for HTTP/3.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="9220"/>
          <seriesInfo name="DOI" value="10.17487/RFC9220"/>
        </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="RFC9114">
          <front>
            <title>HTTP/3</title>
            <author fullname="M. Bishop" initials="M." role="editor" surname="Bishop"/>
            <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>
        <reference anchor="RFC8446">
          <front>
            <title>The Transport Layer Security (TLS) Protocol Version 1.3</title>
            <author fullname="E. Rescorla" initials="E." surname="Rescorla"/>
            <date month="August" year="2018"/>
            <abstract>
              <t>This document specifies version 1.3 of the Transport Layer Security (TLS) protocol. TLS allows client/server applications to communicate over the Internet in a way that is designed to prevent eavesdropping, tampering, and message forgery.</t>
              <t>This document updates RFCs 5705 and 6066, and obsoletes RFCs 5077, 5246, and 6961. This document also specifies new requirements for TLS 1.2 implementations.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="8446"/>
          <seriesInfo name="DOI" value="10.17487/RFC8446"/>
        </reference>
        <reference anchor="RFC9000">
          <front>
            <title>QUIC: A UDP-Based Multiplexed and Secure Transport</title>
            <author fullname="J. Iyengar" initials="J." role="editor" surname="Iyengar"/>
            <author fullname="M. Thomson" initials="M." role="editor" surname="Thomson"/>
            <date month="May" year="2021"/>
            <abstract>
              <t>This document defines the core of the QUIC transport protocol. QUIC provides applications with flow-controlled streams for structured communication, low-latency connection establishment, and network path migration. QUIC includes security measures that ensure confidentiality, integrity, and availability in a range of deployment circumstances. Accompanying documents describe the integration of TLS for key negotiation, loss detection, and an exemplary congestion control algorithm.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="9000"/>
          <seriesInfo name="DOI" value="10.17487/RFC9000"/>
        </reference>
        <reference anchor="RFC8470">
          <front>
            <title>Using Early Data in HTTP</title>
            <author fullname="M. Thomson" initials="M." surname="Thomson"/>
            <author fullname="M. Nottingham" initials="M." surname="Nottingham"/>
            <author fullname="W. Tarreau" initials="W." surname="Tarreau"/>
            <date month="September" year="2018"/>
            <abstract>
              <t>Using TLS early data creates an exposure to the possibility of a replay attack. This document defines mechanisms that allow clients to communicate with servers about HTTP requests that are sent in early data. Techniques are described that use these mechanisms to mitigate the risk of replay.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="8470"/>
          <seriesInfo name="DOI" value="10.17487/RFC8470"/>
        </reference>
        <reference anchor="RFC9209">
          <front>
            <title>The Proxy-Status HTTP Response Header Field</title>
            <author fullname="M. Nottingham" initials="M." surname="Nottingham"/>
            <author fullname="P. Sikora" initials="P." surname="Sikora"/>
            <date month="June" year="2022"/>
            <abstract>
              <t>This document defines the Proxy-Status HTTP response field to convey the details of an intermediary's response handling, including generated errors.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="9209"/>
          <seriesInfo name="DOI" value="10.17487/RFC9209"/>
        </reference>
      </references>
      <references anchor="sec-informative-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="CLEAR-SITE-DATA" target="https://www.w3.org/TR/clear-site-data/">
          <front>
            <title>Clear Site Data</title>
            <author>
              <organization/>
            </author>
            <date year="2017" month="November"/>
          </front>
        </reference>
        <reference anchor="CONNECT-UDP">
          <front>
            <title>Proxying UDP in HTTP</title>
            <author fullname="D. Schinazi" initials="D." surname="Schinazi"/>
            <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="CONNECT-IP">
          <front>
            <title>Proxying IP in HTTP</title>
            <author fullname="T. Pauly" initials="T." role="editor" surname="Pauly"/>
            <author fullname="D. Schinazi" initials="D." surname="Schinazi"/>
            <author fullname="A. Chernyakhovsky" initials="A." surname="Chernyakhovsky"/>
            <author fullname="M. Kühlewind" initials="M." surname="Kühlewind"/>
            <author fullname="M. Westerlund" initials="M." surname="Westerlund"/>
            <date month="October" 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 an IP proxy. This document updates RFC 9298.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="9484"/>
          <seriesInfo name="DOI" value="10.17487/RFC9484"/>
        </reference>
        <reference anchor="RFC7838">
          <front>
            <title>HTTP Alternative Services</title>
            <author fullname="M. Nottingham" initials="M." surname="Nottingham"/>
            <author fullname="P. McManus" initials="P." surname="McManus"/>
            <author fullname="J. Reschke" initials="J." surname="Reschke"/>
            <date month="April" year="2016"/>
            <abstract>
              <t>This document specifies "Alternative Services" for HTTP, which allow an origin's resources to be authoritatively available at a separate network location, possibly accessed with a different protocol configuration.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="7838"/>
          <seriesInfo name="DOI" value="10.17487/RFC7838"/>
        </reference>
        <reference anchor="RFC6797">
          <front>
            <title>HTTP Strict Transport Security (HSTS)</title>
            <author fullname="J. Hodges" initials="J." surname="Hodges"/>
            <author fullname="C. Jackson" initials="C." surname="Jackson"/>
            <author fullname="A. Barth" initials="A." surname="Barth"/>
            <date month="November" year="2012"/>
            <abstract>
              <t>This specification defines a mechanism enabling web sites to declare themselves accessible only via secure connections and/or for users to be able to direct their user agent(s) to interact with given sites only over secure connections. This overall policy is referred to as HTTP Strict Transport Security (HSTS). The policy is declared by web sites via the Strict-Transport-Security HTTP response header field and/or by other means, such as user agent configuration, for example. [STANDARDS-TRACK]</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="6797"/>
          <seriesInfo name="DOI" value="10.17487/RFC6797"/>
        </reference>
        <reference anchor="I-D.schinazi-httpbis-wrap-up">
          <front>
            <title>The HTTP Wrap Up Capsule</title>
            <author fullname="David Schinazi" initials="D." surname="Schinazi">
              <organization>Google LLC</organization>
            </author>
            <author fullname="Lucas Pardue" initials="L." surname="Pardue">
              <organization>Cloudflare</organization>
            </author>
            <date day="16" month="October" year="2024"/>
            <abstract>
              <t>   HTTP intermediaries sometimes need to terminate long-lived request
   streams in order to facilitate load balancing or impose data limits.
   However, Web browsers commonly cannot retry failed proxied requests
   when they cannot ascertain whether an in-progress request was acted
   on.  To avoid user-visible failures, it is best for the intermediary
   to inform the client of upcoming request stream terminations in
   advance of the actual termination so that the client can wrap up
   existing operations related to that stream and start sending new work
   to a different stream or connection.  This document specifies a new
   "WRAP_UP" capsule that allows a proxy to instruct a client that it
   should not start new requests on a tunneled connection, while still
   allowing it to finish existing requests.

              </t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-schinazi-httpbis-wrap-up-01"/>
        </reference>
        <reference anchor="RFC7469">
          <front>
            <title>Public Key Pinning Extension for HTTP</title>
            <author fullname="C. Evans" initials="C." surname="Evans"/>
            <author fullname="C. Palmer" initials="C." surname="Palmer"/>
            <author fullname="R. Sleevi" initials="R." surname="Sleevi"/>
            <date month="April" year="2015"/>
            <abstract>
              <t>This document defines a new HTTP header that allows web host operators to instruct user agents to remember ("pin") the hosts' cryptographic identities over a period of time. During that time, user agents (UAs) will require that the host presents a certificate chain including at least one Subject Public Key Info structure whose fingerprint matches one of the pinned fingerprints for that host. By effectively reducing the number of trusted authorities who can authenticate the domain during the lifetime of the pin, pinning may reduce the incidence of man-in-the-middle attacks due to compromised Certification Authorities.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="7469"/>
          <seriesInfo name="DOI" value="10.17487/RFC7469"/>
        </reference>
        <reference anchor="RFC8942">
          <front>
            <title>HTTP Client Hints</title>
            <author fullname="I. Grigorik" initials="I." surname="Grigorik"/>
            <author fullname="Y. Weiss" initials="Y." surname="Weiss"/>
            <date month="February" year="2021"/>
            <abstract>
              <t>HTTP defines proactive content negotiation to allow servers to select the appropriate response for a given request, based upon the user agent's characteristics, as expressed in request headers. In practice, user agents are often unwilling to send those request headers, because it is not clear whether they will be used, and sending them impacts both performance and privacy.</t>
              <t>This document defines an Accept-CH response header that servers can use to advertise their use of request headers for proactive content negotiation, along with a set of guidelines for the creation of such headers, colloquially known as "Client Hints."</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="8942"/>
          <seriesInfo name="DOI" value="10.17487/RFC8942"/>
        </reference>
        <reference anchor="RFC6265">
          <front>
            <title>HTTP State Management Mechanism</title>
            <author fullname="A. Barth" initials="A." surname="Barth"/>
            <date month="April" year="2011"/>
            <abstract>
              <t>This document defines the HTTP Cookie and Set-Cookie header fields. These header fields can be used by HTTP servers to store state (called cookies) at HTTP user agents, letting the servers maintain a stateful session over the mostly stateless HTTP protocol. Although cookies have many historical infelicities that degrade their security and privacy, the Cookie and Set-Cookie header fields are widely used on the Internet. This document obsoletes RFC 2965. [STANDARDS-TRACK]</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="6265"/>
          <seriesInfo name="DOI" value="10.17487/RFC6265"/>
        </reference>
      </references>
    </references>
    <?line 275?>

<section numbered="false" anchor="acknowledgments">
      <name>Acknowledgments</name>
      <t>Thanks to Amos Jeffries, Tommy Pauly, Kyle Nekritz, David Schinazi, and Kazuho Oku for close review and suggested changes.</t>
    </section>
  </back>
  <!-- ##markdown-source:
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
Jk8aVosFa6t9NbEf/C8UUqJZhUUAAA==

-->

</rfc>
