<?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.6.2 (Ruby 3.0.3) -->
<rfc xmlns:xi="http://www.w3.org/2001/XInclude" ipr="trust200902" docName="draft-ietf-webtrans-http2-03" category="std" consensus="true" tocInclude="true" sortRefs="true" symRefs="true" version="3">
  <!-- xml2rfc v2v3 conversion 3.12.3 -->
  <front>
    <title abbrev="WebTransport-H2">WebTransport using HTTP/2</title>
    <seriesInfo name="Internet-Draft" value="draft-ietf-webtrans-http2-03"/>
    <author initials="A." surname="Frindell" fullname="Alan Frindell">
      <organization>Facebook Inc.</organization>
      <address>
        <email>afrind@fb.com</email>
      </address>
    </author>
    <author initials="E." surname="Kinnear" fullname="Eric Kinnear">
      <organization>Apple Inc.</organization>
      <address>
        <postal>
          <street>One Apple Park Way</street>
          <city>Cupertino, California 95014</city>
          <country>United States of America</country>
        </postal>
        <email>ekinnear@apple.com</email>
      </address>
    </author>
    <author initials="T." surname="Pauly" fullname="Tommy Pauly">
      <organization>Apple Inc.</organization>
      <address>
        <postal>
          <street>One Apple Park Way</street>
          <city>Cupertino, California 95014</city>
          <country>United States of America</country>
        </postal>
        <email>tpauly@apple.com</email>
      </address>
    </author>
    <author initials="M." surname="Thomson" fullname="Martin Thomson">
      <organization>Mozilla</organization>
      <address>
        <email>mt@lowentropy.net</email>
      </address>
    </author>
    <author initials="V." surname="Vasiliev" fullname="Victor Vasiliev">
      <organization>Google</organization>
      <address>
        <email>vasilvv@google.com</email>
      </address>
    </author>
    <author initials="G." surname="Xie" fullname="Guowu Xie">
      <organization>Facebook Inc.</organization>
      <address>
        <email>woo@fb.com</email>
      </address>
    </author>
    <date/>
    <area>art</area>
    <workgroup>webtrans</workgroup>
    <keyword>Internet-Draft</keyword>
    <abstract>
      <t>WebTransport defines a set of low-level communications features designed for
client-server interactions that are initiated by Web clients.  This document
describes a protocol that can provide many of the capabilities of WebTransport
over HTTP/2.  This protocol enables the use of WebTransport when a UDP-based
protocol is not available.</t>
    </abstract>
    <note>
      <name>Note to Readers</name>
      <t>Discussion of this draft takes place on the WebTransport mailing list
(<eref target="mailto:webtransport@ietf.org">webtransport@ietf.org</eref>), which is archived at
<eref target="https://mailarchive.ietf.org/arch/search/?email_list=webtransport"/>.</t>
      <t>The repository tracking the issues for this draft can be found at
<eref target="https://github.com/ietf-wg-webtrans/draft-webtransport-http2"/>. The web API
draft corresponding to this document can be found at
<eref target="https://w3c.github.io/webtransport/"/>.</t>
    </note>
  </front>
  <middle>
    <section anchor="introduction">
      <name>Introduction</name>
      <t>WebTransport <xref target="OVERVIEW"/> is designed to provide generic communication
capabilities to Web clients that use HTTP/3 <xref target="HTTP3"/>.  The
HTTP/3 WebTransport protocol <xref target="WEBTRANSPORT-H3"/> allows Web clients to use QUIC
<xref target="QUIC"/> features such as streams or datagrams
<xref target="DATAGRAM"/>.  However, there are some environments
where QUIC cannot be deployed.</t>
      <t>This document defines a protocol that provides all of the core functions of
WebTransport using HTTP semantics. This includes unidirectional streams,
bidirectional streams, and datagrams.</t>
      <t>By relying only on generic HTTP semantics, this protocol might allow deployment
using any HTTP version.  However, this document only defines negotiation for
HTTP/2 <xref target="H2"/> as the current most common TCP-based
fallback to HTTP/3.</t>
      <section anchor="terminology">
        <name>Terminology</name>
        <t>The keywords "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"/> <xref target="RFC8174"/>
when, and only when, they appear in all capitals, as shown here.</t>
        <t>This document follows terminology defined in <xref section="1.2" sectionFormat="of" target="OVERVIEW"/>. Note
that this document distinguishes between a WebTransport server and an HTTP/2
server. An HTTP/2 server is the server that terminates HTTP/2 connections; a
WebTransport server is an application that accepts WebTransport sessions, which
can be accessed using HTTP/2 and this protocol.</t>
      </section>
    </section>
    <section anchor="protocol-overview">
      <name>Protocol Overview</name>
      <t>WebTransport servers are identified by an HTTPS URI as defined in <xref section="4.2.2" sectionFormat="of" target="HTTP"/>.</t>
      <t>When an HTTP/2 connection is established, both the client and server have to
send a SETTINGS_ENABLE_WEBTRANSPORT setting in order to indicate that they
both support WebTransport over HTTP/2.</t>
      <t>A client initiates a WebTransport session by sending an extended CONNECT request
<xref target="RFC8441"/>. If the server accepts the request, a WebTransport session is
established. The stream that carries the CONNECT request is used to exchange
bidirectional data for the session. This stream will be referred to as a
<em>CONNECT stream</em>.  The stream ID of a CONNECT stream, which will be referrred to
as a <em>Session ID</em>, is used to uniquely identify a given WebTransport session
within the connection.</t>
      <t>After the session is established, endpoints exchange <em>WebTransport frames</em> using
the bidirectional CONNECT stream. Within this stream, <em>WebTransport streams</em> and
<em>WebTransport datagrams</em> are multiplexed.  In HTTP/2, WebTransport frames are
carried in HTTP/2 DATA frames.  Multiple independent WebTransport sessions can
share a connection if the HTTP version supports that, as HTTP/2 does.</t>
      <t>WebTransport frames closely mirror a subset of QUIC frames and provide the
essential WebTransport features.  Within a WebTransport session, endpoints can</t>
      <ul spacing="normal">
        <li>create and use bidirectional or unidirectional streams with no additional
round trips using <xref target="WT_STREAM" format="none">WT_STREAM</xref><iref item="WT_STREAM"/> frames</li>
      </ul>
      <t>Stream creation and data flow on streams uses flow control mechanisms modeled on
those in QUIC. Flow control is managed using the WebTransport frames:
<xref target="WT_MAX_DATA" format="none">WT_MAX_DATA</xref><iref item="WT_MAX_DATA"/>, <xref target="WT_MAX_STREAM_DATA" format="none">WT_MAX_STREAM_DATA</xref><iref item="WT_MAX_STREAM_DATA"/>, <xref target="WT_MAX_STREAMS" format="none">WT_MAX_STREAMS</xref><iref item="WT_MAX_STREAMS"/>, <xref target="WT_DATA_BLOCKED" format="none">WT_DATA_BLOCKED</xref><iref item="WT_DATA_BLOCKED"/>,
<xref target="WT_STREAM_DATA_BLOCKED" format="none">WT_STREAM_DATA_BLOCKED</xref><iref item="WT_STREAM_DATA_BLOCKED"/>, and <xref target="WT_STREAMS_BLOCKED" format="none">WT_STREAMS_BLOCKED</xref><iref item="WT_STREAMS_BLOCKED"/>. Flow control for the CONNECT
stream as a whole, as provided by the HTTP version in use, applies in addition
to any WebTransport-session-level flow control.</t>
      <t>WebTransport streams can be aborted using a <xref target="WT_RESET_STREAM" format="none">WT_RESET_STREAM</xref><iref item="WT_RESET_STREAM"/> frame and a receiver
can request that a sender stop sending with a <xref target="WT_STOP_SENDING" format="none">WT_STOP_SENDING</xref><iref item="WT_STOP_SENDING"/> frame.</t>
      <t>A WebTransport session is terminated when the CONNECT stream that created it is
closed. This implicitly closes all WebTransport streams that were
multiplexed over that CONNECT stream.</t>
    </section>
    <section anchor="session-establishment">
      <name>Session Establishment</name>
      <section anchor="establishing-a-transport-capable-http2-connection">
        <name>Establishing a Transport-Capable HTTP/2 Connection</name>
        <t>In order to indicate support for WebTransport, both the client and the server
MUST send a SETTINGS_ENABLE_WEBTRANSPORT value set to "1" in their SETTINGS
frame. Endpoints MUST NOT use any WebTransport-related functionality unless the
parameter has been negotiated.</t>
      </section>
      <section anchor="extended-connect-in-http2">
        <name>Extended CONNECT in HTTP/2</name>
        <t><xref target="RFC8441"/> defines an extended CONNECT method in <xref target="features"/>, enabled by the
SETTINGS_ENABLE_CONNECT_PROTOCOL parameter. An endpoint does not need to send
both SETTINGS_ENABLE_CONNECT_PROTOCOL and SETTINGS_ENABLE_WEBTRANSPORT; the
SETTINGS_ENABLE_WEBTRANSPORT setting implies that an endpoint supports extended
CONNECT.</t>
      </section>
      <section anchor="creating-a-new-session">
        <name>Creating a New Session</name>
        <t>As WebTransport sessions are established over HTTP, they are identified
using the <tt>https</tt> URI scheme <xref target="RFC7230"/>.</t>
        <t>In order to create a new WebTransport session, a client can send an HTTP CONNECT
request. The <tt>:protocol</tt> pseudo-header field (<xref target="RFC8441"/>) MUST be set to
<tt>webtransport</tt> (<xref section="7.1" sectionFormat="of" target="WEBTRANSPORT-H3"/>). The <tt>:scheme</tt> field MUST be
<tt>https</tt>. Both the <tt>:authority</tt> and the <tt>:path</tt> value MUST be set; those fields
indicate the desired WebTransport server. In a Web context, the request MUST
include an <tt>Origin</tt> header field <xref target="ORIGIN"/> that includes the origin of
the site that requested the creation of the session.</t>
        <t>Upon receiving an extended CONNECT request with a <tt>:protocol</tt> field set to
<tt>webtransport</tt>, the HTTP server checks if the identified resource supports
WebTransport sessions. If the resource does not, the server SHOULD reply with status
code 404 (<xref section="6.5.4" sectionFormat="of" target="RFC7231"/>). To accept a WebTransport session the
server replies with 2xx status code. Before accepting a session, a server MUST
ensure that it authorizes use of the session by the site identified in the
<tt>Origin</tt> header.</t>
        <t>From the client's perspective, a WebTransport session is established when the
client receives a 200 response. From the server's perspective, a session is
established once it sends a 200 response. Both endpoints MUST NOT send any
WebTransport frames on a given session before that session is established.</t>
      </section>
      <section anchor="limiting-the-number-of-simultaneous-sessions">
        <name>Limiting the Number of Simultaneous Sessions</name>
        <t>From a flow control perspective, WebTransport sessions count against HTTP/2
session flow control limits just like regular HTTP requests, since they are
established via an HTTP CONNECT request. This document does not make any effort
to introduce a separate flow control mechanism for WebTransport sessions. If
the server needs to limit the rate of incoming requests, it has alternative
mechanisms at its disposal:</t>
        <ul spacing="normal">
          <li>
            <tt>HTTP_STREAM_REFUSED</tt> error code defined in <xref target="RFC7540"/> indicates to the
receiving HTTP/2 stack that the request was not processed in any way.</li>
          <li>HTTP status code 429 indicates that the request was rejected due to rate
limiting <xref target="RFC6585"/>. Unlike the previous method, this signal is directly
propagated to the application.</li>
        </ul>
      </section>
    </section>
    <section anchor="features">
      <name>WebTransport Features</name>
      <t>WebTransport over TCP-based HTTP semantics provides the following features
described in <xref target="OVERVIEW"/>: unidirectional streams, bidirectional streams, and
datagrams, initiated by either endpoint.</t>
      <t>WebTransport streams and datagrams that belong to different WebTransport
sessions are identified by the CONNECT stream on which they are transmitted,
with one WebTransport session consuming one CONNECT stream.</t>
      <section anchor="transport-considerations">
        <name>Transport Considerations</name>
        <t>Because WebTransport over TCP-based HTTP semantics relies on the underlying
protocols to provide in order and reliable delivery, there are some notable
differences from the way in which QUIC handles application data.</t>
        <t>Endpoints MUST send stream data in order. As there is no ordering mechanism
available for the receiver to reassemble incoming data, receivers assume that
all data arriving in STREAM frames is contiguous and in order.</t>
        <t>DATAGRAM frames are delivered to the remote WebTransport endpoint reliably,
however this does not require that the receiving implementation deliver that
data to the application in a reliable manner.</t>
      </section>
      <section anchor="webtransport-stream-states">
        <name>WebTransport Stream States</name>
        <t>WebTransport streams have states that mirror the states of QUIC streams
(<xref section="3" sectionFormat="of" target="RFC9000"/>) as closely as possible to aid in ease of
implementation.</t>
        <t>Because WebTransport does not provide an acknowledgement mechanism for
WebTransport frames, it relies on the underlying transport's in order delivery
to inform stream state transitions. Wherever QUIC relies on receiving an ack
for a packet to transition between stream states, WebTransport performs that
transition immediately.</t>
      </section>
    </section>
    <section anchor="webtransport-frames">
      <name>WebTransport Frames</name>
      <t>WebTransport frames mirror their QUIC counterparts as closely as possible to
enable maximal reuse of any applicable QUIC infrastructure by implementors.</t>
      <t>A WebTransport frame begins with a Frame Type and Frame Length which are
followed by zero or more fields that are type-dependent.</t>
      <figure anchor="fig-wt_frame_header">
        <name>WebTransport Frame Format</name>
        <artwork><![CDATA[
Frame {
  Frame Type (i),
  Frame Length (i),
  Type-Dependent Fields (..),
}
]]></artwork>
      </figure>
      <t>The Frame Type field indicates the type of the frame, defining what
type-dependent fields will be present.</t>
      <t>The Frame Length field indicates the length of the WebTransport frame, including
all type-dependent fields and other information. It does not include the size
of the Frame Type or Frame Length fields themselves.</t>
      <t>Both of these fields use a variable-length integer encoding (see <xref section="16" sectionFormat="of" target="RFC9000"/>), with one exception. To ensure simple and efficient
implementations of frame parsing, the frame type and length MUST use the
shortest possible encoding. For example, for the frame types defined in this
document, this means a single-byte encoding, even though it is possible to
encode these values as a two-, four-, or eight-byte variable-length integer.</t>
      <section anchor="WT_PADDING">
        <name>WT_PADDING Frames</name>
        <t>A <xref target="WT_PADDING" format="none">WT_PADDING</xref><iref item="WT_PADDING"/> frame (type=0x00) has no semantic value. PADDING frames can be used
to introduce additional data between other WebTransport frames and can also be
used to provide protection against traffic analysis or for other reasons.</t>
        <figure anchor="fig-wt_padding">
          <name>WT_PADDING Frame Format</name>
          <artwork><![CDATA[
WT_PADDING Frame {
  Type (i) = 0x00,
  Length (i),
  Padding (..),
}
]]></artwork>
        </figure>
        <t>The Padding field MUST be set to an all-zero sequence of bytes of any length as
specified by the Length field.
<!-- TODO validation and error handling -->
        </t>
      </section>
      <section anchor="WT_RESET_STREAM">
        <name>WT_RESET_STREAM Frames</name>
        <t>A WebTransport frame called <xref target="WT_RESET_STREAM" format="none">WT_RESET_STREAM</xref><iref item="WT_RESET_STREAM"/> is introduced for either endpoint to
abruptly terminate the sending part of a WebTransport stream.</t>
        <t>An endpoint uses a <xref target="WT_RESET_STREAM" format="none">WT_RESET_STREAM</xref><iref item="WT_RESET_STREAM"/> frame (type=0x04) to abruptly terminate the
sending part of a stream.</t>
        <t>After sending a <xref target="WT_RESET_STREAM" format="none">WT_RESET_STREAM</xref><iref item="WT_RESET_STREAM"/>, an endpoint ceases transmission and
retransmission of <xref target="WT_STREAM" format="none">WT_STREAM</xref><iref item="WT_STREAM"/> frames on the identified stream. A receiver of
<xref target="WT_RESET_STREAM" format="none">WT_RESET_STREAM</xref><iref item="WT_RESET_STREAM"/> can discard any data that it already received on that stream.</t>
        <figure anchor="fig-wt_reset_stream">
          <name>WT_RESET_STREAM Frame Format</name>
          <artwork><![CDATA[
WT_RESET_STREAM Frame {
  Type (i) = 0x04,
  Length (i),
  Stream ID (i),
  Application Protocol Error Code (i),
}
]]></artwork>
        </figure>
        <t>The <xref target="WT_RESET_STREAM" format="none">WT_RESET_STREAM</xref><iref item="WT_RESET_STREAM"/> frame defines the following fields:</t>
        <dl>
          <dt>Stream ID:</dt>
          <dd>
            <t>A variable-length integer encoding of the WebTransport stream ID
   of the stream being terminated.</t>
          </dd>
          <dt>Application Protocol Error Code:</dt>
          <dd>
            <t>A variable-length integer containing the
   application protocol error code that indicates why the stream is being
   closed.</t>
          </dd>
        </dl>
        <t>Unlike the equivalent QUIC frame, this frame does not include a Final Size
field. In-order delivery of <xref target="WT_STREAM" format="none">WT_STREAM</xref><iref item="WT_STREAM"/> frames ensures that the amount of
session-level flow control consumed by a stream is always known by both
endpoints.</t>
      </section>
      <section anchor="WT_STOP_SENDING">
        <name>WT_STOP_SENDING Frames</name>
        <t>A WebTransport frame called <xref target="WT_STOP_SENDING" format="none">WT_STOP_SENDING</xref><iref item="WT_STOP_SENDING"/> is introduced to communicate that
incoming data is being discarded on receipt per application request.
<xref target="WT_STOP_SENDING" format="none">WT_STOP_SENDING</xref><iref item="WT_STOP_SENDING"/> requests that a peer cease transmission on a stream.</t>
        <figure anchor="fig-wt_stop_sending">
          <name>WT_STOP_SENDING Frame Format</name>
          <artwork><![CDATA[
WT_STOP_SENDING Frame {
  Type (i) = 0x05,
  Length (i),
  Stream ID (i),
  Application Protocol Error Code (i),
}
]]></artwork>
        </figure>
        <t>The <xref target="WT_STOP_SENDING" format="none">WT_STOP_SENDING</xref><iref item="WT_STOP_SENDING"/> frame defines the following fields:</t>
        <dl>
          <dt>Stream ID:</dt>
          <dd>
            <t>A variable-length integer carrying the WebTransport stream ID of
   the stream being ignored.</t>
          </dd>
          <dt>Application Protocol Error Code:</dt>
          <dd>
            <t>A variable-length integer containing the
   application-specified reason the sender is ignoring the stream.</t>
          </dd>
        </dl>
      </section>
      <section anchor="WT_STREAM">
        <name>WT_STREAM Frames</name>
        <t><xref target="WT_STREAM" format="none">WT_STREAM</xref><iref item="WT_STREAM"/> frames implicitly create a stream and carry stream data.</t>
        <t>The Type field in the <xref target="WT_STREAM" format="none">WT_STREAM</xref><iref item="WT_STREAM"/> frame is either 0x0a or 0x0b.  This uses the
same frame types as a QUIC STREAM frame with the OFF bit clear and the LEN bit
set.  The FIN bit (0x01) in the frame type indicates that the frame marks the
end of the stream in one direction.  Stream data consists of any number of 0x0a
frames followed by a terminal 0x0b frame.</t>
        <figure anchor="fig-wt_stream">
          <name>WT_STREAM Frame Format</name>
          <artwork><![CDATA[
WT_STREAM Frame {
  Type (i) = 0x0a..0x0b,
  Length (i),
  Stream ID (i),
  Stream Data (..),
}
]]></artwork>
        </figure>
        <t><xref target="WT_STREAM" format="none">WT_STREAM</xref><iref item="WT_STREAM"/> frames contain the following fields:</t>
        <dl>
          <dt>Stream ID:</dt>
          <dd>
            <t>The stream ID for the stream.</t>
          </dd>
          <dt>Stream Data:</dt>
          <dd>
            <t>Zero or more bytes of data for the stream.  Empty <xref target="WT_STREAM" format="none">WT_STREAM</xref><iref item="WT_STREAM"/> frames MUST NOT be
used unless they open or close a stream; an endpoint MAY treat an empty
<xref target="WT_STREAM" format="none">WT_STREAM</xref><iref item="WT_STREAM"/> frame that neither starts nor ends a stream as a session error.</t>
          </dd>
        </dl>
      </section>
      <section anchor="WT_MAX_DATA">
        <name>WT_MAX_DATA Frames</name>
        <t>A WebTransport frame called <xref target="WT_MAX_DATA" format="none">WT_MAX_DATA</xref><iref item="WT_MAX_DATA"/> is introduced to inform the peer of the
maximum amount of data that can be sent on the WebTransport session as a
whole.</t>
        <figure anchor="fig-wt_max_data">
          <name>WT_MAX_DATA Frame Format</name>
          <artwork><![CDATA[
WT_MAX_DATA Frame {
  Type (i) = 0x10,
  Length (i),
  Maximum Data (i),
}
]]></artwork>
        </figure>
        <t><xref target="WT_MAX_DATA" format="none">WT_MAX_DATA</xref><iref item="WT_MAX_DATA"/> frames contain the following field:</t>
        <dl>
          <dt>Maximum Data:</dt>
          <dd>
            <t>A variable-length integer indicating the maximum amount of data
   that can be sent on the entire connection, in units of bytes.</t>
          </dd>
        </dl>
        <t>All data sent in <xref target="WT_STREAM" format="none">WT_STREAM</xref><iref item="WT_STREAM"/> frames counts toward this limit. The sum of the
lengths of Stream Data fields in <xref target="WT_STREAM" format="none">WT_STREAM</xref><iref item="WT_STREAM"/> frames MUST NOT exceed the value
advertised by a receiver.</t>
      </section>
      <section anchor="WT_MAX_STREAM_DATA">
        <name>WT_MAX_STREAM_DATA Frames</name>
        <t>A WebTransport frame called <xref target="WT_MAX_STREAM_DATA" format="none">WT_MAX_STREAM_DATA</xref><iref item="WT_MAX_STREAM_DATA"/> is introduced to inform a peer of
the maximum amount of data that can be sent on a stream.</t>
        <figure anchor="fig-wt_max_stream_data">
          <name>WT_MAX_STREAM_DATA Frame Format</name>
          <artwork><![CDATA[
WT_MAX_STREAM_DATA Frame {
  Type (i) = 0x11,
  Length (i),
  Stream ID (i),
  Maximum Stream Data (i),
}
]]></artwork>
        </figure>
        <t><xref target="WT_MAX_STREAM_DATA" format="none">WT_MAX_STREAM_DATA</xref><iref item="WT_MAX_STREAM_DATA"/> frames contain the following fields:</t>
        <dl>
          <dt>Stream ID:</dt>
          <dd>
            <t>The stream ID of the affected WebTransport stream, encoded as a
   variable-length integer.</t>
          </dd>
          <dt>Maximum Stream Data:</dt>
          <dd>
            <t>A variable-length integer indicating the maximum amount
   of data that can be sent on the identified stream, in units of bytes.</t>
          </dd>
        </dl>
        <t>All data sent in <xref target="WT_STREAM" format="none">WT_STREAM</xref><iref item="WT_STREAM"/> frames for the identified stream counts toward this
limit. The sum of the lengths of Stream Data fields in <xref target="WT_STREAM" format="none">WT_STREAM</xref><iref item="WT_STREAM"/> frames on the
identified stream MUST NOT exceed the value advertised by a receiver.</t>
      </section>
      <section anchor="WT_MAX_STREAMS">
        <name>WT_MAX_STREAMS Frames</name>
        <t>A WebTransport frame called <xref target="WT_MAX_STREAMS" format="none">WT_MAX_STREAMS</xref><iref item="WT_MAX_STREAMS"/> is introduced to inform the peer of
the cumulative number of streams of a given type it is permitted to open. A
<xref target="WT_MAX_STREAMS" format="none">WT_MAX_STREAMS</xref><iref item="WT_MAX_STREAMS"/> frame with a type of 0x12 applies to bidirectional streams, and
a <xref target="WT_MAX_STREAMS" format="none">WT_MAX_STREAMS</xref><iref item="WT_MAX_STREAMS"/> frame with a type of 0x13 applies to unidirectional streams.</t>
        <figure anchor="fig-wt_max_streams">
          <name>WT_MAX_STREAMS Frame Format</name>
          <artwork><![CDATA[
WT_MAX_STREAMS Frame {
  Type (i) = 0x12..0x13,
  Length (i),
  Maximum Streams (i),
}
]]></artwork>
        </figure>
        <t><xref target="WT_MAX_STREAMS" format="none">WT_MAX_STREAMS</xref><iref item="WT_MAX_STREAMS"/> frames contain the following field:</t>
        <dl>
          <dt>Maximum Streams:</dt>
          <dd>
            <t>A count of the cumulative number of streams of the
   corresponding type that can be opened over the lifetime of the connection.
   This value cannot exceed 2<sup>60</sup>, as it is not possible to encode stream IDs
   larger than 2<sup>62</sup>-1.</t>
          </dd>
        </dl>
        <t>An endpoint MUST NOT open more streams than permitted by the current stream
limit set by its peer. For instance, a server that receives a unidirectional
stream limit of 3 is permitted to open streams 3, 7, and 11, but not stream 15.</t>
        <t>Note that this limit includes streams that have been closed as well as those
that are open.</t>
      </section>
      <section anchor="WT_DATA_BLOCKED">
        <name>WT_DATA_BLOCKED Frames</name>
        <t>A sender SHOULD send a <xref target="WT_DATA_BLOCKED" format="none">WT_DATA_BLOCKED</xref><iref item="WT_DATA_BLOCKED"/> frame (type=0x14) when it wishes to send
data but is unable to do so due to WebTransport session-level flow control.
<xref target="WT_DATA_BLOCKED" format="none">WT_DATA_BLOCKED</xref><iref item="WT_DATA_BLOCKED"/> frames can be used as input to tuning of flow control
algorithms.</t>
        <figure anchor="fig-wt_data_blocked">
          <name>WT_DATA_BLOCKED Frame Format</name>
          <artwork><![CDATA[
WT_DATA_BLOCKED Frame {
  Type (i) = 0x14,
  Length (i),
  Maximum Data (i),
}
]]></artwork>
        </figure>
        <t><xref target="WT_DATA_BLOCKED" format="none">WT_DATA_BLOCKED</xref><iref item="WT_DATA_BLOCKED"/> frames contain the following field:</t>
        <dl>
          <dt>Maximum Data:</dt>
          <dd>
            <t>A variable-length integer indicating the session-level limit
   at which blocking occurred.</t>
          </dd>
        </dl>
      </section>
      <section anchor="WT_STREAM_DATA_BLOCKED">
        <name>WT_STREAM_DATA_BLOCKED Frames</name>
        <t>A sender SHOULD send a <xref target="WT_STREAM_DATA_BLOCKED" format="none">WT_STREAM_DATA_BLOCKED</xref><iref item="WT_STREAM_DATA_BLOCKED"/> frame (type=0x15) when it wishes
to send data but is unable to do so due to stream-level flow control. This
frame is analogous to <xref target="WT_DATA_BLOCKED" format="none">WT_DATA_BLOCKED</xref><iref item="WT_DATA_BLOCKED"/>.</t>
        <figure anchor="fig-wt_stream_data_blocked">
          <name>WT_STREAM_DATA_BLOCKED Frame Format</name>
          <artwork><![CDATA[
WT_STREAM_DATA_BLOCKED Frame {
  Type (i) = 0x15,
  Length (i),
  Stream ID (i),
  Maximum Stream Data (i),
}
]]></artwork>
        </figure>
        <t><xref target="WT_STREAM_DATA_BLOCKED" format="none">WT_STREAM_DATA_BLOCKED</xref><iref item="WT_STREAM_DATA_BLOCKED"/> frames contain the following fields:</t>
        <dl>
          <dt>Stream ID:</dt>
          <dd>
            <t>A variable-length integer indicating the WebTransport stream that
   is blocked due to flow control.</t>
          </dd>
          <dt>Maximum Stream Data:</dt>
          <dd>
            <t>A variable-length integer indicating the offset of the
   stream at which the blocking occurred.</t>
          </dd>
        </dl>
      </section>
      <section anchor="WT_STREAMS_BLOCKED">
        <name>WT_STREAMS_BLOCKED Frames</name>
        <t>A sender SHOULD send a <xref target="WT_STREAMS_BLOCKED" format="none">WT_STREAMS_BLOCKED</xref><iref item="WT_STREAMS_BLOCKED"/> frame (type=0x16 or 0x17) when it
wishes to open a stream but is unable to do so due to the maximum stream limit
set by its peer. A <xref target="WT_STREAMS_BLOCKED" format="none">WT_STREAMS_BLOCKED</xref><iref item="WT_STREAMS_BLOCKED"/> frame of type 0x16 is used to indicate
reaching the bidirectional stream limit, and a STREAMS_BLOCKED frame of type
0x17 is used to indicate reaching the unidirectional stream limit.</t>
        <t>A <xref target="WT_STREAMS_BLOCKED" format="none">WT_STREAMS_BLOCKED</xref><iref item="WT_STREAMS_BLOCKED"/> frame does not open the stream, but informs the peer that a
new stream was needed and the stream limit prevented the creation of the
stream.</t>
        <figure anchor="fig-wt_streams_blocked">
          <name>WT_STREAMS_BLOCKED Frame Format</name>
          <artwork><![CDATA[
WT_STREAMS_BLOCKED Frame {
  Type (i) = 0x16..0x17,
  Length (i),
  Maximum Streams (i),
}
]]></artwork>
        </figure>
        <t><xref target="WT_STREAMS_BLOCKED" format="none">WT_STREAMS_BLOCKED</xref><iref item="WT_STREAMS_BLOCKED"/> frames contain the following field:</t>
        <dl>
          <dt>Maximum Streams:</dt>
          <dd>
            <t>A variable-length integer indicating the maximum number of
   streams allowed at the time the frame was sent. This value cannot exceed
   2<sup>60</sup>, as it is not possible to encode stream IDs larger than 2<sup>62</sup>-1.</t>
          </dd>
        </dl>
      </section>
      <section anchor="WT_DATAGRAM">
        <name>WT_DATAGRAM Frames</name>
        <t>The <xref target="WT_DATAGRAM" format="none">WT_DATAGRAM</xref><iref item="WT_DATAGRAM"/> frame type (0x31) is used to carry datagram traffic. Frame type
0x30 is also reserved to maintain parity with QUIC, but unused, as all
WebTransport frames MUST contain a length field.</t>
        <figure anchor="fig-wt_datagram">
          <name>WT_DATAGRAM Frame Format</name>
          <artwork><![CDATA[
WT_DATAGRAM Frame {
  Type (i) = 0x31,
  Length (i),
  Datagram Data (..),
}
]]></artwork>
        </figure>
        <t><xref target="WT_DATAGRAM" format="none">WT_DATAGRAM</xref><iref item="WT_DATAGRAM"/> frames contain the following fields:</t>
        <dl>
          <dt>Datagram Data:</dt>
          <dd>
            <t>The content of the datagram to be delivered.</t>
          </dd>
        </dl>
        <t>The data in <xref target="WT_DATAGRAM" format="none">WT_DATAGRAM</xref><iref item="WT_DATAGRAM"/> frames is not subject to flow control. The receiver MAY
discard this data if it does not have sufficient space to buffer it.</t>
        <t>An intermediary could forward the data in a <xref target="WT_DATAGRAM" format="none">WT_DATAGRAM</xref><iref item="WT_DATAGRAM"/> frame over another
protocol, such as WebTransport over HTTP/3. In QUIC, a datagram frame can span
at most one packet. Because of that, the applications have to know the maximum
size of the datagram they can send. However, when proxying the datagrams, the
hop-by-hop MTUs can vary.</t>
      </section>
    </section>
    <section anchor="examples">
      <name>Examples</name>
      <t>An example of negotiating a WebTransport Stream on an HTTP/2 connection follows.
This example is intended to closely follow the example in <xref section="5.1" sectionFormat="of" target="RFC8441"/> to help illustrate the differences defined in this document.</t>
      <artwork><![CDATA[
[[ From Client ]]                   [[ From Server ]]

SETTINGS
SETTINGS_ENABLE_WEBTRANSPORT = 1

                                    SETTINGS
                                    SETTINGS_ENABLE_WEBTRANSPORT = 1

HEADERS + END_HEADERS
Stream ID = 3
:method = CONNECT
:protocol = webtransport
:scheme = https
:path = /
:authority = server.example.com
origin: server.example.com

                                    HEADERS + END_HEADERS
                                    Stream ID = 3
                                    :status = 200

WT_STREAM
Stream ID = 5
WebTransport Data

                                    WT_STREAM + FIN
                                    Stream ID = 5
                                    WebTransport Data

WT_STREAM + FIN
Stream ID = 5
WebTransport Data
]]></artwork>
      <t>An example of the server initiating a WebTransport Stream follows. The only
difference here is the endpoint that sends the first <xref target="WT_STREAM" format="none">WT_STREAM</xref><iref item="WT_STREAM"/> frame.</t>
      <artwork><![CDATA[
[[ From Client ]]                   [[ From Server ]]

SETTINGS
SETTINGS_ENABLE_WEBTRANSPORT = 1

                                    SETTINGS
                                    SETTINGS_ENABLE_WEBTRANSPORT = 1

HEADERS + END_HEADERS
Stream ID = 3
:method = CONNECT
:protocol = webtransport
:scheme = https
:path = /
:authority = server.example.com
origin: server.example.com
                                    HEADERS + END_HEADERS
                                    Stream ID = 3
                                    :status = 200

                                    WT_STREAM
                                    Stream ID = 2
                                    WebTransport Data

WT_STREAM + FIN
Stream ID = 2
WebTransport Data

                                    WT_STREAM + FIN
                                    Stream ID = 2
                                    WebTransport Data
]]></artwork>
    </section>
    <section anchor="session-termination">
      <name>Session Termination</name>
      <t>An WebTransport session over HTTP/2 is terminated when either endpoint closes
the stream associated with the CONNECT request that initiated the session.
Upon learning about the session being terminated, the endpoint MUST stop
sending new datagrams and reset all of the streams associated with the session.</t>
    </section>
    <section anchor="transport-properties">
      <name>Transport Properties</name>
      <t>The WebTransport framework <xref target="OVERVIEW"/> defines a set of optional transport
properties that clients can use to determine the presence of features which
might allow additional optimizations beyond the common set of properties
available via all WebTransport protocols. Below are details about support in
Http2Transport for those properties.</t>
      <dl>
        <dt>Stream Independence:</dt>
        <dd>
          <t>Http2Transport does not support stream independence, as HTTP/2 inherently has
  head of line blocking.</t>
        </dd>
        <dt>Partial Reliability:</dt>
        <dd>
          <t>Http2Transport does not support partial reliability, as HTTP/2 retransmits any
lost data. This means that any datagrams sent via Http2Transport will be
retransmitted regardless of the preference of the application. The receiver
is permitted to drop them, however, if it is unable to buffer them.</t>
        </dd>
        <dt>Pooling Support:</dt>
        <dd>
          <t>Http2Transport supports pooling, as multiple transports using Http2Transport
  may share the same underlying HTTP/2 connection and therefore share a
  congestion controller and other transport context.</t>
        </dd>
        <dt>Connection Mobility:</dt>
        <dd>
          <t>Http2Transport does not support connection mobility, unless an underlying
  transport protocol that supports multipath or migration, such as MPTCP
  <xref target="MPTCP"/>, is used underneath HTTP/2 and TLS. Without such support,
  Http2Transport connections cannot survive network transitions.</t>
        </dd>
      </dl>
    </section>
    <section anchor="security-considerations">
      <name>Security Considerations</name>
      <t>WebTransport over HTTP/2 satisfies all of the security requirements imposed by
<xref target="OVERVIEW"/> on WebTransport protocols, thus providing a secure framework for
client-server communication in cases when the client is potentially untrusted.</t>
      <t>WebTransport over HTTP/2 requires explicit opt-in through the use of HTTP
SETTINGS; this avoids potential protocol confusion attacks by ensuring the
HTTP/2 server explicitly supports it. It also requires the use of the Origin
header, providing the server with the ability to deny access to Web-based
clients that do not originate from a trusted origin.</t>
      <t>Just like HTTP traffic going over HTTP/2, WebTransport pools traffic to
different origins within a single connection. Different origins imply different
trust domains, meaning that the implementations have to treat each transport as
potentially hostile towards others on the same connection. One potential attack
is a resource exhaustion attack: since all of the transports share both
congestion control and flow control context, a single client aggressively using
up those resources can cause other transports to stall. The user agent thus
SHOULD implement a fairness scheme that ensures that each transport within
connection gets a reasonable share of controlled resources; this applies both
to sending data and to opening new streams.</t>
    </section>
    <section anchor="iana-considerations">
      <name>IANA Considerations</name>
      <section anchor="http2-settings-parameter-registration">
        <name>HTTP/2 SETTINGS Parameter Registration</name>
        <t>The following entry is added to the "HTTP/2 Settings" registry established by
<xref target="RFC7540"/>:</t>
        <t>The <tt>SETTINGS_ENABLE_WEBTRANSPORT</tt> parameter indicates that the specified
HTTP/2 connection is WebTransport-capable.</t>
        <dl>
          <dt>Setting Name:</dt>
          <dd>
            <t>ENABLE_WEBTRANSPORT</t>
          </dd>
          <dt>Value:</dt>
          <dd>
            <t>0x2b603742</t>
          </dd>
          <dt>Default:</dt>
          <dd>
            <t>0</t>
          </dd>
          <dt>Specification:</dt>
          <dd>
            <t>This document</t>
          </dd>
        </dl>
      </section>
    </section>
  </middle>
  <back>
    <references>
      <name>References</name>
      <references>
        <name>Normative References</name>
        <reference anchor="OVERVIEW">
          <front>
            <title>The WebTransport Protocol Framework</title>
            <author fullname="Victor Vasiliev">
              <organization>Google</organization>
            </author>
            <date day="7" month="March" year="2022"/>
            <abstract>
              <t>   The WebTransport Protocol Framework enables clients constrained by
   the Web security model to communicate with a remote server using a
   secure multiplexed transport.  It consists of a set of individual
   protocols that are safe to expose to untrusted applications, combined
   with a model that allows them to be used interchangeably.

   This document defines the overall requirements on the protocols used
   in WebTransport, as well as the common features of the protocols,
   support for some of which may be optional.

              </t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-ietf-webtrans-overview-03"/>
        </reference>
        <reference anchor="WEBTRANSPORT-H3">
          <front>
            <title>WebTransport over HTTP/3</title>
            <author fullname="Alan Frindell">
              <organization>Facebook</organization>
            </author>
            <author fullname="Eric Kinnear">
              <organization>Apple Inc.</organization>
            </author>
            <author fullname="Victor Vasiliev">
              <organization>Google</organization>
            </author>
            <date day="25" month="October" year="2021"/>
            <abstract>
              <t>   WebTransport [OVERVIEW] is a protocol framework that enables clients
   constrained by the Web security model to communicate with a remote
   server using a secure multiplexed transport.  This document describes
   a WebTransport protocol that is based on HTTP/3 [HTTP3] and provides
   support for unidirectional streams, bidirectional streams and
   datagrams, all multiplexed within the same HTTP/3 connection.

              </t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-ietf-webtrans-http3-02"/>
        </reference>
        <reference anchor="HTTP">
          <front>
            <title>HTTP Semantics</title>
            <author fullname="Roy T. Fielding">
              <organization>Adobe</organization>
            </author>
            <author fullname="Mark Nottingham">
              <organization>Fastly</organization>
            </author>
            <author fullname="Julian Reschke">
              <organization>greenbytes GmbH</organization>
            </author>
            <date day="12" month="September" year="2021"/>
            <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.

   This document updates RFC 3864 and obsoletes RFC 2818, RFC 7231, RFC
   7232, RFC 7233, RFC 7235, RFC 7538, RFC 7615, RFC 7694, and portions
   of RFC 7230.

              </t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-ietf-httpbis-semantics-19"/>
        </reference>
        <reference anchor="H2">
          <front>
            <title>HTTP/2</title>
            <author fullname="Martin Thomson">
              <organization>Mozilla</organization>
            </author>
            <author fullname="Cory Benfield">
              <organization>Apple Inc.</organization>
            </author>
            <date day="24" month="January" year="2022"/>
            <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 latency by introducing field compression and
   allowing multiple concurrent exchanges on the same connection.

   This document obsoletes RFC 7540 and RFC 8740.

              </t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-ietf-httpbis-http2bis-07"/>
        </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="RFC8441">
          <front>
            <title>Bootstrapping WebSockets with HTTP/2</title>
            <author fullname="P. McManus" initials="P." surname="McManus">
              <organization/>
            </author>
            <date month="September" year="2018"/>
            <abstract>
              <t>This document defines a mechanism for running the WebSocket Protocol (RFC 6455) over a single stream of an HTTP/2 connection.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="8441"/>
          <seriesInfo name="DOI" value="10.17487/RFC8441"/>
        </reference>
        <reference anchor="RFC7230">
          <front>
            <title>Hypertext Transfer Protocol (HTTP/1.1): Message Syntax and Routing</title>
            <author fullname="R. Fielding" initials="R." role="editor" surname="Fielding">
              <organization/>
            </author>
            <author fullname="J. Reschke" initials="J." role="editor" surname="Reschke">
              <organization/>
            </author>
            <date month="June" year="2014"/>
            <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>
        <reference anchor="ORIGIN">
          <front>
            <title>The Web Origin Concept</title>
            <author fullname="A. Barth" initials="A." surname="Barth">
              <organization/>
            </author>
            <date month="December" year="2011"/>
            <abstract>
              <t>This document defines the concept of an "origin", which is often used as the scope of authority or privilege by user agents.  Typically, user agents isolate content retrieved from different origins to prevent malicious web site operators from interfering with the operation of benign web sites.  In addition to outlining the principles that underlie the concept of origin, this document details how to determine the origin of a URI and how to serialize an origin into a string.  It also defines an HTTP header field, named "Origin", that indicates which origins are associated with an HTTP request.   [STANDARDS-TRACK]</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="6454"/>
          <seriesInfo name="DOI" value="10.17487/RFC6454"/>
        </reference>
        <reference anchor="RFC7231">
          <front>
            <title>Hypertext Transfer Protocol (HTTP/1.1): Semantics and Content</title>
            <author fullname="R. Fielding" initials="R." role="editor" surname="Fielding">
              <organization/>
            </author>
            <author fullname="J. Reschke" initials="J." role="editor" surname="Reschke">
              <organization/>
            </author>
            <date month="June" year="2014"/>
            <abstract>
              <t>The Hypertext Transfer Protocol (HTTP) is a stateless \%application- level protocol for distributed, collaborative, hypertext information systems.  This document defines the semantics of HTTP/1.1 messages, as expressed by request methods, request header fields, response status codes, and response header fields, along with the payload of messages (metadata and body content) and mechanisms for content negotiation.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="7231"/>
          <seriesInfo name="DOI" value="10.17487/RFC7231"/>
        </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="RFC6585">
          <front>
            <title>Additional HTTP Status Codes</title>
            <author fullname="M. Nottingham" initials="M." surname="Nottingham">
              <organization/>
            </author>
            <author fullname="R. Fielding" initials="R." surname="Fielding">
              <organization/>
            </author>
            <date month="April" year="2012"/>
            <abstract>
              <t>This document specifies additional HyperText Transfer Protocol (HTTP) status codes for a variety of common situations.  [STANDARDS-TRACK]</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="6585"/>
          <seriesInfo name="DOI" value="10.17487/RFC6585"/>
        </reference>
        <reference anchor="RFC9000">
          <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>
      </references>
      <references>
        <name>Informative References</name>
        <reference anchor="HTTP3">
          <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="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="DATAGRAM">
          <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="4" month="February" 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.

Discussion Venues

   This note is to be removed before publishing as an RFC.

   Discussion of this document takes place on the QUIC Working Group
   mailing list (mailto:quic@ietf.org), which is archived at
   https://mailarchive.ietf.org/arch/browse/quic/.

   Source for this draft and an issue tracker can be found at
   https://github.com/quicwg/datagram.

              </t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-ietf-quic-datagram-10"/>
        </reference>
        <reference anchor="MPTCP">
          <front>
            <title>TCP Extensions for Multipath Operation with Multiple Addresses</title>
            <author fullname="A. Ford" initials="A." surname="Ford">
              <organization/>
            </author>
            <author fullname="C. Raiciu" initials="C." surname="Raiciu">
              <organization/>
            </author>
            <author fullname="M. Handley" initials="M." surname="Handley">
              <organization/>
            </author>
            <author fullname="O. Bonaventure" initials="O." surname="Bonaventure">
              <organization/>
            </author>
            <date month="January" year="2013"/>
            <abstract>
              <t>TCP/IP communication is currently restricted to a single path per connection, yet multiple paths often exist between peers.  The simultaneous use of these multiple paths for a TCP/IP session would improve resource usage within the network and, thus, improve user experience through higher throughput and improved resilience to network failure.</t>
              <t>Multipath TCP provides the ability to simultaneously use multiple paths between peers.  This document presents a set of extensions to traditional TCP to support multipath operation.  The protocol offers the same type of service to applications as TCP (i.e., reliable bytestream), and it provides the components necessary to establish and use multiple TCP flows across potentially disjoint paths.  This  document defines an Experimental Protocol for the Internet community.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="6824"/>
          <seriesInfo name="DOI" value="10.17487/RFC6824"/>
        </reference>
      </references>
    </references>
    <section numbered="false" anchor="acknowledgments">
      <name>Acknowledgments</name>
      <t>Thanks to Anthony Chivetta, Joshua Otto, and Valentin Pistol for their
contributions in the design and implementation of this work.</t>
    </section>
  </back>
  <!-- ##markdown-source:
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

-->

</rfc>
