<?xml version='1.0' encoding='utf-8'?>
<!DOCTYPE rfc [
  <!ENTITY nbsp    "&#160;">
  <!ENTITY zwsp   "&#8203;">
  <!ENTITY nbhy   "&#8209;">
  <!ENTITY wj     "&#8288;">
]>
<?xml-stylesheet type="text/xsl" href="rfc2629.xslt" ?>
<!-- generated by https://github.com/cabo/kramdown-rfc version 1.7.24 (Ruby 3.3.6) -->
<rfc xmlns:xi="http://www.w3.org/2001/XInclude" ipr="trust200902" docName="draft-ietf-webtrans-http2-11" category="std" consensus="true" tocInclude="true" sortRefs="true" symRefs="true" version="3">
  <!-- xml2rfc v2v3 conversion 3.28.0 -->
  <front>
    <title abbrev="WebTransport-H2">WebTransport over HTTP/2</title>
    <seriesInfo name="Internet-Draft" value="draft-ietf-webtrans-http2-11"/>
    <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>
      <?line 65?>

<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>
      <?line 73?>

<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>
    <?line 84?>

<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="HTTP2"/> 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, the server sends a
SETTINGS_WEBTRANSPORT_MAX_SESSIONS setting with a value greater than "0" to
indicate that it supports WebTransport over HTTP/2. The value of the setting is
the number of concurrent sessions the server is willing to receive. Note that
the client does not need to send any value to indicate support for
WebTransport; clients indicate support for WebTransport by using
the "webtransport" upgrade token in CONNECT requests establishing WebTransport
sessions (see <xref section="9.1" sectionFormat="of" target="WEBTRANSPORT-H3"/>).</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 referred to
as a <em>Session ID</em>, is used to uniquely identify a given WebTransport session
within the connection.  WebTransport using HTTP/2 uses extended CONNECT with
the same <tt>webtransport</tt> HTTP Upgrade Token as <xref target="WEBTRANSPORT-H3"/>.  This
Upgrade Token uses the Capsule Protocol as defined in <xref target="HTTP-DATAGRAM"/>.</t>
      <t>After the session is established, endpoints exchange WebTransport messages using
the Capsule Protocol on the bidirectional CONNECT stream, the "data stream" as
defined in <xref section="3.1" sectionFormat="of" target="HTTP-DATAGRAM"/>.</t>
      <t>Within this stream, <em>WebTransport streams</em> and <em>WebTransport datagrams</em> are
multiplexed.  In HTTP/2, WebTransport capsules 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 capsules closely mirror a subset of QUIC frames and provide the
essential WebTransport features.  Within a WebTransport session, endpoints can
create and use bidirectional or unidirectional streams with no additional round
trips using the <iref item="WT_STREAM"/><xref target="WT_STREAM" format="none">WT_STREAM</xref> capsule.</t>
      <t>Stream creation and data flow on streams uses flow control mechanisms modeled on
those in QUIC. Flow control is managed using the WebTransport capsules:
<iref item="WT_MAX_DATA"/><xref target="WT_MAX_DATA" format="none">WT_MAX_DATA</xref>, <iref item="WT_MAX_STREAM_DATA"/><xref target="WT_MAX_STREAM_DATA" format="none">WT_MAX_STREAM_DATA</xref>, <iref item="WT_MAX_STREAMS"/><xref target="WT_MAX_STREAMS" format="none">WT_MAX_STREAMS</xref>, <iref item="WT_DATA_BLOCKED"/><xref target="WT_DATA_BLOCKED" format="none">WT_DATA_BLOCKED</xref>,
<iref item="WT_STREAM_DATA_BLOCKED"/><xref target="WT_STREAM_DATA_BLOCKED" format="none">WT_STREAM_DATA_BLOCKED</xref>, and <iref item="WT_STREAMS_BLOCKED"/><xref target="WT_STREAMS_BLOCKED" format="none">WT_STREAMS_BLOCKED</xref>. 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 <iref item="WT_RESET_STREAM"/><xref target="WT_RESET_STREAM" format="none">WT_RESET_STREAM</xref> capsule and a
receiver can request that a sender stop sending with a <iref item="WT_STOP_SENDING"/><xref target="WT_STOP_SENDING" format="none">WT_STOP_SENDING</xref>
capsule.</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-and-termination">
      <name>Session Establishment and Termination</name>
      <t>A WebTransport session is a communication context between a client and server
<xref target="OVERVIEW"/>. This section describes how sessions begin and end.</t>
      <section anchor="establishing-a-webtransport-capable-http2-connection">
        <name>Establishing a WebTransport-Capable HTTP/2 Connection</name>
        <t>In order to indicate support for WebTransport, the server MUST send a
SETTINGS_WEBTRANSPORT_MAX_SESSIONS value greater than "0" in its SETTINGS
frame.  The client MUST NOT send a WebTransport request until it has received
the setting indicating WebTransport support from the server.</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. A server supporting WebTransport
needs to send both the SETTINGS_WEBTRANSPORT_MAX_SESSIONS setting with a value
greater than "0" and the SETTINGS_ENABLE_CONNECT_PROTOCOL setting with a value
of "1" for WebTransport to be enabled.</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 406 (<xref section="15.5.7" sectionFormat="of" target="RFC9110"/>). If it does, it MAY accept the
session by replying with a 2xx series status code, as defined in <xref section="15.3" sectionFormat="of" target="SEMANTICS"/>. The WebTransport server MUST verify
the <tt>Origin</tt> header to ensure that the specified origin is allowed to access
the server in question.</t>
        <t>A WebTransport session is established when the server sends a 2xx response. A
server generates that response from the request header, not from the contents
of the request. To enable clients to resend data when attempting to
re-establish a session that was rejected by a server, a server MUST NOT process
any capsules on the request stream unless it accepts the WebTransport session.</t>
        <t>A client MAY optimistically send any WebTransport capsules associated with a
CONNECT request, without waiting for a response, to the extent allowed by flow
control. This can reduce latency for data sent by a client at the start of a
WebTransport session. For example, a client might choose to send datagrams or
flow control updates before receiving any response from the server.</t>
      </section>
      <section anchor="application-protocol-negotiation">
        <name>Application Protocol Negotiation</name>
        <t>WebTransport over HTTP/2 offers a subprotocol negotiation mechanism, similar to
TLS Application-Layer Protocol Negotiation Extension (ALPN) <xref target="RFC7301"/>; the
intent is to simplify porting pre-existing protocols that rely on this type of
functionality.</t>
        <t>The user agent MAY include a <tt>WT-Available-Protocols</tt> header field in the
CONNECT request. The <tt>WT-Available-Protocols</tt> enumerates the possible protocols
in preference order. If the server receives such a header, it MAY include a
<tt>WT-Protocol</tt> field in a successful (2xx) response. If it does, the server
MUST include a single choice from the client's list in that field. Servers MAY
reject the request if the client did not include a suitable protocol.</t>
        <t>Both <tt>WT-Available-Protocols</tt> and <tt>WT-Protocol</tt> are defined in <xref section="3.4" sectionFormat="of" target="WEBTRANSPORT-H3"/>.</t>
      </section>
      <section anchor="errors">
        <name>Session Termination and Error Handling</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.</t>
        <t>Prior to closing the stream associated with the CONNECT request, either endpoint
can send a CLOSE_WEBTRANSPORT_SESSION capsule with an application error code
and message to convey additional information about the reasons for the closure
of the session.</t>
        <t>Session errors result in the termination of a session.  Errors can be reported
using the CLOSE_WEBTRANSPORT_SESSION capsule, which includes an error code and
an optional explanatory message.</t>
        <t>An endpoint can terminate a session without sending a CLOSE_WEBTRANSPORT_SESSION
capsule by closing the HTTP/2 stream.</t>
        <t>A stream that is reset terminates the session without providing an
application-level signal, though there will be an HTTP/2 error code.</t>
        <t>This document reserves the following HTTP/2 error codes for use with reporting
WebTransport errors:</t>
        <dl>
          <dt>WEBTRANSPORT_ERROR (0xTBD):</dt>
          <dd>
            <t>This generic error can be used for errors that do not have more specific error
codes.</t>
          </dd>
          <dt>WEBTRANSPORT_STREAM_STATE_ERROR (0xTBD):</dt>
          <dd>
            <t>A stream-related capsule identified a stream that was in an invalid state.</t>
          </dd>
        </dl>
        <t>Prior terminating a stream with an error, a CLOSE_WEBTRANSPORT_SESSION capsule
with an application-specified error code MAY be sent.</t>
        <t>Session errors do not necessarily result in any change of HTTP/2 connection
state, except that an endpoint might choose to terminate a connection in
response to stream errors; see <xref section="5.4" sectionFormat="of" target="HTTP2"/>.</t>
      </section>
    </section>
    <section anchor="flow-control">
      <name>Flow Control</name>
      <t>Flow control governs the amount of resources that can be consumed or data that
can be sent. WebTransport over HTTP/2 allows a server to limit the number of
sessions that a client can create on a single connection; see
<xref target="flow-control-limit-sessions"/>.</t>
      <t>For data, there are five applicable levels of flow control for data that is sent
or received using WebTransport over HTTP/2:</t>
      <ol spacing="normal" type="1"><li>
          <t>TCP flow control.</t>
        </li>
        <li>
          <t>HTTP/2 connection flow control, which governs the total amount of data in
DATA frames for all HTTP/2 streams.</t>
        </li>
        <li>
          <t>HTTP/2 stream flow control, which limits the data on a single HTTP/2 stream.
For a WebTransport session, this includes all capsules, including those that
are exempt from WebTransport session-level flow control.</t>
        </li>
        <li>
          <t>WebTransport session-level flow control, which limits the total amount of
stream data that can be sent or received on streams within the WebTransport
session. Note that this does not limit other types of capsules within a
WebTransport session, such as control messages or datagrams.</t>
        </li>
        <li>
          <t>WebTransport stream flow control, which limits data on individual streams
within a session.</t>
        </li>
      </ol>
      <t>TCP and HTTP/2 define the first three levels of flow control. This document
defines the final two.</t>
      <section anchor="flow-control-limit-sessions">
        <name>Limiting the Number of Simultaneous Sessions</name>
        <t>This document defines a SETTINGS_WEBTRANSPORT_MAX_SESSIONS parameter that allows
the server to limit the maximum number of concurrent WebTransport sessions on a
single HTTP/2 connection.  The client MUST NOT open more sessions than
indicated in the server SETTINGS parameters.  The server MUST NOT close the
connection if the client opens sessions exceeding this limit, as the client and
the server do not have a consistent view of how many sessions are open due to
the asynchronous nature of the protocol; instead, it MUST reset all of the
CONNECT streams it is not willing to process with the <tt>REFUSED_STREAM</tt>
error code (<xref section="8.7" sectionFormat="of" target="HTTP2"/>).</t>
        <t>Just like other HTTP requests, WebTransport sessions, and data sent on those
sessions, are counted against flow control limits.  Servers that wish to limit
the rate of incoming requests on any particular session have multiple
mechanisms:</t>
        <ul spacing="normal">
          <li>
            <t>The <tt>REFUSED_STREAM</tt> error code defined in <xref section="8.7" sectionFormat="of" target="HTTP2"/>
indicates to the receiving HTTP/2 stack that the request was not processed in
any way.</t>
          </li>
          <li>
            <t>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.</t>
          </li>
        </ul>
        <t>An endpoint that wishes to reduce the value of
SETTINGS_WEBTRANSPORT_MAX_SESSIONS to a value that is below the current number
of open sessions can either close sessions that exceed the new value or allow
those sessions to complete. Endpoints MUST NOT reduce the value of
SETTINGS_WEBTRANSPORT_MAX_SESSIONS to "0" after previously advertising a
non-zero value.</t>
      </section>
      <section anchor="flow-control-limit-streams">
        <name>Limiting the Number of Streams Within a Session</name>
        <t>This document defines a <iref item="WT_MAX_STREAMS"/><xref target="WT_MAX_STREAMS" format="none">WT_MAX_STREAMS</xref> capsule (<xref target="WT_MAX_STREAMS"/>) that allows
each endpoint to limit the number of streams its peer is permitted to open as
part of a WebTransport session.  There is a separate limit for bidirectional
streams and for unidirectional streams.  Note that, unlike WebTransport over
HTTP/3 <xref target="WEBTRANSPORT-H3"/>, because the entire WebTransport session is
contained within HTTP/2 DATA frames on a single HTTP/2 stream, this limit is
the only mechanism for an endpoint to limit the number of WebTransport streams
that its peer can open on a session.</t>
      </section>
      <section anchor="flow-control-initial">
        <name>Initial Flow Control Limits</name>
        <t>To allow stream data to be exchanged in the same flight as the extended CONNECT
request that establishes a WebTransport session, initial flow control limits
can be exchanged via HTTP/2 SETTINGS (<xref target="flow-control-settings"/>).  Initial
values for the flow control limits can also be exchanged via the
<tt>WebTransport-Init</tt> header field on the extended CONNECT request
(<xref target="flow-control-header"/>).</t>
        <t>The limits communicated via HTTP/2 SETTINGS apply to all WebTransport sessions
opened on that HTTP/2 connection.  Limits communicated via the
<tt>WebTransport-Init</tt> header field apply only to the WebTransport session
established by the extended CONNECT request carrying that field.</t>
        <t>If both the SETTINGS and the header field are present when a WebTransport
session is established, the endpoint MUST use the greater of the two values for
each corresponding initial flow control value.  Endpoints sending the SETTINGS
and also including the header field SHOULD ensure that the header field values
are greater than or equal to the values provided in the SETTINGS.</t>
        <section anchor="flow-control-settings">
          <name>Flow Control SETTINGS</name>
          <t>Initial flow control limits can be exchanged via HTTP/2 SETTINGS
(<xref target="h2-settings"/>) by providing non-zero values for</t>
          <ul spacing="normal">
            <li>
              <t><iref item="WT_MAX_DATA"/><xref target="WT_MAX_DATA" format="none">WT_MAX_DATA</xref> via <iref item="SETTINGS_WEBTRANSPORT_INITIAL_MAX_DATA"/><xref target="SETTINGS_WEBTRANSPORT_INITIAL_MAX_DATA" format="none">SETTINGS_WEBTRANSPORT_INITIAL_MAX_DATA</xref></t>
            </li>
            <li>
              <t><iref item="WT_MAX_STREAM_DATA"/><xref target="WT_MAX_STREAM_DATA" format="none">WT_MAX_STREAM_DATA</xref> via <iref item="SETTINGS_WEBTRANSPORT_INITIAL_MAX_STREAM_DATA_UNI"/><xref target="SETTINGS_WEBTRANSPORT_INITIAL_MAX_STREAM_DATA_UNI" format="none">SETTINGS_WEBTRANSPORT_INITIAL_MAX_STREAM_DATA_UNI</xref> and
<iref item="SETTINGS_WEBTRANSPORT_INITIAL_MAX_STREAM_DATA_BIDI"/><xref target="SETTINGS_WEBTRANSPORT_INITIAL_MAX_STREAM_DATA_BIDI" format="none">SETTINGS_WEBTRANSPORT_INITIAL_MAX_STREAM_DATA_BIDI</xref></t>
            </li>
            <li>
              <t><iref item="WT_MAX_STREAMS"/><xref target="WT_MAX_STREAMS" format="none">WT_MAX_STREAMS</xref> via <iref item="SETTINGS_WEBTRANSPORT_INITIAL_MAX_STREAMS_UNI"/><xref target="SETTINGS_WEBTRANSPORT_INITIAL_MAX_STREAMS_UNI" format="none">SETTINGS_WEBTRANSPORT_INITIAL_MAX_STREAMS_UNI</xref> and
<iref item="SETTINGS_WEBTRANSPORT_INITIAL_MAX_STREAMS_BIDI"/><xref target="SETTINGS_WEBTRANSPORT_INITIAL_MAX_STREAMS_BIDI" format="none">SETTINGS_WEBTRANSPORT_INITIAL_MAX_STREAMS_BIDI</xref></t>
            </li>
          </ul>
        </section>
        <section anchor="flow-control-header">
          <name>Flow Control Header Field</name>
          <t>The <tt>WebTransport-Init</tt> HTTP header field can be used to communicate the initial
values of the flow control windows, similar to how QUIC uses transport
parameters.  The <tt>WebTransport-Init</tt> is a Dictionary Structured Field
(<xref section="3.2" sectionFormat="of" target="RFC8941"/>).  If any of the fields cannot be parsed correctly
or do not have the correct type, the peer MUST reset the CONNECT stream.  The
following keys are defined for the <tt>WebTransport-Init</tt> header field:</t>
          <dl>
            <dt><tt>u</tt>:</dt>
            <dd>
              <t>The initial flow control limit for unidirectional streams opened by the
recipient of this header field.  MUST be an Integer.</t>
            </dd>
            <dt><tt>bl</tt>:</dt>
            <dd>
              <t>The initial flow control limit for the bidirectional streams opened by the
sender of this header field.  MUST be an Integer.</t>
            </dd>
            <dt><tt>br</tt>:</dt>
            <dd>
              <t>The initial flow control limit for the bidirectional streams opened by the
recipient of this header field.  MUST be an Integer.</t>
            </dd>
          </dl>
        </section>
      </section>
      <section anchor="flow-control-intermediaries">
        <name>Flow Control and Intermediaries</name>
        <t>WebTransport over HTTP/2 uses several capsules for flow control, and all of
these capsules define special intermediary handling as described in
<xref section="3.2" sectionFormat="of" target="HTTP-DATAGRAM"/>.  These capsules, referred to as the "flow
control capsules" are <iref item="WT_MAX_DATA"/><xref target="WT_MAX_DATA" format="none">WT_MAX_DATA</xref>, <iref item="WT_MAX_STREAM_DATA"/><xref target="WT_MAX_STREAM_DATA" format="none">WT_MAX_STREAM_DATA</xref>, <iref item="WT_MAX_STREAMS"/><xref target="WT_MAX_STREAMS" format="none">WT_MAX_STREAMS</xref>,
<iref item="WT_DATA_BLOCKED"/><xref target="WT_DATA_BLOCKED" format="none">WT_DATA_BLOCKED</xref>, <iref item="WT_STREAM_DATA_BLOCKED"/><xref target="WT_STREAM_DATA_BLOCKED" format="none">WT_STREAM_DATA_BLOCKED</xref>, and <iref item="WT_STREAMS_BLOCKED"/><xref target="WT_STREAMS_BLOCKED" format="none">WT_STREAMS_BLOCKED</xref>.</t>
        <t>Because flow control in WebTransport is hop-by-hop and does not provide an
end-to-end signal, intermediaries MUST consume flow control signals and express
their own flow control limits to the next hop. The intermediary can send these
signals via HTTP/3 flow control messages, HTTP/2 flow control messages, or as
WebTransport flow control capsules, where appropriate. Intermediaries are
responsible for storing any data for which they advertise flow control credit
if that data cannot be immediately forwarded to the next hop.</t>
        <t>In practice, an intermediary that translates flow control signals between
similar WebTransport protocols, such as between two HTTP/2 connections, can
often simply reexpress the same limits received on one connection directly on
the other connection.</t>
        <t>An intermediary that does not want to be responsible for storing data that
cannot be immediately sent on its translated connection would ensure that it
does not advertise a higher flow control limit on one connection than the
corresponding limit on the translated connection.</t>
      </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-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.</t>
        <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. For example,
endpoints 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 <iref item="WT_STREAM"/><xref target="WT_STREAM" format="none">WT_STREAM</xref> capsules is contiguous and in order.</t>
        <t>Below are details about support in WebTransport over HTTP/2 for the properties
defined by the WebTransport framework.</t>
        <dl>
          <dt>Stream Independence:</dt>
          <dd>
            <t>WebTransport over HTTP/2 does not support stream independence, as HTTP/2
inherently has head-of-line blocking.</t>
          </dd>
          <dt>Partial Reliability:</dt>
          <dd>
            <t>WebTransport over HTTP/2 does not support partial reliability, as HTTP/2
retransmits any lost data. This means that any datagrams sent via
WebTransport over HTTP/2 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>WebTransport over HTTP/2 supports pooling, as multiple transports using
WebTransport over HTTP/2 may share the same underlying HTTP/2 connection and
therefore share a congestion controller and other transport context. Note
that WebTransport streams over HTTP/2 are contained within a single HTTP/2
stream and do not compete with other pooled WebTransport sessions for
per-stream resources.</t>
          </dd>
          <dt>Connection Mobility:</dt>
          <dd>
            <t>WebTransport over HTTP/2 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, WebTransport over HTTP/2 connections cannot survive network
transitions.</t>
          </dd>
        </dl>
      </section>
      <section anchor="webtransport-streams">
        <name>WebTransport Streams</name>
        <t>WebTransport streams have identifiers and states that mirror the identifiers
((<xref section="2.1" sectionFormat="of" target="RFC9000"/>)) and states (<xref section="3" sectionFormat="of" target="RFC9000"/>) of QUIC
streams as closely as possible to aid in ease of implementation.</t>
        <t>WebTransport streams are identified by a numeric value, or stream ID. Stream IDs
are only meaningful within the WebTransport session in which they were created.
They share the same semantics as QUIC stream IDs, with client initiated streams
having even-numbered stream IDs and server-initiated streams having
odd-numbered stream IDs. Similarly, they can be bidirectional or
unidirectional, indicated by the second least significant bit of the
stream ID.</t>
        <t>Because WebTransport does not provide an acknowledgement mechanism for
WebTransport capsules, 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-capsules">
      <name>WebTransport Capsules</name>
      <t>WebTransport capsules mirror their QUIC frame counterparts as closely as
possible to enable maximal reuse of any applicable QUIC infrastructure by
implementors.</t>
      <t>WebTransport capsules use the Capsule Protocol defined in <xref section="3.2" sectionFormat="of" target="HTTP-DATAGRAM"/>.</t>
      <section anchor="PADDING">
        <name>PADDING Capsule</name>
        <t>A <iref item="PADDING"/><xref target="PADDING" format="none">PADDING</xref> capsule is an HTTP capsule <xref target="HTTP-DATAGRAM"/> of type=0x190B4D38 and
has no semantic value. <iref item="PADDING"/><xref target="PADDING" format="none">PADDING</xref> capsules can be used to introduce additional
data between other HTTP datagrams and can also be used to provide protection
against traffic analysis or for other reasons.</t>
        <t>Note that, when used with WebTransport over HTTP/2, the <iref item="PADDING"/><xref target="PADDING" format="none">PADDING</xref> capsule exists
alongside the ability to pad HTTP/2 frames (<xref section="10.7" sectionFormat="of" target="RFC9113"/>).
HTTP/2 padding is hop-by-hop and can be modified by intermediaries, while the
<iref item="PADDING"/><xref target="PADDING" format="none">PADDING</xref> capsule traverses intermedaries. The <iref item="PADDING"/><xref target="PADDING" format="none">PADDING</xref> capsule is also
constrained to be no smaller than the capsule overhead itself.</t>
        <figure anchor="fig-padding">
          <name>PADDING Capsule Format</name>
          <artwork><![CDATA[
PADDING Capsule {
  Type (i) = 0x190B4D38,
  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.  A receiver is not obligated to verify padding
but MAY treat non-zero padding as a <xref target="errors">stream error</xref>.</t>
      </section>
      <section anchor="WT_RESET_STREAM">
        <name>WT_RESET_STREAM Capsule</name>
        <t>A <iref item="WT_RESET_STREAM"/><xref target="WT_RESET_STREAM" format="none">WT_RESET_STREAM</xref> capsule is an HTTP capsule <xref target="HTTP-DATAGRAM"/> of
type=0x190B4D39 and allows either endpoint to abruptly terminate the sending
part of a WebTransport stream.</t>
        <t>After sending a <iref item="WT_RESET_STREAM"/><xref target="WT_RESET_STREAM" format="none">WT_RESET_STREAM</xref> capsule, an endpoint ceases transmission of
<iref item="WT_STREAM"/><xref target="WT_STREAM" format="none">WT_STREAM</xref> capsules on the identified stream. A receiver of a <iref item="WT_RESET_STREAM"/><xref target="WT_RESET_STREAM" format="none">WT_RESET_STREAM</xref>
capsule can discard any data in excess of the Reliable Size indicated, even if
that data was already received.</t>
        <t>The <iref item="WT_RESET_STREAM"/><xref target="WT_RESET_STREAM" format="none">WT_RESET_STREAM</xref> capsule follows the design of the QUIC RESET_STREAM_AT frame
<xref target="PARTIAL-RESET"/>.  Consequently, it
includes a Reliable Size field.  A <iref item="WT_RESET_STREAM"/><xref target="WT_RESET_STREAM" format="none">WT_RESET_STREAM</xref> capsule MUST be sent after
<iref item="WT_STREAM"/><xref target="WT_STREAM" format="none">WT_STREAM</xref> capsules that include an amount of data equal to or in excess of the
value in the Reliable Size field.  A receiver MUST treat the receipt of a
<iref item="WT_RESET_STREAM"/><xref target="WT_RESET_STREAM" format="none">WT_RESET_STREAM</xref> with a Reliable Size smaller than the number of bytes it has
received on the stream as a session error.</t>
        <figure anchor="fig-wt_reset_stream">
          <name>WT_RESET_STREAM Capsule Format</name>
          <artwork><![CDATA[
WT_RESET_STREAM Capsule {
  Type (i) = 0x190B4D39,
  Length (i),
  Stream ID (i),
  Application Protocol Error Code (i),
  Reliable Size (i),
}
]]></artwork>
        </figure>
        <t>The <iref item="WT_RESET_STREAM"/><xref target="WT_RESET_STREAM" format="none">WT_RESET_STREAM</xref> capsule 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>
          <dt>Reliable Size:</dt>
          <dd>
            <t>A variable-length integer indicating the amount of data that needs to be
delivered to the application even though the stream is reset.</t>
          </dd>
        </dl>
        <t>Unlike the equivalent QUIC frame, this capsule does not include a Final Size
field. In-order delivery of <iref item="WT_STREAM"/><xref target="WT_STREAM" format="none">WT_STREAM</xref> capsules ensures that the amount of
session-level flow control consumed by a stream is always known by both
endpoints.</t>
        <t>A <iref item="WT_RESET_STREAM"/><xref target="WT_RESET_STREAM" format="none">WT_RESET_STREAM</xref> capsule MUST NOT be sent after a stream is closed or reset.
While QUIC permits redundant RESET_STREAM frames, the ordering guarantee in
HTTP/2 makes this unnecessary.  A <xref target="errors">stream error</xref> of type
WEBTRANSPORT_STREAM_STATE_ERROR MUST be sent if a <iref item="WT_RESET_STREAM"/><xref target="WT_RESET_STREAM" format="none">WT_RESET_STREAM</xref> capsule is
received for a stream that is not in a valid state.</t>
      </section>
      <section anchor="WT_STOP_SENDING">
        <name>WT_STOP_SENDING Capsule</name>
        <t>An HTTP capsule <xref target="HTTP-DATAGRAM"/> called <iref item="WT_STOP_SENDING"/><xref target="WT_STOP_SENDING" format="none">WT_STOP_SENDING</xref> (type=0x190B4D3A) is
introduced to communicate that incoming data is being discarded on receipt per
application request. <iref item="WT_STOP_SENDING"/><xref target="WT_STOP_SENDING" format="none">WT_STOP_SENDING</xref> requests that a peer cease transmission on
a WebTransport stream.</t>
        <figure anchor="fig-wt_stop_sending">
          <name>WT_STOP_SENDING Capsule Format</name>
          <artwork><![CDATA[
WT_STOP_SENDING Capsule {
  Type (i) = 0x190B4D3A,
  Length (i),
  Stream ID (i),
  Application Protocol Error Code (i),
}
]]></artwork>
        </figure>
        <t>The <iref item="WT_STOP_SENDING"/><xref target="WT_STOP_SENDING" format="none">WT_STOP_SENDING</xref> capsule 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>
        <t>A <iref item="WT_STOP_SENDING"/><xref target="WT_STOP_SENDING" format="none">WT_STOP_SENDING</xref> capsule MUST NOT be sent multiple times for the same stream.
While QUIC permits redundant STOP_SENDING frames, the ordering guarantee in
HTTP/2 makes this unnecessary.  A <xref target="errors">stream error</xref> of type
WEBTRANSPORT_STREAM_STATE_ERROR MUST be sent if a second <iref item="WT_STOP_SENDING"/><xref target="WT_STOP_SENDING" format="none">WT_STOP_SENDING</xref> capsule
is received.</t>
      </section>
      <section anchor="WT_STREAM">
        <name>WT_STREAM Capsule</name>
        <t><iref item="WT_STREAM"/><xref target="WT_STREAM" format="none">WT_STREAM</xref> capsules implicitly create a WebTransport stream and carry stream
data.</t>
        <t>The Type field in the <iref item="WT_STREAM"/><xref target="WT_STREAM" format="none">WT_STREAM</xref> capsule is either 0x190B4D3B or 0x190B4D3C.  The
least significant bit in the capsule type is the FIN bit (0x01), indicating
when set that the capsule marks the end of the stream in one direction.  Stream
data consists of any number of 0x190B4D3B capsules followed by a terminal
0x190B4D3C capsule.</t>
        <figure anchor="fig-wt_stream">
          <name>WT_STREAM Capsule Format</name>
          <artwork><![CDATA[
WT_STREAM Capsule {
  Type (i) = 0x190B4D3B..0x190B4D3C,
  Length (i),
  Stream ID (i),
  Stream Data (..),
}
]]></artwork>
        </figure>
        <t><iref item="WT_STREAM"/><xref target="WT_STREAM" format="none">WT_STREAM</xref> capsules 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 <iref item="WT_STREAM"/><xref target="WT_STREAM" format="none">WT_STREAM</xref> capsules MUST NOT
be used unless they open or close a stream; an endpoint MAY treat an empty
<iref item="WT_STREAM"/><xref target="WT_STREAM" format="none">WT_STREAM</xref> capsule that neither starts nor ends a stream as a session error.</t>
          </dd>
        </dl>
        <t>A <iref item="WT_STREAM"/><xref target="WT_STREAM" format="none">WT_STREAM</xref> capsule MUST NOT be sent after a stream is closed or reset.  While
QUIC permits redundant STREAM frames, the ordering guarantee in HTTP/2 makes
this unnecessary.  A <xref target="errors">stream error</xref> of type
WEBTRANSPORT_STREAM_STATE_ERROR MUST be sent if a <iref item="WT_STREAM"/><xref target="WT_STREAM" format="none">WT_STREAM</xref> capsule is received
for a stream that is not in a valid state.</t>
      </section>
      <section anchor="WT_MAX_DATA">
        <name>WT_MAX_DATA Capsule</name>
        <t>An HTTP capsule <xref target="HTTP-DATAGRAM"/> called <iref item="WT_MAX_DATA"/><xref target="WT_MAX_DATA" format="none">WT_MAX_DATA</xref> (type=0x190B4D3D) 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 Capsule Format</name>
          <artwork><![CDATA[
WT_MAX_DATA Capsule {
  Type (i) = 0x190B4D3D,
  Length (i),
  Maximum Data (i),
}
]]></artwork>
        </figure>
        <t><iref item="WT_MAX_DATA"/><xref target="WT_MAX_DATA" format="none">WT_MAX_DATA</xref> capsules 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 <iref item="WT_STREAM"/><xref target="WT_STREAM" format="none">WT_STREAM</xref> capsules counts toward this limit. The sum of the
lengths of Stream Data fields in <iref item="WT_STREAM"/><xref target="WT_STREAM" format="none">WT_STREAM</xref> capsules MUST NOT exceed the value
advertised by a receiver.</t>
        <t>The <iref item="WT_MAX_DATA"/><xref target="WT_MAX_DATA" format="none">WT_MAX_DATA</xref> capsule defines special intermediary handling, as described in
<xref section="3.2" sectionFormat="of" target="HTTP-DATAGRAM"/>.  Intermedaries MUST consume <iref item="WT_MAX_DATA"/><xref target="WT_MAX_DATA" format="none">WT_MAX_DATA</xref>
capsules for flow control purposes and MUST generate and send appropriate flow
control signals for their limits; see <xref target="flow-control-intermediaries"/>.</t>
        <t>The initial value for this limit MAY be communicated by sending a non-zero value
for <iref item="SETTINGS_WEBTRANSPORT_INITIAL_MAX_DATA"/><xref target="SETTINGS_WEBTRANSPORT_INITIAL_MAX_DATA" format="none">SETTINGS_WEBTRANSPORT_INITIAL_MAX_DATA</xref>.</t>
      </section>
      <section anchor="WT_MAX_STREAM_DATA">
        <name>WT_MAX_STREAM_DATA Capsule</name>
        <t>An HTTP capsule <xref target="HTTP-DATAGRAM"/> called <iref item="WT_MAX_STREAM_DATA"/><xref target="WT_MAX_STREAM_DATA" format="none">WT_MAX_STREAM_DATA</xref> (type=0x190B4D3E) is
introduced to inform a peer of the maximum amount of data that can be sent on a
WebTransport stream.</t>
        <figure anchor="fig-wt_max_stream_data">
          <name>WT_MAX_STREAM_DATA Capsule Format</name>
          <artwork><![CDATA[
WT_MAX_STREAM_DATA Capsule {
  Type (i) = 0x190B4D3E,
  Length (i),
  Stream ID (i),
  Maximum Stream Data (i),
}
]]></artwork>
        </figure>
        <t><iref item="WT_MAX_STREAM_DATA"/><xref target="WT_MAX_STREAM_DATA" format="none">WT_MAX_STREAM_DATA</xref> capsules 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 <iref item="WT_STREAM"/><xref target="WT_STREAM" format="none">WT_STREAM</xref> capsules for the identified stream counts toward this
limit. The sum of the lengths of Stream Data fields in <iref item="WT_STREAM"/><xref target="WT_STREAM" format="none">WT_STREAM</xref> capsules on
the identified stream MUST NOT exceed the value advertised by a receiver.</t>
        <t>The <iref item="WT_MAX_STREAM_DATA"/><xref target="WT_MAX_STREAM_DATA" format="none">WT_MAX_STREAM_DATA</xref> capsule defines special intermediary handling, as
described in <xref section="3.2" sectionFormat="of" target="HTTP-DATAGRAM"/>.  Intermedaries MUST consume
<iref item="WT_MAX_STREAM_DATA"/><xref target="WT_MAX_STREAM_DATA" format="none">WT_MAX_STREAM_DATA</xref> capsules for flow control purposes and MUST generate and
send appropriate flow control signals for their limits; see
<xref target="flow-control-intermediaries"/>.</t>
        <t>Initial values for this limit for unidirectional and bidirectional streams MAY
be communicated by sending non-zero values for
<iref item="SETTINGS_WEBTRANSPORT_INITIAL_MAX_STREAM_DATA_UNI"/><xref target="SETTINGS_WEBTRANSPORT_INITIAL_MAX_STREAM_DATA_UNI" format="none">SETTINGS_WEBTRANSPORT_INITIAL_MAX_STREAM_DATA_UNI</xref> and
<iref item="SETTINGS_WEBTRANSPORT_INITIAL_MAX_STREAM_DATA_BIDI"/><xref target="SETTINGS_WEBTRANSPORT_INITIAL_MAX_STREAM_DATA_BIDI" format="none">SETTINGS_WEBTRANSPORT_INITIAL_MAX_STREAM_DATA_BIDI</xref> respectively.</t>
        <t>A <iref item="WT_MAX_STREAM_DATA"/><xref target="WT_MAX_STREAM_DATA" format="none">WT_MAX_STREAM_DATA</xref> capsule MUST NOT be sent after a sender requests that a
stream be closed with <iref item="WT_STOP_SENDING"/><xref target="WT_STOP_SENDING" format="none">WT_STOP_SENDING</xref>.  While QUIC permits redundant
MAX_STREAM_DATA frames, the ordering guarantee in HTTP/2 makes this unnecessary.
A <xref target="errors">stream error</xref> of type WEBTRANSPORT_STREAM_STATE_ERROR MUST be sent
if a <iref item="WT_MAX_STREAM_DATA"/><xref target="WT_MAX_STREAM_DATA" format="none">WT_MAX_STREAM_DATA</xref> capsule is received after a <iref item="WT_STOP_SENDING"/><xref target="WT_STOP_SENDING" format="none">WT_STOP_SENDING</xref> capsule for
the same stream.</t>
      </section>
      <section anchor="WT_MAX_STREAMS">
        <name>WT_MAX_STREAMS Capsule</name>
        <t>An HTTP capsule <xref target="HTTP-DATAGRAM"/> called <iref item="WT_MAX_STREAMS"/><xref target="WT_MAX_STREAMS" format="none">WT_MAX_STREAMS</xref> is introduced to inform
the peer of the cumulative number of streams of a given type it is permitted to
open.  A <iref item="WT_MAX_STREAMS"/><xref target="WT_MAX_STREAMS" format="none">WT_MAX_STREAMS</xref> capsule with a type of 0x190B4D3F applies to
bidirectional streams, and a <iref item="WT_MAX_STREAMS"/><xref target="WT_MAX_STREAMS" format="none">WT_MAX_STREAMS</xref> capsule with a type of 0x190B4D40
applies to unidirectional streams.</t>
        <t>Note that, because Maximum Streams is a cumulative value representing the total
allowed number of streams, including previously closed streams, endpoints
repeatedly send new <iref item="WT_MAX_STREAMS"/><xref target="WT_MAX_STREAMS" format="none">WT_MAX_STREAMS</xref> capsules with increasing Maximum Streams
values as streams are opened.</t>
        <figure anchor="fig-wt_max_streams">
          <name>WT_MAX_STREAMS Capsule Format</name>
          <artwork><![CDATA[
WT_MAX_STREAMS Capsule {
  Type (i) = 0x190B4D3F..0x190B4D40,
  Length (i),
  Maximum Streams (i),
}
]]></artwork>
        </figure>
        <t><iref item="WT_MAX_STREAMS"/><xref target="WT_MAX_STREAMS" format="none">WT_MAX_STREAMS</xref> capsules 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>
        <t>The <iref item="WT_MAX_STREAMS"/><xref target="WT_MAX_STREAMS" format="none">WT_MAX_STREAMS</xref> capsule defines special intermediary handling, as
described in <xref section="3.2" sectionFormat="of" target="HTTP-DATAGRAM"/>.  Intermedaries MUST consume
<iref item="WT_MAX_STREAMS"/><xref target="WT_MAX_STREAMS" format="none">WT_MAX_STREAMS</xref> capsules for flow control purposes and MUST generate and
send appropriate flow control signals for their limits.</t>
        <t>Initial values for these limits MAY be communicated by sending non-zero values
for <iref item="SETTINGS_WEBTRANSPORT_INITIAL_MAX_STREAMS_UNI"/><xref target="SETTINGS_WEBTRANSPORT_INITIAL_MAX_STREAMS_UNI" format="none">SETTINGS_WEBTRANSPORT_INITIAL_MAX_STREAMS_UNI</xref> and
<iref item="SETTINGS_WEBTRANSPORT_INITIAL_MAX_STREAMS_BIDI"/><xref target="SETTINGS_WEBTRANSPORT_INITIAL_MAX_STREAMS_BIDI" format="none">SETTINGS_WEBTRANSPORT_INITIAL_MAX_STREAMS_BIDI</xref>.</t>
      </section>
      <section anchor="WT_DATA_BLOCKED">
        <name>WT_DATA_BLOCKED Capsule</name>
        <t>A sender SHOULD send a <iref item="WT_DATA_BLOCKED"/><xref target="WT_DATA_BLOCKED" format="none">WT_DATA_BLOCKED</xref> capsule (type=0x190B4D41) when it wishes
to send data but is unable to do so due to WebTransport session-level flow
control. <iref item="WT_DATA_BLOCKED"/><xref target="WT_DATA_BLOCKED" format="none">WT_DATA_BLOCKED</xref> capsules can be used as input to tuning of flow
control algorithms.</t>
        <figure anchor="fig-wt_data_blocked">
          <name>WT_DATA_BLOCKED Capsule Format</name>
          <artwork><![CDATA[
WT_DATA_BLOCKED Capsule {
  Type (i) = 0x190B4D41,
  Length (i),
  Maximum Data (i),
}
]]></artwork>
        </figure>
        <t><iref item="WT_DATA_BLOCKED"/><xref target="WT_DATA_BLOCKED" format="none">WT_DATA_BLOCKED</xref> capsules 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>
        <t>The <iref item="WT_DATA_BLOCKED"/><xref target="WT_DATA_BLOCKED" format="none">WT_DATA_BLOCKED</xref> capsule defines special intermediary handling, as
described in <xref section="3.2" sectionFormat="of" target="HTTP-DATAGRAM"/>.  Intermedaries MUST consume
<iref item="WT_DATA_BLOCKED"/><xref target="WT_DATA_BLOCKED" format="none">WT_DATA_BLOCKED</xref> capsules for flow control purposes and MUST generate and
send appropriate flow control signals for their limits; see
<xref target="flow-control-intermediaries"/>.</t>
      </section>
      <section anchor="WT_STREAM_DATA_BLOCKED">
        <name>WT_STREAM_DATA_BLOCKED Capsule</name>
        <t>A sender SHOULD send a <iref item="WT_STREAM_DATA_BLOCKED"/><xref target="WT_STREAM_DATA_BLOCKED" format="none">WT_STREAM_DATA_BLOCKED</xref> capsule (type=0x190B4D42) when it
wishes to send data but is unable to do so due to stream-level flow control.
This capsule is analogous to <iref item="WT_DATA_BLOCKED"/><xref target="WT_DATA_BLOCKED" format="none">WT_DATA_BLOCKED</xref>.</t>
        <figure anchor="fig-wt_stream_data_blocked">
          <name>WT_STREAM_DATA_BLOCKED Capsule Format</name>
          <artwork><![CDATA[
WT_STREAM_DATA_BLOCKED Capsule {
  Type (i) = 0x190B4D42,
  Length (i),
  Stream ID (i),
  Maximum Stream Data (i),
}
]]></artwork>
        </figure>
        <t><iref item="WT_STREAM_DATA_BLOCKED"/><xref target="WT_STREAM_DATA_BLOCKED" format="none">WT_STREAM_DATA_BLOCKED</xref> capsules 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>
        <t>The <iref item="WT_STREAM_DATA_BLOCKED"/><xref target="WT_STREAM_DATA_BLOCKED" format="none">WT_STREAM_DATA_BLOCKED</xref> capsule defines special intermediary handling, as
described in <xref section="3.2" sectionFormat="of" target="HTTP-DATAGRAM"/>.  Intermedaries MUST consume
<iref item="WT_STREAM_DATA_BLOCKED"/><xref target="WT_STREAM_DATA_BLOCKED" format="none">WT_STREAM_DATA_BLOCKED</xref> capsules for flow control purposes and MUST generate and
send appropriate flow control signals for their limits; see
<xref target="flow-control-intermediaries"/>.</t>
        <t>A <iref item="WT_STREAM_DATA_BLOCKED"/><xref target="WT_STREAM_DATA_BLOCKED" format="none">WT_STREAM_DATA_BLOCKED</xref> capsule MUST NOT be sent after a stream is closed or
reset.  While QUIC permits redundant STREAM_DATA_BLOCKED frames, the ordering
guarantee in HTTP/2 makes this unnecessary.  A <xref target="errors">stream error</xref> of type
WEBTRANSPORT_STREAM_STATE_ERROR MUST be sent if a <iref item="WT_STREAM_DATA_BLOCKED"/><xref target="WT_STREAM_DATA_BLOCKED" format="none">WT_STREAM_DATA_BLOCKED</xref> capsule
is received for a stream that is not in a valid state.</t>
      </section>
      <section anchor="WT_STREAMS_BLOCKED">
        <name>WT_STREAMS_BLOCKED Capsule</name>
        <t>A sender SHOULD send a <iref item="WT_STREAMS_BLOCKED"/><xref target="WT_STREAMS_BLOCKED" format="none">WT_STREAMS_BLOCKED</xref> capsule (type=0x190B4D43 or
0x190B4D44) when it wishes to open a stream but is unable to do so due to the
maximum stream limit set by its peer.  A <iref item="WT_STREAMS_BLOCKED"/><xref target="WT_STREAMS_BLOCKED" format="none">WT_STREAMS_BLOCKED</xref> capsule of type
0x190B4D43 is used to indicate reaching the bidirectional stream limit, and a
STREAMS_BLOCKED capsule of type 0x190B4D44 is used to indicate reaching the
unidirectional stream limit.</t>
        <t>A <iref item="WT_STREAMS_BLOCKED"/><xref target="WT_STREAMS_BLOCKED" format="none">WT_STREAMS_BLOCKED</xref> capsule 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 Capsule Format</name>
          <artwork><![CDATA[
WT_STREAMS_BLOCKED Capsule {
  Type (i) = 0x190B4D43..0x190B4D44,
  Length (i),
  Maximum Streams (i),
}
]]></artwork>
        </figure>
        <t><iref item="WT_STREAMS_BLOCKED"/><xref target="WT_STREAMS_BLOCKED" format="none">WT_STREAMS_BLOCKED</xref> capsules 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 capsule 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>
        <t>The <iref item="WT_STREAMS_BLOCKED"/><xref target="WT_STREAMS_BLOCKED" format="none">WT_STREAMS_BLOCKED</xref> capsule defines special intermediary handling, as
described in <xref section="3.2" sectionFormat="of" target="HTTP-DATAGRAM"/>.  Intermedaries MUST consume
<iref item="WT_STREAMS_BLOCKED"/><xref target="WT_STREAMS_BLOCKED" format="none">WT_STREAMS_BLOCKED</xref> capsules for flow control purposes and MUST generate and
send appropriate flow control signals for their limits.</t>
      </section>
      <section anchor="DATAGRAM_CAPSULE">
        <name>DATAGRAM Capsule</name>
        <t>WebTransport over HTTP/2 uses the DATAGRAM capsule defined in <xref section="3.5" sectionFormat="of" target="HTTP-DATAGRAM"/> to carry datagram traffic.</t>
        <figure anchor="fig-datagram">
          <name>DATAGRAM Capsule Format</name>
          <artwork><![CDATA[
DATAGRAM Capsule {
  Type (i) = 0x00,
  Length (i),
  HTTP Datagram Payload (..),
}
]]></artwork>
        </figure>
        <t>When used in WebTransport over HTTP/2, DATAGRAM capsules contain the following
fields:</t>
        <dl>
          <dt>HTTP Datagram Payload:</dt>
          <dd>
            <t>The content of the datagram to be delivered.</t>
          </dd>
        </dl>
        <t>The data in DATAGRAM capsules 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 DATAGRAM capsule 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>
        <t><xref section="3.5" sectionFormat="of" target="HTTP-DATAGRAM"/> indicates that intermediaries that forward
DATAGRAM capsules where QUIC datagrams <xref target="DATAGRAM"/> are available forward the
contents of the capsule as native QUIC datagrams, rather than as HTTP datagrams
in a DATAGRAM capsule. Similarly, when forwarding DATAGRAM capsules used as
part of a WebTransport over HTTP/2 session on a WebTransport session that
natively supports QUIC datagrams, such as WebTransport over HTTP/3
<xref target="WEBTRANSPORT-H3"/>, intermediaries follow the requirements in
<xref target="WEBTRANSPORT-H3"/> to use native QUIC datagrams.</t>
      </section>
      <section anchor="CLOSE_WEBTRANSPORT_SESSION_CAPSULE">
        <name>CLOSE_WEBTRANSPORT_SESSION Capsule</name>
        <t>WebTransport over HTTP/2 uses the CLOSE_WEBTRANSPORT_SESSION capsule defined in
<xref section="5" sectionFormat="of" target="WEBTRANSPORT-H3"/> to terminate a WebTransport session with an
application error code and message.</t>
        <t>WebTransport sessions can be terminated by optionally sending a
CLOSE_WEBTRANSPORT_SESSION capsule and then by closing the HTTP/2 stream
associated with the session (see <xref target="errors"/>).</t>
        <figure anchor="fig-close_webtransport-session">
          <name>CLOSE_WEBTRANSPORT_SESSION Capsule Format</name>
          <artwork><![CDATA[
CLOSE_WEBTRANSPORT_SESSION Capsule {
  Type (i) = CLOSE_WEBTRANSPORT_SESSION,
  Length (i),
  Application Error Code (32),
  Application Error Message (..8192),
}
]]></artwork>
        </figure>
        <t>When used in WebTransport over HTTP/2, CLOSE_WEBTRANSPORT_SESSION capsules
contain the following fields:</t>
        <dl>
          <dt>Application Error Code:</dt>
          <dd>
            <t>A 32-bit error code provided by the application closing the connection.</t>
          </dd>
          <dt>Application Error Message:</dt>
          <dd>
            <t>A UTF-8 encoded error message string provided by the application closing the
connection.  The message takes up the remainder of the capsule, and its
length MUST NOT exceed 1024 bytes.</t>
          </dd>
        </dl>
        <t>An endpoint that sends a CLOSE_WEBTRANSPORT_SESSION capsule MUST then close the
stream. The recipient MUST close the stream upon receipt of the capsule.</t>
        <t>Cleanly terminating a WebTransport session without a CLOSE_WEBTRANSPORT_SESSION
capsule is semantically equivalent to terminating it with a
CLOSE_WEBTRANSPORT_SESSION capsule that has an error code of 0 and an empty
error string.</t>
      </section>
      <section anchor="DRAIN_WEBTRANSPORT_SESSION_CAPSULE">
        <name>DRAIN_WEBTRANSPORT_SESSION Capsule</name>
        <t>HTTP/2 uses GOAWAY frames (<xref section="6.8" sectionFormat="of" target="HTTP2"/>) to allow an endpoint to
gracefully stop accepting new streams while still finishing processing of
previously established streams.</t>
        <t>WebTransport over HTTP/2 uses the DRAIN_WEBTRANSPORT_SESSION capsule defined in
<xref section="4.6" sectionFormat="of" target="WEBTRANSPORT-H3"/> to gracefully shut down a WebTransport
session.</t>
        <figure anchor="fig-drain_webtransport_session">
          <name>DRAIN_WEBTRANSPORT_SESSION Capsule Format</name>
          <artwork><![CDATA[
DRAIN_WEBTRANSPORT_SESSION Capsule {
  Type (i) = DRAIN_WEBTRANSPORT_SESSION,
  Length (i) = 0
}
]]></artwork>
        </figure>
        <t>After sending or receiving either a DRAIN_WEBTRANSPORT_SESSION capsule or HTTP/2
GOAWAY frame, an endpoint MAY continue using the session and MAY open new
WebTransport streams. The signal is intended for the application using
WebTransport, which is expected to attempt to gracefully terminate the session
as soon as possible.</t>
      </section>
      <section anchor="capsule-ordering-and-reliability">
        <name>Capsule Ordering and Reliability</name>
        <t>The use of an ordered and reliable transport means that a receiver does not need
to tolerate capsules that arrive out of order. This differs from QUIC in that a
receiver is required to treat the arrival of out of order frames rather than
being tolerant.</t>
        <t>For an intermediary that forwards from an strongly-ordered transport (like
<xref target="WEBTRANSPORT-H3"/>) to a reliable transport (like this protocol), it is
necessary to maintain state for streams. A simple forwarding intermediary that
directly translates one type of protocol unit into another without understanding
the underlying state might cause a receiver to abort the session.</t>
        <t>For instance, after a RESET_STREAM frame is forwarded, an intermediary cannot
forward a RESET_STREAM frame as a <iref item="WT_RESET_STREAM"/><xref target="WT_RESET_STREAM" format="none">WT_RESET_STREAM</xref> capsule or a STREAM frame as a
<iref item="WT_STREAM"/><xref target="WT_STREAM" format="none">WT_STREAM</xref> capsule without error.</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
                                    SETTINGS_ENABLE_CONNECT_PROTOCOL = 1
                                    SETTINGS_WEBTRANSPORT_MAX_SESSIONS = 100

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 = 0
WebTransport Data

                                    WT_STREAM + FIN
                                    Stream ID = 0
                                    WebTransport Data

WT_STREAM + FIN
Stream ID = 0
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 <iref item="WT_STREAM"/><xref target="WT_STREAM" format="none">WT_STREAM</xref> capsule.</t>
      <artwork><![CDATA[
[[ From Client ]]                   [[ From Server ]]

SETTINGS

                                    SETTINGS
                                    SETTINGS_ENABLE_CONNECT_PROTOCOL = 1
                                    SETTINGS_WEBTRANSPORT_MAX_SESSIONS = 100

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 = 1
                                    WebTransport Data

WT_STREAM + FIN
Stream ID = 1
WebTransport Data

                                    WT_STREAM + FIN
                                    Stream ID = 1
                                    WebTransport Data
]]></artwork>
    </section>
    <section anchor="considerations-for-future-versions">
      <name>Considerations for Future Versions</name>
      <t>Future versions of WebTransport that change the syntax of the CONNECT requests
used to establish WebTransport sessions will need to modify the upgrade token
used to identify WebTransport, allowing servers to offer multiple versions
simultaneously (see <xref section="9.1" sectionFormat="of" target="WEBTRANSPORT-H3"/>).</t>
      <t>Servers that support future incompatible versions of WebTransport signal that
support by changing the codepoint used for the
SETTINGS_WEBTRANSPORT_MAX_SESSIONS parameter (see <xref target="h2-settings"/>).  Clients
can select the associated upgrade token, if applicable, to use when
establishing a new session, ensuring that servers will always know the syntax
in use for every incoming request.</t>
    </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>
      <t>This document registers new HTTP/2 settings (<xref target="h2-settings"/>), HTTP/2 error
codes (<xref target="iana-h2-error"/>), new capsules (<xref target="iana-capsules"/>), and the
<tt>WebTransport-Init</tt> header field (<xref target="iana-header"/>).</t>
      <section anchor="h2-settings">
        <name>HTTP/2 SETTINGS Parameter Registration</name>
        <t>The following entries are added to the "HTTP/2 Settings" registry established by
<xref target="HTTP2"/>:</t>
        <t anchor="SETTINGS_WEBTRANSPORT_MAX_SESSIONS">The SETTINGS_WEBTRANSPORT_MAX_SESSIONS parameter indicates that the specified
HTTP/2 connection is WebTransport-capable and the number of concurrent sessions
an endpoint is willing to receive. The default value for the
SETTINGS_WEBTRANSPORT_MAX_SESSIONS parameter is "0", meaning that the endpoint
is not willing to receive any WebTransport sessions.</t>
        <dl>
          <dt>Setting Name:</dt>
          <dd>
            <t>WEBTRANSPORT_MAX_SESSIONS</t>
          </dd>
          <dt>Value:</dt>
          <dd>
            <t>0x2b60</t>
          </dd>
          <dt>Default:</dt>
          <dd>
            <t>0</t>
          </dd>
          <dt>Specification:</dt>
          <dd>
            <t>This document</t>
          </dd>
        </dl>
        <t anchor="SETTINGS_WEBTRANSPORT_INITIAL_MAX_DATA">The <iref item="SETTINGS_WEBTRANSPORT_INITIAL_MAX_DATA"/><xref target="SETTINGS_WEBTRANSPORT_INITIAL_MAX_DATA" format="none">SETTINGS_WEBTRANSPORT_INITIAL_MAX_DATA</xref> parameter indicates the initial value
for the session data limit, otherwise communicated by the <iref item="WT_MAX_DATA"/><xref target="WT_MAX_DATA" format="none">WT_MAX_DATA</xref> capsule
(see <xref target="WT_MAX_DATA"/>). The default value for the
<iref item="SETTINGS_WEBTRANSPORT_INITIAL_MAX_DATA"/><xref target="SETTINGS_WEBTRANSPORT_INITIAL_MAX_DATA" format="none">SETTINGS_WEBTRANSPORT_INITIAL_MAX_DATA</xref> parameter is "0", indicating that the
endpoint needs to send a <iref item="WT_MAX_DATA"/><xref target="WT_MAX_DATA" format="none">WT_MAX_DATA</xref> capsule within each session before its
peer is allowed to send any stream data within that session.</t>
        <t>Note that this limit applies to all WebTransport sessions that use the HTTP/2
connection on which this SETTING is sent.</t>
        <dl>
          <dt>Setting Name:</dt>
          <dd>
            <t><iref item="SETTINGS_WEBTRANSPORT_INITIAL_MAX_DATA"/><xref target="SETTINGS_WEBTRANSPORT_INITIAL_MAX_DATA" format="none">SETTINGS_WEBTRANSPORT_INITIAL_MAX_DATA</xref></t>
          </dd>
          <dt>Value:</dt>
          <dd>
            <t>0x2b61</t>
          </dd>
          <dt>Default:</dt>
          <dd>
            <t>0</t>
          </dd>
          <dt>Specification:</dt>
          <dd>
            <t>This document</t>
          </dd>
        </dl>
        <t anchor="SETTINGS_WEBTRANSPORT_INITIAL_MAX_STREAM_DATA_UNI">The <iref item="SETTINGS_WEBTRANSPORT_INITIAL_MAX_STREAM_DATA_UNI"/><xref target="SETTINGS_WEBTRANSPORT_INITIAL_MAX_STREAM_DATA_UNI" format="none">SETTINGS_WEBTRANSPORT_INITIAL_MAX_STREAM_DATA_UNI</xref> parameter indicates the
initial value for the stream data limit for incoming unidirectional streams,
otherwise communicated by the <iref item="WT_MAX_STREAM_DATA"/><xref target="WT_MAX_STREAM_DATA" format="none">WT_MAX_STREAM_DATA</xref> capsule (see
<xref target="WT_MAX_STREAM_DATA"/>). The default value for the
<iref item="SETTINGS_WEBTRANSPORT_INITIAL_MAX_STREAM_DATA_UNI"/><xref target="SETTINGS_WEBTRANSPORT_INITIAL_MAX_STREAM_DATA_UNI" format="none">SETTINGS_WEBTRANSPORT_INITIAL_MAX_STREAM_DATA_UNI</xref> parameter is "0", indicating
that the endpoint needs to send <iref item="WT_MAX_STREAM_DATA"/><xref target="WT_MAX_STREAM_DATA" format="none">WT_MAX_STREAM_DATA</xref> capsules for each stream
within each individual WebTransport session before its peer is allowed to send
any stream data on those streams.</t>
        <t>Note that this limit applies to all WebTransport streams on all sessions that
use the HTTP/2 connection on which this SETTING is sent.</t>
        <dl>
          <dt>Setting Name:</dt>
          <dd>
            <t><iref item="SETTINGS_WEBTRANSPORT_INITIAL_MAX_STREAM_DATA_UNI"/><xref target="SETTINGS_WEBTRANSPORT_INITIAL_MAX_STREAM_DATA_UNI" format="none">SETTINGS_WEBTRANSPORT_INITIAL_MAX_STREAM_DATA_UNI</xref></t>
          </dd>
          <dt>Value:</dt>
          <dd>
            <t>0x2b62</t>
          </dd>
          <dt>Default:</dt>
          <dd>
            <t>0</t>
          </dd>
          <dt>Specification:</dt>
          <dd>
            <t>This document</t>
          </dd>
        </dl>
        <t anchor="SETTINGS_WEBTRANSPORT_INITIAL_MAX_STREAM_DATA_BIDI">The <iref item="SETTINGS_WEBTRANSPORT_INITIAL_MAX_STREAM_DATA_BIDI"/><xref target="SETTINGS_WEBTRANSPORT_INITIAL_MAX_STREAM_DATA_BIDI" format="none">SETTINGS_WEBTRANSPORT_INITIAL_MAX_STREAM_DATA_BIDI</xref> parameter indicates the
initial value for the stream data limit for incoming data on bidirectional
streams, otherwise communicated by the <iref item="WT_MAX_STREAM_DATA"/><xref target="WT_MAX_STREAM_DATA" format="none">WT_MAX_STREAM_DATA</xref> capsule (see
<xref target="WT_MAX_STREAM_DATA"/>). The default value for the
<iref item="SETTINGS_WEBTRANSPORT_INITIAL_MAX_STREAM_DATA_BIDI"/><xref target="SETTINGS_WEBTRANSPORT_INITIAL_MAX_STREAM_DATA_BIDI" format="none">SETTINGS_WEBTRANSPORT_INITIAL_MAX_STREAM_DATA_BIDI</xref> parameter is "0", indicating
that the endpoint needs to send <iref item="WT_MAX_STREAM_DATA"/><xref target="WT_MAX_STREAM_DATA" format="none">WT_MAX_STREAM_DATA</xref> capsules for each stream
within each individual WebTransport session before its peer is allowed to send
any stream data on those streams.</t>
        <t>Note that this limit applies to all WebTransport streams on all sessions that
use the HTTP/2 connection on which this SETTING is sent.</t>
        <dl>
          <dt>Setting Name:</dt>
          <dd>
            <t><iref item="SETTINGS_WEBTRANSPORT_INITIAL_MAX_STREAM_DATA_BIDI"/><xref target="SETTINGS_WEBTRANSPORT_INITIAL_MAX_STREAM_DATA_BIDI" format="none">SETTINGS_WEBTRANSPORT_INITIAL_MAX_STREAM_DATA_BIDI</xref></t>
          </dd>
          <dt>Value:</dt>
          <dd>
            <t>0x2b63</t>
          </dd>
          <dt>Default:</dt>
          <dd>
            <t>0</t>
          </dd>
          <dt>Specification:</dt>
          <dd>
            <t>This document</t>
          </dd>
        </dl>
        <t anchor="SETTINGS_WEBTRANSPORT_INITIAL_MAX_STREAMS_UNI">The <iref item="SETTINGS_WEBTRANSPORT_INITIAL_MAX_STREAMS_UNI"/><xref target="SETTINGS_WEBTRANSPORT_INITIAL_MAX_STREAMS_UNI" format="none">SETTINGS_WEBTRANSPORT_INITIAL_MAX_STREAMS_UNI</xref> parameter indicates the
initial value for the unidirectional max stream limit, otherwise communicated
by the <iref item="WT_MAX_STREAMS"/><xref target="WT_MAX_STREAMS" format="none">WT_MAX_STREAMS</xref> capsule (see <xref target="WT_MAX_STREAMS"/>). The default value for
the <iref item="SETTINGS_WEBTRANSPORT_INITIAL_MAX_STREAMS_UNI"/><xref target="SETTINGS_WEBTRANSPORT_INITIAL_MAX_STREAMS_UNI" format="none">SETTINGS_WEBTRANSPORT_INITIAL_MAX_STREAMS_UNI</xref> parameter is "0", indicating
that the endpoint needs to send <iref item="WT_MAX_STREAMS"/><xref target="WT_MAX_STREAMS" format="none">WT_MAX_STREAMS</xref> capsules on each individual
WebTransport session before its peer is allowed to create any unidirectional
streams within that session.</t>
        <t>Note that this limit applies to all WebTransport sessions that use the HTTP/2
connection on which this SETTING is sent.</t>
        <dl>
          <dt>Setting Name:</dt>
          <dd>
            <t><iref item="SETTINGS_WEBTRANSPORT_INITIAL_MAX_STREAMS_UNI"/><xref target="SETTINGS_WEBTRANSPORT_INITIAL_MAX_STREAMS_UNI" format="none">SETTINGS_WEBTRANSPORT_INITIAL_MAX_STREAMS_UNI</xref></t>
          </dd>
          <dt>Value:</dt>
          <dd>
            <t>0x2b64</t>
          </dd>
          <dt>Default:</dt>
          <dd>
            <t>0</t>
          </dd>
          <dt>Specification:</dt>
          <dd>
            <t>This document</t>
          </dd>
        </dl>
        <t anchor="SETTINGS_WEBTRANSPORT_INITIAL_MAX_STREAMS_BIDI">The <iref item="SETTINGS_WEBTRANSPORT_INITIAL_MAX_STREAMS_BIDI"/><xref target="SETTINGS_WEBTRANSPORT_INITIAL_MAX_STREAMS_BIDI" format="none">SETTINGS_WEBTRANSPORT_INITIAL_MAX_STREAMS_BIDI</xref> parameter indicates the
initial value for the bidirectional max stream limit, otherwise communicated by
the <iref item="WT_MAX_STREAMS"/><xref target="WT_MAX_STREAMS" format="none">WT_MAX_STREAMS</xref> capsule (see <xref target="WT_MAX_STREAMS"/>). The default value for the
<iref item="SETTINGS_WEBTRANSPORT_INITIAL_MAX_STREAMS_BIDI"/><xref target="SETTINGS_WEBTRANSPORT_INITIAL_MAX_STREAMS_BIDI" format="none">SETTINGS_WEBTRANSPORT_INITIAL_MAX_STREAMS_BIDI</xref> parameter is "0", indicating
that the endpoint needs to send <iref item="WT_MAX_STREAMS"/><xref target="WT_MAX_STREAMS" format="none">WT_MAX_STREAMS</xref> capsules on each individual
WebTransport session before its peer is allowed to create any bidirectional
streams within that session.</t>
        <t>Note that this limit applies to all WebTransport sessions that use the HTTP/2
connection on which this SETTING is sent.</t>
        <dl>
          <dt>Setting Name:</dt>
          <dd>
            <t><iref item="SETTINGS_WEBTRANSPORT_INITIAL_MAX_STREAMS_BIDI"/><xref target="SETTINGS_WEBTRANSPORT_INITIAL_MAX_STREAMS_BIDI" format="none">SETTINGS_WEBTRANSPORT_INITIAL_MAX_STREAMS_BIDI</xref></t>
          </dd>
          <dt>Value:</dt>
          <dd>
            <t>0x2b65</t>
          </dd>
          <dt>Default:</dt>
          <dd>
            <t>0</t>
          </dd>
          <dt>Specification:</dt>
          <dd>
            <t>This document</t>
          </dd>
        </dl>
      </section>
      <section anchor="iana-h2-error">
        <name>HTTP/2 Error Code Registration</name>
        <t>The following entries are added to the "HTTP/2 Error Code" registry established by
<xref target="HTTP2"/>:</t>
        <t>For WEBTRANSPORT_ERROR:</t>
        <dl>
          <dt>Code:</dt>
          <dd>
            <t>0xTBD</t>
          </dd>
          <dt>Name:</dt>
          <dd>
            <t>WEBTRANSPORT_ERROR</t>
          </dd>
          <dt>Description:</dt>
          <dd>
            <t>General WebTransport error detected</t>
          </dd>
          <dt>Reference:</dt>
          <dd>
            <t><xref target="errors"/></t>
          </dd>
        </dl>
        <t>For WEBTRANSPORT_STREAM_STATE_ERROR:</t>
        <dl>
          <dt>Code:</dt>
          <dd>
            <t>0xTBD</t>
          </dd>
          <dt>Name:</dt>
          <dd>
            <t>WEBTRANSPORT_STREAM_STATE_ERROR</t>
          </dd>
          <dt>Description:</dt>
          <dd>
            <t>Unexpected WebTransport stream-related capsule received</t>
          </dd>
          <dt>Reference:</dt>
          <dd>
            <t><xref target="errors"/></t>
          </dd>
        </dl>
      </section>
      <section anchor="iana-capsules">
        <name>Capsule Types</name>
        <t>The following entries are added to the "HTTP Capsule Types" registry established
by <xref target="HTTP-DATAGRAM"/>:</t>
        <t>The <tt>PADDING</tt> capsule.</t>
        <dl spacing="compact">
          <dt>Value:</dt>
          <dd>
            <t>0x190B4D38</t>
          </dd>
          <dt>Capsule Type:</dt>
          <dd>
            <t><iref item="PADDING"/><xref target="PADDING" format="none">PADDING</xref></t>
          </dd>
          <dt>Status:</dt>
          <dd>
            <t>permanent</t>
          </dd>
          <dt>Specification:</dt>
          <dd>
            <t>This document</t>
          </dd>
          <dt>Change Controller:</dt>
          <dd>
            <t>IETF</t>
          </dd>
          <dt>Contact:</dt>
          <dd>
            <t>WebTransport Working Group <eref target="mailto:webtransport@ietf.org">webtransport@ietf.org</eref></t>
          </dd>
          <dt>Notes:</dt>
          <dd>
            <t>None</t>
          </dd>
        </dl>
        <t>The <tt>WT_RESET_STREAM</tt> capsule.</t>
        <dl spacing="compact">
          <dt>Value:</dt>
          <dd>
            <t>0x190B4D39</t>
          </dd>
          <dt>Capsule Type:</dt>
          <dd>
            <t><iref item="WT_RESET_STREAM"/><xref target="WT_RESET_STREAM" format="none">WT_RESET_STREAM</xref></t>
          </dd>
          <dt>Status:</dt>
          <dd>
            <t>permanent</t>
          </dd>
          <dt>Specification:</dt>
          <dd>
            <t>This document</t>
          </dd>
          <dt>Change Controller:</dt>
          <dd>
            <t>IETF</t>
          </dd>
          <dt>Contact:</dt>
          <dd>
            <t>WebTransport Working Group <eref target="mailto:webtransport@ietf.org">webtransport@ietf.org</eref></t>
          </dd>
          <dt>Notes:</dt>
          <dd>
            <t>None</t>
          </dd>
        </dl>
        <t>The <tt>WT_STOP_SENDING</tt> capsule.</t>
        <dl spacing="compact">
          <dt>Value:</dt>
          <dd>
            <t>0x190B4D3A</t>
          </dd>
          <dt>Capsule Type:</dt>
          <dd>
            <t><iref item="WT_STOP_SENDING"/><xref target="WT_STOP_SENDING" format="none">WT_STOP_SENDING</xref></t>
          </dd>
          <dt>Status:</dt>
          <dd>
            <t>permanent</t>
          </dd>
          <dt>Specification:</dt>
          <dd>
            <t>This document</t>
          </dd>
          <dt>Change Controller:</dt>
          <dd>
            <t>IETF</t>
          </dd>
          <dt>Contact:</dt>
          <dd>
            <t>WebTransport Working Group <eref target="mailto:webtransport@ietf.org">webtransport@ietf.org</eref></t>
          </dd>
          <dt>Notes:</dt>
          <dd>
            <t>None</t>
          </dd>
        </dl>
        <t>The <tt>WT_STREAM</tt> capsule.</t>
        <dl spacing="compact">
          <dt>Value:</dt>
          <dd>
            <t>0x190B4D3B..0x190B4D3C</t>
          </dd>
          <dt>Capsule Type:</dt>
          <dd>
            <t><iref item="WT_STREAM"/><xref target="WT_STREAM" format="none">WT_STREAM</xref></t>
          </dd>
          <dt>Status:</dt>
          <dd>
            <t>permanent</t>
          </dd>
          <dt>Specification:</dt>
          <dd>
            <t>This document</t>
          </dd>
          <dt>Change Controller:</dt>
          <dd>
            <t>IETF</t>
          </dd>
          <dt>Contact:</dt>
          <dd>
            <t>WebTransport Working Group <eref target="mailto:webtransport@ietf.org">webtransport@ietf.org</eref></t>
          </dd>
          <dt>Notes:</dt>
          <dd>
            <t>None</t>
          </dd>
        </dl>
        <t>The <tt>WT_MAX_DATA</tt> capsule.</t>
        <dl spacing="compact">
          <dt>Value:</dt>
          <dd>
            <t>0x190B4D3D</t>
          </dd>
          <dt>Capsule Type:</dt>
          <dd>
            <t><iref item="WT_MAX_DATA"/><xref target="WT_MAX_DATA" format="none">WT_MAX_DATA</xref></t>
          </dd>
          <dt>Status:</dt>
          <dd>
            <t>permanent</t>
          </dd>
          <dt>Specification:</dt>
          <dd>
            <t>This document</t>
          </dd>
          <dt>Change Controller:</dt>
          <dd>
            <t>IETF</t>
          </dd>
          <dt>Contact:</dt>
          <dd>
            <t>WebTransport Working Group <eref target="mailto:webtransport@ietf.org">webtransport@ietf.org</eref></t>
          </dd>
          <dt>Notes:</dt>
          <dd>
            <t>None</t>
          </dd>
        </dl>
        <t>The <tt>WT_MAX_STREAM_DATA</tt> capsule.</t>
        <dl spacing="compact">
          <dt>Value:</dt>
          <dd>
            <t>0x190B4D3E</t>
          </dd>
          <dt>Capsule Type:</dt>
          <dd>
            <t><iref item="WT_MAX_STREAM_DATA"/><xref target="WT_MAX_STREAM_DATA" format="none">WT_MAX_STREAM_DATA</xref></t>
          </dd>
          <dt>Status:</dt>
          <dd>
            <t>permanent</t>
          </dd>
          <dt>Specification:</dt>
          <dd>
            <t>This document</t>
          </dd>
          <dt>Change Controller:</dt>
          <dd>
            <t>IETF</t>
          </dd>
          <dt>Contact:</dt>
          <dd>
            <t>WebTransport Working Group <eref target="mailto:webtransport@ietf.org">webtransport@ietf.org</eref></t>
          </dd>
          <dt>Notes:</dt>
          <dd>
            <t>None</t>
          </dd>
        </dl>
        <t>The <tt>WT_MAX_STREAMS</tt> capsule.</t>
        <dl spacing="compact">
          <dt>Value:</dt>
          <dd>
            <t>0x190B4D3F..0x190B4D40</t>
          </dd>
          <dt>Capsule Type:</dt>
          <dd>
            <t><iref item="WT_MAX_STREAMS"/><xref target="WT_MAX_STREAMS" format="none">WT_MAX_STREAMS</xref></t>
          </dd>
          <dt>Status:</dt>
          <dd>
            <t>permanent</t>
          </dd>
          <dt>Specification:</dt>
          <dd>
            <t>This document</t>
          </dd>
          <dt>Change Controller:</dt>
          <dd>
            <t>IETF</t>
          </dd>
          <dt>Contact:</dt>
          <dd>
            <t>WebTransport Working Group <eref target="mailto:webtransport@ietf.org">webtransport@ietf.org</eref></t>
          </dd>
          <dt>Notes:</dt>
          <dd>
            <t>None</t>
          </dd>
        </dl>
        <t>The <tt>WT_DATA_BLOCKED</tt> capsule.</t>
        <dl spacing="compact">
          <dt>Value:</dt>
          <dd>
            <t>0x190B4D41</t>
          </dd>
          <dt>Capsule Type:</dt>
          <dd>
            <t><iref item="WT_DATA_BLOCKED"/><xref target="WT_DATA_BLOCKED" format="none">WT_DATA_BLOCKED</xref></t>
          </dd>
          <dt>Status:</dt>
          <dd>
            <t>permanent</t>
          </dd>
          <dt>Specification:</dt>
          <dd>
            <t>This document</t>
          </dd>
          <dt>Change Controller:</dt>
          <dd>
            <t>IETF</t>
          </dd>
          <dt>Contact:</dt>
          <dd>
            <t>WebTransport Working Group <eref target="mailto:webtransport@ietf.org">webtransport@ietf.org</eref></t>
          </dd>
          <dt>Notes:</dt>
          <dd>
            <t>None</t>
          </dd>
        </dl>
        <t>The <tt>WT_STREAM_DATA_BLOCKED</tt> capsule.</t>
        <dl spacing="compact">
          <dt>Value:</dt>
          <dd>
            <t>0x190B4D42</t>
          </dd>
          <dt>Capsule Type:</dt>
          <dd>
            <t><iref item="WT_STREAM_DATA_BLOCKED"/><xref target="WT_STREAM_DATA_BLOCKED" format="none">WT_STREAM_DATA_BLOCKED</xref></t>
          </dd>
          <dt>Status:</dt>
          <dd>
            <t>permanent</t>
          </dd>
          <dt>Specification:</dt>
          <dd>
            <t>This document</t>
          </dd>
          <dt>Change Controller:</dt>
          <dd>
            <t>IETF</t>
          </dd>
          <dt>Contact:</dt>
          <dd>
            <t>WebTransport Working Group <eref target="mailto:webtransport@ietf.org">webtransport@ietf.org</eref></t>
          </dd>
          <dt>Notes:</dt>
          <dd>
            <t>None</t>
          </dd>
        </dl>
        <t>The <tt>WT_STREAMS_BLOCKED</tt> capsule.</t>
        <dl spacing="compact">
          <dt>Value:</dt>
          <dd>
            <t>0x190B4D43..0x190B4D44</t>
          </dd>
          <dt>Capsule Type:</dt>
          <dd>
            <t><iref item="WT_STREAMS_BLOCKED"/><xref target="WT_STREAMS_BLOCKED" format="none">WT_STREAMS_BLOCKED</xref></t>
          </dd>
          <dt>Status:</dt>
          <dd>
            <t>permanent</t>
          </dd>
          <dt>Specification:</dt>
          <dd>
            <t>This document</t>
          </dd>
          <dt>Change Controller:</dt>
          <dd>
            <t>IETF</t>
          </dd>
          <dt>Contact:</dt>
          <dd>
            <t>WebTransport Working Group <eref target="mailto:webtransport@ietf.org">webtransport@ietf.org</eref></t>
          </dd>
          <dt>Notes:</dt>
          <dd>
            <t>None</t>
          </dd>
        </dl>
      </section>
      <section anchor="iana-header">
        <name>HTTP Header Field Name</name>
        <t>IANA will register the following entry in the "Hypertext Transfer Protocol
(HTTP) Field Name Registry" maintained at
<eref target="https://www.iana.org/assignments/http-fields">https://www.iana.org/assignments/http-fields</eref>:</t>
        <dl>
          <dt>Field Name:</dt>
          <dd>
            <t>WebTransport-Init</t>
          </dd>
          <dt>Template:</dt>
          <dd>
            <t>None</t>
          </dd>
          <dt>Status:</dt>
          <dd>
            <t>permanent</t>
          </dd>
          <dt>Reference:</dt>
          <dd>
            <t>This document</t>
          </dd>
          <dt>Comments:</dt>
          <dd>
            <t>None</t>
          </dd>
        </dl>
      </section>
    </section>
  </middle>
  <back>
    <references anchor="sec-combined-references">
      <name>References</name>
      <references anchor="sec-normative-references">
        <name>Normative References</name>
        <reference anchor="OVERVIEW">
          <front>
            <title>The WebTransport Protocol Framework</title>
            <author fullname="Victor Vasiliev" initials="V." surname="Vasiliev">
              <organization>Google</organization>
            </author>
            <date day="25" month="February" year="2025"/>
            <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 an abstract 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-09"/>
        </reference>
        <reference anchor="WEBTRANSPORT-H3">
          <front>
            <title>WebTransport over HTTP/3</title>
            <author fullname="Alan Frindell" initials="A." surname="Frindell">
              <organization>Facebook</organization>
            </author>
            <author fullname="Eric Kinnear" initials="E." surname="Kinnear">
              <organization>Apple Inc.</organization>
            </author>
            <author fullname="Victor Vasiliev" initials="V." surname="Vasiliev">
              <organization>Google</organization>
            </author>
            <date day="3" month="March" year="2025"/>
            <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-12"/>
        </reference>
        <reference anchor="HTTP">
          <front>
            <title>HTTP Semantics</title>
            <author fullname="Roy T. Fielding" initials="R. T." surname="Fielding">
              <organization>Adobe</organization>
            </author>
            <author fullname="Mark Nottingham" initials="M." surname="Nottingham">
              <organization>Fastly</organization>
            </author>
            <author fullname="Julian Reschke" initials="J." surname="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 RFCs 2818, 7231, 7232, 7233, 7235, 7538, 7615, 7694, and portions of 7230.
              </t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-ietf-httpbis-semantics-19"/>
        </reference>
        <reference anchor="HTTP-DATAGRAM">
          <front>
            <title>HTTP Datagrams and the Capsule Protocol</title>
            <author fullname="D. Schinazi" initials="D." surname="Schinazi"/>
            <author fullname="L. Pardue" initials="L." surname="Pardue"/>
            <date month="August" year="2022"/>
            <abstract>
              <t>This document describes HTTP Datagrams, a convention for conveying multiplexed, potentially unreliable datagrams inside an HTTP connection.</t>
              <t>In HTTP/3, HTTP Datagrams can be sent unreliably using the QUIC DATAGRAM extension. When the QUIC DATAGRAM frame is unavailable or undesirable, HTTP Datagrams can be sent using the Capsule Protocol, which is a more general convention for conveying data in HTTP connections.</t>
              <t>HTTP Datagrams and the Capsule Protocol are intended for use by HTTP extensions, not applications.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="9297"/>
          <seriesInfo name="DOI" value="10.17487/RFC9297"/>
        </reference>
        <reference anchor="HTTP2">
          <front>
            <title>HTTP/2</title>
            <author fullname="M. Thomson" initials="M." role="editor" surname="Thomson"/>
            <author fullname="C. Benfield" initials="C." role="editor" surname="Benfield"/>
            <date month="June" 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.</t>
              <t>This document obsoletes RFCs 7540 and 8740.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="9113"/>
          <seriesInfo name="DOI" value="10.17487/RFC9113"/>
        </reference>
        <reference anchor="RFC2119">
          <front>
            <title>Key words for use in RFCs to Indicate Requirement Levels</title>
            <author fullname="S. Bradner" initials="S." surname="Bradner"/>
            <date month="March" year="1997"/>
            <abstract>
              <t>In many standards track documents several words are used to signify the requirements in the specification. These words are often capitalized. This document defines these words as they should be interpreted in IETF documents. This document specifies an Internet Best Current Practices for the Internet Community, and requests discussion and suggestions for improvements.</t>
            </abstract>
          </front>
          <seriesInfo name="BCP" value="14"/>
          <seriesInfo name="RFC" value="2119"/>
          <seriesInfo name="DOI" value="10.17487/RFC2119"/>
        </reference>
        <reference anchor="RFC8174">
          <front>
            <title>Ambiguity of Uppercase vs Lowercase in RFC 2119 Key Words</title>
            <author fullname="B. Leiba" initials="B." surname="Leiba"/>
            <date month="May" year="2017"/>
            <abstract>
              <t>RFC 2119 specifies common key words that may be used in protocol specifications. This document aims to reduce the ambiguity by clarifying that only UPPERCASE usage of the key words have the defined special meanings.</t>
            </abstract>
          </front>
          <seriesInfo name="BCP" value="14"/>
          <seriesInfo name="RFC" value="8174"/>
          <seriesInfo name="DOI" value="10.17487/RFC8174"/>
        </reference>
        <reference anchor="RFC8441">
          <front>
            <title>Bootstrapping WebSockets with HTTP/2</title>
            <author fullname="P. McManus" initials="P." surname="McManus"/>
            <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"/>
            <author fullname="J. Reschke" initials="J." role="editor" surname="Reschke"/>
            <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"/>
            <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="RFC9110">
          <front>
            <title>HTTP Semantics</title>
            <author fullname="R. Fielding" initials="R." role="editor" surname="Fielding"/>
            <author fullname="M. Nottingham" initials="M." role="editor" surname="Nottingham"/>
            <author fullname="J. Reschke" initials="J." role="editor" surname="Reschke"/>
            <date month="June" year="2022"/>
            <abstract>
              <t>The Hypertext Transfer Protocol (HTTP) is a stateless application-level protocol for distributed, collaborative, hypertext information systems. This document describes the overall architecture of HTTP, establishes common terminology, and defines aspects of the protocol that are shared by all versions. In this definition are core protocol elements, extensibility mechanisms, and the "http" and "https" Uniform Resource Identifier (URI) schemes.</t>
              <t>This document updates RFC 3864 and obsoletes RFCs 2818, 7231, 7232, 7233, 7235, 7538, 7615, 7694, and portions of 7230.</t>
            </abstract>
          </front>
          <seriesInfo name="STD" value="97"/>
          <seriesInfo name="RFC" value="9110"/>
          <seriesInfo name="DOI" value="10.17487/RFC9110"/>
        </reference>
        <reference anchor="SEMANTICS">
          <front>
            <title>HTTP Semantics</title>
            <author fullname="Roy T. Fielding" initials="R. T." surname="Fielding">
              <organization>Adobe</organization>
            </author>
            <author fullname="Mark Nottingham" initials="M." surname="Nottingham">
              <organization>Fastly</organization>
            </author>
            <author fullname="Julian Reschke" initials="J." surname="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 RFCs 2818, 7231, 7232, 7233, 7235, 7538, 7615, 7694, and portions of 7230.
              </t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-ietf-httpbis-semantics-19"/>
        </reference>
        <reference anchor="RFC6585">
          <front>
            <title>Additional HTTP Status Codes</title>
            <author fullname="M. Nottingham" initials="M." surname="Nottingham"/>
            <author fullname="R. Fielding" initials="R." surname="Fielding"/>
            <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="RFC8941">
          <front>
            <title>Structured Field Values for HTTP</title>
            <author fullname="M. Nottingham" initials="M." surname="Nottingham"/>
            <author fullname="P-H. Kamp" surname="P-H. Kamp"/>
            <date month="February" year="2021"/>
            <abstract>
              <t>This document describes a set of data types and associated algorithms that are intended to make it easier and safer to define and handle HTTP header and trailer fields, known as "Structured Fields", "Structured Headers", or "Structured Trailers". It is intended for use by specifications of new HTTP fields that wish to use a common syntax that is more restrictive than traditional HTTP field values.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="8941"/>
          <seriesInfo name="DOI" value="10.17487/RFC8941"/>
        </reference>
        <reference anchor="RFC9000">
          <front>
            <title>QUIC: A UDP-Based Multiplexed and Secure Transport</title>
            <author fullname="J. Iyengar" initials="J." role="editor" surname="Iyengar"/>
            <author fullname="M. Thomson" initials="M." role="editor" surname="Thomson"/>
            <date month="May" year="2021"/>
            <abstract>
              <t>This document defines the core of the QUIC transport protocol. QUIC provides applications with flow-controlled streams for structured communication, low-latency connection establishment, and network path migration. QUIC includes security measures that ensure confidentiality, integrity, and availability in a range of deployment circumstances. Accompanying documents describe the integration of TLS for key negotiation, loss detection, and an exemplary congestion control algorithm.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="9000"/>
          <seriesInfo name="DOI" value="10.17487/RFC9000"/>
        </reference>
        <reference anchor="RFC9113">
          <front>
            <title>HTTP/2</title>
            <author fullname="M. Thomson" initials="M." role="editor" surname="Thomson"/>
            <author fullname="C. Benfield" initials="C." role="editor" surname="Benfield"/>
            <date month="June" 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.</t>
              <t>This document obsoletes RFCs 7540 and 8740.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="9113"/>
          <seriesInfo name="DOI" value="10.17487/RFC9113"/>
        </reference>
        <reference anchor="PARTIAL-RESET">
          <front>
            <title>QUIC Stream Resets with Partial Delivery</title>
            <author fullname="Marten Seemann" initials="M." surname="Seemann">
         </author>
            <author fullname="Kazuho Oku" initials="K." surname="Oku">
              <organization>Fastly</organization>
            </author>
            <date day="28" month="February" year="2024"/>
            <abstract>
              <t>   QUIC defines a RESET_STREAM frame to abort sending on a stream.  When
   a sender resets a stream, it also stops retransmitting STREAM frames
   for this stream in the event of packet loss.  On the receiving side,
   there is no guarantee that any data sent on that stream is delivered.

   This document defines a new QUIC frame, the RESET_STREAM_AT frame,
   that allows resetting a stream, while guaranteeing delivery of stream
   data up to a certain byte offset.

              </t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-ietf-quic-reliable-stream-reset-06"/>
        </reference>
      </references>
      <references anchor="sec-informative-references">
        <name>Informative References</name>
        <reference anchor="DATAGRAM">
          <front>
            <title>An Unreliable Datagram Extension to QUIC</title>
            <author fullname="T. Pauly" initials="T." surname="Pauly"/>
            <author fullname="E. Kinnear" initials="E." surname="Kinnear"/>
            <author fullname="D. Schinazi" initials="D." surname="Schinazi"/>
            <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="HTTP3">
          <front>
            <title>HTTP/3</title>
            <author fullname="Mike Bishop" initials="M." surname="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.
              </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"/>
            <author fullname="M. Thomson" initials="M." role="editor" surname="Thomson"/>
            <date month="May" year="2021"/>
            <abstract>
              <t>This document defines the core of the QUIC transport protocol. QUIC provides applications with flow-controlled streams for structured communication, low-latency connection establishment, and network path migration. QUIC includes security measures that ensure confidentiality, integrity, and availability in a range of deployment circumstances. Accompanying documents describe the integration of TLS for key negotiation, loss detection, and an exemplary congestion control algorithm.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="9000"/>
          <seriesInfo name="DOI" value="10.17487/RFC9000"/>
        </reference>
        <reference anchor="RFC7301">
          <front>
            <title>Transport Layer Security (TLS) Application-Layer Protocol Negotiation Extension</title>
            <author fullname="S. Friedl" initials="S." surname="Friedl"/>
            <author fullname="A. Popov" initials="A." surname="Popov"/>
            <author fullname="A. Langley" initials="A." surname="Langley"/>
            <author fullname="E. Stephan" initials="E." surname="Stephan"/>
            <date month="July" year="2014"/>
            <abstract>
              <t>This document describes a Transport Layer Security (TLS) extension for application-layer protocol negotiation within the TLS handshake. For instances in which multiple application protocols are supported on the same TCP or UDP port, this extension allows the application layer to negotiate which protocol will be used within the TLS connection.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="7301"/>
          <seriesInfo name="DOI" value="10.17487/RFC7301"/>
        </reference>
        <reference anchor="MPTCP">
          <front>
            <title>TCP Extensions for Multipath Operation with Multiple Addresses</title>
            <author fullname="A. Ford" initials="A." surname="Ford"/>
            <author fullname="C. Raiciu" initials="C." surname="Raiciu"/>
            <author fullname="M. Handley" initials="M." surname="Handley"/>
            <author fullname="O. Bonaventure" initials="O." surname="Bonaventure"/>
            <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>
    <?line 1642?>

<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:
H4sIAAAAAAAAA+19aXfbRpbo9/oVaPnD2BmSlmRlsdLuCS3JiXpsyU+Uk+mX
k2ODZFHCMwmwAVAy28f929/dagMKEqXO2mf6Q8cCgVpu3X2rfr+v6qye6/1k
6wc9Pi/TvFoWZZ0UV7pMvjs/f/14d0ul43Gprxqv9L+DX6bFJE8X8PW0TGd1
P9P1rH+txzW+1L+s6+Vuf2dHqWlawzsfD4fnR5/UBP64KMr1flLVU6WyZbmf
1OWqqne3t59u76q01Ol+kpa1ui7K9xdlsVruJ2ZQ9V6v4fF0PznOa13muu4f
4tRKVXWaT9+m8yKHqda6UstsP/mxLia9pILllnpWwb/WC/zHT0qlq/qyKPdV
0lcJ/C/Lq/1kOEhelFk+1fM5PeStDedpHj4vyos0z/6R1lmR7ycv0okeF8V7
WNFkQL/rRZrNYQsz/Oib2XgwKRbBREeD5L+zPNdp6c1zVGaT4DFMA7Mvl3Pt
hq5gI7reT05zLT+9Tsv3yQ/pmn6eZDXA9WC11GWd5UUvOUjn2awo8yxNnn6+
vbPHbxWrvMYDeJNntZ4moxqOpEqKWTJcaFhF6u9Cv+clfZPidK2tnA9gBav5
2tvIebFYrL2nv4991EtcUMcuXg2S88tiURW5t49XKU4e/EBbeVX8I5vPg8EX
9Tfz4lrDaorlegBYGYz+/SD5Pq2yeaavvOG/zyZ1UYa/hJj1bVFczLU/zxW+
fHX1zQX90trGt4PkfzLtzfHtqrhe2Wcb4u11URikVXlRLuD9Kw2Ukpx+f3T2
/fHRD0B8/cNBSOzIMK4yfQ2v/XD0/PxseDJ6fXp23v/uSextZA1P4FXkMN7v
+HicVf0KVpLX2aSSV/rAOYbfng1f7SdnLw6e7j79Un7Y5Qc7O0+AkeQzf7GN
T3aBDfX7/SQdA+qlE2AYAb+b6lmWA+6kSaVrxCA4zv5cX+k5YNliscoBmxBs
VTLTab0q4dWprrKLHNAOplUTOMK8hoWXyDgz5E0wCX1QX6Y1sDMNT7M6SxFR
x+sEZk/4o2qQAI5lMGAxWS3ggYKRJ2U2puUsywJ4WDHnYSbAiuDJVTbVCYBo
jSutLzU8X6ZjQKM6Y/z396Y8Xm6msqPqPB3PdUWDrCrd/Da5vtQ5rOLN4ev+
OK30VNkvYZS8gI1dAc7gGAOGLzzTb0/w/+ri7ZlOp7qslDrMqsmqqgAevGLc
LbLtpE7fw+zLOeBiAj/iMoL5ESOz/CKZZ1WtHv5oEAh/+wZRZgA4/dNDfKsu
9qO/PnrUg11kk0tccVpOLgE/pklaqx9/eoj4Vu0/fozfy08D891jfPC40vSf
/yLSeIureObP8gh2fQ5rLvWyqDIg53WC2PUel4x7yapqBfsDDPE3jac41vB0
lTdXcpHVlyuivcdMMReWaB6zjPWnZxH7CJmXRhGZDF8fK5mjKAFJl0U+pbUU
Mr+g2E1LuH4yGcgysuKxP93jR3LIi2w6BcakHqAULovpilC9QVIfPxp+8ekT
wt7SCyzG4PCFzpFRhzSmAmyGtz1aYTJATCWEfgKz/Bf+68kzy0T+vsomBJhP
nwjdtZJXg9VZPP74scGvYLXpHMi/CuctaNb/8+b4QMGc+N9nyFi2t7fhA8sU
qhUgWlqRfEsXQItlAspPelHiHx8/GqYES1PfgcAAyuwhogB3QA5RFQsNJHmV
lUW+oGmv6TecDY8MCQ5ObaqX82Ktp4R8/qk6LhayDQF3hRuzLKOAgWerXLhU
MQtPb1Uh3iDkEsuNB8w8snwyX+FocGLTrNQ0Qjo3e+6pcfRxAvqZAwas/fka
6Ga+xnmKfL5G+jf4EM7bY+S1e1pkF5c1H5LAgtgmLxm5In0OsEWGAzjgQdqH
Fk1qQJaDTorcGVkUMnTml3BkJGYQJ5hJTlZAV/DxoqhqQlt4//xAuGMyg0WN
gf4RXRjrYJ8PHiTnulyAHjMvLtbMMESNrZKtV29G51s9/m9yckr/PjuCEz87
OsR/j74bvnxp/2HeGH13+uYl/K7kX+7Lg9NXr45ODvljeJo0Hr0a/m2Lz2Lr
9PX58enJ8OUWHCnBRlnYIDbCHsaaZdmy1Ci3UqJikk1T/Ob5wetkZw+A9Ccg
hd2dnacAJ/7jq50v9z59Uig+eDICNv8JYFwnoIcBa8VBECeB4rM6nSOSAO1c
Ftd5gojfQvBZwZRZO3jKCdJ6Pn4cMdolO4NdRHTHgQYJCiVF5BCiwRSYOiDO
KqsuAQ/Gur7WJPMCchDBjjsBzsnIofjhIBmaJ+a1jHFF/uI5acWkn8q7kwL0
aqa+r5NUxaZDiZUjqObCGkWZmEz0sq6aKyT5Wom0U8Lh8d0KUdMRNMyN+who
CtE0eW0I7NQoc7FVVazMTAF22SxjbUZgMkrenB0zlrTPRO0NdvlU8FXkgOoH
0i7yNkRw5xosuvEcT2Xa88FZ6RzoJlWjo/Pz45NvR299/v321fB/3o6ORiNA
7BHqcni0yTWIMzjRq3S+ApkD7KjmY8mTre0twHPQHacIYc3wzWCrqyVuuQHj
QJNCMuYRhaOa2YCO8M98tRjD6/Aj7MuwDXNK/oZgr9dgUIicBsapUQ8hfKX1
0GgshwBrNetduWZJitAgnsdLgSd2L7IHYmf+Nr62Qi32arhjOFtCHFrDlq8M
bCWrJXDyKc75Ho4Rjvrg9OTk6OActvB30Hpq7whxb4FOauHwsNLao9ungx3S
QZsiGTWPoQGCUaSrNpWyjgmrRriwOEj0hxr+AHA11qeEVe3t7SB/OJ75h2Jo
rCbtjt7vdU0HB+4hK2MGSz2jtZdlJkp2Yw14+KuKj1J/mABKXuiG/ESRKRqk
NlOKJJZJEHuQ1ks904BmNFiKJPKZmY1f/Iz1IfPZ8SGCOk3Cl4y2HBlU4aDJ
ZyPZ9vHhZz1//aAOwJ6AzQtvALaQXAAq51GoKSTKLBddxBA+rLBDDQH+ABNV
7dPEcQg9KzB5k3c+jr5jTeCNIOo5IWpaxXQ+sYxU+C7NSMeWLqsVeikMi2wy
ucBMJeY2nDGX0R6ehEwN9rEsMiREc/QN4we+Sy9Q0bIk2FqHGE0hyjRPlIiX
8IifbMHyVVRuPmH6a+/mB3NaFu16yWfhubKe9xkJl/Anq/V9hrJDLVbzOlvO
9QckFjAh5Hx74e4nvFUWN0xCtFhBBlydmsGgGvTSVzIicjS9RPwANhEVj2T5
VJc4ZhoInBnB19ccnRBAKibVROZGLjxoCEe73Mm8qJAKFllZAtUCzFdjcSqQ
Hs9rJigZMwhmViilgWrg9IJhjWWBhMFHEGdCPjbBFtWEpBzNgnZLiB+wrLju
zpIyB/YxnWbyU4k2oqrLbCmIyFb6+dvR+dnR8JXZOMBjxHyFpkb4GYU/maGm
jgCVWYis6CGcABiQoNJrJICsgh8XxVTPNWqMcCIASjxzBNwgeeF/AXgI5gGQ
x9RfVexE9tUPrBcgyvQS+YNXH3s2or/xh7fPX54e/PfRYU/Z7YbPaYv2t5F5
3liqYd5Clkr4L3HT68tirgm3BBlIn2qhYka8qMe6oK5Ib5YjUsjt83Ww975g
hbiwfFA38dacidEXx/DQwjTFzZ0dgarVOG3WhJUoKyV9bUQa66gkgVFdq4ul
lcaiiBHETl+DonZyCCqccig07JKwToGeslPKF6aBsCXEn6ISB+yciHFqDNcF
KtJZDcRJz9kejkKDhrrWIbNi/Y9+Cmcm7dmIxSPD4tmQAjidy9LJR9K9wzR0
g9CBgbTzTBLRf3BMVlOU72QxSoFwNOdFBHvK8b+xvsiYNOFM2Do98tW0kL30
D9AXM9eG8x1YjqkUMG4wYREicaUzGChQ4cnWZc11EzW+Q2+HbWTA7cwALAxE
xRFIGaNaJgtBb/B1BWx3jvhyCVQoGD1VgUbPu2tqsW6zZbHw9idQbSoqVnap
QPN0XpuIqrrQwANFRhtR8OlTT/y2hlc4IB6dDJ+/PHorn799fXZ6fnpw+jJZ
pgicmqxVa0jx6lu6OZoWlbUtxgWQLO7tnvaWap0bG5/egF2Ljg4HYnRrZ6tt
qbC3QuDCJ3BAgohw+kRfGwIFEuwwnUnT8DQ0Z+8Zp0Vg+Cond96R8/Qdmb/V
5FIvtPhBvtx9sk36k08sRjaDEXfdIcwtrZO6op3bwQoRwV62Nt7tG0P+XbKs
9Gpa9C/J957AQufT5KGPcI+YLMaE36jWN3Tmh04d/LLTHJNpebPvZBoZVwk4
Bslzgzzv9jngmtXrdxYBYNVpfflO6Ntb1NcJS34atfKtc01uZDRHIp6JAeqS
KbttmXf2fPuNZlDivUR4vjstM2CG75IAVgCq07Pjb49P0L/7xd7ne0Ci7BYw
fk8cs6BP0W1KdJ8Z34HMpXmHVhWyLgI23xTYGUUuzOYWM9Wgv3/GvNLo8fWc
8iB0Dkc0eQ/Sj5fgOW6AlxSrcmKZdtV09zBZWNPYvm+8EAFTF0dkqZfo6UOj
DCipXoFmAQpdsrf9hY9YO58PPh98iWD5EwfwtgmpYKKMnRw9/Mer4d/EECcu
55n3NIvHG3Y/fMB1oGrkzdrr8kXh/E+QlfxpdPRqeHJ+fDB61h2FZNGqox5B
wlr4B5i7hAlNnEK7Pq9WpaAHwWupJ3wAgkRZxc5ssdzJY6d8B1GeECYw5nQr
ED7rsjpS6DUjQHFgqAJZORQfJjveyaUiWMxvOMlmkJG31SMflP2RqA0sD1XM
/JcBaoVwZD+OAoNrYxlwfLGu9WJZswMMGFvfboTUSN4fa2Qkof8fHKL4HWV7
PfsvJ/KBWgiQqBtb40zMZbMbURxXOfxWIcb5bp8YmH03FGJnActeoAN5Aie4
dt64Dku2qooJh4AZb1WD1nv0vFjhTjMCyIxMSHMePY7kaWYWtUUbAAXq+Mro
+KwJslI+XQHFzmHSfLKm4dgRgJ8TBI1SKchZpyXZqi2PtDieXsAI+kMKqrT2
xBSHZCaXBbJtozq4yFdRqsDcWy2nhGxjPcMwlM8H1xHk89WqoecNt16QExe9
aZg3nssWdjUj9zVa5DaY5Ad+rBXaA46+wJgwIuT5y5E/a/9luoYxY3Ozzkfo
+nD48vXJIwxPohbwZBvk7tfExDIiFbJoCpwFxp2tE6OILRH7P3BEwjrnLVFy
kIx8MPV6iY5nZSJ46RxEq0SjwVIEpLkwOGolXvLuh/P+0ATs+2YHVUMAslOu
iZoi8btG0PlqYTmIhv0AuiDd2z3AxnF3cAKAiJqVoabTVZRvE0a1zCZrbETh
Ml43pCG5RuBDJPrZap48BFb3yON1vmxxcyriFw5EqNIhu7ossomHgYzm/1FR
IgJDCE6EJh6AYslxEVijYu4UMBkRvMaDn02JeXpTrrI69WGFsVFUnDqBjQpU
CALUTDscensk59oOT6ImY7R6JiqNfkS+q+/gnxSX+PhA44PqE7C/uDs3ILSI
ua4zDHNbJ5UY4CzljDskZI4xb7noYSaPJlSpXpdZwfo1jG00880H7zXXqJzu
nRy8PB0dhZaPWD3WI8IcPQzXEdRIFVEIVXHo0hqL/AotCudns/lLeARjlAGM
RGlFaUfiQ8K9gTahWgqlOUk+KMT71VwwVdvTEFU0deycT9q6fzCRBf0/nm1z
+9Ztgo1RkFN/54hPsHsSlbRR/WE5T2ExmC0jEBkQXjnkgNctAnk6gBGONrhz
w+KMUwmFnI8QJlJrHDfDwHuUEeR0EK/1XfhmBeysY4mlvBMXhxtmuqRz5DPF
6uJSMjxMRMUFPB2QWpFuXEV5JbNz2NuLhLgPGTPQxUv4x+eH0YKASBkp9kE2
+pA6Ojs7PUsebn84f374aF/ts9ZgcjBkDsYLivHgTIJeBKxpQZzsMr3SyQLl
uGi28q1KeIWDxrTiSB2dD8+P2msw59EHcUf0as7RM1zS4MxQKSSXFvw/mJLA
X9EE0I4jGOQnjLExM6ZWWmlvIwpXEQrvO2Xew3gUVmTJ5nWbMgVquUZBlZbZ
fO0RKymrHAqSMEwQFyeTCuhNfxCjCD2tHuE01TCfiPxgR66skoVaCIOE1/d1
EkZkPx/smaXsstRg5/YBq3JKBa7uCxQDEt5OF5ifix8bw7FyWYxjshoqQPap
SZLiYLf8SLDrjL6bDC2r9cMu5qCxMc+0kXcXZhaftOdUESdMkXtC30KIgKA+
fkSltS9769MExrNeESxeyNL9JK4ZaDAGRVCqE0egrMxZMyhgd52Q3xZETmGV
IOOC7wIBEPPOAFOPmt793UEkn8J/x7Br/6zqogbO7E6MVgZogtEOE7EiUwRY
WMBBkbqfDMJn0dkIejwZDe4DvsGTX5DNE3eM1UEGmuQOkXXVk8fM6IkAEJ/I
p/cB7UvW5mLDxsMke4NNX47ssQFQE/NxJ+7heeKfuhcm8yLkseQJL0XEpDRJ
cgiTQkHaDBoKhH3WCpVh4wZez6YwutCcRKH9XEYAz+dN8Nx69ubc0Z8H0nPl
4o4mGSD1FBpEbVSaTMyVtFsWh1lJumCpu6hr0MqoZhc7f41KSH1dsAb8Etdm
lIMTm7MzyjDwk+a6WFVGS65AD76JI3SnY27gO7ceeuFVxOB8L1DA4hbpB1jg
Ip5kFHduI8GpkOCCvItY2KRYgurOot3jpLn1yBpj0foAZZ9uN5XJOWl4Z0j/
JzszCML7lhJOXrmJUeZpoe6sYlj0bFqmjYz5IPMVFBKAFVhv+B4mtyHQMDJG
efRBCIB2PaVsKhotrdb55LIscsSFnIIwxqFrTLavsQCjBnOVjVXcJeuRLuNW
hTHDiiOUtEAv/Uu8Vs5KeXd29OLN6OhQ1KZ3ytMzPIfqV+xNFTGN6VJ/XVXI
Cd5rYQTkEjapWb04krgkXWFMObNS5b2A2RjI1VAPu0hx26FgY2KHYzdmMStp
6M0zKExQLUn8zpBrFwvcvU0bK1gPWmL9zWSFXhijfrOqKRFZ5ZIGQBh+xv6J
BrR8rSxqH4dwU4mNZFbG1eacU1ZMUYavcedaN33KhyknSBPBeLiT63Q9gAWy
U953iu8+9eeLjWi9nYyPBDUYdW64Fgd2vvj8q88ph+lNTifOqKmvMsRYjiGK
6GTLhPLxKf2DarRgyUs4y5od0ITyTsVt2Gb2NLU4c8m/WHvJkJuEdNHPbVIW
Rf8Za8QiP8eamRuaukSRQQqP2OrMRkI1jxkFa4JA5rKsklmq5JS4L9AUR2cm
GAzJkU2hsXzq/vujUCflgJmTmKO9f4UlbZxcoXLQJv6hy4KHvlkeCdOwSUDG
qoiLJH77BokUZrxYIws4SvgLhgt9gaRTkOcOGaJqt8fhqmSpOcV1iaZILShG
55lWammczXFnO4kOjLmypo9CBXgGz4jaaJDVpMysyMJmnSlOMKhVm3ro+Ud6
aSnZpmYkkinYA0ydpCuWXgnapGU8VkD5J3AsKXEd0XC87DWjV3dqwj1P0pms
Ysqjt4yPdfL81gOJ5bgoyXWWI5qQiwaOpQjVsAdY5JNRYppv9zGetjQi9s3N
EfEKqdAINF8O0ku2o9MeMHNzNueyjsoFOLxoqApcgC7S1ZUD3BM34TwmnIyR
6RZylaUG9laHediw/yQdoaJIpQGKItJ1/rnIbATadF4V7SlRLXgX5NvgsA1/
vMSsOtOYm+vkj1kJQJloVmGTizr2izx/TZy5lRUl3FIhgmhZERxDTI182THb
RlvlJRCOiyCKpg77gU7JluuMnmPm6Jr5qfXYK3U8aye22LyEcEkliVJSh6Qa
MmaMRSsWLFmSODEswyTEiAoJlkjikIgZbFi9F8VkFhmJJ7OMV9TfE7mdCfd8
47ixRYncN+PUwTu8QrKmg4QedAn+HS05OS/ZiU1mFAo36yGGEnqQHPwbvMTS
Gyh3P8Zl7vHJ8fnx8KXN7vxpP3mw0ct+Muebk+N7fff8+PCuH47uMdnITaSO
u3lasglPQ15xuetzMqQf58wOFRJGSFBcvfxZGnWzw3AfelDb8PvG+ZBhl9zx
OwRbcw2jO80/usfcfFwqguffMT294CyjBzGezQw7xibJdggo0vfMsxZrGC7n
+YTySZhNgDjXYHuATucHu8kipjR1Ln2wbK5l0McWSXraYcYaV7lGpXU1QXN5
yrtWD/3A5K5J//nqKaWloVCdJV5VO6d/eYWvsAjcLXFHMl2K0MbnXBT6kfxe
zIVJvfFMcj/2Jy5HrhN2YZb3el0FMVUj3m+TYGCIvlu941iKvkEFuUFBTUTI
SmpnggZotmSPiNTO+zPC2k3mHCAEdkW5oFSJd+P5puuoWwUkXUuRnO67raP8
+ddxP5CoJkWicKQ+Mgs9zVLKHmvps/6vn25ILiF6qbDOOHU+adpW6BFlgTyX
zMFKu3fFw0kRJYoH26nXgN4SiW+U4KoWQTVLdwi1vWl6zTIxhPqWnz1kX90i
Erhr8YRqFk8kdyyeUOq5GFgBnmSNxAM89GLZH6/78B/2Wxn/t6mrSUFVzKf9
uuhjFN8EZcMzZVSRWFQ4I3/ABqX+gEog2WAZEMB1HpXBogTlmLYPqxoI1nsH
aXMK6PCVmcLK6ifNuhh2vvcMmnX8imZgI30zeNOdPncUAEW7LJYlZkQMmiSA
JVoSHqQUHsThqi5Kk59lCxLZuV9TZrT4NRoQnACaZbUiv27KdWAeO88WNGmN
eU0w3nVaTp0HysKQcqeX1E5lgilneQhQVldx13PyokVPUEoolBF00VYQlYt9
mJIL1M3b5do9qrAqZjU6pTCDCyO4giDOnhWU8AM7Re4HGa0HjkudjJ/Ws6bI
89bercXz6zQ3ie9dBxYEViNwN25ewl4Dxam/yutiNZ8GxgGcqF2CO/g0uQQD
Xpcx7t7eOxkP7P73TR37OllGsfVQBDo4vxem+QbwblMiEWPUrk1D2F7CtccI
cy3MYCroefCjKbgBjbyjAUZciBG/UzaCZhwUksnayD3qqtIKemjwaaDflGMH
02xG6XV11EKN1e23VSGEvU/XpRwD++56nAOBZxn1eDEb5Y4eLSWLO2HYb14D
A0LUAQCT1hsyL9Q2sf9b2Eam1abJJhV5mqodVwKtknmMnHfFCQ9TzYkR1lFe
cU7izDVy4SYKfqcRL1WLs37/IR2hxnpdiOdAGoLI4txKlG2TRJy+5WCxLMgT
fndA4FJTUaCQzQp1NMqOV14GqWu6k5lSFEQm/JTWNYV/wCTrVj8aoHJ8QRns
wjQOmxd5na5xPMYYshtIU8Ej8tLgEGPDzGGlA7dF4CQ06xskw0oWQ3EyforI
Zf2fHlyNAmlLEik4kVYApTEVBkuUidM1zFuUk42Cn3MF5lJuj9XGV+x6aVe6
Vrgc5G/ZxQrjKwhGu2Y8P8IWMh5qWF0l2XymWKypx/hKpNmEhznGAhFqjVOJ
K749tgXQEw3GyH73XJaFm4XJGWTeCF7RM4XGLom9zNdUKocqd7+Y9edISON5
QW2vMOsK43ZAJWeEWtjHaX3HlSxlhNKNEK6k1IYpVaSSzLEbD2MZBTwWOrVJ
P6KxMMesOPqLzfs6l+M6H3icD/66AP2E6gRs7NdkM8No8syPm5HyZ9GxGQKZ
whHjJ4se2tzcnyibSdlqAkRMWI3CfYV0R68icIuC7IARg+pmwNoC9iV/RUA0
4VPHMk2DgRtgsgA656p5q984NhPJN2KfCREvZfh7FfcXXMliNIS5MCLJVnFF
E1zBJX17Ej7MqEwM8sJKrkYJYi6N6IpKbFYwGQ2EehgEBKnAcXdeCwKtXWgm
snRG+Y1wohJrczlucEiuSjZ5VdyLAjxQLgpDAVKmkuaEHxb6dUuMMLDs6fOJ
p7ixElMES8JPq+3CaK9eY7bNx4//Rf+gwrevdvcw1mX6e9B8ucZBvB5C5y9H
AwpJMoMDiZmYaXvdu/VUaWMNgHJ5hXlzOSjewM/wvPFTErgVaw7BcBIO7dCS
yBlkNZ2SWXRVuyi79GaoL4PX1EPPP7XLpY9/sk3eHj3yh/E9WY33TKcHF5B0
TSGwzt+URqD5nZHoADHFqRAoGzFQawLvcR2w3X4poeqLbMJ+WzIHbZOXQWJE
wyH77yWECAI0v8BCiY40MxfGDDRCLIo3RfYDVNxajMHpJbBb0gnsWioucGo2
8pnamCScHKI0sMO8z+FL+yN+7pW+91sfJ/yxKqbT2LcDzOlC62++lnJe8aA2
e2OoUK3vJS7bSYRwpSeo8c3h3GqyMTHpGW2xcVabbB8H/w6VLuKtSNLJ+7y4
Bq5zQWgQBnrj/UYo4ahLAXS84T8qp/cZVU9R4T5WHRgwEXIHpJf8gDwciZdO
0k0U1K7CuhVXqi3hn1SW6o1izWl/lmYKErBSXAkTqPI+9qzVtu0n/XCajMBq
ao7Qs9JrvyIZTCUqGg36VD59SvEiZduRPiI9UlGp8FJ8aWCAZAn4IB5vQBVl
ybkou9vFmKhgq7NPRzkPOvlUuz8PMMjXw0PspmFH+vhAnlAATf7NcaShfdlm
11e2wtw8ajU1ItReL/Wz7Q87T7ef7x0++YoE/SVlPlm6N6HJxhRVM2KRSe9Q
7ZlWZB9bfPES15wKhyzAj6ib4QwZoRCUbHmTnwbYNMOyhBRmWFcZpbIiuvL4
UmIDQPQSQyjUS0MTw+qSZRxhaAKTKviA2aJhXkmDn0QUWVpqatNaJQfEL43e
DgqjufmZvL1ESFGLuabvU2C7KKZWKoR+TsrFnXPKZXO9AB+0haivDH9Dn7AG
G8MUAD16i7GVciYtXceacADIZG5iw2QRy1cIMzQY0NGk5zMA9j//+U/VQlkQ
/OdY2fgwe5Q8Sxye9eCHlzq/gKOAn/Cv1wKKh4MB/P2JhvsIyD3LLvoGTNTa
/tlWc5YXVGe1JdE2M1DQwkBq64m3zeccE60wo0D8BOO1dBon64MXBrzDVYOI
pJA1m7DEMLAHkPkX43lmM++4jtycshqvuO4RuWbtYrNmd9Q/6Ee/eOOnh1Kn
90hUpkbzHscZGr8Qh2g8M5yiqwPQhhxDhRzjqQmAYPlGsygQAT4uV0u0MF3p
Cktc8g92JozZai5KuHP1YR2L7wVJUxPUvyrj5zJtqlXE8BcB62lfJoDonSwv
L5zYVqMhnU6zagK2pHOmowr4YeKZlmfGKzPK/qGd/tEjxYh7lRl3OiaJpnNY
xHRtfc2S+NN1craL6qWWrsxmXhJk/jdvh+fMorBlzevhGQa7+/RCo+Gy8SP1
bfUWUBCFnw6wzAgpp0bFC6MBtnqjsU9HJV0rd9SJyd541rFT8rt1EAWHZS02
X6UoW5DncLnJWulanj1qWg+Tp/U9LU35fGMP0qkiHLPFL13OHrMYbkuk/ChC
7Ze1etWRRPrCWDspv4PBPm0zWGs1mAfRynsuFD6gbHR+LdwgPQy583X9lrDj
rSniYy7dteSQW3dhRlDh4Vz4lEEAtnfi7QdvB0iw0PAKpBzhrDDwjCPFwBgm
BfEPoYpYmQs3z+RodGIdCmNNYsfWPg9o5lsAd+t6xKFhcrd8z6pr5O8qjWlB
QgMmt/z6cu3jDaVb43jSH42WGRzcrYvyemLVQbGfK3GyjaTGsigxPKJp5sza
XMGst1TCFuyZ45LbgYYzIFVkA06rl3xZixLGwHKl9i+o9gf3p4Saj/N+aBRR
umybp3D8y0vS90q7OuvCXIkj9yqxO0rn1+m6StDYo3Y2mIvoXOKDm8SuzUwP
2GAwOh8qV5UR5H4gzY8AxT7IivLa8ynarMEsrI6yVmvd7RerFNC/1sgXlXUI
vidooH8oN7Wsa+KOHSqJsR5uLQYOmHwWEaaeCuIYI5ufjVpuPn0uNfDqglk1
8lsQhqqR/4tRjfxnohrdqv1gUxg9bc31MFSJho9wI9YaimRzsThz8QtHv6JK
sGAw4gfO2K9Jdx08mguxFTdSHsuJ4OSNCpUhMKU6FC4RNnFYdgib4c8lbFpy
BZtNvrV5sFauRFfXkivBW7+EXPFSkW8RKvKAuSafNGhpRfnLSxSvoJ3tYk/G
cfIX1t/iWsIOG4ZnRYHY4lkuBpGZymLnPpTxbmRawTS/T6YlTsIOmKis8tV1
w5HaZlpooPmmWSww6XU4NU0GY4jGHgPARoNoFDtjSiCK9TsBtcUhJbuz7WaJ
+jnKG/vXgaRUxl2kWegboF5GcmfCi+MTeuXh9oftnUc9T82gyyTYLjcy2Ayw
SMv3lcm4D0mIvJ65TqxDd2Aoll1NUhRqbXmnf3s789L5XMOt1Oh5c+W27XVD
tpxxIwX8+WDgRtmAP8qDQ9xDzAVyHVGvOxXrCCYJh+jiex7T22/0lLfEbPiC
t1R8+/+iDwMDUQV5ScWPEna5N1m5R4tlvY6pY4ajqMS6ACU6Rp59LmQy5YFG
Lfg6sPqdZwWf4kQYAG2humiyjO3UHQ3VCnJaVE7hiBpiw8hw91DfYFXIClUn
K9xMc0t8Jqh+Pc2tzTpsj92762y2DCHgkeap4ZJBOcid9DQ7fkNHO4zoaBI6
sSnmwndMaX7MIgqaPnDSXzTk5lqDO0bS3noHKzlss49XsiZmF1HVCZb9lhdq
+UVrxoBj2F834RmsKvnLuKuBeTtYrZZiEwilONPFm3vUSD3PmN8T80E6NWk/
jLfRlB8KGKExi1mqiavLlNs+YGHiDuBdVK5ml4EutQzxwS1T8EqXuduxTa8U
kWM8T87D1zwGq7HemEfeu08i+bEfHAjzpr2FKE9aNpJBl6tyyX3Xc/G0m76j
EtjNp35mctDT0ubyzmw8jzNsTcOim/L2Pwm8TAECe/nstXycdSpdm4LKRf8m
mUZ1FHGvzSqhAvblF0O1uJj3o8/MvMf342n+pA3WdtTN2tJ7MrZWb5mGtdgJ
hg6OdrSBQmR4S6AYdXI6XlGM4cXW1eJ7/kubqkwRUzFUnEwK2WzGHR8iIOyx
b1JP+X4fYngd/HMQcNxAB/vlGW8rQHJ/xjtr5unYnI42S1ZRlpzchyWLdG7P
2smrk814dQR1NmfZYSr6v8Syb0TlO3JuFeXcrSqMKOdudlmLcO5jn2tXTbYd
qaTDRcYLybBF6w08Plb/er9i1buXqlIJBy74ijNdhjdhTLcZwU6ahmfPZCON
tbEuOKsh9E0YS6PD6aKai7mbydH2u6hbLY7kLhaHMhZHF9A808PCq8tlhSff
ckm1pPioS4KP2tJ79K9I7hG53SIyWjXNj8lqsZrTLdiRhiwUmuY72djpUjfz
kqnFg4nBxjrESBhT+k87Gf3C3k0Eg9xwA2xn65mOgfe2lRu4q6dLkLpj2rOE
sq+SK3YceJhrl1q6Oxh5R537lOms3oKh32bQa+wjZGVfssEcBRNQsqRpD0+X
fkRBIF2/YHx0veIEjS2YYm7vgmHTr4y8iC31anSravXC+Z32trsNRwPD2zSq
KqpNjW7TpEb3MCJlSVadmRj1ZBMqqE2luK08I7yj3EPSZkShNQ1PruQqv3k2
0+izdmO41idUecBIxVnNPJLoCbt/rlbLv3yx/efH+F+yv1wDuDDnkHqDeUmv
87QEvczGdXMz1i6P1d9ptOiKte8zp4OfO3qXLCV7Oyk7RlmuoqcVs8ikQRDw
hBeUMFHVKVeG2MaE3JxeWrenDRo1okcq+2bJk3g3KLPCJ73kS+YUOztAy6ua
8+J5ZTuf+6TuawE2qcTbqXQFGGMqodAnQP1az+dc94yN7Vg+ChHFNLXR70hL
G/3aGlqX8oUF5VLfeovV3NCoNjSam+037tZ8wwpqv9w8lNT+L0ZU+89M8puo
U9Ihx9wi1hjZNk8LDOu9nUecRZqZfnnKvxiDUJsUIlPoM4VfC9Pn75bOs+6m
j47FhNm21CF7ueK87FUuuS2BeyWdX+D1TJckTUWQxOEXlyR7O/dyOyIo3lLx
GPICKzuiMwfCo2PTv6QLMjwG5jvYDJFKRTlUK1VwSTEhnupl4kUx5rdiKXHg
/b6sPj8kegMlR14Ig6V3ouvYdB3kvWvJW7l2mJuSt2RJxvpOn/s5TJRkm86L
Cyw0RbYQnl0zzHg3it39Wd1qnkstQtA3rS8SiLw7ed85G6NB3LEwuYSkPNp2
jVgbzcJ/Hl9bMZtJ7bif5Fm7+qtb2cxNCPxbcZsbj/T3xXSGt8HwLvFbFcRv
u1NZ2rPFPCvqDp6VXziYGwWNn9Fyr2y8oAtQjMmP4gx+dDfmPrqNsT/Bo7N/
7TW1ONe/1mb93sjqkWqNDz2whdoG1vCmVZpz89ZpinP9C3hLbCBp+EnMD2M7
p/P1uzfP5oTF3q2zqahzRsKkAWm1p7O5ugRZx/zYAmRXV+VC7dytgVwpMgt1
3wY7G5VdacYRABtdNTrvuJdTtdMZO5CxQ5I+8bwoe/f1oojl2ik828uJCM4W
aP8Fj8odA0RtR4s40VhoSc4WeU/85C08Ob7tpeVA6fCdyHh3daB0+k4C0RnB
zd9UbEYO9Fez/YEzm/V6/Ng8enswfD168/KIuHHzoaQo3tgtD7HAjh9CuwXB
zyNlr5QoTVmMpjrUVHoKJbcX36Tf7YjPk9zzh2bE1+l6XqTTaJKdm5ZJtTWf
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

-->

</rfc>
