<?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.29 (Ruby 3.4.4) -->
<rfc xmlns:xi="http://www.w3.org/2001/XInclude" ipr="trust200902" docName="draft-ietf-webtrans-overview-11" category="std" consensus="true" tocInclude="true" sortRefs="true" symRefs="true" version="3">
  <!-- xml2rfc v2v3 conversion 3.31.0 -->
  <front>
    <title abbrev="WebTransport">The WebTransport Protocol Framework</title>
    <seriesInfo name="Internet-Draft" value="draft-ietf-webtrans-overview-11"/>
    <author initials="E." surname="Kinnear" fullname="Eric Kinnear">
      <organization>Apple Inc.</organization>
      <address>
        <email>ekinnear@apple.com</email>
      </address>
    </author>
    <author initials="V." surname="Vasiliev" fullname="Victor Vasiliev">
      <organization>Google</organization>
      <address>
        <email>vasilvv@google.com</email>
      </address>
    </author>
    <date year="2025" month="October" day="20"/>
    <area>Web and Internet Transport</area>
    <workgroup>WEBTRANS</workgroup>
    <keyword>webtransport</keyword>
    <abstract>
      <?line 41?>

<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.</t>
      <t>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>
    <note removeInRFC="true">
      <name>About This Document</name>
      <t>
        The latest revision of this draft can be found at <eref target="https://ietf-wg-webtrans.github.io/draft-ietf-webtrans-overview/draft-ietf-webtrans-overview.html"/>.
        Status information for this document may be found at <eref target="https://datatracker.ietf.org/doc/draft-ietf-webtrans-overview/"/>.
      </t>
      <t>
        Discussion of this document takes place on the
        WebTransport Working Group mailing list (<eref target="mailto:webtransport@ietf.org"/>),
        which is archived at <eref target="https://mailarchive.ietf.org/arch/browse/webtransport/"/>.
        Subscribe at <eref target="https://www.ietf.org/mailman/listinfo/webtransport/"/>.
      </t>
      <t>Source for this draft and an issue tracker can be found at
        <eref target="https://github.com/ietf-wg-webtrans/draft-ietf-webtrans-overview"/>.</t>
    </note>
  </front>
  <middle>
    <?line 53?>

<section anchor="introduction">
      <name>Introduction</name>
      <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.</t>
      <t>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>
      <section anchor="background">
        <name>Background</name>
        <t>Historically, web applications that needed a bidirectional data stream between a
client and a server could rely on WebSockets <xref target="RFC6455"/>, a message-based
protocol compatible with the Web security model.  However, since the
abstraction it provides is a single ordered reliable stream of messages, it
suffers from head-of-line blocking, meaning that all messages must be sent and
received in order even if they could be processed independently of each other,
and some messages may no longer be relevant.  This makes it a poor fit for
latency-sensitive applications which rely on partial reliability and stream
independence for performance.</t>
        <t>One existing option available to Web developers are WebRTC data channels
<xref target="RFC8831"/>, which provide a WebSocket-like API for a peer-to-peer SCTP
channel protected by DTLS.  In theory, it is possible to use it for the use
cases addressed by this specification. However, in practice, it has not seen
wide adoption outside of browser-to-browser settings due to its dependency on
ICE (which fits poorly with the Web model) and userspace SCTP (which has a
limited number of implementations available due to not being used in other
contexts).</t>
        <t>An alternative design would be to open multiple WebSocket connections over
HTTP/3 <xref target="RFC9220"/>.  That would avoid head-of-line blocking and provide an
ability to cancel a stream by closing the corresponding WebSocket session.
However, this approach has a number of drawbacks, which all stem primarily from
the fact that semantically each WebSocket is a completely independent entity:</t>
        <ul spacing="normal">
          <li>
            <t>Each new stream would require a WebSocket handshake to agree on application
protocol used, meaning that it would take at least one RTT to establish each
new stream before the client can write to it.</t>
          </li>
          <li>
            <t>Only clients can initiate streams.  Server-initiated streams and other
alternative modes of communication (such as the QUIC DATAGRAM frame
<xref target="RFC9221"/>) are not available.</t>
          </li>
          <li>
            <t>While the streams would normally be pooled by the user agent, this is not
guaranteed, and the general process of mapping a WebSocket to a server is
opaque to the client.  This introduces unpredictable performance properties
into the system, and prevents optimizations which rely on the streams being on
the same connection (for instance, it might be possible for the client to
request different retransmission priorities for different streams, but that
would be much more complex unless they are all on the same connection).</t>
          </li>
        </ul>
        <t>WebTransport avoids all of those issues by letting applications create a single
transport object that can contain multiple streams multiplexed together in a
single context (similar to SCTP, HTTP/2, QUIC and others), and can also be used
to send unreliable datagrams (similar to UDP).</t>
      </section>
      <section anchor="conventions-and-definitions">
        <name>Conventions and Definitions</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>WebTransport is a framework that aims to abstract away the underlying transport
protocol while still exposing a few key transport-layer aspects to application
developers.  It is structured around the following concepts:</t>
        <dl>
          <dt>WebTransport session:</dt>
          <dd>
            <t>A WebTransport session is a single communication context established between a
client and a server.  It may correspond to a specific transport-layer
connection, or it may be a logical entity within an existing multiplexed
transport-layer connection.  WebTransport sessions are logically independent
from one another even if some sessions can share an underlying
transport-layer connection.</t>
          </dd>
          <dt>WebTransport protocol:</dt>
          <dd>
            <t>A WebTransport protocol is a specific protocol that can be used to establish
a WebTransport session.</t>
          </dd>
          <dt>Datagram:</dt>
          <dd>
            <t>A datagram is a unit of transmission that is limited in size (typically to
the path MTU), does not have an expectation of being delivered reliably, and
is treated atomically by the transport.</t>
          </dd>
          <dt>Stream:</dt>
          <dd>
            <t>A stream is a sequence of bytes that is reliably delivered to the receiving
application in the same order as it was transmitted by the sender.  Streams
can be of arbitrary length, and therefore cannot always be buffered entirely
in memory. WebTransport protocols and APIs are expected to provide partial
stream data to the application before the stream has been entirely received.</t>
          </dd>
          <dt>Message:</dt>
          <dd>
            <t>A message is a stream that is sufficiently small that it can be fully buffered
before being passed to the application.  WebTransport does not define messages
as a primitive, since from the transport perspective they can be simulated
by fully buffering a stream before passing it to the application.  However,
this distinction is important to highlight since some of the similar protocols
and APIs (notably WebSocket <xref target="RFC6455"/>) use messages as a core abstraction.</t>
          </dd>
          <dt>Application:</dt>
          <dd>
            <t>A WebTransport application refers to executable code that is provided by a
developer to perform some, often user-visible, function, such as sending and
receiving data. For example, a JavaScript application using WebTransport that
is running inside a browser or code running within an executable that makes
outgoing or accepts incoming WebTransport sessions.</t>
          </dd>
          <dt>Server:</dt>
          <dd>
            <t>A WebTransport server is an application that accepts incoming WebTransport
sessions.  In cases when WebTransport is served over a multiplexed protocol
(such as HTTP/2 or HTTP/3), "WebTransport server" refers to a handler for a
specific multiplexed endpoint (e.g. an application handling specific HTTP
resource), rather than the application listening on a given TCP or UDP
socket.</t>
          </dd>
          <dt>Client:</dt>
          <dd>
            <t>A WebTransport client is an application that initiates the transport
session and may be running in a constrained security context, for instance,
a JavaScript application running inside a browser.</t>
          </dd>
          <dt>Endpoint:</dt>
          <dd>
            <t>An endpoint refers to either a Server or a Client.</t>
          </dd>
          <dt>User agent:</dt>
          <dd>
            <t>A WebTransport user agent is a software system that has an unrestricted
access to the host network stack and can create transports on behalf
of the client.</t>
          </dd>
          <dt>Event:</dt>
          <dd>
            <t>An event is a notification, callback, or signal that a WebTransport endpoint
can provide to a WebTransport application to notify it that some change of
interest to the application has occurred.</t>
          </dd>
        </dl>
      </section>
    </section>
    <section anchor="common-requirements">
      <name>Common Transport Requirements</name>
      <t>Since clients are not necessarily trusted and have to be constrained by the
Web security model, WebTransport imposes certain requirements on any specific
protocol used.</t>
      <t>All WebTransport protocols MUST use TLS <xref target="RFC8446"/> or a semantically
equivalent security protocol (for instance, DTLS <xref target="RFC9147"/>).
The protocols SHOULD use TLS version 1.3 or later, unless they aim for
backwards compatibility with legacy systems.</t>
      <t>All WebTransport protocols MUST require the user agent to obtain and maintain
explicit consent from the server to send data.  For connection-oriented
protocols (such as TCP or QUIC), the connection establishment and keep-alive
mechanisms suffice.  STUN Consent Freshness <xref target="RFC7675"/> is another example of
a mechanism satisfying this requirement.</t>
      <t>All WebTransport protocols MUST limit the rate at which the client sends data.
This SHOULD be accomplished via a feedback-based congestion control mechanism
(such as <xref target="RFC5681"/> or <xref target="RFC9002"/>).</t>
      <t>All WebTransport protocols MUST support simultaneously establishing multiple
sessions between the same client and server.</t>
      <t>All WebTransport protocols MUST prevent clients from establishing transport
sessions to network endpoints that are not WebTransport servers.</t>
      <t>All WebTransport protocols MUST provide a way for the user agent to indicate
the origin <xref target="RFC6454"/> of the client to the server.</t>
      <t>All WebTransport protocols MUST provide a way for a server endpoint location to
be described using a URI <xref target="RFC3986"/>.  This enables integration with various
Web platform features that represent resources as URIs, such as Content
Security Policy <xref target="CSP"/>.</t>
      <t>All WebTransport protocols MUST provide a way for the session initiator to
negotiate a subprotocol with the peer when establishing a WebTransport session.
The session initiator provides an optional list of subprotocols to the peer.
The peer selects one and responds indicating the selected subprotocol or
rejects the session establishment request if none of the subprotocols are
supported. Note that the semantics of individual subprotocol token values is
determined by the WebTransport resource in question and are not registered in
IANA's "ALPN Protocol IDs" registry.</t>
    </section>
    <section anchor="session-establishment">
      <name>Session Establishment</name>
      <t>WebTransport session establishment is an asynchronous process.  A session is
considered <em>ready</em> from the client's perspective when the server has confirmed
that it is willing to accept the session with the provided origin and URI.
WebTransport protocols MAY allow clients to send data before the session is
ready; however, they MUST NOT use mechanisms that are unsafe against replay
attacks without an explicit indication from the client.</t>
      <section anchor="application-protocol-negotiation">
        <name>Application Protocol Negotiation</name>
        <t>WebTransport sessions offer a protocol negotiation mechanism, similar to
TLS Application-Layer Protocol Negotiation Extension (ALPN) <xref target="RFC7301"/>.</t>
        <t>When establishing a session, a WebTransport client can offer the server a list
of protocols that it would like to use on that session, in preference order.
When the server receives such a list, it selects a single choice from that list
and communicates that choice to the client.  A server that does not wish to use
any of the protocols offered by the client can reject the WebTransport session
establishment attempt.</t>
      </section>
    </section>
    <section anchor="transport-features">
      <name>Transport Features</name>
      <t>All transport protocols MUST provide datagrams, unidirectional and
bidirectional streams in order to make the transport protocols interchangeable.</t>
      <section anchor="features-session">
        <name>Session-Wide Features</name>
        <t>Any WebTransport protocol SHALL provide the following operations on the
session:</t>
        <dl>
          <dt>establish a session</dt>
          <dd>
            <t>Create a new WebTransport session given a URI <xref target="RFC3986"/> of the requester.
An origin <xref target="RFC6454"/> MUST be given if the WebTransport session is coming
from a browser client; otherwise, it is OPTIONAL.</t>
          </dd>
          <dt>terminate a session</dt>
          <dd>
            <t>Terminate the session while communicating to the peer an unsigned 32-bit
error code and an error reason string of at most 1024 bytes.  As soon as the
session is terminated, no further application data will be exchanged on it.
The error code and string are optional; the default values are 0 and "".  The
delivery of the error code and string MAY be best-effort.</t>
          </dd>
          <dt>drain a session</dt>
          <dd>
            <t>Indicate to the peer that it expects the session to be gracefully terminated
as soon as possible.  Either endpoint MAY continue using the session and MAY
open new streams.  This signal is intended to allow intermediaries and endpoints
to request a session be drained of traffic without enforcement.</t>
          </dd>
          <dt>export keying material</dt>
          <dd>
            <t>Derive a TLS keying material exporter (<xref section="7.5" sectionFormat="of" target="RFC8446"/>) to provide keying material specific to the WebTransport session.</t>
          </dd>
        </dl>
        <t>Any WebTransport protocol SHALL provide the following events:</t>
        <dl>
          <dt>session terminated event</dt>
          <dd>
            <t>Indicates that the WebTransport session has been terminated, either by the
peer or by the local networking stack, and no user data can be exchanged on
it any further.  If the session has been terminated as a result of the peer
performing the "terminate a session" operation above, a corresponding error
code and an error string can be provided.</t>
          </dd>
          <dt>session draining event</dt>
          <dd>
            <t>Indicates that the WebTransport session has been asked to drain as soon as
possible.  Continued use of the session, including opening new streams is
discouraged, but allowed.</t>
          </dd>
        </dl>
      </section>
      <section anchor="features-datagrams">
        <name>Datagrams</name>
        <t>A datagram is a sequence of bytes that is limited in size (generally to the path
MTU) and is not expected to be transmitted reliably.  The general goal for
WebTransport datagrams is to be similar in behavior to UDP while being subject
to common requirements expressed in <xref target="common-requirements"/>.</t>
        <t>A WebTransport sender is not expected to retransmit datagrams, though it may
end up doing so if it is using TCP or some other underlying protocol that only
provides reliable delivery.  WebTransport datagrams are not expected to be flow
controlled, meaning that the receiver might drop datagrams if the application
is not consuming them fast enough.</t>
        <t>The application MUST be provided with the maximum datagram size that it can
send.  The size SHOULD be derived from the result of performing path MTU
discovery.</t>
        <t>In the WebTransport model, all of the outgoing and incoming datagrams are
placed into a size-bound queue (similar to a network interface card queue).</t>
        <t>Any WebTransport protocol SHALL provide the following operations on the
session:</t>
        <dl>
          <dt>send a datagram</dt>
          <dd>
            <t>Enqueues a datagram to be sent to the peer.  This can potentially result in
the datagram being dropped if the queue is full.</t>
          </dd>
          <dt>receive a datagram</dt>
          <dd>
            <t>Dequeues an incoming datagram, if one is available.</t>
          </dd>
          <dt>get maxiumum datagram size</dt>
          <dd>
            <t>Returns the largest size of the datagram that a WebTransport session is
expected to be able to send.</t>
          </dd>
        </dl>
      </section>
      <section anchor="features-streams">
        <name>Streams</name>
        <t>A unidirectional stream is a one-way reliable in-order stream of bytes where the
initiator is the only endpoint that can send data.  A bidirectional stream
allows both endpoints to send data and can be conceptually represented as a pair
of unidirectional streams.</t>
        <t>The streams are in general expected to follow the semantics and the state
machine of QUIC streams (<xref target="RFC9000"/>, Sections 2 and 3).</t>
        <t>A WebTransport stream can be reset, indicating that the endpoint is not
interested in either sending or receiving any data related to the stream. The
sender of a stream can indicate an offset in the stream (possibly zero) after
which data that was already sent will not be retransmitted.</t>
        <t>Streams SHOULD be sufficiently lightweight that they can be used as messages.</t>
        <t>Data sent on a stream is flow controlled by the transport protocol.  In addition
to flow controlling stream data, the creation of new streams is flow controlled
as well: an endpoint may only open a limited number of streams until the peer
explicitly allows creating more streams.  From the perspective of the client,
this is presented as a size-bounded queue of incoming streams.</t>
        <t>Any WebTransport protocol SHALL provide the following operations on the
session:</t>
        <dl>
          <dt>create a unidirectional stream</dt>
          <dd>
            <t>Creates an outgoing unidirectional stream; this operation may block until the
flow control of the underlying protocol allows for it to be completed.</t>
          </dd>
          <dt>create a bidirectional stream</dt>
          <dd>
            <t>Creates an outgoing bidirectional stream; this operation may block until the
flow control of the underlying protocol allows for it to be completed.</t>
          </dd>
          <dt>receive a unidirectional stream</dt>
          <dd>
            <t>Removes a stream from the queue of incoming unidirectional streams, if one is
available.</t>
          </dd>
          <dt>receive a bidirectional stream</dt>
          <dd>
            <t>Removes a stream from the queue of incoming bidirectional streams, if one is
available.</t>
          </dd>
        </dl>
        <t>Any WebTransport protocol SHALL provide the following operations on an
individual stream:</t>
        <dl>
          <dt>send bytes</dt>
          <dd>
            <t>Add bytes into the stream send buffer.  The sender can also indicate a FIN,
signalling the fact that no new data will be send on the stream.  Not
applicable for incoming unidirectional streams.</t>
          </dd>
          <dt>receive bytes</dt>
          <dd>
            <t>Removes bytes from the stream receive buffer.  FIN can be received together
with the stream data.  Not applicable for outgoing unidirectional streams.</t>
          </dd>
          <dt>abort send side</dt>
          <dd>
            <t>Sends a signal to the peer that the write side of the stream
has been aborted, including an offset in the stream that is reliably
delivered.  Discards the send buffer after that offset; if possible, no
currently outstanding data after the provided send offset is transmitted or
retransmitted.  If omitted, the offset is presumed to be 0.  An unsigned
32-bit error code can be supplied as a part of the signal to the peer; if
omitted, the error code is presumed to be 0.</t>
          </dd>
          <dt>abort receive side</dt>
          <dd>
            <t>Sends a signal to the peer that the read side of the stream has been aborted.
Discards the receive buffer; the peer is typically expected to abort the
corresponding send side in response.  An unsigned 32-bit error code can be
supplied as a part of the signal to the peer.</t>
          </dd>
        </dl>
        <t>Any WebTransport protocol SHALL provide the following events for an individual
stream:</t>
        <dl>
          <dt>send side aborted</dt>
          <dd>
            <t>Indicates that the peer has aborted the corresponding receive side of the
stream.  An unsigned 32-bit error code from the peer may be available.</t>
          </dd>
          <dt>receive side aborted</dt>
          <dd>
            <t>Indicates that the peer has aborted the corresponding send side of the
stream.  An unsigned 32-bit error code from the peer may be available.</t>
          </dd>
          <dt>all data committed</dt>
          <dd>
            <t>Indicates that all of the outgoing data on the stream, including the end
stream indication, is in the state where aborting the send side would have no
further effect on any data being delivered.</t>
          </dd>
          <dt/>
          <dd>
            <t>For protocols, like HTTP/2, stream data might be passed to another
component (like a kernel) for transmission. Once data is passed to that
component it might not be possible to abort the sending of stream data
without also aborting the entire connection.
For these protocols, data is considered committed once it passes to the
other component.</t>
          </dd>
          <dt/>
          <dd>
            <t>A protocol, like HTTP/3, that uses a more integrated stack might be able to
retract data further into the process. For these protocols, sending on a
stream might be aborted at any time until all data has been received and
acknowledged by the peer, corresponding to the "Data Recvd" state in QUIC;
see <xref section="3.1" sectionFormat="of" target="QUIC"/>.</t>
          </dd>
        </dl>
      </section>
    </section>
    <section anchor="transport-properties">
      <name>Transport Properties</name>
      <t>WebTransport defines common semantics for multiple protocols to allow them to
be used interchangeably.  Nevertheless, those protocols still have
substantially different performance properties that an application may want to
query.</t>
      <t>The most notable property is support for unreliable data delivery.  The
protocol is defined to support unreliable delivery if:</t>
      <ul spacing="normal">
        <li>
          <t>Resetting a stream results in the lost stream data no longer being
retransmitted, and</t>
        </li>
        <li>
          <t>The datagrams are never retransmitted.</t>
        </li>
      </ul>
      <t>Another important property is pooling support.  Pooling means that multiple
transport sessions may end up sharing the same transport layer connection, and
thus share a congestion controller and other contexts.</t>
    </section>
    <section anchor="security-considerations">
      <name>Security Considerations</name>
      <t>Providing untrusted clients with a reasonably low-level access to the network
comes with risks.  This document mitigates those risks by imposing a set of
common requirements described in <xref target="common-requirements"/>.</t>
      <t>WebTransport mandates the use of TLS for all protocols implementing it.  This
provides confidentiality and integrity for the transport, protecting it from
both potential attackers and ossification by intermediaries in the network.</t>
      <t>One potential concern is that even when a transport cannot be created, the
connection error would reveal enough information to allow an attacker to scan
the network addresses that would normally be inaccessible.  Because of that, the
user agent that runs untrusted clients MUST NOT provide any detailed error
information until the server has confirmed that it is a WebTransport endpoint.
For example, the client must not be able to distinguish between a network
address that is unreachable and one that is reachable but is not a WebTransport
server.</t>
      <t>Since WebTransport requires TLS, individual transport protocols MAY expose
TLS-based authentication capabilities such as client certificates and custom
validation of server certificates, including validation using a client-specified
set of server certificate hashes.</t>
    </section>
    <section anchor="iana-considerations">
      <name>IANA Considerations</name>
      <t>There are no requests to IANA in this document.</t>
    </section>
  </middle>
  <back>
    <references anchor="sec-combined-references">
      <name>References</name>
      <references anchor="sec-normative-references">
        <name>Normative References</name>
        <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="RFC8446">
          <front>
            <title>The Transport Layer Security (TLS) Protocol Version 1.3</title>
            <author fullname="E. Rescorla" initials="E." surname="Rescorla"/>
            <date month="August" year="2018"/>
            <abstract>
              <t>This document specifies version 1.3 of the Transport Layer Security (TLS) protocol. TLS allows client/server applications to communicate over the Internet in a way that is designed to prevent eavesdropping, tampering, and message forgery.</t>
              <t>This document updates RFCs 5705 and 6066, and obsoletes RFCs 5077, 5246, and 6961. This document also specifies new requirements for TLS 1.2 implementations.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="8446"/>
          <seriesInfo name="DOI" value="10.17487/RFC8446"/>
        </reference>
        <reference anchor="RFC6454">
          <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="RFC3986">
          <front>
            <title>Uniform Resource Identifier (URI): Generic Syntax</title>
            <author fullname="T. Berners-Lee" initials="T." surname="Berners-Lee"/>
            <author fullname="R. Fielding" initials="R." surname="Fielding"/>
            <author fullname="L. Masinter" initials="L." surname="Masinter"/>
            <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="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>
      </references>
      <references anchor="sec-informative-references">
        <name>Informative References</name>
        <reference anchor="CSP" target="https://www.w3.org/TR/CSP/">
          <front>
            <title>Content Security Policy Level 3</title>
            <author>
              <organization>W3C</organization>
            </author>
            <date year="2025" month="October"/>
          </front>
        </reference>
        <reference anchor="RFC6455">
          <front>
            <title>The WebSocket Protocol</title>
            <author fullname="I. Fette" initials="I." surname="Fette"/>
            <author fullname="A. Melnikov" initials="A." surname="Melnikov"/>
            <date month="December" year="2011"/>
            <abstract>
              <t>The WebSocket Protocol enables two-way communication between a client running untrusted code in a controlled environment to a remote host that has opted-in to communications from that code. The security model used for this is the origin-based security model commonly used by web browsers. The protocol consists of an opening handshake followed by basic message framing, layered over TCP. The goal of this technology is to provide a mechanism for browser-based applications that need two-way communication with servers that does not rely on opening multiple HTTP connections (e.g., using XMLHttpRequest or s and long polling). [STANDARDS-TRACK]</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="6455"/>
          <seriesInfo name="DOI" value="10.17487/RFC6455"/>
        </reference>
        <reference anchor="RFC8831">
          <front>
            <title>WebRTC Data Channels</title>
            <author fullname="R. Jesup" initials="R." surname="Jesup"/>
            <author fullname="S. Loreto" initials="S." surname="Loreto"/>
            <author fullname="M. Tüxen" initials="M." surname="Tüxen"/>
            <date month="January" year="2021"/>
            <abstract>
              <t>The WebRTC framework specifies protocol support for direct, interactive, rich communication using audio, video, and data between two peers' web browsers. This document specifies the non-media data transport aspects of the WebRTC framework. It provides an architectural overview of how the Stream Control Transmission Protocol (SCTP) is used in the WebRTC context as a generic transport service that allows web browsers to exchange generic data from peer to peer.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="8831"/>
          <seriesInfo name="DOI" value="10.17487/RFC8831"/>
        </reference>
        <reference anchor="RFC9220">
          <front>
            <title>Bootstrapping WebSockets with HTTP/3</title>
            <author fullname="R. Hamilton" initials="R." surname="Hamilton"/>
            <date month="June" year="2022"/>
            <abstract>
              <t>The mechanism for running the WebSocket Protocol over a single stream of an HTTP/2 connection is equally applicable to HTTP/3, but the HTTP-version-specific details need to be specified. This document describes how the mechanism is adapted for HTTP/3.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="9220"/>
          <seriesInfo name="DOI" value="10.17487/RFC9220"/>
        </reference>
        <reference anchor="RFC9221">
          <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="RFC9147">
          <front>
            <title>The Datagram Transport Layer Security (DTLS) Protocol Version 1.3</title>
            <author fullname="E. Rescorla" initials="E." surname="Rescorla"/>
            <author fullname="H. Tschofenig" initials="H." surname="Tschofenig"/>
            <author fullname="N. Modadugu" initials="N." surname="Modadugu"/>
            <date month="April" year="2022"/>
            <abstract>
              <t>This document specifies version 1.3 of the Datagram Transport Layer Security (DTLS) protocol. DTLS 1.3 allows client/server applications to communicate over the Internet in a way that is designed to prevent eavesdropping, tampering, and message forgery.</t>
              <t>The DTLS 1.3 protocol is based on the Transport Layer Security (TLS) 1.3 protocol and provides equivalent security guarantees with the exception of order protection / non-replayability. Datagram semantics of the underlying transport are preserved by the DTLS protocol.</t>
              <t>This document obsoletes RFC 6347.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="9147"/>
          <seriesInfo name="DOI" value="10.17487/RFC9147"/>
        </reference>
        <reference anchor="RFC7675">
          <front>
            <title>Session Traversal Utilities for NAT (STUN) Usage for Consent Freshness</title>
            <author fullname="M. Perumal" initials="M." surname="Perumal"/>
            <author fullname="D. Wing" initials="D." surname="Wing"/>
            <author fullname="R. Ravindranath" initials="R." surname="Ravindranath"/>
            <author fullname="T. Reddy" initials="T." surname="Reddy"/>
            <author fullname="M. Thomson" initials="M." surname="Thomson"/>
            <date month="October" year="2015"/>
            <abstract>
              <t>To prevent WebRTC applications, such as browsers, from launching attacks by sending traffic to unwilling victims, periodic consent to send needs to be obtained from remote endpoints.</t>
              <t>This document describes a consent mechanism using a new Session Traversal Utilities for NAT (STUN) usage.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="7675"/>
          <seriesInfo name="DOI" value="10.17487/RFC7675"/>
        </reference>
        <reference anchor="RFC5681">
          <front>
            <title>TCP Congestion Control</title>
            <author fullname="M. Allman" initials="M." surname="Allman"/>
            <author fullname="V. Paxson" initials="V." surname="Paxson"/>
            <author fullname="E. Blanton" initials="E." surname="Blanton"/>
            <date month="September" year="2009"/>
            <abstract>
              <t>This document defines TCP's four intertwined congestion control algorithms: slow start, congestion avoidance, fast retransmit, and fast recovery. In addition, the document specifies how TCP should begin transmission after a relatively long idle period, as well as discussing various acknowledgment generation methods. This document obsoletes RFC 2581. [STANDARDS-TRACK]</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="5681"/>
          <seriesInfo name="DOI" value="10.17487/RFC5681"/>
        </reference>
        <reference anchor="RFC9002">
          <front>
            <title>QUIC Loss Detection and Congestion Control</title>
            <author fullname="J. Iyengar" initials="J." role="editor" surname="Iyengar"/>
            <author fullname="I. Swett" initials="I." role="editor" surname="Swett"/>
            <date month="May" year="2021"/>
            <abstract>
              <t>This document describes loss detection and congestion control mechanisms for QUIC.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="9002"/>
          <seriesInfo name="DOI" value="10.17487/RFC9002"/>
        </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="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>
      </references>
    </references>
  </back>
  <!-- ##markdown-source:
H4sIAAAAAAAAA+1cWXPbSJJ+x6+oUT+sPUHSZ19ybOyoJXvasz60kjwdHRsb
E0WgSGIEAhwAJM3p8H/f/DKzDlCQ+9iOfZqHmbZIoCor7/wyi9PpNOvLvnKn
5mblzA9uftPauts0bW8u26Zv8qYyr1q7dvumvc3sfN663enguaxo8poeODVF
axf9tHT9Yrp38x4PTJuda3el20+fPMnq7Xru2tOssL07zfKm7lzdbbtT07db
l9Gyz7Kcvlo27eHUdH2R2dbZU3NCuxlbF+Z13bu2dr0Je59k+yVR8/K7m6uz
d9fZztVbWtmYZdtsN/Jm8qwx/WHj8DGdpayX5s94DJ+vbVnR555qPP4nnGPW
tEt8b9t8Rd+v+n7TnT56hMfxUblzM//YI3zwaN42+849Shd6hAWWZb/azmkJ
4c4yMOjR55iGNyviSNcnmx+vMJO1Z2Xz2bU+++Vs1a+rk+zWHUjMBTg4NekZ
MrvtV03LX9D/jClrEtvLmfnPsq6dbfkzUYKXbZkPPibenJqzzaZyJMB8xp85
Ybi7lef+ZPH1LG/Www3+OjN/tV1ZlW6X7PDXMu+bdvgNbWLr8p+2L5v61Py5
aZaVS3fa4eHd7k9L/oZ3ysp60bRremXHOnN+fXnKr/S2XTriuGf4fr+f7Z+x
jG+uHtFjj+QxMZuT84bUsu7Ntcu3bdkfzGVTlfnBvHE7V5lnJ/xw5F9gyQ/P
zvlPtgbjVfICUsqy6XRq7LwjAeT01y8wTeNqO69cZ3LiSd3Tf8m86PWydoWZ
H0wvS2Sdp3LdFERe39CD6/W2LmF5Zk+qZKxp3bqhvzpSDteabQfCrOFXnVlv
q74kcX10RRYUZGbM6573LDvavFnw8z3+UdZFuSuLra3MRsnuiBzbk1XRHnbh
QIX7uGk6l9G/tjW5g64nsqEVoItk2k1A55xPI0TWgT/+KLxkVZEB4rRrrDV3
RD29UsJz5CtbLx1x6TADS8vOkOfariG7wi1oaX7PwCZoGWLCP7YlcYK52dT8
XTyALpulYpkY25HZ0LtWlgJr6c2Fsz1xjtkyWGViuu2GBUqaaLpm7TJ6ZL8q
8xW5pAPIbzY4vq1mohPrsihIs7Mv4Azbptjm+PpfGvIvDYGGfPGF+c7mt4h+
dZFl3xOnG3LHROthAn8+4Jewo3auACPNvCzoLLmsBadE4ukp/q5pj37vHHEz
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
bkx/og+3FLL/BRoalyVYVQAA

-->

</rfc>
