<?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.43 (Ruby 3.4.9) -->
<rfc xmlns:xi="http://www.w3.org/2001/XInclude" category="std" consensus="true" docName="draft-gupta-httpapi-events-query-04" ipr="trust200902" sortRefs="true" submissionType="IETF" symRefs="true" tocInclude="true" version="3">
  <!-- xml2rfc v2v3 conversion 3.34.1 -->
  <front>
    <title>HTTP Events Query</title>
    <seriesInfo name="Internet-Draft" value="draft-gupta-httpapi-events-query-04"/>
    <author fullname="Rahul Gupta">
      <organization/>
      <address>
        <email>cxres+ietf@protonmail.com</email>
      </address>
    </author>
    <date day="01" month="November" 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 96?>

<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. It uses the HTTP QUERY method to request (optionally) the current representation and subsequent <iref item="notification"/><iref item="event notification"/><xref format="none" target="notification">event notifications</xref> within a single response. 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 101?>

<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"/>, <xref relative="#server-sent-events" section="Section 9.2" sectionFormat="bare" target="HTML"/>) 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-agents">With the rise of AIs, autonomous agents acting on behalf of a user have emerged as a significant class of consumer. Agents often need to observe HTTP resources, to monitor the outcome of prior actions and trigger new ones. But the friction involved in observing a resource an agent is already interacting with makes existing mechanisms a poor fit for such agentic workflows.</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="2" 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 serve <iref item="notification"/><iref item="event notification"/><xref format="none" target="notification">event notifications</xref> using the Hypertext Transfer Protocol <xref target="HTTP"/>. Clients already 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--reliable-and-order">
            <t>to provide reliable and in-order transfer of <iref item="notification"/><iref item="event notification"/><xref format="none" target="notification">event notifications</xref>. The transfer of <iref item="event notification"/><iref item="notification"/><xref format="none" target="notification">notifications</xref> directly from a resource ensures this for the duration of the response stream. Recovery across errors and loss of connection can be layered (see <xref target="out-of-scope--temporal-coordination"/>).</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"/>, <xref relative="#server-sent-events" section="Section 9.2" sectionFormat="bare" target="HTML"/>).</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 empower 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 the Representational State Transfer (REST) architectural style (<xref target="REST"/>, <xref relative="rest_arch_style.htm" section="Chapter 5" sectionFormat="bare" 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">Events Query specifies a minimal protocol surface for transferring <iref item="event notification"/><iref item="notification"/><xref format="none" target="notification">notifications</xref> over HTTP that includes:</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>
      </section>
      <section anchor="out-of-scope">
        <name>Out of Scope</name>
        <section anchor="out-of-scope--event-semantics">
          <name>Event Semantics</name>
          <t anchor="no-event-semantics">Implementations require 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 any given resource. It follows that the Events Query Protocol does not specify <iref item="event"/><xref format="none" target="event">event</xref> semantics, including:</t>
          <ol spacing="normal" type="1"><li anchor="no-event-semantics--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.</t>
            </li>
            <li anchor="no-event-semantics--notification-content">
              <t>The content of an <iref item="notification"/><iref item="event notification"/><xref format="none" target="notification">event notification</xref>.</t>
            </li>
          </ol>
          <t>Implementations can further provide mechanisms to filter the <iref item="event"/><xref format="none" target="event">events</xref> generating <iref item="event notification"/><iref item="notification"/><xref format="none" target="notification">notifications</xref> or to select the content of <iref item="event notification"/><iref item="notification"/><xref format="none" target="notification">notifications</xref>. Affordances for such mechanisms can be exposed to clients by extending the abstract <xref format="title" target="data-model"/> with additional specifications.</t>
        </section>
        <section anchor="out-of-scope--realizations">
          <name>Realizations and Formats</name>
          <t anchor="no-format">Since transferred data is subject to content negotiation between clients and server, the Events Query Protocol does not commit to a specific:</t>
          <ol spacing="normal" type="1"><li anchor="no-format--request-data-model">
              <t>Realization of the abstract <iref item="data model"/><xref format="none" target="data-model">data model</xref> (<xref target="data-model"/>) used for requesting <iref item="notification"/><iref item="event notification"/><xref format="none" target="notification">event notifications</xref>.</t>
            </li>
            <li anchor="no-format--stream-representation">
              <t>Representation for the response stream encapsulating <xref target="stream-response">multiple event notifications</xref>.</t>
            </li>
            <li anchor="no-format--event-notification">
              <t>Form of <iref item="notification"/><iref item="event notification"/><xref format="none" target="notification">event notifications</xref> within the response stream.</t>
            </li>
          </ol>
        </section>
        <section anchor="out-of-scope--temporal-coordination">
          <name>Temporal Coordination</name>
          <t anchor="no-sync"><iref item="notification"/><iref item="event notification"/><xref format="none" target="notification">Event notifications</xref> are typically implemented along with temporal coordination mechanisms, ranging in complexity from resumability on reconnection to real-time state synchronization. Implementations adopt these mechanisms based on application requirements. For this reason, the Events Query Protocol itself does not specify temporal coordination across responses. Instead, implementations shall be able to extend the <xref format="title" target="data-model"/> with additional specifications that provide:</t>
          <ol spacing="normal" type="1"><li anchor="no-sync--versioning">
              <t>A scheme for labeling <iref item="event"/><xref format="none" target="event">events</xref> on a resource or versioning its states.</t>
            </li>
            <li anchor="no-sync--replay">
              <t>Replay or resumption of <iref item="notification"/><iref item="event notification"/><xref format="none" target="notification">event notifications</xref> from a prior <iref item="event"/><xref format="none" target="event">event</xref>. This can, for example, help clients recover upon reconnection without refetching the representation.</t>
            </li>
            <li anchor="no-sync--representation">
              <t>Identification of resource representations, separate from <iref item="notification"/><iref item="event notification"/><xref format="none" target="notification">event notifications</xref>, within the <xref target="representation-response">response stream</xref>. This is useful for a first fetch before a client starts receiving <iref item="event notification"/><iref item="notification"/><xref format="none" target="notification">notifications</xref> or for periodic reconciliation during state synchronization.</t>
            </li>
            <li anchor="no-sync--merge-types">
              <t>The Conflict-free Replicated Data Types (CRDT) or Operational Transforms (OT)
strategy to be implemented by a client for synchronizing the representation using <iref item="notification"/><iref item="event notification"/><xref format="none" target="notification">event notifications</xref>.</t>
            </li>
          </ol>
        </section>
        <section anchor="out-of-scope--endpoints">
          <name>Endpoints</name>
          <t anchor="no-endpoints--replication">APIs built on top of existing messaging protocols (see, for example, WebSocket <xref target="WS"/> and WebSub <xref target="WEBSUB"/>) typically transfer <iref item="notification"/><iref item="event notification"/><xref format="none" target="notification">event notifications</xref> for multiple resources from a single endpoint. To replicate this functionality with Events Query, an application can mint an additional resource, which represents a collection of other resources (<xref target="REST"/>, <xref relative="rest_arch_style.htm#sec_5_2_1_1" section="Section 5.2.1.1" sectionFormat="bare" target="REST"/>), to serve as an endpoint for multi-resource <iref item="event notification"/><iref item="notification"/><xref format="none" target="notification">notifications</xref>.</t>
          <t anchor="no-endpoints--unspecified">The Events Query Protocol leaves the design of endpoints to additional specifications, which can provide:</t>
          <ol spacing="normal" type="1"><li anchor="no-endpoints--advertise-endpoint">
              <t>A mechanism for a server to advertise an endpoint, and the resources whose <iref item="event"/><xref format="none" target="event">events</xref> the endpoint can report.</t>
            </li>
            <li anchor="no-endpoints--identify-resources">
              <t>A mechanism for a client to specify the resources from which it wants to receive <iref item="notification"/><iref item="event notification"/><xref format="none" target="notification">event notifications</xref>, for example by extending the <xref format="title" target="data-model"/>.</t>
            </li>
          </ol>
          <t anchor="no-endpoints--discouraged">Subscribing to multiple resources with a single Events Query is, however, discouraged. It mirrors methods that encapsulate multiple requests within a single message, such as MGET or MHEAD, which were rejected during the design of HTTP/1.1 because they violate several REST constraints (<xref target="REST"/>, <xref relative="evaluation.htm#sec_6_3_3_1" section="Section 6.3.3.1" sectionFormat="bare" target="REST"/>). Where per-resource subscriptions are impractical, such as in limited environments or with legacy applications, endpoints can serve as an alternative.</t>
        </section>
      </section>
      <section anchor="limitations">
        <name>Limitations</name>
        <t anchor="limitation--connection-limits">Browsers cap the number of persistent HTTP/1.1 connections per host (<xref section="5.1" sectionFormat="comma" target="RFC6202"/>), 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 a host reachable only over HTTP/1.1. This limitation is identical to that of other HTTP-based streaming protocols, such as Server-Sent Events (<xref target="HTML"/>, <xref relative="#server-sent-events" section="Section 9.2" sectionFormat="bare" target="HTML"/>). 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), deploying an alternative service with a different protocol configuration (<xref target="RFC7838"/>), or 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 (see <xref target="out-of-scope--endpoints"/>). 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 limit the number of persistent connections they open simultaneously to a given host, for example, by sharing a <iref item="subscription"/><xref format="none" target="subscription">subscription</xref> across the frames, tabs, or windows of the same browser (<xref section="5.1" sectionFormat="comma" target="RFC6202"/>).</t>
      </section>
      <section anchor="sse-comparison">
        <name>Comparison with Server-Sent Events</name>
        <t anchor="sse-defacto">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 anchor="sse-standardization">The HTML Living Standard standardizes Server-Sent Events (<xref target="HTML"/>, <xref relative="#server-sent-events" section="Section 9.2" sectionFormat="bare" target="HTML"/>) with the EventSource interface<cref anchor="EventSource_Obsolescence">As of October 2022, WHATWG does not intend to extend the EventSource feature, as <eref target="https://github.com/whatwg/html/issues/8297#issuecomment-1291658863">announced</eref> by HTML Living Standard maintainer Anne van Kesteren, with reasons for the decision cited in a subsequent <eref target="https://github.com/whatwg/html/issues/8297#issuecomment-1293054529">comment</eref>.</cref> (<xref target="HTML"/>, <xref relative="#the-eventsource-interface" section="Section 9.2.2" sectionFormat="bare" target="HTML"/>) and the <tt>text/event-stream</tt> media type (<xref target="HTML"/>, <xref relative="#text/event-stream" section="Section 17.7" sectionFormat="bare" target="HTML"/>). 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 <em>representation</em> "intended to reflect a past, current, or desired state of a given resource". Practically, the EventSource interface is extremely limited. For example, it does not even allow for custom HTTP header fields to be sent with requests. The response is only sent as <tt>text/event-stream</tt>, a text format in which any line break is a delimiter. Not just binary content but even multi-line text that requires line endings to be preserved must therefore be encoded, typically as Base 64 (<xref section="4" sectionFormat="comma" target="RFC4648"/>), which results in an additional burden for both the sender and the recipient.</t>
        <t anchor="sse-non-standard">On one hand, these deficiencies have 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 header fields, such as for sending credentials, or use the POST method to communicate additional configuration in a request body. On the other hand, they have forced developers to adopt alternative protocols such as WebSocket <xref target="WS"/>, despite the increased complexity.</t>
        <t anchor="benefits-over-sse">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 anchor="non-normative">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 Events Field Registry (the exception is only for 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. Only non-negative values are valid.</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 value of <tt>0</tt> indicates that the client does not have a preference for the response duration. 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> end the response before this duration.</t>
        <t anchor="duration-property-response-authz">A server <bcp14>SHOULD NOT</bcp14> set a response duration longer than the period for which an authorization is valid. This is to ensure that a server does not send <iref item="event notification"/><iref item="notification"/><xref format="none" target="notification">notifications</xref> to clients after their authorization expires, while accommodating valid authorizations where the server is unable to determine the authorization period in advance. Once the request's authorization expires or is revoked, the server <bcp14>MUST NOT</bcp14> send any more <iref item="event notification"/><iref item="notification"/><xref format="none" target="notification">notifications</xref>.</t>
        <t anchor="duration-property-stipulations">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 express 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 (as would be sent in response to a GET request) in a preferred form.</t>
        </li>
      </ul>
      <t anchor="data-model-conditional">A client <bcp14>MAY</bcp14> express interests conditional on the representations it is prepared to accept in response to the QUERY request.</t>
      <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 beyond the scope of this specification (see <xref target="out-of-scope--realizations"/>).</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 use request header fields to express preferences for the 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>
      <t anchor="data-model-example-2">The following modifies the previous example to express interests conditional on the <tt>type</tt> and <tt>language</tt> of the response.</t>
      <figure anchor="data-model-example-2-yaml">
        <name>Events Query Data Model with Conditional Interests</name>
        <sourcecode name="data-model-example-2.yaml" type="yaml"><![CDATA[
- type: application/json-seq
  language: hi
  state:
    "@context": [https://schema.org, {"@language": hi}]
    "@type": Person
  events:
    "@context": [https://www.w3.org/ns/activitystreams, {"@language": hi}]
- type: application/json-seq
  state:
    "@context": https://schema.org
    "@type": Person
  events:
    "@context": https://www.w3.org/ns/activitystreams
- language: hi
  state:
    Accept: text/html
    Accept-Language: hi
  events:
    Accept: example/event-notification
    Accept-Language: hi
- 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-request-procedure">To receive a single <iref item="event notification"/><iref item="notification"/><xref format="none" target="notification">notification</xref>, a client <bcp14>MUST</bcp14>:</t>
        <ul spacing="normal">
          <li anchor="single-notification-request-procedure--data-model">
            <t>send 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 does not 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>
          </li>
          <li anchor="single-notification-request-procedure--method">
            <t>using the <tt>QUERY</tt> method (<xref section="2" sectionFormat="comma" target="HTTP-QUERY"/>).</t>
          </li>
        </ul>
        <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-end">When a single <iref item="event notification"/><iref item="notification"/><xref format="none" target="notification">notification</xref> is requested, the server <bcp14>MUST</bcp14> end the response 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
Events: duration=240
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 promptly abort the response stream, freeing connection resources at both the client and the server.</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 <bcp14>MUST</bcp14>:</t>
        <ul spacing="normal">
          <li anchor="stream-request-procedure--data-model">
            <t>send 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 includes 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>
          </li>
          <li anchor="stream-request-procedure--method">
            <t>using the QUERY method (<xref section="2" sectionFormat="comma" target="HTTP-QUERY"/>).</t>
          </li>
        </ul>
        <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 vocabulary 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": https://www.w3.org/ns/activitystreams
]]></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="RFC10036"/>) 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>, with only "Content-*" fields included, as these alone have defined meaning in a body part (<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"/>, <xref relative="#the-eventsource-interface" section="Section 9.2.2" sectionFormat="bare" target="HTML"/>) in conjunction, Events Query not only saves on an extra round trip, but also 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 <bcp14>MUST</bcp14>:</t>
        <ul spacing="normal">
          <li anchor="representation-request-procedure--data-model">
            <t>send 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 includes an interest in receiving a stream containing:  </t>
            <ul spacing="normal">
              <li anchor="representation-request-procedure--data-model-representation">
                <t>the representation(s) in a preferred form, and</t>
              </li>
              <li anchor="representation-request-procedure--data-model-notifications">
                <t><iref item="event"/><xref format="none" target="event">event</xref> <iref item="event notification"/><iref item="notification"/><xref format="none" target="notification">notifications</xref> in a preferred form,</t>
              </li>
            </ul>
          </li>
          <li anchor="representation-request-procedure--method">
            <t>using the <tt>QUERY</tt> method (<xref section="2" sectionFormat="comma" target="HTTP-QUERY"/>).</t>
          </li>
        </ul>
        <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
Events: duration=0

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 behavior, 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 beyond the scope of this specification (see <xref target="out-of-scope--temporal-coordination"/>).</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>
      <section anchor="express-demo">
        <name>Express Demo</name>
        <t anchor="express-demo-intro">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 anchor="express-demo-lib--negotiate-events-field">
            <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 anchor="express-demo-lib--nose">
            <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 anchor="express-demo-lib--extended-response">
            <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 anchor="express-demo-license">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="camara-api-demo">
        <name>CAMARA API Demo</name>
        <t anchor="camara-api-demo-desc">A second, independent implementation by Jaime Jiménez that applies Events Query in an agent-ready mock for the <eref target="https://camaraproject.org">CAMARA (Global Telco API Alliance)</eref> HTTP APIs is available at <eref target="https://camara.jaime.win"/>. The CAMARA sandbox uses Events Query to notify clients of SIM-swaps. An agent can observe changes to the SIM-swap state in-band as a JSON Sequence by sending a QUERY request to a resource, rather than setting up a separate Webhooks <iref item="subscription"/><xref format="none" target="subscription">subscription</xref>.</t>
      </section>
      <section anchor="twenty-three-signs-web">
        <name>23signs Web Service</name>
        <t anchor="twenty-three-signs-web-intro">Jaime Jiménez has also created a web service hosted at <eref target="https://web.23signs.org"/> that serves clean Markdown representations of public web pages, with change <iref item="event notification"/><iref item="notification"/><xref format="none" target="notification">notifications</xref> delivered using Events Query.</t>
        <t anchor="twenty-three-signs-web-third-party-observer">This service demonstrates a third-party <iref item="observer"/>observer generating <iref item="notification"/><iref item="event notification"/><xref format="none" target="notification">event notifications</xref> for resources that do not natively support Events Query.</t>
      </section>
    </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>
      <t anchor="security-considerations-authz">Resource authorization can change during the lifetime of a response. A server that enforces access control on a resource must ensure that it does not transmit <iref item="event notification"/><iref item="notification"/><xref format="none" target="notification">notifications</xref> once the authorization carried by the request has expired or been revoked. If the authorization can be revoked mid-response, the server must check the validity of the authorization before each <iref item="event notification"/><iref item="notification"/><xref format="none" target="notification">notification</xref> is sent and immediately end the response upon discovering that the authorization is invalid.</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-offs in their proposals based on their ramifications on the interests of end users.</cref></t>
      <t anchor="end-user-classification">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 anchor="end-user-filter">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 anchor="end-user-server-sets-limits">Events Query empowers servers to decide, for any given resource, the <iref item="event"/><xref format="none" target="event">events</xref> for which <iref item="event notification"/><iref item="notification"/><xref format="none" target="notification">notifications</xref> are served and the content of the <iref item="event notification"/><iref item="notification"/><xref format="none" target="notification">notifications</xref>. Servers are able to choose the duration for which they wish to serve <iref item="event notification"/><iref item="notification"/><xref format="none" target="notification">notifications</xref> and are also free to end the response at any time. Servers implementing Events Query might, thus, be able to offer differentiated service to consumers. Authenticated consumers, for example, might be asked to share the cost burden with publishers in return for a higher quality of service.</t>
      <t anchor="end-user-intermediation">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 behavior. 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="J. Reschke" initials="J." surname="Reschke"/>
            <author fullname="J.M. Snell" initials="J.M." surname="Snell"/>
            <author fullname="M. Bishop" initials="M." surname="Bishop"/>
            <date month="June" year="2026"/>
            <abstract>
              <t>This specification defines the QUERY method for HTTP. A QUERY requests that the request target process the enclosed content in a safe and idempotent manner and then respond with the result of that processing. This is similar to POST requests, but QUERY requests can be automatically repeated or restarted without concern for partial state changes.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="10008"/>
          <seriesInfo name="DOI" value="10.17487/RFC10008"/>
        </reference>
        <reference anchor="RFC10036">
          <front>
            <title>Incremental Forwarding of HTTP Messages</title>
            <author fullname="K. Oku" initials="K." surname="Oku"/>
            <author fullname="T. Pauly" initials="T." surname="Pauly"/>
            <author fullname="M. Thomson" initials="M." surname="Thomson"/>
            <date month="August" year="2026"/>
            <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="RFC" value="10036"/>
          <seriesInfo name="DOI" value="10.17487/RFC10036"/>
        </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>
              <organization>WHATWG</organization>
            </author>
            <date/>
          </front>
          <seriesInfo name="WHATWG" value="Living Standard"/>
          <annotation>Commit snapshot (19 October 2026): <eref target="https://fetch.spec.whatwg.org/commit-snapshots/59afe349913d56898c947576216f1c2579308be7/">https://fetch.spec.whatwg.org/commit-snapshots/59afe349913d56898c947576216f1c2579308be7/</eref></annotation>
        </reference>
        <reference anchor="HTML" target="https://html.spec.whatwg.org">
          <front>
            <title>HTML</title>
            <author>
              <organization>WHATWG</organization>
            </author>
            <date/>
          </front>
          <seriesInfo name="WHATWG" value="Living Standard"/>
          <annotation>Commit snapshot (30 October 2026): <eref target="https://html.spec.whatwg.org/commit-snapshots/404b3eb14a7a936dddefb2d78e224dbeb01d2358/">https://html.spec.whatwg.org/commit-snapshots/404b3eb14a7a936dddefb2d78e224dbeb01d2358/</eref></annotation>
        </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/top.htm">
          <front>
            <title>Architectural Styles and the Design of Network-based Software Architectures</title>
            <author fullname="Roy Thomas Fielding" initials="R. T." surname="Fielding">
              <organization>University of California, Irvine</organization>
            </author>
            <date month="September" year="2000"/>
          </front>
          <format target="https://roy.gbiv.com/pubs/dissertation/fielding_dissertation.pdf" type="PDF"/>
          <refcontent>Doctoral Dissertation, University of California, Irvine</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="RFC4648">
          <front>
            <title>The Base16, Base32, and Base64 Data Encodings</title>
            <author fullname="S. Josefsson" initials="S." surname="Josefsson"/>
            <date month="October" year="2006"/>
            <abstract>
              <t>This document describes the commonly used base 64, base 32, and base 16 encoding schemes. It also discusses the use of line-feeds in encoded data, use of padding in encoded data, use of non-alphabet characters in encoded data, use of different encoding alphabets, and canonical encodings. [STANDARDS-TRACK]</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="4648"/>
          <seriesInfo name="DOI" value="10.17487/RFC4648"/>
        </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 953?>

<section anchor="examples">
      <name>Examples</name>
      <t anchor="example-intro">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-representation-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"/>:</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
Events: duration=0

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 anchor="example-stream-description">The 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 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": https://www.w3.org/ns/activitystreams
]]></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 anchor="thanks">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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
Ecttx6VuXvuMd7KGgLwRa7x2E3YCvhGZmtSVf11G6p59JyOFo/8iRsob/Gsw
0jZ8WMNIGwfXykE3I4DloMlc5UtgTG+w6M51gimm0Xoueq0rRDo39sa3gfnc
SgrkSBKihO11JePpPL02bw7d7te65d7cqSdg0cZqTSrX3PPr2ObIq+CDtfku
yUOhL9qr7nJVVInYFsTvvNmWyJ165Sapssl9YdiXTe50KcT8nFpn3tw8P714
+p10WSToSBeBv0rHEi5k9KN0XOwsgF1Sc8Bc19ksQD5Spb0KDmNgi4/BWhJ1
VT8EU4xRGjcAamzsnkkWTLuvzAu4aDQxdQMv2n/sDIlspvV5cbjUj5gE91Yh
Gpsm/9cO1UADPqKo/mPXI/oly2zkSOIwzcNDw7stAgQx/i+eupYpiqO0xH2u
jTzZPN+vEAbaMYlOdWmEJnfl/K251FvHwZye2YI7a5iZW6bS2XLDedG41JME
w5b6De1I2MJnf8Vr+tro5kKxaUa6N/Tm6n7bm3o/NOYX3rs7KcA64L+Mktg1
O/5t3Kj//87O7KCXTuV52/e15kRH/q6Jf77fsTPgt6NJdruAgQ2H0VWUpKiJ
OGarLe5g79ZqSOvUYFhfs8OEyKNHRLrnucmhLqNoi8+S2kiTZTpJ0lTFXWzL
c79uviOUtLAtM4StE7aNfr1rJ80dPV1V7llaIvDM1Sd2P3SU38YNl7aLIgks
8xoLtAT2bYBT7Zb7BFONBjV2GjbY6fpYqsThMsQSl8Ui57g/c7mNnuvgKd5m
lU4t9VyYOtW+SqOCe/r8e7mU+8W3Tdt6Rw7ubrLzapyjtjRihYsUW6N0W4pf
alvCJ98pwPrgfV6k8VdbfrI1e9V0TbV7fLL8Aqb7RaPYMBOPzg2XlTpCHkfu
d6nwMrPfVOw9ld6ppNQP9uCENWDJ6+gqyfn+p1DM+gInbVaXAmoqEPZiVGsL
uekg7JfSoDB5lYmdlFNNHp2Qh1G6HAjot/PRY2ZsU7u18iZSm6Orw017dhBo
Q9SlyymV/wsLV+gq4KFp1JNQD6cNbLCmpftC1gRQCnfSrSDqMc2FmmKQl22F
7MbFyHUX1q7DVWu9umaZ3Oqm7dTTrLKxNn4VPilfvr6VkNspiHI89S1nrSlK
LVPjHP67xBtNv/EAZYEvS2mLInUenql5jlUk+Z9gJMxzXUXSeaRLzp0Ayqy0
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
sx+CGqfgvYUOE66b/8Pe/wO45iNUrvEAAA==

-->

</rfc>
