<?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-03" 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-03"/>
    <author fullname="Rahul Gupta">
      <organization/>
      <address>
        <email>cxres+ietf@protonmail.com</email>
      </address>
    </author>
    <date day="21" 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>
        <t>Our goal with the Per Resource Events Protocol is to make <iref item="notification"/><xref format="none" target="notification">notification</xref> convenient for consumers. The Per Resource Events Protocol allows a client to receive <iref item="notification"/><xref format="none" target="notification">notifications</xref> together with the representation, saving on the unnecessary round trip. With a library like PREP Fetch, Per Resource Events may be consumed in JavaScript with just a few lines of code:</t>
        <figure anchor="prep-fetch-example">
          <name>PREP Fetch Example</name>
          <artwork><![CDATA[
const response = fetch('http://example.com', {
  headers: { 'Accept-Events': '"prep"' }
});
const prepResponse = prepFetch(response);

const representation = await prepResponse.getRepresentation();
// Do something with the representation
// API identical to fetch Response

const notifications = await prepResponse.getNotifications();
for await (const notification of notifications) {
  // do something with a notification
  // API identical to fetch Response
}
]]></artwork>
        </figure>
      </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 the 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>Browsers cap the number of persistent HTTP/1.1 connections per host, limiting the suitability of the Per Resource Events Protocol for web applications in the browser that simultaneously require <iref item="notification"/><xref format="none" target="notification">notifications</xref> from multiple resources on the same host. This limitation is identical to that of other HTTP streaming based protocols, such as Server-Sent Events <xref target="SSE"/>. Implementations are strongly encouraged to adopt HTTP/2 (or later). HTTP/1.1 servers might consider setting up a reverse proxy to serve PREP <iref item="notification"/><xref format="none" target="notification">notifications</xref> over HTTP/2 (or later) or implement mitigation strategies, such as to maximize the number of concurrent connections and to provide alternate hosts for resources. Browser clients receiving PREP <iref item="notification"/><xref format="none" target="notification">notifications</xref> over an HTTP/1.1 connection are advised to exercise caution when opening multiple simultaneous persistent connections to any given host.</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://solid.github.io/solid-prep/protocol/">https://solid.github.io/solid-prep/protocol/</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, implements the Per Resource Events Protocol and Solid-PREP at <eref target="https://github.com/nodeSolidServer/node-solid-server/tree/basic-prep">https://github.com/nodeSolidServer/node-solid-server/tree/basic-prep</eref>. It is available for testing on the Solid community test server at <eref target="https://solidcommunity.net:8443">https://solidcommunity.net:8443</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>
    <?line 977?>

<section anchor="acknowledgments" numbered="false">
      <name>Acknowledgments</name>
      <t>I would like to express my gratitude to Tim Berners-Lee for his recommendation to the IRTF for the Diversity Travel Grant that allowed me to first present this draft at IETF 118. I would like to thank IRTF, and in particular, the selection committee for the Diversity Travel Grants for sponsoring my visit to the co-located IRTF and IETF meetings in Prague. I would also like to acknowledge the help and guidance from Dhruv Dhody that allowed me to make the trip.</t>
      <t>I would like to thank Alain Bourgeois for his continued help in implementing the Per Resource Events Protocol in the Node Solid Server. I am also grateful to the Solid community for their support and encouragement of this work.</t>
    </section>
  </back>
  <!-- ##markdown-source:
H4sIAAAAAAAAA+1923LbSJbgO78CLW9MSS6Csi6+qcruVslyWdO+aCVVV3R4
HaEkkaQwBgEWAIpiudSxH7EfsN+yn7JfsueSVyBBUe7q6Y6N6ZiYskAg8+TJ
k+d+TsZx3KvTOpMH0capLKMzWRXzciSj42uZ19VGTwyHpbzGX8+OTzd6I1HL
SVEuD6KqTnq9pBjlYgofJ6UY1/FkPqtFfFXXs2FaxTNZxqUaL5Y0Xvxor1fN
h9O0qtIir5cz+PTk+OJ1L59Ph7I86CUw/kFvVOSVzKt5dRDV5Vz2YP69niil
ADgOZ7MsBTDg+yoSeQIgiyy+SKdyo7coys+TspjP4L03FxcA72e5hIfJQS+K
4igv6nSsv6Uns/kQwOkBbHOJ7/gfRxFDuPEzjJvmk+hH/BmfT0WawfNU1mNa
bryY/GmxNyjKCf4qytEV/Io/VAfb21la1dWAf94+hN/Sa1ltn86HsI5td4ht
/HiS1lfzIXx+dAObsT0rJc2YAWKq2hmVfh7w24O0oBe319yGwVU9zTZ6PTGv
rwrAehTDDFE0nmcZb+fGmbiaZ9GPONAG/SbVkkc3MNa3CPWfZmVRFzk+H4yK
KQ9XZGn+OU5LOY5HmRQ5YpO2EKZN6yXiWE5n8I9oA8elIUYFDBwgvuhU/drr
5UU5hW27pk16JbMaKOHs9dHe7u5zeIC7RX8/39l5pP6Oz1/zoyePd/SjM1mX
xTgFLJ7ErwYG84ikUv0UP3oCb8N3u4/2nxzwPx8/ffZc/fPZzq5+CnPtHhBq
4gMafof+SNJqloklP9reGeyYt/e8t3cDb+Oz8/Pjg+jnvaMB7xTho9dL87GL
gdfHF0dveLhalBMJK9JkMZb16GpQzeRosLgS9WKCVMdv8jF/jS8A6b9Nr5Gk
z2s4Q6JMGBw8fdFYZJVEsI/PL8KTlMVyMBmm17jv23iGtmEhlSxrOlrbdTFD
CnNnJbKv5aielyKDSZeZ5NNbX0nY0Cqd5FExjt7LGs9wPBSVTKLzYlwv4Ni7
X8uKhjWUS/+L1X+jKM2BZ5wNLgbR61RmCazQ/MSUfVYso+avzHT4rSmwJTi8
53JWS2RJ6vFSivIg2n306BE9APoGHlXDDh1Er4pRXeCqXjk46Ec/5bBZZQVE
jws7ElkKW5inoh+dlIB5yXTx9NneM01Qu48e4z9/Pv7h/KcfmAgWkvgTPDy3
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
6CuhIGrkaTV5u4a4YTobt5Segm2XSrTgqm13bgjs6LycFe5wdaGH4sSpVCnu
nmioWxoikgysCV2FlfYzYwp8KHcdcIY/IfuAaYaScpo0cnCuH1CC4DynZm0L
w0PhY073RmMkoKoC7+4rYaVNGSIXFArMMVxrUgkFn5qsPO6g2bvwWoF208rI
ywonkSotiY1v+/IwijBzmpLkz8E+mC5NujBxdKQ+xcbPiyxNts+9lf+I3umS
MjFzmeGbu/vWjcC595rVTgXwk5tBXWw/2P7DaXbyIfmhOrp4dXZ+dFNd/Hh4
MKGxBul0+7/9ZXI0mv+y+2Y4e/vnf7++OVnswyIOf/pQ/TJKro6eP5tkk19/
+cvJzs8f/vpHYHwvzKdYJETp3g+iP+eoWL5Ff65Cx5cHn/FZnNlnQZFPAkTl
DjbzBEmd1MmHVsxpm8lK4BPKw0BBDsROh1eFWx3VNKBskQFm2J+aQDMU1gNM
2mtu847tsJQTOR0iC1asDjhDMW4b0R3mmlU6UfHBxWIWTi19yFG7wgxQgszT
zo2SO4gw3bpW6nwOdmc6HksKQ5E4AwFYtbJwzaEI8dVNINA+I5596Zil8/O5
OtTwTyrEuL3dQn23hN3DgwJHjyUUeVlxDlQayTqqbRxDSUrOAYDXrgqUq0Qo
GksVWDRaUQ4qJjoz3csuV87/IYPDgqdKcd84k5xqBNiACbiPQvub6xwTSVAq
hmRpmkJTbriG5gSInRRkVuw4q6ciQaFw3G8IrzgkvIIuBhgSmA3qwp5jRiTF
TOF5N9oEDGFdXLk1sKjXqgQHd0Y6tbCSNaF+PiO1AV+hzPMbZaaU4YQ6kyDv
TRe50iTCTZ0wrlDi1nKSSmflZMPdpJTh7FMOAKdjyC7BkC7jaNMmioX7U/nH
Hk6FIgWtTnF2IImejuWAZRAgVFY/k+vUiBtZjuAPoHhKLGf9BUyknM6TpiSX
+Nyj4C6I9MWlYmlEZD1VYHPE8lagJ6dZYOP+RuqM/ov9ta90lciR1UPQ4aAe
x456glmAIN0ElWexbpqkAssY4F/q7DPaAVtSHbKWVBZ0pvLY1CKy1nXGx43r
XN4Xta6dKZ3nGBbSZTQoHz5LKt5Iqmjj3U/nFxt9/m/0/gP9++z4v/90cnb8
Cv99/ubw7Vvzj5564/zNh5/evrL/sl8efXj37vj9K/4Ynkbeo97Gu8O/wi+4
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
3v8D3/PbkerIAAA=

-->

</rfc>
