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

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

<section anchor="introduction">
      <name>Introduction</name>
      <t anchor="intro-http-traditional-use">HTTP was originally designed for transferring static documents within a single request and response. HTTP does not automatically inform clients of changes to a document. 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 today are dynamic, requiring instantaneous updates from sources. The many workarounds developed over the years to provide real-time updates for resources using HTTP have proven to be inadequate. Web programmers instead resort to implementing custom messaging systems over alternate protocols such as WebSockets <xref target="WS"/>, which requires additional layers of code, typically involving non-standard JavaScript frameworks to provide <iref item="notification"/><iref item="event notification"/><xref format="none" target="notification">event notifications</xref>. It also requires additional work to coordinate a representation and <iref item="event notification"/><iref item="notification"/><xref format="none" target="notification">notifications</xref> that are served on different protocols.</t>
      <t anchor="intro-events-query">Events Query is a minimal protocol built on top of <xref target="HTTP"/> that allows applications to request <iref item="notification"/><iref item="event notification"/><xref format="none" target="notification">event notifications</xref> directly from a resource of interest using the <tt>QUERY</tt> method (<xref section="3" sectionFormat="comma" target="HTTP-QUERY"/>).</t>
      <t anchor="intro-convinience">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. Programmers implementing Events Query shall no longer be forced to switch to another protocol to incorporate real-time functionality in their web applications. Not only that, web-applications shall receive a representation and <iref item="event notification"/><iref item="notification"/><xref format="none" target="notification">notifications</xref> in a single response, obviating any need for co-ordination and saving on unnecessary roundtrips.</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 = fetch("http://example.com/foo", {
  method: "QUERY",
  headers: {
    "Content-Type": "application/json",
    Accept: "application/http"
  },
  body: JSON.stringify({
    state: { Accept: "text/plain" },
    events: { Accept: "example/event-request" }
  })
});

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

const {done, value: representation} = await splitResponse.next();
if (!done) {
  // do something with the representation
  // API identical to fetch Response
}

for await (const notification of splitResponse) {
  // do something with a notification
  // API identical to fetch Response
}
]]></sourcecode>
      </figure>
      <t anchor="intro-conneg">Unlike other HTTP based <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 mechanisms 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 create representations that are "live" for user agents. This has the potential to 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 being the most intuitive source for notifying its <iref item="event"/><xref format="none" target="event">events</xref>. 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>
      <t anchor="endpoints-not-needed">Unlike other protocols, Events Query does not (usually) require additional resources to be specifically dedicated as endpoints for delivering <iref item="notification"/><iref item="event notification"/><xref format="none" target="notification">event notifications</xref>. By giving a resource the ability to send <iref item="event notification"/><iref item="notification"/><xref format="none" target="notification">notifications</xref> when an <iref item="event"/><xref format="none" target="event">event</xref> occurs, Events Query aims to reduce the complexity of both servers and clients implementing <iref item="event notification"/><iref item="notification"/><xref format="none" target="notification">notifications</xref>, making it easier to develop real-time applications.</t>
      <section anchor="goals">
        <name>Goals</name>
        <t anchor="goals-list">The goals of the Events Query are:</t>
        <ol spacing="normal" type="1"><li anchor="goal--http-only">
            <t>to use the Hypertext Transfer Protocol <xref target="HTTP"/> for reliable and in-order transfer of <iref item="notification"/><iref item="event notification"/><xref format="none" target="notification">event notifications</xref>. Clients fetching resources using HTTP need not required to 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 provide updates directly from a resource of interest, obviating the need to create another endpoint for <iref item="notification"/><iref item="event notification"/><xref format="none" target="notification">event notifications</xref>. This eliminates the need to co-ordinate responses between a resource and the <iref item="event notification"/><iref item="notification"/><xref format="none" target="notification">notification</xref> endpoint as is the case with existing approaches.</t>
          </li>
          <li anchor="goal--unified-request">
            <t>to allow clients to fetch 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 and eliminating the need to manage race conditions between responses.</t>
          </li>
          <li anchor="goal--negotiation">
            <t>to allow <iref item="notification"/><iref item="event notification"/><xref format="none" target="notification">event notifications</xref> to be communicated in any arbitrary format that might be negotiated. Implementers shall be able to provide more expressive <iref item="event notification"/><iref item="notification"/><xref format="none" target="notification">notifications</xref> in comparison to existing HTTP based messaging protocols such as Server Sent Events <xref target="SSE"/>.</t>
          </li>
          <li anchor="goal--intermediation">
            <t>to specify transparent semantics that allow intermediaries to participate in scaling, improving reliability, and reducing latency of <iref item="notification"/><iref item="event notification"/><xref format="none" target="notification">event notifications</xref> as well as proactively update caches.</t>
          </li>
        </ol>
      </section>
      <section anchor="constraints">
        <name>Constraints</name>
        <t anchor="constraints-list">To the extent feasible, the Events Query:</t>
        <ol spacing="normal" type="1"><li anchor="constraint--reuse">
            <t>adheres to established practices and conventions. In particular, every attempt has been made to reuse existing protocols and specifications. Implementers shall be able to repurpose existing tools and libraries for implementing this specification.</t>
          </li>
          <li anchor="constraint--rest">
            <t>conforms to <xref format="title" target="REST"/>, best practices for <xref format="title" target="RFC9205"/> <xref target="RFC9205"/>, and <xref format="title" target="RFC6202"/> <xref target="RFC6202"/>. This specification can, thus, be used to extend the capabilities of any existing HTTP resource to provide <iref item="notification"/><iref item="event notification"/><xref format="none" target="notification">event notifications</xref>. Implementers shall be able to scale <iref item="event notification"/><iref item="notification"/><xref format="none" target="notification">notifications</xref> along with their data/applications.
<!--
  See my original comment on the solid/specification Gitter channel on 24 April 2020
  https://matrix.to/#/!PlIOdBsCTDRSCxsTGA:gitter.im/$VgCcuq2HbpLKJvxIw4witAUOsqcdhC98glgzqVI1WOY
-->
            </t>
          </li>
        </ol>
      </section>
      <section anchor="scope">
        <name>Scope</name>
        <t anchor="in-scope">The Events Query Protocol specifies:</t>
        <ol spacing="normal" type="1"><li anchor="scope--discovery">
            <t>A mechanism to discover <iref item="event notification"/><iref item="notification"/><xref format="none" target="notification">notification</xref> capabilities 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 the <iref item="subscription"/><xref format="none" target="subscription">subscription</xref> (<xref target="data-model"/>).</t>
          </li>
          <li anchor="scope--single-response-semantics">
            <t>Semantics for a response carrying a <xref target="single-notification-response">single notification</xref>.</t>
          </li>
          <li anchor="scope--streaming-response-semantics">
            <t>Semantics for the response streaming <xref target="stream-response">multiple event notifications</xref> as well as the <xref target="representation-response">representation</xref>, if requested.</t>
          </li>
        </ol>
        <t anchor="out-of-scope">The Events Query Protocol does not specify:</t>
        <ol spacing="normal" type="1"><li anchor="no-scope--specific-data-model">
            <t>A realization of the abstract <iref item="data model"/><xref format="none" target="data-model">data model</xref> used for requesting <iref item="notification"/><iref item="event notification"/><xref format="none" target="notification">event notifications</xref>. For the purposes of illustration, we shall use an imaginary <tt>example/event-request</tt> media-type for the request.</t>
          </li>
          <li anchor="no-scope--specific-events">
            <t>Specific <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> is generated. <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 generated can vary per resource.</t>
          </li>
          <li anchor="no-scope--notification-format">
            <t>The form or content of an <iref item="notification"/><iref item="event notification"/><xref format="none" target="notification">event notification</xref>. Implementations have the flexibility to generate <iref item="notification"/><iref item="event notification"/><xref format="none" target="notification">event notifications</xref> for the applications they wish to support on a resource. We shall use a very simple YAML <iref item="event notification"/><iref item="notification"/><xref format="none" target="notification">notification</xref> using an imaginary <tt>example/event-response</tt> media-type for illustration.</t>
          </li>
          <li anchor="no-scope--stream-representation">
            <t>Specific representations for the response stream with multiple <iref item="event notification"/><iref item="notification"/><xref format="none" target="notification">notifications</xref>. For the purpose of illustration, we shall use the <tt>application/http</tt> media-type (<xref section="10.2" sectionFormat="comma" target="RFC9112"/>) as the composite media-type for the response that includes a representation and/or multiple <iref item="notification"/><iref item="event notification"/><xref format="none" target="notification">event notifications</xref>.</t>
          </li>
        </ol>
      </section>
      <section anchor="limitations">
        <name>Limitations</name>
        <t anchor="limitation--resource-specificity">Events Query only allows <iref item="event notification"/><iref item="notification"/><xref format="none" target="notification">notifications</xref> to be sent for <iref item="event"/><xref format="none" target="event">events</xref> on a given resource. To send <iref item="event notification"/><iref item="notification"/><xref format="none" target="notification">notifications</xref> for <iref item="event"/><xref format="none" target="event">events</xref> on multiple resources in a single response, implementations will need to mint separate resources as <iref item="event notification"/><iref item="notification"/><xref format="none" target="notification">notification</xref> endpoints. This is no different from APIs built on top of existing messaging protocols (See, for example, <xref target="WS"/> and <xref target="WEBSUB"/>).</t>
        <t anchor="limitation--connection-limits">Browsers cap the number of persistent HTTP/1.1 connections per host, limiting the suitability of Events Query for web applications in the browser that require simultaneous <iref item="notification"/><iref item="event notification"/><xref format="none" target="notification">event notifications</xref> from multiple resources on the same host. This limitation is identical to that of other HTTP streaming based protocols, such as Server-Sent Events <xref target="SSE"/>. Implementations are strongly encouraged to adopt HTTP/2 (or later). HTTP/1.1 servers might consider setting up a reverse proxy over HTTP/2 (or later) or implement mitigation strategies, such as to maximize the number of concurrent connections and to provide alternate hosts for resources. Implementations might alternatively consider using endpoints to provide <iref item="notification"/><iref item="event notification"/><xref format="none" target="notification">event notifications</xref> for multiple resources as previously described. Clients on a browser requesting <iref item="notification"/><iref item="event notification"/><xref format="none" target="notification">event notifications</xref> over an HTTP/1.1 connection are advised to exercise caution when opening multiple simultaneous persistent connections to any given host.</t>
        <!-- Conformance Sections -->

</section>
    </section>
    <section anchor="conformance">
      <name>Conformance</name>
      <section anchor="document-conventions">
        <name>Document Conventions</name>
        <t>All 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 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 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 of 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-request">The <tt>Events</tt> header field when used by a client in a request communicates preferences for the Events Query response. The <tt>Events</tt> header field is not meant for content negotiation.</t>
      <t anchor="events-field-response">The <tt>Events</tt> header field allows a server to communicate the properties of a response carrying <iref item="notification"/><iref item="event notification"/><xref format="none" target="notification">event notifications</xref>.</t>
      <t anchor="events-field-stipulations"><tt>Events</tt> is a Dictionary structured header field (<xref section="3.2" sectionFormat="comma" target="HTTP-SF"/>). The order of keys is insignificant. Senders <bcp14>SHOULD NOT</bcp14> generate keys not registered with the HTTP <iref item="event"/><xref format="none" target="event">Event</xref> Field Registry (An exception is made to allow 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-request">The <tt>duration</tt> property when be used by a client in a request specifies the duration for which they prefer the response stream to remain open. A server is completely free to ignore this property.</t>
        <t anchor="duration-property-response">The <tt>duration</tt> property when used by a server in a response indicates the minimum duration for which a server intends to keep the response stream open. This property is merely advisory, and a server might still close the response stream before this duration.</t>
        <t anchor="duration-property-stipulations">The <tt>duration</tt> property is a key specified in the <tt>Events</tt> header field. It is of the type Integer (<xref section="3.3.1" sectionFormat="comma" target="HTTP-SF"/>) with its value indicating duration in seconds. Only positive integer values are valid. A value of <tt>0</tt> indicates an indefinite duration. A sender <bcp14>MUST</bcp14> conform to these stipulations when generating the <tt>duration</tt> property. If the value of the <tt>duration</tt> property fails to conform to these stipulations, it <bcp14>MUST</bcp14> be ignored by the recipient.</t>
      </section>
    </section>
    <section anchor="data-model">
      <name>Subscription Data Model</name>
      <iref item="data model" primary="true"/>
      <t anchor="data-model-description">The abstract data model specifies the semantics of an Events Query.</t>
      <t anchor="data-model-requirements">A realization of the data model <bcp14>MUST</bcp14> allow a client to specify in a <iref item="subscription"/><xref format="none" target="subscription">subscription</xref> request:</t>
      <ul spacing="normal">
        <li anchor="data-model-requirement-representation">
          <t>interest in receiving a representation in a preferred form.</t>
        </li>
        <li anchor="data-model-requirement-notifications">
          <t>interest in receiving <iref item="notification"/><iref item="event notification"/><xref format="none" target="notification">event notifications</xref> in a preferred form.</t>
        </li>
      </ul>
      <t anchor="data-model-realization">Implementations can choose an appropriate media-type to realize the <iref item="subscription"/><xref format="none" target="subscription">subscription</xref> data model. Implementations are free to extend the data model to include additional data. A specific realization of the data model is outside the scope of this specification.</t>
      <t anchor="data-model-example">The following example shows the body of a <iref item="subscription"/><xref format="none" target="subscription">subscription</xref> request wherein the <tt>state</tt> and <tt>events</tt> properties are used to specify request headers for representation and <iref item="notification"/><iref item="event notification"/><xref format="none" target="notification">event notifications</xref> respectively in a YAML like syntax.</t>
      <figure anchor="data-model-example-yaml">
        <name>Events Query Data Model in a YAML like syntax</name>
        <sourcecode name="data-model-example.yaml" type="yaml"><![CDATA[
state:
  Accept: text/html
events:
  Accept: example/event-response
]]></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
Accept: text/html
Accept-Query: "example/events-request"
]]></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 <iref item="event"/><xref format="none" target="event">event</xref> query is to ask for 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-content">To be notified of the next <iref item="event"/><xref format="none" target="event">event</xref>(s) on a resource using Events Query, a client can send an empty query. A server <bcp14>MUST</bcp14> consider a request with an empty query in an appropriate media-type made using the <tt>QUERY</tt> method (<xref section="3" sectionFormat="comma" target="HTTP-QUERY"/>) as a <iref item="subscription"/><xref format="none" target="subscription">subscription</xref> request for a single <iref item="notification"/><iref item="event notification"/><xref format="none" target="notification">event notification</xref>.</t>
        <t anchor="single-notification-request-conneg">A client can, as usual, negotiate the form of the <iref item="notification"/><iref item="event notification"/><xref format="none" target="notification">event notification</xref> using header fields.</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
Content-Type: example/event-request
Accept: example/event-response
Events: duration=0


]]></sourcecode>
        </figure>
      </section>
      <section anchor="single-notification-response">
        <name>Response</name>
        <t anchor="single-notification-response-close">When providing a single <iref item="event notification"/><iref item="notification"/><xref format="none" target="notification">notification</xref>, the server <bcp14>MUST</bcp14> close the connection immediately after transmitting 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
Host: example.org
Accept-Query: example/event-request
Content-Type: example/event-response
Incremental: ?1

Event-ID: 456
Type: Update
]]></sourcecode>
        </figure>
        <t>​</t>
        <aside anchor="no-hogging">
          <t><strong>Implementation Advice</strong></t>
          <t>When a user navigates away from a website or an application using Events Query, user agents are strongly encouraged to properly close the response and release the connection.</t>
        </aside>
      </section>
    </section>
    <section anchor="stream">
      <name>Notification Stream</name>
      <t anchor="stream-description">Instead of long-polling for <iref item="notification"/><iref item="event notification"/><xref format="none" target="notification">event notifications</xref>, Events Query can also be used request a stream (<xref section="3" sectionFormat="comma" target="RFC6202"/>) of multiple <iref item="notification"/><iref item="event notification"/><xref format="none" target="notification">event notifications</xref>.</t>
      <section anchor="stream-request">
        <name>Request</name>
        <t anchor="stream-request-procedure">To request a stream of <iref item="notification"/><iref item="event notification"/><xref format="none" target="notification">event notifications</xref> from a resource in an Events Query, a client <bcp14>MUST</bcp14> express the interest in receiving the <iref item="notification"/><iref item="event notification"/><xref format="none" target="notification">event notifications</xref> in a preferred form using a realization of the <iref item="subscription"/><xref format="none" target="subscription">subscription</xref> <iref item="data model"/><xref format="none" target="data-model">data model</xref> with the <tt>QUERY</tt> method (<xref section="3" sectionFormat="comma" target="HTTP-QUERY"/>).</t>
        <t anchor="stream-request-conneg">A client can also negotiate the response that encapsulates <iref item="notification"/><iref item="event notification"/><xref format="none" target="notification">event notifications</xref> using header fields. Since the response carries an encapsulating representation, header fields can no longer be used to negotiate the form of an <iref item="notification"/><iref item="event notification"/><xref format="none" target="notification">event notification</xref> itself like in the case of a <xref target="single-notification-request">Single Notification Request</xref>.</t>
        <t anchor="stream-request-example-description">The following example shows <iref item="subscription"/><xref format="none" target="subscription">subscription</xref> request for a stream of <iref item="notification"/><iref item="event notification"/><xref format="none" target="notification">event notifications</xref> transmitted using the <tt>application/http</tt> media-type. The <tt>events</tt> property indicates the interest in receiving <iref item="notification"/><iref item="event notification"/><xref format="none" target="notification">event notifications</xref>. Preferences are specified using the request headers in the <tt>events</tt> property.</t>
        <figure anchor="stream-request-example">
          <name>Notifications Stream Request</name>
          <sourcecode name="stream-request-example.http" type="http-message"><![CDATA[
QUERY /foo HTTP/1.1
Host: example.org
Accept: application/http
Content-Type: example/event-request
Events: duration=0

events:
  Accept: example/event-response
]]></sourcecode>
        </figure>
      </section>
      <section anchor="stream-response">
        <name>Response</name>
        <t anchor="stream-response-encapsution">The response stream encapsulates multiple <iref item="notification"/><iref item="event notification"/><xref format="none" target="notification">event notifications</xref> (typically, but not necessarily) in a composite media-type. We shall be using <tt>application/http</tt> media-type (<xref section="10.2" sectionFormat="comma" target="RFC9112"/>) for the purpose of illustration.</t>
        <section anchor="stream-response-header">
          <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> immediately sends the header which <bcp14>MUST</bcp14> 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 with the time for which the server intends to serve <iref item="event notification"/><iref item="notification"/><xref format="none" target="notification">notifications</xref>.</t>
                </li>
              </ul>
            </li>
            <li anchor="stream-response-incremental-field">
              <t>The <tt>Incremental</tt> header field (<xref section="3" sectionFormat="comma" target="INCREMENTAL-HTTP-MESSAGES"/>) set to <tt>?1</tt> to indicate that the response is to be immediately forwarded by intermediaries and not buffered.</t>
            </li>
          </ul>
          <figure anchor="stream-response-header-example">
            <name>Notifications Stream Response Headers</name>
            <sourcecode name="stream-response-headers-example.http" type="http-message"><![CDATA[
HTTP/1.1 200 OK
Accept-Query: example/event-request
Content-Type: application/http
Transfer-Encoding: chunked
Incremental: ?1
Events: duration=600
]]></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> identical to the <xref target="single-notification-response">Single Notification Response</xref>, except header fields redundant with response header (<xref target="stream-response-header"/>) are omitted.</t>
          <figure anchor="stream-update-event">
            <name>Update Notification</name>
            <sourcecode name="stream-update-event.http" type="http-message"><![CDATA[

HTTP/1.1 200 OK                                  | Notification
Content-Type: example/event-response             |
Content-Length: 31                               |
                                                 |
Event-ID: 456                                    |
Type: Update                                     |
]]></sourcecode>
          </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> upon a resource being deleted.</t>
          <figure anchor="stream-delete-event">
            <name>Delete Notification</name>
            <sourcecode name="stream-delete-event.http" type="http-message"><![CDATA[

HTTP/1.1 200 OK                                  | Notification
Content-Type: example/event-response             |
Content-Length: 31                               |
                                                 |
Event-ID: 789                                    |
Type: Delete                                     |
]]></sourcecode>
          </figure>
          <t anchor="stream-response-timeout">Otherwise, a server <bcp14>MUST</bcp14> end the response when the connection duration has exceeded 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. A server <bcp14>MAY</bcp14> terminate the response earlier.</t>
        </section>
      </section>
    </section>
    <section anchor="representation">
      <name>Representation</name>
      <t anchor="representation-description">Events Query lets 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="SSE"/> in conjunction, Events Query not only saves on an extra round trip, but relieves a user agent from the burden of handling the possible race condition.</t>
      <section anchor="representation-request">
        <name>Request</name>
        <t anchor="representation-request-procedure">To request a representation of the resource in an Events Query, a client <bcp14>MUST</bcp14> express the interest in receiving the representation in a preferred form using a realization of the <iref item="subscription"/><xref format="none" target="subscription">subscription</xref> <iref item="data model"/><xref format="none" target="data-model">data model</xref> (<xref target="data-model"/>) with the <tt>QUERY</tt> method (<xref section="3" sectionFormat="comma" target="HTTP-QUERY"/>).</t>
        <t anchor="representation-request-example-description">The following example shows <iref item="subscription"/><xref format="none" target="subscription">subscription</xref> request for representation along with <iref item="event notification"/><iref item="notification"/><xref format="none" target="notification">notifications</xref> transmitted using the <tt>application/http</tt> media-type. The <tt>state</tt> property indicates the interest in receiving representation. The preferred form of representation is specified using the request headers in the <tt>state</tt> property.</t>
        <figure anchor="representation-request-example">
          <name>Representation and Notifications Request</name>
          <sourcecode name="representation-request-example.http" type="http-message"><![CDATA[
QUERY /foo HTTP/1.1
Host: example.org
Accept: application/http
Content-Type: example/event-request

state:
  Accept: text/html
events:
  Accept: example/event-response
]]></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 in case of 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 header (<xref target="stream-response-header"/>). Otherwise, the response is the same as that described in <xref target="stream-response"/>.</t>
        <t anchor="representation-response-encapsulation">Again, we shall use the <tt>application/http</tt> media-type (<xref section="10.2" sectionFormat="comma" target="RFC9112"/>) for the purpose of illustration. Chunks have been omitted for clarity.</t>
        <figure anchor="representation-response-example">
          <name>Representation Response</name>
          <sourcecode name="representation-response-example.http" type="http-message"><![CDATA[
HTTP/1.1 200 OK
Accept-Query: example/event-request
Content-Type: application/http
Transfer-Encoding: chunked
Incremental: ?1
Events: duration=600

HTTP/1.1 200 OK                                  | Representation
Content-Type: text/plain                         |
Content-Length: 14                               |
                                                 |
Hello World!                                     |
]]></sourcecode>
        </figure>
        <t anchor="representation-response-non-standard">While this is default behaviour, there is no requirement that a representation is the first message or is sent only once. In such cases, the encapsulated message needs to indicate if it is a representation and not an <iref item="notification"/><iref item="event notification"/><xref format="none" target="notification">event notification</xref>. Such a mechanism is not defined in this specification.</t>
        <t anchor="representation-response-notifications"><iref item="event notification"/><iref item="notification"/><xref format="none" target="notification">Notifications</xref> are transmitted just as described in <xref target="stream-response"/>. See <xref target="example"/> 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="security-conideration">
      <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"/> and 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 a stream of <iref item="notification"/><iref item="event notification"/><xref format="none" target="notification">event notifications</xref>, resources are required to keep the response stream open for an extended period of time, making them more susceptible to Denial-of-Service attacks because the effort required to request <iref item="event notification"/><iref item="notification"/><xref format="none" target="notification">notifications</xref> from the same resource is tiny compared to the time, memory, and bandwidth consumed by attempting to serve the <iref item="event notification"/><iref item="notification"/><xref format="none" target="notification">notifications</xref>. Servers ought to ignore, coalesce, or reject egregious <iref item="notification"/><iref item="event notification"/><xref format="none" target="notification">event notification</xref> request, such as repeated <iref item="event notification"/><iref item="notification"/><xref format="none" target="notification">notification</xref> requests to a resource from the same origin.</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--refrence">
              <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 Item</td>
                <td align="left">
                  <xref target="duration-property"/></td>
              </tr>
            </tbody>
          </table>
        </section>
      </section>
    </section>
    <section anchor="end-user-coniderations">
      <name>End User Considerations</name>
      <t><cref anchor="End_User">If we, the IETF, claim that the Internet is for the end user <xref target="RFC8890"/> and promote the end-to-end principle <xref target="RFC3724"/>, every specification we produce ought to consider its impact on the Internet end user. For this reason, I propose that specifications must include a considerations section where authors assess the impact of their proposal on the internet end user, aligned with the mission of IETF <xref target="RFC3935"/>.</cref></t>
      <t>End users of the HTTP protocol can be classified into two groups: publishers and consumers. Consumers have an incentive to subscribe to <iref item="notification"/><iref item="event notification"/><xref format="none" target="notification">event notifications</xref> from many resources and to hold on to a connection for as long as possible. Whereas publishers bear the cost of server infrastructure. Consumers also typically outnumber publishers, in many cases by multiple orders of magnitude. This creates an imbalance in the effort to subscribe versus effort to deliver; consumers can easily place a disproportionate burden on servers, reminiscent of a denial-of-service attack.</t>
      <t>At the outset, requiring that clients subscribe to <iref item="notification"/><iref item="event notification"/><xref format="none" target="notification">event notifications</xref> per resource serves as an effective filtering mechanism that limits the burden on servers. Compare this to the typical implementation of protocols such as WebSockets <xref target="WS"/>, where clients connect to dedicated endpoints to receive <iref item="event notification"/><iref item="notification"/><xref format="none" target="notification">notifications</xref>; the server either has to broadcast <iref item="event notification"/><iref item="notification"/><xref format="none" target="notification">notifications</xref> for multiple resources or track resources of interest for each client to filter <iref item="notification"/><iref item="event notification"/><xref format="none" target="notification">event notifications</xref> accordingly.</t>
      <t>Events Query empowers servers to decide content and duration for which <iref item="event"/><xref format="none" target="event">event</xref> <iref item="event notification"/><iref item="notification"/><xref format="none" target="notification">notifications</xref> are served on any given resource, as well as allowing servers to close the response stream at any time. Servers may also limit <iref item="notification"/><iref item="event notification"/><xref format="none" target="notification">event notifications</xref> and/or their content, except to authenticated consumers. Such authenticated consumers might, for example, be asked to share the cost burden with publishers in return for a higher quality of service.</t>
      <t>The use of HTTP Semantics also enables intermediation of <iref item="notification"/><iref item="event notification"/><xref format="none" target="notification">event notifications</xref>, unlike existing mechanisms built with protocols such as WebSockets <xref target="WS"/> or WebSub <xref target="WEBSUB"/>. Intermediaries can help with improving the latency and reliability of transmission of <iref item="event"/><xref format="none" target="event">event</xref> <iref item="event notification"/><iref item="notification"/><xref format="none" target="notification">notifications</xref> as well as scaling of the <iref item="notification"/><iref item="event notification"/><xref format="none" target="notification">event notification</xref> traffic to reach a significantly larger base of consumers. On the flip side, economies of scale will likely lead to greater consolidation of intermediary service providers (though not centralization) with the attendant risk of anti-consumer behaviour. In the opinion of the authors, policies designed to treat network traffic as a public utility might provide better outcomes for the end user.</t>
    </section>
  </middle>
  <back>
    <displayreference target="RFC9112" to="HTTP/1.1"/>
    <references anchor="sec-combined-references">
      <name>References</name>
      <references anchor="sec-normative-references">
        <name>Normative References</name>
        <reference anchor="HTTP">
          <front>
            <title>HTTP Semantics</title>
            <author fullname="R. Fielding" initials="R." role="editor" surname="Fielding"/>
            <author fullname="M. Nottingham" initials="M." role="editor" surname="Nottingham"/>
            <author fullname="J. Reschke" initials="J." role="editor" surname="Reschke"/>
            <date month="June" year="2022"/>
            <abstract>
              <t>The Hypertext Transfer Protocol (HTTP) is a stateless application-level protocol for distributed, collaborative, hypertext information systems. This document describes the overall architecture of HTTP, establishes common terminology, and defines aspects of the protocol that are shared by all versions. In this definition are core protocol elements, extensibility mechanisms, and the "http" and "https" Uniform Resource Identifier (URI) schemes.</t>
              <t>This document updates RFC 3864 and obsoletes RFCs 2818, 7231, 7232, 7233, 7235, 7538, 7615, 7694, and portions of 7230.</t>
            </abstract>
          </front>
          <seriesInfo name="STD" value="97"/>
          <seriesInfo name="RFC" value="9110"/>
          <seriesInfo name="DOI" value="10.17487/RFC9110"/>
        </reference>
        <reference anchor="HTTP-SF">
          <front>
            <title>Structured Field Values for HTTP</title>
            <author fullname="M. Nottingham" initials="M." surname="Nottingham"/>
            <author fullname="P-H. Kamp" surname="P-H. Kamp"/>
            <date month="September" year="2024"/>
            <abstract>
              <t>This document describes a set of data types and associated algorithms that are intended to make it easier and safer to define and handle HTTP header and trailer fields, known as "Structured Fields", "Structured Headers", or "Structured Trailers". It is intended for use by specifications of new HTTP fields.</t>
              <t>This document obsoletes RFC 8941.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="9651"/>
          <seriesInfo name="DOI" value="10.17487/RFC9651"/>
        </reference>
        <reference anchor="HTTP-QUERY">
          <front>
            <title>The HTTP QUERY Method</title>
            <author fullname="Julian Reschke" initials="J." surname="Reschke">
              <organization>greenbytes GmbH</organization>
            </author>
            <author fullname="James M. Snell" initials="J. M." surname="Snell">
         </author>
            <author fullname="Mike Bishop" initials="M." surname="Bishop">
              <organization>Akamai</organization>
            </author>
            <date day="29" month="April" year="2025"/>
            <abstract>
              <t>   This specification defines a new HTTP method, QUERY, as a safe,
   idempotent request method that can carry request content.

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

              </t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-ietf-httpbis-incremental-00"/>
        </reference>
        <reference anchor="RFC8126">
          <front>
            <title>Guidelines for Writing an IANA Considerations Section in RFCs</title>
            <author fullname="M. Cotton" initials="M." surname="Cotton"/>
            <author fullname="B. Leiba" initials="B." surname="Leiba"/>
            <author fullname="T. Narten" initials="T." surname="Narten"/>
            <date month="June" year="2017"/>
            <abstract>
              <t>Many protocols make use of points of extensibility that use constants to identify various protocol parameters. To ensure that the values in these fields do not have conflicting uses and to promote interoperability, their allocations are often coordinated by a central record keeper. For IETF protocols, that role is filled by the Internet Assigned Numbers Authority (IANA).</t>
              <t>To make assignments in a given registry prudently, guidance describing the conditions under which new values should be assigned, as well as when and how modifications to existing values can be made, is needed. This document defines a framework for the documentation of these guidelines by specification authors, in order to assure that the provided guidance for the IANA Considerations is clear and addresses the various issues that are likely in the operation of a registry.</t>
              <t>This is the third edition of this document; it obsoletes RFC 5226.</t>
            </abstract>
          </front>
          <seriesInfo name="BCP" value="26"/>
          <seriesInfo name="RFC" value="8126"/>
          <seriesInfo name="DOI" value="10.17487/RFC8126"/>
        </reference>
        <reference anchor="RFC2119">
          <front>
            <title>Key words for use in RFCs to Indicate Requirement Levels</title>
            <author fullname="S. Bradner" initials="S." surname="Bradner"/>
            <date month="March" year="1997"/>
            <abstract>
              <t>In many standards track documents several words are used to signify the requirements in the specification. These words are often capitalized. This document defines these words as they should be interpreted in IETF documents. This document specifies an Internet Best Current Practices for the Internet Community, and requests discussion and suggestions for improvements.</t>
            </abstract>
          </front>
          <seriesInfo name="BCP" value="14"/>
          <seriesInfo name="RFC" value="2119"/>
          <seriesInfo name="DOI" value="10.17487/RFC2119"/>
        </reference>
        <reference anchor="RFC8174">
          <front>
            <title>Ambiguity of Uppercase vs Lowercase in RFC 2119 Key Words</title>
            <author fullname="B. Leiba" initials="B." surname="Leiba"/>
            <date month="May" year="2017"/>
            <abstract>
              <t>RFC 2119 specifies common key words that may be used in protocol specifications. This document aims to reduce the ambiguity by clarifying that only UPPERCASE usage of the key words have the defined special meanings.</t>
            </abstract>
          </front>
          <seriesInfo name="BCP" value="14"/>
          <seriesInfo name="RFC" value="8174"/>
          <seriesInfo name="DOI" value="10.17487/RFC8174"/>
        </reference>
      </references>
      <references anchor="sec-informative-references">
        <name>Informative References</name>
        <reference anchor="DESIGN-FRAMEWORK">
          <front>
            <title>A design framework for Internet-scale event observation and notification</title>
            <author fullname="David S. Rosenblum" initials="D." surname="Rosenblum">
              <organization>Dept. of Info. &amp;amp; Computer Science, University of California, Irvine, Irvine, CA</organization>
            </author>
            <author fullname="Alexander L. Wolf" initials="A." surname="Wolf">
              <organization>Dept. of Computer Science, University of Colorado, Boulder, CO</organization>
            </author>
            <date month="November" year="1997"/>
          </front>
          <seriesInfo name="ACM SIGSOFT Software Engineering Notes" value="vol. 22, no. 6, pp. 344-360"/>
          <seriesInfo name="DOI" value="10.1145/267896.267920"/>
          <refcontent>Association for Computing Machinery (ACM)</refcontent>
        </reference>
        <reference anchor="FETCH" target="https://fetch.spec.whatwg.org">
          <front>
            <title>Fetch</title>
            <author fullname="Anne van Kesteren" initials="A." surname="van Kesteren">
              <organization/>
            </author>
            <date month="May" year="2025"/>
          </front>
          <seriesInfo name="WHATWG" value="Living Standard"/>
        </reference>
        <reference anchor="HTTP-CACHING">
          <front>
            <title>HTTP Caching</title>
            <author fullname="R. Fielding" initials="R." role="editor" surname="Fielding"/>
            <author fullname="M. Nottingham" initials="M." role="editor" surname="Nottingham"/>
            <author fullname="J. Reschke" initials="J." role="editor" surname="Reschke"/>
            <date month="June" year="2022"/>
            <abstract>
              <t>The Hypertext Transfer Protocol (HTTP) is a stateless application-level protocol for distributed, collaborative, hypertext information systems. This document defines HTTP caches and the associated header fields that control cache behavior or indicate cacheable response messages.</t>
              <t>This document obsoletes RFC 7234.</t>
            </abstract>
          </front>
          <seriesInfo name="STD" value="98"/>
          <seriesInfo name="RFC" value="9111"/>
          <seriesInfo name="DOI" value="10.17487/RFC9111"/>
        </reference>
        <reference anchor="REST" target="https://roy.gbiv.com/pubs/dissertation/rest_arch_style.htm">
          <front>
            <title>Representational State Transfer (REST)</title>
            <author fullname="Roy Thomas Fielding" initials="R." surname="Fielding">
              <organization>University of California, Irvine</organization>
            </author>
            <date/>
          </front>
          <seriesInfo name="Doctoral Dissertation" value="University of California, Irvine"/>
          <format target="https://roy.gbiv.com/pubs/dissertation/fielding_dissertation.pdf#G16.1026811" type="PDF"/>
          <refcontent>Chapter 5, Architectural Styles and the Design of Network-based Software Architectures</refcontent>
        </reference>
        <reference anchor="RFC3724">
          <front>
            <title>The Rise of the Middle and the Future of End-to-End: Reflections on the Evolution of the Internet Architecture</title>
            <author fullname="J. Kempf" initials="J." role="editor" surname="Kempf"/>
            <author fullname="R. Austein" initials="R." role="editor" surname="Austein"/>
            <author>
              <organization abbrev="IAB">Internet Architecture Board</organization>
            </author>
            <date month="March" year="2004"/>
            <abstract>
              <t>The end-to-end principle is the core architectural guideline of the Internet. In this document, we briefly examine the development of the end-to-end principle as it has been applied to the Internet architecture over the years. We discuss current trends in the evolution of the Internet architecture in relation to the end-to-end principle, and try to draw some conclusion about the evolution of the end-to-end principle, and thus for the Internet architecture which it supports, in light of these current trends. This memo provides information for the Internet community.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="3724"/>
          <seriesInfo name="DOI" value="10.17487/RFC3724"/>
        </reference>
        <reference anchor="RFC3935">
          <front>
            <title>A Mission Statement for the IETF</title>
            <author fullname="H. Alvestrand" initials="H." surname="Alvestrand"/>
            <date month="October" year="2004"/>
            <abstract>
              <t>This memo gives a mission statement for the IETF, tries to define the terms used in the statement sufficiently to make the mission statement understandable and useful, argues why the IETF needs a mission statement, and tries to capture some of the debate that led to this point. This document specifies an Internet Best Current Practices for the Internet Community, and requests discussion and suggestions for improvements.</t>
            </abstract>
          </front>
          <seriesInfo name="BCP" value="95"/>
          <seriesInfo name="RFC" value="3935"/>
          <seriesInfo name="DOI" value="10.17487/RFC3935"/>
        </reference>
        <reference anchor="RFC6202">
          <front>
            <title>Known Issues and Best Practices for the Use of Long Polling and Streaming in Bidirectional HTTP</title>
            <author fullname="S. Loreto" initials="S." surname="Loreto"/>
            <author fullname="P. Saint-Andre" initials="P." surname="Saint-Andre"/>
            <author fullname="S. Salsano" initials="S." surname="Salsano"/>
            <author fullname="G. Wilkins" initials="G." surname="Wilkins"/>
            <date month="April" year="2011"/>
            <abstract>
              <t>On today's Internet, the Hypertext Transfer Protocol (HTTP) is often used (some would say abused) to enable asynchronous, "server- initiated" communication from a server to a client as well as communication from a client to a server. This document describes known issues and best practices related to such "bidirectional HTTP" applications, focusing on the two most common mechanisms: HTTP long polling and HTTP streaming. This document is not an Internet Standards Track specification; it is published for informational purposes.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="6202"/>
          <seriesInfo name="DOI" value="10.17487/RFC6202"/>
        </reference>
        <reference anchor="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="RFC9112">
          <front>
            <title>HTTP/1.1</title>
            <author fullname="R. Fielding" initials="R." role="editor" surname="Fielding"/>
            <author fullname="M. Nottingham" initials="M." role="editor" surname="Nottingham"/>
            <author fullname="J. Reschke" initials="J." role="editor" surname="Reschke"/>
            <date month="June" year="2022"/>
            <abstract>
              <t>The Hypertext Transfer Protocol (HTTP) is a stateless application-level protocol for distributed, collaborative, hypertext information systems. This document specifies the HTTP/1.1 message syntax, message parsing, connection management, and related security concerns.</t>
              <t>This document obsoletes portions of RFC 7230.</t>
            </abstract>
          </front>
          <seriesInfo name="STD" value="99"/>
          <seriesInfo name="RFC" value="9112"/>
          <seriesInfo name="DOI" value="10.17487/RFC9112"/>
        </reference>
        <reference anchor="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="SSE" target="https://www.w3.org/TR/eventsource/">
          <front>
            <title>Server-Sent Events</title>
            <author/>
          </front>
          <seriesInfo name="W3C REC" value="eventsource"/>
          <seriesInfo name="W3C" value="eventsource"/>
        </reference>
        <reference anchor="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 695?>

<section anchor="example">
      <name>Example</name>
      <t anchor="example-description">The following example illustrates a complete request and response for representation and <iref item="event notification"/><iref item="notification"/><xref format="none" target="notification">notifications</xref> using Events Query. Chunks have been omitted for clarity.</t>
      <section anchor="example-request-representation-and-notifications">
        <name>Request</name>
        <figure anchor="notifications-stream-request-with-representation-example">
          <name>Request for Representation and Notifications</name>
          <sourcecode name="notifications-stream-request-with-representation.http" type="http-message"><![CDATA[
QUERY /foo HTTP/1.1
Host: example.org
Accept: application/http
Content-Type: example/event-request

state:
  Accept: text/html
events:
  Accept: example/event-response
]]></sourcecode>
        </figure>
      </section>
      <section anchor="example-response-representation-and-notifications">
        <name>Response</name>
        <figure anchor="notifications-stream-response-with-representation-example">
          <name>Response Stream with Representation and Notifications</name>
          <sourcecode name="notifications-stream-response-with-representation.http" type="http-message"><![CDATA[
HTTP/1.1 200 OK
Accept-Query: example/event-request
Content-Type: application/http
Transfer-Encoding: chunked
Incremental: ?1
Events: duration=600

HTTP/1.1 200 OK                                  | Representation
Content-Type: text/plain                         |
Content-Length: 14                               |
                                                 |
Hello World!                                     |

HTTP/1.1 200 OK                                  | Notification
Content-Type: example/event-response             |
Content-Length: 31                               |
                                                 |
Event-ID: 456                                    |
Type: Update                                     |

HTTP/1.1 200 OK                                  | Notification
Content-Type: example/event-response             |
Content-Length: 31                               |
                                                 |
Event-ID: 789                                    |
Type: Delete                                     |
]]></sourcecode>
        </figure>
      </section>
    </section>
    <section anchor="acknowledgments" numbered="false">
      <name>Acknowledgments</name>
      <t>We thank members of the HTTP Working Group, the Solid community, the Braid community and others for discussions, ideas, reviews, and feedback on previous work that has led to specification.</t>
    </section>
  </back>
  <!-- ##markdown-source:
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
1H0/ts5IxTe6axtV0BYxNxEV2ESUDQBsJSlvZA0ktsJyVIFKRD4PPOEmNXyG
S4bSeiPRumeoo69a65Zt8hTVtqFeLfWbuYY2p//8Gq9QvfPbP+Em6oDbb+e6
qCO86573W7kwdELNF3kwahVmNFCzJKe+e+qLnBq1ef03+TT+S3N67sceI4/u
f8qIposmZwwV/E6/R0ejvnbOAFgXxTd4yucIM7usAKmypklf23/TxUN4pc2t
jabdaWKwYxTzNA5Hy9yoeXsnlXDHMB5jWqXTJE3lpItiA2tns4NCZ+1smT/m
bJ42dhZYvIYxBMJ3C5NkIDwNo2Fam3raWGfZB+1cGqPahNEuKHneZ2RpR5gp
8ls2htvkixLHaHMrr5mFNsa4QCSNi6SdVfwP9Aj8GtU+pPLaDN2hP/coxHXl
/uDpRh16K1U7fOW1BHQWH/MinXy15StbM8n26OiGxzrYZJhT1T2KfzwdBr6x
QUSpu+NN5DSuUsxuAqxMcu31KKTunOclF5pi9qZgpDBMUqhS986jiGmiy6ZJ
e8RePy6DCRmiPtfG8zdP7Nt0zmHgeUummAOftDdQZG7b3oFzSC3VvNYgmrFS
JYCpbehIBu4GZ5CUHQoq6jTjqTOmj81G1iW49YxJO77TsR9TGWNVrrCcS/uA
7j8bwO9URnk6xsVW69MEvytkQfXnbh8ofQdDifaGyUQFUw7z9vxnvLdbjqgB
ffFn3QmCPWz6s+GLRhGmSq7tdFtuzwnLp37+XKmBp6HQELap8KC+Poy438SZ
nVDFvLvtw3TAZqLGlVJmK83Hn5p3eFba5Ao/zZ1oSjoHtnmIadDDwZy3aY9c
v+fTB9+Yb1sZ2LEb0WSSK538YrrDbAhf9P0+foU0LGGysejJnv1DCf7YyJGN
ftzXZCHtwS3w/oJ3TFWK6vK0+nIisyROsbMyJnomeApHWcZ4+PtIjmMjriVW
5ofHmhjtqiUHwOoUzt4DVpNk68CQNjELmKNc2OqsEfzfKpkAxdlz/Ub2gABu
2q/Vw0aAZWBzVfMKk0ltgVsfxopTYA6S+sUUkihDzrCmsb37plmd6xcJ9C+J
gbY9pmrdfkIocCceco+cHb07alJ+Emdxg6L53AY6DZdyDwvQ/zCIhpYUXxbu
slWLnJbIBZvmIwnoFjtnp5cvxW4i1exPeKY72j57InLYf5rBPCUfW3SJTpaX
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

-->

</rfc>
