<?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.39 (Ruby 3.4.9) -->
<rfc xmlns:xi="http://www.w3.org/2001/XInclude" ipr="trust200902" docName="draft-ietf-masque-connect-udp-listen-15" category="std" consensus="true" submissionType="IETF" tocInclude="true" sortRefs="true" symRefs="true" version="3">
  <!-- xml2rfc v2v3 conversion 3.34.0 -->
  <front>
    <title abbrev="CONNECT-UDP Bind">Proxying Bound UDP in HTTP</title>
    <seriesInfo name="Internet-Draft" value="draft-ietf-masque-connect-udp-listen-15"/>
    <author initials="D." surname="Schinazi" fullname="David Schinazi">
      <organization>Google LLC</organization>
      <address>
        <email>dschinazi.ietf@gmail.com</email>
      </address>
    </author>
    <author initials="A." surname="Singh" fullname="Abhi Singh">
      <organization>Google LLC</organization>
      <address>
        <email>abhisinghietf@gmail.com</email>
      </address>
    </author>
    <date year="2026" month="August" day="06"/>
    <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 53?>

<t>The mechanism defined in "Proxying UDP in HTTP" (RFC 9298) 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 defines an
extension to that mechanism 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 61?>

<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; this enables proxying of HTTP/3 connections, since they run over UDP.
Similarly, the HTTP CONNECT method (see <xref section="9.3.6" sectionFormat="of" target="HTTP"/>)
allows proxying HTTP/1.x and HTTP/2, which run over TCP. Combining both
allows proxying the majority of a Web browser's HTTP traffic. However,
WebRTC <xref target="WebRTC"/> relies on Interactive Connectivity Establishment (ICE;
see <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,
List, and String from <xref section="3" sectionFormat="of" target="STRUCTURED-FIELDS"/> to specify
syntax and parsing. This document uses Augmented Backus-Naur Form (ABNF) and
parsing/serialization behaviors from <xref target="ABNF"/>.</t>
      </section>
    </section>
    <section anchor="mechanism">
      <name>Bound UDP Proxying Mechanism</name>
      <t>In unextended UDP proxying requests (i.e., requests that use the mechanism
defined in <xref target="CONNECT-UDP"/> without the extension defined in this document),
the target host is encoded in the HTTP request path or query. For bound UDP
proxying (i.e., the mechanism defined in this document), the target is
either conveyed in each HTTP Datagram (see <xref target="uncompressed"/>), or registered
via capsules and then compressed (see Sections <xref format="counter" target="contextid"/> and
<xref format="counter" target="compressed-operation"/>).</t>
      <t>When performing URI Template Expansion of the UDP proxying template (see
<xref section="3" sectionFormat="of" target="CONNECT-UDP"/>), the client follows the same template as
unextended UDP proxying and sets the "target_host" and the "target_port"
variables to one of its targets. It adds the Connect-UDP-Bind header field
as specified in <xref target="hdr"/> to request bind. If the proxy supports bound UDP
proxying, it returns the Connect-UDP-Bind response header field value set to
true.</t>
      <t>When "target_host" and "target_port" are set to a valid target (i.e., they
follow the requirements in <xref section="3" sectionFormat="of" target="CONNECT-UDP"/>), the client
is requesting bound UDP proxying but would accept fallback to unextended UDP
proxying to that target. If the client does not have a specific target, or if
it wants bound UDP proxying without fallback, it sets both the "target_host"
and the "target_port" variables to the '<tt>*</tt>' character (ASCII character
0x2A). Note that the '<tt>*</tt>' character <bcp14>MUST</bcp14> be percent-encoded before sending,
per <xref section="3.2.2" sectionFormat="of" target="TEMPLATE"/>.</t>
      <t>If only one of the "target_host" and the "target_port" variables is set to
the '<tt>*</tt>' character, the request is malformed. The recipient of such a
malformed request <bcp14>MUST</bcp14> respond with a 4xx (Client Error) status code and
<bcp14>SHOULD</bcp14> use the 400 (Bad Request) status code.</t>
    </section>
    <section anchor="contextid">
      <name>Context Identifiers</name>
      <t>As with unextended UDP proxying, the semantics of HTTP Datagrams are
conveyed by Context IDs (see <xref section="4" sectionFormat="of" target="CONNECT-UDP"/>). Endpoints first
allocate a new Context ID (per <xref target="CONNECT-UDP"/>, clients allocate even
Context IDs while proxies allocate odd ones), and then use the
COMPRESSION_ASSIGN capsule (see <xref target="capsule-assign"/>) to convey the semantics
of the new Context ID to their peer. This process is known as registering
the Context ID.</t>
      <t>Each Context ID can have either compressed or uncompressed semantics. The
uncompressed variant encodes the target IP address and port into each HTTP
Datagram. Conversely, the compressed variant exchanges the target IP address
and port once in the capsule during registration, and then relies on shared
state to map from the Context ID to the IP address and port.</t>
      <t>Context ID 0 was reserved by unextended UDP proxying to represent UDP
payloads sent to and from the "target_host" and "target_port" from the URI
template. When the mechanism from this document is in use:</t>
      <ul spacing="normal">
        <li>
          <t>if the "target_host" and "target_port" variables are set to '<tt>*</tt>', then
Context ID 0 <bcp14>MUST NOT</bcp14> be used in HTTP Datagrams. If one is received, the
recipient <bcp14>MUST</bcp14> abort the request stream.</t>
        </li>
        <li>
          <t>otherwise, HTTP Datagrams with Context ID 0 have the same semantics as in
unextended UDP proxying.</t>
        </li>
      </ul>
      <section anchor="capsule-assign">
        <name>The COMPRESSION_ASSIGN capsule</name>
        <t>The Compression Assign capsule (capsule type 0x11) is used to register the
semantics of a Context ID. It has the following format:</t>
        <figure anchor="fmt-capsule-assign">
          <name>Compression Assign Capsule Format</name>
          <artwork><![CDATA[
COMPRESSION_ASSIGN Capsule {
  Type (i) = 0x11,
  Length (i),
  Context ID (i),
  IP Version (8),
  [IP Address (32..128)],
  [UDP Port (16)],
}
]]></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 0, 4 or 6.
Setting this to zero indicates that this capsule registers an uncompressed
Context ID. Otherwise, the capsule registers a compressed Context ID for
the IP address and UDP port it carries.</t>
          </dd>
          <dt>IP Address:</dt>
          <dd>
            <t>The IP Address of this context. This field is omitted if the IP Version
field is set to 0. Otherwise, it 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 context, in network byte order. This field is omitted
if the IP Version field is set to 0.</t>
          </dd>
        </dl>
        <t>When an endpoint receives a COMPRESSION_ASSIGN capsule, it <bcp14>MUST</bcp14> either
accept or reject the corresponding registration:</t>
        <ul spacing="normal">
          <li>
            <t>if it accepts the registration, first the receiver <bcp14>MUST</bcp14> save the mapping
from Context ID to address and port (or save the fact that this Context ID
is uncompressed). Second, the receiver <bcp14>MUST</bcp14> return a COMPRESSION_ACK
capsule with the Context ID set to the one from the received
COMPRESSION_ASSIGN capsule back to its peer, indicating it has accepted
the registration.</t>
          </li>
          <li>
            <t>if it rejects the registration, 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>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. Since the value 0 was
reserved by unextended UDP proxying, the Context ID value of
COMPRESSION_ASSIGN can never be zero.</t>
        <t>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>If the uncompressed Context ID is closed, the proxy <bcp14>MUST NOT</bcp14> open new
compressed Context IDs. Allowing the proxy to do so would permit
traffic from source tuples not selected by the client, defeating the
IP restriction described in <xref target="restricting-ips"/>. Note that compressed
Context IDs that were established prior to the closing of the
uncompressed Context ID are not impacted.</t>
        <t>Only one Context ID can be used per (IP address, port) tuple. Endpoints <bcp14>MUST
NOT</bcp14> register a Context ID for a tuple for which there is already an existing
Context ID. This can however happen if both endpoints register Context IDs
simultaneously for the same tuple before learning that the peer also
opened one. If an endpoint detects that both it 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 proxy. If an endpoint receives a COMPRESSION_ASSIGN
capsule whose tuple matches another open Context ID that was opened by its
peer, it <bcp14>MUST</bcp14> treat the capsule as malformed.</t>
        <t>Endpoints <bcp14>MAY</bcp14> pre-emptively use Context IDs not yet acknowledged by the peer
via COMPRESSION_ACK, knowing that those HTTP Datagrams can be dropped if
they arrive before the corresponding COMPRESSION_ASSIGN capsule, or if the
peer rejects the registration.</t>
      </section>
      <section anchor="capsule-ack">
        <name>The COMPRESSION_ACK capsule</name>
        <t>The Compression Acknowledgment capsule (capsule type 0x12) serves to confirm
registration of a Context ID that was received via a COMPRESSION_ASSIGN
capsule.</t>
        <figure anchor="fmt-capsule-ack">
          <name>Compression Acknowledgment Capsule Format</name>
          <artwork><![CDATA[
COMPRESSION_ACK Capsule {
  Type (i) = 0x12,
  Length (i),
  Context ID (i),
}
]]></artwork>
        </figure>
        <t>An endpoint can only send a COMPRESSION_ACK capsule if it received a
COMPRESSION_ASSIGN capsule with the same Context ID. If an endpoint receives
a COMPRESSION_ACK capsule for a Context ID it did not attempt to register
via COMPRESSION_ASSIGN, that capsule is considered malformed.</t>
      </section>
      <section anchor="capsule-close">
        <name>The COMPRESSION_CLOSE capsule</name>
        <t>The Compression Close capsule (capsule type 0x13) serves two purposes. It
can be sent as a direct response to a received COMPRESSION_ASSIGN capsule,
to indicate that the registration was rejected. It can also be sent later
to indicate the closure of a previously assigned registration.</t>
        <figure anchor="fmt-capsule-close">
          <name>Compression Close Capsule Format</name>
          <artwork><![CDATA[
COMPRESSION_CLOSE Capsule {
  Type (i) = 0x13,
  Length (i),
  Context ID (i),
}
]]></artwork>
        </figure>
        <t>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.
(Note that, due to reordering, an endpoint can receive datagrams with a
Context ID that has previously been closed; these <bcp14>MUST</bcp14> be discarded
silently.)</t>
        <t>Since the value 0 was reserved by unextended UDP proxying, a
COMPRESSION_CLOSE capsule with Context ID set to zero is malformed.</t>
        <t>Endpoints <bcp14>MAY</bcp14> close any Context ID regardless of which endpoint registered
it. This is useful for example, when a mapping is unused for a long time.
Another potential use is restricting some targets (see <xref target="restricting-ips"/>).</t>
        <t>Once a registration is closed, endpoints can instead use an uncompressed
Context ID to exchange UDP payloads for the given target, if such a Context
has been registered (see <xref target="uncompressed"/>).</t>
        <t>Once a Context ID has been closed, that ID cannot be reused; see
<xref section="4" sectionFormat="of" target="CONNECT-UDP"/>.</t>
      </section>
    </section>
    <section anchor="uncompressed">
      <name>Uncompressed Operation</name>
      <t>If the client wishes to send or receive uncompressed datagrams, it <bcp14>MUST</bcp14>
first send a COMPRESSION_ASSIGN capsule (see <xref target="fmt-capsule-assign"/>) to
the proxy with the IP Version set to zero. This registers the Context ID
as having uncompressed semantics: all HTTP Datagrams with this Context ID
have the following format:</t>
      <figure anchor="fmt-dgram-uncomp">
        <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>
      <t>A client <bcp14>MUST NOT</bcp14> open an uncompressed Context ID if one is already 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 ID and reopen it later with a different Context ID, as long as there
aren't two uncompressed Context IDs open at the same time. Only the client
can request uncompressed Context IDs. If a client receives a
COMPRESSION_ASSIGN capsule with the IP Version set to 0, it <bcp14>MUST</bcp14> treat it
as malformed.</t>
    </section>
    <section anchor="compressed-operation">
      <name>Compressed Operation</name>
      <t>Endpoints <bcp14>MAY</bcp14> choose to compress the IP address and port information per
datagram for a given target using Context IDs. This is accomplished by
registering a compressed Context ID using the COMPRESSION_ASSIGN capsule
(see <xref target="fmt-capsule-assign"/>).</t>
      <t>If the Context ID in an HTTP Datagram matches one previously registered for
compressed operation, the rest of the HTTP Datagram represents the UDP
payload:</t>
      <figure anchor="fmt-dgram-comp">
        <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 field:</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 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 <tt>?1</tt>. 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 address, 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 a List. Each member of the List is a
String, comprised of the ip-port tuple. The format of the String is defined
using IP-literal, IPv4address, 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 = DQUOTE ( IP-literal / IPv4address ) ":" port DQUOTE
]]></artwork>
      </figure>
      <t>When a single (IP address, port) tuple is provided in the
Proxy-Public-Address field, the proxy <bcp14>MUST</bcp14> use the same public IP address
and port for the lifetime of the tunnel. When multiple tuples are provided,
maintaining address stability per address family for the duration of the
tunnel 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>
      <t>If the proxy only shares IP addresses from a single address family, that
indicates that the proxy only supports that family. The client <bcp14>SHOULD NOT</bcp14>
attempt to register compressed Context IDs or send uncompressed datagrams
intended for targets whose IP address families were not indicated via the
IP addresses listed in the Proxy-Public-Address header field, as the proxy
will drop those datagrams and reject those registrations.</t>
    </section>
    <section anchor="behavior">
      <name>Proxy Behavior</name>
      <t>After accepting the bound UDP proxying request, the proxy uses an assigned
IP address and port to transmit UDP payloads received from the client to the
target IP Address and UDP Port specified in each HTTP Datagram received from
the client. The proxy uses the same ports to listen for UDP packets from any
authorized target and forwards them to the client by encapsulating them in
HTTP Datagrams, using the corresponding Context ID.</t>
      <t>If the proxy receives UDP payloads that don't correspond to any registration
(i.e., no compression for the given target was ever established and there is
no uncompressed registration), the proxy will either drop the datagram or
temporarily buffer it (see <xref section="5" sectionFormat="of" target="CONNECT-UDP"/>).</t>
      <section anchor="restricting-ips">
        <name>Restricting IPs</name>
        <t>If a client does not wish to receive datagrams from unknown senders, it can
close the uncompressed Context ID (or not open it in the first place). In
that scenario, the proxy effectively acts as a firewall against unwanted or
unknown IPs.</t>
      </section>
    </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 Traversal Using Relays around NAT (TURN) can be run over
this mechanism, implementors will benefit from reviewing 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 against unauthorized targets by rejecting
requests before creating the tunnel, and communicate the rejection reason
in response header fields. The uncompressed Context ID allows transporting
datagrams to and from any target. Clients that keep the uncompressed
Context ID open need to be able to receive from all targets. If the UDP
proxy were to 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 ID is open, the UDP
proxy needs to perform checks on the target of each uncompressed Context
ID datagram it receives. Similarly, the UDP proxy needs to perform checks
on the IP address and port of received COMPRESSION_ASSIGN capsules and
reject the registration of compressed Context IDs to disallowed targets.</t>
      <t>When an endpoint accepts the registration of a Context ID, it will need to
store it in memory. To prevent unbounded memory growth, endpoints <bcp14>MUST</bcp14>
place a limit on how many Context IDs can be open simultaneously and reject
registrations beyond the limit.</t>
      <t>Note that if the compression response (COMPRESSION_ACK 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>MUST</bcp14> abort the request stream if
this limit is reached.</t>
    </section>
    <section anchor="operational-considerations">
      <name>Operational Considerations</name>
      <t>When moving traffic between uncompressed and compressed Context IDs, the
effective MTU will change. This can hinder Datagram Packetization Layer
PMTU Discovery (DPLPMTUD) between the client and the target
<xref target="DPLPMTUD"/>. To avoid that, if an endpoint intends to use
compression, it <bcp14>SHOULD</bcp14> request it as early as possible.</t>
      <t>Since this mechanism effectively allows clients to share the IP address
of the proxy, implementers may wish to review <xref target="IP-SHARING"/>.</t>
    </section>
    <section anchor="iana-considerations">
      <name>IANA Considerations</name>
      <section anchor="iana-fields">
        <name>HTTP Fields</name>
        <t>This document requests IANA to register the following new items in the
"Hypertext Transfer Protocol (HTTP) Field Name Registry" 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 requests 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">0x11</td>
              <td align="left">COMPRESSION_ASSIGN</td>
            </tr>
            <tr>
              <td align="left">0x12</td>
              <td align="left">COMPRESSION_ACK</td>
            </tr>
            <tr>
              <td align="left">0x13</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/RFC768"/>
        </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="September" year="2024"/>
            <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.</t>
              <t>This document obsoletes RFC 8941.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="9651"/>
          <seriesInfo name="DOI" value="10.17487/RFC9651"/>
        </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="TEMPLATE">
          <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="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="DPLPMTUD">
          <front>
            <title>Packetization Layer Path MTU Discovery for Datagram Transports</title>
            <author fullname="G. Fairhurst" initials="G." surname="Fairhurst"/>
            <author fullname="T. Jones" initials="T." surname="Jones"/>
            <author fullname="M. Tüxen" initials="M." surname="Tüxen"/>
            <author fullname="I. Rüngeler" initials="I." surname="Rüngeler"/>
            <author fullname="T. Völker" initials="T." surname="Völker"/>
            <date month="September" year="2020"/>
            <abstract>
              <t>This document specifies Datagram Packetization Layer Path MTU Discovery (DPLPMTUD). This is a robust method for Path MTU Discovery (PMTUD) for datagram Packetization Layers (PLs). It allows a PL, or a datagram application that uses a PL, to discover whether a network path can support the current size of datagram. This can be used to detect and reduce the message size when a sender encounters a packet black hole. It can also probe a network path to discover whether the maximum packet size can be increased. This provides functionality for datagram transports that is equivalent to the PLPMTUD specification for TCP, specified in RFC 4821, which it updates. It also updates the UDP Usage Guidelines to refer to this method for use with UDP datagrams and updates SCTP.</t>
              <t>The document provides implementation notes for incorporating Datagram PMTUD into IETF datagram transports or applications that use datagram transports.</t>
              <t>This specification updates RFC 4960, RFC 4821, RFC 6951, RFC 8085, and RFC 8261.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="8899"/>
          <seriesInfo name="DOI" value="10.17487/RFC8899"/>
        </reference>
        <reference anchor="IP-SHARING">
          <front>
            <title>Issues with IP Address Sharing</title>
            <author fullname="M. Ford" initials="M." role="editor" surname="Ford"/>
            <author fullname="M. Boucadair" initials="M." surname="Boucadair"/>
            <author fullname="A. Durand" initials="A." surname="Durand"/>
            <author fullname="P. Levis" initials="P." surname="Levis"/>
            <author fullname="P. Roberts" initials="P." surname="Roberts"/>
            <date month="June" year="2011"/>
            <abstract>
              <t>The completion of IPv4 address allocations from IANA and the Regional Internet Registries (RIRs) is causing service providers around the world to question how they will continue providing IPv4 connectivity service to their subscribers when there are no longer sufficient IPv4 addresses to allocate them one per subscriber. Several possible solutions to this problem are now emerging based around the idea of shared IPv4 addressing. These solutions give rise to a number of issues, and this memo identifies those common to all such address sharing approaches. Such issues include application failures, additional service monitoring complexity, new security vulnerabilities, and so on. Solution-specific discussions are out of scope.</t>
              <t>Deploying IPv6 is the only perennial way to ease pressure on the public IPv4 address pool without the need for address sharing mechanisms that give rise to the issues identified herein. This document is not an Internet Standards Track specification; it is published for informational purposes.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="6269"/>
          <seriesInfo name="DOI" value="10.17487/RFC6269"/>
        </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 561?>

<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:60000 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/%2A/%2A/
   :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"

// Register Context ID 2 to be used for uncompressed UDP payloads
// to/from any target.

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

// Proxy confirms registration.

            <-------- CAPSULE
                        Type = COMPRESSION_ACK
                        Context ID = 2

// Target talks to Client using the uncompressed Context ID.

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

// Client responds on the same uncompressed Context ID.

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

// Another target talks to Client using the uncompressed Context ID.

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

// Client responds on the same uncompressed Context ID.

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

// Register 203.0.113.11:60000 to compress it in the future.

 CAPSULE                       -------->
   Type = COMPRESSION_ASSIGN
   Context ID = 4
   IP Version = 4
   IP Address = 203.0.113.11
   UDP Port = 60000


// Proxy confirms registration.

            <-------- CAPSULE
                        Type = COMPRESSION_ACK
                        Context ID = 4

// Omit IP address and port for future packets intended for
// 203.0.113.11:60000 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 ID.

 CAPSULE                       -------->
   Type = COMPRESSION_CLOSE
   Context ID = 2

// Context ID 4 = 203.0.113.11:60000 traffic is accepted,
// and other traffic 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="Alejandro Sedeño"/>, <contact fullname="Ben Schwartz"/>, <contact fullname="Ines Robles"/>, <contact fullname="Lucas Pardue"/>,
<contact fullname="Mike Bishop"/>, <contact fullname="Magnus Westerlund"/>, <contact fullname="Marius Kleidl"/>,
<contact fullname="Mark Nottingham"/>, <contact fullname="Marten Seemann"/>, <contact fullname="Tommy Pauly"/>,
and <contact fullname="Yaroslav Rosomakho"/> for their reviews.</t>
    </section>
  </back>
  <!-- ##markdown-source:
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
fwAr4Bz1sGkAAA==

-->

</rfc>
