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

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

<!-- Informative Sections -->

<section anchor="introduction">
      <name>Introduction</name>
      <t>The Per Resource Events Protocol defines a minimal HTTP-based framework by which clients can securely receive update <iref item="notification"/><xref format="none" target="notification">notifications</xref> directly from any resource of interest on the Open Web Platform.</t>
      <section anchor="motivation">
        <name>Motivation</name>
        <t>HTTP was originally designed to transfer a static documents within a single request and response. If the document changes, HTTP does not automatically update clients with the new versions. This design was adequate for web pages that were mostly static and written by hand.</t>
        <t>But web-applications today are dynamic. They provide (near-)instantaneous updates across multiple clients and servers. The many workarounds developed over the years to provide real-time updates over HTTP have often proven to be inadequate. Web programmers instead resort to implementing custom messaging systems over alternate protocols such as WebSockets, which requires additional layers of code in the form of non-standard JavaScript frameworks to synchronize changes of state.</t>
        <t>Per Resource Events is a minimal protocol built on top of HTTP that allows clients to receive <iref item="notification"/><xref format="none" target="notification">notifications</xref> directly from a resource of interest. Unlike other HTTP based solutions, Per Resource Events Protocol supports the use of arbitrary media-types for <iref item="notification"/><xref format="none" target="notification">notifications</xref>, which can be negotiated just like representations; thus giving implementers a lot of flexibility to customize <iref item="notification"/><xref format="none" target="notification">notifications</xref> according to the needs of their application.</t>
      </section>
      <section anchor="how-it-works">
        <name>How it Works</name>
        <t>A client application that wishes to receive <iref item="notification"/><xref format="none" target="notification">notifications</xref> about updates to a resource simply places a <tt>GET</tt> request on that resource with just one additional <iref item="Accept-Events"/><xref format="none" target="accept-events-header"><tt>Accept-Events</tt></xref> header. The server responds by sending, first the current representation of the resource (though a client can request for this to be skipped), followed by <iref item="notification"/><xref format="none" target="notification">notifications</xref> sent in response to resource events as parts of a multipart response while the request is open.</t>
        <t>If a server does not implement the Per Resource Events Protocol, the <tt>Accept Events</tt> header in a <tt>GET</tt> request is simply ignored. The resource returns the current representation thereby preserving backwards compatibility.</t>
      </section>
      <section anchor="scope">
        <name>Scope</name>
        <t>The Per Resource Events Protocol specifies:</t>
        <ul spacing="normal">
          <li>
            <t>a mechanism for the discovery of <iref item="notification"/><xref format="none" target="notification">notification</xref> capabilities per resource,</t>
          </li>
          <li>
            <t>a mechanism to request <iref item="notification"/><xref format="none" target="notification">notifications</xref> from a resource,</t>
          </li>
          <li>
            <t>representation and semantics for the response that transmits <iref item="notification"/><xref format="none" target="notification">notifications</xref>,</t>
          </li>
          <li>
            <t>a default representation for <iref item="notification"/><xref format="none" target="notification">notifications</xref> and associated semantics when used to transmit <iref item="notification"/><xref format="none" target="notification">notifications</xref>.</t>
          </li>
        </ul>
        <t>The Per Resource Events Protocol does not specify:</t>
        <ul spacing="normal">
          <li>
            <t>a specific authentication and authorization mechanism to be used with the Per Resource Events Protocol. Implementations are encouraged to use existing approaches for authentication and authorization.</t>
          </li>
          <li>
            <t>representation and semantics for <iref item="notification"/><xref format="none" target="notification">notifications</xref> (other than the default case).
            </t>
            <ul spacing="normal">
              <li>
                <t>Implementations are free to use any media-type for <iref item="notification"/><xref format="none" target="notification">notifications</xref>, which can be negotiated just like representations.</t>
              </li>
              <li>
                <t>Implementations are also free to define additional semantics for a given media-type, when used to transmit <iref item="notification"/><xref format="none" target="notification">notifications</xref> using the Per Resource Events Protocol.</t>
              </li>
            </ul>
          </li>
        </ul>
      </section>
      <section anchor="intended-audience">
        <name>Audience</name>
        <t>This specification is for:</t>
        <ul spacing="normal">
          <li>
            <t><eref target="http://data.europa.eu/esco/occupation/a7c1d23d-aeca-4bee-9a08-5993ed98b135">Server developers</eref> who wish to enable clients to listen for updates to particular resources.</t>
          </li>
          <li>
            <t><eref target="http://data.europa.eu/esco/occupation/c40a2919-48a9-40ea-b506-1f34f693496d">Application developers</eref> who wish to implement a client to listen for updates to particular resources.</t>
          </li>
        </ul>
      </section>
    </section>
    <section anchor="design">
      <name>Design</name>
      <t>The Per Resource Events Protocol is predicated on a resource being the most intuitive source for <iref item="notification"/><xref format="none" target="notification">notifications</xref> about its own updates.</t>
      <t>This is unlike other <iref item="notification"/><xref format="none" target="notification">notification</xref> protocols that require additional resources to be specifically dedicated as endpoints for delivering <iref item="notification"/><xref format="none" target="notification">notifications</xref>. Servers that provide updates are forced to maintain these additional endpoints and clients that consume these updates have to co-ordinate data between the endpoint and a resource of interest.</t>
      <t>By giving every resource the ability to send <iref item="notification"/><xref format="none" target="notification">notifications</xref> when it updates, the Per Resource Events Protocol aims to reduce the complexity of  both servers and clients implementing <iref item="notification"/><xref format="none" target="notification">notifications</xref>; thus, making it easier for developers to build and maintain real-time applications.</t>
      <section anchor="principles">
        <name>Principles</name>
        <t>The Per Resource Events Protocol treats <iref item="notification"/><xref format="none" target="notification">notifications</xref> as a temporally extended representation of any resource. That is, a representation can describe not (just) the state of the resource but events on the resource. With HTTP allowing representations to provide a potentially unbounded stream of data, the Per Resource Events Protocol is able to communicate events on the resource as <iref item="notification"/><xref format="none" target="notification">notifications</xref>.</t>
      </section>
      <section anchor="goals">
        <name>Goals</name>
        <t>The goals of the Per Resource Events Protocol are:</t>
        <ul spacing="normal">
          <li>
            <t>to provide <iref item="notification"/><xref format="none" target="notification">notifications</xref> only using the HTTP protocol <eref target="https://www.rfc-editor.org/info/std97">STD97</eref> <xref target="HTTP"/> so that the clients are able to request for update <iref item="notification"/><xref format="none" target="notification">notifications</xref> using the Fetch API <xref target="FETCH"/>.</t>
          </li>
          <li>
            <t>to provide updates directly from the resource of interest, obliviating the need to connect to another endpoint for <iref item="notification"/><xref format="none" target="notification">notifications</xref>, minimizing round-trips between clients and servers and the need to co-ordinate responses between a resource and the endpoint.</t>
          </li>
          <li>
            <t>to allow arbitrary representations for <iref item="notification"/><xref format="none" target="notification">notifications</xref>. Implementers shall be able to provide <iref item="notification"/><xref format="none" target="notification">notifications</xref> that are potentially more expressive when compared to existing HTTP based messaging protocols such as Server Sent Events <xref target="SSE"/>.</t>
          </li>
        </ul>
      </section>
      <section anchor="constraints">
        <name>Constraints</name>
        <t>To the extent feasible, the Per Resource Events Protocol:</t>
        <ul spacing="normal">
          <li>
            <t>adheres to established practices and conventions. In particular, every attempt has been made to reuse existing protocols and specifications. Implementers shall be able to repurpose existing tools and libraries for implementing this specification.</t>
          </li>
          <li>
            <t>conforms to the REST Architectural Style <xref target="REST"/> and best practices for Building Protocols with HTTP <xref target="RFC9205"/>. This specification can, thus, be used to extend the capabilities of any existing HTTP resource to provide <iref item="notification"/><xref format="none" target="notification">notifications</xref>. Implementers shall be able to scale <iref item="notification"/><xref format="none" target="notification">notifications</xref> along with their data/applications.
<!--
  See my original comment on the Solid/Specification Gitter channel on 24 April 2020
  https://matrix.to/#/!PlIOdBsCTDRSCxsTGA:gitter.im/$VgCcuq2HbpLKJvxIw4witAUOsqcdhC98glgzqVI1WOY?via=gitter.im
-->
            </t>
          </li>
        </ul>
      </section>
      <section anchor="known-limitations">
        <name>Known Limitations</name>
        <t>The Per Resource Events Protocol only allows <iref item="notification"/><xref format="none" target="notification">notifications</xref> to be sent for events on a given resource. It is not possible for resources to send <iref item="notification"/><xref format="none" target="notification">notifications</xref> for arbitrary events such as state changes on multiple resources or combinations thereof. Implementations using Per Resource Events Protocol have to create separate resources to realize such <iref item="notification"/><xref format="none" target="notification">notification</xref> endpoints. But this is no different from APIs built on top of existing messaging protocols (See, for example, <xref target="WS"/> and <xref target="WEBSUB"/>).</t>
        <t>Due to the limits on connections per domain, the Per Resource Events Protocol is not suitable for use with HTTP/1.1, especially when providing <iref item="notification"/><xref format="none" target="notification">notifications</xref> for multiple resource from the same domain that might be accessed simultaneously. This limitation is identical to that of other HTTP based streaming based protocols such as Server-Sent Events <xref target="SSE"/>. Implementations are strongly encouraged to adopt HTTP/2 (or later) and implement mitigation strategies, such as to maximize the number of concurrent connections and to provide alternate locations for resources on different domains.</t>
        <!-- Conformance Section -->

</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>
      <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 an item without parameters <bcp14>MUST</bcp14> be specified in an Inner List (<xref section="3.1.1" sectionFormat="comma" target="HTTP-SF"/>).</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
Authorization: DPoP <token>
DPoP: <proof>
Last-Event-ID: *
Accept-Encoding: gzip
Accept-Events: PREP; accept=message/rfc822; accept-encoding=identity
]]></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-common-headers">
        <name>Common 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</tt> (<xref section="8.3.3" sectionFormat="comma" target="HTTP"/>). The subtype will depend on whether the <iref item="base response"/><xref format="none" target="base-response">base response</xref> is included in the response body.</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 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 <iref item="Accept-Events"/><xref format="none" target="accept-events-header"><tt>Accept-Events</tt></xref> as one of the values.</t>
              </li>
              <li>
                <t><tt>Last-Modified</tt> (<xref section="8.8.2" sectionFormat="comma" target="HTTP"/>).</t>
              </li>
              <li>
                <t><tt>ETag</tt> (<xref section="8.8.3" 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="only-notifications-response">
        <name>Only Notifications</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>A <iref item="resource server"/><xref format="none" target="resource-server">resource server</xref> <bcp14>MUST NOT</bcp14> send the <iref item="base response"/><xref format="none" target="base-response">base response</xref>, 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.</t>
        <section anchor="only-notifications-response-headers">
          <name>Headers</name>
          <t>A <iref item="resource server"/><xref format="none" target="resource-server">resource server</xref> that provides only <iref item="notification"/><xref format="none" target="notification">notifications</xref> using the Per Resource Events Protocol <bcp14>MUST</bcp14> include the <tt>Vary</tt> header field (<xref section="12.5.5" sectionFormat="comma" target="HTTP"/>) with <tt>Last-Event-ID</tt> as one of the values.</t>
        </section>
        <section anchor="only-notifications-response-body">
          <name>Body</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> as a 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 multipart message body <bcp14>MAY</bcp14> contain at most one <iref item="notification"/><xref format="none" target="notification">notification</xref>.</t>
          <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-encoding
Last-Modified: Sat, 1 April 2023 10:11:12 GMT
Transfer-Encoding: chunked
ETag: 1234abcd
Content-Type: multipart/digest; boundary=next-message

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

<message>
--next-message-- 
]]></artwork>
          </figure>
          <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 example above. 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="composite-response">
        <name>Composite 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 before <iref item="notification"/><xref format="none" target="notification">notifications</xref>. An <iref item="application client"/><xref format="none" target="application-client">application client</xref> <bcp14>MAY</bcp14> opt out of this behaviour as described in <xref target="request"/> <xref format="title" target="request"/>.</t>
        <t>NOTE: Not only does this behaviour ensure interoperability, it is also desirable in most scenarios. It short-circuits an extra round trip that would be otherwise needed to fetch the current representation before <iref item="notification"/><xref format="none" target="notification">notifications</xref> and eliminates the need to co-ordinate the two responses.</t>
        <section anchor="composite-response-headers">
          <name>Headers</name>
          <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, a <iref item="resource server"/><xref format="none" target="resource-server">resource server</xref> <bcp14>MUST</bcp14> include <tt>Vary</tt> header field (<xref section="12.5.5" sectionFormat="comma" target="HTTP"/>) with <tt>last-event-id</tt> as one of the values.</t>
        </section>
        <section anchor="composite-response-body">
          <name>Body</name>
          <t>Where the response includes a <iref item="base response"/><xref format="none" target="base-response">base response</xref> body prior to 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> <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>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>the multipart response body with body parts containing <iref item="notification"/><xref format="none" target="notification">notifications</xref> as defined in <xref target="only-notifications-response"/>.</t>
            </li>
          </ol>
          <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-encoding
Last-Modified: Sat, 1 April 2023 10:11:12 GMT
Transfer-Encoding: chunked
ETag: 1234abcd
Content-Type: multipart/mixed; boundary=main-boundary

--main-boundary
Content-Type: text/html
CRLF
<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 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 response as defined in <xref section="5.1.2" sectionFormat="comma" target="RFC2046"/>, before closing the <iref item="notification"/><xref format="none" target="notification">notification</xref> 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>
    </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"/>, <xref target="RFC822"/>) 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, that is an opaque identifier for the current representation of the state of the resource.</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 sent as a result of a <tt>POST</tt> request that 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</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>
      </section>
    </section>
    <section anchor="security-considerations">
      <name>Security Considerations</name>
      <t>Since the Per Resource Events Protocol uses HTTP to transmit <iref item="notification"/><xref format="none" target="notification">notifications</xref>, it follows that the security and privacy considerations that apply to HTTP also apply to PREP. Considerations relevant to HTTP semantics and its use for transferring information over the Internet are discussed in <xref section="17" sectionFormat="of" target="HTTP"/>, and considerations related to HTTP/1.1 message syntax and parsing are discussed in <xref section="11" sectionFormat="of" target="RFC9112"/>.</t>
      <t>The following is a non-exhaustive list of security and privacy considerations that become especially pertinent due to the manner in which PREP uses HTTP for transmitting <iref item="notification"/><xref format="none" target="notification">notifications</xref>:</t>
      <section anchor="browser-fingerprinting">
        <name>Browser Fingerprinting</name>
        <t>The <iref item="Accept-Events"/><xref format="none" target="accept-events-header"><tt>Accept-Events</tt></xref> header field provides an extra vector that can aid unique identification of user agent. Follow the advice in <xref section="17.13" sectionFormat="comma" target="HTTP"/> to minimize the risk of fingerprinting.</t>
      </section>
      <section anchor="denial-of-service-attacks">
        <name>Denial-of-Service Attacks</name>
        <t>Resources that serve <iref item="notification"/><xref format="none" target="notification">notifications</xref>, by virtue of keeping the response stream open for an extended period of time are more susceptible to Denial-of-Service attacks because the effort required to request <iref item="notification"/><xref format="none" target="notification">notifications</xref> from the same resource is tiny compared to the time, memory, and bandwidth consumed by attempting to serve the <iref item="notification"/><xref format="none" target="notification">notifications</xref>. Servers ought to ignore, coalesce, or reject egregious <iref item="notification"/><xref format="none" target="notification">notification</xref> request, such as repeated <iref item="notification"/><xref format="none" target="notification">notification</xref> requests to resource from the same origin.</t>
      </section>
    </section>
    <section anchor="iana-considerations">
      <name>IANA Considerations</name>
      <t>The change controller for the following registrations is: "IETF (iesg@ietf.org) - Internet Engineering Task Force".</t>
      <section anchor="header-field-registration">
        <name>Header Field Registration</name>
        <t>IANA has registered the following entry in the "<eref target="https://www.iana.org/assignments/http-fields/">Hypertext Transfer Protocol (HTTP) Field Name Registry</eref>" defined by <xref target="HTTP"/>:</t>
        <table>
          <thead>
            <tr>
              <th align="left">Header Field Names</th>
              <th align="left">Status</th>
              <th align="left">Reference</th>
            </tr>
          </thead>
          <tbody>
            <tr>
              <td align="left">
                <iref item="Accept-Events"/><xref format="none" target="accept-events-header"><tt>Accept-Events</tt></xref></td>
              <td align="left">Provisional</td>
              <td align="left">
                <xref target="header-fields"/></td>
            </tr>
            <tr>
              <td align="left">
                <iref item="Events"/><xref format="none" target="events-header"><tt>Events</tt></xref></td>
              <td align="left">Provisional</td>
              <td align="left">
                <xref target="header-fields"/></td>
            </tr>
          </tbody>
        </table>
      </section>
      <section anchor="notifications-protocol-registry">
        <name>Notifications Protocol Registry</name>
        <t>The <iref item="Accept-Events"/><xref format="none" target="accept-events-header"><tt>Accept-Events</tt></xref> and <iref item="Events"/><xref format="none" target="events-header"><tt>Events</tt></xref> header fields identify specific protocols for <iref item="notification"/><xref format="none" target="notification">notifications</xref>. The "HTTP <iref item="notification"/><xref format="none" target="notification">Notifications</xref> Protocol Registry", created and maintained by IANA at <eref target="https://www.iana.org/assignments/http-parameters/">https://www.iana.org/assignments/http-parameters/</eref>, registers identifiers for <iref item="notification"/><xref format="none" target="notification">notification</xref> protocols.</t>
        <t><iref item="notification"/><xref format="none" target="notification">Notifications</xref> protocol registrations <bcp14>MUST</bcp14> include the following fields:</t>
        <ul spacing="normal">
          <li>
            <t>Identifier</t>
          </li>
          <li>
            <t>Name</t>
          </li>
          <li>
            <t>Pointer to specification text</t>
          </li>
        </ul>
        <t>Initial registrations are given below:</t>
        <table>
          <thead>
            <tr>
              <th align="left">Identifier</th>
              <th align="left">Name</th>
              <th align="left">Reference</th>
            </tr>
          </thead>
          <tbody>
            <tr>
              <td align="left">PREP</td>
              <td align="left">Per Resource Events Protocol</td>
              <td align="left">This document</td>
            </tr>
          </tbody>
        </table>
        <t>Values to be added to this namespace require IETF Review (see <xref section="4.8" sectionFormat="comma" target="RFC8126"/>). Identified protocols <bcp14>MUST</bcp14> conform to the purpose of sending <iref item="notification"/><xref format="none" target="notification">notifications</xref> as defined in <xref target="header-fields"/> of this document.</t>
      </section>
    </section>
  </middle>
  <back>
    <displayreference target="RFC9112" to="HTTP/1.1"/>
    <displayreference target="RFC9113" to="HTTP/2"/>
    <references>
      <name>References</name>
      <references anchor="sec-normative-references">
        <name>Normative References</name>
        <reference anchor="Delta">
          <front>
            <title>Delta encoding in HTTP</title>
            <author fullname="J. Mogul" initials="J." surname="Mogul"/>
            <author fullname="B. Krishnamurthy" initials="B." surname="Krishnamurthy"/>
            <author fullname="F. Douglis" initials="F." surname="Douglis"/>
            <author fullname="A. Feldmann" initials="A." surname="Feldmann"/>
            <author fullname="Y. Goland" initials="Y." surname="Goland"/>
            <author fullname="A. van Hoff" initials="A." surname="van Hoff"/>
            <author fullname="D. Hellerstein" initials="D." surname="Hellerstein"/>
            <date month="January" year="2002"/>
            <abstract>
              <t>This document describes how delta encoding can be supported as a compatible extension to HTTP/1.1. [STANDARDS-TRACK]</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="3229"/>
          <seriesInfo name="DOI" value="10.17487/RFC3229"/>
        </reference>
        <reference anchor="HTTP">
          <front>
            <title>HTTP Semantics</title>
            <author fullname="R. Fielding" initials="R." role="editor" surname="Fielding"/>
            <author fullname="M. Nottingham" initials="M." role="editor" surname="Nottingham"/>
            <author fullname="J. Reschke" initials="J." role="editor" surname="Reschke"/>
            <date month="June" year="2022"/>
            <abstract>
              <t>The Hypertext Transfer Protocol (HTTP) is a stateless application-level protocol for distributed, collaborative, hypertext information systems. This document describes the overall architecture of HTTP, establishes common terminology, and defines aspects of the protocol that are shared by all versions. In this definition are core protocol elements, extensibility mechanisms, and the "http" and "https" Uniform Resource Identifier (URI) schemes.</t>
              <t>This document updates RFC 3864 and obsoletes RFCs 2818, 7231, 7232, 7233, 7235, 7538, 7615, 7694, and portions of 7230.</t>
            </abstract>
          </front>
          <seriesInfo name="STD" value="97"/>
          <seriesInfo name="RFC" value="9110"/>
          <seriesInfo name="DOI" value="10.17487/RFC9110"/>
        </reference>
        <reference anchor="HTTP-SF">
          <front>
            <title>Structured Field Values for HTTP</title>
            <author fullname="Mark Nottingham" initials="M." surname="Nottingham">
              <organization>Cloudflare</organization>
            </author>
            <author fullname="Poul-Henning Kamp" initials="P." surname="Kamp">
              <organization>The Varnish Cache Project</organization>
            </author>
            <date day="3" month="August" year="2023"/>
            <abstract>
              <t>   This document describes a set of data types and associated algorithms
   that are intended to make it easier and safer to define and handle
   HTTP header and trailer fields, known as "Structured Fields",
   "Structured Headers", or "Structured Trailers".  It is intended for
   use by specifications of new HTTP fields that wish to use a common
   syntax that is more restrictive than traditional HTTP field values.

   This document obsoletes RFC 8941.

              </t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-ietf-httpbis-sfbis-03"/>
        </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="RFC822">
          <front>
            <title>STANDARD FOR THE FORMAT OF ARPA INTERNET TEXT MESSAGES</title>
            <author fullname="D. Crocker" initials="D." surname="Crocker"/>
            <date month="August" year="1982"/>
            <abstract>
              <t>This document revises the specifications in RFC 733, in order to serve the needs of the larger and more complex ARPA Internet. Some of RFC 733's features failed to gain adequate acceptance. In order to simplify the standard and the software that follows it, these features have been removed. A different addressing scheme is used, to handle the case of internetwork mail; and the concept of re-transmission has been introduced. Obsoletes RFC 733, NIC 41952.</t>
            </abstract>
          </front>
          <seriesInfo name="STD" value="11"/>
          <seriesInfo name="RFC" value="822"/>
          <seriesInfo name="DOI" value="10.17487/RFC0822"/>
        </reference>
        <reference anchor="RFC2046">
          <front>
            <title>Multipurpose Internet Mail Extensions (MIME) Part Two: Media Types</title>
            <author fullname="N. Freed" initials="N." surname="Freed"/>
            <author fullname="N. Borenstein" initials="N." surname="Borenstein"/>
            <date month="November" year="1996"/>
            <abstract>
              <t>This second document defines the general structure of the MIME media typing system and defines an initial set of media types. [STANDARDS-TRACK]</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="2046"/>
          <seriesInfo name="DOI" value="10.17487/RFC2046"/>
        </reference>
        <reference anchor="RFC5789">
          <front>
            <title>PATCH Method for HTTP</title>
            <author fullname="L. Dusseault" initials="L." surname="Dusseault"/>
            <author fullname="J. Snell" initials="J." surname="Snell"/>
            <date month="March" year="2010"/>
            <abstract>
              <t>Several applications extending the Hypertext Transfer Protocol (HTTP) require a feature to do partial resource modification. The existing HTTP PUT method only allows a complete replacement of a document. This proposal adds a new HTTP method, PATCH, to modify an existing HTTP resource. [STANDARDS-TRACK]</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="5789"/>
          <seriesInfo name="DOI" value="10.17487/RFC5789"/>
        </reference>
        <reference anchor="RFC8126">
          <front>
            <title>Guidelines for Writing an IANA Considerations Section in RFCs</title>
            <author fullname="M. Cotton" initials="M." surname="Cotton"/>
            <author fullname="B. Leiba" initials="B." surname="Leiba"/>
            <author fullname="T. Narten" initials="T." surname="Narten"/>
            <date month="June" year="2017"/>
            <abstract>
              <t>Many protocols make use of points of extensibility that use constants to identify various protocol parameters. To ensure that the values in these fields do not have conflicting uses and to promote interoperability, their allocations are often coordinated by a central record keeper. For IETF protocols, that role is filled by the Internet Assigned Numbers Authority (IANA).</t>
              <t>To make assignments in a given registry prudently, guidance describing the conditions under which new values should be assigned, as well as when and how modifications to existing values can be made, is needed. This document defines a framework for the documentation of these guidelines by specification authors, in order to assure that the provided guidance for the IANA Considerations is clear and addresses the various issues that are likely in the operation of a registry.</t>
              <t>This is the third edition of this document; it obsoletes RFC 5226.</t>
            </abstract>
          </front>
          <seriesInfo name="BCP" value="26"/>
          <seriesInfo name="RFC" value="8126"/>
          <seriesInfo name="DOI" value="10.17487/RFC8126"/>
        </reference>
        <reference anchor="RFC9112">
          <front>
            <title>HTTP/1.1</title>
            <author fullname="R. Fielding" initials="R." role="editor" surname="Fielding"/>
            <author fullname="M. Nottingham" initials="M." role="editor" surname="Nottingham"/>
            <author fullname="J. Reschke" initials="J." role="editor" surname="Reschke"/>
            <date month="June" year="2022"/>
            <abstract>
              <t>The Hypertext Transfer Protocol (HTTP) is a stateless application-level protocol for distributed, collaborative, hypertext information systems. This document specifies the HTTP/1.1 message syntax, message parsing, connection management, and related security concerns.</t>
              <t>This document obsoletes portions of RFC 7230.</t>
            </abstract>
          </front>
          <seriesInfo name="STD" value="99"/>
          <seriesInfo name="RFC" value="9112"/>
          <seriesInfo name="DOI" value="10.17487/RFC9112"/>
        </reference>
        <reference anchor="RFC9113">
          <front>
            <title>HTTP/2</title>
            <author fullname="M. Thomson" initials="M." role="editor" surname="Thomson"/>
            <author fullname="C. Benfield" initials="C." role="editor" surname="Benfield"/>
            <date month="June" year="2022"/>
            <abstract>
              <t>This specification describes an optimized expression of the semantics of the Hypertext Transfer Protocol (HTTP), referred to as HTTP version 2 (HTTP/2). HTTP/2 enables a more efficient use of network resources and a reduced latency by introducing field compression and allowing multiple concurrent exchanges on the same connection.</t>
              <t>This document obsoletes RFCs 7540 and 8740.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="9113"/>
          <seriesInfo name="DOI" value="10.17487/RFC9113"/>
        </reference>
        <reference anchor="SSE" target="https://www.w3.org/TR/eventsource/">
          <front>
            <title>Server-Sent Events</title>
            <author/>
          </front>
          <seriesInfo name="W3C REC" value="eventsource"/>
          <seriesInfo name="W3C" value="eventsource"/>
        </reference>
        <reference anchor="RFC2119">
          <front>
            <title>Key words for use in RFCs to Indicate Requirement Levels</title>
            <author fullname="S. Bradner" initials="S." surname="Bradner"/>
            <date month="March" year="1997"/>
            <abstract>
              <t>In many standards track documents several words are used to signify the requirements in the specification. These words are often capitalized. This document defines these words as they should be interpreted in IETF documents. This document specifies an Internet Best Current Practices for the Internet Community, and requests discussion and suggestions for improvements.</t>
            </abstract>
          </front>
          <seriesInfo name="BCP" value="14"/>
          <seriesInfo name="RFC" value="2119"/>
          <seriesInfo name="DOI" value="10.17487/RFC2119"/>
        </reference>
        <reference anchor="RFC8174">
          <front>
            <title>Ambiguity of Uppercase vs Lowercase in RFC 2119 Key Words</title>
            <author fullname="B. Leiba" initials="B." surname="Leiba"/>
            <date month="May" year="2017"/>
            <abstract>
              <t>RFC 2119 specifies common key words that may be used in protocol specifications. This document aims to reduce the ambiguity by clarifying that only UPPERCASE usage of the key words have the defined special meanings.</t>
            </abstract>
          </front>
          <seriesInfo name="BCP" value="14"/>
          <seriesInfo name="RFC" value="8174"/>
          <seriesInfo name="DOI" value="10.17487/RFC8174"/>
        </reference>
      </references>
      <references anchor="sec-informative-references">
        <name>Informative References</name>
        <reference anchor="FETCH" target="https://fetch.spec.whatwg.org">
          <front>
            <title>Fetch - Living Standard</title>
            <author>
              <organization/>
            </author>
            <date/>
          </front>
        </reference>
        <reference anchor="REST" target="https://roy.gbiv.com/pubs/dissertation/top.htm">
          <front>
            <title>Architectural Styles and the Design of Network-based Software Architectures</title>
            <author fullname="Roy T. Fielding" initials="R. T." surname="Fielding">
              <organization/>
            </author>
            <date/>
          </front>
          <refcontent>Doctoral Dissertation, University of California, Irvine</refcontent>
        </reference>
        <reference anchor="RFC7838">
          <front>
            <title>HTTP Alternative Services</title>
            <author fullname="M. Nottingham" initials="M." surname="Nottingham"/>
            <author fullname="P. McManus" initials="P." surname="McManus"/>
            <author fullname="J. Reschke" initials="J." surname="Reschke"/>
            <date month="April" year="2016"/>
            <abstract>
              <t>This document specifies "Alternative Services" for HTTP, which allow an origin's resources to be authoritatively available at a separate network location, possibly accessed with a different protocol configuration.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="7838"/>
          <seriesInfo name="DOI" value="10.17487/RFC7838"/>
        </reference>
        <reference anchor="RFC9205">
          <front>
            <title>Building Protocols with HTTP</title>
            <author fullname="M. Nottingham" initials="M." surname="Nottingham"/>
            <date month="June" year="2022"/>
            <abstract>
              <t>Applications often use HTTP as a substrate to create HTTP-based APIs. This document specifies best practices for writing specifications that use HTTP to define new application protocols. It is written primarily to guide IETF efforts to define application protocols using HTTP for deployment on the Internet but might be applicable in other situations.</t>
              <t>This document obsoletes RFC 3205.</t>
            </abstract>
          </front>
          <seriesInfo name="BCP" value="56"/>
          <seriesInfo name="RFC" value="9205"/>
          <seriesInfo name="DOI" value="10.17487/RFC9205"/>
        </reference>
        <reference anchor="WEBSUB" target="https://www.w3.org/TR/websub/">
          <front>
            <title>WebSub</title>
            <author/>
          </front>
          <seriesInfo name="W3C REC" value="websub"/>
          <seriesInfo name="W3C" value="websub"/>
        </reference>
        <reference anchor="WS" target="https://www.w3.org/TR/websockets/">
          <front>
            <title>The WebSocket API</title>
            <author/>
          </front>
          <seriesInfo name="W3C NOTE" value="websockets"/>
          <seriesInfo name="W3C" value="websockets"/>
        </reference>
      </references>
    </references>
  </back>
  <!-- ##markdown-source:
H4sIAAAAAAAAA91923LbVpboO78CLZ+aIyUEdfWNsd2tSHKsacfWkZSkulyu
EghsUhiDAAOAohhFXfMR5+W8zbfMp8yXnHXZV2CDotzd1VOTSiUigH1ba+11
32uHYdir0zoTw2DjTJTBuaiKeRmL4ORG5HW10YtGo1Lc4Nvzk7ONXhzVYlKU
y2FQ1UmvlxRxHk2hcVJG4zqczGd1FF7X9WyUVuFMlGEp+wsF9Rfu7PSq+Wia
VlVa5PVyBk1PTy7f9vL5dCTKYS+B/oe9uMgrkVfzahjU5Vz0YPz9XlSKCOZx
OJtlKUwD2ldBlCcw5SgLL9Op2OgtivLLpCzmM/ju3eUlzPeLWMLDZNgLgjDI
izodq7b0ZDYfwXR6MLe5wG/cxkHAM9z4BfpN80nwA77G59MozeB5KuoxLTdc
TP602B8U5QTfRmV8DW/xRTXc3s7Sqq4G/Hr7EN6lN6LaPpuPYB3bdhfb2HiS
1tfzETQ/ugVkbM9KQSNmAJiqtnql1wP+epAW9OH2mmgYXNfTbKPXi+b1dQFQ
D0IYIQjG8yxjdG6cR9fzLPgBO9qgd0IuOb6Fvr7FWf9pVhZ1kePzQVxMubsi
S/MvYVqKcRhnIsoRmoRCGDatlwhjahYX0JmH4IIz+bbXy4tyCqi6IcQci6wG
7J+/Pdrf23sJDxBD9Pvl7u6O/B1evAVyCo8HGqi4/mqM/93ZVx+di7osxmnt
+bSUr8KdZ/A1dP5ib2/If+3tHDyTfz59/uKl/PPF7p56CvOgb4GshjTQLv1I
0mqWRUt+tL072NVf7ztf73m+xmcXFyfD4Jf9owFjjmDV66X52IbO25PLo3fc
XR2VEwFrU2QyFnV8PahmIh4srqN6MUEq5C9527/FD2ArvE9vkMQvathTUZnw
dHA3BuMoqwRO++Ti0j9IWSwHk1F6g3SwjXtqGxZSibKmrbZdFzOkOHtU2ga1
iOt5GWUw6DITvJvrawHIrtJJHhTj4IOocU+Ho6gSSXBRjOsFsAG7taioW03J
9E8o/x8EaQ485HxwOQjepiJLYIX6FVP6ebEMmm+ZCfFXU2BTsJkvxKwWyKLk
46WIymGwt7OzQw+A3oFn1YChYXBcxHWBqzq2YNAPfsoBWWUFmwAXdhRlKaAw
T6N+cFoC5AXTxfMX+y8UQe3tPMU/fzn5/uKn75kIFoL4FTy8MA+K+Iuoq16v
F4ZhEI2quoziutfz7a4UgBxM0zydwvzURgxG8zSrgyIPAFE4OSQ+QERUB1GW
FYsqiLOUmtcFrDQWsBCXlwLdwvM6WwbjspgCHpeB4jjYXwqQgd/1ILgE7K7a
9cEmipktnCfwswT7B7zjzKBhmoiIp4W/pkVVY8/zFHdBIPsDmDamFo2KeR3E
11E+ARKbRonAZURmgjAW9md+15XIxgMJz2maJBnsuFd/gB+nZtsBRcQ8QBi+
6fWewDvgHcmcHgZ3T1Lr532vhwu/u/sXBfL7+yARY8C6jQ/iTkzp4xKIEyk/
GC2DxXUKO1ThII7yoBIxUH621NiYz5BmvwopCrofZyIPfhGj4AxEDS4TIPDk
SfAjdHkTyUVN9Q9YElHJIqqCokwnaQ6ksoRF4c6FBQCIgQzzagzIjkBXgEZx
ANrCfEqLWIDYSnN8A3suQ+D/Ose5IAeASc1Q/g+C0zHNTDVTSOwzgSYFQA9W
jHu/QKTENAUJCgUuHIl6ycUioA0IfSMhAtp5trQGIItf59gOCQg2VTCLkFyI
2hYAJyI36F2uBOe5KNMadjxiCOaVALi+n+PHozCyVZS6SKJlgFwrWQLLSWPa
BUvcfTdA0cFmDqwk3AJGBZwX/hXFvJKLgGnFZVEB1c6zOp1lZlU4PvAWXA9v
qimiFwkmAhUlT3BtNyIrZrh74CuCAPIs2sNq6BI1pxo0Jz0efUvQvY5ukExw
gfi5QOYQjGB35ApUA6IWeDkBYp3CTJDZ1iIiDBZljQ3SKcwacYeiJZ5XgKhg
KqoqmuCDagnfT+WoUQb0mCMK1CapgmoOhA/YgYEumMv15W5AggHyRsQlKQIa
9g8ITpwF0HZcJDhTWjWSMj7LizyspHAL/jW6iS7iMp3VZqsRaKplHl+XRZ7+
JjTPgMaIdjH4p/LUDo76U56lX+AZLFVijjlIVWRz6qff4DvVfDYD7DDTm1fU
XVSOUtiu5RKQk6RRiGpv1ealCvjIgka4oybwljj0vwFqA5oIaKEwMVgZN/kO
hgF6nrByockB8RQFGWxeGH2cidt0lGYoGgEaTCaIgAYjj2PQ5LEbZC60o0VC
2IEfKRCQ2XXMut4VC2DmwS+E27sn18UiBNWOUA3s61BiwG4n93taXYsViGGJ
oraMK0wqXCJs7iyKibdf/XByeaXZmxpBf07ciYBX5MKm5deHcQwqR8g09jq4
hn0lSt7rvPElnwQIAAMCgCNk+sE4LSuWjyAhSlyeixAJLjODTdCb5hPYZQoc
iFw1X6SAGjkl7/3qSzoDjrIFwxRIxIB4GNsFDo6EW09xcQajHIx1WNzRswhJ
EElPMjf4bdoAmQGz43nyTGAOwMwQsafYRoJAiwBNWNTIIfg+PbpieMo9eyXh
GZAMcnEEI0kkgmwoQAlhoOs1gI0wL/NqFYxxL4oRsniBE0WSHUXxF1BdAVug
Is/gM6Z3JtSLGNYGFFrh/73KAurvAGRRDXu9bxFmAplTWk0ligRaDjHy0SXz
OoMSQOgsotGgeTBjwqGl9BtdEaYYCC5OGwwI2zVWzPIIhBAIx0rPydAAKW2o
D0xBu2owFZoFaEMR0EGzX486ByNFFei8zHjMoItrkFHzytI9YCy38cCrhyka
YhgvJYQlxGOyLFCAxWalbGykv/ETB4AjwXPQaoczGKg0ilDVckAvEHkMcAV9
g6aOLBn4YUUiE3hTWUTxteTGD81lsA5mXHhusuQADLG4VIiIQYpsDcDS+NY7
53EphJotqh5GbvxdxEb3wGCLFnp01qFtvukuNULBI3Jrdv116ARek5hpoY92
6+E8AUYZC1bygfGKJIzkM9q8yEEk9TAOUpoNEdanC8m5pHpWVp830YoGIxrE
STQQ87KY4f+2Bezn7SKO5zM2oqPn8W6ytw9jiTgKD0ZChC+jnRfh05cv90Xy
8sVod//pFqyuIPmFixN5NLJ0RniCnijBu8oSX8h703ieRYY1VEhJnyxX21dM
OD7YifZe7r4MD15E8J8dEYWjpzvPwt3x/sH42cv9g5fPEnfChotrafTISYMd
Jp0Hd09Yu/ey05Z5aUnwkVC4f5yFiYytWORqjgNJCfDv3FbRHNZsNF2pFpBS
a9OzXpsSwYqw2NpSSwCJCoQ4K1JENM4wERm6G3ApLgsMmADliMoS0PZGSQuM
eXdMI+gvYj26cqZlBkP+oikMu0TfLZhrso3qmMwJVO6KkJQ41PORfmBN9UII
5j2qV2ZsfoUXrKylUicFyTv9GXYRGT0SdaIGpmjvp1p367e3eBClU6n6gfHO
faLERhWVPTfBCBCpjC9n+Y6x4wzMWnAfAEpuZJiBiKoUqIFRpXYW4RjshoS6
1dA3ZpptWDIzOgMUx2gaooY70z+8VF9DR03pi5QTBWCFzdBlBTQlbpmlefRG
24OASlGEylKfEOV8inweNh+YVyNSnYNN5PNbBEsypFpK6Aj2j9QNpTfCjPML
SlIybMhwQvg1hIVt0kbBrEA3XMq+gHyE1jDqCbh4sgOR6nyIRzMO2SUR6XQ6
z2lrdUwLwdZULQAbPxQgngARE/y/xAH9rVbcoLVSkFCw5u8ip8hxEVoYERS0
hfnp4vL45XPmxuiEXSwWg3Ich8AU6qKkYAO6iberOnn5fAuGxuaoSxbGiab9
Cch15Opt5d/rVzITYt/x4dkp9E4+aJSRznrU/neNWQeU1u7uB8UI+BYoB2oE
tPEYJXkOHZC1lTMn1dzCo3CQOZ7+RsSCFBDWYOtXmtl43Cja+WxGNJxKKbKm
B4s7qYZqPhICRK2WZd0k2tasLeUQ51NdQw/I8hVe/CTCLgVAn0330wLVylsc
sELRRXyPDI+SF6cVTMtjYPwybQeM1FouUCRLt8fd3cXFidKJjmAqsEySCHdP
YvMLNwFb68RYAFnI+WBFni3ImneCxhPtaSAIWDsa4wlMKYpB3ssgAQyAk5BQ
yy1loC+FQlQjT6tB7iDOUAWUjt9SOAq2WSrRgq22PYgQwOi8nBV2d3WhusrS
EaA9lYq7IxrqloaIJANrQldVpbwbGG3xhUkAZvgK2QcMM8KdaoCDY32PEgTH
OdNrW2geCo05soDGiEdVBd7dl8JKmTJELigUmGPY1qQUCi41GXncQbMPwbUC
7ablc8kK6F9ZVWlJbHzblYdBgE56isdcgH0wXWrPNHF0pD7Jxi+KLE22L5yV
/4De3JKcfrnI8Mu9g+AQRGoW7O3scZhHsdppBPzkdlAX20+2/3CWnX5Mvq+O
Lo/PL45uq8sfDocT6muQTrf/18+To3j+69670ez9n//15vZ0cQCLOPzpY/Vr
nFwfvXwxySa//frz6e4vH//yR2B8r3VTjE9TZOFJ8OccFcv3wNEU87h78gWf
hZl55hX5JECkw7HBN1idFJJ/GjGnbCYjgU/JKYKCHIidNi81cVRTj7JFBphm
f3IAxVBYD9Ae1ty4uE230B7wNkIWLFkdcIZi3DaiWSC5K9cKJyo9uFDgEZKV
m1mjZoWORpqVo5lrBXcQoFe/lqp8DjZnOh4L8vqQKAPhV7WcvXpD+HjqJhBn
n4F+G+FK0EP7y4Xc0PAnxfvu78H67h3PheIHhGoClZSFtPQZecFQVezQaciz
ARZMpNCG7E/zAwxIA8skHkCSgyQF79qWFkvNW3gyEr2KpkJOhsXSNJ1c17Sz
YwA4eaVTbM9BjmwpOZAhYpwwsAvycGS88IhcxG33Nulz7FmrSD74RVboE1le
xwL0CCwGNWDHHRMlBYgRDscHmwAATMQotwhXxl6FBaQTXgJKvlpMUjQv1FzI
lrpNyalNOgZlu3CkIldORButpFNYWq2OjWSFjQxrr+QWYTIOUCflsOURi5YI
nRYybKmilvYrEtzq1z1xnmMVejsyEhdNa/k4tAQxutSBj0cU82YtLEkjjA3B
X5LSeWFAVKLi8ExL/iAmMFKjkz9Yvzhny5iDhx+KWgUkS+s5tKlVbBI54RdB
EbGkCjZ+/OnicqPP/w8+fKS/z0/+z0+n5yfH+PfFu8P37/UfPfnFxbuPP70/
Nn+Zlkcff/zx5MMxN4angfOot/Hj4V/gDa514+PZ5enHD4fvN/SCdTgT16qC
aoBf0NbYlO8p4ynBNt8fnf3nf+weAPH+AdNQdndfwsbmHy92nx/AD9yzPBqx
e/4JZLbsgXwUEXu5ATUgumGfZWiyodRFmYIcFSD8zSeEzOdh8GoUz3YP3sgH
uGDnoYKZ85Bg1n7SasxA9DzyDKOh6TxvQNqd7+FfnN8K7tbDV3/M0FsY7r74
I9A+qa0ZkivpMWccrSf1lZ+GxTicyad+LxJxKvTKy0Cjsk993Y5JmtH2ciJh
SiW6JHeJGo9ooxS0n8kZc11ilKZQoqihPfbuhsETnePFFs29jlMyJ+wNmZuS
g4EYBrFTVpFUQGWTrcS+ZhP7g2cgiTDMQ75WnLoMnYwxY6Zqt3g22McW5MFA
t2vAwcTWdy8G+4NdlnI4e0uVC9k8u7fdj0f0qGMNINJA1ZjgnvIs4GlzASMB
ykEKsKEtKVDnxigk2rKsR0hTVkXfEbkzkxTxzScT7SOofW4DH4n4wY+Czc3N
RldbW1vt/qvHtD3/6rbQ2A6FMhI+e1EDnx6u+SkO1u6W59p+Xj2+k/ZEHt0J
soJTZMHohVMeRPbu24+ACbS+Qn93adwCn9o0+1///n8bO/HzZqvrcHcLmTLH
Myiq6gs+4D5pt/Tsk/aYrfXBVmovZtzkS6zEtyGsEnUcUqNMKrBHeQHiJsrm
7MiJ8ka///Xv/6+yXbXt9B9Sf2hzswotjHeZEjqkUuwJz1wK5LBFVkwQh7X5
JXm4YdO89Skzh+E+ZBDbSu/9B+sHwOxQzYdNJ1QQPdDZpLleR6iXCmQ1FeVq
0SJRqtdbrGhHuTKZef3kpHDDEeN5Nk5RrS2m2vsPXYB+ANNPI0kVqASHykt1
/z38wjQV+gWTvmzFYhfFPEvYRiLvCAe1RdLnZCdX7UcTwkwewN8njSJnrXyR
VsJS2u31yMmR6ReSvLgnTZyzLQmaaJVNRS1d4ZHxbsLypiqFx58MwRIooGZT
oRRq+t73IXFuG5ufG6hG/mD/ZvaSr2jR6LB6fI9rNYE2hFGFws9NhMMHo5Uf
YK/OF7JbxgaB57OLKGwhzFueuej83O2remRna3wvLZkPnemX7xjVb1kruXvC
qOf+OtQ3maGJ4X+xcNUapY+5ug4bJ7XJDfByIU7vk8Fu8qABN2QDthHvi+aT
KaePKDNOpw2sjGNhIpruiRR1PCxRqjwLShFSYXB08hRasKgPvEurorEwaS84
6xLWObNie0khmUFcTHJpzE7bOtdTpdh986mxdUky8xN5IEROAzDufAk4Vzk7
8skVB9/tR4BmX2cS2yu5RgM9PiaOoOeUEOlynJFCXlreBmmEY5KYJ9L61nbx
PMjH7BlhLDzn2K7BqZ2gZEeByX0inRVBNUVLrxLkNcEIuD1dtvwkU8UED08w
uyNxpdf7BQUWCT2EV1P4cyaVYi9rLFe6NnA6Mqca5R5F0jlbpCNQTqEOjQjO
IZ6PKoRNrsWU2pjkkdKOzF7vMPdgOgDTMQDjQZB/MHLiXy5sSjGJyiQDBQCh
i0YEBSMpRxBjtitXzGlk9mrJWtdwiJKbVKYX8NS/CKmQ4RfoQRSldtWwogTM
C1/M0W+EWkm5BE5GByZ08jXyCvLdlBXsbfQSeCEgjX303nDsnrIRFF0/sDKQ
vpGKRI3neCZDwRDJKcukdtHcHpcUWqdDE9JTyO7gvuRgRFb8giAlE1dbOJEj
oXKIpy2QvNMpu48x9lvqxzAYJzDAPiCtwXjMSKsmcxVzYGlMADsCVcYEb2tL
qXkCjOjnKEsTthN8PCi8ke8p01TzUYY0c9iH94gmLdqUhjJBYbouJDOn/BLN
kEkdohT21h6qjAoo3cJKKEjNyyTUuM3U3hv8PVbSyAz9m9dk0h5hS2wX5T9z
kTz32mQUEvlRzvkD3Vrea63hr6P7Ktmw1KpJROejirGk0oslWFy3XTRa0Vug
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
qbdqXXTUNATZEH/p/X9A8XiKNKUAAA==

-->

</rfc>
