<?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.19 (Ruby 3.3.3) -->
<rfc xmlns:xi="http://www.w3.org/2001/XInclude" category="std" consensus="true" docName="draft-gupta-httpbis-per-resource-events-02" ipr="trust200902" sortRefs="true" submissionType="IETF" symRefs="true" tocInclude="true" version="3">
  <!-- xml2rfc v2v3 conversion 3.23.2 -->
  <front>
    <title abbrev="PREP">Per Resource Events</title>
    <seriesInfo name="Internet-Draft" value="draft-gupta-httpbis-per-resource-events-02"/>
    <author fullname="Rahul Gupta">
      <organization/>
      <address>
        <email>cxres+ietf@protonmail.com</email>
      </address>
    </author>
    <date day="05" month="October" 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. An JavaScript implementation of this modification based on <eref target="https://github.com/badgateway/structured-headers">https://github.com/badgateway/structured-headers</eref> is available at <eref target="https://github.com/CxRes/structured-headers/tree/nesting">https://github.com/CxRes/structured-headers/tree/nesting</eref></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 anchor="sec-combined-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="M. Nottingham" initials="M." surname="Nottingham"/>
            <author fullname="P-H. Kamp" surname="P-H. Kamp"/>
            <date month="September" 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.</t>
              <t>This document obsoletes RFC 8941.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="9651"/>
          <seriesInfo name="DOI" value="10.17487/RFC9651"/>
        </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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
QVFXdqt1UT2NEHhD/K33/wCcQvUAbsEAAA==

-->

</rfc>
