<?xml version='1.0' encoding='utf-8'?>
<?xml-stylesheet type="text/xsl" href="rfc2629.xslt" ?>
<!-- generated by https://github.com/cabo/kramdown-rfc2629 version 1.3.24 -->
<!DOCTYPE rfc SYSTEM "rfc2629-xhtml.ent">
<?rfc toc="yes"?>
<?rfc sortrefs="yes"?>
<?rfc symrefs="yes"?>
<rfc xmlns:xi="http://www.w3.org/2001/XInclude" ipr="trust200902" docName="draft-schinazi-masque-h3-datagram-03" category="std" obsoletes="" updates="" submissionType="IETF" xml:lang="en" tocInclude="true" sortRefs="true" symRefs="true" version="3">
  <!-- xml2rfc v2v3 conversion 3.5.0 -->
  <front>
    <title abbrev="HTTP/3 Datagrams">Using QUIC Datagrams with HTTP/3</title>
    <seriesInfo name="Internet-Draft" value="draft-schinazi-masque-h3-datagram-03"/>
    <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="January" day="05"/>
    <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 defines how
to use QUIC DATAGRAM frames when the application protocol running over QUIC is
HTTP/3 by adding an identifier at the start of the frame payload. This allows
HTTP messages to convey related information using unreliable DATAGRAM frames,
ensuring those frames are properly associated with an HTTP message.</t>
      <t>Discussion of this work is encouraged to happen on the MASQUE IETF mailing list
(<eref target="mailto:masque@ietf.org">masque@ietf.org</eref>) or on the GitHub repository which
contains the draft: <eref target="https://github.com/DavidSchinazi/draft-h3-datagram"/>.</t>
    </abstract>
  </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 defines how
to use QUIC DATAGRAM frames when the application protocol running over QUIC is
HTTP/3 <xref target="H3" format="default"/> by adding an identifier at the start of the
frame payload. This allows HTTP messages to convey related information using
unreliable DATAGRAM frames, ensuring those frames are properly associated with
an HTTP message.</t>
      <t>This design mimics the use of Stream Types in HTTP/3, which provide a
demultiplexing identifier at the start of each unidirectional stream.</t>
      <t>Discussion of this work is encouraged to happen on the MASQUE IETF mailing list
(<eref target="mailto:masque@ietf.org">masque@ietf.org</eref>) or on the GitHub repository which
contains the draft: <eref target="https://github.com/DavidSchinazi/draft-h3-datagram"/>.</t>
      <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="flow-id" numbered="true" toc="default">
      <name>Flow Identifiers</name>
      <t>Flow identifiers represent bidirectional flows of datagrams within a single QUIC
connection. These are conceptually similar to streams in the sense that they
allow multiplexing of application data.  Flows lack any of the ordering
or reliability guarantees of streams.</t>
      <t>Beyond this, a sender SHOULD ensure that DATAGRAM frames within a single flow
are transmitted in order relative to one another. If multiple DATAGRAM frames
can be packed into a single QUIC packet, the sender SHOULD group them by flow
identifier to promote fate-sharing within a specific flow and improve the
ability to process batches of datagram messages efficiently on the receiver.</t>
    </section>
    <section anchor="flow-id-alloc" numbered="true" toc="default">
      <name>Flow Identifier Allocation</name>
      <t>Implementations of HTTP/3 that support the DATAGRAM extension MUST provide a
flow identifier allocation service. That service will allow applications
co-located with HTTP/3 to request a unique flow identifier that they can
subsequently use for their own purposes. The HTTP/3 implementation will then
parse the flow identifier of incoming DATAGRAM frames and use it to deliver the
frame to the appropriate application.</t>
      <t>Even-numbered flow identifiers are client-initiated, while odd-numbered flow
identifiers are server-initiated. This means that an HTTP/3 client
implementation of the flow identifier allocation service MUST only provide
even-numbered identifiers, while a server implementation MUST only provide
odd-numbered identifiers. Note that, once allocated, any flow identifier can be
used by both client and server - only allocation carries separate namespaces to
avoid requiring synchronization.</t>
      <t>The flow allocation service SHOULD also provide a mechanism for applications
to indicate they have completed their usage of a flow identifier and will no
longer be using that flow identifier, this process is called "retiring" a flow
identifier. Applications MUST NOT retire a flow identifier until after they
have received confirmation that the peer has also stopped using that flow
identifier. The flow identifier allocation service MAY reuse previously
retired flow identifiers once they have ascertained that there are no packets
with DATAGRAM frames using that flow identifier still in flight. Reusing flow
identifiers can improve performance by transmitting the flow identifier using
a shorter variable-length integer encoding.</t>
    </section>
    <section anchor="format" numbered="true" toc="default">
      <name>HTTP/3 DATAGRAM Frame 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 Frame Format</name>
        <artwork name="" type="" align="left" alt=""><![CDATA[
HTTP/3 DATAGRAM Frame {
  Flow Identifier (i),
  HTTP/3 Datagram Payload (..),
}
]]></artwork>
      </figure>
      <dl>
        <dt>
Flow Identifier:  </dt>
        <dd>
          <t>A variable-length integer indicating the Flow Identifier of the datagram (see
<xref target="flow-id" format="default"/>).</t>
        </dd>
        <dt>
HTTP/3 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>Endpoints MUST treat receipt of a DATAGRAM frame whose payload is too short to
parse the flow identifier as an HTTP/3 connection error of type
H3_GENERAL_PROTOCOL_ERROR.</t>
    </section>
    <section anchor="setting" numbered="true" toc="default">
      <name>The H3_DATAGRAM HTTP/3 SETTINGS Parameter</name>
      <t>Implementations of HTTP/3 that support this mechanism 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 this mechanism is 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>An endpoint that sends the H3_DATAGRAM SETTINGS parameter with a value of 1
MUST send the max_datagram_frame_size QUIC Transport Parameter <xref target="DGRAM" format="default"/>.
An endpoint that receives the H3_DATAGRAM SETTINGS parameter with a value of 1
on a QUIC connection that did not also receive the max_datagram_frame_size
QUIC Transport Parameter MUST terminate the connection with error
H3_SETTINGS_ERROR.</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 use HTTP/3 datagrams 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>
    <section anchor="header" numbered="true" toc="default">
      <name>Datagram-Flow-Id Header Field Definition</name>
      <t>"Datagram-Flow-Id" is a List Structured
Field <xref target="STRUCT-FIELD" format="default"/>, whose members MUST
all be Items of type Integer. Its ABNF is:</t>
      <artwork name="" type="" align="left" alt=""><![CDATA[
  Datagram-Flow-Id = sf-list
]]></artwork>
      <t>The "Datagram-Flow-Id" header field is used to associate one or more datagram
flow identifiers with an HTTP message. As a simple example using a single
identifier, the definition of an HTTP method could instruct the client to use
its flow identifier allocation service to allocate a new flow identifier, and
then the client will add the "Datagram-Flow-Id" header field to its request to
communicate that value to the server. In this example, the resulting header
field could look like:</t>
      <artwork name="" type="" align="left" alt=""><![CDATA[
  Datagram-Flow-Id = 2
]]></artwork>
      <t>List members are flow identifier elements, which can be named or unnamed.
One element in the list is allowed to be unnamed, but all but one elements
MUST carry a name. The name of an element is encoded in the key of the first
parameter of that element (parameters are defined in Section 3.1.2 of
<xref target="STRUCT-FIELD" format="default"/>). Each name MUST NOT appear more than once in the list. The
value of the first parameter of each named element (whose corresponding key
conveys the element name) MUST be of type Boolean and equal to true. The value
of the first parameter of the unnamed element MUST NOT be of type Boolean. The
ordering of the list does not carry any semantics. For example, an HTTP method
that wishes to use four datagram flow identifiers for the lifetime of its
request stream could look like this:</t>
      <artwork name="" type="" align="left" alt=""><![CDATA[
  Datagram-Flow-Id = 42, 44; ecn-ect0, 46; ecn-ect1, 48; ecn-ce
]]></artwork>
      <t>In this example, 42 is the unnamed flow identifier, 44 represents the name
"ecn-ect0", 46 represents "ecn-ect1", and 48 represents "ecn-ce". Note that,
since the list ordering does not carry semantics, this example can be
equivalently encoded as:</t>
      <artwork name="" type="" align="left" alt=""><![CDATA[
  Datagram-Flow-Id = 44; ecn-ect0, 42, 48; ecn-ce, 46; ecn-ect1
]]></artwork>
      <t>Even if a sender attempts to communicate the meaning of a flow identifier
before it uses it in an HTTP/3 datagram, it is possible that its peer will
receive an HTTP/3 datagram with a flow identifier that it does not know as it
has not yet received the corresponding "Datagram-Flow-Id" header field. (For
example, this could happen if the QUIC STREAM frame that contains the
"Datagram-Flow-Id" header field is reordered and arrives afer the DATAGRAM
frame.) Endpoints MUST NOT treat that scenario as an error; they MUST either
silently discard the datagram or buffer it until they receive the
"Datagram-Flow-Id" header field.</t>
      <t>Distinct HTTP requests MAY refer to the same flow identifier in their
respective "Datagram-Flow-Id" header fields.</t>
      <t>Note that integer structured fields can only encode values up to 10^15-1,
therefore the maximum possible value of an element of the "Datagram-Flow-Id"
header field is lower then the theoretical maximum value of a flow identifier
which is 2^62-1 due to the QUIC variable length integer encoding. If the flow
identifier allocation service of an endpoint runs out of values lower than
10^15-1, the endpoint MUST fail the flow identifier allocation. An HTTP
message that carries a "Datagram-Flow-Id" header field with a flow identifier
value above 10^15-1 is malformed (see Section 8.1.2.6 of <xref target="H2" format="default"/>).</t>
    </section>
    <section anchor="intermediaries" numbered="true" toc="default">
      <name>HTTP Intermediaries</name>
      <t>HTTP/3 DATAGRAM flow identifiers are specific to a given HTTP/3 connection.
However, in some cases, an HTTP request may travel across multiple HTTP
connections if there are HTTP intermediaries involved; see Section 2.3 of
<xref target="RFC7230" format="default"/>.</t>
      <t>If an intermediary has sent the H3_DATAGRAM SETTINGS parameter with a value of 1
on its client-facing connection, it MUST inspect all HTTP requests from that
connection and check for the presence of the "Datagram-Flow-Id" header field. If
the HTTP method of the request is not supported by the intermediary, it MUST
remove the "Datagram-Flow-Id" header field before forwarding the request. If the
intermediary supports the method, it MUST either remove the header field or
adhere to the requirements leveraged by that method on intermediaries.</t>
      <t>If an intermediary has sent the H3_DATAGRAM SETTINGS parameter with a value of 1
on its server-facing connection, it MUST inspect all HTTP responses from that
connection and check for the presence of the "Datagram-Flow-Id" header field. If
the HTTP method of the request is not supported by the intermediary, it MUST
remove the "Datagram-Flow-Id" header field before forwarding the response. If
the intermediary supports the method, it MUST either remove the header field or
adhere to the requirements leveraged by that method on intermediaries.</t>
      <t>If an intermediary processes distinct HTTP requests that refer to the same flow
identifier in their respective "Datagram-Flow-Id" header fields, it MUST ensure
that those requests are routed to the same backend.</t>
    </section>
    <section anchor="security" numbered="true" toc="default">
      <name>Security Considerations</name>
      <t>This document does not have additional security considerations beyond those
defined in <xref target="QUIC" format="default"/> and <xref target="DGRAM" format="default"/>.</t>
    </section>
    <section anchor="iana" numbered="true" toc="default">
      <name>IANA Considerations</name>
      <section anchor="iana-setting" numbered="true" toc="default">
        <name>HTTP SETTINGS Parameter</name>
        <t>This document will request IANA to register the following entry in the
"HTTP/3 Settings" registry:</t>
        <artwork name="" type="" align="left" alt=""><![CDATA[
  +--------------+-------+---------------+---------+
  | Setting Name | Value | Specification | Default |
  +==============+=======+===============+=========+
  | H3_DATAGRAM  | 0x276 | This Document |    0    |
  +--------------+-------+---------------+---------+
]]></artwork>
      </section>
      <section anchor="iana-header" numbered="true" toc="default">
        <name>HTTP Header Field</name>
        <t>This document will request IANA to register the "Datagram-Flow-Id"
header field in the "Permanent Message Header Field Names"
registry maintained at
&lt;<eref target="https://www.iana.org/assignments/message-headers"/>&gt;.</t>
        <artwork name="" type="" align="left" alt=""><![CDATA[
  +-------------------+----------+--------+---------------+
  | Header Field Name | Protocol | Status |   Reference   |
  +-------------------+----------+--------+---------------+
  | Datagram-Flow-Id  |   http   |  std   | This document |
  +-------------------+----------+--------+---------------+
]]></artwork>
      </section>
    </section>
  </middle>
  <back>
    <references>
      <name>Normative References</name>
      <reference anchor="DGRAM" target="http://www.ietf.org/internet-drafts/draft-ietf-quic-datagram-01.txt">
        <front>
          <title>An Unreliable Datagram Extension to QUIC</title>
          <author initials="T" surname="Pauly" fullname="Tommy Pauly">
            <organization/>
          </author>
          <author initials="E" surname="Kinnear" fullname="Eric Kinnear">
            <organization/>
          </author>
          <author initials="D" surname="Schinazi" fullname="David Schinazi">
            <organization/>
          </author>
          <date month="August" day="24" year="2020"/>
          <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-01"/>
      </reference>
      <reference anchor="QUIC" target="http://www.ietf.org/internet-drafts/draft-ietf-quic-transport-33.txt">
        <front>
          <title>QUIC: A UDP-Based Multiplexed and Secure Transport</title>
          <author initials="J" surname="Iyengar" fullname="Jana Iyengar">
            <organization/>
          </author>
          <author initials="M" surname="Thomson" fullname="Martin Thomson">
            <organization/>
          </author>
          <date month="December" day="13" year="2020"/>
          <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.  DO NOT DEPLOY THIS VERSION OF QUIC  DO NOT DEPLOY THIS VERSION OF QUIC UNTIL IT IS IN AN RFC.  This verion 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 (mailto: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/-transport.</t>
          </abstract>
        </front>
        <seriesInfo name="Internet-Draft" value="draft-ietf-quic-transport-33"/>
      </reference>
      <reference anchor="H3" target="http://www.ietf.org/internet-drafts/draft-ietf-quic-http-33.txt">
        <front>
          <title>Hypertext Transfer Protocol Version 3 (HTTP/3)</title>
          <author initials="M" surname="Bishop" fullname="Mike Bishop">
            <organization/>
          </author>
          <date month="December" day="15" year="2020"/>
          <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-33"/>
      </reference>
      <reference anchor="RFC2119" target="https://www.rfc-editor.org/info/rfc2119">
        <front>
          <title>Key words for use in RFCs to Indicate Requirement Levels</title>
          <author initials="S." surname="Bradner" fullname="S. Bradner">
            <organization/>
          </author>
          <date year="1997" month="March"/>
          <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" target="https://www.rfc-editor.org/info/rfc8174">
        <front>
          <title>Ambiguity of Uppercase vs Lowercase in RFC 2119 Key Words</title>
          <author initials="B." surname="Leiba" fullname="B. Leiba">
            <organization/>
          </author>
          <date year="2017" month="May"/>
          <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="STRUCT-FIELD" target="http://www.ietf.org/internet-drafts/draft-ietf-httpbis-header-structure-19.txt">
        <front>
          <title>Structured Field Values for HTTP</title>
          <author initials="M" surname="Nottingham" fullname="Mark Nottingham">
            <organization/>
          </author>
          <author initials="P" surname="Kamp" fullname="Poul-Henning Kamp">
            <organization/>
          </author>
          <date month="June" day="3" year="2020"/>
          <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="Internet-Draft" value="draft-ietf-httpbis-header-structure-19"/>
      </reference>
      <reference anchor="H2" target="https://www.rfc-editor.org/info/rfc7540">
        <front>
          <title>Hypertext Transfer Protocol Version 2 (HTTP/2)</title>
          <author initials="M." surname="Belshe" fullname="M. Belshe">
            <organization/>
          </author>
          <author initials="R." surname="Peon" fullname="R. Peon">
            <organization/>
          </author>
          <author initials="M." surname="Thomson" fullname="M. Thomson" role="editor">
            <organization/>
          </author>
          <date year="2015" month="May"/>
          <abstract>
            <t>This specification describes an optimized expression of the semantics of the Hypertext Transfer Protocol (HTTP), referred to as HTTP version 2 (HTTP/2).  HTTP/2 enables a more efficient use of network resources and a reduced perception of latency by introducing header field compression and allowing multiple concurrent exchanges on the same connection.  It also introduces unsolicited push of representations from servers to clients.</t>
            <t>This specification is an alternative to, but does not obsolete, the HTTP/1.1 message syntax.  HTTP's existing semantics remain unchanged.</t>
          </abstract>
        </front>
        <seriesInfo name="RFC" value="7540"/>
        <seriesInfo name="DOI" value="10.17487/RFC7540"/>
      </reference>
      <reference anchor="RFC7230" target="https://www.rfc-editor.org/info/rfc7230">
        <front>
          <title>Hypertext Transfer Protocol (HTTP/1.1): Message Syntax and Routing</title>
          <author initials="R." surname="Fielding" fullname="R. Fielding" role="editor">
            <organization/>
          </author>
          <author initials="J." surname="Reschke" fullname="J. Reschke" role="editor">
            <organization/>
          </author>
          <date year="2014" month="June"/>
          <abstract>
            <t>The Hypertext Transfer Protocol (HTTP) is a stateless application-level protocol for distributed, collaborative, hypertext information systems.  This document provides an overview of HTTP architecture and its associated terminology, defines the "http" and "https" Uniform Resource Identifier (URI) schemes, defines the HTTP/1.1 message syntax and parsing requirements, and describes related security concerns for implementations.</t>
          </abstract>
        </front>
        <seriesInfo name="RFC" value="7230"/>
        <seriesInfo name="DOI" value="10.17487/RFC7230"/>
      </reference>
    </references>
    <section numbered="false" anchor="acks" toc="default">
      <name>Acknowledgments</name>
      <t>The DATAGRAM flow identifier was previously part of the DATAGRAM frame
definition itself, the author would like to acknowledge the authors of
that document and the members of the IETF MASQUE working group for their
suggestions. Additionally, the author would like to thank Martin Thomson
for suggesting the use of an HTTP/3 SETTINGS parameter.</t>
    </section>
  </back>
  <!-- ##markdown-source:
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
tP48e9PP2LD1J/4FcJxAZaA3AAA=

-->

</rfc>
