<?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.39 (Ruby 3.2.3) -->
<rfc xmlns:xi="http://www.w3.org/2001/XInclude" ipr="trust200902" docName="draft-ietf-wish-whep-04" category="std" consensus="true" tocInclude="true" sortRefs="true" symRefs="true" version="3">
  <!-- xml2rfc v2v3 conversion 3.34.0 -->
  <front>
    <title abbrev="whep">WebRTC-HTTP Egress Protocol (WHEP)</title>
    <seriesInfo name="Internet-Draft" value="draft-ietf-wish-whep-04"/>
    <author initials="S." surname="Murillo" fullname="Sergio Garcia Murillo">
      <organization>Millicast</organization>
      <address>
        <email>sergio.garcia.murillo@cosmosoftware.io</email>
      </address>
    </author>
    <author initials="C." surname="Chen" fullname="Cheng Chen">
      <organization>ByteDance</organization>
      <address>
        <email>webrtc@bytedance.com</email>
      </address>
    </author>
    <author initials="D." surname="Jenkins" fullname="Dan Jenkins" role="editor">
      <organization>Everycast Labs Ltd</organization>
      <address>
        <email>dan@everycastlabs.uk</email>
      </address>
    </author>
    <date year="2026" month="June" day="22"/>
    <area>ART</area>
    <workgroup>wish</workgroup>
    <keyword>WebRTC</keyword>
    <abstract>
      <?line 49?>

<t>This document describes a simple HTTP-based protocol that will allow WebRTC-based viewers to watch content from streaming services and/or Content Delivery Networks (CDNs) or WebRTC Transmission Network (WTNs).</t>
    </abstract>
  </front>
  <middle>
    <?line 53?>

<section anchor="introduction">
      <name>Introduction</name>
      <t>The IETF RTCWEB Working Group standardized the JavaScript Session Establishment Protocol (JSEP) <xref target="RFC9429"/>, a mechanism used to control the setup, management, and teardown of a multimedia session. It also describes how to negotiate media flows using the offer/answer model with the Session Description Protocol (SDP) <xref target="RFC3264"/> including the formats for data sent over the wire (e.g., media types, codec parameters, and encryption). WebRTC intentionally does not specify a signaling transport protocol at the application level.</t>
      <t>While WebRTC can be integrated with standard signaling protocols like SIP <xref target="RFC3261"/> or XMPP <xref target="RFC6120"/>, they are not designed to be used in broadcasting and streaming services, and there also is no sign of adoption in that industry. RTSP <xref target="RFC7826"/>, which is based on RTP, does not support the SDP offer/answer model <xref target="RFC3264"/> for negotiating the characteristics of the media session.</t>
      <t>There are many situations in which the lack of a standard protocol for consuming media from streaming service using WebRTC has become a problem:</t>
      <ul spacing="normal">
        <li>
          <t>Interoperability between WebRTC services and products.</t>
        </li>
        <li>
          <t>Reusing player software which can be integrated easily.</t>
        </li>
        <li>
          <t>Integration with Dynamic Adaptive Streaming over HTTP (DASH) for offering live streams via WebRTC while offering a time-shifted version via DASH.</t>
        </li>
        <li>
          <t>Playing WebRTC streams on devices that don't support custom javascript to be run (like TVs).</t>
        </li>
      </ul>
      <t>This document mimics what has been done in the WebRTC HTTP Ingest Protocol (WHIP) <xref target="RFC9725"/> for ingestion and specifies a simple HTTP-based protocol that can be used for consuming media from a streaming service using WebRTC.</t>
    </section>
    <section anchor="terminology">
      <name>Terminology</name>
      <t>The key words "<bcp14>MUST</bcp14>", "<bcp14>MUST NOT</bcp14>", "<bcp14>REQUIRED</bcp14>", "<bcp14>SHALL</bcp14>", "<bcp14>SHALL
NOT</bcp14>", "<bcp14>SHOULD</bcp14>", "<bcp14>SHOULD NOT</bcp14>", "<bcp14>RECOMMENDED</bcp14>", "<bcp14>NOT RECOMMENDED</bcp14>",
"<bcp14>MAY</bcp14>", and "<bcp14>OPTIONAL</bcp14>" in this document are to be interpreted as
described in BCP 14 <xref target="RFC2119"/> <xref target="RFC8174"/> when, and only when, they
appear in all capitals, as shown here.</t>
      <?line -18?>

</section>
    <section anchor="overview">
      <name>Overview</name>
      <t>The WebRTC-HTTP Egress Protocol (WHEP) is designed to facilitate an exchange of Session Description Protocol (SDP) offers and answers using HTTP POST requests. This exchange is a fundamental step in establishing an Interactive Connectivity Establishment (ICE) and Datagram Transport Layer Security (DTLS) session between WHEP player and the streaming service endpoint (Media Server).</t>
      <t>Upon successful establishment of the ICE/DTLS session, unidirectional media data transmission commences from the media server to the WHEP player. It is important to note that SDP renegotiations are not supported in WHEP, meaning that no modifications to the "m=" sections can be made after the initial SDP offer/answer exchange via HTTP POST is completed and only ICE related information can be updated via HTTP PATCH requests as defined in <xref target="ice-support"/>.</t>
      <t>The WHEP player always initiates the streaming session by sending an SDP offer to the WHEP endpoint. The WHEP endpoint can then choose to either accept the client's offer by responding with an SDP answer, or reject the client's offer and counter with its own SDP offer. If the WHEP endpoint sends a counter-offer, the client must then respond with an SDP answer. A WHEP player must support processing both SDP answers (when the WHEP endpoint accepts the client's offer) and SDP offers (when the WHEP endpoint sends a counter-offer) in response to the initial request.</t>
      <section anchor="protocol-operation-flow">
        <name>Protocol Operation Flow</name>
        <t>The following diagram illustrates the core operation of WHEP for initiating and terminating a viewing session:</t>
        <figure anchor="whep-protocol-operation">
          <name>WHEP Session Setup and Teardown</name>
          <artwork><![CDATA[
 +-------------+    +---------------+ +--------------+ +---------------+
 | WHEP player |    | WHEP endpoint | | Media Server | | WHEP session |
 +--+----------+    +---------+-----+ +------+-------+ +--------|------+
    |                         |              |                  |       
    |                         |              |                  |       
    |HTTP POST (SDP Offer)    |              |                  |       
    +------------------------>+              |                  |       
    |201 Created (SDP answer) |              |                  |       
    |   OR                    |              |                  |
    |406 Not Acceptable       |              |                  |       
    |   (SDP offer)           |              |                  |
    +<------------------------+              |                  |
    |                         |              |                  |
    |  [IF 406 Not Acceptable]|              |                  |
    |HTTP PATCH [session]     |              |                  |
    |   (SDP answer)          |              |                  |
    +---------------------------------------------------------->+
    |204 No Content           |              |                  |
    +<----------------------------------------------------------+ 
    |          ICE/STUN REQUEST              |                  |
    +--------------------------------------->+                  |
    |          ICE/STUN RESPONSE             |                  |
    |<---------------------------------------+                  |       
    |          DTLS SETUP                    |                  |       
    |<======================================>|                  |       
    |          RTP/RTCP FLOW                 |                  |       
    +<-------------------------------------->+                  |       
    | HTTP DELETE                                               |       
    +---------------------------------------------------------->+       
    | 200 OK                                                    |       
    <-----------------------------------------------------------x       
                                                                               
]]></artwork>
        </figure>
        <t>The elements in <xref target="whep-protocol-operation"/> are described as follows:</t>
        <ul spacing="normal">
          <li>
            <t>WHEP player: This represents the WebRTC media player, which functions as a client of WHEP by receiving and decoding the media from a remote media server.</t>
          </li>
          <li>
            <t>WHEP endpoint: This denotes the egress server that receives the initial WHEP request.</t>
          </li>
          <li>
            <t>WHEP endpoint URL: This refers to the URL of the WHEP endpoint responsible for creating the WHEP session.</t>
          </li>
          <li>
            <t>Media server: This is the WebRTC Media Server that establishes the media session with the WHEP player and delivers the media to it.</t>
          </li>
          <li>
            <t>WHEP session: Indicates the allocated HTTP resource by the WHEP endpoint for an ongoing egress session.</t>
          </li>
          <li>
            <t>WHEP session URL: This refers to the URL of the WHEP resource allocated by the WHEP endpoint for a specific media session. The WHEP player can send requests to the WHEP session using this URL to modify the session, such as ICE operations or termination.</t>
          </li>
        </ul>
        <t><xref target="whep-protocol-operation"/> illustrates the communication flow between a WHEP player, WHEP endpoint, media server, and WHEP session. This flow outlines the process of setting up and tearing down a playback session using WHEP, involving negotiation, ICE for Network Address Translation (NAT) traversal, DTLS and Secure Real-time Transport Protocol (SRTP) for security, and RTP/RTCP for media transport:</t>
      </section>
      <section anchor="protocol-operation-steps">
        <name>Protocol Operation Steps</name>
        <ul spacing="normal">
          <li>
            <t>The WHEP player initiates the communication by sending an HTTP POST with an SDP offer to the WHEP endpoint.</t>
          </li>
          <li>
            <t>The WHEP endpoint responds with either a "201 Created" message containing an SDP answer (accepting the client's offer) or a "406 Not Acceptable" message containing an SDP counter-offer (rejecting the client's offer).</t>
          </li>
          <li>
            <t>If the WHEP endpoint responded with "406 Not Acceptable", the WHEP player sends an HTTP PATCH containing an SDP answer to the WHEP session URL.</t>
          </li>
          <li>
            <t>If applicable, the WHEP session responds with a "204 No Content" message to the PATCH request.</t>
          </li>
          <li>
            <t>The WHEP player and media server establish ICE and DTLS sessions for NAT traversal and secure communication.</t>
          </li>
          <li>
            <t>RTP and RTCP flows are established for media transmission from the media server to the WHEP player, secured by the SRTP profile.</t>
          </li>
          <li>
            <t>The WHEP player sends an HTTP DELETE to terminate the WHEP session.</t>
          </li>
          <li>
            <t>The WHEP session responds with a "200 OK" to confirm the session termination.</t>
          </li>
        </ul>
      </section>
    </section>
    <section anchor="protocol-operation">
      <name>Protocol Operation</name>
      <section anchor="http-usage">
        <name>HTTP Usage</name>
        <t>Following the guidelines in <xref target="BCP56"/>, WHEP players <bcp14>MUST NOT</bcp14> match error codes returned by the WHEP endpoints and resources to a specific error cause indicated in this specification. WHEP players <bcp14>MUST</bcp14> be able to handle all applicable status codes gracefully falling back to the generic n00 semantics of a given status code on unknown error codes. WHEP endpoints and resources could convey finer-grained error information by a problem dtails json object in the response message body of the failed request as per <xref target="RFC9457"/>.</t>
        <t>The WHEP endpoints and sessions are origin servers as defined in <xref section="3.6" sectionFormat="of" target="RFC9110"/>; they handle the requests and provide responses for the underlying HTTP resources. Those HTTP resources do not have any representation defined in this specification, so the WHEP endpoints and sessions <bcp14>MUST</bcp14> return a 2xx successful response with no content when a GET request is received.</t>
      </section>
      <section anchor="whep-url-discoverability">
        <name>WHEP Endpoint URL Discoverability</name>
        <t>Many video player SDKs and generic video players need a mechanism to automatically detect whether a given URL corresponds to a WHEP endpoint, similar to how URLs ending in <tt>.m3u8</tt> are recognized as HLS streams or how <tt>.mpd</tt> indicates DASH manifests.</t>
        <t>To enable discoverability of WHEP endpoints, WHEP players and generic video player SDKs <bcp14>MAY</bcp14> use HTTP HEAD requests to determine if a URL is a WHEP endpoint. WHEP endpoints <bcp14>SHOULD</bcp14> support HTTP HEAD requests as defined in <xref section="9.3.2" sectionFormat="of" target="RFC9110"/>.</t>
        <t>When a WHEP endpoint receives a HEAD request, it <bcp14>SHOULD</bcp14> respond with a "200 OK" status code and include a <tt>Content-Type</tt> header field with the value <tt>application/sdp</tt>, indicating that the endpoint accepts POST requests with SDP offers in the request body as defined in <xref target="playback-session-setup"/>. This allows players to identify WHEP endpoints by examining the <tt>Content-Type</tt> header in the response.</t>
        <t>The HEAD response <bcp14>MUST</bcp14> include the same headers that would be returned in response to a GET request, including the <tt>Content-Type</tt> header, but <bcp14>MUST NOT</bcp14> include a message body as per <xref section="9.3.2" sectionFormat="of" target="RFC9110"/>.</t>
        <t>Example:
~~~~~
HEAD /whep/endpoint HTTP/1.1
Host: whep.example.com</t>
        <t>HTTP/1.1 200 OK
Content-Type: application/sdp
Content-Length: 0
~~~~~</t>
        <t>When a player recognizes a URL as a WHEP endpoint by receiving <tt>Content-Type: application/sdp</tt> in response to a HEAD request, it <bcp14>SHOULD</bcp14> automatically configure itself to use WHEP protocol handling without requiring additional user configuration.</t>
      </section>
      <section anchor="playback-session-setup">
        <name>Playback Session Set Up</name>
        <t>In order to set up a streaming session, the WHEP player <bcp14>MUST</bcp14> generate an SDP offer according to the JSEP rules for an initial offer as in <xref section="5.2.1" sectionFormat="of" target="RFC9429"/> and perform an HTTP POST request as per <xref section="9.3.3" sectionFormat="of" target="RFC9110"/> to the configured WHEP endpoint URL.</t>
        <t>The HTTP POST request <bcp14>MUST</bcp14> have a content type of "application/sdp" and contain the SDP offer as the body. Upon receiving the HTTP POST request, the WHEP endpoint can choose to either accept the client's offer or reject it in favor of sending its own offer.</t>
        <section anchor="server-accepts-client-offer">
          <name>Server Accepts Client Offer</name>
          <t>If the WHEP endpoint chooses to accept the client's SDP offer, it <bcp14>MUST</bcp14> generate an SDP answer according to the JSEP rules for an initial answer as in <xref section="5.3.1" sectionFormat="of" target="RFC9429"/> and return a "201 Created" response with a content type of "application/sdp", the SDP answer as the body, and a Location header field pointing to the newly created WHEP session.</t>
          <t>The WHEP endpoint <bcp14>MAY</bcp14> partially accept the client's offer by accepting some m-lines while rejecting others, as specified in <xref target="partial-media-acceptance"/>. This allows the WHEP endpoint to accept audio and video m-lines while rejecting data channel m-lines, for example.</t>
        </section>
        <section anchor="server-sends-counter-offer">
          <name>Server Sends Counter-offer</name>
          <t>If the WHEP endpoint chooses to reject the client's SDP offer, it <bcp14>MUST</bcp14> generate its own SDP offer according to the JSEP rules for an initial offer as in <xref section="5.2.1" sectionFormat="of" target="RFC9429"/> and return a "406 Not Acceptable" response with a content type of "application/sdp", the SDP counter-offer as the body, and a Location header field pointing to the WHEP session resource that will be created upon completion of the offer/answer exchange.</t>
          <t>The WHEP endpoint <bcp14>MAY</bcp14> include a "valid-until" parameter in the Content-Type header to indicate how long the counter-offer remains valid. If no "valid-until" parameter is provided, the counter-offer remains valid for 30 seconds from the time the response was sent. The "valid-until" parameter value <bcp14>MUST</bcp14> be an HTTP-date as defined in <xref section="5.6.7" sectionFormat="of" target="RFC9110"/>.</t>
          <t>When the WHEP player receives a counter-offer from the WHEP endpoint, it <bcp14>MUST</bcp14> generate an SDP answer according to the JSEP rules for an initial answer as in <xref section="5.3.1" sectionFormat="of" target="RFC9429"/>. The WHEP player <bcp14>MAY</bcp14> partially accept the server's counter-offer by accepting some m-lines while rejecting others, as specified in <xref target="partial-media-acceptance"/>. To send the SDP answer, the WHEP player <bcp14>MUST</bcp14> perform an HTTP PATCH request as per <xref target="RFC5789"/> to the WHEP session URL with content type of "application/sdp" and the SDP answer as the body. The WHEP endpoint <bcp14>MUST</bcp14> return a "204 No Content" response. If the SDP is malformed or does not conform to the JSEP rules for an initial answer, the WHEP endpoint <bcp14>MUST</bcp14> reject the HTTP PATCH request with an appropriate 4XX error response.</t>
        </section>
        <section anchor="determining-server-response-type">
          <name>Determining Server Response Type</name>
          <t>WHEP players can determine the WHEP endpoint's response type by examining the HTTP status code:</t>
          <ul spacing="normal">
            <li>
              <t><strong>"201 Created"</strong>: The WHEP endpoint has accepted the client's offer and responded with an SDP answer. The WHEP session has been created and is ready for media transmission.</t>
            </li>
            <li>
              <t><strong>"406 Not Acceptable"</strong>: The WHEP endpoint has rejected the client's offer and responded with an SDP counter-offer. The client <bcp14>MUST</bcp14> send an HTTP PATCH request to the WHEP session URL with an SDP answer to complete the session establishment.</t>
            </li>
          </ul>
          <t>WHEP players <bcp14>MUST</bcp14> interpret a "406 Not Acceptable" response as a server-sent counter-offer only if the response includes a "Content-Type" of "application/sdp" and a syntactically valid SDP offer. Any "406 Not Acceptable" response that does not meet these conditions <bcp14>MUST</bcp14> be handled according to generic HTTP semantics and <bcp14>MUST NOT</bcp14> be interpreted as a counter-offer.</t>
        </section>
        <section anchor="partial-media-acceptance">
          <name>Partial Media Acceptance</name>
          <t>WHEP allows for partial acceptance of media streams, where some m-lines in an SDP offer may be accepted while others are rejected. This enables scenarios where, for example, audio and video m-lines are accepted but data channel m-lines are rejected.</t>
          <t>Partial acceptance also enables accepting only audio or only video, allowing WHEP players to optimize for their specific requirements. For instance, an audio-only WHEP player can reject video m-lines to avoid receiving unnecessary video data, or a video-only player can reject audio m-lines when audio is not needed. This optimization reduces bandwidth consumption and resource utilization when full media reception is not required.</t>
          <t>When generating an SDP answer, either the WHEP endpoint (when accepting a client offer) or the WHEP player (when answering a server counter-offer) <bcp14>MAY</bcp14> reject individual m-lines by setting the port number to 0 in the corresponding m-line of the SDP answer, as specified in <xref section="5.3.1" sectionFormat="of" target="RFC9429"/>. Rejected m-lines <bcp14>MUST</bcp14> have their port set to 0 and <bcp14>SHALL NOT</bcp14> include any codec or format information.</t>
          <t>Partial acceptance applies to both directions of the offer/answer exchange:</t>
          <ul spacing="normal">
            <li>
              <t><strong>Server accepting client offer</strong>: When the WHEP endpoint returns a "201 Created" response with an SDP answer, it <bcp14>MAY</bcp14> reject individual m-lines from the client's offer by setting their port to 0.</t>
            </li>
            <li>
              <t><strong>Client answering server counter-offer</strong>: When the WHEP player sends an SDP answer via HTTP PATCH in response to a server counter-offer, it <bcp14>MAY</bcp14> reject individual m-lines from the server's counter-offer by setting their port to 0.</t>
            </li>
          </ul>
          <t>The MediaStream constraint in <xref target="single-mediastream"/> requires that at least one MediaStreamTrack of any media kind is accepted. Therefore, at least one audio or video m-line <bcp14>MUST</bcp14> be accepted in the final negotiated session. Data channel m-lines (application m-lines) <bcp14>MAY</bcp14> be rejected without affecting the session establishment.</t>
        </section>
        <section anchor="error-conditions">
          <name>Error Conditions</name>
          <t>If the HTTP POST to the WHEP endpoint has a "Content-Type" different than "application/sdp", the WHEP endpoint <bcp14>MUST</bcp14> reject the request with "415 Unsupported Media Type" and <bcp14>MUST NOT</bcp14> include an SDP in the response. If the "Content-Type" is "application/sdp" but the body is syntactically invalid or does not conform to the JSEP rules for an initial offer, the WHEP endpoint <bcp14>MUST</bcp14> reject the request with an appropriate 4XX error response. A "406 Not Acceptable" response is reserved for the server-sent counter-offer mechanism and therefore <bcp14>MUST</bcp14> include a "Content-Type" of "application/sdp" and a syntactically valid SDP offer. A "406 Not Acceptable" response that does not meet these conditions <bcp14>MUST</bcp14> be treated as an error and <bcp14>MUST NOT</bcp14> be interpreted as a counter-offer.</t>
        </section>
        <section anchor="media-direction-attributes">
          <name>Media Direction Attributes</name>
          <t>As WHEP only supports the playback use case with unidirectional media:</t>
          <ul spacing="normal">
            <li>
              <t>When a WHEP player sends an SDP offer, it <bcp14>SHOULD</bcp14> use "recvonly" attribute but <bcp14>MAY</bcp14> use the "sendrecv" attribute instead. The "inactive" and "sendonly" attributes <bcp14>MUST NOT</bcp14> be used.</t>
            </li>
            <li>
              <t>When a WHEP endpoint sends an SDP answer (accepting client offer), it <bcp14>MUST</bcp14> use "sendonly" attribute in the SDP answer.</t>
            </li>
            <li>
              <t>When a WHEP endpoint sends an SDP counter-offer, it <bcp14>SHOULD</bcp14> use "sendonly" attribute but <bcp14>MAY</bcp14> use the "sendrecv" attribute instead. The "inactive" and "recvonly" attributes <bcp14>MUST NOT</bcp14> be used.</t>
            </li>
            <li>
              <t>When a WHEP player sends an SDP answer (responding to server counter-offer), it <bcp14>MUST</bcp14> use "recvonly" attribute in the SDP answer.</t>
            </li>
          </ul>
        </section>
        <section anchor="codec-recommendations">
          <name>Codec Recommendations</name>
          <t>WHEP players <bcp14>SHOULD</bcp14> include as many supported codecs as possible in their SDP offers and answers to maximize compatibility and enable dynamic streaming scenarios. This applies whether the WHEP player is sending the initial offer or responding to a server counter-offer with an answer.</t>
          <t>Including a comprehensive list of supported codecs enables several important use cases:</t>
          <ul spacing="normal">
            <li>
              <t><strong>Dynamic source switching</strong>: A WHEP endpoint may need to change which camera or media source a stream is connected to, potentially requiring different codecs for optimal quality or performance.</t>
            </li>
            <li>
              <t><strong>Adaptive streaming</strong>: The WHEP endpoint may switch between different codec configurations based on network conditions, viewer capabilities, or content characteristics.</t>
            </li>
            <li>
              <t><strong>Failover scenarios</strong>: If the primary codec encounters issues, having alternative codecs available allows seamless fallback without requiring renegotiation.</t>
            </li>
            <li>
              <t><strong>Multi-resolution support</strong>: Different codecs may be optimal for different resolutions or bitrates that the WHEP endpoint may need to provide.</t>
            </li>
          </ul>
          <t>WHEP players that restrict their codec offerings may prevent these advanced streaming scenarios and limit the WHEP endpoint's ability to provide optimal streaming experiences.</t>
        </section>
        <section anchor="examples">
          <name>Examples</name>
          <t>Following <xref target="sdp-exchange-example-server-accepts"/> is an example where the WHEP endpoint accepts the client's offer.</t>
          <figure anchor="sdp-exchange-example-server-accepts">
            <name>Example where the WHEP Endpoint accepts client offer</name>
            <artwork><![CDATA[
POST /whep/endpoint HTTP/1.1
Host: whep.example.com
Content-Type: application/sdp
Content-Length: 1326

v=0
o=- 5228595038118931041 2 IN IP4 127.0.0.1
s=-
t=0 0
a=group:BUNDLE 0 1
a=extmap-allow-mixed
a=ice-options:trickle ice2
m=audio 9 UDP/TLS/RTP/SAVPF 111
c=IN IP4 0.0.0.0
a=rtcp:9 IN IP4 0.0.0.0
a=ice-ufrag:zjkk
a=ice-pwd:bP+XJMM09aR8AiX1jdukzR6Y
a=fingerprint:sha-256 DA:7B:57:DC:28:CE:04:4F:31:79:85:C4:31:67:EB:27:58:29:ED:77:2A:0D:24:AE:ED:AD:30:BC:BD:F1:9C:02
a=setup:actpass
a=mid:0
a=extmap:4 urn:ietf:params:rtp-hdrext:sdes:mid
a=recvonly
a=rtcp-mux
a=rtcp-mux-only
a=rtpmap:111 opus/48000/2
a=fmtp:111 minptime=10;useinbandfec=1
m=video 0 UDP/TLS/RTP/SAVPF 96 97
c=IN IP4 0.0.0.0
a=rtcp:9 IN IP4 0.0.0.0
a=ice-ufrag:zjkk
a=ice-pwd:bP+XJMM09aR8AiX1jdukzR6Y
a=fingerprint:sha-256 DA:7B:57:DC:28:CE:04:4F:31:79:85:C4:31:67:EB:27:58:29:ED:77:2A:0D:24:AE:ED:AD:30:BC:BD:F1:9C:02
a=setup:actpass
a=mid:1
a=bundle-only
a=extmap:4 urn:ietf:params:rtp-hdrext:sdes:mid
a=extmap:10 urn:ietf:params:rtp-hdrext:sdes:rtp-stream-id
a=extmap:11 urn:ietf:params:rtp-hdrext:sdes:repaired-rtp-stream-id
a=recvonly
a=rtcp-mux
a=rtcp-mux-only
a=rtcp-rsize
a=rtpmap:96 VP8/90000
a=rtcp-fb:96 ccm fir
a=rtcp-fb:96 nack
a=rtcp-fb:96 nack pli
a=rtpmap:97 rtx/90000
a=fmtp:97 apt=96

HTTP/1.1 201 Created
ETag: "xyzzy"
Content-Type: application/sdp
Content-Length: 1400
Location: https://whep.example.org/sessions/id

v=0
o=- 1657793490019 1 IN IP4 127.0.0.1
s=-
t=0 0
a=group:BUNDLE 0 1
a=extmap-allow-mixed
a=ice-lite
a=ice-options:trickle ice2
m=audio 9 UDP/TLS/RTP/SAVPF 111
c=IN IP4 0.0.0.0
a=rtcp:9 IN IP4 0.0.0.0
a=ice-ufrag:526be20a538ee422
a=ice-pwd:2e13dde17c1cb009202f627fab90cbec358d766d049c9697
a=fingerprint:sha-256 F7:EB:F3:3E:AC:D2:EA:A7:C1:EC:79:D9:B3:8A:35:DA:70:86:4F:46:D9:2D:CC:D0:BC:81:9F:67:EF:34:2E:BD
a=candidate:1 1 UDP 2130706431 198.51.100.1 39132 typ host
a=setup:passive
a=mid:0
a=bundle-only
a=extmap:4 urn:ietf:params:rtp-hdrext:sdes:mid
a=sendonly
a=rtcp-mux
a=rtcp-mux-only
a=rtcp-rsize
a=rtpmap:111 opus/48000/2
a=fmtp:111 minptime=10;useinbandfec=1
a=msid:- d46fb922-d52a-4e9c-aa87-444eadc1521b
m=video 0 UDP/TLS/RTP/SAVPF 96 97
c=IN IP4 0.0.0.0
a=rtcp:9 IN IP4 0.0.0.0
a=ice-ufrag:526be20a538ee422
a=ice-pwd:2e13dde17c1cb009202f627fab90cbec358d766d049c9697
a=fingerprint:sha-256 F7:EB:F3:3E:AC:D2:EA:A7:C1:EC:79:D9:B3:8A:35:DA:70:86:4F:46:D9:2D:CC:D0:BC:81:9F:67:EF:34:2E:BD
a=candidate:1 1 UDP 2130706431 198.51.100.1 39132 typ host
a=setup:passive
a=mid:1
a=bundle-only
a=extmap:4 urn:ietf:params:rtp-hdrext:sdes:mid
a=extmap:10 urn:ietf:params:rtp-hdrext:sdes:rtp-stream-id
a=extmap:11 urn:ietf:params:rtp-hdrext:sdes:repaired-rtp-stream-id
a=sendonly
a=rtcp-mux
a=rtcp-mux-only
a=rtcp-rsize
a=rtpmap:96 VP8/90000
a=rtcp-fb:96 ccm fir
a=rtcp-fb:96 nack
a=rtcp-fb:96 nack pli
a=rtpmap:97 rtx/90000
a=fmtp:97 apt=96
a=msid:- d46fb922-d52a-4e9c-aa87-444eadc1521b
]]></artwork>
          </figure>
          <t>Following <xref target="sdp-exchange-example-server-counter-offer"/> is an example where the WHEP endpoint sends a counter-offer.</t>
          <figure anchor="sdp-exchange-example-server-counter-offer">
            <name>Example where the WHEP Endpoint sends counter-offer</name>
            <artwork><![CDATA[
POST /channel/teeny-tasty-crayon HTTP/1.1
Host: whep.example.com
Content-Type: application/sdp
Content-Length: 1326

v=0
o=- 5228595038118931041 2 IN IP4 127.0.0.1
s=-
t=0 0
a=group:BUNDLE 0 1
a=extmap-allow-mixed
a=ice-options:trickle ice2
m=audio 9 UDP/TLS/RTP/SAVPF 111
c=IN IP4 0.0.0.0
a=rtcp:9 IN IP4 0.0.0.0
a=ice-ufrag:zjkk
a=ice-pwd:bP+XJMM09aR8AiX1jdukzR6Y
a=fingerprint:sha-256 DA:7B:57:DC:28:CE:04:4F:31:79:85:C4:31:67:EB:27:58:29:ED:77:2A:0D:24:AE:ED:AD:30:BC:BD:F1:9C:02
a=setup:actpass
a=mid:0
a=extmap:4 urn:ietf:params:rtp-hdrext:sdes:mid
a=recvonly
a=rtcp-mux
a=rtcp-mux-only
a=rtpmap:111 opus/48000/2
a=fmtp:111 minptime=10;useinbandfec=1
m=video 0 UDP/TLS/RTP/SAVPF 96 97
c=IN IP4 0.0.0.0
a=rtcp:9 IN IP4 0.0.0.0
a=ice-ufrag:zjkk
a=ice-pwd:bP+XJMM09aR8AiX1jdukzR6Y
a=fingerprint:sha-256 DA:7B:57:DC:28:CE:04:4F:31:79:85:C4:31:67:EB:27:58:29:ED:77:2A:0D:24:AE:ED:AD:30:BC:BD:F1:9C:02
a=setup:actpass
a=mid:1
a=bundle-only
a=extmap:4 urn:ietf:params:rtp-hdrext:sdes:mid
a=extmap:10 urn:ietf:params:rtp-hdrext:sdes:rtp-stream-id
a=extmap:11 urn:ietf:params:rtp-hdrext:sdes:repaired-rtp-stream-id
a=recvonly
a=rtcp-mux
a=rtcp-mux-only
a=rtcp-rsize
a=rtpmap:96 VP8/90000
a=rtcp-fb:96 ccm fir
a=rtcp-fb:96 nack
a=rtcp-fb:96 nack pli
a=rtpmap:97 rtx/90000
a=fmtp:97 apt=96

HTTP/1.1 406 Not Acceptable
Content-Type: application/sdp; valid-until="Wed, 09 Oct 2024 10:00:00 GMT"
Content-Length: 3552
Location: https://whep.example.com/channel/teeny-tasty-crayon/3de3c94a-fc0f-4659-bcaf-8bdebf718457

v=0
o=- 2438602337097565327 2 IN IP4 127.0.0.1
s=-
t=0 0
a=msid-semantic: WMS feedbackvideomslabel e6ddf4a9-b5ed-4e87-9ae3-ef126a9164d6
a=group:BUNDLE 0 1 2 3
m=video 9 RTP/SAVPF 100 96
c=IN IP4 0.0.0.0
a=rtpmap:100 VP8/90000
a=rtpmap:96 rtx/90000
a=fmtp:96 apt=100
a=rtcp:9 IN IP4 0.0.0.0
a=extmap:3 http://www.webrtc.org/experiments/rtp-hdrext/abs-send-time
a=extmap:4 urn:ietf:params:rtp-hdrext:sdes:rtp-stream-id
a=setup:active
a=mid:0
a=sendonly
a=ice-ufrag:CiYfXaM3jHrmpF
a=ice-pwd:VQFGPhTQj/BnaJ/tkec9m1Hi
a=fingerprint:sha-256 4C:C3:25:E0:29:75:AF:01:53:94:CD:C4:6F:5F:15:5E:E3:1A:10:AE:8C:96:07:5A:18:AC:49:5F:55:68:6C:C5
a=candidate:676201573392 1 udp 142541055 172.234.108.130 10000 typ host generation 0 network-id 1
a=ssrc:3592962548 cname:feedbackvideocname
a=ssrc:3592962548 label:feedbackvideolabel
a=ssrc:3592962548 mslabel:feedbackvideomslabel
a=ssrc:3592962548 msid:feedbackvideomslabel feedbackvideolabel
a=rtcp-mux
m=application 9 UDP/DTLS/SCTP webrtc-datachannel
c=IN IP4 0.0.0.0
a=rtcp:9 IN IP4 0.0.0.0
a=setup:active
a=mid:1
a=sendonly
a=ice-ufrag:CiYfXaM3jHrmpF
a=ice-pwd:VQFGPhTQj/BnaJ/tkec9m1Hi
a=fingerprint:sha-256 4C:C3:25:E0:29:75:AF:01:53:94:CD:C4:6F:5F:15:5E:E3:1A:10:AE:8C:96:07:5A:18:AC:49:5F:55:68:6C:C5
a=candidate:676201573392 1 udp 142541055 172.234.108.130 10000 typ host generation 0 network-id 1
a=rtcp-mux
a=sctpmap:5000 webrtc-datachannel 262144
m=audio 9 RTP/SAVPF 111
c=IN IP4 0.0.0.0
a=rtpmap:111 opus/48000/2
a=fmtp:111 minptime=10;useinbandfec=1
a=rtcp:9 IN IP4 0.0.0.0
a=extmap:1 urn:ietf:params:rtp-hdrext:ssrc-audio-level
a=extmap:3 http://www.webrtc.org/experiments/rtp-hdrext/abs-send-time
a=extmap:8 c9:params:rtp-hdrext:info
a=setup:active
a=mid:2
a=sendonly
a=ice-ufrag:CiYfXaM3jHrmpF
a=ice-pwd:VQFGPhTQj/BnaJ/tkec9m1Hi
a=fingerprint:sha-256 4C:C3:25:E0:29:75:AF:01:53:94:CD:C4:6F:5F:15:5E:E3:1A:10:AE:8C:96:07:5A:18:AC:49:5F:55:68:6C:C5
a=candidate:676201573392 1 udp 142541055 172.234.108.130 10000 typ host generation 0 network-id 1
a=ssrc:2338673210 cname:0p6mZhWJw+/818iW
a=ssrc:2338673210 label:2fcad988-9bc2-4705-b408-9aee41bc3d71
a=ssrc:2338673210 mslabel:e6ddf4a9-b5ed-4e87-9ae3-ef126a9164d6
a=ssrc:2338673210 msid:e6ddf4a9-b5ed-4e87-9ae3-ef126a9164d6 2fcad988-9bc2-4705-b408-9aee41bc3d71
a=rtcp-mux
m=video 9 RTP/SAVPF 100 96
c=IN IP4 0.0.0.0
a=rtpmap:100 VP8/90000
a=rtpmap:96 rtx/90000
a=fmtp:96 apt=100
a=rtcp:9 IN IP4 0.0.0.0
a=rtcp-fb:100 goog-remb
a=rtcp-fb:100 nack
a=rtcp-fb:100 nack pli
a=extmap:3 http://www.webrtc.org/experiments/rtp-hdrext/abs-send-time
a=extmap:4 urn:ietf:params:rtp-hdrext:sdes:rtp-stream-id
a=setup:active
a=mid:3
a=sendonly
a=ice-ufrag:CiYfXaM3jHrmpF
a=ice-pwd:VQFGPhTQj/BnaJ/tkec9m1Hi
a=fingerprint:sha-256 4C:C3:25:E0:29:75:AF:01:53:94:CD:C4:6F:5F:15:5E:E3:1A:10:AE:8C:96:07:5A:18:AC:49:5F:55:68:6C:C5
a=candidate:676201573392 1 udp 142541055 172.234.108.130 10000 typ host generation 0 network-id 1
a=ssrc:755359452 cname:0p6mZhWJw+/818iW
a=ssrc:755359452 label:d6bca5d1-b69d-4d9d-8b5d-9117707cdb81
a=ssrc:755359452 mslabel:e6ddf4a9-b5ed-4e87-9ae3-ef126a9164d6
a=ssrc:755359452 msid:e6ddf4a9-b5ed-4e87-9ae3-ef126a9164d6 d6bca5d1-b69d-4d9d-8b5d-9117707cdb81
a=ssrc:280880788 cname:0p6mZhWJw+/818iW
a=ssrc:280880788 label:d6bca5d1-b69d-4d9d-8b5d-9117707cdb81
a=ssrc:280880788 mslabel:e6ddf4a9-b5ed-4e87-9ae3-ef126a9164d6
a=ssrc:280880788 msid:e6ddf4a9-b5ed-4e87-9ae3-ef126a9164d6 d6bca5d1-b69d-4d9d-8b5d-9117707cdb81
a=ssrc-group:FID 755359452 280880788
a=rtcp-mux

PATCH /channel/teeny-tasty-crayon/3de3c94a-fc0f-4659-bcaf-8bdebf718457 HTTP/1.1
Host: whep.example.com
Content-Type: application/sdp
Content-Length: 2410

v=0
o=- 4541478638207698795 2 IN IP4 127.0.0.1
s=-
t=0 0
a=group:BUNDLE 0 1 2 3
a=msid-semantic: WMS
m=video 56464 RTP/SAVPF 100 96
c=IN IP4 192.168.167.137
a=rtcp:9 IN IP4 0.0.0.0
a=candidate:170904481 1 udp 2122129151 192.168.167.137 56464 typ host generation 0 network-id 1 network-cost 10
a=candidate:3499970512 1 udp 2122265343 fd2e:9c8b:abe4:2:838:1bbe:9d48:3ec 53930 typ host generation 0 network-id 3 network-cost 10
a=candidate:3061500384 1 udp 2122197247 2001:9b1:28fe:9400:88fb:57a4:5888:153b 62309 typ host generation 0 network-id 2 network-cost 10
a=ice-ufrag:37nK
a=ice-pwd:NZH/oQX6FHAl+EmWvpgoPZzC
a=ice-options:trickle
a=fingerprint:sha-256 00:91:87:75:0D:C7:F6:D4:65:4D:9F:1D:EF:52:A1:60:02:8D:E7:67:73:68:B9:78:12:D9:FD:3E:09:F8:BF:3D
a=setup:passive
a=mid:0
a=extmap:3 http://www.webrtc.org/experiments/rtp-hdrext/abs-send-time
a=extmap:4 urn:ietf:params:rtp-hdrext:sdes:rtp-stream-id
a=recvonly
a=rtcp-mux
a=rtpmap:100 VP8/90000
a=rtpmap:96 rtx/90000
a=fmtp:96 apt=100
m=application 9 UDP/DTLS/SCTP webrtc-datachannel
c=IN IP4 0.0.0.0
a=ice-ufrag:37nK
a=ice-pwd:NZH/oQX6FHAl+EmWvpgoPZzC
a=ice-options:trickle
a=fingerprint:sha-256 00:91:87:75:0D:C7:F6:D4:65:4D:9F:1D:EF:52:A1:60:02:8D:E7:67:73:68:B9:78:12:D9:FD:3E:09:F8:BF:3D
a=setup:passive
a=mid:1
a=sctp-port:5000
m=audio 9 RTP/SAVPF 111
c=IN IP4 0.0.0.0
a=rtcp:9 IN IP4 0.0.0.0
a=ice-ufrag:37nK
a=ice-pwd:NZH/oQX6FHAl+EmWvpgoPZzC
a=ice-options:trickle
a=fingerprint:sha-256 00:91:87:75:0D:C7:F6:D4:65:4D:9F:1D:EF:52:A1:60:02:8D:E7:67:73:68:B9:78:12:D9:FD:3E:09:F8:BF:3D
a=setup:passive
a=mid:2
a=extmap:1 urn:ietf:params:rtp-hdrext:ssrc-audio-level
a=extmap:3 http://www.webrtc.org/experiments/rtp-hdrext/abs-send-time
a=recvonly
a=rtcp-mux
a=rtpmap:111 opus/48000/2
a=fmtp:111 minptime=10;useinbandfec=1
m=video 9 RTP/SAVPF 100 96
c=IN IP4 0.0.0.0
a=rtcp:9 IN IP4 0.0.0.0
a=ice-ufrag:37nK
a=ice-pwd:NZH/oQX6FHAl+EmWvpgoPZzC
a=ice-options:trickle
a=fingerprint:sha-256 00:91:87:75:0D:C7:F6:D4:65:4D:9F:1D:EF:52:A1:60:02:8D:E7:67:73:68:B9:78:12:D9:FD:3E:09:F8:BF:3D
a=setup:passive
a=mid:3
a=extmap:3 http://www.webrtc.org/experiments/rtp-hdrext/abs-send-time
a=extmap:4 urn:ietf:params:rtp-hdrext:sdes:rtp-stream-id
a=recvonly
a=rtcp-mux
a=rtpmap:100 VP8/90000
a=rtcp-fb:100 goog-remb
a=rtcp-fb:100 nack
a=rtcp-fb:100 nack pli
a=rtpmap:96 rtx/90000
a=fmtp:96 apt=100

HTTP/1.1 204 No Content
]]></artwork>
          </figure>
        </section>
        <section anchor="session-management">
          <name>Session Management</name>
          <t>The WHEP endpoint COULD require a live publishing to be happening in order to allow a WHEP players to start viewing a stream.
In that case, the WHEP endpoint <bcp14>SHALL</bcp14> return a "409 Conflict" response to the POST request issued by the WHEP player with a "Retry-After" header indicating the number of seconds before sending a new request.
WHEP players <bcp14>MAY</bcp14> periodically try to connect to the WHEP session with exponential backoff period with an initial value of the "Retry-After" header value in the "409 Conflict" response.</t>
          <t>Once a session is setup, consent freshness as per <xref target="RFC7675"/> <bcp14>SHALL</bcp14> be used to detect non-graceful disconnection by full ICE implementations and DTLS teardown for session termination by either side.</t>
        </section>
      </section>
      <section anchor="playback-session-termination">
        <name>Playback Session Termination</name>
        <t>To explicitly terminate a WHEP session, the WHEP player <bcp14>MUST</bcp14> perform an HTTP DELETE request to the WHEP session URL returned in the Location header field of the initial HTTP POST. Upon receiving the HTTP DELETE request, the WHEP session will be removed and the resources freed on the media server, terminating the ICE and DTLS sessions.</t>
        <t>A media server terminating a session <bcp14>MUST</bcp14> follow the procedures in <xref section="5.2" sectionFormat="of" target="RFC7675"/>  for immediate revocation of consent.</t>
        <t>The WHEP endpoints <bcp14>MUST</bcp14> support OPTIONS requests for Cross-Origin Resource Sharing (CORS) as defined in <xref target="FETCH"/>. The "200 OK" response to any OPTIONS request <bcp14>SHOULD</bcp14> include an "Accept-Post" header with a media type value of "application/sdp" as per <xref target="W3C.REC-ldp-20150226"/>.</t>
      </section>
      <section anchor="ice-support">
        <name>ICE Support</name>
        <t>ICE <xref target="RFC8445"/> is a protocol that addresses the complexities of NAT traversal commonly encountered in Internet communication. NATs hinder direct communication between devices on different local networks, posing challenges for real-time applications. ICE facilitates seamless connectivity by employing techniques to discover and negotiate efficient communication paths.</t>
        <t>Trickle ICE <xref target="RFC8838"/> optimizes the connectivity process by incrementally sharing potential communication paths, reducing latency, and facilitating quicker establishment.</t>
        <t>ICE Restarts are crucial for maintaining connectivity in dynamic network conditions or disruptions, allowing devices to re-establish communication paths without complete renegotiation. This ensures minimal latency and reliable real-time communication.</t>
        <t>Trickle ICE and ICE restart support are <bcp14>RECOMMENDED</bcp14> for both WHEP sessions and clients.</t>
        <section anchor="http-patch-usage">
          <name>HTTP PATCH Request Usage</name>
          <t>The WHEP player <bcp14>MAY</bcp14> perform trickle ICE or ICE restarts by sending an HTTP PATCH request as per <xref target="RFC5789"/> to the WHEP session URL, with a body containing an SDP fragment with media type "application/trickle-ice-sdpfrag" as specified in <xref target="RFC8840"/> carrying the relevant ICE information. If the HTTP PATCH to the WHEP session has a "Content-Type" different than "application/trickle-ice-sdpfrag" (for ICE operations defined in this section) or "application/sdp" (for the SDP answer to a server counter-offer as defined in <xref target="playback-session-setup"/>), the WHEP session <bcp14>MUST</bcp14> reject the request with "415 Unsupported Media Type". If the payload is syntactically invalid or does not conform to the respective format, the WHEP session <bcp14>MUST</bcp14> reject the request with an appropriate 4XX error response.</t>
          <t>Use of "application/sdp" in an HTTP PATCH request is only valid when replying with an SDP answer to a server-sent SDP counter-offer as specified in <xref target="playback-session-setup"/> and only until the offer/answer exchange completes. If a WHEP session has already completed the SDP offer/answer exchange, or is otherwise not expecting an SDP via PATCH, the WHEP session <bcp14>MUST</bcp14> reject an "application/sdp" PATCH with "422 Unprocessable Content".</t>
          <t>If the WHEP session supports either Trickle ICE or ICE restarts, but not both, it <bcp14>MUST</bcp14> return a "422 Unprocessable Content" error response for the HTTP PATCH requests that are not supported as per <xref section="15.5.21" sectionFormat="of" target="RFC9110"/>. For avoidance of doubt, "422 Unprocessable Content" <bcp14>MAY</bcp14> also be used when the "Content-Type" is acceptable but the semantics are not supported in the current state (e.g., an SDP received via PATCH outside the server-sent counter-offer flow).</t>
          <t>The WHEP player <bcp14>MAY</bcp14> send overlapping HTTP PATCH requests to one WHEP session. Consequently, as those HTTP PATCH requests may be received out-of-order by the WHEP session, if WHEP session supports ICE restart, it <bcp14>MUST</bcp14> generate a unique strong entity-tag identifying the ICE session as per <xref section="8.8.3" sectionFormat="of" target="RFC9110"/>, being <bcp14>OPTIONAL</bcp14> otherwise. The initial value of the entity-tag identifying the initial ICE session <bcp14>MUST</bcp14> be returned in an ETag header field in the "201 Created" response to the initial POST request to the WHEP endpoint.</t>
          <t>WHEP players <bcp14>SHOULD NOT</bcp14> use entity-tag validation when matching a specific ICE session is not required, such as for example when initiating a DELETE request to terminate a session. WHEP sessions <bcp14>MUST</bcp14> ignore any entity-tag value sent by the WHEP player when ICE session matching is not required, as in the HTTP DELETE request.</t>
          <t>Missing or outdated ETags in the PATCH requests from WHEP players  will be answered by WHEP sessions as per <xref section="13.1.1" sectionFormat="of" target="RFC9110"/> and <xref section="3" sectionFormat="of" target="RFC6585"/>, with a "428 Precondition Required" response for a missing entity-tag, and a "412 Precondition Failed" response for a non-matching entity-tag.</t>
        </section>
        <section anchor="trickle-ice">
          <name>Trickle ICE</name>
          <t>Depending on the Trickle ICE support on the WHEP player, the initial offer by the WHEP player <bcp14>MAY</bcp14> be sent after the full ICE gathering is complete with the full list of ICE candidates, it <bcp14>MAY</bcp14> only contain local candidates as per <xref target="RFC8445"/> or even an empty list of candidates as per <xref target="RFC8863"/>. For the purpose of reducing setup times, when using Trickle ICE the WHEP player <bcp14>SHOULD</bcp14> send the SDP offer (containing either locally gathered ICE candidates or an empty list of candidates) as soon as possible.</t>
          <t>In order to simplify the protocol, the WHEP session cannot signal additional ICE candidates to the WHEP player after the SDP answer has been sent. The WHEP endpoint <bcp14>SHALL</bcp14> gather all the ICE candidates for the media server before responding to the client request and the SDP answer <bcp14>SHALL</bcp14> contain the full list of ICE candidates of the media server.</t>
          <t>As the WHEP player needs to know the WHEP session URL associated with the ICE session in order to send a PATCH request containing new ICE candidates, it <bcp14>MUST</bcp14> wait and buffer any gathered candidates until the "201 Created" HTTP response to the initial POST request is received.
In order to lower the HTTP traffic and processing time required the WHEP player <bcp14>SHOULD</bcp14> send a single aggregated HTTP PATCH request with all the buffered ICE candidates once the response is received.
Additionally, if ICE restarts are supported by the WHEP session, the WHEP player needs to know the entity-tag associated with the ICE session in order to send a PATCH request containing new ICE candidates, so it <bcp14>MUST</bcp14> also wait and buffer any gathered candidates until it receives the HTTP response with the new entity-tag value to the last PATCH request performing an ICE restart.</t>
          <t>WHEP players generating the HTTP PATCH body with the SDP fragment and its subsequent processing by WHEP sessions <bcp14>MUST</bcp14> follow to the guidelines defined in <xref section="4.4" sectionFormat="of" target="RFC8840"/> with the following considerations:</t>
          <ul spacing="normal">
            <li>
              <t>As per <xref target="RFC9429"/>, only m-sections not marked as bundle-only can gather ICE candidates, so given that the "max-bundle" policy is being used, the SDP fragment will contain only the offerer-tagged m-line of the bundle group.</t>
            </li>
            <li>
              <t>The WHEP player <bcp14>MAY</bcp14> exclude ICE candidates from the HTTP PATCH body if they have already been confirmed by the WHEP session with a successful HTTP response to a previous HTTP PATCH request.</t>
            </li>
          </ul>
          <t>WHEP sessions and players that support Trickle ICE <bcp14>MUST</bcp14> make use of entity-tags and conditional requests as explained in <xref target="http-patch-usage"/>.</t>
          <t>When a WHEP session receives a PATCH request that adds new ICE candidates without performing an ICE restart, it <bcp14>MUST</bcp14> return a "204 No Content" response without a body and <bcp14>MUST NOT</bcp14> include an ETag header in the response. If the WHEP session does not support a candidate transport or is not able to resolve the connection address, it <bcp14>MUST</bcp14> silently discard the candidate and continue processing the rest of the request normally.</t>
          <figure anchor="trickle-ice-example">
            <name>Example of a Trickle ICE request and response</name>
            <artwork><![CDATA[
PATCH /session/id HTTP/1.1
Host: whep.example.com
If-Match: "xyzzy"
Content-Type: application/trickle-ice-sdpfrag
Content-Length: 576

a=group:BUNDLE 0 1
m=audio 9 UDP/TLS/RTP/SAVPF 111
a=mid:0
a=ice-ufrag:EsAw
a=ice-pwd:P2uYro0UCOQ4zxjKXaWCBui1
a=candidate:1387637174 1 udp 2122260223 192.0.2.1 61764 typ host generation 0 ufrag EsAw network-id 1
a=candidate:3471623853 1 udp 2122194687 198.51.100.2 61765 typ host generation 0 ufrag EsAw network-id 2
a=candidate:473322822 1 tcp 1518280447 192.0.2.1 9 typ host tcptype active generation 0 ufrag EsAw network-id 1
a=candidate:2154773085 1 tcp 1518214911 198.51.100.2 9 typ host tcptype active generation 0 ufrag EsAw network-id 2
a=end-of-candidates

HTTP/1.1 204 No Content
]]></artwork>
          </figure>
          <t><xref target="trickle-ice-example"/> shows an example of the Trickle ICE procedure where the WHEP player sends a PATCH request with updated ICE candidate information and receives a successful response from the WHEP session.</t>
        </section>
        <section anchor="ice-restarts">
          <name>ICE Restarts</name>
          <t>As defined in <xref target="RFC8839"/>, when an ICE restart occurs, a new SDP offer/answer exchange is triggered. However, as WHEP does not support renegotiation of non-ICE related SDP information, a WHEP player will not send a new offer when an ICE restart occurs. Instead, the WHEP player and WHEP session will only exchange the relevant ICE information via an HTTP PATCH request as defined in <xref target="http-patch-usage"/> and <bcp14>MUST</bcp14> assume that the previously negotiated non-ICE related SDP information still apply after the ICE restart.</t>
          <t>When performing an ICE restart, the WHEP player <bcp14>MUST</bcp14> include the updated "ice-pwd" and "ice-ufrag" in the SDP fragment of the HTTP PATCH request body as well as the new set of gathered ICE candidates as defined in <xref target="RFC8840"/>.
Similar what is defined in <xref target="trickle-ice"/>, as per <xref target="RFC9429"/> only m-sections not marked as bundle-only can gather ICE candidates, so given that the "max-bundle" policy is being used, the SDP fragment will contain only the offerer-tagged m-line of the bundle group.
A WHEP player sending a PATCH request for performing ICE restart <bcp14>MUST</bcp14> contain an "If-Match" header field with a field-value "*" as per <xref section="13.1.1" sectionFormat="of" target="RFC9110"/>.</t>
          <t><xref target="RFC8840"/> states that an agent <bcp14>MUST</bcp14> discard any received requests containing "ice-pwd" and "ice-ufrag" attributes that do not match those of the current ICE Negotiation Session, however, any WHEP session receiving an updated "ice-pwd" and "ice-ufrag" attributes <bcp14>MUST</bcp14> consider the request as performing an ICE restart instead and, if supported, <bcp14>SHALL</bcp14> return a "200 OK" with an "application/trickle-ice-sdpfrag" body containing the new ICE username fragment and password and a new set of ICE candidates for the WHEP session. Also, the "200 OK" response for a successful ICE restart <bcp14>MUST</bcp14> contain the new entity-tag corresponding to the new ICE session in an ETag response header field and <bcp14>MAY</bcp14> contain a new set of ICE candidates for the media server.</t>
          <t>As defined in <xref section="4.4.1.1.1" sectionFormat="of" target="RFC8839"/> the set of candidates after an ICE restart may include some, none, or all of the previous candidates for that data stream and may include a totally new set of candidates. So after performing a successful ICE restart, both the WHEP player and the WHEP session <bcp14>MUST</bcp14> replace the previous set of remote candidates with the new set exchanged in the HTTP PATCH request and response, discarding any remote ICE candidate not present on the new set. Both the WHEP player and the WHEP session <bcp14>MUST</bcp14> ensure that the HTTP PATCH request and response bodies include the same "ice-options", "ice-pacing", and "ice-lite" attributes as those used in the SDP offer or answer.</t>
          <t>If the ICE restart request cannot be satisfied by the WHEP session, the resource <bcp14>MUST</bcp14> return an appropriate HTTP error code and <bcp14>MUST NOT</bcp14> terminate the session immediately and keep the existing ICE session. The WHEP player <bcp14>MAY</bcp14> retry performing a new ICE restart or terminate the session by issuing an HTTP DELETE request instead. In any case, the session <bcp14>MUST</bcp14> be terminated if the ICE consent expires as a consequence of the failed ICE restart as per <xref section="5.1" sectionFormat="of" target="RFC7675"/>.</t>
          <t>In case of unstable network conditions, the ICE restart HTTP PATCH requests and responses might be received out of order. In order to mitigate this scenario, when the client performs an ICE restart, it <bcp14>MUST</bcp14> discard any previous ICE username and passwords fragments and ignore any further HTTP PATCH response received from a pending HTTP PATCH request. WHEP players <bcp14>MUST</bcp14> apply only the ICE information received in the response to the last sent request. If there is a mismatch between the ICE information at the WHEP player and at the WHEP session (because of an out-of-order request), the STUN requests will contain invalid ICE information and will be dropped by the receiving side. If this situation is detected by the WHEP player, it <bcp14>MUST</bcp14> send a new ICE restart request to the WHEP session.</t>
          <figure anchor="trickle-restart-example">
            <name>Example of an ICE Restart Request and Response</name>
            <artwork><![CDATA[
PATCH /session/id HTTP/1.1
Host: whep.example.com
If-Match: "*"
Content-Type: application/trickle-ice-sdpfrag
Content-Length: 82

a=ice-options:trickle ice2
a=group:BUNDLE 0 1
m=audio 9 UDP/TLS/RTP/SAVPF 111
a=mid:0
a=ice-ufrag:ysXw
a=ice-pwd:vw5LmwG4y/e6dPP/zAP9Gp5k
a=candidate:1387637174 1 udp 2122260223 192.0.2.1 61764 typ host generation 0 ufrag EsAw network-id 1
a=candidate:3471623853 1 udp 2122194687 198.51.100.2 61765 typ host generation 0 ufrag EsAw network-id 2
a=candidate:473322822 1 tcp 1518280447 192.0.2.1 9 typ host tcptype active generation 0 ufrag EsAw network-id 1
a=candidate:2154773085 1 tcp 1518214911 198.51.100.2 9 typ host tcptype active generation 0 ufrag EsAw network-id 2

HTTP/1.1 200 OK
ETag: "abccd"
Content-Type: application/trickle-ice-sdpfrag
Content-Length: 252

a=ice-lite
a=ice-options:trickle ice2
a=group:BUNDLE 0 1
m=audio 9 UDP/TLS/RTP/SAVPF 111
a=mid:0
a=ice-ufrag:289b31b754eaa438
a=ice-pwd:0b66f472495ef0ccac7bda653ab6be49ea13114472a5d10a
a=candidate:1 1 udp 2130706431 198.51.100.1 39132 typ host
a=end-of-candidates
]]></artwork>
          </figure>
          <t><xref target="trickle-restart-example"/> demonstrates a Trickle ICE restart procedure example. The WHEP player sends a PATCH request containing updated ICE information, including a new ufrag and password, along with newly gathered ICE candidates. In response, the WHEP session provides ICE information for the session after the ICE restart, including the updated ufrag and password, as well as the previous ICE candidate.</t>
        </section>
      </section>
      <section anchor="webrtc-constraints">
        <name>WebRTC Constraints</name>
        <t>To simplify the implementation of WHEP in both players and media servers, WHEP introduces specific restrictions on WebRTC usage. The following subsections will explain these restrictions in detail:</t>
        <section anchor="sdp-bundle">
          <name>SDP Bundle</name>
          <t>Both the WHEP player and the WHEP endpoint <bcp14>SHALL</bcp14> support <xref target="RFC9143"/> and use the "max-bundle" policy as defined in <xref target="RFC9429"/>. The WHEP player and the media server <bcp14>MUST</bcp14> support multiplexed media associated with the BUNDLE group as per <xref section="9" sectionFormat="of" target="RFC9143"/>. In addition, per <xref target="RFC9143"/> the WHEP player and media server <bcp14>SHALL</bcp14> use RTP/RTCP multiplexing <xref target="RFC8858"/> for all bundled media. In order to reduce the network resources required at the media server, both the WHEP player and WHEP endpoints <bcp14>MUST</bcp14> include the "rtcp-mux-only" attribute in each bundled "m=" sections as per <xref section="3" sectionFormat="of" target="RFC8858"/>.</t>
        </section>
        <section anchor="single-mediastream">
          <name>Single MediaStream</name>
          <t>WHEP only supports a single MediaStream as defined in <xref target="RFC8830"/> and therefore all "m=" sections <bcp14>MUST</bcp14> contain an "msid" attribute with the same value. The MediaStream <bcp14>MUST</bcp14> contain at least one MediaStreamTrack of any media kind and it <bcp14>MUST NOT</bcp14> have two or more than MediaStreamTracks for the same media (audio or video).</t>
        </section>
        <section anchor="trickle-ice-and-ice-restarts">
          <name>Trickle ICE and ICE Restarts</name>
          <t>The media server <bcp14>SHOULD</bcp14> support full ICE, unless it is connected to the Internet with an IP address that is accessible by each WHEP player that is authorized to use it, in which case it <bcp14>MAY</bcp14> support only ICE lite. The WHEP player <bcp14>MUST</bcp14> implement and use full ICE.</t>
          <t>Trickle ICE and ICE restart support is <bcp14>OPTIONAL</bcp14> for both the WHEP players and media servers as explained in <xref target="ice-support"/>.</t>
        </section>
      </section>
      <section anchor="load-balancing-and-redirections">
        <name>Load Balancing and Redirections</name>
        <t>WHEP endpoints and media servers might not be colocated on the same server, so it is possible to load balance incoming requests to different media servers.</t>
        <t>WHEP players <bcp14>SHALL</bcp14> support HTTP redirections as per <xref section="15.4" sectionFormat="of" target="RFC9110"/>. In order to avoid POST requests to be redirected as GET requests, status codes "301 Moved Permanently" and "302 Found" <bcp14>MUST NOT</bcp14> be used and the preferred method for performing load balancing is via the "307 Temporary Redirect" response status code as described in <xref section="15.4.8" sectionFormat="of" target="RFC9110"/>. Redirections are not required to be supported for the PATCH and DELETE requests.</t>
        <t>In case of high load, the WHEP endpoints <bcp14>MAY</bcp14> return a "503 Service Unavailable" response indicating that the server is currently unable to handle the request due to a temporary overload or scheduled maintenance as described in <xref section="15.6.4" sectionFormat="of" target="RFC9110"/>, which will likely be alleviated after some delay. The WHEP endpoint might send a Retry-After header field indicating the minimum time that the user agent ought to wait before making a follow-up request as described in <xref section="10.2.3" sectionFormat="of" target="RFC9110"/>.</t>
      </section>
      <section anchor="stunturn-server-configuration">
        <name>STUN/TURN Server Configuration</name>
        <t>The WHEP Endpoint <bcp14>MAY</bcp14> return STUN/TURN server configuration URLs and credentials usable by the client in the "201 Created" response to the HTTP POST request to the WHEP Endpoint URL.</t>
        <t>Each STUN/TURN server will be returned using the Link header field <xref target="RFC8288"/> with a "rel" attribute value of "ice-server" as specified in <xref target="RFC9725"/></t>
        <t>It might be also possible to configure the STUN/TURN server URLs with long-term credentials provided by either the broadcasting service or an external TURN provider on the WHEP player, overriding the values provided by the WHEP Endpoint.</t>
      </section>
      <section anchor="authentication-and-authorization">
        <name>Authentication and Authorization</name>
        <t>All WHEP endpoints, sessions and clients <bcp14>MUST</bcp14> support HTTP Authentication as per <xref section="11" sectionFormat="of" target="RFC9110"/> and in order to ensure interoperability, bearer token authentication as defined in the next section <bcp14>MUST</bcp14> be supported by all WHEP entities. However this does not preclude the support of additional HTTP authentication schemes as defined in <xref section="11.6" sectionFormat="of" target="RFC9110"/>.</t>
        <section anchor="bearer-token-authentication">
          <name>Bearer Token Authentication</name>
          <t>WHEP endpoints and sessions <bcp14>MAY</bcp14> require the HTTP request to be authenticated using an HTTP Authorization header field with a Bearer token as specified in <xref section="2.1" sectionFormat="of" target="RFC6750"/>. WHEP players <bcp14>MUST</bcp14> implement this authentication and authorization mechanism and send the HTTP Authorization header field in all HTTP requests sent to either the WHEP endpoint or session (except the preflight OPTIONS requests for CORS).</t>
          <t>The nature, syntax, and semantics of the bearer token, as well as how to distribute it to the client, is outside the scope of this document. Some examples of the kind of tokens that could be used are, but are not limited to, JSON Web Tokens (JWTs) as per <xref target="RFC6750"/> and <xref target="RFC8725"/> or a shared secret stored on a database. The tokens are typically made available to the end user alongside the WHEP endpoint URL and configured on the WHEP players.</t>
          <t>WHEP endpoints and sessions could perform the authentication and authorization by encoding an authentication token within the URLs for the WHEP endpoints or sessions instead. In case the WHEP player is not configured to use a bearer token, the HTTP Authorization header field <bcp14>MUST NOT</bcp14> be sent in any request.</t>
        </section>
      </section>
      <section anchor="protocol-extensions">
        <name>Protocol Extensions</name>
        <t>In order to support future extensions to be defined for WHEP, a common procedure for registering and announcing the new extensions is defined.</t>
        <t>Protocol extensions supported by the WHEP server <bcp14>MUST</bcp14> be advertised to the WHEP player in the "201 Created" response to the initial HTTP POST request sent to the WHEP Endpoint.
The WHEP Endpoint <bcp14>MUST</bcp14> return one "Link" header field for each extension that it supports, with the extension "rel" attribute value containing the extension URN and the URL for the HTTP resource that will be available for receiving requests related to that extension.</t>
        <t>Protocol extensions are optional for both WHEP players and WHEP Endpoints and sessions. WHEP players <bcp14>MUST</bcp14> ignore any Link attribute with an unknown "rel" attribute value and WHEP Endpoints and sessions <bcp14>MUST NOT</bcp14> require the usage of any of the extensions.</t>
        <t>Each protocol extension <bcp14>MUST</bcp14> register a unique "rel" attribute value at IANA starting with the prefix: "urn:ietf:params:whep:ext" as specified in <xref target="urn-whep-subspace"/>.</t>
        <t>For example, considering a potential extension of server-to-client communication using server-sent events as specified in https://html.spec.whatwg.org/multipage/server-sent-events.html#server-sent-events, the URL for connecting to the server-sent event resource for the ingested stream could be returned in the initial HTTP "201 Created" response with a "Link" header field and a "rel" attribute of "urn:ietf:params:whep:ext:example:server-sent-events" (this document does not specify such an extension, and uses it only as an example).</t>
        <t>In this theoretical case, the "201 Created" response to the HTTP POST request would look like:</t>
        <figure anchor="protocol-extension-example">
          <name>Example of a WHEP protocol extension</name>
          <artwork><![CDATA[
HTTP/1.1 201 Created
Content-Type: application/sdp
Location: https://whep.example.com/session/id
Link: <https://whep.example.com/session/id/sse>;
      rel="urn:ietf:params:whep:ext:example:server-sent-events"
]]></artwork>
        </figure>
        <t><xref target="protocol-extension-example"/> shows an example of a WHEP protocol extension supported by the WHEP session, as indicated in the Link header of the 201 Created response.</t>
      </section>
    </section>
    <section anchor="security-considerations">
      <name>Security Considerations</name>
      <t>This document specifies a new protocol on top of HTTP and WebRTC, thus, security protocols and considerations from related specifications apply to the WHEP specification. These include:</t>
      <ul spacing="normal">
        <li>
          <t>WebRTC security considerations: <xref target="RFC8826"/>. HTTPS <bcp14>SHALL</bcp14> be used in order to preserve the WebRTC security model.</t>
        </li>
        <li>
          <t>Transport Layer Security (TLS): <xref target="RFC8446"/> and <xref target="RFC9147"/>.</t>
        </li>
        <li>
          <t>HTTP security: <xref section="11" sectionFormat="of" target="RFC9112"/> and <xref section="17" sectionFormat="of" target="RFC9110"/>.</t>
        </li>
        <li>
          <t>URI security: <xref section="7" sectionFormat="of" target="RFC3986"/>.</t>
        </li>
      </ul>
      <t>On top of that, WHEP exposes a thin new attack surface specific of the REST API methods used within it:</t>
      <ul spacing="normal">
        <li>
          <t>HTTP POST flooding and resource exhaustion:
It would be possible for an attacker in possession of authentication credentials valid for watching a WHEP stream to make multiple HTTP POST to the WHEP endpoint.
This will force the WHEP endpoint to process the incoming SDP and allocate resources for being able to setup the DTLS/ICE connection.
While the malicious client does not need to initiate the DTLS/ICE connection at all, the WHEP session will have to wait for the DTLS/ICE connection timeout in order to release the associated resources.
If the connection rate is high enough, this could lead to resource exhaustion on the servers handling the requests and it will not be able to process legitimate incoming ingests.
In order to prevent this scenario, WHEP endpoints <bcp14>SHOULD</bcp14> implement a rate limit and avalanche control mechanism for incoming initial HTTP POST requests.</t>
        </li>
        <li>
          <t>Insecure direct object references (IDOR) on the WHEP session locations:
If the URLs returned by the WHEP endpoint for the WHEP sessions location are easy to guess, it would be possible for an attacker to send multiple HTTP DELETE requests and terminate all the WHEP sessions currently running.
In order to prevent this scenario, WHEP endpoints <bcp14>SHOULD</bcp14> generate URLs with enough randomness, using a cryptographically secure pseudorandom number generator following the best practices in Randomness Requirements for Security <xref target="RFC4086"/>, and implement a rate limit and avalanche control mechanism for HTTP DELETE requests.
The security considerations for Universally Unique IDentifier (UUID) <xref section="6" sectionFormat="comma" target="RFC9562"/> are applicable for generating the WHEP sessions location URL.</t>
        </li>
        <li>
          <t>HTTP PATCH flooding: 
Similar to the HTTP POST flooding, a malicious client could also create a resource exhaustion by sending multiple HTTP PATCH request to the WHEP session, although the WHEP sessions can limit the impact by not allocating new ICE candidates and reusing the existing ICE candidates when doing ICE restarts.
In order to prevent this scenario, WHEP endpoints <bcp14>SHOULD</bcp14> implement a rate limit and avalanche control mechanism for incoming HTTP PATCH requests.</t>
        </li>
      </ul>
    </section>
    <section anchor="iana-considerations">
      <name>IANA Considerations</name>
      <t>This specification adds a registry for URN sub-namespaces for WHEP protocol extensions.</t>
      <section anchor="registration-of-whep-urn-sub-namespace-and-whep-registries">
        <name>Registration of WHEP URN Sub-Namespace and WHEP Registries</name>
        <t>IANA is asked to add an entry to the "IETF URN Sub-namespace for Registered Protocol Parameter Identifiers" registry and create a sub-namespace for the Registered Parameter Identifier as per <xref target="RFC3553"/>: "urn:ietf:params:whep".</t>
        <t>To manage this sub-namespace, IANA is asked to create the "WebRTC-HTTP egress protocol (WHEP) URNs" and "WebRTC-HTTP egress protocol (WHEP) extension URNs".</t>
        <section anchor="urn-whep-registry">
          <name>WebRTC-HTTP Egress Protocol (WHEP) URNs Registry</name>
          <t>The "WebRTC-HTTP egress protocol (WHEP) URNs" registry is used to manage entries within the "urn:ietf:params:whep" namespace. The registry descriptions is as follows:</t>
          <ul spacing="normal">
            <li>
              <t>Registry group: WebRTC-HTTP egress protocol (WHEP)</t>
            </li>
            <li>
              <t>Registry name: WebRTC-HTTP egress protocol (WHEP) URNs</t>
            </li>
            <li>
              <t>Specification: this document (RFC TBD)</t>
            </li>
            <li>
              <t>Registration procedure: Specification Required</t>
            </li>
            <li>
              <t>Field names: URI, description, change controller, reference and IANA registry reference</t>
            </li>
          </ul>
          <t>The registry contains a single initial value:</t>
          <ul spacing="normal">
            <li>
              <t>URI: urn:ietf:params:whep:ext</t>
            </li>
            <li>
              <t>Description: WebRTC-HTTP egress protocol (WHEP) extension URNs</t>
            </li>
            <li>
              <t>Change Controller: IETF</t>
            </li>
            <li>
              <t>Reference: this document (RFC TBD) Section <xref target="urn-whep-ext-registry"/></t>
            </li>
            <li>
              <t>IANA registry reference: WebRTC-HTTP egress protocol (WHEP) extension URNs registry.</t>
            </li>
          </ul>
        </section>
        <section anchor="urn-whep-ext-registry">
          <name>WebRTC-HTTP Egress Protocol (WHEP) Extension URNs Registry</name>
          <t>The "WebRTC-HTTP egress protocol (WHEP) Extension URNs" is used to manage entries within the "urn:ietf:params:whep:ext" namespace. The registry descriptions is as follows:</t>
          <ul spacing="normal">
            <li>
              <t>Registry group: WebRTC-HTTP egress protocol (WHEP)</t>
            </li>
            <li>
              <t>Registry name: WebRTC-HTTP egress protocol (WHEP) Extension URNs</t>
            </li>
            <li>
              <t>Specification: this document (RFC TBD)</t>
            </li>
            <li>
              <t>Registration procedure: Specification Required</t>
            </li>
            <li>
              <t>Field names: URI, description, change controller, reference and IANA registry reference</t>
            </li>
          </ul>
        </section>
      </section>
      <section anchor="urn-whep-subspace">
        <name>URN Sub-Namespace for WHEP</name>
        <t>WHEP endpoint utilizes URNs to identify the supported WHEP protocol extensions on the "rel" attribute of the Link header as defined in <xref target="protocol-extensions"/>.</t>
        <t>This section creates and registers an IETF URN Sub-namespace for use in the WHEP specifications and future extensions.</t>
        <section anchor="specification-template">
          <name>Specification Template</name>
          <t>Namespace ID:</t>
          <ul spacing="normal">
            <li>
              <t>The Namespace ID "whep" has been assigned.</t>
            </li>
          </ul>
          <t>Registration Information:</t>
          <ul spacing="normal">
            <li>
              <t>Version: 1</t>
            </li>
            <li>
              <t>Date: TBD</t>
            </li>
          </ul>
          <t>Declared registrant of the namespace:</t>
          <ul spacing="normal">
            <li>
              <t>Registering organization: The Internet Engineering Task Force.</t>
            </li>
            <li>
              <t>Designated contact: A designated expert will monitor the WHEP public mailing list, "wish@ietf.org".</t>
            </li>
          </ul>
          <t>Declaration of Syntactic Structure:</t>
          <ul spacing="normal">
            <li>
              <t>The Namespace Specific String (NSS) of all URNs that use the "whep" Namespace ID shall have the following structure: urn:ietf:params:whep:{type}:{name}:{other}.</t>
            </li>
            <li>
              <t>The keywords have the following meaning:  </t>
              <ul spacing="normal">
                <li>
                  <t>type: The entity type. This specification only defines the "ext" type.</t>
                </li>
                <li>
                  <t>name: A required ASCII string that conforms to the URN syntax requirements (see <xref target="RFC8141"/>) and defines a major namespace of a WHEP protocol extension. The value <bcp14>MAY</bcp14> also be an industry name or organization name.</t>
                </li>
                <li>
                  <t>other: Any ASCII string that conforms to the URN syntax requirements (see <xref target="RFC8141"/>) and defines the sub-namespace (which <bcp14>MAY</bcp14> be further broken down in namespaces delimited by colons) as needed to uniquely identify an WHEP protocol extension.</t>
                </li>
              </ul>
            </li>
          </ul>
          <t>Relevant Ancillary Documentation:</t>
          <ul spacing="normal">
            <li>
              <t>None</t>
            </li>
          </ul>
          <t>Identifier Uniqueness Considerations:</t>
          <ul spacing="normal">
            <li>
              <t>The designated contact shall be responsible for reviewing and enforcing uniqueness.</t>
            </li>
          </ul>
          <t>Identifier Persistence Considerations:</t>
          <ul spacing="normal">
            <li>
              <t>Once a name has been allocated, it <bcp14>MUST NOT</bcp14> be reallocated for a different purpose.</t>
            </li>
            <li>
              <t>The rules provided for assignments of values within a sub-namespace <bcp14>MUST</bcp14> be constructed so that the meanings of values cannot change.</t>
            </li>
            <li>
              <t>This registration mechanism is not appropriate for naming values whose meanings may change over time.</t>
            </li>
          </ul>
          <t>Process of Identifier Assignment:</t>
          <ul spacing="normal">
            <li>
              <t>Namespace with type "ext" (e.g., "urn:ietf:params:whep:ext") is reserved for IETF-approved WHEP specifications.</t>
            </li>
          </ul>
          <t>Process of Identifier Resolution:</t>
          <ul spacing="normal">
            <li>
              <t>None specified.</t>
            </li>
          </ul>
          <t>Rules for Lexical Equivalence:</t>
          <ul spacing="normal">
            <li>
              <t>No special considerations; the rules for lexical equivalence specified in <xref target="RFC8141"/> apply.</t>
            </li>
          </ul>
          <t>Conformance with URN Syntax:</t>
          <ul spacing="normal">
            <li>
              <t>No special considerations.</t>
            </li>
          </ul>
          <t>Validation Mechanism:</t>
          <ul spacing="normal">
            <li>
              <t>None specified.</t>
            </li>
          </ul>
          <t>Scope:</t>
          <ul spacing="normal">
            <li>
              <t>Global.</t>
            </li>
          </ul>
        </section>
      </section>
      <section anchor="registering-whep-protocol-extensions-urns">
        <name>Registering WHEP Protocol Extensions URNs</name>
        <t>This section defines the process for registering new WHEP protocol extensions URNs with IANA in the "WebRTC-HTTP egress protocol (WHEP) extension URNs" registry (see <xref target="urn-whep-subspace"/>).</t>
        <t>A WHEP Protocol Extension URNs is used as a value in the "rel" attribute of the Link header as defined in <xref target="protocol-extensions"/> for the purpose of signaling WHEP extensions supported by the WHEP endpoints.</t>
        <t>WHEP Protocol Extensions URNs have an "ext" type as defined in <xref target="urn-whep-subspace"/>.</t>
        <section anchor="registration-procedure">
          <name>Registration Procedure</name>
          <t>The IETF has created a mailing list, "wish@ietf.org", which can be used
   for public discussion of WHEP protocol extensions proposals prior to registration.
   Use of the mailing list is strongly encouraged. The IESG has
   appointed a designated expert as per <xref target="RFC8126"/> who will monitor the
   wish@ietf.org mailing list and review registrations.</t>
          <t>Registration of new "ext" type URNs (in the namespace "urn:ietf:params:whep:ext") belonging to a WHEP Protocol Extension <bcp14>MUST</bcp14> be documented in a permanent and readily available public specification, in sufficient detail so that interoperability between independent implementations is possible and reviewed by the designated expert as per Section 4.6 of <xref target="RFC8126"/>.
   An Standards Track RFC is <bcp14>REQUIRED</bcp14> for the registration of new value data types that modify existing properties.
   An Standards Track RFC is also <bcp14>REQUIRED</bcp14> for registration of WHEP Protocol Extensions URNs that modify WHEP Protocol Extensions previously documented in an existing RFC.</t>
          <t>The registration procedure begins when a completed registration template, defined in the sections below, is sent to iana@iana.org.
   Decisions made by the designated expert can be appealed to an Applications and Real Time (ART) Area Director, then to the IESG.
   The normal appeals procedure described in <xref target="BCP9"/> is to be followed.</t>
          <t>Once the registration procedure concludes successfully, IANA creates
   or modifies the corresponding record in the WHEP Protocol Extension registry.</t>
          <t>An RFC specifying one or more new WHEP Protocol Extension URNs <bcp14>MUST</bcp14> include the
   completed registration templates, which <bcp14>MAY</bcp14> be expanded with
   additional information. These completed templates are intended to go
   in the body of the document, not in the IANA Considerations section.
   The RFC <bcp14>MUST</bcp14> include the syntax and semantics of any extension-specific attributes that may be provided in a Link header
   field advertising the extension.</t>
        </section>
        <section anchor="guidance-for-designated-experts">
          <name>Guidance for Designated Experts</name>
          <t>The Designated Expert (DE) is expected to ascertain the existence of suitable documentation (a specification) as described in <xref target="RFC8126"/> and to verify that the document is permanently and publicly available.</t>
          <t>The DE is also expected to check the clarity of purpose and use of the requested registration.</t>
          <t>Additionally, the DE must verify that any request for one of these registrations has been made available for review and comment by posting the request to the WebRTC Ingest Signaling over HTTPS (wish) Working Group mailing list.</t>
          <t>Specifications should be documented in an Internet-Draft. Lastly, the DE must ensure that any other request for a code point does not conflict with work that is active in or already published by the IETF.</t>
        </section>
        <section anchor="whep-protocol-extension-registration-template">
          <name>WHEP Protocol Extension Registration Template</name>
          <t>A WHEP Protocol Extension URNs is defined by completing the following template:</t>
          <ul spacing="normal">
            <li>
              <t>URN: A unique URN for the WHEP Protocol Extension.</t>
            </li>
            <li>
              <t>Reference: A formal reference to the publicly available specification</t>
            </li>
            <li>
              <t>Description: A brief description of the function of the extension, in a short paragraph or two</t>
            </li>
            <li>
              <t>Contact information: Contact information for the organization or person making the registration</t>
            </li>
          </ul>
        </section>
      </section>
    </section>
  </middle>
  <back>
    <references anchor="sec-combined-references">
      <name>References</name>
      <references anchor="sec-normative-references">
        <name>Normative References</name>
        <reference anchor="FETCH" target="https://fetch.spec.whatwg.org">
          <front>
            <title>Fetch - Living Standard</title>
            <author>
              <organization>WHATWG</organization>
            </author>
            <date>n.d.</date>
          </front>
        </reference>
        <reference anchor="SCTE35" target="https://account.scte.org/standards/library/catalog/scte-35-digital-program-insertion-cueing-message">
          <front>
            <title>Digital Program Insertion Cueing Message</title>
            <author>
              <organization>ANSI</organization>
            </author>
            <date>n.d.</date>
          </front>
        </reference>
        <reference anchor="RFC9429">
          <front>
            <title>JavaScript Session Establishment Protocol (JSEP)</title>
            <author fullname="J. Uberti" initials="J." surname="Uberti"/>
            <author fullname="C. Jennings" initials="C." surname="Jennings"/>
            <author fullname="E. Rescorla" initials="E." role="editor" surname="Rescorla"/>
            <date month="April" year="2024"/>
            <abstract>
              <t>This document describes the mechanisms for allowing a JavaScript application to control the signaling plane of a multimedia session via the interface specified in the W3C RTCPeerConnection API and discusses how this relates to existing signaling protocols.</t>
              <t>This specification obsoletes RFC 8829.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="9429"/>
          <seriesInfo name="DOI" value="10.17487/RFC9429"/>
        </reference>
        <reference anchor="RFC3264">
          <front>
            <title>An Offer/Answer Model with Session Description Protocol (SDP)</title>
            <author fullname="J. Rosenberg" initials="J." surname="Rosenberg"/>
            <author fullname="H. Schulzrinne" initials="H." surname="Schulzrinne"/>
            <date month="July" year="2002"/>
            <abstract>
              <t>This document defines a mechanism by which two entities can make use of the Session Description Protocol (SDP) to arrive at a common view of a multimedia session between them. In the model, one participant offers the other a description of the desired session from their perspective, and the other participant answers with the desired session from their perspective. This offer/answer model is most useful in unicast sessions where information from both participants is needed for the complete view of the session. The offer/answer model is used by protocols like the Session Initiation Protocol (SIP). [STANDARDS-TRACK]</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="3264"/>
          <seriesInfo name="DOI" value="10.17487/RFC3264"/>
        </reference>
        <reference anchor="RFC9725">
          <front>
            <title>WebRTC-HTTP Ingestion Protocol (WHIP)</title>
            <author fullname="S. Garcia Murillo" initials="S." surname="Garcia Murillo"/>
            <author fullname="A. Gouaillard" initials="A." surname="Gouaillard"/>
            <date month="March" year="2025"/>
            <abstract>
              <t>This document describes a simple HTTP-based protocol that will allow WebRTC-based ingestion of content into streaming services and/or Content Delivery Networks (CDNs).</t>
              <t>This document updates RFCs 8840 and 8842.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="9725"/>
          <seriesInfo name="DOI" value="10.17487/RFC9725"/>
        </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="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="RFC5789">
          <front>
            <title>PATCH Method for HTTP</title>
            <author fullname="L. Dusseault" initials="L." surname="Dusseault"/>
            <author fullname="J. Snell" initials="J." surname="Snell"/>
            <date month="March" year="2010"/>
            <abstract>
              <t>Several applications extending the Hypertext Transfer Protocol (HTTP) require a feature to do partial resource modification. The existing HTTP PUT method only allows a complete replacement of a document. This proposal adds a new HTTP method, PATCH, to modify an existing HTTP resource. [STANDARDS-TRACK]</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="5789"/>
          <seriesInfo name="DOI" value="10.17487/RFC5789"/>
        </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="W3C.REC-ldp-20150226" target="https://www.w3.org/TR/2015/REC-ldp-20150226/">
          <front>
            <title>Linked Data Platform 1.0</title>
            <author fullname="Ashok Malhotra" role="editor"/>
            <author fullname="John Arwe" role="editor"/>
            <author fullname="Steve Speicher" role="editor"/>
            <date day="26" month="February" year="2015"/>
          </front>
          <seriesInfo name="W3C REC" value="REC-ldp-20150226"/>
          <seriesInfo name="W3C" value="REC-ldp-20150226"/>
        </reference>
        <reference anchor="RFC8445">
          <front>
            <title>Interactive Connectivity Establishment (ICE): A Protocol for Network Address Translator (NAT) Traversal</title>
            <author fullname="A. Keranen" initials="A." surname="Keranen"/>
            <author fullname="C. Holmberg" initials="C." surname="Holmberg"/>
            <author fullname="J. Rosenberg" initials="J." surname="Rosenberg"/>
            <date month="July" year="2018"/>
            <abstract>
              <t>This document describes a protocol for Network Address Translator (NAT) traversal for UDP-based communication. This protocol is called Interactive Connectivity Establishment (ICE). ICE makes use of the Session Traversal Utilities for NAT (STUN) protocol and its extension, Traversal Using Relay NAT (TURN).</t>
              <t>This document obsoletes RFC 5245.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="8445"/>
          <seriesInfo name="DOI" value="10.17487/RFC8445"/>
        </reference>
        <reference anchor="RFC8838">
          <front>
            <title>Trickle ICE: Incremental Provisioning of Candidates for the Interactive Connectivity Establishment (ICE) Protocol</title>
            <author fullname="E. Ivov" initials="E." surname="Ivov"/>
            <author fullname="J. Uberti" initials="J." surname="Uberti"/>
            <author fullname="P. Saint-Andre" initials="P." surname="Saint-Andre"/>
            <date month="January" year="2021"/>
            <abstract>
              <t>This document describes "Trickle ICE", an extension to the Interactive Connectivity Establishment (ICE) protocol that enables ICE agents to begin connectivity checks while they are still gathering candidates, by incrementally exchanging candidates over time instead of all at once. This method can considerably accelerate the process of establishing a communication session.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="8838"/>
          <seriesInfo name="DOI" value="10.17487/RFC8838"/>
        </reference>
        <reference anchor="RFC8840">
          <front>
            <title>A Session Initiation Protocol (SIP) Usage for Incremental Provisioning of Candidates for the Interactive Connectivity Establishment (Trickle ICE)</title>
            <author fullname="E. Ivov" initials="E." surname="Ivov"/>
            <author fullname="T. Stach" initials="T." surname="Stach"/>
            <author fullname="E. Marocco" initials="E." surname="Marocco"/>
            <author fullname="C. Holmberg" initials="C." surname="Holmberg"/>
            <date month="January" year="2021"/>
            <abstract>
              <t>The Interactive Connectivity Establishment (ICE) protocol describes a Network Address Translator (NAT) traversal mechanism for UDP-based multimedia sessions established with the Offer/Answer model. The ICE extension for Incremental Provisioning of Candidates (Trickle ICE) defines a mechanism that allows ICE Agents to shorten session establishment delays by making the candidate gathering and connectivity checking phases of ICE non-blocking and by executing them in parallel.</t>
              <t>This document defines usage semantics for Trickle ICE with the Session Initiation Protocol (SIP). The document also defines a new SIP Info Package to support this usage together with the corresponding media type. Additionally, a new Session Description Protocol (SDP) "end-of-candidates" attribute and a new SIP option tag "trickle-ice" are defined.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="8840"/>
          <seriesInfo name="DOI" value="10.17487/RFC8840"/>
        </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="RFC8863">
          <front>
            <title>Interactive Connectivity Establishment Patiently Awaiting Connectivity (ICE PAC)</title>
            <author fullname="C. Holmberg" initials="C." surname="Holmberg"/>
            <author fullname="J. Uberti" initials="J." surname="Uberti"/>
            <date month="January" year="2021"/>
            <abstract>
              <t>During the process of establishing peer-to-peer connectivity, Interactive Connectivity Establishment (ICE) agents can encounter situations where they have no candidate pairs to check, and, as a result, conclude that ICE processing has failed. However, because additional candidate pairs can be discovered during ICE processing, declaring failure at this point may be premature. This document discusses when these situations can occur.</t>
              <t>This document updates RFCs 8445 and 8838 by requiring that an ICE agent wait a minimum amount of time before declaring ICE failure, even if there are no candidate pairs left to check.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="8863"/>
          <seriesInfo name="DOI" value="10.17487/RFC8863"/>
        </reference>
        <reference anchor="RFC8839">
          <front>
            <title>Session Description Protocol (SDP) Offer/Answer Procedures for Interactive Connectivity Establishment (ICE)</title>
            <author fullname="M. Petit-Huguenin" initials="M." surname="Petit-Huguenin"/>
            <author fullname="S. Nandakumar" initials="S." surname="Nandakumar"/>
            <author fullname="C. Holmberg" initials="C." surname="Holmberg"/>
            <author fullname="A. Keränen" initials="A." surname="Keränen"/>
            <author fullname="R. Shpount" initials="R." surname="Shpount"/>
            <date month="January" year="2021"/>
            <abstract>
              <t>This document describes Session Description Protocol (SDP) Offer/Answer procedures for carrying out Interactive Connectivity Establishment (ICE) between the agents.</t>
              <t>This document obsoletes RFCs 5245 and 6336.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="8839"/>
          <seriesInfo name="DOI" value="10.17487/RFC8839"/>
        </reference>
        <reference anchor="RFC9143">
          <front>
            <title>Negotiating Media Multiplexing Using the Session Description Protocol (SDP)</title>
            <author fullname="C. Holmberg" initials="C." surname="Holmberg"/>
            <author fullname="H. Alvestrand" initials="H." surname="Alvestrand"/>
            <author fullname="C. Jennings" initials="C." surname="Jennings"/>
            <date month="February" year="2022"/>
            <abstract>
              <t>This specification defines a new Session Description Protocol (SDP) Grouping Framework extension called 'BUNDLE'. The extension can be used with the SDP offer/answer mechanism to negotiate the usage of a single transport (5-tuple) for sending and receiving media described by multiple SDP media descriptions ("m=" sections). Such transport is referred to as a "BUNDLE transport", and the media is referred to as "bundled media". The "m=" sections that use the BUNDLE transport form a BUNDLE group.</t>
              <t>This specification defines a new RTP Control Protocol (RTCP) Source Description (SDES) item and a new RTP header extension.</t>
              <t>This specification updates RFCs 3264, 5888, and 7941.</t>
              <t>This specification obsoletes RFC 8843.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="9143"/>
          <seriesInfo name="DOI" value="10.17487/RFC9143"/>
        </reference>
        <reference anchor="RFC8858">
          <front>
            <title>Indicating Exclusive Support of RTP and RTP Control Protocol (RTCP) Multiplexing Using the Session Description Protocol (SDP)</title>
            <author fullname="C. Holmberg" initials="C." surname="Holmberg"/>
            <date month="January" year="2021"/>
            <abstract>
              <t>This document defines a new Session Description Protocol (SDP) media-level attribute, 'rtcp-mux-only', that can be used by an endpoint to indicate exclusive support of RTP and RTP Control Protocol (RTCP) multiplexing. The document also updates RFC 5761 by clarifying that an offerer can use a mechanism to indicate that it is not able to send and receive RTCP on separate ports.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="8858"/>
          <seriesInfo name="DOI" value="10.17487/RFC8858"/>
        </reference>
        <reference anchor="RFC8830">
          <front>
            <title>WebRTC MediaStream Identification in the Session Description Protocol</title>
            <author fullname="H. Alvestrand" initials="H." surname="Alvestrand"/>
            <date month="January" year="2021"/>
            <abstract>
              <t>This document specifies a Session Description Protocol (SDP) grouping mechanism for RTP media streams that can be used to specify relations between media streams.</t>
              <t>This mechanism is used to signal the association between the SDP concept of "media description" and the Web Real-Time Communication (WebRTC) concept of MediaStream/MediaStreamTrack using SDP signaling.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="8830"/>
          <seriesInfo name="DOI" value="10.17487/RFC8830"/>
        </reference>
        <reference anchor="RFC8288">
          <front>
            <title>Web Linking</title>
            <author fullname="M. Nottingham" initials="M." surname="Nottingham"/>
            <date month="October" year="2017"/>
            <abstract>
              <t>This specification defines a model for the relationships between resources on the Web ("links") and the type of those relationships ("link relation types").</t>
              <t>It also defines the serialisation of such links in HTTP headers with the Link header field.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="8288"/>
          <seriesInfo name="DOI" value="10.17487/RFC8288"/>
        </reference>
        <reference anchor="RFC6750">
          <front>
            <title>The OAuth 2.0 Authorization Framework: Bearer Token Usage</title>
            <author fullname="M. Jones" initials="M." surname="Jones"/>
            <author fullname="D. Hardt" initials="D." surname="Hardt"/>
            <date month="October" year="2012"/>
            <abstract>
              <t>This specification describes how to use bearer tokens in HTTP requests to access OAuth 2.0 protected resources. Any party in possession of a bearer token (a "bearer") can use it to get access to the associated resources (without demonstrating possession of a cryptographic key). To prevent misuse, bearer tokens need to be protected from disclosure in storage and in transport. [STANDARDS-TRACK]</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="6750"/>
          <seriesInfo name="DOI" value="10.17487/RFC6750"/>
        </reference>
        <reference anchor="RFC8725">
          <front>
            <title>JSON Web Token Best Current Practices</title>
            <author fullname="Y. Sheffer" initials="Y." surname="Sheffer"/>
            <author fullname="D. Hardt" initials="D." surname="Hardt"/>
            <author fullname="M. Jones" initials="M." surname="Jones"/>
            <date month="February" year="2020"/>
            <abstract>
              <t>JSON Web Tokens, also known as JWTs, are URL-safe JSON-based security tokens that contain a set of claims that can be signed and/or encrypted. JWTs are being widely used and deployed as a simple security token format in numerous protocols and applications, both in the area of digital identity and in other application areas. This Best Current Practices document updates RFC 7519 to provide actionable guidance leading to secure implementation and deployment of JWTs.</t>
            </abstract>
          </front>
          <seriesInfo name="BCP" value="225"/>
          <seriesInfo name="RFC" value="8725"/>
          <seriesInfo name="DOI" value="10.17487/RFC8725"/>
        </reference>
        <reference anchor="RFC8826">
          <front>
            <title>Security Considerations for WebRTC</title>
            <author fullname="E. Rescorla" initials="E." surname="Rescorla"/>
            <date month="January" year="2021"/>
            <abstract>
              <t>WebRTC is a protocol suite for use with real-time applications that can be deployed in browsers -- "real-time communication on the Web". This document defines the WebRTC threat model and analyzes the security threats of WebRTC in that model.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="8826"/>
          <seriesInfo name="DOI" value="10.17487/RFC8826"/>
        </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="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="RFC9112">
          <front>
            <title>HTTP/1.1</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 specifies the HTTP/1.1 message syntax, message parsing, connection management, and related security concerns.</t>
              <t>This document obsoletes portions of RFC 7230.</t>
            </abstract>
          </front>
          <seriesInfo name="STD" value="99"/>
          <seriesInfo name="RFC" value="9112"/>
          <seriesInfo name="DOI" value="10.17487/RFC9112"/>
        </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="RFC4086">
          <front>
            <title>Randomness Requirements for Security</title>
            <author fullname="D. Eastlake 3rd" initials="D." surname="Eastlake 3rd"/>
            <author fullname="J. Schiller" initials="J." surname="Schiller"/>
            <author fullname="S. Crocker" initials="S." surname="Crocker"/>
            <date month="June" year="2005"/>
            <abstract>
              <t>Security systems are built on strong cryptographic algorithms that foil pattern analysis attempts. However, the security of these systems is dependent on generating secret quantities for passwords, cryptographic keys, and similar quantities. The use of pseudo-random processes to generate secret quantities can result in pseudo-security. A sophisticated attacker may find it easier to reproduce the environment that produced the secret quantities and to search the resulting small set of possibilities than to locate the quantities in the whole of the potential number space.</t>
              <t>Choosing random quantities to foil a resourceful and motivated adversary is surprisingly difficult. This document points out many pitfalls in using poor entropy sources or traditional pseudo-random number generation techniques for generating such quantities. It recommends the use of truly random hardware techniques and shows that the existing hardware on many systems can be used for this purpose. It provides suggestions to ameliorate the problem when a hardware solution is not available, and it gives examples of how large such quantities need to be for some applications. 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="106"/>
          <seriesInfo name="RFC" value="4086"/>
          <seriesInfo name="DOI" value="10.17487/RFC4086"/>
        </reference>
        <reference anchor="RFC9562">
          <front>
            <title>Universally Unique IDentifiers (UUIDs)</title>
            <author fullname="K. Davis" initials="K." surname="Davis"/>
            <author fullname="B. Peabody" initials="B." surname="Peabody"/>
            <author fullname="P. Leach" initials="P." surname="Leach"/>
            <date month="May" year="2024"/>
            <abstract>
              <t>This specification defines UUIDs (Universally Unique IDentifiers) --
also known as GUIDs (Globally Unique IDentifiers) -- and a Uniform
Resource Name namespace for UUIDs. A UUID is 128 bits long and is
intended to guarantee uniqueness across space and time. UUIDs were
originally used in the Apollo Network Computing System (NCS), later
in the Open Software Foundation's (OSF's) Distributed Computing
Environment (DCE), and then in Microsoft Windows platforms.</t>
              <t>This specification is derived from the OSF DCE specification with the
kind permission of the OSF (now known as "The Open Group"). Information from earlier versions of the OSF DCE specification have
been incorporated into this document. This document obsoletes RFC
4122.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="9562"/>
          <seriesInfo name="DOI" value="10.17487/RFC9562"/>
        </reference>
        <reference anchor="RFC3553">
          <front>
            <title>An IETF URN Sub-namespace for Registered Protocol Parameters</title>
            <author fullname="M. Mealling" initials="M." surname="Mealling"/>
            <author fullname="L. Masinter" initials="L." surname="Masinter"/>
            <author fullname="T. Hardie" initials="T." surname="Hardie"/>
            <author fullname="G. Klyne" initials="G." surname="Klyne"/>
            <date month="June" year="2003"/>
            <abstract>
              <t>This document describes a new sub-delegation for the 'ietf' URN namespace for registered protocol items. The 'ietf' URN namespace is defined in RFC 2648 as a root for persistent URIs that refer to IETF- defined resources. 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="73"/>
          <seriesInfo name="RFC" value="3553"/>
          <seriesInfo name="DOI" value="10.17487/RFC3553"/>
        </reference>
      </references>
      <references anchor="sec-informative-references">
        <name>Informative References</name>
        <reference anchor="RFC3261">
          <front>
            <title>SIP: Session Initiation Protocol</title>
            <author fullname="J. Rosenberg" initials="J." surname="Rosenberg"/>
            <author fullname="H. Schulzrinne" initials="H." surname="Schulzrinne"/>
            <author fullname="G. Camarillo" initials="G." surname="Camarillo"/>
            <author fullname="A. Johnston" initials="A." surname="Johnston"/>
            <author fullname="J. Peterson" initials="J." surname="Peterson"/>
            <author fullname="R. Sparks" initials="R." surname="Sparks"/>
            <author fullname="M. Handley" initials="M." surname="Handley"/>
            <author fullname="E. Schooler" initials="E." surname="Schooler"/>
            <date month="July" year="2002"/>
            <abstract>
              <t>This document describes Session Initiation Protocol (SIP), an application-layer control (signaling) protocol for creating, modifying, and terminating sessions with one or more participants. These sessions include Internet telephone calls, multimedia distribution, and multimedia conferences. [STANDARDS-TRACK]</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="3261"/>
          <seriesInfo name="DOI" value="10.17487/RFC3261"/>
        </reference>
        <reference anchor="RFC6120">
          <front>
            <title>Extensible Messaging and Presence Protocol (XMPP): Core</title>
            <author fullname="P. Saint-Andre" initials="P." surname="Saint-Andre"/>
            <date month="March" year="2011"/>
            <abstract>
              <t>The Extensible Messaging and Presence Protocol (XMPP) is an application profile of the Extensible Markup Language (XML) that enables the near-real-time exchange of structured yet extensible data between any two or more network entities. This document defines XMPP's core protocol methods: setup and teardown of XML streams, channel encryption, authentication, error handling, and communication primitives for messaging, network availability ("presence"), and request-response interactions. This document obsoletes RFC 3920. [STANDARDS-TRACK]</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="6120"/>
          <seriesInfo name="DOI" value="10.17487/RFC6120"/>
        </reference>
        <reference anchor="RFC7826">
          <front>
            <title>Real-Time Streaming Protocol Version 2.0</title>
            <author fullname="H. Schulzrinne" initials="H." surname="Schulzrinne"/>
            <author fullname="A. Rao" initials="A." surname="Rao"/>
            <author fullname="R. Lanphier" initials="R." surname="Lanphier"/>
            <author fullname="M. Westerlund" initials="M." surname="Westerlund"/>
            <author fullname="M. Stiemerling" initials="M." role="editor" surname="Stiemerling"/>
            <date month="December" year="2016"/>
            <abstract>
              <t>This memorandum defines the Real-Time Streaming Protocol (RTSP) version 2.0, which obsoletes RTSP version 1.0 defined in RFC 2326.</t>
              <t>RTSP is an application-layer protocol for the setup and control of the delivery of data with real-time properties. RTSP provides an extensible framework to enable controlled, on-demand delivery of real-time data, such as audio and video. Sources of data can include both live data feeds and stored clips. This protocol is intended to control multiple data delivery sessions; provide a means for choosing delivery channels such as UDP, multicast UDP, and TCP; and provide a means for choosing delivery mechanisms based upon RTP (RFC 3550).</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="7826"/>
          <seriesInfo name="DOI" value="10.17487/RFC7826"/>
        </reference>
        <referencegroup anchor="BCP56" target="https://www.rfc-editor.org/info/bcp56">
          <reference anchor="RFC9205" target="https://www.rfc-editor.org/info/rfc9205">
            <front>
              <title>Building Protocols with HTTP</title>
              <author fullname="M. Nottingham" initials="M." surname="Nottingham"/>
              <date month="June" year="2022"/>
              <abstract>
                <t>Applications often use HTTP as a substrate to create HTTP-based APIs. This document specifies best practices for writing specifications that use HTTP to define new application protocols. It is written primarily to guide IETF efforts to define application protocols using HTTP for deployment on the Internet but might be applicable in other situations.</t>
                <t>This document obsoletes RFC 3205.</t>
              </abstract>
            </front>
            <seriesInfo name="BCP" value="56"/>
            <seriesInfo name="RFC" value="9205"/>
            <seriesInfo name="DOI" value="10.17487/RFC9205"/>
          </reference>
        </referencegroup>
        <reference anchor="RFC9457">
          <front>
            <title>Problem Details for HTTP APIs</title>
            <author fullname="M. Nottingham" initials="M." surname="Nottingham"/>
            <author fullname="E. Wilde" initials="E." surname="Wilde"/>
            <author fullname="S. Dalal" initials="S." surname="Dalal"/>
            <date month="July" year="2023"/>
            <abstract>
              <t>This document defines a "problem detail" to carry machine-readable details of errors in HTTP response content to avoid the need to define new error response formats for HTTP APIs.</t>
              <t>This document obsoletes RFC 7807.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="9457"/>
          <seriesInfo name="DOI" value="10.17487/RFC9457"/>
        </reference>
        <reference anchor="RFC8141">
          <front>
            <title>Uniform Resource Names (URNs)</title>
            <author fullname="P. Saint-Andre" initials="P." surname="Saint-Andre"/>
            <author fullname="J. Klensin" initials="J." surname="Klensin"/>
            <date month="April" year="2017"/>
            <abstract>
              <t>A Uniform Resource Name (URN) is a Uniform Resource Identifier (URI) that is assigned under the "urn" URI scheme and a particular URN namespace, with the intent that the URN will be a persistent, location-independent resource identifier. With regard to URN syntax, this document defines the canonical syntax for URNs (in a way that is consistent with URI syntax), specifies methods for determining URN-equivalence, and discusses URI conformance. With regard to URN namespaces, this document specifies a method for defining a URN namespace and associating it with a namespace identifier, and it describes procedures for registering namespace identifiers with the Internet Assigned Numbers Authority (IANA). This document obsoletes both RFCs 2141 and 3406.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="8141"/>
          <seriesInfo name="DOI" value="10.17487/RFC8141"/>
        </reference>
        <reference anchor="RFC8126">
          <front>
            <title>Guidelines for Writing an IANA Considerations Section in RFCs</title>
            <author fullname="M. Cotton" initials="M." surname="Cotton"/>
            <author fullname="B. Leiba" initials="B." surname="Leiba"/>
            <author fullname="T. Narten" initials="T." surname="Narten"/>
            <date month="June" year="2017"/>
            <abstract>
              <t>Many protocols make use of points of extensibility that use constants to identify various protocol parameters. To ensure that the values in these fields do not have conflicting uses and to promote interoperability, their allocations are often coordinated by a central record keeper. For IETF protocols, that role is filled by the Internet Assigned Numbers Authority (IANA).</t>
              <t>To make assignments in a given registry prudently, guidance describing the conditions under which new values should be assigned, as well as when and how modifications to existing values can be made, is needed. This document defines a framework for the documentation of these guidelines by specification authors, in order to assure that the provided guidance for the IANA Considerations is clear and addresses the various issues that are likely in the operation of a registry.</t>
              <t>This is the third edition of this document; it obsoletes RFC 5226.</t>
            </abstract>
          </front>
          <seriesInfo name="BCP" value="26"/>
          <seriesInfo name="RFC" value="8126"/>
          <seriesInfo name="DOI" value="10.17487/RFC8126"/>
        </reference>
        <referencegroup anchor="BCP9" target="https://www.rfc-editor.org/info/bcp9">
          <reference anchor="RFC2026" target="https://www.rfc-editor.org/info/rfc2026">
            <front>
              <title>The Internet Standards Process -- Revision 3</title>
              <author fullname="S. Bradner" initials="S." surname="Bradner"/>
              <date month="October" year="1996"/>
              <abstract>
                <t>This memo documents the process used by the Internet community for the standardization of protocols and procedures. It defines the stages in the standardization process, the requirements for moving a document between stages and the types of documents used during this process. 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="9"/>
            <seriesInfo name="RFC" value="2026"/>
            <seriesInfo name="DOI" value="10.17487/RFC2026"/>
          </reference>
          <reference anchor="RFC5657" target="https://www.rfc-editor.org/info/rfc5657">
            <front>
              <title>Guidance on Interoperation and Implementation Reports for Advancement to Draft Standard</title>
              <author fullname="L. Dusseault" initials="L." surname="Dusseault"/>
              <author fullname="R. Sparks" initials="R." surname="Sparks"/>
              <date month="September" year="2009"/>
              <abstract>
                <t>Advancing a protocol to Draft Standard requires documentation of the interoperation and implementation of the protocol. Historic reports have varied widely in form and level of content and there is little guidance available to new report preparers. This document updates the existing processes and provides more detail on what is appropriate in an interoperability and implementation report. 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="9"/>
            <seriesInfo name="RFC" value="5657"/>
            <seriesInfo name="DOI" value="10.17487/RFC5657"/>
          </reference>
          <reference anchor="RFC6410" target="https://www.rfc-editor.org/info/rfc6410">
            <front>
              <title>Reducing the Standards Track to Two Maturity Levels</title>
              <author fullname="R. Housley" initials="R." surname="Housley"/>
              <author fullname="D. Crocker" initials="D." surname="Crocker"/>
              <author fullname="E. Burger" initials="E." surname="Burger"/>
              <date month="October" year="2011"/>
              <abstract>
                <t>This document updates the Internet Engineering Task Force (IETF) Standards Process defined in RFC 2026. Primarily, it reduces the Standards Process from three Standards Track maturity levels to two. This memo documents an Internet Best Current Practice.</t>
              </abstract>
            </front>
            <seriesInfo name="BCP" value="9"/>
            <seriesInfo name="RFC" value="6410"/>
            <seriesInfo name="DOI" value="10.17487/RFC6410"/>
          </reference>
          <reference anchor="RFC7100" target="https://www.rfc-editor.org/info/rfc7100">
            <front>
              <title>Retirement of the "Internet Official Protocol Standards" Summary Document</title>
              <author fullname="P. Resnick" initials="P." surname="Resnick"/>
              <date month="December" year="2013"/>
              <abstract>
                <t>This document updates RFC 2026 to no longer use STD 1 as a summary of "Internet Official Protocol Standards". It obsoletes RFC 5000 and requests the IESG to move RFC 5000 (and therefore STD 1) to Historic status.</t>
              </abstract>
            </front>
            <seriesInfo name="BCP" value="9"/>
            <seriesInfo name="RFC" value="7100"/>
            <seriesInfo name="DOI" value="10.17487/RFC7100"/>
          </reference>
          <reference anchor="RFC7127" target="https://www.rfc-editor.org/info/rfc7127">
            <front>
              <title>Characterization of Proposed Standards</title>
              <author fullname="O. Kolkman" initials="O." surname="Kolkman"/>
              <author fullname="S. Bradner" initials="S." surname="Bradner"/>
              <author fullname="S. Turner" initials="S." surname="Turner"/>
              <date month="January" year="2014"/>
              <abstract>
                <t>RFC 2026 describes the review performed by the Internet Engineering Steering Group (IESG) on IETF Proposed Standard RFCs and characterizes the maturity level of those documents. This document updates RFC 2026 by providing a current and more accurate characterization of Proposed Standards.</t>
              </abstract>
            </front>
            <seriesInfo name="BCP" value="9"/>
            <seriesInfo name="RFC" value="7127"/>
            <seriesInfo name="DOI" value="10.17487/RFC7127"/>
          </reference>
          <reference anchor="RFC7475" target="https://www.rfc-editor.org/info/rfc7475">
            <front>
              <title>Increasing the Number of Area Directors in an IETF Area</title>
              <author fullname="S. Dawkins" initials="S." surname="Dawkins"/>
              <date month="March" year="2015"/>
              <abstract>
                <t>This document removes a limit on the number of Area Directors who manage an Area in the definition of "IETF Area". This document updates RFC 2026 (BCP 9) and RFC 2418 (BCP 25).</t>
              </abstract>
            </front>
            <seriesInfo name="BCP" value="9"/>
            <seriesInfo name="RFC" value="7475"/>
            <seriesInfo name="DOI" value="10.17487/RFC7475"/>
          </reference>
          <reference anchor="RFC8789" target="https://www.rfc-editor.org/info/rfc8789">
            <front>
              <title>IETF Stream Documents Require IETF Rough Consensus</title>
              <author fullname="J. Halpern" initials="J." role="editor" surname="Halpern"/>
              <author fullname="E. Rescorla" initials="E." role="editor" surname="Rescorla"/>
              <date month="June" year="2020"/>
              <abstract>
                <t>This document requires that the IETF never publish any IETF Stream RFCs without IETF rough consensus. This updates RFC 2026.</t>
              </abstract>
            </front>
            <seriesInfo name="BCP" value="9"/>
            <seriesInfo name="RFC" value="8789"/>
            <seriesInfo name="DOI" value="10.17487/RFC8789"/>
          </reference>
          <reference anchor="RFC9282" target="https://www.rfc-editor.org/info/rfc9282">
            <front>
              <title>Responsibility Change for the RFC Series</title>
              <author fullname="B. Rosen" initials="B." surname="Rosen"/>
              <date month="June" year="2022"/>
              <abstract>
                <t>In RFC 9280, responsibility for the RFC Series moved to the RFC Series Working Group and the RFC Series Approval Board. It is no longer the responsibility of the RFC Editor, and the role of the IAB in the RFC Series is altered. Accordingly, in Section 2.1 of RFC 2026, the sentence "RFC publication is the direct responsibility of the RFC Editor, under the general direction of the IAB" is deleted.</t>
              </abstract>
            </front>
            <seriesInfo name="BCP" value="9"/>
            <seriesInfo name="RFC" value="9282"/>
            <seriesInfo name="DOI" value="10.17487/RFC9282"/>
          </reference>
        </referencegroup>
      </references>
    </references>
    <?line 1013?>

<section numbered="false" anchor="contributors">
      <name>Contributors</name>
      <artwork><![CDATA[
  Jonas Birmé
  Eyevinn Technology
  jonas.birme@eyevinn.se

  Dapeng Liu
  Alibaba Inc.
  max.ldp@alibaba-inc.com
]]></artwork>
    </section>
    <section numbered="false" anchor="acknowledgements">
      <name>Acknowledgements</name>
      <t>The authors wish to thank Lorenzo Miniero, Juliusz Chroboczek, Adam Roach, Nils Ohlmeier, Christer Holmberg, Cameron Elliott, Gustavo Garcia, Sandro Gauci, and everyone else in the WebRTC community that have provided comments, feedback, text and improvement proposals on the document and contributed early implementations of the spec.</t>
    </section>
  </back>
  <!-- ##markdown-source:
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

-->

</rfc>
