<?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.35 (Ruby 3.4.9) -->
<rfc xmlns:xi="http://www.w3.org/2001/XInclude" category="std" consensus="true" docName="draft-gupta-httpapi-events-query-02" ipr="trust200902" sortRefs="true" submissionType="IETF" symRefs="true" tocInclude="true" version="3">
  <!-- xml2rfc v2v3 conversion 3.32.0 -->
  <front>
    <title>HTTP Events Query</title>
    <seriesInfo name="Internet-Draft" value="draft-gupta-httpapi-events-query-02"/>
    <author fullname="Rahul Gupta">
      <organization/>
      <address>
        <email>cxres+ietf@protonmail.com</email>
      </address>
    </author>
    <date day="17" month="April" year="2026"/>
    <area>Web and Internet Transport</area>
    <workgroup>Building Blocks for HTTP APIs</workgroup>
    <keyword>event</keyword>
    <keyword>query</keyword>
    <keyword>notification</keyword>
    <abstract>
      <?line 97?>

<t>Events Query is a minimal protocol built on top of HTTP that allows user agents to receive <iref item="notification"/><iref item="event notification"/><xref format="none" target="notification">event notifications</xref> directly from any resource of interest. The Events Query Protocol (EQP) is predicated on the idea that the most intuitive source for <iref item="notification"/><iref item="event notification"/><xref format="none" target="notification">event notifications</xref> 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/events-query/draft-gupta-httpapi-events-query.html"/>.
        Status information for this document may be found at <eref target="https://datatracker.ietf.org/doc/draft-gupta-httpapi-events-query/"/>.
      </t>
      <t>
        Discussion of this document takes place on the
        Building Blocks for HTTP APIs Working Group mailing list (<eref target="mailto:httpapi@ietf.org"/>),
        which is archived at <eref target="https://mailarchive.ietf.org/arch/browse/httpapi/"/>.
        Subscribe at <eref target="https://www.ietf.org/mailman/listinfo/httpapi/"/>.
      </t>
      <t>Source for this draft and an issue tracker can be found at
        <eref target="https://github.com/CxRes/events-query"/>.</t>
    </note>
  </front>
  <middle>
    <?line 102?>

<section anchor="introduction">
      <name>Introduction</name>
      <t anchor="intro-http-traditional-use">HTTP was originally designed as a stateless, request/response protocol for transferring hypermedia documents on the web (<xref section="1.2" sectionFormat="comma" target="HTTP"/>). This design was adequate for web pages that were mostly static and written by hand.</t>
      <t anchor="intro-real-time-needs">But web applications have evolved over time to provide increasingly dynamic and interactive experiences, requiring near-instantaneous updates. HTTP does not automatically inform clients of changes to a resource. Developers have employed various techniques, such as Comet <xref target="COMET"/> and Server-Sent Events (<xref target="HTML"/>, Section 9.2) to work around this constraint, but these can be suboptimal for many applications.</t>
      <t anchor="intro-alternate-protocols">For this reason, web programmers often prefer implementing custom messaging systems over alternate protocols such as WebSocket <xref target="WS"/> and WebSub <xref target="WEBSUB"/>. Not only does this approach require additional layers of code, involving multiple Web APIs and/or userland libraries such as <eref target="https://socket.io/">socket.io</eref>, it demands extra coordination effort to synchronize representation and <iref item="event notification"/><iref item="notification"/><xref format="none" target="notification">notifications</xref> across multiple protocols. The dual-protocol approach thus compounds the development and maintenance overhead. Furthermore, deployment at scale is challenging with the <iref item="event notification"/><iref item="notification"/><xref format="none" target="notification">notifications</xref> traffic now opaque to network intermediaries.</t>
      <t anchor="intro-events-query">Events Query is a minimal protocol built on top of the Hypertext Transfer Protocol <xref target="HTTP"/> that allows applications to request <iref item="notification"/><iref item="event notification"/><xref format="none" target="notification">event notifications</xref> directly from a resource of interest using the <tt>QUERY</tt> method (<xref section="3" sectionFormat="comma" target="HTTP-QUERY"/>).</t>
      <t anchor="intro-convenience">The objective of this specification is to make the request and receipt of <iref item="notification"/><iref item="event notification"/><xref format="none" target="notification">event notifications</xref> extremely convenient for consumers. Events Query allows programmers to incorporate real-time functionality in their web applications without the need to switch to another protocol. Further, Events Query can deliver representation and <iref item="event notification"/><iref item="notification"/><xref format="none" target="notification">notifications</xref> from a resource in a single response, obviating any need for coordination and saving on unnecessary round trips.</t>
      <t anchor="intro-fetch-example" keepWithNext="true">With the help of a suitable composite media type parser, Events Query responses can be consumed with just a few lines of code, as illustrated in the JavaScript example below:</t>
      <figure anchor="events-query-fetch-example">
        <name>Events Query fetch example</name>
        <sourcecode name="events-query-fetch-example.js" type="javascript"><![CDATA[
const response = await fetch("http://example.com/foo", {
  method: "QUERY",
  headers: {
    Accept: "multipart/mixed",
    "Content-Type": "example/events-query"
  },
  body: JSON.stringify({
    state: { Accept: "text/plain" },
    events: { Accept: "example/event-notification" }
  })
});

// split the response into an iterable of representation and notifications
const splitResponse = splitHTTPResponseStream(response);

// read the representation
const {done, value: representation} = await splitResponse.next();
if (!done) {
  // do something with the representation
}

// iterate over notifications
for await (const notification of splitResponse) {
  // do something with a notification
}
]]></sourcecode>
      </figure>
      <t anchor="intro-conneg">Unlike other <iref item="notification"/><iref item="event notification"/><xref format="none" target="notification">event notification</xref> mechanisms, Events Query supports content negotiation for <iref item="event notification"/><iref item="notification"/><xref format="none" target="notification">notifications</xref>, just like representations. Thus, the Events Query Protocol preserves the flexibility of interaction afforded by HTTP and extends it to <iref item="notification"/><iref item="event notification"/><xref format="none" target="notification">event notifications</xref>.</t>
      <t anchor="intro-sync">When combined with suitable data synchronization technologies like Conflict Free Replicated Data Types (CRDT) or Operational Transforms (OT), <iref item="notification"/><iref item="event notification"/><xref format="none" target="notification">event notifications</xref> can be used to create "live" representations. This can immensely simplify the task of programming multi-author distributed real-time applications.</t>
    </section>
    <section anchor="design">
      <name>Design</name>
      <t anchor="resource-as-source-of-truth">Events Query is predicated on a resource itself being the most intuitive source for <iref item="event"/><xref format="none" target="event">events</xref> on it. Events Query treats <iref item="event notification"/><iref item="notification"/><xref format="none" target="notification">notifications</xref> as a response to a query for an <iref item="event"/><xref format="none" target="event">event</xref> occurring on the resource. With HTTP allowing representations to provide a potentially unbounded stream of data, the Events Query Protocol is also able to communicate multiple <iref item="event"/><xref format="none" target="event">events</xref> on the resource as a stream of <iref item="event notification"/><iref item="notification"/><xref format="none" target="notification">notifications</xref>.</t>
      <section anchor="goals">
        <name>Goals</name>
        <t anchor="goals-list">To aid the development of real-time applications, it is imperative that the Events Query Protocol reduces the complexity of both servers and clients implementing <iref item="notification"/><iref item="event notification"/><xref format="none" target="notification">event notifications</xref>. With this in mind, the goals of the Events Query Protocol are:</t>
        <ol spacing="normal" type="1"><li anchor="goal--http-only">
            <t>to provide reliable and in-order transfer of <iref item="notification"/><iref item="event notification"/><xref format="none" target="notification">event notifications</xref> using the Hypertext Transfer Protocol <xref target="HTTP"/>. Clients fetching resources over HTTP need not switch to another protocol for receiving <iref item="notification"/><iref item="event notification"/><xref format="none" target="notification">event notifications</xref>.</t>
          </li>
          <li anchor="goal--unified-source-of-truth">
            <t>to send updates directly from a resource of interest, obviating the need for additional resources to be specifically dedicated as <iref item="event notification"/><iref item="notification"/><xref format="none" target="notification">notification</xref> endpoints. In contrast to existing approaches, this frees up the client from the burden of coordinating the response from the resource of interest with <iref item="event notification"/><iref item="notification"/><xref format="none" target="notification">notifications</xref> from an endpoint.</t>
          </li>
          <li anchor="goal--unified-request">
            <t>to deliver the representation and <iref item="event notification"/><iref item="notification"/><xref format="none" target="notification">notifications</xref> in response to a single request, minimizing round trips between clients and servers. It also eliminates the need to synchronize the delivery of the representation and <iref item="event notification"/><iref item="notification"/><xref format="none" target="notification">notifications</xref>.</t>
          </li>
          <li anchor="goal--content-negotiation">
            <t>to enable the transfer of <iref item="notification"/><iref item="event notification"/><xref format="none" target="notification">event notifications</xref> using arbitrary formats that might be content-negotiated. This allows implementers to serve <iref item="event notification"/><iref item="notification"/><xref format="none" target="notification">notifications</xref> that are more expressive, say, in comparison to existing HTTP-based messaging protocols such as Server-Sent Events (<xref target="HTML"/>, Section 9.2).</t>
          </li>
          <li anchor="goal--intermediation">
            <t>to specify transparent <iref item="event notification"/><iref item="notification"/><xref format="none" target="notification">notification</xref> semantics that empowers intermediaries to scale <iref item="notification"/><iref item="event notification"/><xref format="none" target="notification">event notifications</xref>, improve reliability and reduce latency. Intermediaries shall also be able to proactively update caches in real-time.</t>
          </li>
        </ol>
      </section>
      <section anchor="constraints">
        <name>Constraints</name>
        <t anchor="constraints-list">To the extent feasible, the Events Query:</t>
        <ol spacing="normal" type="1"><li anchor="constraint--reuse">
            <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 anchor="constraint--rest">
            <t>conforms to <xref format="title" target="REST"/>, best practices for <xref format="title" target="RFC9205"/> <xref target="RFC9205"/>, and <xref format="title" target="RFC6202"/> <xref target="RFC6202"/>. This specification can thus be used to extend the capabilities of any existing or future resource to additionally serve <iref item="notification"/><iref item="event notification"/><xref format="none" target="notification">event notifications</xref> over HTTP. This is to afford implementers the opportunity to scale <iref item="event notification"/><iref item="notification"/><xref format="none" target="notification">notifications</xref> with their data and application.
<!--
  See my original comment on the solid/specification Gitter channel on 24 April 2020
  https://matrix.to/#/!PlIOdBsCTDRSCxsTGA:gitter.im/$VgCcuq2HbpLKJvxIw4witAUOsqcdhC98glgzqVI1WOY
-->
            </t>
          </li>
        </ol>
      </section>
      <section anchor="scope">
        <name>Scope</name>
        <t anchor="in-scope">The Events Query Protocol specifies:</t>
        <ol spacing="normal" type="1"><li anchor="scope--discovery">
            <t>A mechanism to discover support for Events Query on a resource (<xref target="discovery"/>).</t>
          </li>
          <li anchor="scope--request">
            <t>A mechanism to request <iref item="notification"/><iref item="event notification"/><xref format="none" target="notification">event notifications</xref> from a resource (Sections <xref format="counter" target="single-notification-request"/> and <xref format="counter" target="stream-request"/>) along with the representation (<xref target="representation-request"/>).</t>
          </li>
          <li anchor="scope--query-data-model">
            <t>An abstract <iref item="data model"/><xref format="none" target="data-model">data model</xref> for requesting <iref item="notification"/><iref item="event notification"/><xref format="none" target="notification">event notifications</xref> (<xref target="data-model"/>).</t>
          </li>
          <li anchor="scope--single-response-semantics">
            <t>Response semantics for a <xref target="single-notification-response">single notification</xref>.</t>
          </li>
          <li anchor="scope--streaming-response-semantics">
            <t>Response semantics for a stream carrying the <xref target="representation-response">representation</xref> (if requested) and <xref target="stream-response">multiple event notifications</xref>.</t>
          </li>
        </ol>
        <t anchor="out-of-scope">The Events Query Protocol does not specify:</t>
        <ol spacing="normal" type="1"><li anchor="no-scope--specific-data-model">
            <t>A realization of the abstract <iref item="data model"/><xref format="none" target="data-model">data model</xref> used for requesting <iref item="notification"/><iref item="event notification"/><xref format="none" target="notification">event notifications</xref>.</t>
          </li>
          <li anchor="no-scope--specific-events">
            <t>The <iref item="event"/><xref format="none" target="event">events</xref> for which a <iref item="event notification"/><iref item="notification"/><xref format="none" target="notification">notification</xref> might be generated. This can be varied per resource.</t>
          </li>
          <li anchor="no-scope--notification-format">
            <t>The form or content of an <iref item="notification"/><iref item="event notification"/><xref format="none" target="notification">event notification</xref>. Implementations have the flexibility to generate <iref item="notification"/><iref item="event notification"/><xref format="none" target="notification">event notifications</xref> for the applications they wish to support on a resource.</t>
          </li>
          <li anchor="no-scope--stream-representation">
            <t>Specific representations for the response stream with multiple <iref item="event notification"/><iref item="notification"/><xref format="none" target="notification">notifications</xref>.</t>
          </li>
        </ol>
      </section>
      <section anchor="limitations">
        <name>Limitations</name>
        <t anchor="limitation--resource-specificity">Events Query only allows <iref item="event notification"/><iref item="notification"/><xref format="none" target="notification">notifications</xref> to be sent for <iref item="event"/><xref format="none" target="event">events</xref> on a given resource. To transfer <iref item="notification"/><iref item="event notification"/><xref format="none" target="notification">event notifications</xref> originating from multiple resources in a single response, implementations will need to mint additional resources to serve as <iref item="event notification"/><iref item="notification"/><xref format="none" target="notification">notification</xref> endpoints. This is no different from APIs built on top of existing messaging protocols (See, for example, WebSocket <xref target="WS"/> and WebSub <xref target="WEBSUB"/>).</t>
        <t anchor="limitation--connection-limits">Browsers cap the number of persistent HTTP/1.1 connections per host, limiting the suitability of Events Query for web applications in the browser that require simultaneous <iref item="notification"/><iref item="event notification"/><xref format="none" target="notification">event notifications</xref> from multiple resources on the same host. This limitation is identical to that of other HTTP-based streaming protocols, such as Server-Sent Events (<xref target="HTML"/>, Section 9.2). Implementations are strongly encouraged to adopt HTTP/2 (or later). HTTP/1.1 servers might consider setting up a reverse proxy over HTTP/2 (or later) or implement mitigation strategies, such as, maximizing the number of concurrent connections and providing alternate hosts for resources. Implementations might alternatively consider using endpoints to provide <iref item="notification"/><iref item="event notification"/><xref format="none" target="notification">event notifications</xref> for multiple resources as previously described. Clients on a browser requesting <iref item="notification"/><iref item="event notification"/><xref format="none" target="notification">event notifications</xref> over an HTTP/1.1 connection are advised to exercise caution when simultaneously opening multiple persistent connections to a given host.</t>
      </section>
      <section anchor="comparison-with-server-sent-events">
        <name>Comparison with Server-Sent Events</name>
        <t>At the time of writing, Server-Sent Events (SSE) has emerged as the de facto mechanism for transferring <iref item="notification"/><iref item="event notification"/><xref format="none" target="notification">event notifications</xref> over HTTP.</t>
        <t>Server-Sent Events is standardized as part of HTML Living Standard by the WHATWG<cref anchor="EventSource_Obsolecense">As of October 2022, HTML Living Standard maintainer Anne van Kesteren has <eref target="https://github.com/whatwg/html/issues/8297#issuecomment-1291658863">stated</eref> that WHATWG does not intend to extend the EventSource API, with reasons for the decision cited in a subsequent <eref target="https://github.com/whatwg/html/issues/8297#issuecomment-1291658863">comment</eref>.</cref> through the EventSource API (<xref target="HTML"/>, Section 9.2.2) on user agents and the <tt>text/event-stream</tt> media type (<xref target="HTML"/>, Section 17.7) to transmit <iref item="notification"/><iref item="event notification"/><xref format="none" target="notification">event notifications</xref>. This approach is fundamentally inconsistent with terminology defined in HTTP Semantics (<xref section="3.2" sectionFormat="comma" target="HTTP"/>), transferring a sequence of asynchronous messages instead of a representation "intended to reflect a past, current, or desired state of a given resource". Practically, the <tt>text/event-stream</tt> media type being limited to only textual content forces developers to opt for alternative protocols such as WebSockets <xref target="WS"/>, despite the increased complexity. The EventSource API does not even allow for headers to be sent with requests.</t>
        <t>This has led to a proliferation of non-standard implementations of Server-Sent Events<cref anchor="hacks">such as <eref target="https://www.npmjs.com/package/event-source-plus">this</eref>, <eref target="https://www.npmjs.com/package/@microsoft/fetch-event-source">this</eref>, <eref target="https://www.npmjs.com/package/fetch-event-stream">this</eref>, <eref target="https://www.npmjs.com/package/extended-eventsource">this</eref>, <eref target="https://www.npmjs.com/package/ngx-sse-client">this</eref> and <eref target="https://www.npmjs.com/package/sse.js">this</eref></cref> that provide support for custom headers, such as for sending credentials, or use the POST method to communicate additional configuration in the request body.</t>
        <t>Events Query takes a principled approach to <iref item="notification"/><iref item="event notification"/><xref format="none" target="notification">event notifications</xref>, as established in <xref target="terminology"/>. In particular, the definition of an <iref item="notification"/><iref item="event notification"/><xref format="none" target="notification">event notification</xref> as a "representation" of <iref item="event"/><xref format="none" target="event">event</xref>(s) (<xref target="notification"/>) admits the use of arbitrary media types for <iref item="notification"/><iref item="event notification"/><xref format="none" target="notification">event notifications</xref>. Clients can use content negotiation as well as preconditions in a <iref item="subscription"/><xref format="none" target="subscription">subscription</xref> request. Further, Events Query not only lets clients receive both the representation and <iref item="event notification"/><iref item="notification"/><xref format="none" target="notification">notifications</xref> over the same protocol, viz. HTTP, but these can be encapsulated within a single HTTP response. Clients do not need to, say, authenticate multiple times, possibly with different mechanisms, to obtain data that is logically from the same resource. Clients also do not have to coordinate and synchronize multiple response streams carrying a representation and <iref item="event notification"/><iref item="notification"/><xref format="none" target="notification">notifications</xref> from the same effective resource.</t>
        <!-- Conformance Sections -->

</section>
    </section>
    <section anchor="conformance">
      <name>Conformance</name>
      <section anchor="document-conventions">
        <name>Document Conventions</name>
        <t>All 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?>

<!-- Normative Sections -->

</section>
    </section>
    <section anchor="terminology">
      <name>Terminology and Core Concepts</name>
      <section anchor="event">
        <name>Event</name>
        <iref item="event" primary="true"/>
        <t anchor="event-defn">An event is the instantaneous effect of the (normal or abnormal) termination of the invocation of an operation on an object of interest <xref target="DESIGN-FRAMEWORK"/>. The entity invoking an operation is termed the <strong><iref item="invoker" primary="true"/>invoker</strong>.</t>
        <t anchor="events-in-HTTP">In the specific context of HTTP, the object of interest is data scoped to some resource. When the operation is an HTTP method, the <iref item="invoker"/>invoker is a user agent. However, an operation need not be limited to an HTTP method, it might just as easily have been invoked using another mechanism or protocol. Events are then an extension of resource state (See <xref section="3.2" sectionFormat="comma" target="HTTP"/>) in the temporal dimension.</t>
      </section>
      <section anchor="observation">
        <name>Observation</name>
        <iref item="observation" primary="true"/>
        <t anchor="observation-defn">An <iref item="event"/><xref format="none" target="event">event</xref> is considered observable, if an entity outside the <iref item="invoker"/>invoker and object of interest can detect its occurrence <xref target="DESIGN-FRAMEWORK"/>. This entity is the <strong><iref item="observer" primary="true"/>observer</strong>.</t>
        <t anchor="observer-in-HTTP">It follows from the HTTP uniform interface that the <iref item="observer"/>observer is always a server. The <iref item="event"/><xref format="none" target="event">events</xref> that are observed, the mechanism of observation, and information recorded from the <iref item="event"/><xref format="none" target="event">event</xref> are implementation details for the server.</t>
        <t anchor="observation-roles">That an origin server has to assume the role of an <iref item="observer"/>observer in order to generate <iref item="notification"/><iref item="event notification"/><xref format="none" target="notification">event notifications</xref> is obvious. An intermediary, while not observing the data scoped to a resource directly, still has the possibility to serve as an <iref item="observer"/>observer. An intermediary can observe <iref item="event"/><xref format="none" target="event">events</xref> transmitted by an origin server or another intermediary, whether using Events Query or another mechanism, to generate <iref item="notification"/><iref item="event notification"/><xref format="none" target="notification">event notifications</xref> for outbound consumers.</t>
      </section>
      <section anchor="notification">
        <name>Event Notification</name>
        <iref item="notification" primary="true"/><iref item="event notification" primary="true"/>
        <t anchor="notification-defn">An <iref item="notification"/>event notification, or <iref item="event notification"/>notification, is information transmitted by an <iref item="observer"/>observer upon an <iref item="event"/><xref format="none" target="event">event</xref> or contiguous <iref item="event"/><xref format="none" target="event">events</xref> on a resource.</t>
        <t anchor="notification-in-HTTP">Events Query extends "information hiding" behind the HTTP uniform interface to the temporal dimension by defining communication with respect to a transferable <iref item="event notification"/>notification of the resource <iref item="event"/><xref format="none" target="event">event</xref>(s), rather than transferring the <iref item="event"/><xref format="none" target="event">event</xref>(s) themselves.</t>
        <t anchor="notification-characteristics">A target resource might be capable of generating multiple <iref item="event notification"/>notifications for the same <iref item="event"/><xref format="none" target="event">event</xref>(s) that a <iref item="subscriber"/>subscriber can select from using content negotiation. Hypertext <iref item="event notification"/>notifications can not only provide information about the resource <iref item="event"/><xref format="none" target="event">events</xref> but also processing instructions that help guide the recipient's future actions, for example, the possibility to determine the current representation from a previous representation.</t>
      </section>
      <section anchor="subscription">
        <name>Subscription</name>
        <iref item="subscription" primary="true"/>
        <t anchor="subscription-defn">A subscription is an expression of interest to receive <iref item="notification"/><iref item="event notification"/><xref format="none" target="notification">event notifications</xref> sent to an <iref item="observer"/>observer. The requesting entity is a <strong><iref item="subscriber" primary="true"/>subscriber</strong>.</t>
        <t anchor="subscriber-in-HTTP">Due to the request/response semantics of HTTP, the <iref item="subscriber"/>subscriber coincides with the recipient of <iref item="notification"/><iref item="event notification"/><xref format="none" target="notification">event notifications</xref> (<xref target="DESIGN-FRAMEWORK"/> uses the term <em>requester</em> or <em>broker</em> to identify a requesting entity, with the <em>broker</em> and <em>recipient</em> together forming the <iref item="subscriber"/>subscriber; for this specification, the distinction is not necessary).</t>
        <t anchor="subscription-conneg">The subscription in the form of a query affords the user agent the opportunity to engage in content negotiation for preferred form of <iref item="notification"/><iref item="event notification"/><xref format="none" target="notification">event notifications</xref> (as well as the representation, if simultaneously requested).</t>
      </section>
    </section>
    <section anchor="events-field">
      <name><tt>Events</tt> Header Field</name>
      <iref item="events (header field)" primary="true"/>
      <t anchor="events-field-intro">"<tt>Events</tt>" is a Dictionary structured header field (<xref section="3.2" sectionFormat="comma" target="HTTP-SF"/>) to communicate the properties of a response stream to an Events Query.</t>
      <t anchor="events-field-request">In a request, the <tt>Events</tt> header field allows a client to indicate its preferences for the properties of the response stream carrying <iref item="notification"/><iref item="event notification"/><xref format="none" target="notification">event notifications</xref>. The <tt>Events</tt> header field is not meant for content negotiation.</t>
      <t anchor="events-field-response">In a response, the <tt>Events</tt> header field allows a server to specify the properties of a response stream carrying <iref item="notification"/><iref item="event notification"/><xref format="none" target="notification">event notifications</xref>.</t>
      <t anchor="events-field-stipulations">The order of keys in the <tt>Events</tt> header field is insignificant. Senders <bcp14>SHOULD NOT</bcp14> generate keys not registered with the HTTP <iref item="event"/><xref format="none" target="event">Event</xref> Field Registry (with the exception made to allow experimentation). Recipients <bcp14>MAY</bcp14> ignore keys that they are unaware of.</t>
      <section anchor="duration-property">
        <name><tt>duration</tt> Property</name>
        <iref item="duration (property)" primary="true"/>
        <t anchor="duration-property-intro">The "<tt>duration</tt>" property is an Integer (<xref section="3.3.1" sectionFormat="comma" target="HTTP-SF"/>) or Decimal (<xref section="3.3.2" sectionFormat="comma" target="HTTP-SF"/>) valued Dictionary key specified on the <tt>Events</tt> header field to communicate the response duration in seconds.</t>
        <t anchor="duration-property-request">In a request, the <tt>duration</tt> property indicates the duration for which a client wants to receive <iref item="notification"/><iref item="event notification"/><xref format="none" target="notification">event notifications</xref>. A server <bcp14>MAY</bcp14> ignore this property.</t>
        <t anchor="duration-property-response">In a response, the <tt>duration</tt> property specifies the maximum duration for which a server intends to serve <iref item="notification"/><iref item="event notification"/><xref format="none" target="notification">event notifications</xref>. This property is merely advisory, and a server <bcp14>MAY</bcp14> close the response stream before this duration.</t>
        <t anchor="duration-property-stipulations">Only positive values are valid. A value of <tt>0</tt> indicates an indefinite duration. A sender <bcp14>MUST</bcp14> conform to these stipulations when generating the <tt>duration</tt> property. If the value of the <tt>duration</tt> property fails to conform to these stipulations, it <bcp14>MUST</bcp14> be ignored by the recipient.</t>
      </section>
    </section>
    <section anchor="data-model">
      <name>Subscription Data Model</name>
      <iref item="data model" primary="true"/>
      <t anchor="data-model-description">The abstract data model specifies the semantics of an Events Query.</t>
      <t anchor="data-model-requirements">A realization of the data model allows a client to specify in a <iref item="subscription"/><xref format="none" target="subscription">subscription</xref> request:</t>
      <ul spacing="normal">
        <li anchor="data-model-requirement-notifications">
          <t>an interest in receiving a stream of <iref item="notification"/><iref item="event notification"/><xref format="none" target="notification">event notifications</xref> from a resource in a preferred form.</t>
        </li>
        <li anchor="data-model-requirement-representation">
          <t>an interest in receiving a representation of a resource in a preferred form.</t>
        </li>
      </ul>
      <t anchor="data-model-realization">Implementations can choose appropriate media types to realize the <iref item="subscription"/><xref format="none" target="subscription">subscription</xref> data model. Implementations are free to extend the data model to include additional data. A specific realization of the data model is outside the scope of this specification.</t>
      <t anchor="data-model-example">The following example shows the body of a <iref item="subscription"/><xref format="none" target="subscription">subscription</xref> request wherein the <tt>state</tt> and <tt>events</tt> properties are used to specify request headers for representation and <iref item="notification"/><iref item="event notification"/><xref format="none" target="notification">event notifications</xref> respectively in a YAML-like syntax.</t>
      <figure anchor="data-model-example-yaml">
        <name>Events Query Data Model in a YAML-like syntax</name>
        <sourcecode name="data-model-example.yaml" type="yaml"><![CDATA[
state:
  Accept: text/html
events:
  Accept: example/event-notification
]]></sourcecode>
      </figure>
    </section>
    <section anchor="discovery">
      <name>Discovery</name>
      <t anchor="discovery-requirement">A user agent can discover if a server enables Events Query on a resource by examining support for query with a media type that can realize the <xref format="title" target="data-model"/>. A server <bcp14>MUST</bcp14> advertise media types accepted for Events Query using the <tt>Accept-Query</tt> header field (<xref section="3" sectionFormat="comma" target="HTTP-QUERY"/>) in a response.</t>
      <figure anchor="discovery-request-example">
        <name>Discovery Request</name>
        <sourcecode name="discovery-request-example.http" type="http-message"><![CDATA[
HEAD /foo HTTP/1.1
Host: example.org

]]></sourcecode>
      </figure>
      <figure anchor="discovery-response-example">
        <name>Discovery Response</name>
        <sourcecode name="discovery-response-example.http" type="http-message"><![CDATA[
HTTP/1.1 200 OK
Date: Thu, 02 Jan 2025 10:00:00 GMT
Accept: text/html
Accept-Query: "example/events-query"
]]></sourcecode>
      </figure>
      <aside anchor="no-events-long-lived-resources">
        <t><strong>Implementation Advice</strong></t>
        <t>Servers are advised against enabling <iref item="notification"/><iref item="event notification"/><xref format="none" target="notification">event notifications</xref> on long-lived resources over HTTP. A resource might be considered long-lived, if a server determines a low probability of an <iref item="event"/><xref format="none" target="event">event</xref> on the resource in the duration of the response. In such instances, servers are strongly advised to respond with the <tt>Cache-Control</tt> (<xref section="5" sectionFormat="comma" target="HTTP-CACHING"/>) header field and the <tt>max-age</tt> parameter (<xref section="5.2.2.1" sectionFormat="comma" target="HTTP-CACHING"/>) set in it.</t>
      </aside>
    </section>
    <section anchor="single-notification">
      <name>Single Notification</name>
      <t anchor="single-notification-description">The simplest Events Query is to request a <iref item="event notification"/><iref item="notification"/><xref format="none" target="notification">notification</xref> for the next <iref item="event"/><xref format="none" target="event">event</xref>(s) on a resource. This, in effect, adds long polling capability (<xref section="2" sectionFormat="comma" target="RFC6202"/>) to a resource.</t>
      <section anchor="single-notification-request">
        <name>Request</name>
        <t anchor="single-notification-procedure">To receive a single <iref item="event notification"/><iref item="notification"/><xref format="none" target="notification">notification</xref>, a client makes a <tt>QUERY</tt> request (<xref section="3" sectionFormat="comma" target="HTTP-QUERY"/>) using a realization of the <iref item="subscription"/><xref format="none" target="subscription">subscription</xref> <iref item="data model"/><xref format="none" target="data-model">data model</xref> that <bcp14>MUST NOT</bcp14> include an interest in receiving a stream of <iref item="event"/><xref format="none" target="event">event</xref> <iref item="event notification"/><iref item="notification"/><xref format="none" target="notification">notifications</xref>.</t>
        <t anchor="single-notification-request-conneg">Since the content of the response is an <iref item="notification"/><iref item="event notification"/><xref format="none" target="notification">event notification</xref>, a client can negotiate its form with header fields in the usual manner.</t>
        <figure anchor="single-notification-request-example">
          <name>Single Event Notification Request</name>
          <sourcecode name="single-notification-request-example.http" type="http-message"><![CDATA[
QUERY /foo HTTP/1.1
Host: example.org
Accept: example/event-notification
Content-Type: example/events-query
Events: duration=0

‑‑‑
]]></sourcecode>
        </figure>
      </section>
      <section anchor="single-notification-response">
        <name>Response</name>
        <t anchor="single-notification-response-close">When a single <iref item="event notification"/><iref item="notification"/><xref format="none" target="notification">notification</xref> is requested, the server <bcp14>MUST</bcp14> close the connection immediately after sending the <iref item="notification"/><iref item="event notification"/><xref format="none" target="notification">event notification</xref>.</t>
        <figure anchor="single-notification-response-example">
          <name>Single Event Notification Response</name>
          <sourcecode name="single-notification-response-example.http" type="http-message"><![CDATA[
HTTP/1.1 200 OK
Date: Thu, 02 Jan 2025 10:10:10 GMT
Accept-Query: example/events-query
Content-Type: example/event-notification
Incremental: ?1

published: 2025-01-02T10:11:12.345Z
event-id: 456
type: update
]]></sourcecode>
        </figure>
        <t>​</t>
        <aside anchor="no-hogging">
          <t><strong>Implementation Advice</strong></t>
          <t>When a user navigates away from a website or an application using Events Query, user agents are strongly encouraged to properly close the response and release the connection.</t>
        </aside>
      </section>
    </section>
    <section anchor="stream">
      <name>Notifications Stream</name>
      <t anchor="stream-description">Events Query can also be used to request a stream of multiple <iref item="notification"/><iref item="event notification"/><xref format="none" target="notification">event notifications</xref> (<xref section="3" sectionFormat="comma" target="RFC6202"/>).</t>
      <section anchor="stream-request">
        <name>Request</name>
        <t anchor="stream-request-procedure">To receive multiple <iref item="event notification"/><iref item="notification"/><xref format="none" target="notification">notifications</xref>, a client makes a QUERY request (<xref section="3" sectionFormat="comma" target="HTTP-QUERY"/>) using a realization of the <iref item="subscription"/><xref format="none" target="subscription">subscription</xref> <iref item="data model"/><xref format="none" target="data-model">data model</xref> that <bcp14>MUST</bcp14> include an interest in receiving a stream of <iref item="notification"/><iref item="event notification"/><xref format="none" target="notification">event notifications</xref> in a preferred form.</t>
        <t anchor="stream-request-conneg">Since the response transmits <iref item="notification"/><iref item="event notification"/><xref format="none" target="notification">event notifications</xref> within an encapsulating representation (<xref target="stream-response"/>), it follows that header fields cannot be used to negotiate the form of <iref item="notification"/><iref item="event notification"/><xref format="none" target="notification">event notifications</xref> as in the case of <xref target="single-notification-request">Single Notification Request</xref>. Instead, header fields are useful for negotiating the representation that encapsulates <iref item="notification"/><iref item="event notification"/><xref format="none" target="notification">event notifications</xref>. The following examples illustrate <iref item="subscription"/><xref format="none" target="subscription">subscription</xref> requests that negotiate a stream of <iref item="notification"/><iref item="event notification"/><xref format="none" target="notification">event notifications</xref> to be transferred respectively using a composite media type (<tt>multipart/mixed</tt>) and a discrete media type (<tt>application/json-seq</tt>):</t>
        <t anchor="stream-request-multipart">The first example shows a <iref item="subscription"/><xref format="none" target="subscription">subscription</xref> request for effectively a stream of discrete <xref target="single-notification">Single Notifications</xref> to be transferred using <tt>multipart/mixed</tt> (<xref section="5.1.3" sectionFormat="comma" target="RFC2046"/>) as the encapsulating media type. The <tt>events</tt> property in this example indicates an interest in receiving <iref item="notification"/><iref item="event notification"/><xref format="none" target="notification">event notifications</xref> and its sub-properties describe the preferred form of <iref item="event notification"/><iref item="notification"/><xref format="none" target="notification">notifications</xref>. Since the <iref item="event notification"/><iref item="notification"/><xref format="none" target="notification">notifications</xref> are transferred as a pipeline of HTTP messages, these sub-properties are identical to <xref target="single-notification-request-conneg">header fields</xref> used for specifying preconditions and content negotiation in a <xref target="single-notification-request">Single Notification Request</xref>.</t>
        <figure anchor="stream-request-multipart-example">
          <name>Request for Multipart Notifications Stream</name>
          <sourcecode name="stream-request-multipart-example.http" type="http-message"><![CDATA[
QUERY /foo HTTP/1.1
Host: example.org
Accept: multipart/mixed
Content-Type: example/events-query
Events: duration=0

events:
  Accept: example/event-notification
]]></sourcecode>
        </figure>
        <t anchor="stream-request-json">The second example shows a <iref item="subscription"/><xref format="none" target="subscription">subscription</xref> request for a stream of JSON <iref item="event notification"/><iref item="notification"/><xref format="none" target="notification">notifications</xref> to be transferred using <tt>application/json-seq</tt> (<xref target="RFC7464"/>) as the encapsulating media type. The <tt>events</tt> property in this example is being used to communicate the preferred schema for the requested <iref item="notification"/><iref item="event notification"/><xref format="none" target="notification">event notifications</xref>.</t>
        <figure anchor="stream-request-json-example">
          <name>Request for JSON Notifications Stream</name>
          <sourcecode name="stream-request-json-example.http" type="http-message"><![CDATA[
QUERY /foo HTTP/1.1
Host: example.org
Accept: application/json-seq
Content-Type: example/events-query
Events: duration=0

events:
  @context: activity+json
]]></sourcecode>
        </figure>
      </section>
      <section anchor="stream-response">
        <name>Response</name>
        <t anchor="stream-response-encapsulation">The response stream transmits multiple <iref item="notification"/><iref item="event notification"/><xref format="none" target="notification">event notifications</xref> in an encapsulating media type. The following illustrates <iref item="notification"/><iref item="event notification"/><xref format="none" target="notification">event notifications</xref> streamed in both a composite media type (<tt>multipart/mixed</tt>) and a discrete media type (<tt>application/json-seq</tt>) in response to the example <xref target="stream-request">requests</xref> in <xref target="stream-request"/>.</t>
        <section anchor="stream-response-headers">
          <name>Headers</name>
          <t anchor="stream-response-headers-list">A server able to provide a stream of <iref item="notification"/><iref item="event notification"/><xref format="none" target="notification">event notifications</xref> <bcp14>MUST</bcp14> immediately send headers, which include:</t>
          <ul spacing="normal">
            <li anchor="stream-response-events-field">
              <t>The <iref item="events (header field)"/><xref format="none" target="events-field"><tt>Events</tt></xref> header field, to communicate the properties of the <iref item="event notification"/><iref item="notification"/><xref format="none" target="notification">notifications</xref> stream.  </t>
              <ul spacing="normal">
                <li anchor="stream-response-duration-property">
                  <t>The <iref item="duration (property)"/><xref format="none" target="duration-property"><tt>duration</tt></xref> property, set to the maximum duration for which the server intends to serve <iref item="notification"/><iref item="event notification"/><xref format="none" target="notification">event notifications</xref>.</t>
                </li>
              </ul>
            </li>
            <li anchor="stream-response-incremental-field">
              <t>The <tt>Incremental</tt> header field (<xref section="3" sectionFormat="comma" target="INCREMENTAL-HTTP-MESSAGES"/>) set to <tt>?1</tt> to indicate that the response is to be immediately forwarded by intermediaries and not buffered.</t>
            </li>
          </ul>
          <figure anchor="stream-response-headers-example">
            <name>Notifications Stream Response Headers</name>
            <sourcecode name="stream-response-headers-example.http" type="http-message"><![CDATA[
HTTP/1.1 200 OK
Date: Thu, 02 Jan 2025 10:10:10 GMT
Accept-Query: example/events-query
Events: duration=600
Incremental: ?1
Transfer-Encoding: chunked
]]></sourcecode>
          </figure>
          <t anchor="stream-response-multipart-content-type-field">The <tt>Content-type</tt> header field in response to the request in the first example is:</t>
          <figure anchor="stream-response-multipart-content-header-example">
            <name>Notifications Stream Multipart Content Response Header</name>
            <sourcecode name="stream-response-multipart-content-header-example.http" type="http-message"><![CDATA[
Content-type: multipart/mixed; boundary="THIS_STRING_SEPARATES"

]]></sourcecode>
          </figure>
          <t anchor="stream-response-json-content-type-field">whereas in response to the request in the second example is:</t>
          <figure anchor="stream-response-json-content-header-example">
            <name>Notifications Stream JSON Content Response Headers</name>
            <sourcecode name="stream-response-json-content-header-example.http" type="http-message"><![CDATA[
Content-type: application/json-seq

]]></sourcecode>
          </figure>
        </section>
        <section anchor="stream-response-body">
          <name>Notifications</name>
          <t anchor="stream-response-event">Subsequently, when <iref item="event"/><xref format="none" target="event">event</xref>(s) occur, the server transmits a <iref item="event notification"/><iref item="notification"/><xref format="none" target="notification">notification</xref>.</t>
          <t anchor="stream-update-event-multipart">An <iref item="notification"/><iref item="event notification"/><xref format="none" target="notification">event notification</xref> transferred in a <tt>multipart/mixed</tt> response stream is identical to the <xref target="single-notification-response">Single Notification Response</xref>, except that non "Content-*" fields are excluded as required by <xref section="5.1" sectionFormat="comma" target="RFC2046"/>:</t>
          <figure anchor="stream-update-notification-multipart-example">
            <name>Multipart Update Notification</name>
            <sourcecode name="stream-update-notification-multipart-example.http" type="http-message"><![CDATA[
--THIS_STRING_SEPARATES
Content-Length: 31                               | Notification
Content-Type: example/event-notification         |
                                                 |
published: 2025-01-02T10:11:12.345Z              |
event-id: 456                                    |
type: update                                     |
]]></sourcecode>
          </figure>
          <t anchor="stream-update-event-json">The same <iref item="notification"/><iref item="event notification"/><xref format="none" target="notification">event notification</xref> when transferred in an <tt>application/json-seq</tt> response stream is as follows:</t>
          <figure anchor="stream-update-notification-json-example">
            <name>JSON Update Notification</name>
            <artwork name="stream-update-notification-json-example.http"><![CDATA[
␞{                                              | Notification
  "published": "2025-01-02T10:11:12.345Z",       |
  "event-id": 456,                               |
  "type": "Update"                               |
}                                                |
]]></artwork>
          </figure>
          <t anchor="stream-response-terminal-event">A server <bcp14>MUST</bcp14> end the response immediately after transmitting the <iref item="notification"/><iref item="event notification"/><xref format="none" target="notification">event notification</xref> that signals the deletion of a resource.</t>
          <t anchor="stream-delete-event-multipart">The <iref item="event notification"/><iref item="notification"/><xref format="none" target="notification">notification</xref> for a delete <iref item="event"/><xref format="none" target="event">event</xref> expressed inside a multipart message might be as follows:</t>
          <figure anchor="stream-delete-event-multipart-example">
            <name>Multipart Delete Notification</name>
            <sourcecode name="stream-delete-notification-multipart-example.http" type="http-message"><![CDATA[
--THIS_STRING_SEPARATES
Content-Length: 31                               | Notification
Content-Type: example/event-notification         |
                                                 |
published: 2025-01-02T11:12:13.456Z              |
event-id: 789                                    |
type: delete                                     |
--THIS_STRING_SEPARATES--
]]></sourcecode>
          </figure>
          <t anchor="stream-delete-event-json">The same <iref item="event notification"/><iref item="notification"/><xref format="none" target="notification">notification</xref> for a delete <iref item="event"/><xref format="none" target="event">event</xref> as JSON would be as follows:</t>
          <figure anchor="stream-delete-event-json-example">
            <name>JSON Delete Notification</name>
            <artwork name="stream-delete-notification-json-example.http"><![CDATA[
␞{                                              | Notification
  "published": "2025-01-02T11:12:13.456Z",       |
  "event-id": 789,                               |
  "type": "delete"                               |
}                                                |
]]></artwork>
          </figure>
          <t anchor="stream-response-timeout">Otherwise, a server <bcp14>MUST</bcp14> end the response when the connection duration exceeds the period set in the <iref item="duration (property)"/><xref format="none" target="duration-property"><tt>duration</tt></xref> property of the <iref item="events (header field)"/><xref format="none" target="events-field"><tt>Events</tt></xref> header field.</t>
        </section>
      </section>
    </section>
    <section anchor="representation">
      <name>Representation</name>
      <t anchor="representation-description">Events Query enables a user agent to ask and receive the current representation and subsequent <iref item="notification"/><iref item="event notification"/><xref format="none" target="notification">event notifications</xref> in a single request/response. When compared to using, say, Fetch <xref target="FETCH"/> and EventSource (<xref target="HTML"/>, Section 9.2.2) in conjunction, Events Query not only saves on an extra round trip, but relieves a user agent from the burden of synchronizing the representation with <iref item="notification"/><iref item="event notification"/><xref format="none" target="notification">event notifications</xref>.</t>
      <section anchor="representation-request">
        <name>Request</name>
        <t anchor="representation-request-procedure">To receive a representation of the resource alongside <iref item="event notification"/><iref item="notification"/><xref format="none" target="notification">notifications</xref>, a client makes a QUERY request (<xref section="3" sectionFormat="comma" target="HTTP-QUERY"/>) using a realization of the <iref item="subscription"/><xref format="none" target="subscription">subscription</xref> <iref item="data model"/><xref format="none" target="data-model">data model</xref> that <bcp14>MUST</bcp14> also include an interest in receiving the representation in a preferred form.</t>
        <t anchor="representation-request-example-description">The following example shows a <iref item="subscription"/><xref format="none" target="subscription">subscription</xref> request for the current representation along with the subsequent <iref item="notification"/><iref item="event notification"/><xref format="none" target="notification">event notifications</xref> transmitted using the <tt>multipart/mixed</tt> media type. The <tt>state</tt> property indicates interest in receiving representation and its sub-properties describe the preferred form of <iref item="event notification"/><iref item="notification"/><xref format="none" target="notification">notifications</xref>. Since the representation is being transferred in an HTTP message pipeline, these sub-properties are identical to header fields used for specifying preconditions and content negotiation in a GET request on the said resource.</t>
        <figure anchor="representation-request-multipart-example">
          <name>HTTP Representation and Notifications Request</name>
          <sourcecode name="representation-request-multipart-example.http" type="http-message"><![CDATA[
QUERY /foo HTTP/1.1
Host: example.org
Accept: multipart/mixed
Content-Type: example/events-query

state:
  Accept: text/html
events:
  Accept: example/event-notification
]]></sourcecode>
        </figure>
      </section>
      <section anchor="representation-response">
        <name>Response</name>
        <t anchor="representation-not-available">A server unable to provide a representation <bcp14>MUST NOT</bcp14> serve <iref item="notification"/><iref item="event notification"/><xref format="none" target="notification">event notifications</xref>. This does not apply to a conditional request for representation that is not fulfilled.</t>
        <t anchor="representation-response-body">A server able to provide a stream with a representation and <iref item="notification"/><iref item="event notification"/><xref format="none" target="notification">event notifications</xref> transmits the representation immediately following the response headers (<xref target="stream-response-headers"/>). Otherwise, the response is the same as that described in <xref target="stream-response"/>.</t>
        <t anchor="representation-response-encapsulation">Again, the <tt>multipart-mixed</tt> media type (<xref section="5.1.3" sectionFormat="comma" target="RFC2046"/>) is used for the purpose of illustration. Chunks have been omitted for clarity.</t>
        <figure anchor="representation-response-before-notifications-multipart-example">
          <name>Representation Response before Notifications</name>
          <sourcecode name="representation-response-before-notifications-multipart-example.http" type="http-message"><![CDATA[
HTTP/1.1 200 OK
Date: Thu, 02 Jan 2025 10:10:10 GMT
Accept-Query: example/events-query
Events: duration=600
Incremental: ?1
Transfer-Encoding: chunked
Content-type: multipart/mixed; boundary="THIS_STRING_SEPARATES"

--THIS_STRING_SEPARATES                                 
Content-Length: 14                               | Representation
Content-Type: text/plain                         |
                                                 |
Hello World!                                     |
]]></sourcecode>
        </figure>
        <t anchor="representation-response-non-standard">While this is default behaviour, there is no requirement that a representation is the first message or that representations are sent only once. In such cases, the encapsulated message needs to indicate if it is a representation and not an <iref item="notification"/><iref item="event notification"/><xref format="none" target="notification">event notification</xref>. Such a mechanism is not defined in this specification.</t>
        <t anchor="representation-response-notifications"><iref item="event notification"/><iref item="notification"/><xref format="none" target="notification">Notifications</xref> are transmitted just as in the case of <xref target="stream-response">regular streaming</xref>. See <xref target="example-representation"/> for a complete example of a response with representation and <iref item="event notification"/><iref item="notification"/><xref format="none" target="notification">notifications</xref>.</t>
        <!-- Considerations Sections -->

</section>
    </section>
    <section anchor="implementation-status">
      <name>Implementation Status</name>
      <t>A toy server built in Express.js demonstrating the Events Query Protocol is available at <eref target="https://github.com/CxRes/events-query-express-demo"/>. This demo is powered by the following libraries:</t>
      <ul spacing="normal">
        <li>
          <t><eref target="https://github.com/CxRes/negotiate-events-field">Negotiate Events Field</eref>: To read the request <iref item="events (header field)"/><xref format="none" target="events-field"><tt>Events</tt></xref> header field (<xref target="events-field"/>) and negotiate the response <iref item="duration (property)"/><xref format="none" target="duration-property"><tt>duration</tt></xref> (<xref target="duration-property"/>),</t>
        </li>
        <li>
          <t><eref target="https://github.com/CxRes/nose">NOSE</eref>: To <iref item="observation"/>observe <iref item="event"/><xref format="none" target="event">events</xref> on resources and generate <iref item="event notification"/><iref item="notification"/><xref format="none" target="notification">notifications</xref> in a preferred format, and</t>
        </li>
        <li>
          <t><eref target="https://github.com/CxRes/extended-response">Extended Response</eref>: To write the representation and <iref item="notification"/><iref item="event notification"/><xref format="none" target="notification">event notifications</xref> on the response stream for a given <iref item="duration (property)"/><xref format="none" target="duration-property"><tt>duration</tt></xref> (<xref target="duration-property"/>).</t>
        </li>
      </ul>
      <t>The demonstration and libraries are Free and Open Source Software, released under the Mozilla Public License, v. 2.0. Please contact the author for more information about these programs.</t>
    </section>
    <section anchor="security-considerations">
      <name>Security Considerations</name>
      <t anchor="derived-security-considerations">Events Query is subject to the security considerations of the HTTP <tt>QUERY</tt> method (<xref section="2" sectionFormat="comma" target="HTTP-QUERY"/>) and more generally HTTP Semantics. Considerations relevant to the use of HTTP <tt>QUERY</tt> method are discussed in <xref section="4" sectionFormat="of" target="HTTP-QUERY"/>. HTTP Semantics and its use for transferring information over the Internet are discussed in <xref section="17" sectionFormat="of" target="HTTP"/>.</t>
      <t anchor="security-considerations-ddos">When serving <iref item="notification"/><iref item="event notification"/><xref format="none" target="notification">event notifications</xref>, servers are required to keep the response stream open for an extended period of time. Since the effort required to request <iref item="event notification"/><iref item="notification"/><xref format="none" target="notification">notifications</xref> is tiny compared to the time, memory, and bandwidth consumed attempting to serve the <iref item="event notification"/><iref item="notification"/><xref format="none" target="notification">notifications</xref>, servers implementing Events Query have increased susceptibility to Denial-of-Service attacks. Servers ought to ignore, coalesce, or reject egregious <iref item="subscription"/><xref format="none" target="subscription">subscription</xref> requests, such as repeated requests from the same origin within a short interval of time.</t>
    </section>
    <section anchor="iana-considerations">
      <name>IANA Considerations</name>
      <t anchor="change-controller">The change controller for the following registrations is: "IETF (iesg@ietf.org) - Internet Engineering Task Force".</t>
      <section anchor="field-registration">
        <name>HTTP Field Registration</name>
        <t anchor="field-registration-instruction">IANA is requested to add the following entry in the "<eref target="https://www.iana.org/assignments/http-fields/">Hypertext Transfer Protocol (HTTP) Field Name Registry</eref>" (See <xref section="16.1.1" sectionFormat="of" target="HTTP"/>):</t>
        <table anchor="field-registration-list">
          <name>List of HTTP Field Name registrations</name>
          <thead>
            <tr>
              <th align="left">Header Field Names</th>
              <th align="left">Status</th>
              <th align="left">Structured-Type</th>
              <th align="left">Reference</th>
            </tr>
          </thead>
          <tbody>
            <tr>
              <td align="left">
                <iref item="events (header field)"/><xref format="none" target="events-field"><tt>Events</tt></xref></td>
              <td align="left">Permanent</td>
              <td align="left">Dictionary</td>
              <td align="left">
                <xref target="events-field"/></td>
            </tr>
          </tbody>
        </table>
      </section>
      <section anchor="events-field-registry">
        <name>The HTTP Events Field Registry</name>
        <t anchor="registry-registration-instruction">IANA is requested to create a new registry, "HTTP Events Field Registry", under the <eref target="https://www.iana.org/assignments/http-parameters/">Hypertext Transfer Protocol (HTTP) Parameters</eref> registry to register properties for use in the <iref item="events (header field)"/><xref format="none" target="events-field"><tt>Events</tt></xref> header field. New registrations will use the Specification Required policy (<xref section="4.6" sectionFormat="comma" target="RFC8126"/>).</t>
        <section anchor="events-field-registry-template">
          <name>Template</name>
          <t anchor="events-field-registry-template-required-list">The registration of an <iref item="events (header field)"/><xref format="none" target="events-field"><tt>Events</tt></xref> property <bcp14>MUST</bcp14> include the following fields:</t>
          <ul spacing="normal">
            <li anchor="events-field-registry-template--property-name">
              <t>Property Name: A Dictionary (<xref section="3.2" sectionFormat="comma" target="HTTP-SF"/>) key to be used in the <iref item="events (header field)"/><xref format="none" target="events-field"><tt>Events</tt></xref> header field.</t>
            </li>
            <li anchor="events-field-registry-template--structured-type">
              <t>Structured Type: The Structured Data Type (<xref section="3.3" sectionFormat="comma" target="HTTP-SF"/>) of the value associated with the key, according to requirements in <xref section="3.2" sectionFormat="of" target="HTTP-SF"/>.</t>
            </li>
            <li anchor="events-field-registry-template--reference">
              <t>Reference: A pointer to the specification text.</t>
            </li>
          </ul>
          <t anchor="events-field-registry-template-optional-list">The registration <bcp14>MAY</bcp14> also include the following fields:</t>
          <ul spacing="normal">
            <li anchor="events-field-registry-template--optional-parameters">
              <t>Optional Parameters: An enumeration of optional parameters and the Structured Data Type (<xref section="3.3" sectionFormat="of" target="HTTP-SF"/>) of value associated with the parameter, according to requirements in <xref section="3.1.2" sectionFormat="of" target="HTTP-SF"/></t>
            </li>
            <li anchor="events-field-registry-template--comments">
              <t>Comments: Additional information to be included in the template.</t>
            </li>
          </ul>
        </section>
        <section anchor="events-field-registry-initial-content">
          <name>Initial Registry Contents</name>
          <t anchor="events-field-registry-initial-content-instruction">The initial contents of the HTTP Events Field Registry are:</t>
          <table anchor="events-property-registration-list">
            <name>List of HTTP Events Field property name registrations</name>
            <thead>
              <tr>
                <th align="left">Property Name</th>
                <th align="left">Structured-Type</th>
                <th align="left">Reference</th>
              </tr>
            </thead>
            <tbody>
              <tr>
                <td align="left">
                  <iref item="duration (property)"/><xref format="none" target="duration-property"><tt>duration</tt></xref></td>
                <td align="left">Integer or Decimal Item</td>
                <td align="left">
                  <xref target="duration-property"/></td>
              </tr>
            </tbody>
          </table>
        </section>
      </section>
    </section>
    <section anchor="end-user-considerations">
      <name>End User Considerations</name>
      <t><cref anchor="End_User">"The mission of the IETF is to produce high quality, relevant technical and engineering documents that influence the way people design, use, and manage the Internet in such a way as to make the Internet work better" <xref target="RFC3935"/>. The mission statement further goes on to state, "We want the Internet to be useful for communities that share our commitment to openness and fairness. We embrace technical concepts such as decentralized control, edge-user empowerment and sharing of resources, because those concepts resonate with the core values of the IETF community." <xref target="RFC3935"/>. The Internet Architecture Board says that the "Internet is for end users" and "argues that the IETF should favor their interests over those of other parties" <xref target="RFC8890"/>. It logically follows that technical documents produced by the IETF ought to consider their impact on the Internet end user. For this reason, I suggest that specifications include a considerations section where authors assess the technical decisions and trade-off in their proposals based on their ramifications on the interests of end users.</cref></t>
      <t>End users of the HTTP protocol can be classified into two groups: publishers and consumers. Consumers have an incentive to subscribe to <iref item="notification"/><iref item="event notification"/><xref format="none" target="notification">event notifications</xref> from many resources and to hold on to a connection for as long as possible. Whereas publishers bear the cost of server infrastructure. Consumers also typically outnumber publishers, in many cases by multiple orders of magnitude. This creates an imbalance in the effort to subscribe versus effort to deliver; consumers can easily place a disproportionate burden on servers, reminiscent of a denial-of-service attack.</t>
      <t>At the outset, requiring that clients subscribe to <iref item="notification"/><iref item="event notification"/><xref format="none" target="notification">event notifications</xref> per resource serves as an effective filtering mechanism that limits the burden on servers. Compare this to the typical implementation of protocols such as WebSockets <xref target="WS"/>, where clients connect to dedicated endpoints to receive <iref item="event notification"/><iref item="notification"/><xref format="none" target="notification">notifications</xref>; the server either has to broadcast <iref item="event notification"/><iref item="notification"/><xref format="none" target="notification">notifications</xref> for multiple resources or track resources of interest for each client to filter <iref item="notification"/><iref item="event notification"/><xref format="none" target="notification">event notifications</xref> accordingly.</t>
      <t>Events Query empowers servers to decide the content and the duration for which <iref item="notification"/><iref item="event notification"/><xref format="none" target="notification">event notifications</xref> are served on any given resource, as well as allowing servers to close the response stream at any time. Servers may also limit <iref item="notification"/><iref item="event notification"/><xref format="none" target="notification">event notifications</xref> and/or their content, except for authenticated consumers. Such authenticated consumers might, for example, be asked to share the cost burden with publishers in return for a higher quality of service.</t>
      <t>The use of HTTP Semantics also enables intermediation of <iref item="notification"/><iref item="event notification"/><xref format="none" target="notification">event notifications</xref>, unlike existing mechanisms built with protocols such as WebSockets <xref target="WS"/> or WebSub <xref target="WEBSUB"/>. Intermediaries can help with improving the latency and reliability of transmission of <iref item="notification"/><iref item="event notification"/><xref format="none" target="notification">event notifications</xref> as well as scaling of the <iref item="notification"/><iref item="event notification"/><xref format="none" target="notification">event notification</xref> traffic to reach a significantly larger base of consumers. On the flip side, economies of scale will likely lead to greater consolidation of intermediary service providers (though not centralization) with the attendant risk of anti-consumer behaviour. In the opinion of the authors, policies designed to treat network traffic as a public utility might provide better outcomes for the end user.</t>
    </section>
  </middle>
  <back>
    <references anchor="sec-combined-references">
      <name>References</name>
      <references anchor="sec-normative-references">
        <name>Normative References</name>
        <reference anchor="HTTP">
          <front>
            <title>HTTP Semantics</title>
            <author fullname="R. Fielding" initials="R." role="editor" surname="Fielding"/>
            <author fullname="M. Nottingham" initials="M." role="editor" surname="Nottingham"/>
            <author fullname="J. Reschke" initials="J." role="editor" surname="Reschke"/>
            <date month="June" year="2022"/>
            <abstract>
              <t>The Hypertext Transfer Protocol (HTTP) is a stateless application-level protocol for distributed, collaborative, hypertext information systems. This document describes the overall architecture of HTTP, establishes common terminology, and defines aspects of the protocol that are shared by all versions. In this definition are core protocol elements, extensibility mechanisms, and the "http" and "https" Uniform Resource Identifier (URI) schemes.</t>
              <t>This document updates RFC 3864 and obsoletes RFCs 2818, 7231, 7232, 7233, 7235, 7538, 7615, 7694, and portions of 7230.</t>
            </abstract>
          </front>
          <seriesInfo name="STD" value="97"/>
          <seriesInfo name="RFC" value="9110"/>
          <seriesInfo name="DOI" value="10.17487/RFC9110"/>
        </reference>
        <reference anchor="HTTP-SF">
          <front>
            <title>Structured Field Values for HTTP</title>
            <author fullname="M. Nottingham" initials="M." surname="Nottingham"/>
            <author fullname="P-H. Kamp" surname="P-H. Kamp"/>
            <date month="September" year="2024"/>
            <abstract>
              <t>This document describes a set of data types and associated algorithms that are intended to make it easier and safer to define and handle HTTP header and trailer fields, known as "Structured Fields", "Structured Headers", or "Structured Trailers". It is intended for use by specifications of new HTTP fields.</t>
              <t>This document obsoletes RFC 8941.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="9651"/>
          <seriesInfo name="DOI" value="10.17487/RFC9651"/>
        </reference>
        <reference anchor="HTTP-QUERY">
          <front>
            <title>The HTTP QUERY Method</title>
            <author fullname="Julian Reschke" initials="J." surname="Reschke">
              <organization>greenbytes GmbH</organization>
            </author>
            <author fullname="James M. Snell" initials="J. M." surname="Snell">
              <organization>Cloudflare</organization>
            </author>
            <author fullname="Mike Bishop" initials="M." surname="Bishop">
              <organization>Akamai</organization>
            </author>
            <date day="29" month="September" year="2025"/>
            <abstract>
              <t>   This specification defines the QUERY method for HTTP.  A QUERY
   requests that the request target process the enclosed content in a
   safe/idempotent manner and then respond with the result of that
   processing.  This is similar to POST requests but can be
   automatically repeated or restarted without concern for partial state
   changes.

              </t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-ietf-httpbis-safe-method-w-body-12"/>
        </reference>
        <reference anchor="INCREMENTAL-HTTP-MESSAGES">
          <front>
            <title>Incremental HTTP Messages</title>
            <author fullname="Kazuho Oku" initials="K." surname="Oku">
              <organization>Fastly</organization>
            </author>
            <author fullname="Tommy Pauly" initials="T." surname="Pauly">
              <organization>Apple</organization>
            </author>
            <author fullname="Martin Thomson" initials="M." surname="Thomson">
              <organization>Mozilla</organization>
            </author>
            <date day="29" month="April" year="2025"/>
            <abstract>
              <t>   This document specifies the "Incremental" HTTP header field, which
   instructs HTTP intermediaries to forward the HTTP message
   incrementally.

              </t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-ietf-httpbis-incremental-00"/>
        </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="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="COMET" target="https://infrequently.org/2006/03/comet-low-latency-data-for-the-browser/">
          <front>
            <title>Comet: Low Latency Data for the Browser</title>
            <author fullname="Alex Russell" initials="A." surname="Russell">
              <organization/>
            </author>
            <date month="March" year="2006"/>
          </front>
          <refcontent>Infrequently Noted</refcontent>
        </reference>
        <reference anchor="DESIGN-FRAMEWORK">
          <front>
            <title>A design framework for Internet-scale event observation and notification</title>
            <author fullname="David S. Rosenblum" initials="D." surname="Rosenblum">
              <organization>Dept. of Info. &amp;amp; Computer Science, University of California, Irvine, Irvine, CA</organization>
            </author>
            <author fullname="Alexander L. Wolf" initials="A." surname="Wolf">
              <organization>Dept. of Computer Science, University of Colorado, Boulder, CO</organization>
            </author>
            <date month="November" year="1997"/>
          </front>
          <seriesInfo name="ACM SIGSOFT Software Engineering Notes" value="vol. 22, no. 6, pp. 344-360"/>
          <seriesInfo name="DOI" value="10.1145/267896.267920"/>
          <refcontent>Association for Computing Machinery (ACM)</refcontent>
        </reference>
        <reference anchor="FETCH" target="https://fetch.spec.whatwg.org">
          <front>
            <title>Fetch</title>
            <author fullname="WHATWG" initials="" surname="WHATWG">
              <organization/>
            </author>
            <date month="May" year="2025"/>
          </front>
          <seriesInfo name="WHATWG" value="Living Standard"/>
        </reference>
        <reference anchor="HTML" target="https://html.spec.whatwg.org">
          <front>
            <title>HTML</title>
            <author fullname="WHATWG" initials="" surname="WHATWG">
              <organization/>
            </author>
            <date month="April" year="2026"/>
          </front>
          <seriesInfo name="WHATWG" value="Living Standard"/>
        </reference>
        <reference anchor="HTTP-CACHING">
          <front>
            <title>HTTP Caching</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 defines HTTP caches and the associated header fields that control cache behavior or indicate cacheable response messages.</t>
              <t>This document obsoletes RFC 7234.</t>
            </abstract>
          </front>
          <seriesInfo name="STD" value="98"/>
          <seriesInfo name="RFC" value="9111"/>
          <seriesInfo name="DOI" value="10.17487/RFC9111"/>
        </reference>
        <reference anchor="REST" target="https://roy.gbiv.com/pubs/dissertation/rest_arch_style.htm">
          <front>
            <title>Representational State Transfer (REST)</title>
            <author fullname="Roy Thomas Fielding" initials="R." surname="Fielding">
              <organization>University of California, Irvine</organization>
            </author>
            <date/>
          </front>
          <seriesInfo name="Doctoral Dissertation" value="University of California, Irvine"/>
          <format target="https://roy.gbiv.com/pubs/dissertation/fielding_dissertation.pdf#G16.1026811" type="PDF"/>
          <refcontent>Chapter 5, Architectural Styles and the Design of Network-based Software Architectures</refcontent>
        </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="RFC3935">
          <front>
            <title>A Mission Statement for the IETF</title>
            <author fullname="H. Alvestrand" initials="H." surname="Alvestrand"/>
            <date month="October" year="2004"/>
            <abstract>
              <t>This memo gives a mission statement for the IETF, tries to define the terms used in the statement sufficiently to make the mission statement understandable and useful, argues why the IETF needs a mission statement, and tries to capture some of the debate that led to this point. 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="95"/>
          <seriesInfo name="RFC" value="3935"/>
          <seriesInfo name="DOI" value="10.17487/RFC3935"/>
        </reference>
        <reference anchor="RFC6202">
          <front>
            <title>Known Issues and Best Practices for the Use of Long Polling and Streaming in Bidirectional HTTP</title>
            <author fullname="S. Loreto" initials="S." surname="Loreto"/>
            <author fullname="P. Saint-Andre" initials="P." surname="Saint-Andre"/>
            <author fullname="S. Salsano" initials="S." surname="Salsano"/>
            <author fullname="G. Wilkins" initials="G." surname="Wilkins"/>
            <date month="April" year="2011"/>
            <abstract>
              <t>On today's Internet, the Hypertext Transfer Protocol (HTTP) is often used (some would say abused) to enable asynchronous, "server- initiated" communication from a server to a client as well as communication from a client to a server. This document describes known issues and best practices related to such "bidirectional HTTP" applications, focusing on the two most common mechanisms: HTTP long polling and HTTP streaming. This document is not an Internet Standards Track specification; it is published for informational purposes.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="6202"/>
          <seriesInfo name="DOI" value="10.17487/RFC6202"/>
        </reference>
        <reference anchor="RFC7464">
          <front>
            <title>JavaScript Object Notation (JSON) Text Sequences</title>
            <author fullname="N. Williams" initials="N." surname="Williams"/>
            <date month="February" year="2015"/>
            <abstract>
              <t>This document describes the JavaScript Object Notation (JSON) text sequence format and associated media type "application/json-seq". A JSON text sequence consists of any number of JSON texts, all encoded in UTF-8, each prefixed by an ASCII Record Separator (0x1E), and each ending with an ASCII Line Feed character (0x0A).</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="7464"/>
          <seriesInfo name="DOI" value="10.17487/RFC7464"/>
        </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="RFC8890">
          <front>
            <title>The Internet is for End Users</title>
            <author fullname="M. Nottingham" initials="M." surname="Nottingham"/>
            <date month="August" year="2020"/>
            <abstract>
              <t>This document explains why the IAB believes that, when there is a conflict between the interests of end users of the Internet and other parties, IETF decisions should favor end users. It also explores how the IETF can more effectively achieve this.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="8890"/>
          <seriesInfo name="DOI" value="10.17487/RFC8890"/>
        </reference>
        <reference anchor="RFC9205">
          <front>
            <title>Building Protocols with HTTP</title>
            <author fullname="M. Nottingham" initials="M." surname="Nottingham"/>
            <date month="June" year="2022"/>
            <abstract>
              <t>Applications often use HTTP as a substrate to create HTTP-based APIs. This document specifies best practices for writing specifications that use HTTP to define new application protocols. It is written primarily to guide IETF efforts to define application protocols using HTTP for deployment on the Internet but might be applicable in other situations.</t>
              <t>This document obsoletes RFC 3205.</t>
            </abstract>
          </front>
          <seriesInfo name="BCP" value="56"/>
          <seriesInfo name="RFC" value="9205"/>
          <seriesInfo name="DOI" value="10.17487/RFC9205"/>
        </reference>
        <reference anchor="WEBSUB" target="https://www.w3.org/TR/websub/">
          <front>
            <title>WebSub</title>
            <author/>
          </front>
          <seriesInfo name="W3C REC" value="websub"/>
          <seriesInfo name="W3C" value="websub"/>
        </reference>
        <reference anchor="WS" target="https://www.w3.org/TR/websockets/">
          <front>
            <title>The WebSocket API</title>
            <author/>
          </front>
          <seriesInfo name="W3C NOTE" value="websockets"/>
          <seriesInfo name="W3C" value="websockets"/>
        </reference>
      </references>
    </references>
    <?line 804?>

<section anchor="examples">
      <name>Examples</name>
      <t>Some examples used in this specification are consolidated below. Chunks have been omitted for clarity.</t>
      <section anchor="example-representation">
        <name>Representation and Notifications</name>
        <t anchor="example-description">The following example illustrates a complete request and response for representation and <iref item="event notification"/><iref item="notification"/><xref format="none" target="notification">notifications</xref> transferred with the <tt>multipart/mixed</tt> media-type as described in <xref target="representation"/>: <xref format="title" target="representation"/>.</t>
        <section anchor="example-multipart-representation-request">
          <name>Request</name>
          <figure anchor="representation-request-multipart-complete-example">
            <name>Request for Representation and Notifications</name>
            <sourcecode name="representation-request-multipart-example.http" type="http-message"><![CDATA[
QUERY /foo HTTP/1.1
Host: example.org
Accept: multipart/mixed
Content-Type: example/events-query

state:
  Accept: text/html
events:
  Accept: example/event-notification
]]></sourcecode>
          </figure>
        </section>
        <section anchor="example-multipart-representation-response">
          <name>Response</name>
          <figure anchor="representation-response-multipart-complete-example">
            <name>Response with Representation and Notifications</name>
            <sourcecode name="representation-response-multipart-complete-example.http" type="http-message"><![CDATA[
HTTP/1.1 200 OK
Date: Thu, 02 Jan 2025 10:10:10 GMT
Accept-Query: example/events-query
Events: duration=600
Incremental: ?1
Transfer-Encoding: chunked
Content-Type: multipart/mixed; boundary="THIS_STRING_SEPARATES"

--THIS_STRING_SEPARATES                                 
Content-Length: 14                               | Representation
Content-Type: text/plain                         |
                                                 |
Hello World!                                     |

--THIS_STRING_SEPARATES
Content-Length: 31                               | Notification
Content-Type: example/event-notification         |
                                                 |
published: 2025-01-02T10:11:12.345Z              |
event-id: 456                                    |
type: update                                     |

--THIS_STRING_SEPARATES
Content-Length: 31                               | Notification
Content-Type: example/event-notification         |
                                                 |
published: 2025-01-02T11:12:13.456Z              |
event-id: 789                                    |
type: delete                                     |
--THIS_STRING_SEPARATES--
]]></sourcecode>
          </figure>
        </section>
      </section>
      <section anchor="example-stream">
        <name>Notifications Stream</name>
        <t>This following example illustrates complete request and response for JSON formatted <iref item="event notification"/><iref item="notification"/><xref format="none" target="notification">notifications</xref> transferred with the <tt>application/json-seq</tt> media-type as described in <xref format="title" target="stream"/>: <xref format="title" target="stream"/>.</t>
        <section anchor="example-json-stream-request">
          <name>Request</name>
          <figure anchor="stream-request-json-complete-example">
            <name>Request for JSON Notifications</name>
            <sourcecode name="stream-request-example.http" type="http-message"><![CDATA[
QUERY /foo HTTP/1.1
Host: example.org
Accept: application/json-seq
Content-Type: example/events-query
Events: duration=0

events:
  @context: activity+json
]]></sourcecode>
          </figure>
        </section>
        <section anchor="example-json-stream-response">
          <name>Response</name>
          <figure anchor="stream-response-json-complete-example">
            <name>Response with JSON Notifications</name>
            <sourcecode name="stream-response-json-complete-example.http" type="http-message"><![CDATA[
HTTP/1.1 200 OK
Date: Thu, 02 Jan 2025 10:10:10 GMT
Accept-Query: example/events-query
Events: duration=600
Incremental: ?1
Transfer-Encoding: chunked
Content-Type: application/json-seq

␞{                                              | Notification
  "published": "2025-01-02T10:11:12.345Z",       |
  "event-id": 456,                               |
  "type": "Update"                               |
}                                                |
␞{                                              | Notification
  "published": "2025-01-02T11:12:13.456Z",       |
  "event-id": 789,                               |
  "type": "delete"                               |
}                                                |
]]></sourcecode>
          </figure>
        </section>
      </section>
    </section>
    <section anchor="acknowledgments" numbered="false">
      <name>Acknowledgments</name>
      <t>We thank members of the HTTP Working Group, the HTTPAPI Working Group, the Solid community, the Braid community and others for discussions, ideas, reviews, and feedback on previous work that has led to this specification.</t>
    </section>
  </back>
  <!-- ##markdown-source:
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
cIl3MIGQnQrUmhvd/Cp3sl3Z8H8Bl/81YtfJAAA=

-->

</rfc>
