<?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.17 (Ruby 3.0.2) -->
<rfc xmlns:xi="http://www.w3.org/2001/XInclude" category="std" consensus="true" docName="draft-gupta-httpbis-per-resource-events-01" ipr="trust200902" sortRefs="true" submissionType="IETF" symRefs="true" tocInclude="true" version="3">
  <!-- xml2rfc v2v3 conversion 3.22.0 -->
  <front>
    <title abbrev="PREP">Per Resource Events</title>
    <seriesInfo name="Internet-Draft" value="draft-gupta-httpbis-per-resource-events-01"/>
    <author fullname="Rahul Gupta">
      <organization/>
      <address>
        <email>cxres+ietf@protonmail.com</email>
      </address>
    </author>
    <date day="16" month="July" year="2024"/>
    <area>Applications and Real-Time</area>
    <workgroup>HTTP</workgroup>
    <keyword>notifications</keyword>
    <keyword>pubsub</keyword>
    <abstract>
      <?line 73?>

<t>Per Resource Events is a minimal protocol built on top of HTTP that allows clients to receive <iref item="notification"/><xref format="none" target="notification">notifications</xref> directly from any resource of interest. The Per Resource Events Protocol (PREP) is predicated on the idea that the most intuitive source for <iref item="notification"/><xref format="none" target="notification">notifications</xref> about changes made to a resource is the resource itself.</t>
    </abstract>
    <note removeInRFC="true">
      <name>About This Document</name>
      <t>
        The latest revision of this draft can be found at <eref target="https://CxRes.github.io/prep/draft-gupta-httpbis-per-resource-events.html"/>.
        Status information for this document may be found at <eref target="https://datatracker.ietf.org/doc/draft-gupta-httpbis-per-resource-events/"/>.
      </t>
      <t>
        Discussion of this document takes place on the
        HTTP Working Group mailing list (<eref target="mailto:ietf-http-wg@w3.org"/>),
        which is archived at <eref target="https://lists.w3.org/Archives/Public/ietf-http-wg/"/>.
      </t>
      <t>Source for this draft and an issue tracker can be found at
        <eref target="https://github.com/CxRes/prep"/>.</t>
    </note>
  </front>
  <middle>
    <?line 78?>

<!-- Informative Sections -->

<section anchor="introduction">
      <name>Introduction</name>
      <t>The Per Resource Events Protocol defines a minimal HTTP-based framework by which clients can securely receive update <iref item="notification"/><xref format="none" target="notification">notifications</xref> directly from any resource of interest on the Open Web Platform.</t>
      <section anchor="motivation">
        <name>Motivation</name>
        <t>HTTP was originally designed to transfer a static documents within a single request and response. If the document changes, HTTP does not automatically update clients with the new versions. This design was adequate for web pages that were mostly static and written by hand.</t>
        <t>But web-applications today are dynamic. They provide (near-)instantaneous updates across multiple clients and servers. The many workarounds developed over the years to provide real-time updates over HTTP have often proven to be inadequate. Web programmers instead resort to implementing custom messaging systems over alternate protocols such as WebSockets, which requires additional layers of code in the form of non-standard JavaScript frameworks to synchronize changes of state.</t>
        <t>Per Resource Events is a minimal protocol built on top of HTTP that allows clients to receive <iref item="notification"/><xref format="none" target="notification">notifications</xref> directly from a resource of interest. Unlike other HTTP based solutions, Per Resource Events Protocol supports the use of arbitrary media-types for <iref item="notification"/><xref format="none" target="notification">notifications</xref>, which can be negotiated just like representations; thus giving implementers a lot of flexibility to customize <iref item="notification"/><xref format="none" target="notification">notifications</xref> according to the needs of their application.</t>
      </section>
      <section anchor="how-it-works">
        <name>How it Works</name>
        <section anchor="plain-request" numbered="false" toc="exclude">
          <name/>
          <t>Consider an ordinary HTTP <tt>GET</tt> request:</t>
          <figure anchor="plain-request-example">
            <name>A sample HTTP `GET` request</name>
            <artwork name="plain-request.http"><![CDATA[
GET /foo HTTP/1.1
Host: example.org
]]></artwork>
          </figure>
        </section>
        <section anchor="simple-prep-request" numbered="false" toc="exclude">
          <name/>
          <t>A client application that wishes to receive PREP <iref item="notification"/><xref format="none" target="notification">notifications</xref> from a resource simply makes a <tt>GET</tt> request with just one additional <iref item="Accept-Events"/><xref format="none" target="accept-events-header"><tt>Accept-Events</tt></xref> header.</t>
          <figure anchor="minimal-request-example">
            <name>A minimal PREP notifications request</name>
            <artwork name="minimal-request.http"><![CDATA[
GET /foo HTTP/1.1
Host: example.org
Accept-Events: "prep"
]]></artwork>
          </figure>
          <t>Additional parameters might be added to the <iref item="Accept-Events"/><xref format="none" target="accept-events-header"><tt>Accept-Events</tt></xref> header to negotiate the form of <iref item="notification"/><xref format="none" target="notification">notifications</xref> as discussed in <xref target="request"/>, <xref format="title" target="request"/>.</t>
        </section>
        <section anchor="plain-response" numbered="false" toc="exclude">
          <name/>
          <t>If a server does not implement the Per Resource Events Protocol, the <iref item="Accept-Events"/><xref format="none" target="accept-events-header"><tt>Accept-Events</tt></xref> header in a <tt>GET</tt> request is simply ignored. The resource returns the current representation thereby preserving backwards compatibility. Let us presume this response is:</t>
          <figure anchor="plain-response-example">
            <name>Response to the sample HTTP `GET` request</name>
            <artwork name="plain-response.http"><![CDATA[
HTTP/1.1 200 OK
Last-Modified: Sat, 1 April 2023 10:11:12 GMT
Transfer-Encoding: chunked
ETag: 1234abcd
Content-Type: text/plain

Hello World!
]]></artwork>
          </figure>
        </section>
        <section anchor="simple-prep-response" numbered="false" toc="exclude">
          <name/>
          <t>However, if the server supports the Per Resource Events Protocol, it sends a multipart response with the current representation followed any <iref item="notification"/><xref format="none" target="notification">notifications</xref>.</t>
          <section anchor="simple-prep-response-headers" numbered="false" toc="exclude">
            <name/>
            <t>The response now includes an additional <iref item="Events"/><xref format="none" target="events-header"><tt>Events</tt></xref> headers which specifies <tt>prep</tt> as the <iref item="notification"/><xref format="none" target="notification">notifications</xref> protocol and a status for the <iref item="notification"/><xref format="none" target="notification">notifications</xref> response. As a courtesy, the response also includes the <tt>Vary</tt> header to indicate that response was influenced by the <tt>Accept-Events</tt> header in the request and the <iref item="Accept-Events"/><xref format="none" target="accept-events-header"><tt>Accept-Events</tt></xref> header itself for reactive negotiation in the future.</t>
            <t>The <tt>Content-type</tt> header now indicates a response body of <tt>multipart/mixed</tt> to reflect the two part response. Thus, we have the following response headers:</t>
            <figure anchor="intro-response-headers">
              <name>Response with PREP Notifications - Headers</name>
              <artwork name="intro-response-headers.http"><![CDATA[
HTTP/1.1 200 OK
Last-Modified: Sat, 1 April 2023 10:11:12 GMT
Transfer-Encoding: chunked
ETag: 1234abcd
Events: protocol="prep", status=200
Vary: Accept-Events
Accept-Events: "prep"; accept="message/rfc822"
Content-Type: multipart/mixed; boundary="MAIN-SEPARATOR"
]]></artwork>
            </figure>
          </section>
          <section anchor="simple-prep-response-current-representation" numbered="false" toc="exclude">
            <name/>
            <t>The first part of this multipart response is the current representation of the resource:</t>
            <figure anchor="intro-response-current-representation">
              <name>Response with PREP Notifications - Current Representation</name>
              <artwork name="intro-response-current-representation.http"><![CDATA[
--MAIN SEPARATOR
Content-Type: text/plain

Hello World!
]]></artwork>
            </figure>
            <t>The client can request for this to be skipped by specifying a <tt>Last-Event-Id</tt> header set either to the ID of the previous representation or <tt>*</tt> as described in <xref target="request"/>.</t>
          </section>
          <section anchor="simple-prep-response-notification" numbered="false" toc="exclude">
            <name/>
            <t>The second part of this multipart response is itself a multipart message that contains <iref item="notification"/><xref format="none" target="notification">notifications</xref>. Upon a resource event, a <iref item="notification"/><xref format="none" target="notification">notification</xref> is transmitted as a part of this multipart message.</t>
            <t>By default, <iref item="notification"/><xref format="none" target="notification">notifications</xref> are sent in the <tt>message/rfc822</tt> format (which is structurally identical to a HTTP/1.1 message) with some additional semantics as specified in <xref target="rfc822-semantics"/>. Alternate formats and semantics might be negotiated using the <iref item="Accept-Events"/><xref format="none" target="accept-events-header"><tt>Accept-Events</tt></xref> header.</t>
            <t>The response stream is closed when the time limit for <iref item="notification"/><xref format="none" target="notification">notification</xref> has elapsed or immediately after the resource is deleted as in the example below:</t>
            <figure anchor="intro-response-notifications">
              <name>Response with PREP Notifications - Notifications</name>
              <artwork name="intro-response-notifications.http"><![CDATA[
--MAIN-SEPARATOR
Content-Type: multipart/digest; boundary="MESSAGE-SEPARATOR"

--MESSAGE-SEPARATOR

Method: PUT
Date: Sat, 1 April 2023 10:11:12 GMT
Event-ID: 456
E-tag: 6789wxyz


--MESSAGE-SEPARATOR

Method: DELETE
Date: Sat, 1 April 2023 10:11:12 GMT
Event-ID: 789


--MESSAGE-SEPARATOR--
--MAIN-SEPARATOR--
]]></artwork>
            </figure>
          </section>
          <section anchor="simple-prep-response-complete" numbered="false" toc="exclude">
            <name/>
            <t>Together, the complete response with PREP <iref item="notification"/><xref format="none" target="notification">notifications</xref> is:</t>
            <figure anchor="intro-response">
              <name>Complete Response</name>
              <artwork name="intro-response.http"><![CDATA[
HTTP/1.1 200 OK
Last-Modified: Sat, 1 April 2023 10:11:12 GMT
Transfer-Encoding: chunked
ETag: 1234abcd
Events: protocol="prep", status=200
Vary: Accept-Events
Accept-Events: "prep"; accept="message/rfc822"
Content-Type: multipart/mixed; boundary="MAIN-SEPARATOR"

--MAIN SEPARATOR
Content-Type: text/plain

Hello World!

--MAIN-SEPARATOR
Content-Type: multipart/digest; boundary="MESSAGE-SEPARATOR"

--MESSAGE-SEPARATOR

Method: PUT
Date: Sat, 1 April 2023 10:11:12 GMT
Event-ID: 456
E-tag: 6789wxyz


--MESSAGE-SEPARATOR

Method: DELETE
Date: Sat, 1 April 2023 10:11:12 GMT
Event-ID: 789


--MESSAGE-SEPARATOR--
--MAIN-SEPARATOR--
]]></artwork>
            </figure>
          </section>
        </section>
      </section>
      <section anchor="scope">
        <name>Scope</name>
        <t>The Per Resource Events Protocol specifies:</t>
        <ul spacing="normal">
          <li>
            <t>a mechanism for the discovery of <iref item="notification"/><xref format="none" target="notification">notification</xref> capabilities per resource,</t>
          </li>
          <li>
            <t>a mechanism to request <iref item="notification"/><xref format="none" target="notification">notifications</xref> from a resource,</t>
          </li>
          <li>
            <t>representation and semantics for the response that transmits <iref item="notification"/><xref format="none" target="notification">notifications</xref>,</t>
          </li>
          <li>
            <t>a default representation for <iref item="notification"/><xref format="none" target="notification">notifications</xref> and associated semantics when used to transmit <iref item="notification"/><xref format="none" target="notification">notifications</xref>.</t>
          </li>
        </ul>
        <t>The Per Resource Events Protocol does not specify:</t>
        <ul spacing="normal">
          <li>
            <t>a specific authentication and authorization mechanism to be used with the Per Resource Events Protocol. Implementations are encouraged to use existing approaches for authentication and authorization.</t>
          </li>
          <li>
            <t>representation and semantics for <iref item="notification"/><xref format="none" target="notification">notifications</xref> (other than the default case).
            </t>
            <ul spacing="normal">
              <li>
                <t>Implementations are free to use any media-type for <iref item="notification"/><xref format="none" target="notification">notifications</xref>, which can be negotiated just like representations.</t>
              </li>
              <li>
                <t>Implementations are also free to define additional semantics for a given media-type, when used to transmit <iref item="notification"/><xref format="none" target="notification">notifications</xref> using the Per Resource Events Protocol.</t>
              </li>
            </ul>
          </li>
        </ul>
      </section>
      <section anchor="intended-audience">
        <name>Audience</name>
        <t>This specification is for:</t>
        <ul spacing="normal">
          <li>
            <t><eref target="http://data.europa.eu/esco/occupation/a7c1d23d-aeca-4bee-9a08-5993ed98b135">Server developers</eref> who wish to enable clients to listen for updates to particular resources.</t>
          </li>
          <li>
            <t><eref target="http://data.europa.eu/esco/occupation/c40a2919-48a9-40ea-b506-1f34f693496d">Application developers</eref> who wish to implement a client to listen for updates to particular resources.</t>
          </li>
        </ul>
      </section>
    </section>
    <section anchor="design">
      <name>Design</name>
      <t>The Per Resource Events Protocol is predicated on a resource being the most intuitive source for <iref item="notification"/><xref format="none" target="notification">notifications</xref> about its own updates.</t>
      <t>This is unlike other <iref item="notification"/><xref format="none" target="notification">notification</xref> protocols that require additional resources to be specifically dedicated as endpoints for delivering <iref item="notification"/><xref format="none" target="notification">notifications</xref>. Servers that provide updates are forced to maintain these additional endpoints and clients that consume these updates have to co-ordinate data between the endpoint and a resource of interest.</t>
      <t>By giving every resource the ability to send <iref item="notification"/><xref format="none" target="notification">notifications</xref> when it updates, the Per Resource Events Protocol aims to reduce the complexity of  both servers and clients implementing <iref item="notification"/><xref format="none" target="notification">notifications</xref>; thus, making it easier for developers to build and maintain real-time applications.</t>
      <section anchor="principles">
        <name>Principles</name>
        <t>The Per Resource Events Protocol treats <iref item="notification"/><xref format="none" target="notification">notifications</xref> as a temporally extended representation of any resource. That is, a representation can describe not (just) the state of the resource but events on the resource. With HTTP allowing representations to provide a potentially unbounded stream of data, the Per Resource Events Protocol is able to communicate events on the resource as <iref item="notification"/><xref format="none" target="notification">notifications</xref>.</t>
      </section>
      <section anchor="goals">
        <name>Goals</name>
        <t>The goals of the Per Resource Events Protocol are:</t>
        <ul spacing="normal">
          <li>
            <t>to provide <iref item="notification"/><xref format="none" target="notification">notifications</xref> only using the HTTP protocol <eref target="https://www.rfc-editor.org/info/std97">STD97</eref> <xref target="HTTP"/> so that the clients are able to request for update <iref item="notification"/><xref format="none" target="notification">notifications</xref> using the Fetch API <xref target="FETCH"/>.</t>
          </li>
          <li>
            <t>to provide updates directly from the resource of interest, obliviating the need to connect to another endpoint for <iref item="notification"/><xref format="none" target="notification">notifications</xref>, minimizing round-trips between clients and servers and the need to co-ordinate responses between a resource and the endpoint.</t>
          </li>
          <li>
            <t>to allow arbitrary representations for <iref item="notification"/><xref format="none" target="notification">notifications</xref>. Implementers shall be able to provide <iref item="notification"/><xref format="none" target="notification">notifications</xref> that are potentially more expressive when compared to existing HTTP based messaging protocols such as Server Sent Events <xref target="SSE"/>.</t>
          </li>
        </ul>
      </section>
      <section anchor="constraints">
        <name>Constraints</name>
        <t>To the extent feasible, the Per Resource Events Protocol:</t>
        <ul spacing="normal">
          <li>
            <t>adheres to established practices and conventions. In particular, every attempt has been made to reuse existing protocols and specifications. Implementers shall be able to repurpose existing tools and libraries for implementing this specification.</t>
          </li>
          <li>
            <t>conforms to the REST Architectural Style <xref target="REST"/> and best practices for Building Protocols with HTTP <xref target="RFC9205"/>. This specification can, thus, be used to extend the capabilities of any existing HTTP resource to provide <iref item="notification"/><xref format="none" target="notification">notifications</xref>. Implementers shall be able to scale <iref item="notification"/><xref format="none" target="notification">notifications</xref> along with their data/applications.
<!--
  See my original comment on the Solid/Specification Gitter channel on 24 April 2020
  https://matrix.to/#/!PlIOdBsCTDRSCxsTGA:gitter.im/$VgCcuq2HbpLKJvxIw4witAUOsqcdhC98glgzqVI1WOY?via=gitter.im
-->
            </t>
          </li>
        </ul>
      </section>
      <section anchor="known-limitations">
        <name>Known Limitations</name>
        <t>The Per Resource Events Protocol only allows <iref item="notification"/><xref format="none" target="notification">notifications</xref> to be sent for events on a given resource. It is not possible for resources to send <iref item="notification"/><xref format="none" target="notification">notifications</xref> for arbitrary events such as state changes on multiple resources or combinations thereof. Implementations using Per Resource Events Protocol have to create separate resources to realize such <iref item="notification"/><xref format="none" target="notification">notification</xref> endpoints. But this is no different from APIs built on top of existing messaging protocols (See, for example, <xref target="WS"/> and <xref target="WEBSUB"/>).</t>
        <t>Due to the limits on connections per domain, the Per Resource Events Protocol is not suitable for use with HTTP/1.1, especially when providing <iref item="notification"/><xref format="none" target="notification">notifications</xref> for multiple resource from the same domain that might be accessed simultaneously. This limitation is identical to that of other HTTP based streaming based protocols such as Server-Sent Events <xref target="SSE"/>. Implementations are strongly encouraged to adopt HTTP/2 (or later) and implement mitigation strategies, such as to maximize the number of concurrent connections and to provide alternate locations for resources on different domains.</t>
        <!-- Conformance Sections -->

</section>
    </section>
    <section anchor="conformance">
      <name>Conformance</name>
      <section anchor="document-conventions">
        <name>Document Conventions</name>
        <t>All assertions, diagrams, examples and notes in this specification are non-normative.</t>
      </section>
      <section anchor="requirements-notation">
        <name>Requirements Notation</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="classes-of-products">
        <name>Classes of Products</name>
        <t>The Per Resource Events Protocol identifies the following Classes of Products for conforming implementations. These products are referenced throughout this specification.</t>
        <dl>
          <dt anchor="resource-server">Resource Server</dt>
          <dd>
            <t>that builds on HTTP origin server (<xref section="3.6" sectionFormat="comma" target="HTTP"/>) by defining header fields (<xref section="6.3" sectionFormat="comma" target="HTTP"/>) and media types (<xref section="8.3.1" sectionFormat="comma" target="HTTP"/>).</t>
          </dd>
          <dt anchor="application-client">Application Client</dt>
          <dd>
            <t>that builds on HTTP user agent (<xref section="3.5" sectionFormat="comma" target="HTTP"/>) by defining behaviour in terms of fetching <xref target="FETCH"/> across the platform.</t>
          </dd>
        </dl>
      </section>
      <section anchor="interoperability">
        <name>Interoperability</name>
        <t>Interoperability occurs between <xref target="interoperability-1">Application Client—Resource Server</xref> as defined by the Per Resource Events Protocol.</t>
        <dl>
          <dt anchor="interoperability-1">Application Client—Resource Server Interoperability</dt>
          <dd>
            <t>Interoperability of implementations for <iref item="application client"/><xref format="none" target="application-client">application clients</xref> and <iref item="resource server"/><xref format="none" target="resource-server">resource servers</xref> is tested by evaluating an implementation's ability to request and respond to HTTP messages that conform to the Per Resource Events Protocol.</t>
          </dd>
        </dl>
      </section>
      <section anchor="terminology">
        <name>Terminology</name>
        <t>The following terms are defined:</t>
        <dl>
          <dt anchor="notification"><iref item="notification"/><xref format="none" target="notification">Notification</xref></dt>
          <dd>
            <t>A message sent to <iref item="application client"/><xref format="none" target="application-client">application clients</xref> (that had previously requested it) when an HTTP request made on a resource fulfils some specified criteria.</t>
          </dd>
          <dt anchor="base-response">Base Response</dt>
          <dd>
            <t>The response that would have been returned, were <iref item="notification"/><xref format="none" target="notification">notifications</xref> not requested for, in an otherwise identical HTTP request.</t>
          </dd>
          <dt anchor="event-field">Event Field</dt>
          <dd>
            <t>A parameter for a protocol item in the <iref item="Accept-Events"/><xref format="none" target="accept-events-header"><tt>Accept-Events</tt></xref> header field or a member of the <iref item="Events"/><xref format="none" target="events-header"><tt>Events</tt></xref> header field.</t>
          </dd>
        </dl>
        <!-- Normative Sections -->

</section>
    </section>
    <section anchor="header-fields">
      <name>Header Fields</name>
      <t>The Per Resource Events Protocol introduces new header fields. These header fields are not specific to the Per Resource Events Protocol. They can be used by other protocols that augment resources with the ability to send <iref item="notification"/><xref format="none" target="notification">notifications</xref>.</t>
      <t>Protocols <bcp14>MUST</bcp14> ensure that the semantics be so defined that these header fields are safely ignored by recipients that do not recognize them (<xref section="5.1" sectionFormat="comma" target="HTTP"/>).</t>
      <aside>
        <t>* <em>This specification uses a modified version of Structured Fields (<xref target="HTTP-SF"/>) that allows parameters to also have as value, a bare array of Items.</em></t>
      </aside>
      <section anchor="accept-events-header">
        <name>Accept-Events</name>
        <iref item="Accept-Events" primary="true"/>
        <t>The <tt>Accept-Events</tt> header field can be used by <iref item="application client"/><xref format="none" target="application-client">application clients</xref> to specify their preferred protocol for receiving <iref item="notification"/><xref format="none" target="notification">notifications</xref>. For example, the <tt>Accept-Events</tt> header field can be used to indicate that the request is specifically limited to a small set of desired protocols, as in the case for <iref item="notification"/><xref format="none" target="notification">notifications</xref> with the Per Resource Events Protocol.</t>
        <t>When sent by a <iref item="resource server"/><xref format="none" target="resource-server">resource server</xref> in a response, the <tt>Accept-Events</tt> header field provides information about which <iref item="notification"/><xref format="none" target="notification">notification</xref> protocols are preferred in a subsequent request to the same resource.</t>
        <t>An <iref item="application client"/><xref format="none" target="application-client">application client</xref> <bcp14>MAY</bcp14> generate a request for <iref item="notification"/><xref format="none" target="notification">notifications</xref> regardless of having received an <tt>Accept-Events</tt> header field. The information only provides advice for the sake of improving performance and reducing unnecessary network transfers.</t>
        <t>Conversely, an <iref item="application client"/><xref format="none" target="application-client">application client</xref> <bcp14>MUST NOT</bcp14> assume that receiving an <tt>Accept-Events</tt> header field means that future requests will return <iref item="notification"/><xref format="none" target="notification">notifications</xref>. The content might change, the server might only support <iref item="notification"/><xref format="none" target="notification">notifications</xref> requests at certain times or under certain conditions, or a different intermediary might process the next request.</t>
        <section anchor="accept-events-header-validity">
          <name>Validity</name>
          <t>A recipient <bcp14>MUST</bcp14> ignore the <tt>Accept-Events</tt> header field received with a request method that is unrecognized or for which <iref item="notification"/><xref format="none" target="notification">notifications</xref> response is not defined for a particular <iref item="notification"/><xref format="none" target="notification">notifications</xref> protocol.</t>
          <t>A recipient <bcp14>MUST</bcp14> ignore the <tt>Accept-Events</tt> header field received in response to a request method that is unrecognized or for which <iref item="notification"/><xref format="none" target="notification">notifications</xref> discovery and/or response is not defined for a particular <iref item="notification"/><xref format="none" target="notification">notifications</xref> protocol.</t>
          <t>A recipient <bcp14>MUST</bcp14> ignore the <tt>Accept-Events</tt> header field that it does not understand.</t>
          <t>A recipient <bcp14>MUST</bcp14> ignore the protocols specified in the <tt>Accept-Events</tt> header field that they are not aware of.</t>
        </section>
        <section anchor="accept-events-header-syntax">
          <name>Syntax</name>
          <t><tt>Accept-Events</tt> is a List structured (<xref section="3.1" sectionFormat="comma" target="HTTP-SF"/>) header field*. Its members <bcp14>MUST</bcp14> be of type string that identifies a <iref item="notification"/><xref format="none" target="notification">notification</xref> protocol. A protocol identifier <bcp14>MAY</bcp14> be followed with zero or more parameters defined by the given protocol, which <bcp14>MAY</bcp14> be followed by a <tt>q</tt> parameter.</t>
          <t>The <tt>q</tt> parameter assigns a relative "weight" to the sender's preference for a <iref item="notification"/><xref format="none" target="notification">notification</xref> protocol with semantics as defined in <xref section="12.4.2" sectionFormat="comma" target="HTTP"/>. Senders using weights <bcp14>SHOULD</bcp14> send <tt>q</tt> last (after all protocol parameters). Recipients <bcp14>SHOULD</bcp14> process any parameter named <tt>q</tt> as weight, regardless of parameter ordering.</t>
          <t>Note: Use of the <tt>q</tt> parameter name to negotiate <iref item="notification"/><xref format="none" target="notification">notification</xref> protocols would interfere with any parameter having the same name. Hence, protocol parameters named <tt>q</tt> are disallowed.</t>
        </section>
      </section>
      <section anchor="events-header">
        <name>Events</name>
        <iref item="Events" primary="true"/>
        <t>The <tt>Events</tt> header field is sent by a <iref item="resource server"/><xref format="none" target="resource-server">resource server</xref> to provide <iref item="event field"/><xref format="none" target="event-field">event fields</xref> in response to a request for <iref item="notification"/><xref format="none" target="notification">notifications</xref>.</t>
        <t>Where the <iref item="Accept-Events"/><xref format="none" target="accept-events-header"><tt>Accept-Events</tt></xref> header field sent in the request is ignored, a <iref item="resource server"/><xref format="none" target="resource-server">resource server</xref> <bcp14>MUST NOT</bcp14> send the <tt>Events</tt> header field in a response.</t>
        <t>Conversely, a <iref item="resource server"/><xref format="none" target="resource-server">resource server</xref> <bcp14>MUST</bcp14> send the <tt>Events</tt> header field in a response, if the <iref item="Accept-Events"/><xref format="none" target="accept-events-header"><tt>Accept-Events</tt></xref> header field sent in the request is not ignored.</t>
        <section anchor="events-header-validity">
          <name>Validity</name>
          <t>If the <tt>Events</tt> header field is sent in response to a request that does not contain the <iref item="Accept-Events"/><xref format="none" target="accept-events-header"><tt>Accept-Events</tt></xref> header field, the recipient <bcp14>MUST</bcp14> treat the response as invalid.</t>
          <t>If the response contains a <tt>Events</tt> header field that the recipient does not understand or the <tt>Events</tt> header field specifies a <tt>protocol</tt> that the recipient does not understand, the recipient <bcp14>MUST NOT</bcp14> process the response. A proxy that receives such a message <bcp14>SHOULD</bcp14> forward it downstream.</t>
        </section>
        <section anchor="events-header-syntax">
          <name>Syntax</name>
          <t><tt>Events</tt> is a Dictionary structured (<xref section="3.1" sectionFormat="comma" target="HTTP-SF"/>) header field*. It <bcp14>MUST</bcp14> contain one member with the key <tt>protocol</tt> whose value identifies the <iref item="notification"/><xref format="none" target="notification">notification</xref> protocol used in the response. It <bcp14>MAY</bcp14> contain other members that are defined by the given <iref item="notification"/><xref format="none" target="notification">notification</xref> protocol.</t>
        </section>
      </section>
    </section>
    <section anchor="protocol">
      <name>Protocol</name>
      <section anchor="event-fields">
        <name>Event Fields</name>
        <t>The Per Resource Events Protocol reuses existing HTTP fields (<xref section="5" sectionFormat="comma" target="HTTP"/>) as <iref item="event field"/><xref format="none" target="event-field">event fields</xref>. Any HTTP field <bcp14>MAY</bcp14> be used as an <iref item="event field"/><xref format="none" target="event-field">event field</xref>. For the limited context of <iref item="notification"/><xref format="none" target="notification">notifications</xref> using the Per Resource Events Protocol, an <iref item="event field"/><xref format="none" target="event-field">event field</xref> with the same name as an HTTP field <bcp14>MUST</bcp14> have identical semantics to that HTTP field, unless otherwise specified.</t>
        <t>This specification restricts <iref item="Accept-Events"/><xref format="none" target="accept-events-header"><tt>Accept-Events</tt></xref> and <iref item="Events"/><xref format="none" target="events-header"><tt>Events</tt></xref> as Structured header fields* <xref target="HTTP-SF"/>. From this it follows:</t>
        <ul spacing="normal">
          <li>
            <t>An <iref item="event field"/><xref format="none" target="event-field">event field</xref> whose value is anything except a bare Item, that is, an Item without Parameters, <bcp14>MUST</bcp14> be specified inside an Inner List.</t>
          </li>
          <li>
            <t>Unless otherwise specified, an <iref item="event field"/><xref format="none" target="event-field">event field</xref> that is not already defined as a Structured Field, therefore, <bcp14>MUST</bcp14> be handled as a Retrofit Structured Field <xref target="HTTP-Retrofit"/> when such handling is defined.</t>
          </li>
          <li>
            <t>An <iref item="event field"/><xref format="none" target="event-field">event field</xref> that is not already defined as a Structured Field but cannot be handled as a Retrofit Structured Field either, <bcp14>MUST</bcp14> be explicitly specified by the implementation.</t>
          </li>
        </ul>
      </section>
      <section anchor="methods">
        <name>Methods</name>
        <t>For the Per Resource Events Protocol, <tt>HEAD</tt> (<xref section="9.3.2" sectionFormat="comma" target="HTTP"/>) and <tt>GET</tt> (<xref section="9.3.1" sectionFormat="comma" target="HTTP"/>) are the only methods in response to which <iref item="notification"/><xref format="none" target="notification">notifications</xref> are advertised.</t>
        <t>A <iref item="resource server"/><xref format="none" target="resource-server">resource server</xref> <bcp14>MUST NOT</bcp14> send the <iref item="Accept-Events"/><xref format="none" target="accept-events-header"><tt>Accept-Events</tt></xref> header field with <tt>prep</tt> as a protocol in response to a request with any method other than <tt>HEAD</tt> or <tt>GET</tt>.</t>
        <t>For the Per Resource Events Protocol, <tt>GET</tt> (<xref section="9.3.1" sectionFormat="comma" target="HTTP"/>) is the only method by which <iref item="notification"/><xref format="none" target="notification">notifications</xref> are requested and for which <iref item="notification"/><xref format="none" target="notification">notifications</xref> response is defined.</t>
        <t>An <iref item="application client"/><xref format="none" target="application-client">application client</xref> <bcp14>MUST NOT</bcp14> send the <iref item="Accept-Events"/><xref format="none" target="accept-events-header"><tt>Accept-Events</tt></xref> header field with <tt>prep</tt> as a protocol in a request with any method other than <tt>GET</tt>.</t>
        <t>A <iref item="resource server"/><xref format="none" target="resource-server">resource server</xref> <bcp14>MUST NOT</bcp14> send the <iref item="Events"/><xref format="none" target="events-header"><tt>Events</tt></xref> header field with the parameter <tt>protocol</tt> with a value of <tt>prep</tt> in response to a request with any method other than <tt>GET</tt>.</t>
        <t>A <iref item="resource server"/><xref format="none" target="resource-server">resource server</xref> <bcp14>MUST NOT</bcp14> send the <iref item="Events"/><xref format="none" target="events-header"><tt>Events</tt></xref> header field except in response to a <tt>GET</tt> request.</t>
      </section>
      <section anchor="status-codes">
        <name>Status Codes</name>
        <t>The Per Resource Events Protocol reuses existing HTTP status codes (<xref section="15" sectionFormat="comma" target="HTTP"/>) to describe the result of the request for <iref item="notification"/><xref format="none" target="notification">notifications</xref> and the semantics of <iref item="notification"/><xref format="none" target="notification">notifications</xref> in the response.</t>
        <t>In response to a request where <iref item="Accept-Events"/><xref format="none" target="accept-events-header"><tt>Accept-Events</tt></xref> header field indicates <tt>prep</tt> as the preferred protocol, a <iref item="resource server"/><xref format="none" target="resource-server">resource server</xref> that supports <iref item="notification"/><xref format="none" target="notification">notifications</xref> using the Per Resource Events Protocol <bcp14>MUST</bcp14> communicate the status code for the <iref item="notification"/><xref format="none" target="notification">notifications</xref> response using the <tt>status</tt> parameter in the <iref item="Events"/><xref format="none" target="events-header"><tt>Events</tt></xref> header field.</t>
        <t>For the limited context of <iref item="notification"/><xref format="none" target="notification">notifications</xref> using the Per Resource Events Protocol, the status code communicated using the <tt>status</tt> parameter in the <iref item="Events"/><xref format="none" target="events-header"><tt>Events</tt></xref> header field <bcp14>MUST</bcp14> have identical semantics to the corresponding HTTP status code, unless otherwise specified.</t>
      </section>
    </section>
    <section anchor="notifications-discovery">
      <name>Discovery</name>
      <t><iref item="application client"/><xref format="none" target="application-client">Application clients</xref> can engage in reactive content negotiation to discover if a <iref item="resource server"/><xref format="none" target="resource-server">resource server</xref> supports <iref item="notification"/><xref format="none" target="notification">notifications</xref> using the Per Resource Events Protocol on a given resource.</t>
      <section anchor="discovery-request">
        <name>Request</name>
        <t>An <iref item="application client"/><xref format="none" target="application-client">application client</xref> can discover the ability of a <iref item="resource server"/><xref format="none" target="resource-server">resource server</xref> to deliver PREP <iref item="notification"/><xref format="none" target="notification">notifications</xref> for a target resource by sending a <tt>HEAD</tt> (<xref section="9.3.2" sectionFormat="comma" target="HTTP"/>) request.</t>
      </section>
      <section anchor="discovery-response-when-notifications-not-available">
        <name>Not Available</name>
        <t>In the response to a <tt>HEAD</tt> request, a <iref item="resource server"/><xref format="none" target="resource-server">resource server</xref> that does not provide <iref item="notification"/><xref format="none" target="notification">notifications</xref> for the target resource using the Per Resource Events Protocol <bcp14>MUST NOT</bcp14> list <tt>prep</tt> as as one of the available protocols in the <iref item="Accept-Events"/><xref format="none" target="accept-events-header"><tt>Accept-Events</tt></xref> header field.</t>
        <figure anchor="discovery-request-example">
          <name>Discovery Request</name>
          <sourcecode name="discovery-request.http" type="http-message"><![CDATA[
HEAD /foo HTTP/1.1
Host: example.org
]]></sourcecode>
        </figure>
      </section>
      <section anchor="discovery-response-when-notifications-available">
        <name>Available</name>
        <t>In response to a <tt>HEAD</tt> request, a <iref item="resource server"/><xref format="none" target="resource-server">resource server</xref> that serves <iref item="notification"/><xref format="none" target="notification">notifications</xref> for the target resource using the Per Resource Events Protocol <bcp14>SHOULD</bcp14> include the <iref item="Accept-Events"/><xref format="none" target="accept-events-header"><tt>Accept-Events</tt></xref> header field, which <bcp14>MUST</bcp14> list <tt>prep</tt> as one of the available protocols.</t>
        <t>Associated with <tt>prep</tt> list item, the <iref item="resource server"/><xref format="none" target="resource-server">resource server</xref> <bcp14>MUST</bcp14> include an <tt>accept</tt> <iref item="event field"/><xref format="none" target="event-field">event field</xref> with at least one acceptable media-type for <iref item="notification"/><xref format="none" target="notification">notifications</xref>.</t>
        <figure anchor="discovery-response-example">
          <name>Discovery Response</name>
          <sourcecode name="discovery-response" type="http-message"><![CDATA[
HTTP/1.1 200 OK
Accept: text/html
Accept-Events: "prep"; accept="message/rfc822"
]]></sourcecode>
        </figure>
        <aside>
          <t><strong>Implementation Guidance</strong></t>
          <t>When <iref item="resource server"/><xref format="none" target="resource-server">resource servers</xref> support HTTP/2 <xref target="RFC9113"/> for a resource, they are strongly encouraged to advertise it in the response.</t>
          <t>When a resource is accessible from different locations, <iref item="resource server"/><xref format="none" target="resource-server">resource servers</xref> are encouraged to advertise these locations in the response.</t>
          <t>HTTP Alternative Services <xref target="RFC7838"/>, for example, describes a mechanism for advertising these capabilities.</t>
        </aside>
      </section>
    </section>
    <section anchor="request">
      <name>Request</name>
      <t>The Per Resource Events Protocol extends the content negotiation mechanism provided by HTTP allowing <iref item="application client"/><xref format="none" target="application-client">application clients</xref> to negotiate <iref item="notification"/><xref format="none" target="notification">notifications</xref> independent of the <iref item="base response"/><xref format="none" target="base-response">base response</xref>.</t>
      <t>In order to receive <iref item="notification"/><xref format="none" target="notification">notifications</xref> using the Per Resource Events Protocol from a resource, an <iref item="application client"/><xref format="none" target="application-client">application client</xref> sends a <tt>GET</tt> request to <iref item="resource server"/><xref format="none" target="resource-server">resource server</xref>, which:</t>
      <ul spacing="normal">
        <li>
          <t><bcp14>MUST</bcp14> include the <iref item="Accept-Events"/><xref format="none" target="accept-events-header"><tt>Accept-Events</tt></xref> header field, which:
          </t>
          <ul spacing="normal">
            <li>
              <t><bcp14>MUST</bcp14> list <tt>prep</tt> as a preferred <iref item="notification"/><xref format="none" target="notification">notification</xref> protocol.
              </t>
              <ul spacing="normal">
                <li>
                  <t><bcp14>MAY</bcp14> include zero or more <iref item="event field"/><xref format="none" target="event-field">event fields</xref>. For example, <iref item="application client"/><xref format="none" target="application-client">application clients</xref> <bcp14>MAY</bcp14> specify an <tt>accept</tt> <iref item="event field"/><xref format="none" target="event-field">event field</xref> to indicate a preferred media-type for <iref item="notification"/><xref format="none" target="notification">notifications</xref>.</t>
                </li>
              </ul>
            </li>
          </ul>
        </li>
        <li>
          <t><bcp14>MAY</bcp14> include the <tt>Last-Event-ID</tt> header field (<xref target="SSE"/>, <eref target="SSE#the-last-event-id-header">Section 9.2.4</eref>) requesting the <iref item="resource server"/><xref format="none" target="resource-server">resource server</xref> to not send the <iref item="base response"/><xref format="none" target="base-response">base response</xref> body and resume <iref item="notification"/><xref format="none" target="notification">notifications</xref> from the event occurring immediately after the one specified.</t>
        </li>
      </ul>
      <aside>
        <t><strong>Implementation Guidance</strong></t>
        <t>Set the <tt>Last-Event-ID</tt> to a wildcard <tt>*</tt> to explicitly request a <iref item="resource server"/><xref format="none" target="resource-server">resource server</xref> to not send the <iref item="base response"/><xref format="none" target="base-response">base response</xref> body in the response at all.</t>
      </aside>
      <figure anchor="notifications-request-example">
        <name>Request for Notifications</name>
        <sourcecode name="notifications-request.http" type="http-message"><![CDATA[
GET /foo HTTP/1.1
Host: example.org
Last-Event-ID: *
Accept-Encoding: gzip
Accept-Events: "prep"; accept="message/rfc822"
]]></sourcecode>
      </figure>
      <t>A <iref item="resource server"/><xref format="none" target="resource-server">resource server</xref> <bcp14>MUST</bcp14> ignore <iref item="event field"/><xref format="none" target="event-field">event fields</xref> for <tt>prep</tt> <iref item="notification"/><xref format="none" target="notification">notifications</xref> in the <iref item="Accept-Events"/><xref format="none" target="accept-events-header"><tt>Accept-Events</tt></xref> header that it does not recognize or implement.</t>
      <!--

# Process

1. Calculate Base Response R
2. Does the resource provide notifications?
   No -> return R
3. Does the request have an =Accept-Events= header?
   No -> return R
4. Can the =Accept-Events= header be Parsed?
   No -> return R
5. Loop: Can you identify a preferred protocol?
   No -> return R
6. Do you support the Preferred protocol?
   No -> Reject Preference; GOTO 5
7. Can you serve notifications with that protocol?
   No -> Set Events header with protocol and any failed status; GOTO 5
8. Serve with protocol

Step 7. For PREP Protocol
0. Does the response R allow for Notifications
   No -> Failed Status: 412 (Precondition Failed)
1. Does the RS understand the event fields
   No -> Failed Status: 400
2. Can RS serve notifications consistent with event fields
   No -> Failed Status: 403, 406
3. Calculate notifications N headers
4. Does `last-event-id` exist and match?
   No -> send R headers + N headers + R body
   Yes -> send R headers + N headers
6. Loop: Has time elapsed?
   Yes -> GOTO 10
7. Has there been an event?
   No -> GOTO 6
8. Send Notifications;
9. Is the event Delete;
   No -> GOTO 6
10. Close Stream

-->

</section>
    <section anchor="response-without-notifications">
      <name>Response without Notifications</name>
      <section anchor="response-when-notifications-not-available">
        <name>Not Available</name>
        <t>A <iref item="resource server"/><xref format="none" target="resource-server">resource server</xref> not implementing the Per Resource Events Protocol (or not supporting it for the target resource) can ignore a request for <iref item="notification"/><xref format="none" target="notification">notifications</xref> and respond as if it received a normal request on that resource without impacting interoperability.</t>
        <t>A <iref item="resource server"/><xref format="none" target="resource-server">resource server</xref> that does not provide <iref item="notification"/><xref format="none" target="notification">notifications</xref> using the Per Resource Events Protocol <bcp14>MUST NOT</bcp14>:</t>
        <ul spacing="normal">
          <li>
            <t>list <tt>prep</tt> as as one of the available protocols in the <iref item="Accept-Events"/><xref format="none" target="accept-events-header"><tt>Accept-Events</tt></xref> header field, if sent in the response.</t>
          </li>
          <li>
            <t>send the <iref item="Events"/><xref format="none" target="events-header"><tt>Events</tt></xref> header field in the response with the <tt>protocol</tt> <iref item="event field"/><xref format="none" target="event-field">event field</xref> set to <tt>prep</tt>.</t>
          </li>
        </ul>
        <aside>
          <t><strong>Implementation Guidance</strong></t>
          <t>Implementations are advised against sending <iref item="notification"/><xref format="none" target="notification">notifications</xref> for long-lived resources. A resource might be considered long-lived, if the <iref item="resource server"/><xref format="none" target="resource-server">resource server</xref> determines that the resource is unlikely to change in the duration of the <iref item="notification"/><xref format="none" target="notification">notification</xref> response. In such instances, <iref item="resource server"/><xref format="none" target="resource-server">resource servers</xref> are strongly advised to respond with the <tt>Cache-Control</tt> header and set the <tt>max-age</tt> parameter in it.</t>
        </aside>
      </section>
      <section anchor="error-response">
        <name>Error Response</name>
        <t>A <iref item="resource server"/><xref format="none" target="resource-server">resource server</xref> <bcp14>MUST NOT</bcp14> include PREP <iref item="notification"/><xref format="none" target="notification">notifications</xref> in a response, unless request results in one of the following status codes:</t>
        <ul spacing="normal">
          <li>
            <t><tt>200 (OK)</tt> (<xref section="15.3.1" sectionFormat="comma" target="HTTP"/>),</t>
          </li>
          <li>
            <t><tt>204 (No Content)</tt> (<xref section="15.3.5" sectionFormat="comma" target="HTTP"/>),</t>
          </li>
          <li>
            <t><tt>206 (Partial Content)</tt> (<xref section="15.3.7" sectionFormat="comma" target="HTTP"/>),</t>
          </li>
          <li>
            <t><tt>226 (IM Used)</tt> (<xref section="10.4.1" sectionFormat="comma" target="Delta"/>).</t>
          </li>
        </ul>
        <t>A <iref item="resource server"/><xref format="none" target="resource-server">resource server</xref> that does not serve PREP <iref item="notification"/><xref format="none" target="notification">notifications</xref>, on account of the response not having one of the above-mentioned status codes:</t>
        <ul spacing="normal">
          <li>
            <t><bcp14>SHOULD</bcp14> include the <iref item="Events"/><xref format="none" target="events-header"><tt>Events</tt></xref> header fields where:
            </t>
            <ul spacing="normal">
              <li>
                <t>the <tt>protocol</tt> <iref item="event field"/><xref format="none" target="event-field">event field</xref> <bcp14>MUST</bcp14> be set to a value of <tt>prep</tt>,</t>
              </li>
              <li>
                <t>the <tt>status</tt> <iref item="event field"/><xref format="none" target="event-field">event field</xref> <bcp14>MUST</bcp14> be set to <tt>412 (Precondition Failed)</tt> (<xref section="15.5.13" sectionFormat="comma" target="HTTP"/>) status code.</t>
              </li>
            </ul>
          </li>
        </ul>
      </section>
      <section anchor="response-with-notification-errors">
        <name>Notification Errors</name>
        <t>A <iref item="resource server"/><xref format="none" target="resource-server">resource server</xref> might still not be able to send <iref item="notification"/><xref format="none" target="notification">notifications</xref> using the Per Resource Events Protocol requested by an <iref item="application client"/><xref format="none" target="application-client">application client</xref> despite a valid response.</t>
        <t>A <iref item="resource server"/><xref format="none" target="resource-server">resource server</xref> unable to serve PREP <iref item="notification"/><xref format="none" target="notification">notifications</xref>, even when the request results in a status code mentioned in <xref target="error-response"/>:</t>
        <ul spacing="normal">
          <li>
            <t><bcp14>SHOULD</bcp14> include the <iref item="Events"/><xref format="none" target="events-header"><tt>Events</tt></xref> header fields in the response where:
            </t>
            <ul spacing="normal">
              <li>
                <t>the <tt>protocol</tt> <iref item="event field"/><xref format="none" target="event-field">event field</xref> <bcp14>MUST</bcp14> be set to a value of <tt>prep</tt>,</t>
              </li>
              <li>
                <t>the <tt>status</tt> <iref item="event field"/><xref format="none" target="event-field">event field</xref> <bcp14>MUST</bcp14> be set to appropriate  status code indicating the reason for not serving <iref item="notification"/><xref format="none" target="notification">notifications</xref>.</t>
              </li>
            </ul>
          </li>
        </ul>
      </section>
    </section>
    <section anchor="notifications-response">
      <name>Notifications Response</name>
      <!--

In response to a `GET` request with a =Accept-Events= header field with `prep` as the preferred notifications protocol, a resource server providing notifications:

+ MUST respond with a status code identical to the one that would have been sent with the response had notifications not been requested.
+ MUST include the message body that would have been transmitted had notifications not been requested, unless the `Prefer` header field {{RFC7240}} indicates a preference of `return=minimal` ({{RFC7240 Section 4.2}}).

-->

<section anchor="notifications-response-headers">
        <name>Headers</name>
        <t>A <iref item="resource server"/><xref format="none" target="resource-server">resource server</xref> providing <iref item="notification"/><xref format="none" target="notification">notifications</xref> using the Per Resource Events Protocol:</t>
        <ul spacing="normal">
          <li>
            <t><bcp14>MUST</bcp14> include the following header fields in the response:  </t>
            <ul spacing="normal">
              <li>
                <t><tt>Date</tt> (<xref section="6.6.1" sectionFormat="comma" target="HTTP"/>).</t>
              </li>
              <li>
                <t><tt>Content-Type</tt> (<xref section="8.3" sectionFormat="comma" target="HTTP"/>) with the media type set to <tt>multipart/mixed</tt> (<xref section="5.1.3" sectionFormat="comma" target="RFC2046"/>).</t>
              </li>
              <li>
                <t><iref item="Events"/><xref format="none" target="events-header"><tt>Events</tt></xref> which <bcp14>MUST</bcp14> include the following <iref item="event field"/><xref format="none" target="event-field">event fields</xref>:
                </t>
                <ul spacing="normal">
                  <li>
                    <t><tt>protocol</tt> set to the value <tt>prep</tt>.</t>
                  </li>
                  <li>
                    <t><tt>status</tt> set to the <tt>200 (OK)</tt> (<xref section="15.3.1" sectionFormat="comma" target="HTTP"/>) status code.</t>
                  </li>
                  <li>
                    <t><tt>expires</tt> with an integer value in seconds indicating an interval after <tt>Date</tt> when <iref item="notification"/><xref format="none" target="notification">notifications</xref> will no longer be sent and the response stream is closed.</t>
                  </li>
                </ul>
                <t>
NOTE: Since caching is meaningless in the context of <iref item="notification"/><xref format="none" target="notification">notifications</xref>, this specifications repurposes the deprecated <tt>Expires</tt> header field as an <iref item="event field"/><xref format="none" target="event-field">event field</xref> to specify when the <iref item="notification"/><xref format="none" target="notification">notifications</xref> response ends.</t>
              </li>
            </ul>
          </li>
          <li>
            <t><bcp14>SHOULD</bcp14> include the following header fields in the response:  </t>
            <ul spacing="normal">
              <li>
                <t><tt>Vary</tt> (<xref section="12.5.5" sectionFormat="comma" target="HTTP"/>) which <bcp14>MUST</bcp14> include the following values:
                </t>
                <ul spacing="normal">
                  <li>
                    <t><iref item="Accept-Events"/><xref format="none" target="accept-events-header"><tt>Accept-Events</tt></xref>.</t>
                  </li>
                  <li>
                    <t><tt>Last-Event-ID</tt>, if the request for PREP <iref item="notification"/><xref format="none" target="notification">notifications</xref> included the <tt>Last-Event-ID</tt> header field that was not ignored by the <iref item="resource server"/><xref format="none" target="resource-server">resource server</xref>.</t>
                  </li>
                </ul>
              </li>
              <li>
                <t><tt>Last-Modified</tt> (<xref section="8.8.2" sectionFormat="comma" target="HTTP"/>).</t>
              </li>
            </ul>
          </li>
          <li>
            <t><bcp14>MAY</bcp14> include the following header fields in the response:  </t>
            <ul spacing="normal">
              <li>
                <t><iref item="Accept-Events"/><xref format="none" target="accept-events-header"><tt>Accept-Events</tt></xref> which <bcp14>MUST</bcp14> list <tt>prep</tt> as one of the available <iref item="notification"/><xref format="none" target="notification">notification</xref> protocols. Associated with the <tt>prep</tt> list item, the <iref item="resource server"/><xref format="none" target="resource-server">resource server</xref>:
                </t>
                <ul spacing="normal">
                  <li>
                    <t><bcp14>MUST</bcp14> include an <tt>accept</tt> <iref item="event field"/><xref format="none" target="event-field">event field</xref> with at least one acceptable media-type for <iref item="notification"/><xref format="none" target="notification">notifications</xref>.</t>
                  </li>
                </ul>
              </li>
            </ul>
          </li>
        </ul>
      </section>
      <section anchor="notifications-response-body">
        <name>Body</name>
        <t>A <iref item="resource server"/><xref format="none" target="resource-server">resource server</xref> sending PREP <iref item="notification"/><xref format="none" target="notification">Notifications</xref> <bcp14>MUST</bcp14> transmit a multipart message body (<xref section="5.1" sectionFormat="comma" target="RFC2046"/>) with a media type of <tt>multipart/mixed</tt> (<xref section="5.1.3" sectionFormat="comma" target="RFC2046"/>) with two body parts in the order specified below:</t>
        <ol spacing="normal" type="1"><li>
            <t>Base Response: the message body that would have been sent had <iref item="notification"/><xref format="none" target="notification">notifications</xref> not been requested.</t>
          </li>
          <li>
            <t><iref item="notification"/><xref format="none" target="notification">Notifications</xref> Response: the multipart response body with body parts containing <iref item="notification"/><xref format="none" target="notification">notifications</xref> as defined in <xref target="notifications-part-body"/>.</t>
          </li>
        </ol>
        <section anchor="base-response-part-body">
          <name>Base Response</name>
          <t>By default, the Per Resource Events Protocol requires a <iref item="resource server"/><xref format="none" target="resource-server">resource server</xref> to transmit the <iref item="base response"/><xref format="none" target="base-response">base response</xref> body as first body part of multipart response body.
This behaviour is desirable in most scenarios as we short-circuit an extra round trip that would otherwise be needed to fetch the current representation of the resource before fetching <iref item="notification"/><xref format="none" target="notification">notifications</xref> and eliminates the need to co-ordinate the two responses.</t>
          <section anchor="base-response-opt-out">
            <name>Opt out</name>
            <t>An <iref item="application client"/><xref format="none" target="application-client">application client</xref> requesting only <iref item="notification"/><xref format="none" target="notification">notifications</xref> using the Per Resource Events Protocol needs to explicitly opt out of receiving the <iref item="base response"/><xref format="none" target="base-response">base response</xref> as described in <xref target="request"/>, <xref format="title" target="request"/>.</t>
            <t>If the request for PREP <iref item="notification"/><xref format="none" target="notification">notifications</xref> includes the <tt>Last-Event-ID</tt> header field (<xref target="SSE"/>, <eref target="SSE#the-last-event-id-header">Section 9.2.4</eref>) which matches the <tt>Event-ID</tt> of the last event on the resource or wildcard character "*", a <iref item="resource server"/><xref format="none" target="resource-server">resource server</xref> <bcp14>SHOULD NOT</bcp14> send the content of the <iref item="base response"/><xref format="none" target="base-response">base response</xref>.</t>
            <t>The <iref item="resource server"/><xref format="none" target="resource-server">resource server</xref> <bcp14>MUST</bcp14> send still the first body part of the multipart response body, even if this part is empty. The <iref item="resource server"/><xref format="none" target="resource-server">resource server</xref> <bcp14>MAY</bcp14> send the headers corresponding to the representation body that would have been sent in the <iref item="base response"/><xref format="none" target="base-response">base response</xref>, and only omit the representation body of <iref item="base response"/><xref format="none" target="base-response">base response</xref>.</t>
          </section>
        </section>
        <section anchor="notifications-part-body">
          <name>Notifications</name>
          <t>A <iref item="resource server"/><xref format="none" target="resource-server">resource server</xref> <bcp14>MUST</bcp14> transmit PREP <iref item="notification"/><xref format="none" target="notification">notifications</xref> in the second body part of the multipart response as yet another embedded multipart message body (<xref section="5.1" sectionFormat="comma" target="RFC2046"/>), with a media type of <tt>multipart/digest</tt> (<xref section="5.1.5" sectionFormat="comma" target="RFC2046"/>) that <bcp14>MAY</bcp14> include zero or more body parts. Each body part of the <iref item="notification"/><xref format="none" target="notification">notifications</xref> multipart message body <bcp14>MAY</bcp14> contain at most one <iref item="notification"/><xref format="none" target="notification">notification</xref>.</t>
          <aside>
            <t><strong>Implementation Guidance</strong></t>
            <t>While not strictly necessary, it is strongly encouraged that <iref item="resource server"/><xref format="none" target="resource-server">resource servers</xref> send <iref item="notification"/><xref format="none" target="notification">notifications</xref> in a manner such that the boundary delimiter (<xref section="5.1.2" sectionFormat="comma" target="RFC2046"/>) is always at the end of a chunk (<xref section="7.1" sectionFormat="comma" target="RFC9112"/>) or data frame (<xref section="6.1" sectionFormat="comma" target="RFC9113"/>) as shown in the examples below. This way an <iref item="application client"/><xref format="none" target="application-client">application client</xref> does not have to wait until the next chunk or frame (which might be a while or in cases of error never arrive) to be certain that the immediate message is complete.</t>
          </aside>
        </section>
      </section>
      <section anchor="notifications-response-termination">
        <name>Termination</name>
        <t>A <iref item="resource server"/><xref format="none" target="resource-server">resource server</xref> <bcp14>MUST</bcp14> end the <iref item="notification"/><xref format="none" target="notification">notification</xref> response in any one of the following scenarios:</t>
        <ul spacing="normal">
          <li>
            <t>Once the time specified in the <tt>expires</tt> parameter of the <iref item="Events"/><xref format="none" target="events-header"><tt>Events</tt></xref> header field has elapsed.</t>
          </li>
          <li>
            <t>Immediately after sending a <iref item="notification"/><xref format="none" target="notification">notification</xref> upon a <tt>DELETE</tt> request on the resource that results in a response with <tt>200 (OK)</tt> (<xref section="15.3.1" sectionFormat="comma" target="HTTP"/>) or <tt>204 (No Content)</tt> (<xref section="15.3.5" sectionFormat="comma" target="HTTP"/>) status codes.</t>
          </li>
        </ul>
        <t>A <iref item="resource server"/><xref format="none" target="resource-server">resource server</xref> <bcp14>MUST</bcp14> properly terminate the multipart responses as defined in <xref section="5.1.2" sectionFormat="comma" target="RFC2046"/>, before closing the response stream.</t>
        <aside>
          <t><strong>Implementation Guidance</strong></t>
          <t>When a user navigates away from a website or an application using PREP <iref item="notification"/><xref format="none" target="notification">notifications</xref>, <iref item="application client"/><xref format="none" target="application-client">application clients</xref> are strongly encouraged to properly close the response stream to ensure that servers do not keep sending <iref item="notification"/><xref format="none" target="notification">notifications</xref>.</t>
        </aside>
        <section anchor="examples">
          <name>Examples</name>
          <section anchor="response-with-current-representation-and-notifications">
            <name>Response with Current Representation and Notifications</name>
            <figure anchor="full-response-example">
              <name>Notification Response with Representation included</name>
              <artwork name="full-response.http"><![CDATA[
HTTP/1.1 200 OK
Vary: Accept-Events
Accept-Events: "prep"; accept="message/rfc822"
Events: protocol="prep", status=200, vary="accept"
Last-Modified: Sat, 1 April 2023 10:11:12 GMT
Transfer-Encoding: chunked
Content-Type: multipart/mixed; boundary="main-boundary"

--main-boundary
Content-Type: text/html

<html>

--main-boundary
Content-Type: multipart/digest; boundary="next-message"

--next-message
Content-Type: message/rfc822

<message>

--next-message--
--main-boundary--
]]></artwork>
            </figure>
          </section>
          <section anchor="response-with-notifications-only">
            <name>Response with Notifications Only</name>
            <figure anchor="basic-response-example">
              <name>Response with Notifications Only</name>
              <artwork name="basic-response.http"><![CDATA[
HTTP/1.1 200 OK
Vary: Accept-Events, Last-Event-ID
Accept-Events: "prep"; accept="message/rfc822"
Events: protocol="prep", status=200, vary="accept"
Last-Modified: Sat, 1 April 2023 10:11:12 GMT
Transfer-Encoding: chunked
Content-Type: multipart/mixed; boundary="main-boundary"

--main-boundary
Content-Type: text/html

--main-boundary
Content-Type: multipart/digest; boundary="next-message"

--next-message
Content-Type: message/rfc822

<message>
--next-message--
--main-boundary--
]]></artwork>
            </figure>
          </section>
        </section>
      </section>
    </section>
    <section anchor="rfc822-semantics">
      <name>Semantics for <tt>message/rfc822</tt> notifications</name>
      <t>The <tt>multipart/digest</tt> multipart media-type (<xref section="5.1.5" sectionFormat="comma" target="RFC2046"/>) uses <tt>message/rfc822</tt> media-type (<xref section="5.2.1" sectionFormat="comma" target="RFC2046"/>) for body parts as default. It follows that the Per Resource Events Protocol transmits <iref item="notification"/><xref format="none" target="notification">notifications</xref> as <tt>message/rfc822</tt>, unless the <iref item="application client"/><xref format="none" target="application-client">application client</xref> requests otherwise.</t>
      <section anchor="rfc822-request">
        <name>Request</name>
        <t>An <iref item="application client"/><xref format="none" target="application-client">application clients</xref> <bcp14>MAY</bcp14> specify additional parameters to <tt>message/rfc822</tt> <iref item="notification"/><xref format="none" target="notification">notification</xref> media-type in the <tt>accept</tt> <iref item="event field"/><xref format="none" target="event-field">event field</xref> associated with the <tt>prep</tt> list item in the <iref item="Accept-Events"/><xref format="none" target="accept-events-header"><tt>Accept-Events</tt></xref> header field of the request.</t>
      </section>
      <section anchor="rfc822-notification">
        <name>Notification</name>
        <t>A <iref item="resource server"/><xref format="none" target="resource-server">resource server</xref> implementing the Per Resource Events Protocol <bcp14>SHOULD</bcp14> send a <iref item="notification"/><xref format="none" target="notification">notification</xref> to an <iref item="application client"/><xref format="none" target="application-client">application client</xref> when a request with one of the following methods generates a response with any of the following status codes:</t>
        <table anchor="notification-triggers">
          <name>Notification Triggers</name>
          <thead>
            <tr>
              <th align="left">Request Method</th>
              <th align="left">Response Status</th>
            </tr>
          </thead>
          <tbody>
            <tr>
              <td align="left">
                <tt>PUT</tt> (<xref section="9.3.4" sectionFormat="comma" target="HTTP"/>)</td>
              <td align="left">
                <tt>200 (OK)</tt> (<xref section="15.3.1" sectionFormat="comma" target="HTTP"/>)</td>
            </tr>
            <tr>
              <td align="left">
                <tt>PATCH</tt> (<xref target="RFC5789"/>)</td>
              <td align="left">
                <tt>204 (No Content)</tt> (<xref section="15.3.5" sectionFormat="comma" target="HTTP"/>)</td>
            </tr>
            <tr>
              <td align="left">
                <tt>DELETE</tt> (<xref section="9.3.5" sectionFormat="comma" target="HTTP"/>)</td>
              <td align="left"> </td>
            </tr>
            <tr>
              <td align="left"> </td>
              <td align="left"> </td>
            </tr>
            <tr>
              <td align="left">
                <tt>POST</tt> (<xref section="9.3.3" sectionFormat="comma" target="HTTP"/>)</td>
              <td align="left">
                <tt>200 (OK)</tt> (<xref section="15.3.1" sectionFormat="comma" target="HTTP"/>)</td>
            </tr>
            <tr>
              <td align="left"> </td>
              <td align="left">
                <tt>204 (No Content)</tt> (<xref section="15.3.5" sectionFormat="comma" target="HTTP"/>)</td>
            </tr>
            <tr>
              <td align="left"> </td>
              <td align="left">
                <tt>201 (Created)</tt> (<xref section="15.3.2" sectionFormat="comma" target="HTTP"/>)</td>
            </tr>
            <tr>
              <td align="left"> </td>
              <td align="left">
                <tt>205 (Reset Content)</tt> (<xref section="15.3.6" sectionFormat="comma" target="HTTP"/>)</td>
            </tr>
          </tbody>
        </table>
        <t>The <iref item="notification"/><xref format="none" target="notification">notification</xref> <bcp14>MUST NOT</bcp14> be sent before the success response has been sent to the user agent that initiated the request.</t>
      </section>
      <section anchor="rfc822-headers">
        <name>Headers</name>
        <t>A <iref item="resource server"/><xref format="none" target="resource-server">resource server</xref> <bcp14>MUST</bcp14> include the following header fields in a <tt>message/rfc822</tt> formatted PREP <iref item="notification"/><xref format="none" target="notification">notification</xref>:</t>
        <dl>
          <dt><tt>Method</tt></dt>
          <dd>
            <t>identical to <tt>:method</tt> pseudo-header field in a HTTP/2 request (<xref section="8.3.1" sectionFormat="comma" target="RFC9113"/>), that specifies the request method that triggered the <iref item="notification"/><xref format="none" target="notification">notification</xref>.</t>
          </dd>
          <dt><tt>Date</tt></dt>
          <dd>
            <t>identical to <tt>Date</tt> header field in a HTTP response (<xref section="6.6.1" sectionFormat="comma" target="HTTP"/>), that specifies date and time at which the event that triggered the <iref item="notification"/><xref format="none" target="notification">notification</xref> was completed.</t>
          </dd>
          <dt><tt>Event-ID</tt></dt>
          <dd>
            <t>an opaque identifier for the generated <iref item="notification"/><xref format="none" target="notification">notification</xref>.</t>
          </dd>
        </dl>
        <t>A <iref item="resource server"/><xref format="none" target="resource-server">resource server</xref> <bcp14>SHOULD</bcp14> include the following headers in a <tt>message/rfc822</tt> formatted PREP <iref item="notification"/><xref format="none" target="notification">notification</xref> when the state of the resource or its representation is modified as a result of the event:</t>
        <dl>
          <dt><tt>ETag</tt></dt>
          <dd>
            <t>identical to <tt>ETag</tt> header field (<xref section="8.8.3" sectionFormat="comma" target="HTTP"/>) in a HTTP response. The <tt>ETag</tt> sent <bcp14>MUST</bcp14> be for the same <tt>Content-Type</tt> as the representation that was sent in the <iref item="notification"/><xref format="none" target="notification">notification</xref> response or that would have been sent in the absense of the <tt>Last-Events-ID</tt> header.</t>
          </dd>
        </dl>
        <figure anchor="rfc822-PUT">
          <name>`PUT` notification message</name>
          <sourcecode name="rfc822-PUT-notification-example.http" type="http-message"><![CDATA[
--random-boundary  <- From the Previous Message (do not include)
                   <- Empty part response headers & blank line
Method: PUT
Date: Sat, 1 April 2023 10:11:12 GMT
Event-ID: 1234
ETag: "abc123"


--random-boundary
]]></sourcecode>
        </figure>
        <t>A <iref item="resource server"/><xref format="none" target="resource-server">resource server</xref> <bcp14>MUST</bcp14> include the following headers in a <tt>message/rfc822</tt> formatted PREP <iref item="notification"/><xref format="none" target="notification">notification</xref> when a request modifies another resource:</t>
        <dl>
          <dt><tt>Content-Location</tt></dt>
          <dd>
            <t>identical to the <tt>Content-Location</tt> header field (<xref section="8.7" sectionFormat="comma" target="HTTP"/>).</t>
          </dd>
        </dl>
        <figure anchor="rfc822-POST">
          <name>`POST` notification message modifying another resource</name>
          <sourcecode name="rfc822-POST-notification-example.http" type="http-message"><![CDATA[
--random-boundary  <- From the Previous Message (do not include)
                   <- Empty part response headers & blank line
Method: POST
Date: Sat, 1 April 2023 10:12:14 GMT
Event-ID: 1235
Content-Location: /foo


--random-boundary
]]></sourcecode>
        </figure>
      </section>
      <section anchor="rfc822-body">
        <name>Body</name>
        <t>The body of a <tt>message/rfc822</tt> formatted PREP <iref item="notification"/><xref format="none" target="notification">notification</xref> might be used to provide a <iref item="delta representation" primary="true"/>delta representation, the difference between the state of the representation before and after the most recent event on the resource.</t>
        <t>If the <iref item="application client"/><xref format="none" target="application-client">application client</xref> does not specify <tt>delta</tt> parameter associated with a preferred <iref item="notification"/><xref format="none" target="notification">notifications</xref> format of <tt>message/rfc822</tt> in the <tt>accept</tt> <iref item="event field"/><xref format="none" target="event-field">event field</xref> of the <xref target="request">​request</xref> that results in <tt>message/rfc822</tt> formatted PREP <iref item="notification"/><xref format="none" target="notification">notifications</xref>, the <iref item="notification"/><xref format="none" target="notification">notifications</xref> <bcp14>MUST NOT</bcp14> contain a body.</t>
        <t>If state of the resource is not modified as a result of an HTTP operation, the resulting <iref item="notification"/><xref format="none" target="notification">notification</xref> <bcp14>MUST NOT</bcp14> contain a body.</t>
        <t>If the <iref item="application client"/><xref format="none" target="application-client">application client</xref> specifies a <tt>delta</tt> parameter associated with a preferred <iref item="notification"/><xref format="none" target="notification">notifications</xref> format of <tt>message/rfc822</tt> in the <tt>accept</tt> <iref item="event field"/><xref format="none" target="event-field">event field</xref> of the <xref target="request">​request</xref> that results in <tt>message/rfc822</tt> formatted PREP <iref item="notification"/><xref format="none" target="notification">notifications</xref>, a <iref item="resource server"/><xref format="none" target="resource-server">resource server</xref>:</t>
        <ul spacing="normal">
          <li>
            <t><bcp14>SHOULD</bcp14> send the <iref item="delta representation"/>delta representation as the body of the <iref item="notification"/><xref format="none" target="notification">notification</xref> generated upon a <tt>PATCH</tt> (<xref target="RFC5789"/>) operation.</t>
          </li>
          <li>
            <t><bcp14>MAY</bcp14> send the <iref item="delta representation"/>delta representation as the body of the <iref item="notification"/><xref format="none" target="notification">notification</xref> generated upon a <tt>PUT</tt> (<xref section="9.3.4" sectionFormat="comma" target="HTTP"/>) or a <tt>POST</tt> (<xref section="9.3.3" sectionFormat="comma" target="HTTP"/>) operation.</t>
          </li>
        </ul>
        <t>A <iref item="resource server"/><xref format="none" target="resource-server">resource server</xref> <bcp14>SHOULD</bcp14> send the <iref item="delta representation"/>delta representation in the content-type preferred by the client as specified by the <tt>delta</tt> parameter.</t>
        <!--
  If a `delta` parameter is not set in the `content-type` event field for the [[#notifications-response]], resource servers MUST provide a `Content-Type` header in each notification.
-->

<figure anchor="rfc822-PATCH-delta">
          <name>`PATCH` notification with delta representation</name>
          <sourcecode name="rfc822-PATCH-notification-with-delta-example.http" type="http-message"><![CDATA[
--random-boundary  <- From the Previous Message (do not include)
                   <- Empty part response headers & blank line
Method: PATCH
Date: Sat, 1 April 2023 10:14:16 GMT
Event-ID: 1236
ETag: "xyz987"
Content-type: application/example

<delta>

--random-boundary
]]></sourcecode>
        </figure>
        <!-- Considerations Sections -->

</section>
    </section>
    <section anchor="implementation-guidance">
      <name>Implementation Guidance</name>
      <t>A Connect/Express style middleware for parsing the <tt>Accept-Events</tt> header field is available at <eref target="https://github.com/CxRes/express-accept-events/">https://github.com/CxRes/express-accept-events/</eref> and can be installed from npm as <tt>express-accept-events</tt>. Complementing this is a Connect/Express style middleware that negotiates an appropriate <iref item="notification"/><xref format="none" target="notification">notifications</xref> protocol on the resource based on the request made using the <tt>Accept-Event</tt> header field, available at <eref target="https://github.com/CxRes/express-negotiate-events/">https://github.com/CxRes/express-negotiate-events/</eref> and can be installed from npm as <tt>express-negotiate-events</tt>.</t>
      <t>An early implementation of the Per Resource Events Protocol, also in the form of a Connect/Express style middleware, is available at <eref target="https://github.com/CxRes/express-prep/">https://github.com/CxRes/express-prep/</eref> and can be installed from npm as <tt>express-prep</tt>.</t>
      <t>Express Accept Events, Express Negotiate Events and Express PREP are Free and Open Source Software, released under the Mozilla Public License v2.0.</t>
      <t>The W3C Solid Community Group is developing a specification called Solid-PREP that defines representation and semantics for PREP <iref item="notification"/><xref format="none" target="notification">notifications</xref> sent from LDP Resources hosted on Solid storage. This specification enables Solid servers to incorporate the Per Resource Events as a means for sending <iref item="notification"/><xref format="none" target="notification">notifications</xref>. Solid-PREP is available at <eref target="https://github.com/solid/solid-prep/">https://github.com/solid/solid-prep/</eref> and is released under the W3C Software and Document license - version 2023.</t>
      <t>The Node Solid Server, an open source server that implements the Solid Protocol, is in the process of implementing <iref item="notification"/><xref format="none" target="notification">notifications</xref> using the Per Resource Events Protocol and Solid-PREP at <eref target="https://github.com/nodeSolidServer/node-solid-server/tree/prep">https://github.com/nodeSolidServer/node-solid-server/tree/prep</eref>.</t>
      <t>The PREP Fetch <eref target="https://github.com/CxRes/prep-fetch/">https://github.com/CxRes/prep-fetch/</eref> library provides a convinient way to consume fetch <xref target="FETCH"/> respsones containing PREP <iref item="notification"/><xref format="none" target="notification">notification</xref>. PREP Fetch itself is a thin wrapper on top of Multipart Fetch <eref target="https://github.com/CxRes/multipart-fetch/">https://github.com/CxRes/multipart-fetch/</eref> that streams the parts of a multipart response as a series of Fetch Responses.</t>
      <t>PREP Fetch and Multipart Fetch are Free and Open Source Software, released under the Mozilla Public License v2.0.</t>
    </section>
    <section anchor="security-considerations">
      <name>Security Considerations</name>
      <t>Since the Per Resource Events Protocol uses HTTP to transmit <iref item="notification"/><xref format="none" target="notification">notifications</xref>, it follows that the security and privacy considerations that apply to HTTP also apply to PREP. Considerations relevant to HTTP semantics and its use for transferring information over the Internet are discussed in <xref section="17" sectionFormat="of" target="HTTP"/>, and considerations related to HTTP/1.1 message syntax and parsing are discussed in <xref section="11" sectionFormat="of" target="RFC9112"/>.</t>
      <t>The following is a non-exhaustive list of security and privacy considerations that become especially pertinent due to the manner in which PREP uses HTTP for transmitting <iref item="notification"/><xref format="none" target="notification">notifications</xref>:</t>
      <section anchor="browser-fingerprinting">
        <name>Browser Fingerprinting</name>
        <t>The <iref item="Accept-Events"/><xref format="none" target="accept-events-header"><tt>Accept-Events</tt></xref> header field provides an extra vector that can aid unique identification of user agent. Follow the advice in <xref section="17.13" sectionFormat="comma" target="HTTP"/> to minimize the risk of fingerprinting.</t>
      </section>
      <section anchor="denial-of-service-attacks">
        <name>Denial-of-Service Attacks</name>
        <t>Resources that serve <iref item="notification"/><xref format="none" target="notification">notifications</xref>, by virtue of keeping the response stream open for an extended period of time are more susceptible to Denial-of-Service attacks because the effort required to request <iref item="notification"/><xref format="none" target="notification">notifications</xref> from the same resource is tiny compared to the time, memory, and bandwidth consumed by attempting to serve the <iref item="notification"/><xref format="none" target="notification">notifications</xref>. Servers ought to ignore, coalesce, or reject egregious <iref item="notification"/><xref format="none" target="notification">notification</xref> request, such as repeated <iref item="notification"/><xref format="none" target="notification">notification</xref> requests to resource from the same origin.</t>
      </section>
    </section>
    <section anchor="iana-considerations">
      <name>IANA Considerations</name>
      <t>The change controller for the following registrations is: "IETF (iesg@ietf.org) - Internet Engineering Task Force".</t>
      <section anchor="header-field-registration">
        <name>Header Field Registration</name>
        <t>IANA has registered the following entry in the "<eref target="https://www.iana.org/assignments/http-fields/">Hypertext Transfer Protocol (HTTP) Field Name Registry</eref>" defined by <xref target="HTTP"/>:</t>
        <table>
          <thead>
            <tr>
              <th align="left">Header Field Names</th>
              <th align="left">Status</th>
              <th align="left">Reference</th>
            </tr>
          </thead>
          <tbody>
            <tr>
              <td align="left">
                <iref item="Accept-Events"/><xref format="none" target="accept-events-header"><tt>Accept-Events</tt></xref></td>
              <td align="left">Provisional</td>
              <td align="left">
                <xref target="header-fields"/></td>
            </tr>
            <tr>
              <td align="left">
                <iref item="Events"/><xref format="none" target="events-header"><tt>Events</tt></xref></td>
              <td align="left">Provisional</td>
              <td align="left">
                <xref target="header-fields"/></td>
            </tr>
          </tbody>
        </table>
      </section>
      <section anchor="notifications-protocol-registry">
        <name>Notifications Protocol Registry</name>
        <t>The <iref item="Accept-Events"/><xref format="none" target="accept-events-header"><tt>Accept-Events</tt></xref> and <iref item="Events"/><xref format="none" target="events-header"><tt>Events</tt></xref> header fields identify specific protocols for <iref item="notification"/><xref format="none" target="notification">notifications</xref>. The "HTTP <iref item="notification"/><xref format="none" target="notification">Notifications</xref> Protocol Registry", created and maintained by IANA at <eref target="https://www.iana.org/assignments/http-parameters/">https://www.iana.org/assignments/http-parameters/</eref>, registers identifiers for <iref item="notification"/><xref format="none" target="notification">notification</xref> protocols.</t>
        <t><iref item="notification"/><xref format="none" target="notification">Notifications</xref> protocol registrations <bcp14>MUST</bcp14> include the following fields:</t>
        <ul spacing="normal">
          <li>
            <t>Identifier</t>
          </li>
          <li>
            <t>Name</t>
          </li>
          <li>
            <t>Pointer to specification text</t>
          </li>
        </ul>
        <t>Initial registrations are given below:</t>
        <table>
          <thead>
            <tr>
              <th align="left">Identifier</th>
              <th align="left">Name</th>
              <th align="left">Reference</th>
            </tr>
          </thead>
          <tbody>
            <tr>
              <td align="left">PREP</td>
              <td align="left">Per Resource Events Protocol</td>
              <td align="left">This document</td>
            </tr>
          </tbody>
        </table>
        <t>Values to be added to this namespace require IETF Review (see <xref section="4.8" sectionFormat="comma" target="RFC8126"/>). Identified protocols <bcp14>MUST</bcp14> conform to the purpose of sending <iref item="notification"/><xref format="none" target="notification">notifications</xref> as defined in <xref target="header-fields"/> of this document.</t>
      </section>
    </section>
  </middle>
  <back>
    <displayreference target="RFC9112" to="HTTP/1.1"/>
    <displayreference target="RFC9113" to="HTTP/2"/>
    <references>
      <name>References</name>
      <references anchor="sec-normative-references">
        <name>Normative References</name>
        <reference anchor="Delta">
          <front>
            <title>Delta encoding in HTTP</title>
            <author fullname="J. Mogul" initials="J." surname="Mogul"/>
            <author fullname="B. Krishnamurthy" initials="B." surname="Krishnamurthy"/>
            <author fullname="F. Douglis" initials="F." surname="Douglis"/>
            <author fullname="A. Feldmann" initials="A." surname="Feldmann"/>
            <author fullname="Y. Goland" initials="Y." surname="Goland"/>
            <author fullname="A. van Hoff" initials="A." surname="van Hoff"/>
            <author fullname="D. Hellerstein" initials="D." surname="Hellerstein"/>
            <date month="January" year="2002"/>
            <abstract>
              <t>This document describes how delta encoding can be supported as a compatible extension to HTTP/1.1. [STANDARDS-TRACK]</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="3229"/>
          <seriesInfo name="DOI" value="10.17487/RFC3229"/>
        </reference>
        <reference anchor="HTTP">
          <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="HTTP-SF">
          <front>
            <title>Structured Field Values for HTTP</title>
            <author fullname="Mark Nottingham" initials="M." surname="Nottingham">
              <organization>Cloudflare</organization>
            </author>
            <author fullname="Poul-Henning Kamp" initials="P." surname="Kamp">
              <organization>The Varnish Cache Project</organization>
            </author>
            <date day="21" month="April" year="2024"/>
            <abstract>
              <t>   This document describes a set of data types and associated algorithms
   that are intended to make it easier and safer to define and handle
   HTTP header and trailer fields, known as "Structured Fields",
   "Structured Headers", or "Structured Trailers".  It is intended for
   use by specifications of new HTTP fields that wish to use a common
   syntax that is more restrictive than traditional HTTP field values.

   This document obsoletes RFC 8941.

              </t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-ietf-httpbis-sfbis-06"/>
        </reference>
        <reference anchor="HTTP-Retrofit">
          <front>
            <title>Retrofit Structured Fields for HTTP</title>
            <author fullname="Mark Nottingham" initials="M." surname="Nottingham">
         </author>
            <date day="31" month="March" year="2023"/>
            <abstract>
              <t>   This specification nominates a selection of existing HTTP fields as
   having syntax that is compatible with Structured Fields, so that they
   can be handled as such (subject to certain caveats).

   To accommodate some additional fields whose syntax is not compatible,
   it also defines mappings of their semantics into new Structured
   Fields.  It does not specify how to negotiate their use.

              </t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-ietf-httpbis-retrofit-06"/>
        </reference>
        <reference anchor="RFC2046">
          <front>
            <title>Multipurpose Internet Mail Extensions (MIME) Part Two: Media Types</title>
            <author fullname="N. Freed" initials="N." surname="Freed"/>
            <author fullname="N. Borenstein" initials="N." surname="Borenstein"/>
            <date month="November" year="1996"/>
            <abstract>
              <t>This second document defines the general structure of the MIME media typing system and defines an initial set of media types. [STANDARDS-TRACK]</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="2046"/>
          <seriesInfo name="DOI" value="10.17487/RFC2046"/>
        </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="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>
        <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="RFC9113">
          <front>
            <title>HTTP/2</title>
            <author fullname="M. Thomson" initials="M." role="editor" surname="Thomson"/>
            <author fullname="C. Benfield" initials="C." role="editor" surname="Benfield"/>
            <date month="June" year="2022"/>
            <abstract>
              <t>This specification describes an optimized expression of the semantics of the Hypertext Transfer Protocol (HTTP), referred to as HTTP version 2 (HTTP/2). HTTP/2 enables a more efficient use of network resources and a reduced latency by introducing field compression and allowing multiple concurrent exchanges on the same connection.</t>
              <t>This document obsoletes RFCs 7540 and 8740.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="9113"/>
          <seriesInfo name="DOI" value="10.17487/RFC9113"/>
        </reference>
        <reference anchor="SSE" target="https://www.w3.org/TR/eventsource/">
          <front>
            <title>Server-Sent Events</title>
            <author/>
          </front>
          <seriesInfo name="W3C REC" value="eventsource"/>
          <seriesInfo name="W3C" value="eventsource"/>
        </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>
      </references>
      <references anchor="sec-informative-references">
        <name>Informative References</name>
        <reference anchor="FETCH" target="https://fetch.spec.whatwg.org">
          <front>
            <title>Fetch - Living Standard</title>
            <author>
              <organization/>
            </author>
            <date/>
          </front>
        </reference>
        <reference anchor="REST" target="https://roy.gbiv.com/pubs/dissertation/top.htm">
          <front>
            <title>Architectural Styles and the Design of Network-based Software Architectures</title>
            <author fullname="Roy T. Fielding" initials="R. T." surname="Fielding">
              <organization/>
            </author>
            <date/>
          </front>
          <refcontent>Doctoral Dissertation, University of California, Irvine</refcontent>
        </reference>
        <reference anchor="RFC7838">
          <front>
            <title>HTTP Alternative Services</title>
            <author fullname="M. Nottingham" initials="M." surname="Nottingham"/>
            <author fullname="P. McManus" initials="P." surname="McManus"/>
            <author fullname="J. Reschke" initials="J." surname="Reschke"/>
            <date month="April" year="2016"/>
            <abstract>
              <t>This document specifies "Alternative Services" for HTTP, which allow an origin's resources to be authoritatively available at a separate network location, possibly accessed with a different protocol configuration.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="7838"/>
          <seriesInfo name="DOI" value="10.17487/RFC7838"/>
        </reference>
        <reference anchor="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>
        <reference anchor="WEBSUB" target="https://www.w3.org/TR/websub/">
          <front>
            <title>WebSub</title>
            <author/>
          </front>
          <seriesInfo name="W3C REC" value="websub"/>
          <seriesInfo name="W3C" value="websub"/>
        </reference>
        <reference anchor="WS" target="https://www.w3.org/TR/websockets/">
          <front>
            <title>The WebSocket API</title>
            <author/>
          </front>
          <seriesInfo name="W3C NOTE" value="websockets"/>
          <seriesInfo name="W3C" value="websockets"/>
        </reference>
      </references>
    </references>
  </back>
  <!-- ##markdown-source:
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

-->

</rfc>
