<?xml version='1.0' encoding='utf-8'?>
<?xml-stylesheet type="text/xsl" href="rfc2629.xslt" ?>
<!-- generated by https://github.com/cabo/kramdown-rfc2629 version 1.3.33 -->
<!DOCTYPE rfc SYSTEM "rfc2629-xhtml.ent">
<?rfc toc="yes"?>
<?rfc sortrefs="yes"?>
<?rfc symrefs="yes"?>
<rfc xmlns:xi="http://www.w3.org/2001/XInclude" ipr="trust200902" docName="draft-kinnear-webtransport-http2-02" category="std" obsoletes="" updates="" submissionType="IETF" xml:lang="en" tocInclude="true" sortRefs="true" symRefs="true" version="3">
  <!-- xml2rfc v2v3 conversion 3.5.0 -->
  <front>
    <title abbrev="WebTransport-H2">WebTransport using HTTP/2</title>
    <seriesInfo name="Internet-Draft" value="draft-kinnear-webtransport-http2-02"/>
    <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="V." surname="Vasiliev" fullname="Victor Vasiliev">
      <organization>Google</organization>
      <address>
        <email>vasilvv@google.com</email>
      </address>
    </author>
    <author initials="G." surname="Xie" fullname="Guowu Xie">
      <organization>Facebook Inc.</organization>
      <address>
        <email>woo@fb.com</email>
      </address>
    </author>
    <date/>
    <area>art</area>
    <workgroup>webtrans</workgroup>
    <keyword>Internet-Draft</keyword>
    <abstract>
      <t>WebTransport <xref target="OVERVIEW" format="default"/> 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/2 <xref target="RFC7540" format="default"/> and provides support for
unidirectional streams, bidirectional streams and datagrams, all multiplexed
within the same HTTP/2 connection.</t>
    </abstract>
    <note>
      <name>Note to Readers</name>
      <t>Discussion of this draft takes place on the WebTransport mailing list
(webtransport@ietf.org), which is archived at
&lt;https://mailarchive.ietf.org/arch/search/?email_list=webtransport&gt;.</t>
      <t>The repository tracking the issues for this draft can be found at
&lt;https://github.com/ekinnear/draft-webtransport-http2/issues&gt;.  The
web API draft corresponding to this document can be found at
&lt;https://w3c.github.io/webtransport/&gt;.</t>
    </note>
  </front>
  <middle>
    <section anchor="introduction" numbered="true" toc="default">
      <name>Introduction</name>
      <t>Currently, the only mechanism in HTTP/2 for server to client communication is
server push. That is, servers can initiate unidirectional push promised streams
to clients, but clients cannot respond to them; they can only accept them or
discard them. Additionally, intermediaries along the path may have different
server push policies and may not forward push promised streams to the downstream
client. This best effort mechanism is not sufficient to reliably deliver
messages from servers to clients, limiting server to client use-cases such as
chat messages or notifications.</t>
      <t>Several techniques have been developed to workaround these limitations: long
polling <xref target="RFC6202" format="default"/>, WebSocket <xref target="RFC8441" format="default"/>, and tunneling using the CONNECT
method. All of these approaches have limitations.</t>
      <t>This document defines a mechanism for multiplexing non-HTTP data with HTTP/2 in
a manner that conforms with the WebTransport protocol requirements and semantics
<xref target="OVERVIEW" format="default"/>.  Using the mechanism described here, multiple WebTransport
instances can be multiplexed simultaneously with regular HTTP traffic on the
same HTTP/2 connection.</t>
      <section anchor="terminology" numbered="true" toc="default">
        <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" format="default"/> <xref target="RFC8174" format="default"/>
when, and only when, they appear in all capitals, as shown here.</t>
        <t>This document follows terminology defined in Section 1.2 of <xref target="OVERVIEW" format="default"/>.  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 via an HTTP/2 server.</t>
      </section>
    </section>
    <section anchor="protocol-overview" numbered="true" toc="default">
      <name>Protocol Overview</name>
      <t>WebTransport servers are identified by a pair of authority value and
path value (defined in <xref target="RFC3986" format="default"/> Sections 3.2 and 3.3 correspondingly).</t>
      <t>When an HTTP/2 connection is established, both the client and server have to
send a SETTINGS_ENABLE_WEBTRANSPORT setting in order to indicate that they
both support WebTransport over HTTP/2.</t>
      <t>WebTransport sessions are initiated inside a given HTTP/2 connection by the
client, who sends an extended CONNECT request <xref target="RFC8441" format="default"/>.  If the server
accepts the request, an WebTransport session is established.  The resulting
stream will be further referred to as a <em>CONNECT stream</em>, and its stream ID is
used to uniquely identify a given WebTransport session within the connection.
The ID of the CONNECT stream that established a given WebTransport session will
be further referred to as a <em>Session ID</em>.</t>
      <t>After the session is established, the peers can exchange data using the
following mechanisms:</t>
      <ul spacing="normal">
        <li>Both client and server can create a bidirectional or unidirectional stream
using a new HTTP/2 extension frame (WT_STREAM)</li>
        <li>A datagram can be sent using a new HTTP/2 extension frame WT_DATAGRAM.</li>
      </ul>
      <t>A WebTransport session is terminated when the CONNECT stream that created it
is closed.</t>
    </section>
    <section anchor="session-establishment" numbered="true" toc="default">
      <name>Session Establishment</name>
      <section anchor="establishing-a-transport-capable-http2-connection" numbered="true" toc="default">
        <name>Establishing a Transport-Capable HTTP/2 Connection</name>
        <t>In order to indicate support for WebTransport, both the client and the server
MUST send a SETTINGS_ENABLE_WEBTRANSPORT value set to "1" in their SETTINGS
frame.  Endpoints MUST NOT use any WebTransport-related functionality unless
the parameter has been negotiated.</t>
      </section>
      <section anchor="extended-connect-in-http2" numbered="true" toc="default">
        <name>Extended CONNECT in HTTP/2</name>
        <t><xref target="RFC8441" format="default"/> defines an extended CONNECT method in Section 4, enabled by the
SETTINGS_ENABLE_CONNECT_PROTOCOL parameter.  An endpoint doesn not need to send
both SETTINGS_ENABLE_CONNECT_PROTOCOL and SETTINGS_ENABLE_WEBTRANSPORT; the
SETTINGS_ENABLE_WEBTRANSPORT setting implies that an endpoint supports extended
CONNECT.</t>
      </section>
      <section anchor="creating-a-new-session" numbered="true" toc="default">
        <name>Creating a New Session</name>
        <t>As WebTransport sessions are established over HTTP/2, they are identified
using the <tt>https</tt> URI scheme <xref target="RFC7230" format="default"/>.</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" format="default"/>) MUST be set to
<tt>webtransport</tt> (Section 7.1 <xref target="WEBTRANSPORT-H3" format="default"/>).  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.  An <tt>Origin</tt> header <xref target="RFC6454" format="default"/> MUST
be provided within the request.</t>
        <t>Upon receiving an extended CONNECT request with a <tt>:protocol</tt> field set to
<tt>webtransport</tt>, the HTTP/2 server can check if it
has a WebTransport server associated with the specified <tt>:authority</tt> and <tt>:path</tt>
values.  If it does not, it SHOULD reply with status code 404 (Section 6.5.4,
<xref target="RFC7231" format="default"/>).  If it does, it MAY accept the session by replying with status
code 200.  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>From the client's perspective, a WebTransport session is established when the
client receives a 200 response.  From the server's perspective, a session is
established once it sends a 200 response.  Both endpoints MUST NOT open any
streams or send any datagrams on a given session before that session is
established.</t>
      </section>
      <section anchor="limiting-the-number-of-simultaneous-sessions" numbered="true" toc="default">
        <name>Limiting the Number of Simultaneous Sessions</name>
        <t>From the flow control perspective, WebTransport sessions count against the
stream flow control just like regular HTTP requests, since they are established
via an HTTP CONNECT request.  This document does not make any effort to
introduce a separate flow control mechanism for sessions, nor to separate HTTP
requests from WebTransport data streams.  If the server needs to limit the rate
of incoming requests, it has alternative mechanisms at its disposal:</t>
        <ul spacing="normal">
          <li>
            <tt>HTTP_STREAM_REFUSED</tt> error code defined in <xref target="RFC7540" format="default"/> indicates to the
receiving HTTP/2 stack that the request was not processed in any way.</li>
          <li>HTTP status code 429 indicates that the request was rejected due to rate
limiting <xref target="RFC6585" format="default"/>.  Unlike the previous method, this signal is directly
propagated to the application.</li>
        </ul>
      </section>
    </section>
    <section anchor="webtransport-features" numbered="true" toc="default">
      <name>WebTransport Features</name>
      <t>WebTransport over HTTP/2 provides the following features described in
<xref target="OVERVIEW" format="default"/>: unidirectional streams, bidirectional streams and datagrams,
initiated by either endpoint.</t>
      <t>Session IDs are used to demultiplex streams and datagrams belonging to different
WebTransport sessions.  On the wire, session IDs are encoded using a 31-bit
integer field.</t>
      <section anchor="wtstream-frame" numbered="true" toc="default">
        <name>WT_STREAM Frame</name>
        <t>A new HTTP/2 frame called WT_STREAM is introduced for either endpoint to
establish WebTransport streams. WT_STREAM frames can be sent on a stream in the
"idle", "reserved (local)", "open", or "half-closed (remote)" state.</t>
        <figure anchor="fig-wt_stream">
          <name>WT_STREAM Frame Format</name>
          <artwork name="" type="" align="left" alt=""><![CDATA[
 0                   1                   2                   3
 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+---------------+
|Pad Length? (8)|
+-+-------------+-----------------------------------------------+
|R|                     Session ID (31)                         |
+-+-------------------------------------------------------------+
|                           Padding (*)                       ...
+---------------------------------------------------------------+
]]></artwork>
        </figure>
        <t>The WT_STREAM frame define the following fields:</t>
        <t>Pad Length:  An 8-bit field containing the length of the frame
      padding in units of octets.  This field is conditional (as
      signified by a "?" in the diagram) and is only present if the
      PADDED flag is set.</t>
        <t>Session ID:  An unsigned 31-bit integer that identifies the
      stream Connect Stream for this Web Transport stream.  The
      Session ID MUST be MUST be an open stream negotiated via the
      extended CONNECT protocol with a <tt>:protocol</tt> value of
      "webtransport".</t>
        <t>The WT_STREAM frame defines the following flags:</t>
        <t>UNIDIRECTIONAL (0x1):  When set, the stream begins in the
      "half-closed (remote)" state at the sender, and in the
      "half-closed (local)" state at the receiver.</t>
        <t>As with all HTTP/2 streams, WebTransport streams initiated by a client have
odd stream IDs and those initiated by a server have even stream IDs.</t>
        <t>The recipient MUST respond with a stream error of type
WT_STREAM_ERROR if the specified WebTransport Connect Stream does not
exist, is not a stream established via extended CONNECT to use the
"webtransport" protocol, or if it is in the "closed" or "half-closed (remote)"
stream state.</t>
      </section>
      <section anchor="wtdatagram-frame" numbered="true" toc="default">
        <name>WT_DATAGRAM Frame</name>
        <t>A new HTTP/2 frame called WT_DATAGRAM is introduced for either endpoint to
transmit a datagram. WT_DATAGRAM frames are sent with Stream Identifier 0.</t>
        <figure anchor="fig-wt_datagram">
          <name>WT_DATAGRAM Frame Format</name>
          <artwork name="" type="" align="left" alt=""><![CDATA[
 0                   1                   2                   3
 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+---------------+
|Pad Length? (8)|
+-+-------------+-----------------------------------------------+
|R|                     Session ID (31)                         |
+-+-------------------------------------------------------------+
|                            Data (*)                         ...
+---------------------------------------------------------------+
|                           Padding (*)                       ...
+---------------------------------------------------------------+
]]></artwork>
        </figure>
        <t>The WT_DATAGRAM frame define the following fields:</t>
        <t>Pad Length:  An 8-bit field containing the length of the frame
      padding in units of octets.  This field is conditional (as
      signified by a "?" in the diagram) and is only present if the
      PADDED flag is set.</t>
        <t>Session ID:  An unsigned 31-bit integer that identifies the
      stream Connect Stream for this Web Transport stream.  The
      Session ID MUST be MUST be an open stream negotiated via the
      extended CONNECT protocol with a <tt>:protocol</tt> value of
      "webtransport".</t>
        <t>Data:  Application data.  The amount of data is the remainder of the
      frame payload after subtracting the length of the other fields
      that are present.</t>
        <t>The WT_DATAGRAM frame does not define any flags.</t>
        <t>The recipient MAY respond with a stream error of type WT_STREAM_ERROR if the
specified WebTransport Connect Stream does not exist, is not a stream
established via extended CONNECT to use the "webtransport" protocol, or if it is
in the "closed" or "half-closed (remote)" stream state.</t>
        <t>The data in WT_DATAGRAM frames is not subject to flow control.  The receiver MAY
discard this data if it does not have sufficient space to buffer it.</t>
        <t>An intermediary could forward the data in a WT_DATAGRAM frame over another
protocol, such as WebTransport over HTTP/3.  In QUIC, a datagram frame can span
at most one packet.  Because of that, the applications have to know the maximum
size of the datagram they can send.  However, when proxying the datagrams, the
hop-by-hop MTUs can vary.</t>
      </section>
    </section>
    <section anchor="session-termination" numbered="true" toc="default">
      <name>Session Termination</name>
      <t>An WebTransport session over HTTP/2 is terminated when either endpoint closes
the stream associated with the CONNECT request that initiated the session.
Upon learning about the session being terminated, the endpoint MUST stop
sending new datagrams and reset all of the streams associated with the session.</t>
    </section>
    <section anchor="transport-properties" numbered="true" toc="default">
      <name>Transport Properties</name>
      <t>The WebTransport framework <xref target="OVERVIEW" format="default"/> defines a set of optional transport
properties that clients can use to determine the presence of features which
might allow additional optimizations beyond the common set of properties
available via all WebTransport protocols. Below are details about support in
Http2Transport for those properties.</t>
      <dl>
        <dt>
Stream Independence:  </dt>
        <dd>
          <t>Http2Transport does not support stream independence, as HTTP/2 inherently has
  head of line blocking.</t>
        </dd>
        <dt>
Partial Reliability:  </dt>
        <dd>
          <t>Http2Transport does not support partial reliability, as HTTP/2 retransmits any
  lost data. This means that any datagrams sent via Http2Transport will be
  retransmitted regardless of the preference of the application.  The receiver
  is permitted to drop them, however, if it is unable to buffer them.</t>
        </dd>
        <dt>
Pooling Support:  </dt>
        <dd>
          <t>Http2Transport supports pooling, as multiple transports using Http2Transport
  may share the same underlying HTTP/2 connection and therefore share a
  congestion controller and other transport context.</t>
        </dd>
        <dt>
Connection Mobility:  </dt>
        <dd>
          <t>Http2Transport does not support connection mobility, unless an underlying
  transport protocol that supports multipath or migration, such as MPTCP
  <xref target="RFC7540" format="default"/>, is used underneath HTTP/2 and TLS. Without such support,
  Http2Transport connections cannot survive network transitions.</t>
        </dd>
      </dl>
    </section>
    <section anchor="security-considerations" numbered="true" toc="default">
      <name>Security Considerations</name>
      <t>WebTransport over HTTP/2 satisfies all of the security requirements imposed by
<xref target="OVERVIEW" format="default"/> 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" numbered="true" toc="default">
      <name>IANA Considerations</name>
      <section anchor="http2-settings-parameter-registration" numbered="true" toc="default">
        <name>HTTP/2 SETTINGS Parameter Registration</name>
        <t>The following entry is added to the "HTTP/2 Settings" registry established by
<xref target="RFC7540" format="default"/>:</t>
        <t>The <tt>SETTINGS_ENABLE_WEBTRANSPORT</tt> parameter indicates that the specified
HTTP/2 connection is WebTransport-capable.</t>
        <dl>
          <dt>
Setting Name:  </dt>
          <dd>
            <t>ENABLE_WEBTRANSPORT</t>
          </dd>
          <dt>
Value:  </dt>
          <dd>
            <t>0x2b603742</t>
          </dd>
          <dt>
Default:  </dt>
          <dd>
            <t>0</t>
          </dd>
          <dt>
Specification:  </dt>
          <dd>
            <t>This document</t>
          </dd>
        </dl>
      </section>
      <section anchor="frame-type-registration" numbered="true" toc="default">
        <name>Frame Type Registration</name>
        <t>The following entries are added to the "HTTP/2 Frame Type" registry established
by <xref target="RFC7540" format="default"/>:</t>
        <t>The <tt>WT_STREAM</tt> frame allows HTTP/2 client- and server-initiated unidirectional
and bidirectional streams to be used by WebTransport:</t>
        <dl>
          <dt>
Code:  </dt>
          <dd>
            <t>0xTBD</t>
          </dd>
          <dt>
Frame Type:  </dt>
          <dd>
            <t>WEBTRANSPORT_STREAM</t>
          </dd>
          <dt>
Specification:  </dt>
          <dd>
            <t>This document</t>
          </dd>
        </dl>
        <t>The <tt>WT_DATAGRAM</tt> frame allows HTTP/2 client and server to exchange datagrams
used by WebTransport:</t>
        <dl>
          <dt>
Code:  </dt>
          <dd>
            <t>0xTBD</t>
          </dd>
          <dt>
Frame Type:  </dt>
          <dd>
            <t>WEBTRANSPORT_DATAGRAM</t>
          </dd>
          <dt>
Specification:  </dt>
          <dd>
            <t>This document</t>
          </dd>
        </dl>
      </section>
      <section anchor="http2-error-code-registry" numbered="true" toc="default">
        <name>HTTP/2 Error Code Registry</name>
        <t>The following entries are added to the "HTTP/2 Error Code" registry that was
established by Section 11.2 of <xref target="RFC7540" format="default"/>.</t>
        <dl>
          <dt>
Name:  </dt>
          <dd>
            <t>WT_STREAM_ERROR</t>
          </dd>
          <dt>
Code:  </dt>
          <dd>
            <t>0xTBD</t>
          </dd>
          <dt>
Description:  </dt>
          <dd>
            <t>Invalid use of WT_STREAM frame</t>
          </dd>
          <dt>
Specification:  </dt>
          <dd>
            <t><em>RFC Editor: Please fill in this value with the RFC number for this
document</em></t>
          </dd>
        </dl>
      </section>
      <section anchor="examples" numbered="true" toc="default">
        <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 Section 5.1 of
<xref target="RFC8441" format="default"/> to help illustrate the differences defined in this document.</t>
        <artwork name="" type="" align="left" alt=""><![CDATA[
[[ From Client ]]                   [[ From Server ]]

SETTINGS
SETTINGS_ENABLE_WEBTRANSPORT = 1

                                    SETTINGS
                                    SETTINGS_ENABLE_WEBTRANSPORT = 1

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

                                    HEADERS + END_HEADERS
                                    Stream ID = 3
                                    :status = 200

WT_STREAM
Stream ID = 5
Session ID = 3


DATA
Stream ID = 5
WebTransport Data

                                    DATA + END_STREAM
                                    Stream ID = 5
                                    WebTransport Data

DATA + END_STREAM
Stream ID = 5
WebTransport Data
]]></artwork>
        <t>An example of the server initiating a WebTransport Stream follows. The only
difference here is the endpoint that sends the first WT_STREAM frame.</t>
        <artwork name="" type="" align="left" alt=""><![CDATA[
[[ From Client ]]                   [[ From Server ]]

SETTINGS
SETTINGS_ENABLE_WEBTRANSPORT = 1

                                    SETTINGS
                                    SETTINGS_ENABLE_WEBTRANSPORT = 1

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

                                    WT_STREAM
                                    Stream ID = 2
                                    Session ID = 3

                                    DATA
                                    Stream ID = 2
                                    WebTransport Data

DATA + END_STREAM
Stream ID = 2
WebTransport Data

                                    DATA + END_STREAM
                                    Stream ID = 2
                                    WebTransport Data
]]></artwork>
      </section>
    </section>
  </middle>
  <back>
    <references>
      <name>References</name>
      <references>
        <name>Normative References</name>
        <reference anchor="OVERVIEW">
          <front>
            <title>The WebTransport Protocol Framework</title>
            <author initials="V." surname="Vasiliev" fullname="Victor Vasiliev">
              <organization>Google</organization>
            </author>
            <date/>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-ietf-webtrans-overview-latest"/>
        </reference>
        <reference anchor="WEBTRANSPORT-H3">
          <front>
            <title>WebTransport over HTTP/3</title>
            <author initials="V." surname="Vasiliev" fullname="Victor Vasiliev">
              <organization>Google</organization>
            </author>
            <date/>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-ietf-webtrans-http3-latest"/>
        </reference>
        <reference anchor="RFC8441" target="https://www.rfc-editor.org/info/rfc8441">
          <front>
            <title>Bootstrapping WebSockets with HTTP/2</title>
            <author fullname="P. McManus" initials="P." surname="McManus">
              <organization/>
            </author>
            <date month="September" year="2018"/>
            <abstract>
              <t>This document defines a mechanism for running the WebSocket Protocol (RFC 6455) over a single stream of an HTTP/2 connection.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="8441"/>
          <seriesInfo name="DOI" value="10.17487/RFC8441"/>
        </reference>
        <reference anchor="RFC2119" target="https://www.rfc-editor.org/info/rfc2119">
          <front>
            <title>Key words for use in RFCs to Indicate Requirement Levels</title>
            <author fullname="S. Bradner" initials="S." surname="Bradner">
              <organization/>
            </author>
            <date month="March" year="1997"/>
            <abstract>
              <t>In many standards track documents several words are used to signify the requirements in the specification.  These words are often capitalized. This document defines these words as they should be interpreted in IETF documents.  This document specifies an Internet Best Current Practices for the Internet Community, and requests discussion and suggestions for improvements.</t>
            </abstract>
          </front>
          <seriesInfo name="BCP" value="14"/>
          <seriesInfo name="RFC" value="2119"/>
          <seriesInfo name="DOI" value="10.17487/RFC2119"/>
        </reference>
        <reference anchor="RFC8174" target="https://www.rfc-editor.org/info/rfc8174">
          <front>
            <title>Ambiguity of Uppercase vs Lowercase in RFC 2119 Key Words</title>
            <author fullname="B. Leiba" initials="B." surname="Leiba">
              <organization/>
            </author>
            <date month="May" year="2017"/>
            <abstract>
              <t>RFC 2119 specifies common key words that may be used in protocol  specifications.  This document aims to reduce the ambiguity by clarifying that only UPPERCASE usage of the key words have the  defined special meanings.</t>
            </abstract>
          </front>
          <seriesInfo name="BCP" value="14"/>
          <seriesInfo name="RFC" value="8174"/>
          <seriesInfo name="DOI" value="10.17487/RFC8174"/>
        </reference>
        <reference anchor="RFC3986" target="https://www.rfc-editor.org/info/rfc3986">
          <front>
            <title>Uniform Resource Identifier (URI): Generic Syntax</title>
            <author fullname="T. Berners-Lee" initials="T." surname="Berners-Lee">
              <organization/>
            </author>
            <author fullname="R. Fielding" initials="R." surname="Fielding">
              <organization/>
            </author>
            <author fullname="L. Masinter" initials="L." surname="Masinter">
              <organization/>
            </author>
            <date month="January" year="2005"/>
            <abstract>
              <t>A Uniform Resource Identifier (URI) is a compact sequence of characters that identifies an abstract or physical resource.  This specification defines the generic URI syntax and a process for resolving URI references that might be in relative form, along with guidelines and security considerations for the use of URIs on the Internet.  The URI syntax defines a grammar that is a superset of all valid URIs, allowing an implementation to parse the common components of a URI reference without knowing the scheme-specific requirements of every possible identifier.  This specification does not define a generative grammar for URIs; that task is performed by the individual specifications of each URI scheme.  [STANDARDS-TRACK]</t>
            </abstract>
          </front>
          <seriesInfo name="STD" value="66"/>
          <seriesInfo name="RFC" value="3986"/>
          <seriesInfo name="DOI" value="10.17487/RFC3986"/>
        </reference>
        <reference anchor="RFC7230" target="https://www.rfc-editor.org/info/rfc7230">
          <front>
            <title>Hypertext Transfer Protocol (HTTP/1.1): Message Syntax and Routing</title>
            <author fullname="R. Fielding" initials="R." role="editor" surname="Fielding">
              <organization/>
            </author>
            <author fullname="J. Reschke" initials="J." role="editor" surname="Reschke">
              <organization/>
            </author>
            <date month="June" year="2014"/>
            <abstract>
              <t>The Hypertext Transfer Protocol (HTTP) is a stateless application-level protocol for distributed, collaborative, hypertext information systems.  This document provides an overview of HTTP architecture and its associated terminology, defines the "http" and "https" Uniform Resource Identifier (URI) schemes, defines the HTTP/1.1 message syntax and parsing requirements, and describes related security concerns for implementations.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="7230"/>
          <seriesInfo name="DOI" value="10.17487/RFC7230"/>
        </reference>
        <reference anchor="RFC6454" target="https://www.rfc-editor.org/info/rfc6454">
          <front>
            <title>The Web Origin Concept</title>
            <author fullname="A. Barth" initials="A." surname="Barth">
              <organization/>
            </author>
            <date month="December" year="2011"/>
            <abstract>
              <t>This document defines the concept of an "origin", which is often used as the scope of authority or privilege by user agents.  Typically, user agents isolate content retrieved from different origins to prevent malicious web site operators from interfering with the operation of benign web sites.  In addition to outlining the principles that underlie the concept of origin, this document details how to determine the origin of a URI and how to serialize an origin into a string.  It also defines an HTTP header field, named "Origin", that indicates which origins are associated with an HTTP request.   [STANDARDS-TRACK]</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="6454"/>
          <seriesInfo name="DOI" value="10.17487/RFC6454"/>
        </reference>
        <reference anchor="RFC7231" target="https://www.rfc-editor.org/info/rfc7231">
          <front>
            <title>Hypertext Transfer Protocol (HTTP/1.1): Semantics and Content</title>
            <author fullname="R. Fielding" initials="R." role="editor" surname="Fielding">
              <organization/>
            </author>
            <author fullname="J. Reschke" initials="J." role="editor" surname="Reschke">
              <organization/>
            </author>
            <date month="June" year="2014"/>
            <abstract>
              <t>The Hypertext Transfer Protocol (HTTP) is a stateless \%application- level protocol for distributed, collaborative, hypertext information systems.  This document defines the semantics of HTTP/1.1 messages, as expressed by request methods, request header fields, response status codes, and response header fields, along with the payload of messages (metadata and body content) and mechanisms for content negotiation.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="7231"/>
          <seriesInfo name="DOI" value="10.17487/RFC7231"/>
        </reference>
        <reference anchor="RFC6585" target="https://www.rfc-editor.org/info/rfc6585">
          <front>
            <title>Additional HTTP Status Codes</title>
            <author fullname="M. Nottingham" initials="M." surname="Nottingham">
              <organization/>
            </author>
            <author fullname="R. Fielding" initials="R." surname="Fielding">
              <organization/>
            </author>
            <date month="April" year="2012"/>
            <abstract>
              <t>This document specifies additional HyperText Transfer Protocol (HTTP) status codes for a variety of common situations.  [STANDARDS-TRACK]</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="6585"/>
          <seriesInfo name="DOI" value="10.17487/RFC6585"/>
        </reference>
        <reference anchor="RFC7540" target="https://www.rfc-editor.org/info/rfc7540">
          <front>
            <title>Hypertext Transfer Protocol Version 2 (HTTP/2)</title>
            <author fullname="M. Belshe" initials="M." surname="Belshe">
              <organization/>
            </author>
            <author fullname="R. Peon" initials="R." surname="Peon">
              <organization/>
            </author>
            <author fullname="M. Thomson" initials="M." role="editor" surname="Thomson">
              <organization/>
            </author>
            <date month="May" year="2015"/>
            <abstract>
              <t>This specification describes an optimized expression of the semantics of the Hypertext Transfer Protocol (HTTP), referred to as HTTP version 2 (HTTP/2).  HTTP/2 enables a more efficient use of network resources and a reduced perception of latency by introducing header field compression and allowing multiple concurrent exchanges on the same connection.  It also introduces unsolicited push of representations from servers to clients.</t>
              <t>This specification is an alternative to, but does not obsolete, the HTTP/1.1 message syntax.  HTTP's existing semantics remain unchanged.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="7540"/>
          <seriesInfo name="DOI" value="10.17487/RFC7540"/>
        </reference>
      </references>
      <references>
        <name>Informative References</name>
        <reference anchor="RFC6202" target="https://www.rfc-editor.org/info/rfc6202">
          <front>
            <title>Known Issues and Best Practices for the Use of Long Polling and Streaming in Bidirectional HTTP</title>
            <author fullname="S. Loreto" initials="S." surname="Loreto">
              <organization/>
            </author>
            <author fullname="P. Saint-Andre" initials="P." surname="Saint-Andre">
              <organization/>
            </author>
            <author fullname="S. Salsano" initials="S." surname="Salsano">
              <organization/>
            </author>
            <author fullname="G. Wilkins" initials="G." surname="Wilkins">
              <organization/>
            </author>
            <date month="April" year="2011"/>
            <abstract>
              <t>On today's Internet, the Hypertext Transfer Protocol (HTTP) is often used (some would say abused) to enable asynchronous, "server- initiated" communication from a server to a client as well as communication from a client to a server.  This document describes known issues and best practices related to such "bidirectional HTTP" applications, focusing on the two most common mechanisms: HTTP long polling and HTTP streaming.  This document is not an Internet  Standards Track specification; it is published for informational  purposes.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="6202"/>
          <seriesInfo name="DOI" value="10.17487/RFC6202"/>
        </reference>
      </references>
    </references>
    <section numbered="false" anchor="acknowledgments" toc="default">
      <name>Acknowledgments</name>
      <t>Thanks to Anthony Chivetta, Joshua Otto, and Valentin Pistol for their
contributions in the design and implementation of this work.</t>
    </section>
  </back>
  <!-- ##markdown-source:
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
hfdGKiL8HzGYFuuK/wHCGnGL1U0AAA==

-->

</rfc>
