<?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.27 (Ruby 3.3.6) -->
<rfc xmlns:xi="http://www.w3.org/2001/XInclude" ipr="trust200902" docName="draft-ietf-masque-connect-udp-listen-06" category="std" consensus="true" submissionType="IETF" tocInclude="true" sortRefs="true" symRefs="true" version="3">
  <!-- xml2rfc v2v3 conversion 3.28.1 -->
  <front>
    <title abbrev="CONNECT-UDP Bind">Proxying Bound UDP in HTTP</title>
    <seriesInfo name="Internet-Draft" value="draft-ietf-masque-connect-udp-listen-06"/>
    <author initials="D." surname="Schinazi" fullname="David Schinazi">
      <organization>Google LLC</organization>
      <address>
        <postal>
          <street>1600 Amphitheatre Parkway</street>
          <city>Mountain View</city>
          <region>CA</region>
          <code>94043</code>
          <country>United States of America</country>
        </postal>
        <email>dschinazi.ietf@gmail.com</email>
      </address>
    </author>
    <author initials="A." surname="Singh" fullname="Abhi Singh">
      <organization>Google LLC</organization>
      <address>
        <postal>
          <street>1600 Amphitheatre Parkway</street>
          <city>Mountain View</city>
          <region>CA</region>
          <code>94043</code>
          <country>United States of America</country>
        </postal>
        <email>abhisinghietf@gmail.com</email>
      </address>
    </author>
    <date year="2025" month="April" day="04"/>
    <area>Transport</area>
    <workgroup>MASQUE</workgroup>
    <keyword>quic</keyword>
    <keyword>http</keyword>
    <keyword>datagram</keyword>
    <keyword>udp</keyword>
    <keyword>proxy</keyword>
    <keyword>tunnels</keyword>
    <keyword>quic in quic</keyword>
    <keyword>turtles all the way down</keyword>
    <keyword>masque</keyword>
    <keyword>http-ng</keyword>
    <keyword>listen</keyword>
    <keyword>bind</keyword>
    <abstract>
      <?line 63?>

<t>The mechanism to proxy UDP in HTTP only allows each UDP Proxying request to
transmit to a specific host and port. This is well suited for UDP client-server
protocols such as HTTP/3, but is not sufficient for some UDP peer-to-peer
protocols like WebRTC. This document proposes an extension to UDP Proxying in
HTTP that enables such use-cases.</t>
    </abstract>
    <note removeInRFC="true">
      <name>About This Document</name>
      <t>
        The latest revision of this draft can be found at <eref target="https://ietf-wg-masque.github.io/draft-ietf-masque-connect-udp-listen/draft-ietf-masque-connect-udp-listen.html"/>.
        Status information for this document may be found at <eref target="https://datatracker.ietf.org/doc/draft-ietf-masque-connect-udp-listen/"/>.
      </t>
      <t>
        Discussion of this document takes place on the
        MASQUE Working Group mailing list (<eref target="mailto:masque@ietf.org"/>),
        which is archived at <eref target="https://mailarchive.ietf.org/arch/browse/masque/"/>.
        Subscribe at <eref target="https://www.ietf.org/mailman/listinfo/masque/"/>.
      </t>
      <t>Source for this draft and an issue tracker can be found at
        <eref target="https://github.com/ietf-wg-masque/draft-ietf-masque-connect-udp-listen"/>.</t>
    </note>
  </front>
  <middle>
    <?line 71?>

<section anchor="intro">
      <name>Introduction</name>
      <t>The mechanism to proxy UDP in HTTP <xref target="CONNECT-UDP"/> allows creating
tunnels for communicating UDP payloads <xref target="UDP"/> to a fixed host and
port. Combined with the HTTP CONNECT method (see <xref section="9.3.6" sectionFormat="of" target="HTTP"/>), it allows proxying the majority of a Web Browser's HTTP
traffic. However WebRTC <xref target="WebRTC"/> relies on ICE <xref target="ICE"/> to provide
connectivity between two Web browsers, and ICE relies on the ability to send
and receive UDP packets to multiple hosts. While in theory it might be possible
to accomplish this using multiple UDP Proxying HTTP requests, HTTP semantics
<xref target="HTTP"/> do not guarantee that distinct requests will be handled by the same
server. This can lead to the UDP packets being sent from distinct IP addresses,
thereby preventing ICE from operating correctly. Consequently, UDP Proxying
requests cannot enable WebRTC connectivity between peers.</t>
      <t>This document describes an extension to UDP Proxying in HTTP that allows
sending and receiving UDP payloads to multiple hosts within the scope of a
single UDP Proxying HTTP request.</t>
      <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?>

<t>This document uses terminology from <xref target="CONNECT-UDP"/> and notational conventions
from <xref target="QUIC"/>. This document uses the terms Boolean, Integer, and List
from <xref section="3" sectionFormat="of" target="STRUCTURED-FIELDS"/> to specify syntax and parsing.
This document uses Augmented Backus-Naur Form and parsing/serialization
behaviors from <xref target="ABNF"/>.</t>
      </section>
    </section>
    <section anchor="mechanism">
      <name>Proxied UDP Binding Mechanism</name>
      <t>In unextended UDP Proxying requests, the target host is encoded in the HTTP
request path or query. For Bound UDP Proxying, the target is either conveyed in
each HTTP Datagram (see <xref target="uncomp-format"/>), or registered via capsules and then
compressed (see <xref target="comp-format"/>).</t>
      <t>When performing URI Template Expansion of the UDP Proxying template (see
<xref section="3" sectionFormat="of" target="CONNECT-UDP"/>), the client sets both the target_host and the
target_port variables to the '*' character (ASCII character 0x2A).</t>
      <t>When sending the UDP Proxying request to the proxy, the client adds the
"Connect-UDP-Bind" header field to identify it as such. If the proxy accepts
the CONNECT UDP Bind request, it adds the allocated public IP:port tuples for
the client to the response; see <xref target="addr-hdr"/>.</t>
      <t>Endpoints exchange COMPRESSION_ASSIGN capsules in order to establish which IP
and port a given context ID corresponds to. The context ID can correspond to
both compressed and uncompressed payloads to/from any target and are configured
as defined in <xref target="compression"/>.</t>
    </section>
    <section anchor="contextid">
      <name>Context ID</name>
      <t>This extension leverages context IDs (see <xref section="4" sectionFormat="of" target="CONNECT-UDP"/>) to
compress the target IP address and port when encoding datagrams on the wire.
Endpoints start by registering a context ID and the IP/ports it's associated
with by sending a COMPRESSION_ASSIGN capsule to their peer. The peer will then
echo that capsule to indicate it's received it and estabished its own mapping.
From then on, both endpoints are aware of the context ID and can send
compressed datagrams. Later, any endpoint can decide to close the compression
context by sending a COMPRESSION_CLOSE capsule. Endpoints <bcp14>MUST NOT</bcp14> send two
COMPRESSION_ASSIGN capsules with the same context ID. If a recipient detects a
repeated context ID, it <bcp14>MUST</bcp14> treat the capsule as malformed. Receipt of a
malformed capsule <bcp14>MUST</bcp14> be treated as an error processing the Capsule Protocol,
as defined in <xref section="3.3" sectionFormat="of" target="HTTP-DGRAM"/>.</t>
      <t>The context ID 0 was reserved by unextended connect-udp and is not used by this
extension. Once an endpoint has ascertained that the peer supports this
extension (see <xref target="hdr"/>), the endpoint <bcp14>MUST NOT</bcp14> send any datagrams with context
ID set to 0, and <bcp14>MUST</bcp14> silently drop any received datagrams with context ID set
to 0.</t>
      <t>As mandated in <xref section="4" sectionFormat="of" target="CONNECT-UDP"/>, clients will allocate even context
IDs while proxies will allocate odd ones. They <bcp14>MAY</bcp14> pre-emptively use Context
IDs not yet acknowledged by the other party, knowing that those packets can be
lost since the COMPRESSION_ASSIGN request receiving proxy or client is not
guaranteed to be ready to accept payloads until a COMPRESSION_ASSIGN response
is echoed back.</t>
    </section>
    <section anchor="uncompressed">
      <name>Uncompressed Operation</name>
      <t>If the client wishes to send or receive uncompressed datagrams, it <bcp14>MUST</bcp14> first
exchange the COMPRESSION_ASSIGN capsule (see <xref target="capsuleassignformat"/>) with the
proxy with an unused Context ID defined in <xref target="contextid"/> with the IP Version
set to zero. Clients <bcp14>MUST NOT</bcp14> open an uncompressed context ID if they already
have one currently open. If a server receives a request to open an uncompressed
context ID and it already has one open, then the server <bcp14>MUST</bcp14> treat the second
capsule as malformed. Note that it's possible for the client to close the
uncompressed context and reopen it later with a different context ID, as long
as there aren't two contexts open at the same time. Only the client can request
uncompressed contexts. If a client receives a COMPRESSION_ASSIGN capsule with
the IP Version set to 0, it <bcp14>MUST</bcp14> treat it as malformed.</t>
      <t>When HTTP Datagrams <xref target="HTTP-DGRAM"/> are associated with a Bound UDP Proxying
request, the format of their UDP Proxying Payload field (see <xref section="5" sectionFormat="of" target="CONNECT-UDP"/>) is defined by <xref target="dgram-format"/> when uncompressed; every datagram
carries addressing information.</t>
      <section anchor="uncomp-format">
        <name>Uncompressed Payload Format</name>
        <figure anchor="dgram-format">
          <name>Uncompressed Bound UDP Proxying HTTP Datagram Format</name>
          <artwork><![CDATA[
Uncompressed Bound UDP Proxying Payload {
  IP Version (8),
  IP Address (32..128),
  UDP Port (16),
  UDP Payload (..),
}
]]></artwork>
        </figure>
        <t>It contains the following fields:</t>
        <dl>
          <dt>IP Version:</dt>
          <dd>
            <t>The IP Version of the following IP Address field. <bcp14>MUST</bcp14> be 4 or 6.</t>
          </dd>
          <dt>IP Address:</dt>
          <dd>
            <t>The IP Address of this proxied UDP packet. When sent from client to proxy,
this is the target host to which the proxy will send this UDP payload. When
sent from proxy to client, this represents the source IP address of the UDP
packet received by the proxy. This field has a length of 32 bits when the
corresponding IP Version field value is 4, and 128 when the IP Version is 6.</t>
          </dd>
          <dt>UDP Port:</dt>
          <dd>
            <t>The UDP Port of this proxied UDP packet in network byte order. When sent from
client to proxy, this is the target port to which the proxy will send this UDP
payload. When sent from proxy to client, this represents the source UDP port of
the UDP packet received by the proxy.</t>
          </dd>
          <dt>UDP Payload:</dt>
          <dd>
            <t>The unmodified UDP Payload of this proxied UDP packet (referred to as "data
octets" in <xref target="UDP"/>).</t>
          </dd>
        </dl>
      </section>
      <section anchor="restrictingips">
        <name>Restricting IPs</name>
        <t>If an uncompressed Context ID was set (via <xref target="uncompressed"/>), the client <bcp14>MAY</bcp14> at
any point request the proxy reject all traffic from uncompressed targets by
using COMPRESSION_CLOSE (see <xref target="compressionclose"/>) on said Context ID. Then the
proxy effectively acts as a firewall against unwanted or unknown IPs.</t>
      </section>
    </section>
    <section anchor="compression">
      <name>Compressed Operation</name>
      <t>Endpoints <bcp14>MAY</bcp14> choose to compress the IP and port information per datagram for a
given target using Context IDs. In that case, the endpoint sends a
COMPRESSION_ASSIGN capsule (see <xref target="capsuleassignformat"/>) with the target
information it wishes to compress and its peer responds with either a
COMPRESSION_ASSIGN capsule if it accepts the compression request, or a
COMPRESSION_CLOSE with the context ID (see <xref target="capsulecloseformat"/>) if it
doesn't wish to support compression for the given Context ID (For example, due
to the memory cost of establishing a list of mappings per target per client).
If the compression was rejected, the client and proxy will instead use an
uncompressed context ID (See <xref target="uncompressed"/>) to exchange UDP payloads for the
given target, if those have been enabled. Only one Context ID can be used per
IP-port tuple. If an endpoint detects that both itself and its peer have opened
a context ID for the same tuple, the endpoint <bcp14>MUST</bcp14> close the context ID that
was opened by the server. If an endpoint receives a COMPRESSION_ASSIGN capsule
whose tuple matches another open context ID, it <bcp14>MUST</bcp14> treat the capsule as
malformed.</t>
      <section anchor="mappings">
        <name>Compression Mapping</name>
        <t>When an endpoint receives a COMPRESSION_ASSIGN capsule with a non-zero IP
length, it <bcp14>MUST</bcp14> decide whether to accept or reject the compression mapping:</t>
        <ul spacing="normal">
          <li>
            <t>if it accepts the mapping, first the receiver <bcp14>MUST</bcp14> save the mapping from
context ID to address and port. Second, the receiver <bcp14>MUST</bcp14> echo an identical
COMPRESSION_ASSIGN capsule back to its peer.</t>
          </li>
          <li>
            <t>if it rejects the mapping, the receiver <bcp14>MUST</bcp14> respond by sending a
COMPRESSION_CLOSE capsule with the context ID set to the one from the
received COMPRESSION_ASSIGN capsule.</t>
          </li>
        </ul>
        <t>The endpoint <bcp14>MAY</bcp14> choose to close any context that it registered or was
registered with it respectively using COMPRESSION_CLOSE (For example when a
mapping is unused for a long time). Another potential use is <xref target="restrictingips"/>.</t>
      </section>
      <section anchor="comp-format">
        <name>Compressed Payload Format</name>
        <t>When HTTP Datagrams <xref target="HTTP-DGRAM"/> are associated with this Bound UDP Proxying
request, the format of their UDP Proxying Payload field (see <xref section="5" sectionFormat="of" target="CONNECT-UDP"/>) is defined by <xref target="dgram-format"/> when the context ID is set to one
previously registered for compressed payloads. (See <xref target="contextid"/> for
compressed and uncompressed assignments.)</t>
        <figure anchor="dgram-format-compressed">
          <name>Compressed Bound UDP Proxying HTTP Datagram Format</name>
          <artwork><![CDATA[
Compressed Bound UDP Proxying Payload {
  UDP Payload (..),
}
]]></artwork>
        </figure>
        <t>It contains the following fields:</t>
        <dl>
          <dt>UDP Payload:</dt>
          <dd>
            <t>The unmodified UDP Payload of this proxied UDP packet (referred to as "data
octets" in <xref target="UDP"/>).</t>
          </dd>
        </dl>
      </section>
    </section>
    <section anchor="capsules">
      <name>Capsules</name>
      <t>This document defines new capsule types that deal with registering context IDs.</t>
      <section anchor="compressionassign">
        <name>The COMPRESSION_ASSIGN capsule</name>
        <t>The Compression Assign capsule has two purposes. Either to request the
assignment of a Context ID (see <xref target="contextid"/>) to a corresponding target
IP:Port. Or to accept a COMPRESSION_ASSIGN request from the other party.</t>
        <figure anchor="capsuleassignformat">
          <name>Compression Assign Capsule Format</name>
          <artwork><![CDATA[
Capsule {
  Type COMPRESSION_ASSIGN,
  Length (i),
  Context ID (i),
  IP Version (8),
  [IP Address (32..128)],
  [UDP Port (16)],
}
]]></artwork>
        </figure>
        <t>The IP Length, Address and Port fields in <xref target="capsuleassignformat"/> are the same
as those defined in <xref target="uncomp-format"/>.</t>
        <t>When the IP Version is set to 0, the IP Address and UDP Port fields are
omitted. This allows registering an uncompressed Context ID, as described in
<xref target="contextid"/>.</t>
      </section>
      <section anchor="compressionclose">
        <name>The COMPRESSION_CLOSE capsule</name>
        <t>The Compression Close capsule serves two purposes. As a response to reject a
COMPRESSION_ASSIGN request and to close or to clean up any existing compression
mappings. Once an endpoint has either sent or received a COMPRESSION_CLOSE for
a given context ID, it <bcp14>MUST NOT</bcp14> send any further datagrams with that Context ID.</t>
        <figure anchor="capsulecloseformat">
          <name>Compression Close Capsule Format</name>
          <artwork><![CDATA[
Capsule {
  Type COMPRESSION_CLOSE,
  Length (i),
  Context ID (i),
}
]]></artwork>
        </figure>
      </section>
      <section anchor="symmetry">
        <name>Symmetry</name>
        <t>As mandated in <xref section="4" sectionFormat="of" target="CONNECT-UDP"/>, clients can only allocate even
context IDs, while proxies can only allocate odd ones. This makes the
registration capsules above unambiguous. For example, if a client receives a
COMPRESSION_ASSIGN capsule with an even context ID, it knows that this has to
be an echo of a capsule it already sent.</t>
      </section>
    </section>
    <section anchor="hdr">
      <name>The Connect-UDP-Bind Header Field</name>
      <t>The "Connect-UDP-Bind" header field’s value is a Boolean Structured Field set
to true. Clients and proxy both indicate support for this extension by sending
the Connect-UDP-Bind header field with a value of ?1. Once an endpoint has both
sent and received the Connect-UDP-Bind header field set to true, this extension
is enabled. Any other value type <bcp14>MUST</bcp14> be handled as if the field were not
present by the recipients (for example, if this field is defined multiple
times, its type becomes a List and therefore is to be ignored). This document
does not define any parameters for the Connect-UDP-Bind header field value, but
future documents might define parameters. Receivers <bcp14>MUST</bcp14> ignore unknown
parameters.</t>
    </section>
    <section anchor="addr-hdr">
      <name>The Proxy-Public-Address Response Header Field</name>
      <t>Upon accepting the request, the proxy <bcp14>MUST</bcp14> select at least one public IP
address to bind. The proxy <bcp14>MAY</bcp14> assign more addresses. For each selected
address, it <bcp14>MUST</bcp14> select an open port to bind to this request. From then and
until the tunnel is closed, the proxy <bcp14>SHALL</bcp14> send packets received on these
IP-port tuples to the client. The proxy <bcp14>MUST</bcp14> communicate the selected addresses
and ports to the client using the "Proxy-Public-Address" header field. The
header field is defined as a List of IP-Port-tuples. The format of the tuple is
defined using IP-literal, IPv4address, IPv6address and port from <xref section="3.2" sectionFormat="of" target="URI"/>.</t>
      <figure anchor="target-format">
        <name>Proxy Address Format</name>
        <artwork><![CDATA[
ip-port-tuple = ( IP-literal / IPv4address ) ":" port
]]></artwork>
      </figure>
      <t>When a single IP-Port tuple is provided in the Proxy-Public-Address field, the
proxy <bcp14>MUST</bcp14> use the same public IP and Port for the remainder of the connection.
When multiple tuples are provided, maintaining address stability per address
family is <bcp14>RECOMMENDED</bcp14>.</t>
      <t>Note that since the addresses are conveyed in HTTP response headers, a
subsequent change of addresses on the proxy cannot be conveyed to the client.</t>
    </section>
    <section anchor="behavior">
      <name>Proxy behavior</name>
      <t>After accepting the Connect-UDP Binding proxying request, the proxy uses an
assigned IP:port to transmit UDP payloads received from the client to the
target IP Address and UDP Port specified in each binding Datagram Payload
received from the client. The proxy uses the same ports to listen for UDP
packets from any authorized target and encapsulates the packets in the Binding
Datagram Payload format, and forwards it to the client if a corresponding
Context ID mapping exists for the target.</t>
      <t>If the proxy receives UDP payloads that don't correspond to any mapping i.e. no
compression for the given target was ever established and a mapping for
uncompressed or any target is missing, the proxy will either drop the datagram
or temporarily buffer it (see <xref section="5" sectionFormat="of" target="CONNECT-UDP"/>).</t>
    </section>
    <section anchor="security-considerations">
      <name>Security Considerations</name>
      <t>The security considerations described in <xref section="7" sectionFormat="of" target="CONNECT-UDP"/> also
apply here. Since TURN can be run over this mechanism, implementors should
review the security considerations in <xref section="21" sectionFormat="of" target="TURN"/>.</t>
      <t>Since unextended UDP Proxying requests carry the target as part of the request,
the proxy can protect unauthorized targets by rejecting requests before
creating the tunnel, and communicate the rejection reason in response header
fields. The uncompressed context allows transporting datagrams to and from any
target. Clients that keep the uncompressed context open need to be able to
receive from all targets. If the UDP proxy would reject unextended UDP proxying
requests to some targets (as recommended in <xref section="7" sectionFormat="of" target="CONNECT-UDP"/>), then
for bound UDP proxying requests where the uncompressed context is open, the UDP
proxy needs to perform checks on the target of each uncompressed context
datagram it receives.</t>
      <t>Note that if the compression response (COMPRESSION_ASSIGN OR COMPRESSION_CLOSE)
cannot be immediately sent due to flow or congestion control, an upper limit on
how many compression responses the endpoint is willing to buffer <bcp14>MUST</bcp14> be set to
prevent memory exhaustion. The proxy <bcp14>MAY</bcp14> close the connection if such
conditions occur.</t>
    </section>
    <section anchor="iana-considerations">
      <name>IANA Considerations</name>
      <section anchor="iana-fields">
        <name>HTTP Fields</name>
        <t>This document will request IANA to register the following new items in the
"HTTP Field Name" registry maintained at
&lt;<eref target="https://www.iana.org/assignments/http-fields"/>&gt;:</t>
        <table anchor="iana-fields-table">
          <name>New Fields</name>
          <thead>
            <tr>
              <th align="left">Field Name</th>
              <th align="left">Structured Type</th>
            </tr>
          </thead>
          <tbody>
            <tr>
              <td align="left">Connect-UDP-Bind</td>
              <td align="left">Item</td>
            </tr>
            <tr>
              <td align="left">Proxy-Public-Address</td>
              <td align="left">List</td>
            </tr>
          </tbody>
        </table>
        <t>All of these new entries use the following values for these fields:</t>
        <dl spacing="compact">
          <dt>Status:</dt>
          <dd>
            <t>provisional (permanent if this document is approved)</t>
          </dd>
          <dt>Reference:</dt>
          <dd>
            <t>This document</t>
          </dd>
          <dt>Comments:</dt>
          <dd>
            <t>None</t>
          </dd>
        </dl>
      </section>
      <section anchor="iana-capsules">
        <name>Capsules</name>
        <t>This document will request IANA to register the following new items to the
"HTTP Capsule Types" registry maintained at
&lt;<eref target="https://www.iana.org/assignments/masque"/>&gt;:</t>
        <table anchor="iana-capsules-table">
          <name>New Capsules</name>
          <thead>
            <tr>
              <th align="left">Value</th>
              <th align="left">Capsule Type</th>
            </tr>
          </thead>
          <tbody>
            <tr>
              <td align="left">0x1C0FE323</td>
              <td align="left">COMPRESSION_ASSIGN</td>
            </tr>
            <tr>
              <td align="left">0x1C0FE324</td>
              <td align="left">COMPRESSION_CLOSE</td>
            </tr>
          </tbody>
        </table>
        <t>All of these new entries use the following values for these fields:</t>
        <dl spacing="compact">
          <dt>Status:</dt>
          <dd>
            <t>provisional (permanent if this document is approved)</t>
          </dd>
          <dt>Reference:</dt>
          <dd>
            <t>This document</t>
          </dd>
          <dt>Change Controller:</dt>
          <dd>
            <t>IETF</t>
          </dd>
          <dt>Contact:</dt>
          <dd>
            <t>MASQUE Working Group <eref target="mailto:masque@ietf.org">masque@ietf.org</eref></t>
          </dd>
          <dt>Notes:</dt>
          <dd>
            <t>None</t>
          </dd>
        </dl>
      </section>
    </section>
  </middle>
  <back>
    <references anchor="sec-combined-references">
      <name>References</name>
      <references anchor="sec-normative-references">
        <name>Normative References</name>
        <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="UDP">
          <front>
            <title>User Datagram Protocol</title>
            <author fullname="J. Postel" initials="J." surname="Postel"/>
            <date month="August" year="1980"/>
          </front>
          <seriesInfo name="STD" value="6"/>
          <seriesInfo name="RFC" value="768"/>
          <seriesInfo name="DOI" value="10.17487/RFC0768"/>
        </reference>
        <reference anchor="HTTP">
          <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="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="QUIC">
          <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="STRUCTURED-FIELDS">
          <front>
            <title>Structured Field Values for HTTP</title>
            <author fullname="M. Nottingham" initials="M." surname="Nottingham"/>
            <author fullname="P-H. Kamp" surname="P-H. Kamp"/>
            <date month="February" year="2021"/>
            <abstract>
              <t>This document describes a set of data types and associated algorithms that are intended to make it easier and safer to define and handle HTTP header and trailer fields, known as "Structured Fields", "Structured Headers", or "Structured Trailers". It is intended for use by specifications of new HTTP fields that wish to use a common syntax that is more restrictive than traditional HTTP field values.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="8941"/>
          <seriesInfo name="DOI" value="10.17487/RFC8941"/>
        </reference>
        <reference anchor="ABNF">
          <front>
            <title>Augmented BNF for Syntax Specifications: ABNF</title>
            <author fullname="D. Crocker" initials="D." role="editor" surname="Crocker"/>
            <author fullname="P. Overell" initials="P." surname="Overell"/>
            <date month="January" year="2008"/>
            <abstract>
              <t>Internet technical specifications often need to define a formal syntax. Over the years, a modified version of Backus-Naur Form (BNF), called Augmented BNF (ABNF), has been popular among many Internet specifications. The current specification documents ABNF. It balances compactness and simplicity with reasonable representational power. The differences between standard BNF and ABNF involve naming rules, repetition, alternatives, order-independence, and value ranges. This specification also supplies additional rule definitions and encoding for a core lexical analyzer of the type common to several Internet specifications. [STANDARDS-TRACK]</t>
            </abstract>
          </front>
          <seriesInfo name="STD" value="68"/>
          <seriesInfo name="RFC" value="5234"/>
          <seriesInfo name="DOI" value="10.17487/RFC5234"/>
        </reference>
        <reference anchor="HTTP-DGRAM">
          <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="URI">
          <front>
            <title>Uniform Resource Identifier (URI): Generic Syntax</title>
            <author fullname="T. Berners-Lee" initials="T." surname="Berners-Lee"/>
            <author fullname="R. Fielding" initials="R." surname="Fielding"/>
            <author fullname="L. Masinter" initials="L." surname="Masinter"/>
            <date month="January" year="2005"/>
            <abstract>
              <t>A Uniform Resource Identifier (URI) is a compact sequence of characters that identifies an abstract or physical resource. This specification defines the generic URI syntax and a process for resolving URI references that might be in relative form, along with guidelines and security considerations for the use of URIs on the Internet. The URI syntax defines a grammar that is a superset of all valid URIs, allowing an implementation to parse the common components of a URI reference without knowing the scheme-specific requirements of every possible identifier. This specification does not define a generative grammar for URIs; that task is performed by the individual specifications of each URI scheme. [STANDARDS-TRACK]</t>
            </abstract>
          </front>
          <seriesInfo name="STD" value="66"/>
          <seriesInfo name="RFC" value="3986"/>
          <seriesInfo name="DOI" value="10.17487/RFC3986"/>
        </reference>
      </references>
      <references anchor="sec-informative-references">
        <name>Informative References</name>
        <reference anchor="WebRTC" target="https://www.w3.org/TR/webrtc/">
          <front>
            <title>WebRTC</title>
            <author>
              <organization/>
            </author>
            <date year="2021" month="January" day="26"/>
          </front>
          <seriesInfo name="W3C" value="Recommendation"/>
        </reference>
        <reference anchor="ICE">
          <front>
            <title>Interactive Connectivity Establishment (ICE): A Protocol for Network Address Translator (NAT) Traversal</title>
            <author fullname="A. Keranen" initials="A." surname="Keranen"/>
            <author fullname="C. Holmberg" initials="C." surname="Holmberg"/>
            <author fullname="J. Rosenberg" initials="J." surname="Rosenberg"/>
            <date month="July" year="2018"/>
            <abstract>
              <t>This document describes a protocol for Network Address Translator (NAT) traversal for UDP-based communication. This protocol is called Interactive Connectivity Establishment (ICE). ICE makes use of the Session Traversal Utilities for NAT (STUN) protocol and its extension, Traversal Using Relay NAT (TURN).</t>
              <t>This document obsoletes RFC 5245.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="8445"/>
          <seriesInfo name="DOI" value="10.17487/RFC8445"/>
        </reference>
        <reference anchor="TURN">
          <front>
            <title>Traversal Using Relays around NAT (TURN): Relay Extensions to Session Traversal Utilities for NAT (STUN)</title>
            <author fullname="T. Reddy" initials="T." role="editor" surname="Reddy"/>
            <author fullname="A. Johnston" initials="A." role="editor" surname="Johnston"/>
            <author fullname="P. Matthews" initials="P." surname="Matthews"/>
            <author fullname="J. Rosenberg" initials="J." surname="Rosenberg"/>
            <date month="February" year="2020"/>
            <abstract>
              <t>If a host is located behind a NAT, it can be impossible for that host to communicate directly with other hosts (peers) in certain situations. In these situations, it is necessary for the host to use the services of an intermediate node that acts as a communication relay. This specification defines a protocol, called "Traversal Using Relays around NAT" (TURN), that allows the host to control the operation of the relay and to exchange packets with its peers using the relay. TURN differs from other relay control protocols in that it allows a client to communicate with multiple peers using a single relay address.</t>
              <t>The TURN protocol was designed to be used as part of the Interactive Connectivity Establishment (ICE) approach to NAT traversal, though it can also be used without ICE.</t>
              <t>This document obsoletes RFCs 5766 and 6156.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="8656"/>
          <seriesInfo name="DOI" value="10.17487/RFC8656"/>
        </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>
      </references>
    </references>
    <?line 480?>

<section anchor="example">
      <name>Example</name>
      <t>In the example below, the client is configured with URI Template
"https://example.org/.well-known/masque/udp/{target_host}/{target_port}/" and
listens for traffic on the proxy, eventually decides that it no longer wants to
listen for connections from new targets, and limits its communication with only
203.0.113.11:4321 and no other UDP target.</t>
      <artwork><![CDATA[
 Client                                             Server

 STREAM(44): HEADERS            -------->
   :method = CONNECT
   :protocol = connect-udp
   :scheme = https
   :path = /.well-known/masque/udp/*/*/
   :authority = proxy.example.org
   connect-udp-bind = ?1
   capsule-protocol = ?1

            <--------  STREAM(44): HEADERS
                         :status = 200
                         connect-udp-bind = ?1
                         capsule-protocol = ?1
                         proxy-public-address = 192.0.2.45:54321,  \
                                            [2001:db8::1234]:54321

/* Request Context ID 2 to be used for uncompressed UDP payloads
 from/to any target */

 CAPSULE                       -------->
   Type = COMPRESSION_ASSIGN
   Context ID = 2
   IP Version = 0


/* Proxy confirms registration. */

            <-------- CAPSULE
                        Type = COMPRESSION_ASSIGN
                        Context ID = 2
                        IP Version = 0

/* Target talks to Client using the uncompressed context */

            <--------  DATAGRAM
                         Quarter Stream ID = 11
                         Context ID = 2
                         IP Version = 4
                         IP Address = 192.0.2.42
                         UDP Port = 1234
                         UDP Payload = Encapsulated UDP Payload

/ * Client responds on the same uncompressed context */

 DATAGRAM                       -------->
   Quarter Stream ID = 11
   Context ID = 2
   IP Version = 4
   IP Address = 192.0.2.42
   UDP Port = 1234
   UDP Payload = Encapsulated UDP Payload

/* Another target talks to Client using the uncompressed context */
            <--------  DATAGRAM
                         Quarter Stream ID = 11
                         Context ID = 2
                         IP Version = 4
                         IP Address = 203.0.113.11
                         UDP Port = 4321
                         UDP Payload = Encapsulated UDP Payload

/ * Client responds on the same uncompressed context */

 DATAGRAM                       -------->
   Quarter Stream ID = 11
   Context ID = 2
   IP Version = 4
   IP Address = 203.0.113.11
   UDP Port = 4321
   UDP Payload = Encapsulated UDP Payload

/* Register 203.0.113.11:4321 to compress it in the future */
 CAPSULE                       -------->
   Type = COMPRESSION_ASSIGN
   Context ID = 4
   IP Version = 4
   IP Address = 203.0.113.11
   UDP Port = 4321


/* Proxy confirms registration.*/
            <-------- CAPSULE
                        Type = COMPRESSION_ASSIGN
                        Context ID = 4
                        IP Version = 4
                        IP Address = 203.0.113.11
                        UDP Port = 4321

/* Omit IP and Port for future packets intended for*/
/* 203.0.113.11:4321 hereon */
 DATAGRAM                       -------->
   Context ID = 4
   UDP Payload = Encapsulated UDP Payload

            <--------  DATAGRAM
                        Context ID = 4
                        UDP Payload = Encapsulated UDP Payload

/* Request packets without a corresponding compressed Context */
/* to be dropped by closing the uncompressed Context */
 CAPSULE                       -------->
   Type = COMPRESSION_CLOSE
   Context ID = 2


/* Proxy confirms unmapped IP rejection. */
            <-------- CAPSULE
                        Type = COMPRESSION_CLOSE
                        Context ID = 2

/* Context ID 4 = 203.0.113.11:4321 traffic is accepted, */
/* And the rest is dropped at the proxy */


]]></artwork>
    </section>
    <section anchor="comparison-with-connect-ip">
      <name>Comparison with CONNECT-IP</name>
      <t>While the use-cases described in <xref target="intro"/> could be supported using IP Proxying
in HTTP <xref target="CONNECT-IP"/>, it would require that every HTTP Datagram
carries a complete IP header. This would lead to both inefficiencies in the
wire encoding and reduction in available Maximum Transmission Unit (MTU).
Furthermore, Web browsers would need to support IPv4 and IPv6 header
generation, parsing, validation and error handling.</t>
    </section>
    <section numbered="false" anchor="acknowledgments">
      <name>Acknowledgments</name>
      <t>This proposal is the result of many conversations with MASQUE working group
participants. In particular, the authors would like to thank <contact fullname="Marius Kleidl"/>, <contact fullname="Tommy Pauly"/>, <contact fullname="Lucas Pardue"/>, <contact fullname="Ben Schwartz"/>, and
<contact fullname="Magnus Westerlund"/> for their reviews.</t>
    </section>
  </back>
  <!-- ##markdown-source:
H4sIAAAAAAAAA91c63Ibx5X+30/Rpn6YUhHg1bKEWHYgirJZoSiGpOJKeV2p
AaYJTjSYgedCCKaZ2tfYf/ss+yj7JHu+c7p7egYARSmb2mSZi4DBTPfpc/3O
6dPT6/VUlVSpGeiNsyL/sEiyiX6Z11ms370600mmf7i8PNtQ0WhUmBu66fDt
6enR4WUPv75MsnhDjaPKTPJiMdBlFas4H2fRlIaLi+iq6iWmuupNo/KX2vTG
eZaZcdWr41kvTcrKZL2dp6qsR9OkLJM8qxYzeu746PK1yurpyBQDFdPYA0UP
liYr63Kgq6I2iujYV1FhooG+LKKsnOVFpeaTgX4zvPjjuyN1Y7KaHtN6UuT1
jIiW6xt0RebY+DEv3mOl3+MGXJ9GSUrXhdLfg+p+XkzwS1SMr+mX66qalYPt
bdyIS8mN6bvbtnFhe1Tk89JsyxDbeHSSVNf1iB5mLswnlhHbD2ENnk9p9WUV
TN4epy/j95P8QSM+6Kb+dTVNN9R7s5jnRQwe9vQvdTLmDyCDP5BYokkRTfkL
Pcz/zqA+/Kmqadi09A9DjfwgVV2QupU6SlNdXRs9jxY6zucZ/yh0+cl62YQ/
C238cUQ6p6K6us4Lpo7+p2l8Uo1XfX1BcsmiXxO+KGr4KrpJ4vYPJLGB/j7P
J6nRJyeHfK2sCmOI1btPd3b0cDq7JtaaiC7qs6h4TzTyXeOkIjV/Q+ZRRbSm
PyVmztcLMyH9HejDodyWxzTz84Odg337nR6AgbzLksoQNRUEq/MrmskUyTji
u4zoYFxaWlm9fj/B1f44n7YXO6TFkgJfBysdjq6T4OI/9yojIrYErZ1FZnkx
jSoyroFKsqvmi9Y/mtH55eGAB3EeS65t8DV2FXpvZ2+3t7Pb23sqC6aJTYmR
5EEaZv9woM8NzTU1GT1DK5Iho2JiQlubz+f9+T6b9+X59tyMimpMVq16vR5R
T5yMxpVSl6TBUzO+jrKknOoqFysIfafOs3QBbSfvoE00vuYfva8tDCl8WdGj
qoIvmyb4rCNdzsw4uSLjuc7p54gcMtxcX18S4zT9d27IgMqaWU2M4lHHaWKy
qkervjGFIlKqfJynJd1G00Yl07O9v6VHdYUhsryin65oEjzGo5T51PBQM2OK
XpX38G8wUpq8N1YUlhRy+PUUj9NNs7yEZWfafCB7hU/HWlrrTTLFXKmuo0qb
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
6jd5o0EzvHz/LaxAcF3rN/XboLfqb/nybzzqUtaKUfnvmJan7Tx060o4bG/l
9MLdClwesLlXifMQbH5KfBNhAJEPieHikUnYYCktnrsiHaBuGM75s4cLpWn2
S/DyiZo+DAQol3LkcpP0mDTX4pH2gVrUcGa4mZJ9pc4N99mOzYA3W8LMHztJ
LBD8dIr9LFpcSWiJKHqxAZuIxq6mF+yg8OrXbqN8nppZ1Clq5oqKEHn592ma
vIbFK9mfuG7jlCCcx+rB4F6dsmq182H3cOf10f7ePo2zwnm17jno3CO14FCR
HCuXVckx/V9DmezRPXG3KV56ZN+BxPiYVAkX5AVGuvXaIv1N521F30ro+Khe
4uUa6COAgzyS+hkfpGXHbTfFR4a40mr0ScrgSJ6UF8PTpcq/OMUOwUrVx1tK
elyZci9GquPZ9m1wTPTOfwNoudve4PKM5DBWGraBL0wgt7hEXNUENxa2D6T0
jQJZzrv2aJuPGNvkKsiJmthhcyKohYUYAs840pVcKQzeBYIuKKwaJXO1t7Pf
3+nv7u7T/wYH+4RM5XS3rXQCaPjkBXUJi7P0p/xdyGtclL64PD8avtk8OHg8
0D8cDV8dnV+E9zkj+xYvshnYF4u8cFiIL7oXuNDl4IwV/1QSbpmiyMLyk7tx
APqFXie9J/Qfvs/iYULtL2z3aSB7xa8Eat4vxUW5F/q7Xf5BTLQX0EU/qHBV
37hl6VXrb93a+huUbK004t7Ozvrb1pK25vaVBK+9nbnRk6JPzxVlXujd53uk
NXv9g68GX0FptrT+t/WDrPj7ida0O4hHzwaD3b39g59lGKW2n+hzGzyCrHrP
AnXfzdJCoWH2rNgStm22bLErSZn0dnh28e7kaA09LdXjgPBihWvHjwFZJBlc
CbZkX+gdxYuQig/7GbzhINx26gs9wV+jIZbItay8l7KVf8vkrvzrroGWcCnM
q6L0PQfow27xdmWSsX5t+tXwcogGoPWK8seasljyOhfo15sKzbv3aOcDF9de
3cG99w2XdfyegX1BjG4nNf7IjbbO9EIfNSWqVssL8V0/cYz2DcA2XHBtbD3P
HXfXENBS8PV8/oh2H6j7ubSCHw9e+RPflVZ9ruaFC/7XVbwwJD9I9dh13n/j
/0fV6/JpBUc+QfnOXY6yjIjCHv2kcnVku9EJtfuHxJaD/wUWfDQWrTWaf3Ak
Wm8LDzSZT7eYJd4Qa96iEtTdy7KCbbYNbG2PfiN20VPLGoLCGxEMbn6KMSyz
5KEKGw75KZ7ugUL4JLtxLxsSdiG1yOtqqbdwRU+ZcFOgHfYQZtKIi+rYSk8f
PPd3mhxn4Suczip7qTNslPCmWlPf7q8PN59hOZ6cj8tsj0kMLh109N+6LJtq
In/nrUVssAq/h/YtLGj05q10y/koPHYGv875nj25FRVJ6fJGV5s+PsOuMxqx
WFLurZfdfRh5y+UdXquaxlwtlc6gYPe96fZu3nf5XTMNv4bj4NkBusRwcsrW
3n+pk8LWl+X4cavrvDmDzKqXmoobJGUTwjbByEjuHYa2f8nY94iOE+Prn3jX
TfMqHOkvcu/xxHvlbvAyZVRv3kQfkmk9ldc529dB83tk9eaby3eP++q1NPah
R2Sr9bJJS4zblnDtU2gRkNdQnt08dVsoE5PZKvCWez/ZFso+ibwHVrZB+WUo
3JbEb68hQQ79uy24OqZuB/J6ahO/2LiK0tJsuHKevAI1St2ZUdKVOrVnruRA
A/p27NYWK4Ut7MxtYYdfWI0enop4OUPxgg/byQXyJIWUZCTx9oLAO1m5FBhl
70kFbt+Q2tWl+kNqkji9g/jp4mU+nS7IBdXpwl06qUnz8OrfuDbu2kuT4W3J
c5rxV76GagyPOckoq/7RINindRbfSRu+PVEgW3llX/0Pls1xfVFcAAA=

-->

</rfc>
