<?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.6.17 (Ruby 3.0.2) -->
<rfc xmlns:xi="http://www.w3.org/2001/XInclude" ipr="trust200902" docName="draft-murillo-whep-01" category="info" tocInclude="true" sortRefs="true" symRefs="true" version="3">
  <!-- xml2rfc v2v3 conversion 3.15.1 -->
  <front>
    <title abbrev="whep">WebRTC-HTTP Egress Protocol (WHEP)</title>
    <seriesInfo name="Internet-Draft" value="draft-murillo-whep-01"/>
    <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>
    <date year="2022" month="October" day="19"/>
    <area>Security</area>
    <keyword>Internet-Draft WebRTC</keyword>
    <abstract>
      <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>
    <section anchor="introduction">
      <name>Introduction</name>
      <t>The IETF RTCWEB working group standardized JSEP (<xref target="RFC8829"/>), 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"/> as well as 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 application level. This flexibility has allowed the implementation of a wide range of services. However, those services are typically standalone silos which don't require interoperability with other services or leverage the existence of tools that can communicate with them.</t>
      <t>While some standard signaling protocols are available that can be integrated with WebRTC, like SIP <xref target="RFC3261"/> or XMPP <xref target="RFC6120"/>, they are not designed to be used in broadcasting/streaming services, and there also is no sign of adoption in that industry. RTSP <xref target="RFC7826"/>, which is based on RTP and may be the closest in terms of features to WebRTC, is not compatible with the SDP offer/answer model <xref target="RFC3264"/>.</t>
      <t>So, currently, there is no standard protocol designed for consuming media from streaming service using WebRTC.</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>Interoperability between WebRTC services and products.</li>
        <li>Reusing player software which can be integrated easily.</li>
        <li>Integration with Dynamic Adaptive Streaming over HTTP (DASH) for offering live streams via WebRTC while offering a time-shifted version via DASH.</li>
        <li>Playing WebRTC streams on devices that don't support custom javascript to be run (like TVs).</li>
      </ul>
      <t>This document mimics what has been done  the WebRTC HTTP Ingest Protocol (WHIP) <xref target="I-D.draft-ietf-wish-whip"/> 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>
      <ul spacing="normal">
        <li>WHEP Player: WebRTC media player that acts as a client of the WHEP protocol by receiving and decoding the media from a remote Media Server.</li>
        <li>WHEP Endpoint: Egress server receiving the initial WHEP request.</li>
        <li>WHEP Endpoint URL: URL of the WHEP endpoint that will create the WHEP resource.</li>
        <li>Media Server: WebRTC Media Server or consumer that establishes the media session with the WHEP player and delivers the media to it.</li>
        <li>WHEP Resource: Allocated resource by the WHEP endpoint for an ongoing egress session that the WHEP player can send requests for altering the session (ICE operations or termination, for example).</li>
        <li>WHEP Resource URL: URL allocated to a specific media session by the WHEP endpoint which can be used to perform operations such as terminating the session or ICE restarts.</li>
      </ul>
    </section>
    <section anchor="overview">
      <name>Overview</name>
      <t>The WebRTC-HTTP Egress Protocol (WHEP) uses an HTTP POST request to perform a single-shot SDP offer/answer so an ICE/DTLS session can be established between the WHEP Player and the streaming service endpoint (Media Server).</t>
      <t>Once the ICE/DTLS session is set up, the media will flow unidirectionally from Media Server to the WHEP Player. In order to reduce complexity, no SDP renegotiation is supported, so no tracks or streams can be added or removed once the initial SDP offer/answer over HTTP is completed.</t>
      <figure>
        <name>WHEP session setup and teardown</name>
        <artwork><![CDATA[
                                                                               
 +-------------+    +---------------+ +--------------+ +---------------+
 | WHEP Player |    | WHEP Endpoint | | Media Server | | WHEP Resource |
 +--+----------+    +---------+-----+ +------+-------+ +--------|------+
    |                         |              |                  |       
    |                         |              |                  |       
    |HTTP POST (SDP Offer)    |              |                  |       
    +------------------------>+              |                  |       
    |201 Created (SDP answer) |              |                  |       
    +<------------------------+              |                  |       
    |          ICE REQUEST                   |                  |       
    +--------------------------------------->+                  |       
    |          ICE RESPONSE                  |                  |       
    |<---------------------------------------+                  |       
    |          DTLS SETUP                    |                  |       
    |<======================================>|                  |       
    |          RTP/RTCP FLOW                 |                  |       
    +<-------------------------------------->+                  |       
    | HTTP DELETE                                               |       
    +---------------------------------------------------------->+       
    | 200 OK                                                    |       
    <-----------------------------------------------------------x       
                                                                               
]]></artwork>
      </figure>
      <t>Alternatively, there are cases in which the WHEP Player may wish the service to provide the SDP offer (for example to avoid setting up an audio and video session when only audio is supported), so in this case the initial HTTP POST request will not contain a body and the response will contain the SDP offer from the service instead. The WHEP Player will have to provide the SDP answer in a subsequent HTTP PATCH request to the WHEP resource.</t>
      <figure>
        <name>WHEP session setup and teardown</name>
        <artwork><![CDATA[
                                                                               
 +-------------+    +---------------+ +--------------+ +---------------+
 | WHEP Player |    | WHEP Endpoint | | Media Server | | WHEP Resource |
 +--+----------+    +---------+-----+ +------+-------+ +--------|------+
    |                         |              |                  |       
    |                         |              |                  |       
    |HTTP POST (empty)        |              |                  |       
    +------------------------>+              |                  |       
    |201 Created (SDP offer)  |              |                  |       
    +<------------------------+              |                  | 
    | HTTP PATCH (SDP answer)                |                  |       
    +---------------------------------------------------------->+       
    | 200 OK                                 |                  |       
    <-----------------------------------------------------------x           
    |          ICE REQUEST                   |                  |       
    +--------------------------------------->+                  |       
    |          ICE RESPONSE                  |                  |       
    |<---------------------------------------+                  |       
    |          DTLS SETUP                    |                  |       
    |<======================================>|                  |       
    |          RTP/RTCP FLOW                 |                  |       
    +<-------------------------------------->+                  |       
    | HTTP DELETE                                               |       
    +---------------------------------------------------------->+       
    | 200 OK                                                    |       
    <-----------------------------------------------------------x       
                                                                               
]]></artwork>
      </figure>
    </section>
    <section anchor="protocol-operation">
      <name>Protocol Operation</name>
      <section anchor="sdp-offer-generated-by-the-whep-player">
        <name>SDP offer generated by the WHEP player</name>
        <t>In order to set up a streaming session, the WHEP Player will generate an SDP offer according to the JSEP rules and perform an HTTP POST request to the configured WHEP Endpoint URL.</t>
        <t>The HTTP POST request will have a content type of "application/sdp" and contain the SDP offer as the body. The WHEP Endpoint will generate an SDP answer 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 resource.</t>
        <t>The SDP offer <bcp14>SHOULD</bcp14> use the "recvonly" attribute and the SDP answer <bcp14>MUST</bcp14> use "sendonly" the attribute.</t>
        <figure>
          <name>HTTP POST and PATCH doing SDP O/A example</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=msid-semantic: WMS
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=ice-options:trickle
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=bundle-only
a=extmap:4 urn:ietf:params:rtp-hdrext:sdes:mid
a=recvonly
a=rtcp-mux
a=rtpmap:111 opus/48000/2
a=fmtp:111 minptime=10;useinbandfec=1
m=video 9 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=ice-options:trickle
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-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
Accept-Patch: application/trickle-ice-sdpfrag
Content-Length: 1400
Location: https://whep.example.org/resource/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=msid-semantic: WMS *
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-rsize
a=rtpmap:111 opus/48000/2
a=fmtp:111 minptime=10;useinbandfec=1
a=msid:- d46fb922-d52a-4e9c-aa87-444eadc1521b
m=video 9 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-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>
      </section>
      <section anchor="sdp-offer-generated-by-the-whep-endpoint">
        <name>SDP offer generated by the WHEP endpoint</name>
        <t>If the WHEP player prefers the WHEP Endpoint to generate the SDP offer, the WHEP Player will send a POST request without HTTP BODY and an Accept HTTP header of "application/sdp" to the configured WHEP endpoint URL.</t>
        <t>The WHEP Endpoint will generate an SDP offer according to the JSEP rules and return a "201 Created" response with a content type of "application/sdp", the SDP offer as the body, a Location header field pointing to the newly created resource and an Expire header indicating the maximum time that the WHEP player is allowed to send the SDP answer to the WHEP Resource.</t>
        <t>The WHEP Player <bcp14>MUST</bcp14> generate an SDP answer to SDP offer provided by the WHEP Endpoint and send an HTTP PATCH request to the URL provided in the Location header for the WHEP Resource. The HTTP PATCH request will have a content type of "application/sdp" and contain the SDP answer as the body. If the SDP offer is not accepted by the WHEP player, it <bcp14>MUST</bcp14> perform an HTTP DELETE operation for terminating the session to the WHEP Resource URL.</t>
        <t>The SDP offer <bcp14>SHOULD</bcp14> use the "sendonly" attribute and the SDP answer <bcp14>MUST</bcp14> use "recvonly" attribute in this case.</t>
        <figure>
          <name>HTTP POST and PATCH doing SDP O/A example</name>
          <artwork><![CDATA[
POST /whep/endpoint HTTP/1.1
Host: whep.example.com
Content-Length: 0
Accept: application/sdp

HTTP/1.1 201 Created
Content-Type: application/sdp
Content-Length: 1400
Location: https://whep.example.com/resource/id
Expires: Wed, 27 Jul 2022 07:28:00 GMT

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=msid-semantic: WMS
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=ice-options:trickle
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=bundle-only
a=extmap:4 urn:ietf:params:rtp-hdrext:sdes:mid
a=sendonly
a=msid:- d46fb922-d52a-4e9c-aa87-444eadc1521b
a=rtcp-mux
a=rtpmap:111 opus/48000/2
a=fmtp:111 minptime=10;useinbandfec=1
m=video 9 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=ice-options:trickle
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=sendonly
a=msid:- d46fb922-d52a-4e9c-aa87-444eadc1521b
a=rtcp-mux
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

PATCH /resource/id HTTP/1.1
Host: whep.example.com
Content-Type: application/sdp
Content-Length: 1326

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=msid-semantic: WMS *
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=recvonly
a=rtcp-mux
a=rtcp-rsize
a=rtpmap:111 opus/48000/2
a=fmtp:111 minptime=10;useinbandfec=1
m=video 9 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=recvonly
a=rtcp-mux
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 204 No Content
ETag: "xyzzy"
]]></artwork>
        </figure>
        <t>If the WHEP Resource does not receive an HTTP PATCH request before the time indicated in the Expire header HTTP POST response, it <bcp14>SHOULD</bcp14> delete the resource and respond with a 404 Not Found response to any request on the WHEP Resource URL received afterwards.</t>
      </section>
      <section anchor="common-procedures">
        <name>Common procedures</name>
        <t>The WHEP Resource 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 Resource <bcp14>SHALL</bcp14> return a "409 Conflict" response to the POST request issued by the WHEP Client 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 Resource 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 set up, ICE consent freshness <xref target="RFC7675"/> will be used to detect abrupt disconnection and DTLS teardown for session termination by either side.</t>
        <t>To explicitly terminate a session, the WHEP Player <bcp14>MUST</bcp14> perform an HTTP DELETE request to the resource URL returned in the Location header field of the initial HTTP POST. Upon receiving the HTTP DELETE request, the WHEP resource 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 target="RFC7675"/> section 5.2 for immediate revocation of consent.</t>
        <t>The WHEP Endpoints <bcp14>MUST</bcp14> return an "405 Method Not Allowed" response for any HTTP GET, HEAD or PUT requests on the endpoint URL in order to reserve its usage for future versions of this protocol specification.</t>
        <t>The WHIP endpoint <bcp14>MUST</bcp14> support OPTIONS requests for Cross-Origin Resource Sharing (CORS) as defined in <xref target="FETCH"/> and it <bcp14>SHOULD</bcp14> include an "Accept-Post" header with a mime type value of "application/sdp" on the "200 OK" response to any OPTIONS request recevied as per <xref target="W3C.REC-ldp-20150226"/>.</t>
        <t>The WHEP Resources <bcp14>MUST</bcp14> return an"405 Method Not Allowed" for any HTTP GET, HEAD, POST or PUT requests on the resource URL in order to reserve its usage for future versions of this protocol specification.</t>
      </section>
      <section anchor="ice-and-nat-support">
        <name>ICE and NAT support</name>
        <t>The SDP provided by the WHEP Player <bcp14>MAY</bcp14> be sent after the full ICE gathering is complete with the full list of ICE candidates, or it <bcp14>MAY</bcp14> only contain local candidates (or even an empty list of candidates) as per <xref target="RFC8863"/>.</t>
        <t>In order to simplify the protocol, there is no support for exchanging gathered trickle candidates from Media Server ICE candidates once the SDP answer is 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. The Media Server <bcp14>MAY</bcp14> use ICE lite, while the WHEP player <bcp14>MUST</bcp14> implement full ICE.</t>
        <t>Trickle ICE and ICE restart support is <bcp14>OPTIONAL</bcp14> for a WHEP resource.</t>
        <t>If the WHEP resource supports either Trickle ICE or ICE restarts, the WHEP player <bcp14>MUST</bcp14> include an "Accept-Patch" header with a mime type value of "application/trickle-ice-sdpfrag" in the "201 Created" of the POST request that creates the WHEP resource as per <xref target="RFC5789"/> section 3.1.</t>
        <t>If the WHEP resource supports either Trickle ICE or ICE restarts, but not both, it <bcp14>MUST</bcp14> return a "405 Not Implemented" response for the HTTP PATCH requests that are not supported.</t>
        <t>If the WHEP resource does not support the PATCH method for any purpose, it <bcp14>MUST</bcp14> return a "501 Not Implemented" response, as described in <xref target="RFC9110"/> section 6.6.2.</t>
        <t>As the HTTP PATCH request sent by a WHEP player may be received out-of-order by the WHEP Resource, the WHEP Resource <bcp14>MUST</bcp14> generate a
unique strong entity-tag identifying the ICE session as per <xref target="RFC9110"/> section 2.3. 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 if the WHEP player is acting as SDP offerer, or in the HTTP PATCH response containing the SDP answer otherwise. It <bcp14>MUST</bcp14> also be returned in the "200 OK" of any PATCH request that triggers an ICE restart. Note that including the ETag in the original "201 Created" response is only <bcp14>REQUIRED</bcp14> if the WHEP resource supports ICE restarts and <bcp14>OPTIONAL</bcp14> otherwise.</t>
        <t>A WHEP Player sending a PATCH request for performing trickle ICE <bcp14>MUST</bcp14> include an "If-Match" header field with the latest known entity-tag as per <xref target="RFC9110"/> section 3.1. When the PATCH request is received by the WHEP resource, it <bcp14>MUST</bcp14> compare the indicated entity-tag value with the current entity-tag of the resource as per <xref target="RFC9110"/> section 3.1 and return a "412 Precondition Failed" response if they do not match.</t>
        <t>WHEP Players <bcp14>SHOULD NOT</bcp14> use entity-tag validation when matching a specific ICE session is not required, such as when initiating a DELETE request to terminate a session.</t>
        <t>A WHEP Resource receiving a PATCH request with new ICE candidates, but which does not perform an ICE restart, <bcp14>MUST</bcp14> return a "204 No Content" response without body. If the Media Server does not support a candidate transport or is not able to resolve the connection address, it <bcp14>MUST</bcp14> accept the HTTP request with the 204 response and silently discard the candidate.</t>
        <figure>
          <name>Trickle ICE request</name>
          <artwork><![CDATA[
PATCH /resource/id HTTP/1.1
Host: whep.example.com
If-Match: "38sdf4fdsf54:EsAw"
Content-Type: application/trickle-ice-sdpfrag
Content-Length: 548

a=ice-ufrag:EsAw
a=ice-pwd:P2uYro0UCOQ4zxjKXaWCBui1
m=audio RTP/AVP 0
a=mid:0
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.1 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>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 target="RFC9110"/> section 3.1.</t>
        <t>If the HTTP PATCH request results in an ICE restart, the WHEP resource <bcp14>SHALL</bcp14> return a "200 OK" with an "application/trickle-ice-sdpfrag" body containing the new ICE username fragment and password. The response may optionally contain the new set of ICE candidates for the Media Server and the new entity-tag correspond to the new ICE session in an ETag response header field.</t>
        <t>If the ICE request cannot be satisfied by the WHEP Resource, the WHEP resource <bcp14>SHALL</bcp14> return a "200 OK" with an "application/trickle-ice-sdpfrag" body containing the new ICE username fragment and password. 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>
        <figure>
          <name>ICE restart request</name>
          <artwork><![CDATA[
PATCH /resource/id HTTP/1.1
Host: whep.example.com
If-Match: "*"
Content-Type: application/trickle-ice-sdpfrag
Content-Length: 54

a=ice-ufrag:ysXw
a=ice-pwd:vw5LmwG4y/e6dPP/zAP9Gp5k

HTTP/1.1 200 OK
ETag: "289b31b754eaa438:ysXw"
Content-Type: application/trickle-ice-sdpfrag
Content-Length: 102

a=ice-lite
a=ice-ufrag:289b31b754eaa438
a=ice-pwd:0b66f472495ef0ccac7bda653ab6be49ea13114472a5d10a
]]></artwork>
        </figure>
        <t>Because the WHEP Player needs to know the entity-tag associated with the ICE session in order to send new ICE candidates, it <bcp14>MUST</bcp14> buffer any gathered candidates before it receives the HTTP response to the initial POST request or the PATCH request with the new entity-tag value. Once it knows the entity-tag value, the WHEP Player <bcp14>SHOULD</bcp14> send a single aggregated HTTP PATCH request with all the ICE candidates it has buffered so far.</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/pwd frags and ignore any further HTTP PATCH response received from a pending HTTP PATCH request. Clients <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 client and at the server (because of an out-of-order request), the STUN requests will contain invalid ICE information and will be rejected by the server. When this situation is detected by the WHEP Player, it <bcp14>SHOULD</bcp14> send a new ICE restart request to the server.</t>
      </section>
      <section anchor="webrtc-constraints">
        <name>WebRTC constraints</name>
        <t>In the specific case of media consumption from a streaming service, some assumptions can be made about the server-side which simplifies the WebRTC compliance burden, as detailed in WebRTC-gateway document <xref target="I-D.draft-ietf-rtcweb-gateways"/>.</t>
        <t>In order to reduce the complexity of implementing WHEP in both players and Media Servers, WHEP imposes the following restrictions regarding WebRTC usage:</t>
        <t>Both the WHEP Player and the WHEP Endpoint <bcp14>SHALL</bcp14> use SDP bundle <xref target="RFC9143"/>. Each "m=" section <bcp14>MUST</bcp14> be part of a single BUNDLE group. Hence, when a WHEP Player or a  WHEP Endpoints sends an SDP offer, it <bcp14>MUST</bcp14> include a "bundle-only" attribute in each bundled "m=" section. The WHEP player and the Media Server <bcp14>MUST</bcp14> support multiplexed media associated with the BUNDLE group as per <xref target="RFC9143"/> section 9. In addition, per <xref target="RFC9143"/> the WHEP Player and Media Server will use RTP/RTCP multiplexing for all bundled media. The WHEP Player and Media Server <bcp14>SHOULD</bcp14> include the "rtcp-mux-only" attribute in each bundled "m=" section as per <xref target="RFC8858"/>.</t>
        <t>As the codecs for a given stream may not be known by the Media Server when the WHEP Player starts watching a stream, if the WHEP Endpoint is acting as SDP answerer, it <bcp14>MUST</bcp14> include all the offered codecs that it supports in the SDP answer and not make any assumption about which will be the codec that will be actually sent.</t>
        <t>Trickle ICE and ICE restarts support is <bcp14>OPTIONAL</bcp14> for both the WHEP Players and Media Servers as explained in section 4.1.</t>
      </section>
      <section anchor="load-balancing-and-redirections">
        <name>Load balancing and redirections</name>
        <t>WHEP Endpoints and Media Servers might not be co-located on the same server, so it is possible to load balance incoming requests to different Media Servers. WHEP Players <bcp14>SHALL</bcp14> support HTTP redirection via the "307 Temporary Redirect" response as described in <xref target="RFC9110"/> section 6.4.7. The WHEP Resource URL <bcp14>MUST</bcp14> be a final one, and redirections are not required to be supported for the PATCH and DELETE requests sent to it.</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, 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.</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="I-D.draft-ietf-wish-whip"/></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>WHEP Endpoints and Resources <bcp14>MAY</bcp14> require the HTTP request to be authenticated using an HTTP Authorization header field with a Bearer token as specified in <xref target="RFC6750"/> section 2.1. 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 resource 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, JWT tokens as per <xref target="RFC6750"/> and <xref target="RFC8725"/> or a shared secret stored on a database.</t>
        <t>WHEP Endpoints and Resources could perform the authentication and authorization by encoding an authentication token within the URLs for the WHEP Endpoints or Resources instead. In case the WHEP Player is not configured to use a bearer token, the HTTP Authorization header field must not be sent in any request.</t>
      </section>
      <section anchor="protocol-extensions">
        <name>Protocol extensions</name>
        <t>In order to support future extensions to be defined for the WHEP protocol, 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, with the extension "rel" type attribute and the URI 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 Resources. WHEP Players <bcp14>MUST</bcp14> ignore any Link attribute with an unknown "rel" attribute value and WHEP Endpoints and Resources <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 side event resource for the published 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>
        <artwork><![CDATA[
HTTP/1.1 201 Created
Content-Type: application/sdp
Location: https://whep.example.org/resource/id
Link: <https://whep.ietf.org/publications/213786HF/sse>;
      rel="urn:ietf:params:whep:ext:example:server-side-events"
]]></artwork>
      </section>
    </section>
    <section anchor="security-considerations">
      <name>Security Considerations</name>
      <t>HTTPS <bcp14>SHALL</bcp14> be used in order to preserve the WebRTC security model.</t>
    </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-registry">
        <name>Registration of WHEP URN Sub-namespace and whep Registry</name>
        <t>IANA has added an entry to the "IETF URN Sub-namespace for Registered Protocol Parameter Identifiers" registry and created 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 has created the "System for Cross-domain Identity Management (WHEP) Schema URIs" registry, which is used to manage entries within the "urn:ietf:params:whep" namespace.  The registry description is as follows:</t>
        <ul spacing="normal">
          <li>Registry name: WHEP</li>
          <li>Specification: this document (RFC TBD)</li>
          <li>Repository: See Section <xref target="urn-whep-subspace"/></li>
          <li>Index value: See Section <xref target="urn-whep-subspace"/></li>
        </ul>
      </section>
      <section anchor="urn-whep-subspace">
        <name>URN Sub-namespace for whep</name>
        <t>whep Endpoint utilize URIs to identify the supported whep protocol extensions on the "rel" attribute of the Link header as defined in <xref target="protocol-extensions"/>.
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>
          <artwork><![CDATA[
  The Namespace ID "whep" has been assigned.
]]></artwork>
          <t>Registration Information:</t>
          <artwork><![CDATA[
  Version: 1

  Date: TBD
]]></artwork>
          <t>Declared registrant of the namespace:</t>
          <artwork><![CDATA[
  The Internet Engineering Task Force.
]]></artwork>
          <t>Designated contact:</t>
          <artwork><![CDATA[
   A designated expert will monitor the whep public mailing list, "wish@ietf.org".
]]></artwork>
          <t>Declaration of Syntactic Structure:</t>
          <artwork><![CDATA[
  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}

  The keywords have the following meaning:

  - type: The entity type. This specification only defines the "ext" type.

  - name: A required US-ASCII string that conforms to the URN syntax requirements (see {{RFC8141}}) and defines a major namespace of a whep protocol extension. The value MAY also be an industry name or organization name.

  - other: Any US-ASCII string that conforms to the URN syntax requirements (see {{RFC8141}}) and defines the sub-namespace (which MAY be further broken down in namespaces delimited by colons) as needed to uniquely identify an whep protocol extension.
]]></artwork>
          <t>Relevant Ancillary Documentation:</t>
          <artwork><![CDATA[
  None
]]></artwork>
          <t>Identifier Uniqueness Considerations:</t>
          <artwork><![CDATA[
  The designated contact shall be responsible for reviewing and enforcing uniqueness.
]]></artwork>
          <t>Identifier Persistence Considerations:</t>
          <artwork><![CDATA[
  Once a name has been allocated, it MUST NOT be reallocated for a different purpose.
  The rules provided for assignments of values within a sub-namespace MUST be constructed so that the meanings of values cannot change.
  This registration mechanism is not appropriate for naming values whose meanings may change over time.
]]></artwork>
          <t>Process of Identifier Assignment:</t>
          <artwork><![CDATA[
  Namespace with type "ext" (e.g., "urn:ietf:params:whep:ext") is reserved for IETF-approved whep specifications.
]]></artwork>
          <t>Process of Identifier Resolution:</t>
          <artwork><![CDATA[
  None specified.
]]></artwork>
          <t>Rules for Lexical Equivalence:</t>
          <artwork><![CDATA[
  No special considerations; the rules for lexical equivalence specified in {{RFC8141}} apply.
]]></artwork>
          <t>Conformance with URN Syntax:</t>
          <artwork><![CDATA[
  No special considerations.
]]></artwork>
          <t>Validation Mechanism:</t>
          <artwork><![CDATA[
  None specified.
]]></artwork>
          <t>Scope:</t>
          <artwork><![CDATA[
  Global.
]]></artwork>
        </section>
      </section>
    </section>
    <section anchor="acknowledgements">
      <name>Acknowledgements</name>
    </section>
  </middle>
  <back>
    <references>
      <name>References</name>
      <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="RFC8829" target="https://www.rfc-editor.org/info/rfc8829">
          <front>
            <title>JavaScript Session Establishment Protocol (JSEP)</title>
            <author fullname="J. Uberti" initials="J." surname="Uberti">
              <organization/>
            </author>
            <author fullname="C. Jennings" initials="C." surname="Jennings">
              <organization/>
            </author>
            <author fullname="E. Rescorla" initials="E." role="editor" surname="Rescorla">
              <organization/>
            </author>
            <date month="January" year="2021"/>
            <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>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="8829"/>
          <seriesInfo name="DOI" value="10.17487/RFC8829"/>
        </reference>
        <reference anchor="RFC3264" target="https://www.rfc-editor.org/info/rfc3264">
          <front>
            <title>An Offer/Answer Model with Session Description Protocol (SDP)</title>
            <author fullname="J. Rosenberg" initials="J." surname="Rosenberg">
              <organization/>
            </author>
            <author fullname="H. Schulzrinne" initials="H." surname="Schulzrinne">
              <organization/>
            </author>
            <date month="June" 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="RFC2119" target="https://www.rfc-editor.org/info/rfc2119">
          <front>
            <title>Key words for use in RFCs to Indicate Requirement Levels</title>
            <author fullname="S. Bradner" initials="S." surname="Bradner">
              <organization/>
            </author>
            <date month="March" year="1997"/>
            <abstract>
              <t>In many standards track documents several words are used to signify the requirements in the specification.  These words are often capitalized. This document defines these words as they should be interpreted in IETF documents.  This document specifies an Internet Best Current Practices for the Internet Community, and requests discussion and suggestions for improvements.</t>
            </abstract>
          </front>
          <seriesInfo name="BCP" value="14"/>
          <seriesInfo name="RFC" value="2119"/>
          <seriesInfo name="DOI" value="10.17487/RFC2119"/>
        </reference>
        <reference anchor="RFC8174" target="https://www.rfc-editor.org/info/rfc8174">
          <front>
            <title>Ambiguity of Uppercase vs Lowercase in RFC 2119 Key Words</title>
            <author fullname="B. Leiba" initials="B." surname="Leiba">
              <organization/>
            </author>
            <date month="May" year="2017"/>
            <abstract>
              <t>RFC 2119 specifies common key words that may be used in protocol  specifications.  This document aims to reduce the ambiguity by clarifying that only UPPERCASE usage of the key words have the  defined special meanings.</t>
            </abstract>
          </front>
          <seriesInfo name="BCP" value="14"/>
          <seriesInfo name="RFC" value="8174"/>
          <seriesInfo name="DOI" value="10.17487/RFC8174"/>
        </reference>
        <reference anchor="RFC7675" target="https://www.rfc-editor.org/info/rfc7675">
          <front>
            <title>Session Traversal Utilities for NAT (STUN) Usage for Consent Freshness</title>
            <author fullname="M. Perumal" initials="M." surname="Perumal">
              <organization/>
            </author>
            <author fullname="D. Wing" initials="D." surname="Wing">
              <organization/>
            </author>
            <author fullname="R. Ravindranath" initials="R." surname="Ravindranath">
              <organization/>
            </author>
            <author fullname="T. Reddy" initials="T." surname="Reddy">
              <organization/>
            </author>
            <author fullname="M. Thomson" initials="M." surname="Thomson">
              <organization/>
            </author>
            <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="RFC8863" target="https://www.rfc-editor.org/info/rfc8863">
          <front>
            <title>Interactive Connectivity Establishment Patiently Awaiting Connectivity (ICE PAC)</title>
            <author fullname="C. Holmberg" initials="C." surname="Holmberg">
              <organization/>
            </author>
            <author fullname="J. Uberti" initials="J." surname="Uberti">
              <organization/>
            </author>
            <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="RFC5789" target="https://www.rfc-editor.org/info/rfc5789">
          <front>
            <title>PATCH Method for HTTP</title>
            <author fullname="L. Dusseault" initials="L." surname="Dusseault">
              <organization/>
            </author>
            <author fullname="J. Snell" initials="J." surname="Snell">
              <organization/>
            </author>
            <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="RFC9110" target="https://www.rfc-editor.org/info/rfc9110">
          <front>
            <title>HTTP Semantics</title>
            <author fullname="R. Fielding" initials="R." role="editor" surname="Fielding">
              <organization/>
            </author>
            <author fullname="M. Nottingham" initials="M." role="editor" surname="Nottingham">
              <organization/>
            </author>
            <author fullname="J. Reschke" initials="J." role="editor" surname="Reschke">
              <organization/>
            </author>
            <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="RFC9143" target="https://www.rfc-editor.org/info/rfc9143">
          <front>
            <title>Negotiating Media Multiplexing Using the Session Description Protocol (SDP)</title>
            <author fullname="C. Holmberg" initials="C." surname="Holmberg">
              <organization/>
            </author>
            <author fullname="H. Alvestrand" initials="H." surname="Alvestrand">
              <organization/>
            </author>
            <author fullname="C. Jennings" initials="C." surname="Jennings">
              <organization/>
            </author>
            <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" target="https://www.rfc-editor.org/info/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">
              <organization/>
            </author>
            <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="RFC8288" target="https://www.rfc-editor.org/info/rfc8288">
          <front>
            <title>Web Linking</title>
            <author fullname="M. Nottingham" initials="M." surname="Nottingham">
              <organization/>
            </author>
            <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" target="https://www.rfc-editor.org/info/rfc6750">
          <front>
            <title>The OAuth 2.0 Authorization Framework: Bearer Token Usage</title>
            <author fullname="M. Jones" initials="M." surname="Jones">
              <organization/>
            </author>
            <author fullname="D. Hardt" initials="D." surname="Hardt">
              <organization/>
            </author>
            <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" target="https://www.rfc-editor.org/info/rfc8725">
          <front>
            <title>JSON Web Token Best Current Practices</title>
            <author fullname="Y. Sheffer" initials="Y." surname="Sheffer">
              <organization/>
            </author>
            <author fullname="D. Hardt" initials="D." surname="Hardt">
              <organization/>
            </author>
            <author fullname="M. Jones" initials="M." surname="Jones">
              <organization/>
            </author>
            <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="RFC3553" target="https://www.rfc-editor.org/info/rfc3553">
          <front>
            <title>An IETF URN Sub-namespace for Registered Protocol Parameters</title>
            <author fullname="M. Mealling" initials="M." surname="Mealling">
              <organization/>
            </author>
            <author fullname="L. Masinter" initials="L." surname="Masinter">
              <organization/>
            </author>
            <author fullname="T. Hardie" initials="T." surname="Hardie">
              <organization/>
            </author>
            <author fullname="G. Klyne" initials="G." surname="Klyne">
              <organization/>
            </author>
            <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>
        <name>Informative References</name>
        <reference anchor="RFC3261" target="https://www.rfc-editor.org/info/rfc3261">
          <front>
            <title>SIP: Session Initiation Protocol</title>
            <author fullname="J. Rosenberg" initials="J." surname="Rosenberg">
              <organization/>
            </author>
            <author fullname="H. Schulzrinne" initials="H." surname="Schulzrinne">
              <organization/>
            </author>
            <author fullname="G. Camarillo" initials="G." surname="Camarillo">
              <organization/>
            </author>
            <author fullname="A. Johnston" initials="A." surname="Johnston">
              <organization/>
            </author>
            <author fullname="J. Peterson" initials="J." surname="Peterson">
              <organization/>
            </author>
            <author fullname="R. Sparks" initials="R." surname="Sparks">
              <organization/>
            </author>
            <author fullname="M. Handley" initials="M." surname="Handley">
              <organization/>
            </author>
            <author fullname="E. Schooler" initials="E." surname="Schooler">
              <organization/>
            </author>
            <date month="June" 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" target="https://www.rfc-editor.org/info/rfc6120">
          <front>
            <title>Extensible Messaging and Presence Protocol (XMPP): Core</title>
            <author fullname="P. Saint-Andre" initials="P." surname="Saint-Andre">
              <organization/>
            </author>
            <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" target="https://www.rfc-editor.org/info/rfc7826">
          <front>
            <title>Real-Time Streaming Protocol Version 2.0</title>
            <author fullname="H. Schulzrinne" initials="H." surname="Schulzrinne">
              <organization/>
            </author>
            <author fullname="A. Rao" initials="A." surname="Rao">
              <organization/>
            </author>
            <author fullname="R. Lanphier" initials="R." surname="Lanphier">
              <organization/>
            </author>
            <author fullname="M. Westerlund" initials="M." surname="Westerlund">
              <organization/>
            </author>
            <author fullname="M. Stiemerling" initials="M." role="editor" surname="Stiemerling">
              <organization/>
            </author>
            <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>
        <reference anchor="I-D.draft-ietf-wish-whip" target="https://www.ietf.org/archive/id/draft-ietf-wish-whip-05.txt">
          <front>
            <title>WebRTC-HTTP ingestion protocol (WHIP)</title>
            <author fullname="Sergio Garcia Murillo" initials="S. G." surname="Murillo">
              <organization>Millicast</organization>
            </author>
            <author fullname="Dr. Alex Gouaillard" initials="A." surname="Gouaillard">
              <organization>CoSMo Software</organization>
            </author>
            <date day="19" month="October" year="2022"/>
            <abstract>
              <t>   This document describes a simple HTTP-based protocol that will allow
   WebRTC-based ingestion of content into streaming services and/or
   CDNs.

              </t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-ietf-wish-whip-05"/>
        </reference>
        <reference anchor="I-D.draft-ietf-rtcweb-gateways" target="https://www.ietf.org/archive/id/draft-ietf-rtcweb-gateways-02.txt">
          <front>
            <title>WebRTC Gateways</title>
            <author fullname="Harald T. Alvestrand" initials="H. T." surname="Alvestrand">
              <organization>Google</organization>
            </author>
            <author fullname="Uwe Rauschenbach" initials="U." surname="Rauschenbach">
              <organization>Nokia Networks</organization>
            </author>
            <date day="21" month="January" year="2016"/>
            <abstract>
              <t>   This document describes interoperability considerations for a class
   of WebRTC-compatible endpoints called "WebRTC gateways", which
   interconnect between WebRTC endpoints and devices that are not WebRTC
   endpoints.


              </t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-ietf-rtcweb-gateways-02"/>
        </reference>
        <reference anchor="RFC8141" target="https://www.rfc-editor.org/info/rfc8141">
          <front>
            <title>Uniform Resource Names (URNs)</title>
            <author fullname="P. Saint-Andre" initials="P." surname="Saint-Andre">
              <organization/>
            </author>
            <author fullname="J. Klensin" initials="J." surname="Klensin">
              <organization/>
            </author>
            <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>
      </references>
    </references>
  </back>
  <!-- ##markdown-source:
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
iAAA

-->

</rfc>
