<?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-rfc2629 version 1.5.12 -->
<?rfc toc="yes"?>
<?rfc sortrefs="yes"?>
<?rfc symrefs="yes"?>
<rfc xmlns:xi="http://www.w3.org/2001/XInclude" ipr="trust200902" docName="draft-ietf-masque-h3-datagram-05" category="std" obsoletes="" updates="" submissionType="IETF" xml:lang="en" tocInclude="true" sortRefs="true" symRefs="true" version="3">
  <!-- xml2rfc v2v3 conversion 3.10.0 -->
  <front>
    <title abbrev="HTTP Datagrams">Using Datagrams with HTTP</title>
    <seriesInfo name="Internet-Draft" value="draft-ietf-masque-h3-datagram-05"/>
    <author initials="D." surname="Schinazi" fullname="David Schinazi">
      <organization>Google LLC</organization>
      <address>
        <postal>
          <street>1600 Amphitheatre Parkway</street>
          <city>Mountain View, California 94043</city>
          <country>United States of America</country>
        </postal>
        <email>dschinazi.ietf@gmail.com</email>
      </address>
    </author>
    <author initials="L." surname="Pardue" fullname="Lucas Pardue">
      <organization>Cloudflare</organization>
      <address>
        <email>lucaspardue.24.7@gmail.com</email>
      </address>
    </author>
    <date year="2021" month="October" day="25"/>
    <workgroup>MASQUE</workgroup>
    <keyword>Internet-Draft</keyword>
    <abstract>
      <t>The QUIC DATAGRAM extension provides application protocols running over QUIC
with a mechanism to send unreliable data while leveraging the security and
congestion-control properties of QUIC. However, QUIC DATAGRAM frames do not
provide a means to demultiplex application contexts. This document describes how
to use QUIC DATAGRAM frames when the application protocol running over QUIC is
HTTP/3. It associates datagrams with client-initiated bidirectional streams
and defines an optional additional demultiplexing layer. Additionally, this
document defines how to convey datagrams over prior versions of HTTP.</t>
    </abstract>
    <note removeInRFC="true">
      <name>Discussion Venues</name>
      <t>Discussion of this document takes place on the MASQUE WG mailing list (masque@ietf.org),
  which is archived at <eref target="https://mailarchive.ietf.org/arch/browse/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-h3-datagram"/>.</t>
    </note>
  </front>
  <middle>
    <section anchor="intro" numbered="true" toc="default">
      <name>Introduction</name>
      <t>The QUIC DATAGRAM extension <xref target="DGRAM" format="default"/> provides
application protocols running over QUIC <xref target="QUIC" format="default"/> with a mechanism to
send unreliable data while leveraging the security and congestion-control
properties of QUIC. However, QUIC DATAGRAM frames do not provide a means to
demultiplex application contexts. This document describes how to use QUIC
DATAGRAM frames when the application protocol running over QUIC is HTTP/3
<xref target="H3" format="default"/>. It associates datagrams with client-initiated
bidirectional streams and defines an optional additional demultiplexing layer.
Additionally, this document defines how to convey datagrams over prior versions
of HTTP.</t>
      <t>This document is structured as follows:</t>
      <ul spacing="normal">
        <li>
          <t><xref target="multiplexing" format="default"/> presents core concepts for multiplexing across HTTP versions.
          </t>
          <ul spacing="normal">
            <li>
              <xref target="datagram-contexts" format="default"/> defines datagram contexts, an optional end-to-end
multiplexing concept scoped to each HTTP request. Whether contexts are in
use is defined in <xref target="context-hdr" format="default"/>.</li>
            <li>
              <xref target="datagram-formats" format="default"/> defines datagram formats, which are scoped to contexts.
Formats communicate the format and encoding of datagrams sent using the
associated context.</li>
            <li>Contexts are identified using a variable-length integer. Requirements for
allocating identifier values are detailed in <xref target="context-id-alloc" format="default"/>.</li>
          </ul>
        </li>
        <li>
          <xref target="format" format="default"/> defines how QUIC DATAGRAM frames are used with HTTP/3. <xref target="setting" format="default"/>
defines an HTTP/3 setting that endpoints can use to advertise support of the
frame.</li>
        <li>
          <t><xref target="capsule" format="default"/> introduces the Capsule Protocol and the "data stream" concept.
Data streams are initiated using special-purpose HTTP requests, after which
Capsules, an end-to-end message, can be sent.
          </t>
          <ul spacing="normal">
            <li>
              <t>The following Capsule types are defined, together with guidance for defining new types:
              </t>
              <ul spacing="normal">
                <li>Datagram registration capsules <xref target="register-capsule" format="default"/></li>
                <li>Datagram close capsule <xref target="close-capsule" format="default"/></li>
                <li>Datagram capsules <xref target="datagram-capsule" format="default"/></li>
              </ul>
            </li>
          </ul>
        </li>
      </ul>
      <section anchor="defs" numbered="true" toc="default">
        <name>Conventions and Definitions</name>
        <t>The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", "SHOULD",
"SHOULD NOT", "RECOMMENDED", "NOT RECOMMENDED", "MAY", and "OPTIONAL" in this
document are to be interpreted as described in BCP 14 <xref target="RFC2119" format="default"/> <xref target="RFC8174" format="default"/>
when, and only when, they appear in all capitals, as shown here.</t>
      </section>
    </section>
    <section anchor="multiplexing" numbered="true" toc="default">
      <name>Multiplexing</name>
      <t>When running over HTTP/3, multiple exchanges of datagrams need the ability to
coexist on a given QUIC connection. To allow this, HTTP datagrams contain two
layers of multiplexing. First, the QUIC DATAGRAM frame payload starts with an
encoded stream identifier that associates the datagram with a given QUIC
stream. Second, datagrams optionally carry a context identifier (see
<xref target="datagram-contexts" format="default"/>) that allows multiplexing multiple datagram contexts
related to a given HTTP request. Conceptually, the first layer of multiplexing
is per-hop, while the second is end-to-end.</t>
      <t>When running over HTTP/2, the first level of demultiplexing is provided by the
HTTP/2 framing layer. When running over HTTP/1, requests are strictly
serialized in the connection, therefore the first layer of demultiplexing is
not needed.</t>
      <section anchor="datagram-contexts" numbered="true" toc="default">
        <name>Datagram Contexts</name>
        <t>Within the scope of a given HTTP request, contexts provide an additional
demultiplexing layer. Contexts determine the encoding of datagrams, and can be
used to implicitly convey metadata. For example, contexts can be used for
compression to elide some parts of the datagram: the context identifier then
maps to a compression context that the receiver can use to reconstruct the
elided data.</t>
        <t>While stream IDs are a per-hop concept, context IDs are an end-to-end concept.
In other words, if a datagram travels through one or more intermediaries on its
way from client to server, the stream ID will most likely change from hop to
hop, but the context ID will remain the same. Context IDs are opaque to
intermediaries.</t>
        <t>Contexts are OPTIONAL to implement for both endpoints. Intermediaries do not
require any context-specific software to enable contexts. When contexts are
supported by the implementation, their use is optional and can be selected on
each stream. Endpoints inform their peer of whether they wish to use contexts
via the Sec-Use-Datagram-Contexts HTTP header, see <xref target="context-hdr" format="default"/>.</t>
        <t>When contexts are used, they are identified within the scope of a given request
by a numeric value, referred to as the context ID. A context ID is a 62-bit
integer (0 to 2<sup>62</sup>-1).</t>
      </section>
      <section anchor="datagram-formats" numbered="true" toc="default">
        <name>Datagram Formats</name>
        <t>When an endpoint registers a datagram context (or the lack of contexts), it
communicates the format (i.e., the semantics and encoding) of datagrams sent
using this context. This is acccomplished by sending a Datagram Format Type as
part of the datagram registration capsule, see <xref target="register-capsule" format="default"/>. This type
identifier is registered with IANA (see <xref target="iana-format-types" format="default"/>) and allows
applications that use HTTP Datagrams to indicate what the content of datagrams
are. Registration capsules carry a Datagram Format Additional Data field which
allows sending some additional information that would impact the format of
datagrams.</t>
        <t>For example, a protocol which proxies IP packets can define a Datagram Format
Type which represents an IP packet. The corresponding Datagram Format
Additional Data field would be empty. An extension to such a protocol that
wishes to compress IP addresses could define a distinct Datagram Format Type
and exchange two IP addresses via the Datagram Format Additional Data field.
Then any datagrams with that type would contain the IP packet with addresses
elided.</t>
      </section>
      <section anchor="context-id-alloc" numbered="true" toc="default">
        <name>Context ID Allocation</name>
        <t>Implementations of HTTP Datagrams that support datagram contexts MUST provide
a context ID allocation service. That service will allow applications
co-located with HTTP to request a unique context ID that they can subsequently
use for their own purposes. The HTTP implementation will then parse the context
ID of incoming HTTP Datagrams and use it to deliver the frame to the
appropriate application context.</t>
        <t>Even-numbered context IDs are client-initiated, while odd-numbered context IDs
are server-initiated. This means that an HTTP client implementation of the
context ID allocation service MUST only provide even-numbered IDs, while a
server implementation MUST only provide odd-numbered IDs. Note that, once
allocated, any context ID can be used by both client and server - only
allocation carries separate namespaces to avoid requiring synchronization.
Additionally, note that the context ID namespace is tied to a given HTTP
request: it is possible for the same numeral context ID to be used
simultaneously in distinct requests.</t>
      </section>
    </section>
    <section anchor="format" numbered="true" toc="default">
      <name>HTTP/3 DATAGRAM Format</name>
      <t>When used with HTTP/3, the Datagram Data field of QUIC DATAGRAM frames uses the
following format (using the notation from the "Notational Conventions" section
of <xref target="QUIC" format="default"/>):</t>
      <figure anchor="h3-datagram-format">
        <name>HTTP/3 DATAGRAM Format</name>
        <artwork name="" type="" align="left" alt=""><![CDATA[
HTTP/3 Datagram {
  Quarter Stream ID (i),
  [Context ID (i)],
  HTTP Datagram Payload (..),
}
]]></artwork>
      </figure>
      <dl>
        <dt>
Quarter Stream ID:  </dt>
        <dd>
          <t>A variable-length integer that contains the value of the client-initiated
bidirectional stream that this datagram is associated with, divided by four (the
division by four stems from the fact that HTTP requests are sent on
client-initiated bidirectional streams, and those have stream IDs that are
divisible by four). The largest legal QUIC stream ID value is 2<sup>62</sup>-1,
so the largest legal value of Quarter Stream ID is 2<sup>62</sup>-1 / 4.
Receipt of a frame that includes a larger value MUST be treated as a connection
error of type FRAME_ENCODING_ERROR.</t>
        </dd>
        <dt>
Context ID:  </dt>
        <dd>
          <t>A variable-length integer indicating the context ID of the datagram (see
<xref target="datagram-contexts" format="default"/>). Whether or not this field is present depends on whether
datagram contexts are in use on this stream, see <xref target="context-hdr" format="default"/>. If this QUIC
DATAGRAM frame is reordered and arrives before the receiver knows whether
datagram contexts are in use on this stream, then the receiver cannot parse
this datagram and the receiver MUST either drop that datagram silently or
buffer it temporarily.</t>
        </dd>
        <dt>
HTTP Datagram Payload:  </dt>
        <dd>
          <t>The payload of the datagram, whose semantics are defined by individual
applications. Note that this field can be empty.</t>
        </dd>
      </dl>
      <t>Intermediaries parse the Quarter Stream ID field in order to associate the QUIC
DATAGRAM frame with a stream. If an intermediary receives a QUIC DATAGRAM frame
whose payload is too short to allow parsing the Quarter Stream ID field, the
intermediary MUST treat it as an HTTP/3 connection error of type
H3_GENERAL_PROTOCOL_ERROR. The Context ID field is optional and whether it is
present or not is decided end-to-end by the endpoints, see <xref target="context-hdr" format="default"/>.
Therefore intermediaries cannot know whether the Context ID field is present or
absent and they MUST ignore any HTTP/3 Datagram fields after the Quarter Stream
ID.</t>
      <t>Endpoints parse both the Quarter Stream ID field and the Context ID field in
order to associate the QUIC DATAGRAM frame with a stream and context within
that stream. If an endpoint receives a QUIC DATAGRAM frame whose payload is too
short to allow parsing the Quarter Stream ID field, the endpoint MUST treat it
as an HTTP/3 connection error of type H3_GENERAL_PROTOCOL_ERROR. If an endpoint
receives a QUIC DATAGRAM frame whose payload is long enough to allow parsing
the Quarter Stream ID field but too short to allow parsing the Context ID
field, the endpoint MUST abruptly terminate the corresponding stream with a
stream error of type H3_GENERAL_PROTOCOL_ERROR.</t>
      <t>Endpoints MUST NOT send HTTP/3 datagrams unless the corresponding stream's send
side is open. On a given endpoint, once the receive side of a stream is closed,
incoming datagrams for this stream are no longer expected so the endpoint can
release related state. Endpoints MAY keep state for a short time to account for
reordering. Once the state is released, the endpoint MUST silently drop
received associated datagrams.</t>
      <t>If an HTTP/3 datagram is received and its Quarter Stream ID maps to a stream
that has not yet been created, the receiver SHALL either drop that datagram
silently or buffer it temporarily while awaiting the creation of the
corresponding stream.</t>
    </section>
    <section anchor="capsule" numbered="true" toc="default">
      <name>Capsules</name>
      <t>This specification introduces the Capsule Protocol. The Capsule Protocol is a
sequence of type-length-value tuples that allows endpoints to reliably
communicate request-related information end-to-end, even in the presence of
HTTP intermediaries.</t>
      <section anchor="capsule-protocol" numbered="true" toc="default">
        <name>Capsule Protocol</name>
        <t>This specification defines the "data stream" of an HTTP request as the
bidirectional stream of bytes that follow the headers in both directions. In
HTTP/1.x, the data stream consists of all bytes on the connection that follow
the blank line that concludes either the request header section, or the 2xx
(Successful) response header section. In HTTP/2 and HTTP/3, the data stream of
a given HTTP request consists of all bytes sent in DATA frames with the
corresponding stream ID. The concept of a data stream is particularly relevant
for methods such as CONNECT where there is no HTTP message content after the
headers.</t>
        <t>Definitions of new HTTP Methods or of new HTTP Upgrade Tokens can state that
their data stream uses the Capsule Protocol. If they do so, that means that the
contents of their data stream uses the following format (using the notation
from the "Notational Conventions" section of <xref target="QUIC" format="default"/>):</t>
        <figure anchor="capsule-stream-format">
          <name>Capsule Protocol Stream Format</name>
          <artwork name="" type="" align="left" alt=""><![CDATA[
Capsule Protocol {
  Capsule (..) ...,
}
]]></artwork>
        </figure>
        <figure anchor="capsule-format">
          <name>Capsule Format</name>
          <artwork name="" type="" align="left" alt=""><![CDATA[
Capsule {
  Capsule Type (i),
  Capsule Length (i),
  Capsule Value (..),
}
]]></artwork>
        </figure>
        <dl>
          <dt>
Capsule Type:  </dt>
          <dd>
            <t>A variable-length integer indicating the Type of the capsule. Endpoints that
receive a capsule with an unknown Capsule Type MUST silently skip over that
capsule.</t>
          </dd>
          <dt>
Capsule Length:  </dt>
          <dd>
            <t>The length of the Capsule Value field following this field, encoded as a
variable-length integer. Note that this field can have a value of zero.</t>
          </dd>
          <dt>
Capsule Value:  </dt>
          <dd>
            <t>The payload of this capsule. Its semantics are determined by the value of the
Capsule Type field.</t>
          </dd>
        </dl>
      </section>
      <section anchor="requirements" numbered="true" toc="default">
        <name>Requirements</name>
        <t>If the definition of an HTTP Method or HTTP Upgrade Token states that it uses
the capsule protocol, its implementations MUST follow the following
requirements:</t>
        <ul spacing="normal">
          <li>A server MUST NOT send any Transfer-Encoding or Content-Length header fields
in a 2xx (Successful) response. If a client receives a Content-Length or
Transfer-Encoding header fields in a successful response, it MUST treat that
response as malformed.</li>
          <li>A request message does not have content.</li>
          <li>A successful response message does not have content.</li>
          <li>Responses are not cacheable.</li>
        </ul>
      </section>
      <section anchor="intermediary-processing" numbered="true" toc="default">
        <name>Intermediary Processing</name>
        <t>Intermediaries MUST operate in one of the two following modes:</t>
        <dl>
          <dt>
Pass-through mode:  </dt>
          <dd>
            <t>In this mode, the intermediary forwards the data stream between two
associated streams without any modification of the data stream.</t>
          </dd>
          <dt>
Participant mode:  </dt>
          <dd>
            <t>In this mode, the intermediary terminates the data stream and parses all
Capsule Type and Capsule Length fields it receives.</t>
          </dd>
        </dl>
        <t>Each Capsule Type determines whether it is opaque or transparent to
intermediaries in participant mode: opaque capsules are forwarded unmodified
while transparent ones can be parsed, added, or removed by intermediaries.
Intermediaries MAY modify the contents of the Capsule Data field of transparent
capsule types.</t>
        <t>Unless otherwise specified, all Capsule Types are defined as opaque to
intermediaries. Intermediaries MUST forward all received opaque CAPSULE frames
in their unmodified entirety. Intermediaries MUST NOT send any opaque CAPSULE
frames other than the ones it is forwarding. All Capsule Types defined in this
document are opaque, with the exception of the datagram capsules, see
<xref target="datagram-capsule" format="default"/>. Definitions of new Capsule Types MAY specify that the
newly introduced type is transparent. Intermediaries MUST treat unknown Capsule
Types as opaque.</t>
        <t>Intermediaries respect the order of opaque CAPSULE frames: if an intermediary
receives two opaque CAPSULE frames in a given order, it MUST forward them in
the same order.</t>
        <t>Endpoints which receive a Capsule with an unknown Capsule Type MUST silently
drop that Capsule.</t>
      </section>
      <section anchor="capsule-types" numbered="true" toc="default">
        <name>Capsule Types</name>
        <section anchor="register-capsule" numbered="true" toc="default">
          <name>The Datagram Registration Capsules</name>
          <t>This document defines the REGISTER_DATAGRAM and REGISTER_DATAGRAM_CONTEXT
capsules types, known collectively as the datagram registration capsules (see
<xref target="iana-types" format="default"/> for the value of the capsule types). The REGISTER_DATAGRAM
capsule is used by endpoints to inform their peer of the encoding and semantics
of all datagrams associated with a stream. The REGISTER_DATAGRAM_CONTEXT
capsule is used by endpoints to inform their peer of the encoding and semantics
of all datagrams associated with a given context ID on this stream.</t>
          <figure anchor="register-capsule-format">
            <name>REGISTER_DATAGRAM_CONTEXT Capsule Format</name>
            <artwork name="" type="" align="left" alt=""><![CDATA[
Datagram Registration Capsule {
  Type (i) = REGISTER_DATAGRAM or REGISTER_DATAGRAM_CONTEXT,
  Length (i),
  [Context ID (i)],
  Datagram Format Type (i),
  Datagram Format Additional Data (..),
}
]]></artwork>
          </figure>
          <dl>
            <dt>
Context ID:  </dt>
            <dd>
              <t>A variable-length integer indicating the context ID to register (see
<xref target="datagram-contexts" format="default"/>). This field is present in REGISTER_DATAGRAM_CONTEXT
capsules but not in REGISTER_DATAGRAM capsules. If a REGISTER_DATAGRAM capsule
is used on a stream where datagram contexts are in use, it is associated with
context ID 0. REGISTER_DATAGRAM_CONTEXT capsules MUST NOT carry context ID 0 as
that context ID is conveyed using the REGISTER_DATAGRAM capsule.</t>
            </dd>
            <dt>
Datagram Format Type:  </dt>
            <dd>
              <t>A variable-length integer that defines the semantics and encoding of the HTTP
Datagram Payload field of datagrams with this context ID, see
<xref target="datagram-formats" format="default"/>.</t>
            </dd>
            <dt>
Datagram Format Additional Data:  </dt>
            <dd>
              <t>This field carries additional information that impact the format of datagrams
with this context ID, see <xref target="datagram-formats" format="default"/>.</t>
            </dd>
          </dl>
          <t>Note that these registrations are unilateral and bidirectional: the sender of
the capsule unilaterally defines the semantics it will apply to the datagrams
it sends and receives using this context ID. Once a context ID is registered,
it can be used in both directions.</t>
          <t>Endpoints MUST NOT send HTTP Datagrams until they have either sent or received
a datagram registration capsule with the same Context ID. However, reordering
can cause HTTP Datagrams to be received with an unknown Context ID. Receipt of
such HTTP datagrams MUST NOT be treated as an error. Endpoints SHALL drop the
HTTP Datagram silently, or buffer it temporarily while awaiting the
corresponding datagram registration capsule. Intermediaries SHALL drop the HTTP
Datagram silently, MAY buffer it, or forward it on immediately.</t>
          <t>Endpoints MUST NOT register the same Context ID twice on the same stream. This
also applies to Context IDs that have been closed using a
CLOSE_DATAGRAM_CONTEXT capsule. Clients MUST NOT register server-initiated
Context IDs and servers MUST NOT register client-initiated Context IDs. If an
endpoint receives a REGISTER_DATAGRAM_CONTEXT capsule that violates one or more
of these requirements, the endpoint MUST abruptly terminate the corresponding
stream with a stream error of type H3_GENERAL_PROTOCOL_ERROR.</t>
          <t>If datagrams contexts are not in use, the client is responsible for choosing
the datagram format and informing the server via a REGISTER_DATAGRAM capsule.
Servers MUST NOT send the REGISTER_DATAGRAM capsule. If a client receives a
REGISTER_DATAGRAM capsule, the client MUST abruptly terminate the corresponding
stream with a stream error of type H3_GENERAL_PROTOCOL_ERROR.</t>
        </section>
        <section anchor="close-capsule" numbered="true" toc="default">
          <name>The Datagram Close Capsule</name>
          <t>The CLOSE_DATAGRAM_CONTEXT capsule (see <xref target="iana-types" format="default"/> for the value of the
capsule type) allows an endpoint to inform its peer that it will no longer send
or parse received datagrams associated with a given context ID.</t>
          <figure anchor="close-capsule-format">
            <name>CLOSE_DATAGRAM_CONTEXT Capsule Format</name>
            <artwork name="" type="" align="left" alt=""><![CDATA[
CLOSE_DATAGRAM_CONTEXT Capsule {
  Type (i) = CLOSE_DATAGRAM_CONTEXT,
  Length (i),
  Context ID (i),
  Close Code (i),
  Close Details (..),
}
]]></artwork>
          </figure>
          <dl>
            <dt>
Context ID:  </dt>
            <dd>
              <t>The context ID to close.</t>
            </dd>
            <dt>
Close Code:  </dt>
            <dd>
              <t>The close code allows an endpoint to provide additional information as to why
a datagram context was closed. <xref target="close-codes" format="default"/> defines a set of codes, the
circumstances under which an implementation sends them, and how receivers react.</t>
            </dd>
            <dt>
Close Details:  </dt>
            <dd>
              <t>This is meant for debugging purposes. It consists of a human-readable string
encoded in UTF-8.</t>
            </dd>
          </dl>
          <t>Note that this close is unilateral and bidirectional: the sender of the frame
unilaterally informs its peer of the closure. Endpoints can use
CLOSE_DATAGRAM_CONTEXT capsules to close a context that was initially
registered by either themselves, or by their peer. Endpoints MAY use the
CLOSE_DATAGRAM_CONTEXT capsule to immediately reject a context that was just
registered using a REGISTER_DATAGRAM_CONTEXT capsule if they find its Datagram
Format Type field to be unacceptable.</t>
          <t>After an endpoint has either sent or received a CLOSE_DATAGRAM_CONTEXT frame,
it MUST NOT send any HTTP Datagrams with that Context ID. However, due to
reordering, an endpoint that receives an HTTP Datagram with a closed Context ID
MUST NOT treat it as an error, it SHALL instead drop the HTTP Datagram
silently.</t>
          <t>Endpoints MUST NOT close a Context ID that was not previously registered.
Endpoints MUST NOT close a Context ID that has already been closed. If an
endpoint receives a CLOSE_DATAGRAM_CONTEXT capsule that violates one or more of
these requirements, the endpoint MUST abruptly terminate the corresponding
stream with a stream error of type H3_GENERAL_PROTOCOL_ERROR.</t>
          <section anchor="close-codes" numbered="true" toc="default">
            <name>Close Codes</name>
            <t>Close codes are intended to allow implementations to react differently when they
receive them - for example, some close codes require the receiver to not open
another context under certain conditions.</t>
            <t>This specification defines the close codes below. Their numeric values are in
<xref target="iana-close-codes" format="default"/>. Extensions to this mechanism MAY define new close codes
and they SHOULD state how receivers react to them.</t>
            <dl>
              <dt>
NO_ERROR:  </dt>
              <dd>
                <t>This indicates that a context was closed without any action specified for the
receiver.</t>
              </dd>
              <dt>
UNKNOWN_FORMAT:  </dt>
              <dd>
                <t>This indicates that the sender does not know how to interpret the datagram
format type associated with this context. The endpoint that had originally
registered this context MUST NOT try to register another context with the same
datagram format type on this stream.</t>
              </dd>
              <dt>
DENIED:  </dt>
              <dd>
                <t>This indicates that the sender has rejected the context registration based on
its local policy. The endpoint that had originally registered this context MUST
NOT try to register another context with the same datagram format type and
datagram format data on this stream.</t>
              </dd>
              <dt>
RESOURCE_LIMIT:  </dt>
              <dd>
                <t>This indicates that the context was closed to save resources. The recipient
SHOULD limit its future registration of resource-intensive contexts.</t>
              </dd>
            </dl>
            <t>Receipt of an unknown close code MUST be treated as if the NO_ERROR code was
present. Close codes are registered with IANA, see <xref target="iana-close-codes" format="default"/>.</t>
          </section>
        </section>
        <section anchor="datagram-capsule" numbered="true" toc="default">
          <name>The Datagram Capsules</name>
          <t>This document defines the DATAGRAM and DATAGRAM_WITH_CONTEXT capsules types,
known collectively as the datagram capsules (see <xref target="iana-types" format="default"/> for the value
of the capsule types). These capsules allow an endpoint to send a datagram
frame over an HTTP stream. This is particularly useful when using a version of
HTTP that does not support QUIC DATAGRAM frames.</t>
          <figure anchor="datagram-capsule-format">
            <name>DATAGRAM Capsule Format</name>
            <artwork name="" type="" align="left" alt=""><![CDATA[
Datagram Capsule {
  Type (i) = DATAGRAM or DATAGRAM_WITH_CONTEXT,
  Length (i),
  [Context ID (i)],
  HTTP Datagram Payload (..),
}
]]></artwork>
          </figure>
          <dl>
            <dt>
Context ID:  </dt>
            <dd>
              <t>A variable-length integer indicating the context ID of the datagram (see
<xref target="datagram-contexts" format="default"/>). This field is present in DATAGRAM_WITH_CONTEXT capsules
but not in DATAGRAM capsules. If a DATAGRAM capsule is used on a stream where
datagram contexts are in use, it is associated with context ID 0.
DATAGRAM_WITH_CONTEXT capsules MUST NOT carry context ID 0 as that context ID
is conveyed using the DATAGRAM capsule.</t>
            </dd>
            <dt>
HTTP Datagram Payload:  </dt>
            <dd>
              <t>The payload of the datagram, whose semantics are defined by individual
applications. Note that this field can be empty.</t>
            </dd>
          </dl>
          <t>Datagrams sent using the datagram capsule have the exact same semantics as
datagrams sent in QUIC DATAGRAM frames. In particular, the restrictions on when
it is allowed to send an HTTP Datagram and how to process them from <xref target="format" format="default"/>
also apply to HTTP Datagrams sent and received using the datagram capsules.</t>
          <t>The datagram capsules are transparent to intermediaries, meaning that
intermediaries MAY parse them and send datagram capsules that they did not
receive. This allows an intermediary to reencode HTTP Datagrams as it forwards
them: in other words, an intermediary MAY send a datagram capsule to forward an
HTTP Datagram which was received in a QUIC DATAGRAM frame, and vice versa.</t>
          <t>Note that while datagram capsules are sent on a stream, intermediaries can
reencode HTTP Datagrams into QUIC DATAGRAM frames over the next hop, and those
could be dropped. Because of this, applications have to always consider HTTP
Datagrams to be unreliable, even if they were initially sent in a capsule.</t>
          <t>If an intermediary receives an HTTP Datagram in a QUIC DATAGRAM frame and is
forwarding it on a connection that supports QUIC DATAGRAM frames, the
intermediary SHOULD NOT convert that HTTP Datagram to a DATAGRAM capsule. If
the HTTP Datagram is too large to fit in a DATAGRAM frame (for example because
the path MTU of that QUIC connection is too low or if the maximum UDP payload
size advertised on that connection is too low), the intermediary SHOULD drop
the HTTP Datagram instead of converting it to a DATAGRAM capsule. This
preserves the end-to-end unreliability characteristic that methods such as
Datagram Packetization Layer Path MTU Discovery (DPLPMTUD) depend on
<xref target="RFC8899" format="default"/>. An intermediary that converts QUIC DATAGRAM frames to datagram
capsules allows HTTP Datagrams to be arbitrarily large without suffering any
loss; this can misrepresent the true path properties, defeating methods such a
DPLPMTUD.</t>
        </section>
      </section>
    </section>
    <section anchor="setting" numbered="true" toc="default">
      <name>The H3_DATAGRAM HTTP/3 SETTINGS Parameter</name>
      <t>Implementations of HTTP/3 that support HTTP Datagrams can indicate that to
their peer by sending the H3_DATAGRAM SETTINGS parameter with a value of 1.
The value of the H3_DATAGRAM SETTINGS parameter MUST be either 0 or 1. A value
of 0 indicates that HTTP Datagrams are not supported. An endpoint that receives
the H3_DATAGRAM SETTINGS parameter with a value that is neither 0 or 1 MUST
terminate the connection with error H3_SETTINGS_ERROR.</t>
      <t>Endpoints MUST NOT send QUIC DATAGRAM frames until they have both sent and
received the H3_DATAGRAM SETTINGS parameter with a value of 1.</t>
      <t>When clients use 0-RTT, they MAY store the value of the server's H3_DATAGRAM
SETTINGS parameter. Doing so allows the client to send QUIC DATAGRAM frames in
0-RTT packets. When servers decide to accept 0-RTT data, they MUST send a
H3_DATAGRAM SETTINGS parameter greater than or equal to the value they sent to
the client in the connection where they sent them the NewSessionTicket message.
If a client stores the value of the H3_DATAGRAM SETTINGS parameter with their
0-RTT state, they MUST validate that the new value of the H3_DATAGRAM SETTINGS
parameter sent by the server in the handshake is greater than or equal to the
stored value; if not, the client MUST terminate the connection with error
H3_SETTINGS_ERROR. In all cases, the maximum permitted value of the H3_DATAGRAM
SETTINGS parameter is 1.</t>
      <section anchor="note-about-draft-versions" numbered="true" toc="default">
        <name>Note About Draft Versions</name>
        <t>[[RFC editor: please remove this section before publication.]]</t>
        <t>Some revisions of this draft specification use a different value (the
Identifier field of a Setting in the HTTP/3 SETTINGS frame) for the H3_DATAGRAM
Settings Parameter. This allows new draft revisions to make incompatible
changes. Multiple draft versions MAY be supported by either endpoint in a
connection. Such endpoints MUST send multiple values for H3_DATAGRAM. Once an
endpoint has sent and received SETTINGS, it MUST compute the intersection of
the values it has sent and received, and then it MUST select and use the most
recent draft version from the intersection set. This ensures that both
endpoints negotiate the same draft version.</t>
      </section>
    </section>
    <section anchor="context-hdr" numbered="true" toc="default">
      <name>The Sec-Use-Datagram-Contexts HTTP Header</name>
      <t>Endpoints indicate their support for datagram contexts by sending the
Sec-Use-Datagram-Contexts header with a value of ?1. If the header is missing
or has a value different from ?1, that indicates that its sender does not wish
to use datagram contexts. Endpoints that wish to use datagram contexts SHALL
send the Sec-Use-Datagram-Contexts header with a value of ?1 on requests and
responses that use the capsule protocol.</t>
      <t>"Sec-Use-Datagram-Contexts" is an Item Structured Header <xref target="RFC8941" format="default"/>. Its
value MUST be a Boolean, its ABNF is:</t>
      <artwork name="" type="" align="left" alt=""><![CDATA[
Sec-Use-Datagram-Contexts = sf-boolean
]]></artwork>
      <t>The REGISTER_DATAGRAM_CONTEXT, DATAGRAM_WITH_CONTEXT, and
CLOSE_DATAGRAM_CONTEXT capsules as refered to as context-related capsules.
Endpoints which do not wish to use contexts MUST NOT send context-related
capsules, and MUST silently ignore any received context-related capsules.</t>
      <t>Both endpoints unilaterally decide whether they wish to use datagram contexts
on a given stream. Contexts are used on a given stream if and only if both
endpoints indicate they wish to use them on this stream. Once an endpoint has
received the HTTP request or response, it knows whether datagram contexts are
in use on this stream or not.</t>
      <t>Conceptually, when datagram contexts are not in use on a stream, all datagrams
use context ID 0, which is client-initiated. This means that the client chooses
the datagram format for all datagrams when datagram contexts are not in use.</t>
      <t>If datagram contexts are not in use on a stream, endpoints MUST NOT send
context-related capsules to the peer on that stream. Clients MAY optimistically
send context-related capsules before learning whether the server wishes to
support datagram contexts or not.</t>
      <t>This allows a client to optimistically use extensions that rely on datagram
contexts without knowing a priori whether the server supports them, and without
incurring a latency cost to negotiate extension support. In this scenario, the
client would send its request with the Sec-Use-Datagram-Contexts header set to
?1, and register two datagram contexts: the main context would use context ID 0
and the extension context would use context ID 2. The client then sends a
REGISTER_DATAGRAM capsule to register the main context, and a
REGISTER_DATAGRAM_CONTEXT to register the extension context. The client can
then immediately send DATAGRAM capsules to send main datagrams and
DATAGRAM_WITH_CONTEXT capsules to send extension datagrams.</t>
      <ul spacing="normal">
        <li>If the server wishes to use datagram contexts, it will set
Sec-Use-Datagram-Contexts to ?1 on its response and correctly parse all the
received capsules.</li>
        <li>If the server does not wish to use datagram contexts (for example if the
server implementation does not support them), it will not set
Sec-Use-Datagram-Contexts to ?1 on its response. It will then parse the
REGISTER_DATAGRAM and DATAGRAM capsules without datagram contexts being in
use on this stream, and parse the main datagrams correctly while silently
dropping the extension datagrams. Once the client receives the server's
response, it will know datagram contexts are not in use, and then will be
able to send HTTP Datagrams via the QUIC DATAGRAM frame.</li>
      </ul>
      <t>Extensions MAY define a different mechanism to communicate whether contexts are
in use, and they MAY do so in a way which is opaque to intermediaries.</t>
    </section>
    <section anchor="prioritization" numbered="true" toc="default">
      <name>Prioritization</name>
      <t>Data streams (see <xref target="capsule-protocol" format="default"/>) can be prioritized using any means
suited to stream or request prioritization. For example, see <xref section="11" sectionFormat="of" target="PRIORITY" format="default"/>.</t>
      <t>Prioritization of HTTP/3 datagrams is not defined in this document. Future
extensions MAY define how to prioritize datagrams, and MAY define signaling to
allow endpoints to communicate their prioritization preferences.</t>
    </section>
    <section anchor="security" numbered="true" toc="default">
      <name>Security Considerations</name>
      <t>Since this feature requires sending an HTTP/3 Settings parameter, it "sticks
out". In other words, probing clients can learn whether a server supports this
feature. Implementations that support this feature SHOULD always send this
Settings parameter to avoid leaking the fact that there are applications using
HTTP/3 datagrams enabled on this endpoint.</t>
    </section>
    <section anchor="iana" numbered="true" toc="default">
      <name>IANA Considerations</name>
      <section anchor="iana-setting" numbered="true" toc="default">
        <name>HTTP/3 SETTINGS Parameter</name>
        <t>This document will request IANA to register the following entry in the
"HTTP/3 Settings" registry:</t>
        <table anchor="iana-setting-table" align="center">
          <name>New HTTP/3 Settings</name>
          <thead>
            <tr>
              <th align="left">Setting Name</th>
              <th align="left">Value</th>
              <th align="left">Specification</th>
              <th align="left">Default</th>
            </tr>
          </thead>
          <tbody>
            <tr>
              <td align="left">H3_DATAGRAM</td>
              <td align="left">0xffd277</td>
              <td align="left">This Document</td>
              <td align="left">0</td>
            </tr>
          </tbody>
        </table>
      </section>
      <section anchor="iana-hdr" numbered="true" toc="default">
        <name>HTTP Header Field Name</name>
        <t>This document will request IANA to register the following entry in the
"HTTP Field Name" registry:</t>
        <dl>
          <dt>
Field Name:  </dt>
          <dd>
            <t>Sec-Use-Datagram-Contexts</t>
          </dd>
          <dt>
Template:  </dt>
          <dd>
            <t>None</t>
          </dd>
          <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-types" numbered="true" toc="default">
        <name>Capsule Types</name>
        <t>This document establishes a registry for HTTP capsule type codes. The "HTTP
Capsule Types" registry governs a 62-bit space. Registrations in this registry
MUST include the following fields:</t>
        <dl>
          <dt>
Type:  </dt>
          <dd>
            <t>A name or label for the capsule type.</t>
          </dd>
          <dt>
Value:  </dt>
          <dd>
            <t>The value of the Capsule Type field (see <xref target="capsule-protocol" format="default"/>) is a 62-bit
integer.</t>
          </dd>
          <dt>
Reference:  </dt>
          <dd>
            <t>An optional reference to a specification for the type. This field MAY be
empty.</t>
          </dd>
        </dl>
        <t>Registrations follow the "First Come First Served" policy (see Section 4.4 of
<xref target="IANA-POLICY" format="default"/>) where two registrations MUST NOT have the same Type.</t>
        <t>This registry initially contains the following entries:</t>
        <table anchor="iana-types-table" align="center">
          <name>Initial Capsule Types Registry Entries</name>
          <thead>
            <tr>
              <th align="left">Capsule Type</th>
              <th align="left">Value</th>
              <th align="left">Specification</th>
            </tr>
          </thead>
          <tbody>
            <tr>
              <td align="left">REGISTER_DATAGRAM_CONTEXT</td>
              <td align="left">0xff37a1</td>
              <td align="left">This Document</td>
            </tr>
            <tr>
              <td align="left">REGISTER_DATAGRAM</td>
              <td align="left">0xff37a2</td>
              <td align="left">This Document</td>
            </tr>
            <tr>
              <td align="left">CLOSE_DATAGRAM_CONTEXT</td>
              <td align="left">0xff37a3</td>
              <td align="left">This Document</td>
            </tr>
            <tr>
              <td align="left">DATAGRAM_WITH_CONTEXT</td>
              <td align="left">0xff37a4</td>
              <td align="left">This Document</td>
            </tr>
            <tr>
              <td align="left">DATAGRAM</td>
              <td align="left">0xff37a5</td>
              <td align="left">This Document</td>
            </tr>
          </tbody>
        </table>
        <t>Capsule types with a value of the form 41 * N + 23 for integer values of N are
reserved to exercise the requirement that unknown capsule types be ignored.
These capsules have no semantics and can carry arbitrary values. These values
MUST NOT be assigned by IANA and MUST NOT appear in the listing of assigned
values.</t>
      </section>
      <section anchor="iana-format-types" numbered="true" toc="default">
        <name>Datagram Format Types</name>
        <t>This document establishes a registry for HTTP datagram format type codes. The
"HTTP Datagram Format Types" registry governs a 62-bit space. Registrations in
this registry MUST include the following fields:</t>
        <dl>
          <dt>
Type:  </dt>
          <dd>
            <t>A name or label for the datagram format type.</t>
          </dd>
          <dt>
Value:  </dt>
          <dd>
            <t>The value of the Datagram Format Type field (see <xref target="datagram-formats" format="default"/>) is a
62-bit integer.</t>
          </dd>
          <dt>
Reference:  </dt>
          <dd>
            <t>An optional reference to a specification for the parameter. This field MAY be
empty.</t>
          </dd>
        </dl>
        <t>Registrations follow the "First Come First Served" policy (see Section 4.4 of
<xref target="IANA-POLICY" format="default"/>) where two registrations MUST NOT have the same Type
nor Value.</t>
        <t>This registry is initially empty.</t>
        <t>Datagram format types with a value of the form 41 * N + 17 for integer values
of N are reserved to exercise the requirement that unknown datagram format
types be ignored. These format types have no semantics and can carry arbitrary
values. These values MUST NOT be assigned by IANA and MUST NOT appear in the
listing of assigned values.</t>
      </section>
      <section anchor="iana-close-codes" numbered="true" toc="default">
        <name>Context Close Codes</name>
        <t>This document establishes a registry for HTTP context close codes. The "HTTP
Context Close Codes" registry governs a 62-bit space. Registrations in this
registry MUST include the following fields:</t>
        <dl>
          <dt>
Type:  </dt>
          <dd>
            <t>A name or label for the close code.</t>
          </dd>
          <dt>
Value:  </dt>
          <dd>
            <t>The value of the Close Code field (see <xref target="close-capsule" format="default"/>) is a 62-bit integer.</t>
          </dd>
          <dt>
Reference:  </dt>
          <dd>
            <t>An optional reference to a specification for the parameter. This field MAY be
empty.</t>
          </dd>
        </dl>
        <t>Registrations follow the "First Come First Served" policy (see Section 4.4 of
<xref target="IANA-POLICY" format="default"/>) where two registrations MUST NOT have the same Type
nor Value.</t>
        <t>This registry initially contains the following entries:</t>
        <table anchor="iana-close-codes-table" align="center">
          <name>Initial Context Close Code Registry Entries</name>
          <thead>
            <tr>
              <th align="left">Context Close Code</th>
              <th align="left">Value</th>
              <th align="left">Specification</th>
            </tr>
          </thead>
          <tbody>
            <tr>
              <td align="left">NO_ERROR</td>
              <td align="left">0xff78a0</td>
              <td align="left">This Document</td>
            </tr>
            <tr>
              <td align="left">UNKNOWN_FORMAT</td>
              <td align="left">0xff78a1</td>
              <td align="left">This Document</td>
            </tr>
            <tr>
              <td align="left">DENIED</td>
              <td align="left">0xff78a2</td>
              <td align="left">This Document</td>
            </tr>
            <tr>
              <td align="left">RESOURCE_LIMIT</td>
              <td align="left">0xff78a3</td>
              <td align="left">This Document</td>
            </tr>
          </tbody>
        </table>
        <t>Context close codes with a value of the form 41 * N + 19 for integer values of
N are reserved to exercise the requirement that unknown context close codes be
treated as NO_ERROR. These values MUST NOT be assigned by IANA and MUST NOT
appear in the listing of assigned values.</t>
      </section>
    </section>
  </middle>
  <back>
    <references>
      <name>References</name>
      <references>
        <name>Normative References</name>
        <reference anchor="DGRAM">
          <front>
            <title>An Unreliable Datagram Extension to QUIC</title>
            <author fullname="Tommy Pauly">
              <organization>Apple Inc.</organization>
            </author>
            <author fullname="Eric Kinnear">
              <organization>Apple Inc.</organization>
            </author>
            <author fullname="David Schinazi">
              <organization>Google LLC</organization>
            </author>
            <date day="5" month="October" year="2021"/>
            <abstract>
              <t>   This document defines an extension to the QUIC transport protocol to
   add support for sending and receiving unreliable datagrams over a
   QUIC connection.

   Discussion of this work is encouraged to happen on the QUIC IETF
   mailing list quic@ietf.org (mailto:quic@ietf.org) or on the GitHub
   repository which contains the draft: https://github.com/quicwg/
   datagram (https://github.com/quicwg/datagram).

              </t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-ietf-quic-datagram-06"/>
        </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">
              <organization/>
            </author>
            <author fullname="M. Thomson" initials="M." role="editor" surname="Thomson">
              <organization/>
            </author>
            <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="H3">
          <front>
            <title>Hypertext Transfer Protocol Version 3 (HTTP/3)</title>
            <author fullname="Mike Bishop">
              <organization>Akamai</organization>
            </author>
            <date day="2" month="February" year="2021"/>
            <abstract>
              <t>   The QUIC transport protocol has several features that are desirable
   in a transport for HTTP, such as stream multiplexing, per-stream flow
   control, and low-latency connection establishment.  This document
   describes a mapping of HTTP semantics over QUIC.  This document also
   identifies HTTP/2 features that are subsumed by QUIC, and describes
   how HTTP/2 extensions can be ported to HTTP/3.

DO NOT DEPLOY THIS VERSION OF HTTP

   DO NOT DEPLOY THIS VERSION OF HTTP/3 UNTIL IT IS IN AN RFC.  This
   version is still a work in progress.  For trial deployments, please
   use earlier versions.

Note to Readers

   Discussion of this draft takes place on the QUIC working group
   mailing list (quic@ietf.org), which is archived at
   https://mailarchive.ietf.org/arch/search/?email_list=quic.

   Working Group information can be found at https://github.com/quicwg;
   source code and issues list for this draft can be found at
   https://github.com/quicwg/base-drafts/labels/-http.

              </t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-ietf-quic-http-34"/>
        </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">
              <organization/>
            </author>
            <date month="March" year="1997"/>
            <abstract>
              <t>In many standards track documents several words are used to signify the requirements in the specification.  These words are often capitalized. This document defines these words as they should be interpreted in IETF documents.  This document specifies an Internet Best Current Practices for the Internet Community, and requests discussion and suggestions for improvements.</t>
            </abstract>
          </front>
          <seriesInfo name="BCP" value="14"/>
          <seriesInfo name="RFC" value="2119"/>
          <seriesInfo name="DOI" value="10.17487/RFC2119"/>
        </reference>
        <reference anchor="RFC8174">
          <front>
            <title>Ambiguity of Uppercase vs Lowercase in RFC 2119 Key Words</title>
            <author fullname="B. Leiba" initials="B." surname="Leiba">
              <organization/>
            </author>
            <date month="May" year="2017"/>
            <abstract>
              <t>RFC 2119 specifies common key words that may be used in protocol  specifications.  This document aims to reduce the ambiguity by clarifying that only UPPERCASE usage of the key words have the  defined special meanings.</t>
            </abstract>
          </front>
          <seriesInfo name="BCP" value="14"/>
          <seriesInfo name="RFC" value="8174"/>
          <seriesInfo name="DOI" value="10.17487/RFC8174"/>
        </reference>
        <reference anchor="RFC8941">
          <front>
            <title>Structured Field Values for HTTP</title>
            <author fullname="M. Nottingham" initials="M." surname="Nottingham">
              <organization/>
            </author>
            <author fullname="P-H. Kamp" initials="P-H." surname="Kamp">
              <organization/>
            </author>
            <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="IANA-POLICY">
          <front>
            <title>Guidelines for Writing an IANA Considerations Section in RFCs</title>
            <author fullname="M. Cotton" initials="M." surname="Cotton">
              <organization/>
            </author>
            <author fullname="B. Leiba" initials="B." surname="Leiba">
              <organization/>
            </author>
            <author fullname="T. Narten" initials="T." surname="Narten">
              <organization/>
            </author>
            <date month="June" year="2017"/>
            <abstract>
              <t>Many protocols make use of points of extensibility that use constants to identify various protocol parameters.  To ensure that the values in these fields do not have conflicting uses and to promote interoperability, their allocations are often coordinated by a central record keeper.  For IETF protocols, that role is filled by the Internet Assigned Numbers Authority (IANA).</t>
              <t>To make assignments in a given registry prudently, guidance describing the conditions under which new values should be assigned, as well as when and how modifications to existing values can be made, is needed.  This document defines a framework for the documentation of these guidelines by specification authors, in order to assure that the provided guidance for the IANA Considerations is clear and addresses the various issues that are likely in the operation of a registry.</t>
              <t>This is the third edition of this document; it obsoletes RFC 5226.</t>
            </abstract>
          </front>
          <seriesInfo name="BCP" value="26"/>
          <seriesInfo name="RFC" value="8126"/>
          <seriesInfo name="DOI" value="10.17487/RFC8126"/>
        </reference>
      </references>
      <references>
        <name>Informative References</name>
        <reference anchor="PRIORITY">
          <front>
            <title>Extensible Prioritization Scheme for HTTP</title>
            <author fullname="Kazuho Oku">
              <organization>Fastly</organization>
            </author>
            <author fullname="Lucas Pardue">
              <organization>Cloudflare</organization>
            </author>
            <date day="25" month="October" year="2021"/>
            <abstract>
              <t>   This document describes a scheme that allows an HTTP client to
   communicate its preferences for how the upstream server prioritizes
   responses to its requests, and also allows a server to hint to a
   downstream intermediary how its responses should be prioritized when
   they are forwarded.  This document defines the Priority header field
   for communicating the initial priority in an HTTP version-independent
   manner, as well as HTTP/2 and HTTP/3 frames for reprioritizing
   responses.  These share a common format structure that is designed to
   provide future extensibility.

              </t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-ietf-httpbis-priority-07"/>
        </reference>
        <reference anchor="RFC8899">
          <front>
            <title>Packetization Layer Path MTU Discovery for Datagram Transports</title>
            <author fullname="G. Fairhurst" initials="G." surname="Fairhurst">
              <organization/>
            </author>
            <author fullname="T. Jones" initials="T." surname="Jones">
              <organization/>
            </author>
            <author fullname="M. Tüxen" initials="M." surname="Tüxen">
              <organization/>
            </author>
            <author fullname="I. Rüngeler" initials="I." surname="Rüngeler">
              <organization/>
            </author>
            <author fullname="T. Völker" initials="T." surname="Völker">
              <organization/>
            </author>
            <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>
      </references>
    </references>
    <section anchor="examples" numbered="true" toc="default">
      <name>Examples</name>
      <section anchor="connect-udp" numbered="true" toc="default">
        <name>CONNECT-UDP</name>
        <t>In this example, the client does not support any CONNECT-UDP nor HTTP Datagram
extensions, and therefore has no use for datagram contexts on this stream.</t>
        <artwork name="" type="" align="left" alt=""><![CDATA[
Client                                             Server

STREAM(44): HEADERS             -------->
  :method = CONNECT
  :protocol = connect-udp
  :scheme = https
  :path = /target.example.org/443/
  :authority = proxy.example.org:443

STREAM(44): DATA                -------->
  Capsule Type = REGISTER_DATAGRAM
  Datagram Format Type = UDP_PAYLOAD
  Datagram Format Additional Data = ""

DATAGRAM                        -------->
  Quarter Stream ID = 11
  Payload = Encapsulated UDP Payload

           <--------  STREAM(44): HEADERS
                        :status = 200

/* Wait for target server to respond to UDP packet. */

           <--------  DATAGRAM
                        Quarter Stream ID = 11
                        Payload = Encapsulated UDP Payload
]]></artwork>
      </section>
      <section anchor="connect-udp-with-delayed-timestamp-extension" numbered="true" toc="default">
        <name>CONNECT-UDP with Delayed Timestamp Extension</name>
        <t>In these examples, the client supports a CONNECT-UDP Timestamp Extension, which
uses a different Datagram Format Type that carries a timestamp followed by the
encapsulated UDP payload.</t>
        <section anchor="with-delay" numbered="true" toc="default">
          <name>With Delay</name>
          <t>In this instance, the client prefers to wait a round trip to learn whether the
server supports datagram contexts.</t>
          <artwork name="" type="" align="left" alt=""><![CDATA[
Client                                             Server

STREAM(44): HEADERS            -------->
  :method = CONNECT
  :protocol = connect-udp
  :scheme = https
  :path = /target.example.org/443/
  :authority = proxy.example.org:443
  Sec-Use-Datagram-Contexts = ?1

           <--------  STREAM(44): HEADERS
                        :status = 200
                        Sec-Use-Datagram-Contexts = ?1

STREAM(44): DATA               -------->
  Capsule Type = REGISTER_DATAGRAM_CONTEXT
  Context ID = 0
  Datagram Format Type = UDP_PAYLOAD
  Datagram Format Additional Data = ""

DATAGRAM                        -------->
  Quarter Stream ID = 11
  Context ID = 0
  Payload = Encapsulated UDP Payload

           <--------  DATAGRAM
                        Quarter Stream ID = 11
                        Context ID = 0
                        Payload = Encapsulated UDP Payload

STREAM(44): DATA               -------->
  Capsule Type = REGISTER_DATAGRAM_CONTEXT
  Context ID = 2
  Datagram Format Type = UDP_PAYLOAD_WITH_TIMESTAMP
  Datagram Format Additional Data = ""

DATAGRAM                       -------->
  Quarter Stream ID = 11
  Context ID = 2
  Payload = Encapsulated UDP Payload With Timestamp
]]></artwork>
        </section>
      </section>
      <section anchor="successful-optimistic" numbered="true" toc="default">
        <name>Successful Optimistic</name>
        <t>In this instance, the client does not wish to spend a round trip waiting to
learn whether the server supports datagram contexts. It registers its context
optimistically in such a way that the server will react well whether it
supports contexts or not. In this case, the server does support datagram
contexts.</t>
        <artwork name="" type="" align="left" alt=""><![CDATA[
Client                                             Server

STREAM(44): HEADERS            -------->
  :method = CONNECT
  :protocol = connect-udp
  :scheme = https
  :path = /target.example.org/443/
  :authority = proxy.example.org:443
  Sec-Use-Datagram-Contexts = ?1

STREAM(44): DATA               -------->
  Capsule Type = REGISTER_DATAGRAM
  Datagram Format Type = UDP_PAYLOAD
  Datagram Format Additional Data = ""

STREAM(44): DATA               -------->
  Capsule Type = DATAGRAM
  Payload = Encapsulated UDP Payload

           <--------  STREAM(44): HEADERS
                        :status = 200
                        Sec-Use-Datagram-Contexts = ?1

/* Datagram contexts are in use on this stream */

           <--------  DATAGRAM
                        Quarter Stream ID = 11
                        Context ID = 0
                        Payload = Encapsulated UDP Payload

STREAM(44): DATA               -------->
  Capsule Type = REGISTER_DATAGRAM_CONTEXT
  Context ID = 2
  Datagram Format Type = UDP_PAYLOAD_WITH_TIMESTAMP
  Datagram Format Additional Data = ""

DATAGRAM                       -------->
  Quarter Stream ID = 11
  Context ID = 2
  Payload = Encapsulated UDP Payload With Timestamp
]]></artwork>
      </section>
      <section anchor="optimistic-but-unsupported" numbered="true" toc="default">
        <name>Optimistic but Unsupported</name>
        <t>In this instance, the client does not wish to spend a round trip waiting to
learn whether the server supports datagram contexts. It registers its context
optimistically in such a way that the server will react well whether it
supports contexts or not. In this case, the server does not support datagram
contexts.</t>
        <artwork name="" type="" align="left" alt=""><![CDATA[
Client                                             Server

STREAM(44): HEADERS            -------->
  :method = CONNECT
  :protocol = connect-udp
  :scheme = https
  :path = /target.example.org/443/
  :authority = proxy.example.org:443
  Sec-Use-Datagram-Contexts = ?1

STREAM(44): DATA               -------->
  Capsule Type = REGISTER_DATAGRAM
  Datagram Format Type = UDP_PAYLOAD
  Datagram Format Additional Data = ""

STREAM(44): DATA               -------->
  Capsule Type = DATAGRAM
  Payload = Encapsulated UDP Payload

           <--------  STREAM(44): HEADERS
                        :status = 200

/* Datagram contexts are not in use on this stream */

           <--------  DATAGRAM
                        Quarter Stream ID = 11
                        Payload = Encapsulated UDP Payload

DATAGRAM                       -------->
  Quarter Stream ID = 11
  Payload = Encapsulated UDP Payload
]]></artwork>
      </section>
      <section anchor="connect-ip-with-ip-compression" numbered="true" toc="default">
        <name>CONNECT-IP with IP compression</name>
        <artwork name="" type="" align="left" alt=""><![CDATA[
Client                                             Server

STREAM(44): HEADERS            -------->
  :method = CONNECT
  :protocol = connect-ip
  :scheme = https
  :path = /
  :authority = proxy.example.org:443
  Sec-Use-Datagram-Contexts = ?1

           <--------  STREAM(44): HEADERS
                        :status = 200
                        Sec-Use-Datagram-Contexts = ?1

/* Exchange CONNECT-IP configuration information. */

STREAM(44): DATA                -------->
  Capsule Type = REGISTER_DATAGRAM_CONTEXT
  Context ID = 0
  Datagram Format Type = IP_PACKET
  Datagram Format Additional Data = ""

DATAGRAM                       -------->
  Quarter Stream ID = 11
  Context ID = 0
  Payload = Encapsulated IP Packet

/* Endpoint happily exchange encapsulated IP packets */
/* using Quarter Stream ID 11 and Context ID 0.      */

DATAGRAM                       -------->
  Quarter Stream ID = 11
  Context ID = 0
  Payload = Encapsulated IP Packet

/* After performing some analysis on traffic patterns, */
/* the client decides it wants to compress a 2-tuple.  */


STREAM(44): DATA                -------->
  Capsule Type = REGISTER_DATAGRAM_CONTEXT
  Context ID = 2
  Datagram Format Type = COMPRESSED_IP_PACKET
  Datagram Format Additional Data = "192.0.2.6,192.0.2.7"

DATAGRAM                       -------->
  Quarter Stream ID = 11
  Context ID = 2
  Payload = Compressed IP Packet
]]></artwork>
      </section>
      <section anchor="webtransport" numbered="true" toc="default">
        <name>WebTransport</name>
        <artwork name="" type="" align="left" alt=""><![CDATA[
Client                                             Server

STREAM(44): HEADERS            -------->
  :method = CONNECT
  :scheme = https
  :method = webtransport
  :path = /hello
  :authority = webtransport.example.org:443
  Origin = https://www.example.org:443

STREAM(44): DATA                -------->
  Capsule Type = REGISTER_DATAGRAM
  Datagram Format Type = WEBTRANSPORT_DATAGRAM
  Datagram Format Additional Data = ""

           <--------  STREAM(44): HEADERS
                        :status = 200

/* Both endpoints can now send WebTransport datagrams. */
]]></artwork>
      </section>
    </section>
    <section numbered="false" anchor="acks" toc="default">
      <name>Acknowledgments</name>
      <t>The DATAGRAM context identifier was previously part of the DATAGRAM frame
definition itself, the authors would like to acknowledge the authors of that
document and the members of the IETF MASQUE working group for their
suggestions. Additionally, the authors would like to thank Martin Thomson for
suggesting the use of an HTTP/3 SETTINGS parameter. Furthermore, the authors
would like to thank Ben Schwartz for writing the first proposal that used two
layers of indirection.</t>
    </section>
  </back>
  <!-- ##markdown-source:
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
DaG/5OUn+Zfz7lb68tPtL/cwHb38b7mXnfgm+REL7xPe8UTeXFiCOOb9Dpsn
8n3BabCYyaSZ66d7+gt9qv+PfvyEWMRWhErKAh49JWtYCkL4ru73ppmUrT2v
4c63SJTZ1ldHAOBFuBTW5JugwrJgIvSqTvpL8Dl9ujZMSjHWApStK+a/VHja
vmjRUOREEWkjF1zFB/yVuQj4jG6Eof4V9jUlE2RvsYtle3St2seK+GzRvRf1
ohyz83+CyFeRyNefReTnVrBd9Gfb3EQqoN9Zg1WAkuV9NhWwSPKW/9v0gAI+
Ymnd1wjBUc1eEW+4WfcRCXtfZ0SCsiJBf7xISKhG9USDcHYE573Fg8qJB/2J
4kFlxIOOxIMtro+P1fVOeny0+SfDBufGIvuvP+unWoHq84oED/AdNqA/Hh9b
gPHt8ZH59xvv34f3P8oa7NHRz2UNuiNVmy2jr39X7ObNqvic4qaXN5iSfIwv
O2/w8gZTMj7ptunlrCnpDLpALmww6/q7krXt+jLiPuL8m7yFpz5VnGdEFXJR
cIrO7vWnymR1p8kWyGSgL31VTN5iTOmYw5wtS2puUD98fXSO/TUlBmUDoUGA
u5cfwDhr8LaurJR2Z9p9aNNFiuUmIb4aQ9vrODOJx1w7Qs6GbqDR/D/uYqPU
5fji+ODVw6dPH+3rF8cHR8cXl9Fzlgn/Q2m9z3XH2OeEl4ffuZtkn9nSuuFy
usBf2skt7D98f9t1i5aexZLmZ/rLDmuju5Fgc1Q3N18+ffrkS3ykWMIUFGJ9
RvfqrsOn9uGpGGS6viD5F4Ic+a+ZVoybWik+w2r7N+cHf355dnB0j56Kz/TO
jlJb/bcEsv5lKc/03h78YE/0PQPmZcVGjIGUJD8pFYz5ezso7Gl/L9UmUPZb
injBLI93d5X68gv9fcGHdTTvjo0fU2iOegrgRz6DwFcUf/HlJkAC7Ob/bVx8
/t89UELlPgnfsng7MrMCT9GNyzmaUfOFP4kvjG0oOc+8H7G2i50X0bCZkaQ2
Q9HFDmH6KEtdfPbAthyk2314PFa7rkE+toeJlyvnP+xB4O/dAr2MwrMb2P8m
WglnMrjlDu4zGJH1Ere0KRf4ZZw8oNraJH3Qr1T7Z8ueX5/o2Zbifab/sPf5
GXMzCrfDcYeM/BgR6bqnRm2rnundX6Hs7AH46cL0c8uwHmj5f/cB+GfY3Mf3
2lwOco5PXh1fjg9enX+uvf74rX58r61mcemkN+sMkKL+Wg195sq27hCovUKT
dsGHVgO56hps1qonX3vp2Uwl8EnnsmLcs0t+UklxWVnJSTAqLwi6i0jNDmXb
MAu7MrNZcOOCcpOndW2uAgxPPwx6BTZpXZz6TSf8PLL484rcTwcsgOeXMFc3
E9H2nQAr96jnUW28vfhnNHB/Uw6/WuXgNQJ1jX9duYNFv2mIzRoijIf8piV+
0xK/VFAjL+7jIwq/jMi/D0Y+hyj8lNjJiYROTs7plGLDB41/jVxb3sG0/7/5
9UDSx+/5CGy4W4CO6/Jm2dgbiV2bZY7Sfc6I6SeEA05Q6Bz+5/H4l7MBtsQC
Ts6lywhj158eWyywj4ex6DbJS9JKABEM73GJdR+YvT2+Jy9sFcaLwI355dbJ
XYgXprEt8Km/agH7sG5LTjM0xfU1WD3ASh3mhwey0tDEoYOCfJlI4YuqSWDg
nZVDusJ6xGv9Wahwi2l6ePbq/OL48vL46M1HEuTeN49Hu6PHo68G9tPX/3w7
9VDwGO2ck9Tfmyu6yxMNrF9cLvfFr3tqZa46B2cgl2/BzqxT4Rw+nJHRZ9TP
1E6z/+WXq9Xql8oOfX/87fji4PTy/OxivO3xvHgLwPlslk5yoBdLXfA8DdXr
h9QSntUBthSK0gcTTM/OzPSGKpX1hwdAce1P6sN+tZxf4TnnZzvXxaw1O3Lr
gz+MJDRc+o4R2IUt6LyNnflcRVd0AkcF1/iC+2Jm1+xKMFW0cnJvVr6V5iwW
RhM9Jd20gpsf5Sjg3CDo7vrNk+Pxc/3q4PKPr4/xIAWdULgBb2xhCz3KBhye
mxvwALnZod89PNC7GTBsTvJWv8IGhJUe39bzlotH3GhyFEK6tgWHPzI9bp4v
G/S+sCF4NKfKzfmtqfTl5HYFU/9Aq1g17lIffU3FJthCqm6xaYoc55/STbOY
FGPU4DlruUlgpP4ff4SNCQauAAA=

-->

</rfc>
