<?xml version='1.0' encoding='utf-8'?>
<!DOCTYPE rfc [
  <!ENTITY nbsp    "&#160;">
  <!ENTITY zwsp   "&#8203;">
  <!ENTITY nbhy   "&#8209;">
  <!ENTITY wj     "&#8288;">
]>
<?xml-stylesheet type="text/xsl" href="rfc2629.xslt" ?>
<!-- generated by https://github.com/cabo/kramdown-rfc version 1.6.25 (Ruby 3.1.3) -->
<rfc xmlns:xi="http://www.w3.org/2001/XInclude" ipr="trust200902" docName="draft-yang-masque-dgram-retrans-01" category="exp" consensus="true" submissionType="IETF" tocInclude="true" sortRefs="true" symRefs="true" version="3">
  <!-- xml2rfc v2v3 conversion 3.16.0 -->
  <front>
    <title abbrev="dgram-retrans">A Configurable Retransmission Extension for HTTP/3 Datagrams</title>
    <seriesInfo name="Internet-Draft" value="draft-yang-masque-dgram-retrans-01"/>
    <author fullname="Furong Yang">
      <organization>Alibaba Inc.</organization>
      <address>
        <email>yfr256538@alibaba-inc.com</email>
      </address>
    </author>
    <author fullname="Yanmei Liu">
      <organization>Alibaba Inc.</organization>
      <address>
        <email>miaoji.lym@alibaba-inc.com</email>
      </address>
    </author>
    <author fullname="Yunfei Ma">
      <organization>Alibaba Inc.</organization>
      <address>
        <email>yunfei.ma@alibaba-inc.com</email>
      </address>
    </author>
    <date year="2023" month="March" day="13"/>
    <area>Transport</area>
    <workgroup>MASQUE</workgroup>
    <keyword>Internet-Draft</keyword>
    <abstract>
      <t>When using HTTP/3 Datagrams for traffic tunneling, it is desirable to retransmit HTTP/3 Datagrams in some scenarios where the retransmission is beneficial for the tunneled end-to-end connection. This document defines an extension to the HTTP Datagrams and the Capsule Protocol, which allows HTTP/3 Datagrams to be retransmitted according to the configuration of the HTTP/3 Datagram flow.</t>
    </abstract>
    <note removeInRFC="true">
      <name>Discussion Venues</name>
      <t>Discussion of this document takes place on the
    Multiplexed Application Substrate over QUIC Encryption Working Group 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/yangfurong/draft-yang-masque-retx-dgrams"/>.</t>
    </note>
  </front>
  <middle>
    <section anchor="intro">
      <name>Introduction</name>
      <t>HTTP Datagrams and the Capsule Protocol <xref target="HTTP-DATAGRAM"/> defines how HTTP Datagrams can be sent either unreliably using the QUIC DATAGRAM extension <xref target="QUIC-DATAGRAM"/> or reliably using the Capsule Protocol that encapsulates HTTP Datagrams into HTTP/2 <xref target="RFC7540"/> streams, HTTP/3 <xref target="RFC9114"/> streams or HTTP/1.x connections. The two modes, "reliable mode" and "unreliable mode", all have their pros and cons.</t>
      <t>This document takes the scenario where HTTP Datagrams are leveraged to tunnel QUIC <xref target="QUIC"/> connections from a QUIC client and a target QUIC server via an HTTP UDP proxy <xref target="CONNECT-UDP"/> as a reference. However, the problems discussed below are not restricted to the reference scenario. Instead, the problems are general in other scenarios using HTTP Datagrams for traffic tunneling, e.g. <xref target="CONNECT-IP"/>.</t>
      <t>In the reference scenario, the reliable mode is usually worse than the unreliable mode in terms of the transport performance of the end-to-end QUIC connection (i.e. the connection tunneled by the proxy). The culprit is that the stream-based Capsule Protocol can stall the end-to-end QUIC connection due to head-of-line blocking, which can inflate the RTT estimation of the end-to-end connection, make the connection perceive bursty losses, and hinder different streams of the connection from independent delivery. However, the reliable mode also has advantages sometimes. If the network path between the client and the UDP proxy is lossy and the end-to-end delay is a few times higher than the delay of the tunnel, the reliable mode can quickly recover the lost packets in the tunnel, hide the losses from the end-to-end connection, and avoid the reduction of the connection's congestion window. Some of the above behaviors were observed by a study <xref target="MASQUE-EVALUATION"/>.</t>
      <t>This document defines an extension to the Capsule Protocol <xref target="HTTP-DATAGRAM"/>, which allows HTTP/3 Datagrams to be retransmitted according to the configuration of the HTTP/3 Datagram flow. In <xref target="retx_signaling"/>, a new Capsule Type is added to configure peers' retransmission limit of HTTP/3 Datagrams. Having such a signaling mechanism instead of just locally configuring the retransmission capability at endpoints (i.e. the client and the proxy) is necessary for enforcing retransmission policies in both upstream and downstream directions. As the proxy does not know the end-to-end connection's preference for retransmission, the client needs to inform the proxy what is the retransmission preference. Depending on the retransmission limit of HTTP/3 Datagrams, the handling of lost HTTP/3 Datagrams is discussed in <xref target="retx_handling"/>.</t>
      <t>This extension brings the benefits of the reliable mode to the unreliable mode. It is beneficial for traffic tunneling scenarios where the last-mile link could be very lossy (e.g. Apple's iCloud Private Relay scenario <xref target="PR"/> where the last-mile link is usually wireless).</t>
    </section>
    <section anchor="conventions-and-definitions">
      <name>Conventions and Definitions</name>
      <t>The key words "<bcp14>MUST</bcp14>", "<bcp14>MUST NOT</bcp14>", "<bcp14>REQUIRED</bcp14>", "<bcp14>SHALL</bcp14>", "<bcp14>SHALL
NOT</bcp14>", "<bcp14>SHOULD</bcp14>", "<bcp14>SHOULD NOT</bcp14>", "<bcp14>RECOMMENDED</bcp14>", "<bcp14>NOT RECOMMENDED</bcp14>",
"<bcp14>MAY</bcp14>", and "<bcp14>OPTIONAL</bcp14>" in this document are to be interpreted as
described in BCP 14 <xref target="RFC2119"/> <xref target="RFC8174"/> when, and only when, they
appear in all capitals, as shown here.</t>
      <t>This document uses the notation from <xref target="QUIC"/> for the format of the new capsule definition. Where fields are encoded using the variable-length integer, they need not be encoded on the minimum number of bytes.</t>
      <t>In this document, the term "UDP proxy" aligns with the definition in <xref target="CONNECT-UDP"/>, and the term "intermediary" refers to an HTTP intermediary as defined in <xref section="3.7" sectionFormat="of" target="RFC9110"/>.</t>
      <t>The term "HTTP/3 Datagram flow" describes the HTTP/3 Datagrams associated with the same HTTP request, .e.g a Connect-UDP request <xref target="CONNECT-UDP"/> or a Connect-IP request <xref target="CONNECT-IP"/>.</t>
    </section>
    <section anchor="negotiating-the-extension-between-peers">
      <name>Negotiating The Extension Between Peers</name>
      <t>Peers indicate support for this extension by including the boolean-valued Item Structured Field "DG-Retrans: ?1" in the HTTP Request and Response headers (See <xref section="3.3.6" sectionFormat="of" target="RFC8941"/> for information about the boolean format.). Peers <bcp14>MUST NOT</bcp14> use any following mechanisms described by this extension unless the support is explicitly expressed.</t>
    </section>
    <section anchor="retx_signaling">
      <name>Signaling HTTP/3 Datagram Retransmission Limit</name>
      <t>This document defines a new Capsule Type SET_H3_DGRAM_RETX_LIMIT to communicate how many times an HTTP/3 Datagram can be retransmitted at most between peers. Note, the retransmission limit takes effect within the scope of an HTTP/3 Datagram flow.</t>
      <t>The format of the SET_H3_DGRAM_RETX_LIMIT capsule is shown in <xref target="capsule-format"/>. It has the following fields:</t>
      <t>Context ID: It is the Context ID defined in <xref target="CONNECT-UDP"/> or <xref target="CONNECT-IP"/>. It describes the effect scope of the capsule. It is optional. If the Capsule Type is 0xbb (tentative), the capsule has no Context ID field, and the retransmission limit applies to all contexts.</t>
      <t>Retransmission Limit: It is the maximum retransmission number of an HTTP/3 Datagram.</t>
      <figure anchor="capsule-format">
        <name>SET_H3_DGRAM_RETX_LIMIT Format</name>
        <artwork><![CDATA[
SET_H3_DGRAM_RETX_LIMIT {
    Capsule Type (i) = 0xba..0xbb,
    Capsule Length (i),
    [Context ID (i)],
    Retransmission Limit (i),
}
]]></artwork>
      </figure>
      <t>When a peer that recognizes SET_H3_DGRAM_RETX_LIMIT capsules receives a SET_H3_DGRAM_RETX_LIMIT capsule, if it is using HTTP/3 Datagrams, it <bcp14>MUST</bcp14> start to retransmit lost HTTP/3 Datagrams until they are acknowledged or their retransmission limit specified in the capsule is reached. If the peer is an intermediary, it <bcp14>SHOULD NOT</bcp14> forward the capsule to the next hop, as the aim of retransmissions is to recover the lost packets at the probably lossy last-mile link between the client and the first hop proxy. If an intermediary does not recognize SET_H3_DGRAM_RETX_LIMIT capsules, it <bcp14>SHOULD</bcp14> forward the capsules without any modification for the future extensibility as suggested by <xref target="HTTP-DATAGRAM"/>.</t>
      <t>Finding the best way to set the limit of retransmission is out of this document's scope. Nonetheless, a possible way to calculate the retransmission limit is as follows. Considering the reference scenario of this document (shown in <xref target="fig-scenario"/>), the client can set its local retransmission limit to floor(RTT2 / RTT1) and use the SET_H3_DGRAM_RETX_LIMIT capsule to set the proxy's retransmission limit to floor(RTT2 / RTT1). As the loss detection algorithm takes at least one RTT to detect a packet loss, this setting intends to only allow a lost packet to be retransmitted by the tunnel before it is retransmitted by the end-to-end QUIC connection. Note, the client can subtract RTT1 from the RTT of the end-to-end QUIC connection to get RTT2.</t>
      <figure anchor="fig-scenario">
        <name>The reference scenario</name>
        <artwork><![CDATA[
┌───────────────┐              ┌─────────┐            ┌───────────┐
│  QUIC Client  │    RTT1      │UDP Proxy│    RTT2    │QUIC Server│
├───────────────┼──────────────┤         ├────────────┤           │
│ MASQUE Client │              │         │            │           │
└───────────────┘              └─────────┘            └───────────┘
]]></artwork>
      </figure>
    </section>
    <section anchor="updating-http3-datagram-retransmission-limit">
      <name>Updating HTTP/3 Datagram Retransmission Limit</name>
      <t>A peer can just send a new SET_H3_DGRAM_RETX_LIMIT capsule to update the retransmission limit of its peer if necessary. Note, the new limit will overwrite the old limit specified by a previous SET_H3_DGRAM_RETX_LIMIT capsule.</t>
    </section>
    <section anchor="retx_handling">
      <name>Handling Lost HTTP/3 Datagrams</name>
      <t>HTTP/3 Datagrams are encoded in QUIC DATAGRAM frames. As described in <xref target="QUIC-DATAGRAM"/>, QUIC <bcp14>MAY</bcp14> notify the sender upon a QUIC DATAGRAM frame is acknowledged or declared lost by the loss detection algorithm. This extension relies on the notifications of the acknowledgement and loss of QUIC DATAGRAM frames to handle the retransmission of lost HTTP/3 Datagrams.</t>
      <t>A reference way of implementation is as follows. First, when the HTTP/3 Datagram layer calls the unreliable sending API of QUIC to send an HTTP/3 Datagram, it gets a connection-level unique ID (DATAGRAM_ID) from QUIC that corresponds to the underlying QUIC DATAGRAM frame. Then, if the retransmission limit is larger than zero, the HTTP/3 Datagram layer generates a record {id = DATAGRAM_ID, retx_times = 0} for the HTTP/3 Datagram. Afterwards, whether the HTTP/3 Datagram is acknowledged or declared lost, the HTTP/3 Datagram layer will get a corresponding notification. For the acknowledgement notification, the HTTP/3 Datagram layer just deletes the record. For the loss notification, the HTTP/3 Datagram layer retransmits the HTTP/3 Datagram and updates the id and retx_times of the record if the retransmission limit permits, otherwise, the record is deleted. Note, as QUIC holds the HTTP/3 Datagram as the payload of the QUIC DATAGRAM frame, the payload can be returned to the HTTP/3 Datagram layer for retransmission, which saves the HTTP/3 Datagram layer from buffering HTTP/3 Datagrams for retransmission.</t>
    </section>
    <section anchor="security-considerations">
      <name>Security Considerations</name>
      <t>This extension adds no additional considerations to those presented in <xref target="HTTP-DATAGRAM"/>.</t>
    </section>
    <section anchor="iana-considerations">
      <name>IANA Considerations</name>
      <t>This document adds following entry to the "Hypertext Transfer Protocol (HTTP) Field Name Registry":</t>
      <table anchor="tab-http-registry">
        <name>New HTTP Header Field</name>
        <thead>
          <tr>
            <th align="left">Header Field</th>
            <th align="left">Status</th>
            <th align="left">Reference</th>
          </tr>
        </thead>
        <tbody>
          <tr>
            <td align="left">DG-Retrans</td>
            <td align="left">Exp</td>
            <td align="left">This document</td>
          </tr>
        </tbody>
      </table>
      <t>This document adds following entries to the "HTTP Capsule Types" registry:</t>
      <table anchor="tab-capsule-registry">
        <name>New Capsule Type</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">SET_H3_DGRAM_RETX_LIMIT</td>
            <td align="left">0xba, 0xbb</td>
            <td align="left">This document</td>
          </tr>
        </tbody>
      </table>
    </section>
  </middle>
  <back>
    <references>
      <name>References</name>
      <references>
        <name>Normative References</name>
        <reference anchor="HTTP-DATAGRAM">
          <front>
            <title>HTTP Datagrams and the Capsule Protocol</title>
            <author fullname="D. Schinazi" initials="D." surname="Schinazi">
              <organization/>
            </author>
            <author fullname="L. Pardue" initials="L." surname="Pardue">
              <organization/>
            </author>
            <date month="August" year="2022"/>
            <abstract>
              <t>This document describes HTTP Datagrams, a convention for conveying multiplexed, potentially unreliable datagrams inside an HTTP connection.</t>
              <t>In HTTP/3, HTTP Datagrams can be sent unreliably using the QUIC DATAGRAM extension. When the QUIC DATAGRAM frame is unavailable or undesirable, HTTP Datagrams can be sent using the Capsule Protocol, which is a more general convention for conveying data in HTTP connections.</t>
              <t>HTTP Datagrams and the Capsule Protocol are intended for use by HTTP extensions, not applications.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="9297"/>
          <seriesInfo name="DOI" value="10.17487/RFC9297"/>
        </reference>
        <reference anchor="QUIC-DATAGRAM">
          <front>
            <title>An Unreliable Datagram Extension to QUIC</title>
            <author fullname="T. Pauly" initials="T." surname="Pauly">
              <organization/>
            </author>
            <author fullname="E. Kinnear" initials="E." surname="Kinnear">
              <organization/>
            </author>
            <author fullname="D. Schinazi" initials="D." surname="Schinazi">
              <organization/>
            </author>
            <date month="March" year="2022"/>
            <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.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="9221"/>
          <seriesInfo name="DOI" value="10.17487/RFC9221"/>
        </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="CONNECT-UDP">
          <front>
            <title>Proxying UDP in HTTP</title>
            <author fullname="D. Schinazi" initials="D." surname="Schinazi">
              <organization/>
            </author>
            <date month="August" year="2022"/>
            <abstract>
              <t>This document describes how to proxy UDP in HTTP, similar to how the HTTP CONNECT method allows proxying TCP in HTTP. More specifically, this document defines a protocol that allows an HTTP client to create a tunnel for UDP communications through an HTTP server that acts as a proxy.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="9298"/>
          <seriesInfo name="DOI" value="10.17487/RFC9298"/>
        </reference>
        <reference anchor="CONNECT-IP">
          <front>
            <title>IP Proxying Support for HTTP</title>
            <author fullname="Tommy Pauly" initials="T." surname="Pauly">
              <organization>Apple Inc.</organization>
            </author>
            <author fullname="David Schinazi" initials="D." surname="Schinazi">
              <organization>Google LLC</organization>
            </author>
            <author fullname="Alex Chernyakhovsky" initials="A." surname="Chernyakhovsky">
              <organization>Google LLC</organization>
            </author>
            <author fullname="Mirja Kühlewind" initials="M." surname="Kühlewind">
              <organization>Ericsson</organization>
            </author>
            <author fullname="Magnus Westerlund" initials="M." surname="Westerlund">
              <organization>Ericsson</organization>
            </author>
            <date day="27" month="September" year="2022"/>
            <abstract>
              <t>   This document describes a method of proxying IP packets over HTTP.
   This protocol is similar to CONNECT-UDP, but allows transmitting
   arbitrary IP packets, without being limited to just TCP like CONNECT
   or UDP like CONNECT-UDP.

              </t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-ietf-masque-connect-ip-03"/>
        </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="RFC9110">
          <front>
            <title>HTTP Semantics</title>
            <author fullname="R. Fielding" initials="R." role="editor" surname="Fielding">
              <organization/>
            </author>
            <author fullname="M. Nottingham" initials="M." role="editor" surname="Nottingham">
              <organization/>
            </author>
            <author fullname="J. Reschke" initials="J." role="editor" surname="Reschke">
              <organization/>
            </author>
            <date month="June" year="2022"/>
            <abstract>
              <t>The Hypertext Transfer Protocol (HTTP) is a stateless application-level protocol for distributed, collaborative, hypertext information systems. This document describes the overall architecture of HTTP, establishes common terminology, and defines aspects of the protocol that are shared by all versions. In this definition are core protocol elements, extensibility mechanisms, and the "http" and "https" Uniform Resource Identifier (URI) schemes. </t>
              <t>This document updates RFC 3864 and obsoletes RFCs 2818, 7231, 7232, 7233, 7235, 7538, 7615, 7694, and portions of 7230.</t>
            </abstract>
          </front>
          <seriesInfo name="STD" value="97"/>
          <seriesInfo name="RFC" value="9110"/>
          <seriesInfo name="DOI" value="10.17487/RFC9110"/>
        </reference>
      </references>
      <references>
        <name>Informative References</name>
        <reference anchor="MASQUE-EVALUATION">
          <front>
            <title>Evaluation of QUIC-based MASQUE proxying</title>
            <author fullname="Mirja Kühlewind" initials="M." surname="Kühlewind">
              <organization>Ericsson, Herzogenrath, Germany</organization>
            </author>
            <author fullname="Matias Carlander-Reuterfelt" initials="M." surname="Carlander-Reuterfelt">
              <organization>Ericsson, Madrid, Spain</organization>
            </author>
            <author fullname="Marcus Ihlar" initials="M." surname="Ihlar">
              <organization>Ericsson, Stockholm, Sweden</organization>
            </author>
            <author fullname="Magnus Westerlund" initials="M." surname="Westerlund">
              <organization>Ericsson, Stockholm, Sweden</organization>
            </author>
            <date month="December" year="2021"/>
          </front>
          <seriesInfo name="Proceedings of the 2021 Workshop on Evolution, Performance and Interoperability of" value="QUIC"/>
          <seriesInfo name="DOI" value="10.1145/3488660.3493806"/>
        </reference>
        <reference anchor="PR">
          <front>
            <title>iCloud Private Relay Overview</title>
            <author>
              <organization>Apple Inc.</organization>
            </author>
            <date year="2021"/>
          </front>
        </reference>
        <reference anchor="RFC7540">
          <front>
            <title>Hypertext Transfer Protocol Version 2 (HTTP/2)</title>
            <author fullname="M. Belshe" initials="M." surname="Belshe">
              <organization/>
            </author>
            <author fullname="R. Peon" initials="R." surname="Peon">
              <organization/>
            </author>
            <author fullname="M. Thomson" initials="M." role="editor" surname="Thomson">
              <organization/>
            </author>
            <date month="May" year="2015"/>
            <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="RFC9114">
          <front>
            <title>HTTP/3</title>
            <author fullname="M. Bishop" initials="M." role="editor" surname="Bishop">
              <organization/>
            </author>
            <date month="June" year="2022"/>
            <abstract>
              <t>The QUIC transport protocol has several features that are desirable in a transport for HTTP, such as stream multiplexing, per-stream flow control, and low-latency connection establishment.  This document describes a mapping of HTTP semantics over QUIC.  This document also identifies HTTP/2 features that are subsumed by QUIC and describes how HTTP/2 extensions can be ported to HTTP/3.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="9114"/>
          <seriesInfo name="DOI" value="10.17487/RFC9114"/>
        </reference>
        <reference anchor="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>
      </references>
    </references>
    <section numbered="false" anchor="contributors">
      <name>Contributors</name>
      <t>TBD.</t>
    </section>
    <section numbered="false" anchor="acknowledgments">
      <name>Acknowledgments</name>
      <t>The authors would like to thank Qinghua Wu, Jiaxing Zhang, and Zhenyu Li for
discussions and comments on the design of this draft.</t>
    </section>
  </back>
  <!-- ##markdown-source:
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

-->

</rfc>
