<?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.6.17 (Ruby 3.0.2) -->
<?rfc docindent="yes"?>
<?rfc strict="yes"?>
<?rfc compact="yes"?>
<?rfc comments="yes"?>
<?rfc inline="yes"?>
<rfc xmlns:xi="http://www.w3.org/2001/XInclude" ipr="trust200902" docName="draft-ietf-quic-qlog-h3-events-14" category="std" consensus="true" tocInclude="true" sortRefs="true" symRefs="true" version="3">
  <!-- xml2rfc v2v3 conversion 3.14.2 -->
  <front>
    <title>HTTP/3 qlog event definitions</title>
    <seriesInfo name="Internet-Draft" value="draft-ietf-quic-qlog-h3-events-14"/>
    <author initials="R." surname="Marx" fullname="Robin Marx" role="editor">
      <organization>Akamai</organization>
      <address>
        <email>rmarx@akamai.com</email>
      </address>
    </author>
    <author initials="L." surname="Niccolini" fullname="Luca Niccolini" role="editor">
      <organization>Meta</organization>
      <address>
        <email>lniccolini@meta.com</email>
      </address>
    </author>
    <author initials="M." surname="Seemann" fullname="Marten Seemann" role="editor">
      <organization/>
      <address>
        <email>martenseemann@gmail.com</email>
      </address>
    </author>
    <author initials="L." surname="Pardue" fullname="Lucas Pardue" role="editor">
      <organization>Apple</organization>
      <address>
        <email>lucas@lucaspardue.com</email>
      </address>
    </author>
    <date year="2026" month="November" day="02"/>
    <area>Transport</area>
    <workgroup>QUIC</workgroup>
    <keyword>Internet-Draft</keyword>
    <abstract>
      <t>This document defines qlog event schemas containing concrete events for the core
HTTP/3 protocol and selected extensions. It also defines an http namespace for
the Capsule Protocol.</t>
    </abstract>
    <note>
      <name>Note to Readers</name>
      <ul empty="true">
        <li>
          <t>Note to RFC editor: Please remove this section before publication.</t>
        </li>
      </ul>
      <t>Feedback and discussion are welcome at
<eref target="https://github.com/quicwg/qlog">https://github.com/quicwg/qlog</eref>. Readers are
advised to refer to the "editor's draft" at that URL for an up-to-date version
of this document.</t>
    </note>
  </front>
  <middle>
    <section anchor="introduction">
      <name>Introduction</name>
      <t>This document defines a qlog event schema (<xref section="8" sectionFormat="of" target="QLOG-MAIN"/>)
containing concrete events for the core HTTP/3 protocol <xref target="RFC9114"/> and selected
extensions: Extended CONNECT (<xref target="EXTENDED-CONNECT"/>), PRIORITY_UPDATE
(<xref section="7" sectionFormat="of" target="PRIORITIZATION"/>), ORIGIN (<xref target="ORIGIN"/>), and
HTTP/3 Datagrams (<xref section="2.1" sectionFormat="of" target="DGRAM-AND-CAPSULE"/>). It also defines
a schema for the HTTP Capsule Protocol (<xref section="3" sectionFormat="of" target="DGRAM-AND-CAPSULE"/>).</t>
      <t>This document defines two event namespaces: <tt>http3</tt> (<xref target="schema-def"/>) and
<tt>http</tt> (<xref target="http-schema-def"/>). In each namespace, multiple events derive from
the qlog abstract Event class (<xref section="7" sectionFormat="of" target="QLOG-MAIN"/>), each extending the
<tt>data</tt> field and defining their <tt>name</tt> field values and semantics.</t>
      <t><xref target="h3-events"/> summarizes the name value of each event type in the <tt>http3</tt>
namespace. The data types that the events use are defined in <xref target="h3-data-types"/>
and <xref target="http-data-types"/>.</t>
      <table anchor="h3-events">
        <name>HTTP/3 Events</name>
        <thead>
          <tr>
            <th align="left">Name value</th>
            <th align="left">Importance</th>
            <th align="left">Definition</th>
          </tr>
        </thead>
        <tbody>
          <tr>
            <td align="left">http3:parameters_set</td>
            <td align="left">Base</td>
            <td align="left">
              <xref target="h3-parametersset"/></td>
          </tr>
          <tr>
            <td align="left">http3:parameters_restored</td>
            <td align="left">Base</td>
            <td align="left">
              <xref target="h3-parametersrestored"/></td>
          </tr>
          <tr>
            <td align="left">http3:stream_type_set</td>
            <td align="left">Base</td>
            <td align="left">
              <xref target="h3-streamtypeset"/></td>
          </tr>
          <tr>
            <td align="left">http3:priority_updated</td>
            <td align="left">Base</td>
            <td align="left">
              <xref target="h3-priorityupdated"/></td>
          </tr>
          <tr>
            <td align="left">http3:frame_created</td>
            <td align="left">Core</td>
            <td align="left">
              <xref target="h3-framecreated"/></td>
          </tr>
          <tr>
            <td align="left">http3:frame_parsed</td>
            <td align="left">Core</td>
            <td align="left">
              <xref target="h3-frameparsed"/></td>
          </tr>
          <tr>
            <td align="left">http3:datagram_created</td>
            <td align="left">Base</td>
            <td align="left">
              <xref target="h3-datagramcreated"/></td>
          </tr>
          <tr>
            <td align="left">http3:datagram_parsed</td>
            <td align="left">Base</td>
            <td align="left">
              <xref target="h3-datagramparsed"/></td>
          </tr>
          <tr>
            <td align="left">http3:push_resolved</td>
            <td align="left">Extra</td>
            <td align="left">
              <xref target="h3-pushresolved"/></td>
          </tr>
        </tbody>
      </table>
      <t><xref target="http-events"/> summarizes the name value of each event type in the <tt>http</tt>
namespace.</t>
      <table anchor="http-events">
        <name>HTTP Events</name>
        <thead>
          <tr>
            <th align="left">Name value</th>
            <th align="left">Importance</th>
            <th align="left">Definition</th>
          </tr>
        </thead>
        <tbody>
          <tr>
            <td align="left">http:capsule_created</td>
            <td align="left">Core</td>
            <td align="left">
              <xref target="http-capsulecreated"/></td>
          </tr>
          <tr>
            <td align="left">http:capsule_parsed</td>
            <td align="left">Core</td>
            <td align="left">
              <xref target="http-capsuleparsed"/></td>
          </tr>
        </tbody>
      </table>
      <section anchor="usage-with-quic">
        <name>Usage with QUIC</name>
        <t>The events described in this document can be used with or without logging the
related QUIC events defined in <xref target="QLOG-QUIC"/>. When they are logged together,
the guidance in <xref target="QLOG-QUIC"/> on group IDs, file names, and events without a
known connection applies.</t>
        <t>When they are logged without QUIC events, an implementation can assign a
unique identifier to each HTTP/3 connection and use it as the value of the
qlog <tt>group_id</tt> field; see <xref section="7.3" sectionFormat="of" target="QLOG-MAIN"/>. The identifier can
also be used as the qlog filename or file identifier, optionally suffixed by
the vantage point type. For example, abcd1234_server.qlog would contain the
server-side trace of the connection with identifier abcd1234.</t>
      </section>
      <section anchor="notational-conventions">
        <name>Notational Conventions</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>
        <t>The event and data structure definitions in this document are expressed
in the Concise Data Definition Language <xref target="CDDL"/> and its
extensions described in <xref section="1.2" sectionFormat="of" target="QLOG-MAIN"/>.</t>
        <t>This document uses the following from <xref target="QLOG-MAIN"/>: the event namespace and
event type concepts; the name, data, group_id, and time-related fields; and the
RawInfo type.</t>
        <t>Events are defined with an importance level as described in <xref section="8.3" sectionFormat="of" target="QLOG-MAIN"/>.</t>
        <t>As is the case for <xref target="QLOG-MAIN"/>, the qlog schema definitions in this document
are intentionally agnostic to serialization formats. The choice of format is an
implementation decision.</t>
      </section>
    </section>
    <section anchor="schema-def">
      <name>HTTP/3 Event Schema Definition</name>
      <t>This document describes how the core HTTP/3 protocol and selected extensions can
be expressed in qlog using a newly defined event schema. Per the requirements in
<xref section="8" sectionFormat="of" target="QLOG-MAIN"/>, this document registers the <tt>http3</tt> namespace. The
event schema URI is <tt>urn:ietf:params:qlog:events:http3</tt>.</t>
      <section removeInRFC="true" anchor="draft-event-schema-identification">
        <name>Draft Event Schema Identification</name>
        <t>Only implementations of the final, published RFC can use the events belonging to
the event schema with the URI <tt>urn:ietf:params:qlog:events:http3</tt>. Until such an
RFC exists, implementations <bcp14>MUST NOT</bcp14> identify themselves using this URI.</t>
        <t>Implementations of draft versions of the event schema <bcp14>MUST</bcp14> append the string
"-" and the corresponding draft number to the URI. For example, draft 07 of this
document is identified using the URI <tt>urn:ietf:params:qlog:events:http3-07</tt>.</t>
        <t>The namespace identifier itself is not affected by this requirement.</t>
      </section>
    </section>
    <section anchor="h3-ev">
      <name>HTTP/3 Events</name>
      <t>HTTP/3 events extend the <tt>$ProtocolEventData</tt> extension point defined in
<xref section="8.2" sectionFormat="of" target="QLOG-MAIN"/>. Additionally, they allow for direct extensibility by their use of
per-event extension points via the <tt>$$</tt> CDDL "group socket" syntax, as also
described in <xref section="8.2" sectionFormat="of" target="QLOG-MAIN"/>.</t>
      <figure anchor="h3-events-def">
        <name>HTTP3EventData definition and ProtocolEventData extension</name>
        <sourcecode type="cddl"><![CDATA[
HTTP3EventData = HTTP3ParametersSet /
              HTTP3ParametersRestored /
              HTTP3StreamTypeSet /
              HTTP3PriorityUpdated /
              HTTP3FrameCreated /
              HTTP3FrameParsed /
              HTTP3DatagramCreated /
              HTTP3DatagramParsed /
              HTTP3PushResolved

$ProtocolEventData /= HTTP3EventData
]]></sourcecode>
      </figure>
      <t>HTTP/3 events describe what happens at the HTTP/3 layer, and they don't always
map one-to-one to QUIC events. Data exchanged between the HTTP/3 and QUIC
layers is logged with the <tt>stream_data_moved</tt> and <tt>datagram_data_moved</tt> events
in <xref target="QLOG-QUIC"/>.</t>
      <t>HTTP/3 frames are transmitted on QUIC streams, which allows them to span
multiple QUIC packets. Some implementations might send a single large frame,
rather than a sequence of smaller frames, in order to amortize frame header
overhead. HTTP/3 frame headers are represented by the <tt>frame_created</tt>
(<xref target="h3-framecreated"/>) and <tt>frame_parsed</tt> (<xref target="h3-frameparsed"/>) events.
Subsequent frame payload data transfer is indicated by <tt>stream_data_moved</tt>
events. Furthermore, <tt>stream_data_moved</tt> events can appear before
<tt>frame_parsed</tt> events because implementations need to read data from a stream
in order to parse the frame header.</t>
      <t>The concrete HTTP/3 event types are further defined below, their type identifier
is the heading name.</t>
      <section anchor="h3-parametersset">
        <name>parameters_set</name>
        <t>The <tt>parameters_set</tt> event contains HTTP/3 and QPACK-level settings, mostly
those received from the HTTP/3 SETTINGS frame. It has Base importance level.</t>
        <t>All these parameters are typically set once and never change. However, they
might be set at different times during the connection, so a trace can contain
multiple instances of <tt>parameters_set</tt> with different fields set.</t>
        <t>The <tt>initiator</tt> field is "local" for settings that this endpoint sent, and
"remote" for settings that it received.
The <tt>initiator</tt> field is required.</t>
        <figure anchor="h3-parametersset-def">
          <name>HTTP3ParametersSet definition</name>
          <sourcecode type="cddl"><![CDATA[
HTTP3ParametersSet = {
    initiator: Initiator

    ; RFC9114
    ? max_field_section_size: uint64

    ; RFC9204
    ? max_table_capacity: uint64
    ? blocked_streams_count: uint64

    ; RFC9220 (SETTINGS_ENABLE_CONNECT_PROTOCOL)
    ? extended_connect: uint64

    ; RFC9297 (SETTINGS_H3_DATAGRAM)
    ? h3_datagram: uint64

    ; qlog-specific
    ; indicates whether this implementation waits for a SETTINGS
    ; frame before processing requests
    ? waits_for_settings: bool

    ; settings that this implementation does not recognize, including
    ; reserved (GREASE) settings
    ? unknown_settings: [* HTTP3Setting]

    * $$http3-parametersset-extension
}
]]></sourcecode>
        </figure>
        <t>The <tt>unknown_settings</tt> field can log settings that the implementation does not
recognize, including reserved settings (<xref section="7.2.4.1" sectionFormat="of" target="RFC9114"/>). Each
entry's <tt>name</tt> is "unknown" or "reserved", and <tt>name_bytes</tt> holds the setting
identifier. Settings defined by extensions can instead be added through
<tt>$$http3-parametersset-extension</tt>.</t>
      </section>
      <section anchor="h3-parametersrestored">
        <name>parameters_restored</name>
        <t>The <tt>parameters_restored</tt> event indicates which of the server's settings a
client restored from a previous connection to use for 0-RTT, and their values;
see <xref section="7.2.4.2" sectionFormat="of" target="RFC9114"/>. It has Base importance level.</t>
        <t>When the server's SETTINGS frame arrives, the settings it carries can be logged
with the <tt>parameters_set</tt> event (<xref target="h3-parametersset"/>).</t>
        <figure anchor="h3-parametersrestored-def">
          <name>HTTP3ParametersRestored definition</name>
          <sourcecode type="cddl"><![CDATA[
HTTP3ParametersRestored = {
    ; RFC9114
    ? max_field_section_size: uint64

    ; RFC9204
    ? max_table_capacity: uint64
    ? blocked_streams_count: uint64

    ; RFC9220 (SETTINGS_ENABLE_CONNECT_PROTOCOL)
    ? extended_connect: uint64

    ; RFC9297 (SETTINGS_H3_DATAGRAM)
    ? h3_datagram: uint64

    * $$http3-parametersrestored-extension
}
]]></sourcecode>
        </figure>
      </section>
      <section anchor="h3-streamtypeset">
        <name>stream_type_set</name>
        <t>The <tt>stream_type_set</tt> event is emitted when the type of an HTTP/3 stream becomes
known; see Sections <xref target="RFC9114" section="6.1" sectionFormat="bare"/> and <xref target="RFC9114" section="6.2" sectionFormat="bare"/> of <xref target="RFC9114"/>. It has Base importance level.</t>
        <t>Client bidirectional streams always have a stream_type value of "request".
Server bidirectional streams have no defined use, although extensions could
change that.</t>
        <t>Unidirectional streams in either direction begin with a variable-length
integer type. If the type has no known string, <tt>stream_type</tt> can be "unknown";
for a reserved type (<xref section="6.2.3" sectionFormat="of" target="RFC9114"/>), it can be "reserved". In
both cases, <tt>stream_type_bytes</tt> then holds the numerical value without
variable-length integer encoding.</t>
        <t>The generic <tt>$HTTP3StreamType</tt> is defined here as a CDDL "type socket" extension
point. It can be extended to support additional HTTP/3 stream types.</t>
        <figure anchor="h3-streamtypeset-def">
          <name>HTTP3StreamTypeSet definition</name>
          <sourcecode type="cddl"><![CDATA[
HTTP3StreamTypeSet = {
    ? initiator: Initiator
    stream_id: uint64
    stream_type: $HTTP3StreamType

    ; only when stream_type === "unknown" or "reserved"
    ? stream_type_bytes: uint64

    ; only when stream_type === "push"
    ? associated_push_id: uint64

    * $$http3-streamtypeset-extension
}

$HTTP3StreamType /=   "request" /
                      "control" /
                      "push" /
                      "reserved" /
                      "unknown" /
                      "qpack_encode" /
                      "qpack_decode"
]]></sourcecode>
        </figure>
      </section>
      <section anchor="h3-priorityupdated">
        <name>priority_updated</name>
        <t>The <tt>priority_updated</tt> event is emitted when the priority of a request stream or
push stream is initialized or updated through mechanisms defined in
<xref target="PRIORITIZATION"/>. It has Base importance level.</t>
        <t>There can be several reasons why a <tt>priority_updated</tt> event occurs, and why a
particular value was chosen. For example, the priority can follow signals from
the client or server (see <xref target="PRIORITIZATION"/>), or local policy can change or
override it. The <tt>trigger</tt> and <tt>reason</tt> fields can capture these details.</t>
        <figure anchor="h3-priorityupdated-def">
          <name>HTTP3PriorityUpdated definition</name>
          <sourcecode type="cddl"><![CDATA[
HTTP3PriorityUpdated = {
    ; if the prioritized element is a request stream
    ? stream_id: uint64

    ; if the prioritized element is a push stream
    ? push_id: uint64

    ? old: HTTP3Priority
    new: HTTP3Priority

    ? trigger: "client_signal_received" /
                "local" /
                "other"

    ? reason: "client_signal_only" /
               "client_server_merged" /
               "local_policy" /
               "other"

    * $$http3-priorityupdated-extension
}
]]></sourcecode>
        </figure>
      </section>
      <section anchor="h3-framecreated">
        <name>frame_created</name>
        <t>The <tt>frame_created</tt> event is emitted when an HTTP/3 frame is created. It has
Core importance level.</t>
        <t>This event does not necessarily coincide with HTTP/3 data being passed to the
QUIC layer. For that, see the <tt>stream_data_moved</tt> event in <xref target="QLOG-QUIC"/>.</t>
        <figure anchor="h3-framecreated-def">
          <name>HTTP3FrameCreated definition</name>
          <sourcecode type="cddl"><![CDATA[
HTTP3FrameCreated = {
    stream_id: uint64
    frame: $HTTP3Frame

    * $$http3-framecreated-extension
}
]]></sourcecode>
        </figure>
      </section>
      <section anchor="h3-frameparsed">
        <name>frame_parsed</name>
        <t>The <tt>frame_parsed</tt> event is emitted when an HTTP/3 frame is parsed. It has Core
importance level.</t>
        <t>This event does not necessarily coincide with HTTP/3 data being passed from the
QUIC layer. For that, see the <tt>stream_data_moved</tt> event in <xref target="QLOG-QUIC"/>.</t>
        <figure anchor="h3-frameparsed-def">
          <name>HTTP3FrameParsed definition</name>
          <sourcecode type="cddl"><![CDATA[
HTTP3FrameParsed = {
    stream_id: uint64
    frame: $HTTP3Frame

    * $$http3-frameparsed-extension
}
]]></sourcecode>
        </figure>
      </section>
      <section anchor="h3-datagramcreated">
        <name>datagram_created</name>
        <t>The <tt>datagram_created</tt> event is emitted when an HTTP/3 Datagram (<xref section="2.1" sectionFormat="of" target="DGRAM-AND-CAPSULE"/>) is created. It has Base importance level.</t>
        <t>Beyond the Quarter Stream ID field, the remaining contents of HTTP Datagrams are
defined by the protocol that uses them. The <tt>datagram_created</tt> event can be
extended through the <tt>$$http3-datagramcreated-extension</tt> socket to log that
information.</t>
        <t>This event does not necessarily coincide with the HTTP/3 Datagram being passed
to the QUIC layer. For that, see the <tt>datagram_data_moved</tt> event in
<xref target="QLOG-QUIC"/>.</t>
        <figure anchor="h3-datagramcreated-def">
          <name>HTTP3DatagramCreated definition</name>
          <sourcecode type="cddl"><![CDATA[
HTTP3DatagramCreated = {
    quarter_stream_id: uint64
    ? raw: RawInfo

    * $$http3-datagramcreated-extension
}
]]></sourcecode>
        </figure>
      </section>
      <section anchor="h3-datagramparsed">
        <name>datagram_parsed</name>
        <t>The <tt>datagram_parsed</tt> event is emitted when an HTTP/3 Datagram (<xref section="2.1" sectionFormat="of" target="DGRAM-AND-CAPSULE"/>) is parsed. It has Base importance level.</t>
        <t>Beyond the Quarter Stream ID field, the remaining contents of HTTP Datagrams are
defined by the protocol that uses them. The <tt>datagram_parsed</tt> event can be
extended through the <tt>$$http3-datagramparsed-extension</tt> socket to log that
information.</t>
        <t>This event does not necessarily coincide with the HTTP/3 Datagram being passed
from the QUIC layer. For that, see the <tt>datagram_data_moved</tt> event in
<xref target="QLOG-QUIC"/>.</t>
        <figure anchor="h3-datagramparsed-def">
          <name>HTTP3DatagramParsed definition</name>
          <sourcecode type="cddl"><![CDATA[
HTTP3DatagramParsed = {
    quarter_stream_id: uint64
    ? raw: RawInfo

    * $$http3-datagramparsed-extension
}
]]></sourcecode>
        </figure>
      </section>
      <section anchor="h3-pushresolved">
        <name>push_resolved</name>
        <t>The <tt>push_resolved</tt> event is emitted when a resource sent with server push
(<xref section="4.6" sectionFormat="of" target="RFC9114"/>) is claimed (used) or abandoned (rejected) by the
application on top of HTTP/3, such as a web browser. It has Extra importance
level.</t>
        <figure anchor="h3-pushresolved-def">
          <name>HTTP3PushResolved definition</name>
          <sourcecode type="cddl"><![CDATA[
HTTP3PushResolved = {
    ? push_id: uint64

    ; in case this is logged from a place that does not have access
    ; to the push_id
    ? stream_id: uint64
    decision: HTTP3PushDecision

    * $$http3-pushresolved-extension
}

HTTP3PushDecision = "claimed" /
                 "abandoned"
]]></sourcecode>
        </figure>
      </section>
    </section>
    <section anchor="h3-data-types">
      <name>HTTP/3 Data Type Definitions</name>
      <t>The following data type definitions can be used in HTTP/3 events.</t>
      <section anchor="initiator">
        <name>Initiator</name>
        <figure anchor="initiator-def">
          <name>Initiator definition</name>
          <sourcecode type="cddl"><![CDATA[
Initiator = "local" /
            "remote"
]]></sourcecode>
        </figure>
      </section>
      <section anchor="http3frame">
        <name>HTTP3Frame</name>
        <t>The generic <tt>$HTTP3Frame</tt> is defined here as a CDDL "type socket" extension point.
It can be extended to support additional HTTP/3 frame types.</t>
        <figure anchor="h3-frame-def">
          <name>HTTP3Frame type socket definition</name>
          <artwork><![CDATA[
; The HTTP3Frame is any key-value map (e.g., JSON object)
$HTTP3Frame /= {
    * text => any
}
]]></artwork>
        </figure>
        <t>The HTTP/3 frame types defined in this document are as follows:</t>
        <figure anchor="h3baseframe-def">
          <name>HTTP3BaseFrames and HTTP3ExtensionFrames definition</name>
          <sourcecode type="cddl"><![CDATA[
HTTP3BaseFrames = HTTP3DataFrame /
                  HTTP3HeadersFrame /
                  HTTP3CancelPushFrame /
                  HTTP3SettingsFrame /
                  HTTP3PushPromiseFrame /
                  HTTP3GoawayFrame /
                  HTTP3MaxPushIDFrame /
                  HTTP3ReservedFrame /
                  HTTP3UnknownFrame

HTTP3ExtensionFrames = HTTP3PriorityUpdateFrame /
                       HTTP3OriginFrame

$HTTP3Frame /= HTTP3BaseFrames / HTTP3ExtensionFrames
]]></sourcecode>
        </figure>
        <section anchor="http3dataframe">
          <name>HTTP3DataFrame</name>
          <figure anchor="h3dataframe-def">
            <name>HTTP3DataFrame definition</name>
            <sourcecode type="cddl"><![CDATA[
HTTP3DataFrame = {
    frame_type: "data"
    ? raw: RawInfo
}
]]></sourcecode>
          </figure>
        </section>
        <section anchor="http3headersframe">
          <name>HTTP3HeadersFrame</name>
          <t>The payload of an HTTP/3 HEADERS frame is the QPACK-encoding of an HTTP field
section; see <xref section="7.2.2" sectionFormat="of" target="RFC9114"/>. <tt>HTTP3HeadersFrame</tt>, in contrast,
contains the HTTP field section without QPACK encoding.</t>
          <figure anchor="h3field-def">
            <name>HTTP3HTTPField definition</name>
            <sourcecode type="cddl"><![CDATA[
HTTP3HTTPField = {
    ? name: text
    ? name_bytes: hexstring
    ? value: text
    ? value_bytes: hexstring
}
]]></sourcecode>
          </figure>
          <figure anchor="h3-headersframe-def">
            <name>HTTP3HeadersFrame definition</name>
            <sourcecode type="cddl"><![CDATA[
HTTP3HeadersFrame = {
    frame_type: "headers"
    headers: [* HTTP3HTTPField]
    ? raw: RawInfo
}
]]></sourcecode>
          </figure>
          <t>For example, the HTTP field section</t>
          <artwork><![CDATA[
:path: /index.html
:method: GET
:authority: example.org
:scheme: https
]]></artwork>
          <t>would be represented in a JSON serialization as:</t>
          <figure anchor="h3-headersframe-ex">
            <name>HTTP3HeadersFrame example</name>
            <artwork><![CDATA[
"headers": [
  {
    "name": ":path",
    "value": "/index.html"
  },
  {
    "name": ":method",
    "value": "GET"
  },
  {
    "name": ":authority",
    "value": "example.org"
  },
  {
    "name": ":scheme",
    "value": "https"
  }
]
]]></artwork>
          </figure>
          <t><xref section="4.2" sectionFormat="of" target="RFC9114"/> and <xref section="5.1" sectionFormat="of" target="RFC9110"/> define rules for the
characters used in HTTP field section names and values. Characters outside the
range are invalid and result in the message being treated as malformed. It can
however be useful to also log these invalid HTTP fields. Characters in the
allowed range can be safely logged by the text type used in the <tt>name</tt> and
<tt>value</tt> fields of <tt>HTTP3HTTPField</tt>. Characters outside the range are unsafe for the
text type and need to be logged using the <tt>name_bytes</tt> and <tt>value_bytes</tt> fields.
An instance of <tt>HTTP3HTTPField</tt> <bcp14>MUST</bcp14> include either the <tt>name</tt> or <tt>name_bytes</tt>
field and <bcp14>MAY</bcp14> include both. An <tt>HTTP3HTTPField</tt> <bcp14>MAY</bcp14> include a <tt>value</tt> or
<tt>value_bytes</tt> field or neither.</t>
        </section>
        <section anchor="http3cancelpushframe">
          <name>HTTP3CancelPushFrame</name>
          <figure anchor="h3-cancelpushframe-def">
            <name>HTTP3CancelPushFrame definition</name>
            <sourcecode type="cddl"><![CDATA[
HTTP3CancelPushFrame = {
    frame_type: "cancel_push"
    push_id: uint64
    ? raw: RawInfo
}
]]></sourcecode>
          </figure>
        </section>
        <section anchor="http3settingsframe">
          <name>HTTP3SettingsFrame</name>
          <t>The settings field can contain zero or more entries. Each setting has a name
field, which corresponds to Setting Name as defined (or as would be defined if
registered) in the "HTTP/3 Settings" registry maintained at
<eref target="https://www.iana.org/assignments/http3-parameters">https://www.iana.org/assignments/http3-parameters</eref>.</t>
          <t>If a setting has no known name, <tt>name</tt> can be "unknown"; for a reserved
setting, it can be "reserved". In both cases, <tt>name_bytes</tt> then holds the
numerical value without variable-length integer encoding.</t>
          <figure anchor="h3settingsframe-def">
            <name>HTTP3SettingsFrame definition</name>
            <sourcecode type="cddl"><![CDATA[
HTTP3SettingsFrame = {
    frame_type: "settings"
    settings: [* HTTP3Setting]
    ? raw: RawInfo
}

HTTP3Setting = {
    ? name: $HTTP3SettingsName
    ; only when name === "unknown" or "reserved"
    ? name_bytes: uint64

    value: uint64
}

$HTTP3SettingsName /= "settings_qpack_max_table_capacity" /
                   "settings_max_field_section_size" /
                   "settings_qpack_blocked_streams" /
                   "settings_enable_connect_protocol" /
                   "settings_h3_datagram" /
                   "reserved" /
                   "unknown"
]]></sourcecode>
          </figure>
        </section>
        <section anchor="http3pushpromiseframe">
          <name>HTTP3PushPromiseFrame</name>
          <figure anchor="h3pushpromiseframe-def">
            <name>HTTP3PushPromiseFrame definition</name>
            <sourcecode type="cddl"><![CDATA[
HTTP3PushPromiseFrame = {
    frame_type: "push_promise"
    push_id: uint64
    headers: [* HTTP3HTTPField]
    ? raw: RawInfo
}
]]></sourcecode>
          </figure>
        </section>
        <section anchor="http3goawayframe">
          <name>HTTP3GoawayFrame</name>
          <figure anchor="h3goawayframe-def">
            <name>HTTP3GoawayFrame definition</name>
            <sourcecode type="cddl"><![CDATA[
HTTP3GoawayFrame = {
    frame_type: "goaway"

    ; Either stream_id or push_id.
    ; This is implicit from the sender of the frame
    id: uint64
    ? raw: RawInfo
}
]]></sourcecode>
          </figure>
        </section>
        <section anchor="http3maxpushidframe">
          <name>HTTP3MaxPushIDFrame</name>
          <figure anchor="h3maxpushidframe-def">
            <name>HTTP3MaxPushIDFrame definition</name>
            <sourcecode type="cddl"><![CDATA[
HTTP3MaxPushIDFrame = {
    frame_type: "max_push_id"
    push_id: uint64
    ? raw: RawInfo
}
]]></sourcecode>
          </figure>
        </section>
        <section anchor="http3reservedframe">
          <name>HTTP3ReservedFrame</name>
          <t>The <tt>frame_type_bytes</tt> field holds the numerical value of the frame type
without variable-length integer encoding.</t>
          <figure anchor="h3reservedframe-def">
            <name>HTTP3ReservedFrame definition</name>
            <sourcecode type="cddl"><![CDATA[
HTTP3ReservedFrame = {
    frame_type: "reserved"
    frame_type_bytes: uint64
    ? raw: RawInfo
}
]]></sourcecode>
          </figure>
        </section>
        <section anchor="http3unknownframe">
          <name>HTTP3UnknownFrame</name>
          <t>The <tt>frame_type_bytes</tt> field holds the numerical value of the frame type
without variable-length integer encoding.</t>
          <figure anchor="h3unknownframe-def">
            <name>HTTP3UnknownFrame definition</name>
            <sourcecode type="cddl"><![CDATA[
HTTP3UnknownFrame = {
    frame_type: "unknown"
    frame_type_bytes: uint64
    ? raw: RawInfo
}
]]></sourcecode>
          </figure>
        </section>
        <section anchor="http3priorityupdateframe">
          <name>HTTP3PriorityUpdateFrame</name>
          <t>The PRIORITY_UPDATE frame is defined in <xref section="7" sectionFormat="of" target="PRIORITIZATION"/>.</t>
          <figure anchor="h3priorityupdateframe-def">
            <name>HTTP3PriorityUpdateFrame definition</name>
            <sourcecode type="cddl"><![CDATA[
HTTP3PriorityUpdateFrame = {
    frame_type: "priority_update"

    ; if the prioritized element is a request stream
    ? stream_id: uint64

    ; if the prioritized element is a push stream
    ? push_id: uint64

    priority_field_value: HTTP3Priority
    ? raw: RawInfo
}

; The priority value in ASCII text, encoded using Structured Fields
; Example: u=5, i
HTTP3Priority = text
]]></sourcecode>
          </figure>
        </section>
        <section anchor="http3originframe">
          <name>HTTP3OriginFrame</name>
          <t>The ORIGIN frame is defined in <xref section="2" sectionFormat="of" target="ORIGIN"/>.</t>
          <figure anchor="h3originframe-def">
            <name>HTTP3OriginFrame definition</name>
            <sourcecode type="cddl"><![CDATA[
HTTP3OriginEntry = {
  origin_len: uint16
  ? ascii_origin: text
}

HTTP3OriginFrame = {
  frame_type: "origin"

  origin_entries: [* HTTP3OriginEntry]
  ? raw: RawInfo
}
]]></sourcecode>
          </figure>
        </section>
      </section>
      <section anchor="http3applicationerror">
        <name>HTTP3ApplicationError</name>
        <figure anchor="h3-applicationerror-def">
          <name>HTTP3ApplicationError definition</name>
          <sourcecode type="cddl"><![CDATA[
HTTP3ApplicationError = "http_no_error" /
                       "http_general_protocol_error" /
                       "http_internal_error" /
                       "http_stream_creation_error" /
                       "http_closed_critical_stream" /
                       "http_frame_unexpected" /
                       "http_frame_error" /
                       "http_excessive_load" /
                       "http_id_error" /
                       "http_settings_error" /
                       "http_missing_settings" /
                       "http_request_rejected" /
                       "http_request_cancelled" /
                       "http_request_incomplete" /
                       "http_message_error" /
                       "http_connect_error" /
                       "http_version_fallback" /
                       ; RFC9204
                       "qpack_decompression_failed" /
                       "qpack_encoder_stream_error" /
                       "qpack_decoder_stream_error" /
                       ; RFC9297
                       "http_datagram_error"
]]></sourcecode>
        </figure>
        <t>HTTP3ApplicationError extends the <tt>$ApplicationError</tt> type socket defined in
<xref target="QLOG-QUIC"/>.</t>
        <sourcecode type="cddl"><![CDATA[
; ensure HTTP errors are properly validated in QUIC events as well
; e.g., QUIC's ConnectionClose Frame
$ApplicationError /= HTTP3ApplicationError
]]></sourcecode>
      </section>
    </section>
    <section anchor="http-schema-def">
      <name>HTTP Event Schema Definition</name>
      <t>This document describes how the Capsule Protocol can be expressed in qlog using
a newly defined event schema. Per the requirements in <xref section="8" sectionFormat="of" target="QLOG-MAIN"/>, this document registers the <tt>http</tt> namespace. The event schema URI
is <tt>urn:ietf:params:qlog:events:http</tt>.</t>
      <section removeInRFC="true" anchor="draft-event-schema-identification-1">
        <name>Draft Event Schema Identification</name>
        <t>Only implementations of the final, published RFC can use the events belonging to
the event schema with the URI <tt>urn:ietf:params:qlog:events:http</tt>. Until such an
RFC exists, implementations <bcp14>MUST NOT</bcp14> identify themselves using this URI.</t>
        <t>Implementations of draft versions of the event schema <bcp14>MUST</bcp14> append the string "-"
and the corresponding draft number to the URI. For example, draft 07 of this
document is identified using the URI <tt>urn:ietf:params:qlog:events:http-07</tt>.</t>
        <t>The namespace identifier itself is not affected by this requirement.</t>
      </section>
    </section>
    <section anchor="http-ev">
      <name>HTTP Events</name>
      <t>HTTP events extend the <tt>$ProtocolEventData</tt> extension point defined in
<xref section="8.2" sectionFormat="of" target="QLOG-MAIN"/>. Additionally, they allow for direct extensibility by their use of
per-event extension points via the <tt>$$</tt> CDDL "group socket" syntax, as also
described in <xref section="8.2" sectionFormat="of" target="QLOG-MAIN"/>.</t>
      <figure anchor="http-events-def">
        <name>HTTPEventData definition and ProtocolEventData extension</name>
        <sourcecode type="cddl"><![CDATA[
HTTPEventData = HTTPCapsuleCreated /
                HTTPCapsuleParsed

$ProtocolEventData /= HTTPEventData
]]></sourcecode>
      </figure>
      <t>The concrete HTTP event types are further defined below, their type identifier
is the heading name.</t>
      <section anchor="http-capsulecreated">
        <name>capsule_created</name>
        <t>The <tt>capsule_created</tt> event is emitted when a Capsule is created (see
<xref section="3" sectionFormat="of" target="DGRAM-AND-CAPSULE"/>). It has Core importance level.</t>
        <t>This event does not necessarily coincide with data being passed to the
transport layer. In HTTP/3, capsules are sent inside DATA frames, so the
<tt>frame_created</tt> event can be logged separately.</t>
        <figure anchor="http-capsulecreated-def">
          <name>HTTPCapsuleCreated definition</name>
          <sourcecode type="cddl"><![CDATA[
HTTPCapsuleCreated = {
    stream_id: uint64

    capsule: $HTTPCapsule

    * $$http-capsulecreated-extension
}
]]></sourcecode>
        </figure>
      </section>
      <section anchor="http-capsuleparsed">
        <name>capsule_parsed</name>
        <t>The <tt>capsule_parsed</tt> event is emitted when a Capsule is parsed (see
<xref section="3" sectionFormat="of" target="DGRAM-AND-CAPSULE"/>). It has Core importance level.</t>
        <t>This event does not necessarily coincide with data being passed from the
transport layer. In HTTP/3, capsules are received inside DATA frames, so the
<tt>frame_parsed</tt> event can be logged separately.</t>
        <figure anchor="http-capsuleparsed-def">
          <name>HTTPCapsuleParsed definition</name>
          <sourcecode type="cddl"><![CDATA[
HTTPCapsuleParsed = {
    stream_id: uint64

    capsule: $HTTPCapsule

    * $$http-capsuleparsed-extension
}
]]></sourcecode>
        </figure>
      </section>
    </section>
    <section anchor="http-data-types">
      <name>HTTP Data Type Definitions</name>
      <t>The following data type definitions can be used in HTTP events.</t>
      <section anchor="httpcapsule">
        <name>HTTPCapsule</name>
        <t>The generic <tt>$HTTPCapsule</tt> is defined here as a CDDL "type socket" extension
point. It can be extended to support additional capsule types.</t>
        <figure anchor="http-capsule-def">
          <name>HTTPCapsule type socket definition</name>
          <artwork><![CDATA[
; The HTTPCapsule is any key-value map (e.g., JSON object)
$HTTPCapsule /= {
    * text => any
}
]]></artwork>
        </figure>
        <t>The capsule types defined in this document are as follows:</t>
        <figure anchor="httpbasecapsule-def">
          <name>HTTPBaseCapsules definition</name>
          <sourcecode type="cddl"><![CDATA[
HTTPBaseCapsules = HTTPCapsuleDatagram /
                   HTTPCapsuleUnknown

$HTTPCapsule /= HTTPBaseCapsules
]]></sourcecode>
        </figure>
        <section anchor="httpcapsuledatagram">
          <name>HTTPCapsuleDatagram</name>
          <figure anchor="httpcapsuledatagram-def">
            <name>HTTPCapsuleDatagram definition</name>
            <sourcecode type="cddl"><![CDATA[
HTTPCapsuleDatagram = {
    capsule_type: "datagram"
    ? raw: RawInfo
}
]]></sourcecode>
          </figure>
        </section>
        <section anchor="httpcapsuleunknown">
          <name>HTTPCapsuleUnknown</name>
          <t>The <tt>capsule_type_value</tt> field holds the numerical value of the capsule type
without variable-length integer encoding.</t>
          <figure anchor="httpcapsuleunknown-def">
            <name>HTTPCapsuleUnknown definition</name>
            <sourcecode type="cddl"><![CDATA[
HTTPCapsuleUnknown = {
    capsule_type: "unknown"

    ? capsule_type_value: uint64
    ? raw: RawInfo
}
]]></sourcecode>
          </figure>
        </section>
      </section>
    </section>
    <section anchor="security-and-privacy-considerations">
      <name>Security and Privacy Considerations</name>
      <t>The security and privacy considerations discussed in <xref section="14" sectionFormat="of" target="QLOG-MAIN"/> apply to this
document as well.</t>
    </section>
    <section anchor="iana-considerations">
      <name>IANA Considerations</name>
      <t>This document registers two new entries in the "qlog event schema URIs"
registry, which was created in <xref section="15" sectionFormat="of" target="QLOG-MAIN"/>:</t>
      <dl>
        <dt>Event schema URI:</dt>
        <dd>
          <t>urn:ietf:params:qlog:events:http3</t>
        </dd>
        <dt>Namespace:</dt>
        <dd>
          <t>http3</t>
        </dd>
        <dt>Event Types:</dt>
        <dd>
          <t>parameters_set,
parameters_restored,
stream_type_set,
priority_updated,
frame_created,
frame_parsed,
datagram_created,
datagram_parsed,
push_resolved</t>
        </dd>
        <dt>Description:</dt>
        <dd>
          <t>Event definitions related to the HTTP/3 application protocol.</t>
        </dd>
        <dt>Reference:</dt>
        <dd>
          <t>This document</t>
        </dd>
        <dt>Event schema URI:</dt>
        <dd>
          <t>urn:ietf:params:qlog:events:http</t>
        </dd>
        <dt>Namespace:</dt>
        <dd>
          <t>http</t>
        </dd>
        <dt>Event Types:</dt>
        <dd>
          <t>capsule_created,
capsule_parsed</t>
        </dd>
        <dt>Description:</dt>
        <dd>
          <t>Event definitions for the Capsule Protocol.</t>
        </dd>
        <dt>Reference:</dt>
        <dd>
          <t>This document</t>
        </dd>
      </dl>
    </section>
  </middle>
  <back>
    <displayreference target="RFC9110" to="HTTP"/>
    <displayreference target="RFC9114" to="HTTP/3"/>
    <references>
      <name>Normative References</name>
      <reference anchor="RFC9110">
        <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="RFC9114">
        <front>
          <title>HTTP/3</title>
          <author fullname="M. Bishop" initials="M." role="editor" surname="Bishop"/>
          <date month="June" year="2022"/>
          <abstract>
            <t>The QUIC transport protocol has several features that are desirable in a transport for HTTP, such as stream multiplexing, per-stream flow control, and low-latency connection establishment. This document describes a mapping of HTTP semantics over QUIC. This document also identifies HTTP/2 features that are subsumed by QUIC and describes how HTTP/2 extensions can be ported to HTTP/3.</t>
          </abstract>
        </front>
        <seriesInfo name="RFC" value="9114"/>
        <seriesInfo name="DOI" value="10.17487/RFC9114"/>
      </reference>
      <reference anchor="QLOG-MAIN">
        <front>
          <title>qlog: Structured Logging for Network Protocols</title>
          <author fullname="Robin Marx" initials="R." surname="Marx">
            <organization>Akamai</organization>
          </author>
          <author fullname="Luca Niccolini" initials="L." surname="Niccolini">
            <organization>Meta</organization>
          </author>
          <author fullname="Marten Seemann" initials="M." surname="Seemann">
         </author>
          <author fullname="Lucas Pardue" initials="L." surname="Pardue">
            <organization>Cloudflare</organization>
          </author>
          <date day="6" month="July" year="2026"/>
          <abstract>
            <t>   qlog provides extensible structured logging for network protocols,
   allowing for easy sharing of data that benefits common debug and
   analysis methods and tooling.  This document describes key concepts
   of qlog: formats, files, traces, events, and extension points.  This
   definition includes the high-level log file schemas, and generic
   event schemas.  Requirements and guidelines for creating protocol-
   specific event schemas are also presented.  All schemas are defined
   independent of serialization format, allowing logs to be represented
   in various ways such as JSON, CSV, or protobuf.

Note to Readers

      Note to RFC editor: Please remove this section before publication.

   Feedback and discussion are welcome at https://github.com/quicwg/qlog
   (https://github.com/quicwg/qlog).  Readers are advised to refer to
   the "editor's draft" at that URL for an up-to-date version of this
   document.

            </t>
          </abstract>
        </front>
        <seriesInfo name="Internet-Draft" value="draft-ietf-quic-qlog-main-schema-14"/>
      </reference>
      <reference anchor="QLOG-QUIC">
        <front>
          <title>QUIC event definitions for qlog</title>
          <author fullname="Robin Marx" initials="R." surname="Marx">
            <organization>Akamai</organization>
          </author>
          <author fullname="Luca Niccolini" initials="L." surname="Niccolini">
            <organization>Meta</organization>
          </author>
          <author fullname="Marten Seemann" initials="M." surname="Seemann">
         </author>
          <author fullname="Lucas Pardue" initials="L." surname="Pardue">
            <organization>Cloudflare</organization>
          </author>
          <date day="6" month="July" year="2026"/>
          <abstract>
            <t>   This document describes a qlog event schema containing concrete qlog
   event definitions and their metadata for the core QUIC protocol and
   selected extensions.

Note to Readers

      Note to RFC editor: Please remove this section before publication.

   Feedback and discussion are welcome at https://github.com/quicwg/qlog
   (https://github.com/quicwg/qlog).  Readers are advised to refer to
   the "editor's draft" at that URL for an up-to-date version of this
   document.

            </t>
          </abstract>
        </front>
        <seriesInfo name="Internet-Draft" value="draft-ietf-quic-qlog-quic-events-13"/>
      </reference>
      <reference anchor="EXTENDED-CONNECT">
        <front>
          <title>Bootstrapping WebSockets with HTTP/3</title>
          <author fullname="R. Hamilton" initials="R." surname="Hamilton"/>
          <date month="June" year="2022"/>
          <abstract>
            <t>The mechanism for running the WebSocket Protocol over a single stream of an HTTP/2 connection is equally applicable to HTTP/3, but the HTTP-version-specific details need to be specified. This document describes how the mechanism is adapted for HTTP/3.</t>
          </abstract>
        </front>
        <seriesInfo name="RFC" value="9220"/>
        <seriesInfo name="DOI" value="10.17487/RFC9220"/>
      </reference>
      <reference anchor="PRIORITIZATION">
        <front>
          <title>Extensible Prioritization Scheme for HTTP</title>
          <author fullname="K. Oku" initials="K." surname="Oku"/>
          <author fullname="L. Pardue" initials="L." surname="Pardue"/>
          <date month="June" year="2022"/>
          <abstract>
            <t>This document describes a scheme that allows an HTTP client to communicate its preferences for how the upstream server prioritizes responses to its requests, and also allows a server to hint to a downstream intermediary how its responses should be prioritized when they are forwarded. This document defines the Priority header field for communicating the initial priority in an HTTP version-independent manner, as well as HTTP/2 and HTTP/3 frames for reprioritizing responses. These share a common format structure that is designed to provide future extensibility.</t>
          </abstract>
        </front>
        <seriesInfo name="RFC" value="9218"/>
        <seriesInfo name="DOI" value="10.17487/RFC9218"/>
      </reference>
      <reference anchor="ORIGIN">
        <front>
          <title>The ORIGIN Extension in HTTP/3</title>
          <author fullname="M. Bishop" initials="M." surname="Bishop"/>
          <date month="June" year="2023"/>
          <abstract>
            <t>The ORIGIN frame for HTTP/2 is equally applicable to HTTP/3, but it needs to be separately registered. This document describes the ORIGIN frame for HTTP/3.</t>
          </abstract>
        </front>
        <seriesInfo name="RFC" value="9412"/>
        <seriesInfo name="DOI" value="10.17487/RFC9412"/>
      </reference>
      <reference anchor="DGRAM-AND-CAPSULE">
        <front>
          <title>HTTP Datagrams and the Capsule Protocol</title>
          <author fullname="D. Schinazi" initials="D." surname="Schinazi"/>
          <author fullname="L. Pardue" initials="L." surname="Pardue"/>
          <date month="August" year="2022"/>
          <abstract>
            <t>This document describes HTTP Datagrams, a convention for conveying multiplexed, potentially unreliable datagrams inside an HTTP connection.</t>
            <t>In HTTP/3, HTTP Datagrams can be sent unreliably using the QUIC DATAGRAM extension. When the QUIC DATAGRAM frame is unavailable or undesirable, HTTP Datagrams can be sent using the Capsule Protocol, which is a more general convention for conveying data in HTTP connections.</t>
            <t>HTTP Datagrams and the Capsule Protocol are intended for use by HTTP extensions, not applications.</t>
          </abstract>
        </front>
        <seriesInfo name="RFC" value="9297"/>
        <seriesInfo name="DOI" value="10.17487/RFC9297"/>
      </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>
      <reference anchor="CDDL">
        <front>
          <title>Concise Data Definition Language (CDDL): A Notational Convention to Express Concise Binary Object Representation (CBOR) and JSON Data Structures</title>
          <author fullname="H. Birkholz" initials="H." surname="Birkholz"/>
          <author fullname="C. Vigano" initials="C." surname="Vigano"/>
          <author fullname="C. Bormann" initials="C." surname="Bormann"/>
          <date month="June" year="2019"/>
          <abstract>
            <t>This document proposes a notational convention to express Concise Binary Object Representation (CBOR) data structures (RFC 7049). Its main goal is to provide an easy and unambiguous way to express structures for protocol messages and data formats that use CBOR or JSON.</t>
          </abstract>
        </front>
        <seriesInfo name="RFC" value="8610"/>
        <seriesInfo name="DOI" value="10.17487/RFC8610"/>
      </reference>
    </references>
    <section numbered="false" anchor="acknowledgements">
      <name>Acknowledgements</name>
      <t>Much of the initial work by Robin Marx was done at the Hasselt and KU Leuven
Universities.</t>
      <t>Thanks to Jana Iyengar, Brian Trammell, Dmitri Tikhonov, Stephen Petrides, Jari
Arkko, Marcus Ihlar, Victor Vasiliev, Mirja Kuehlewind, Jeremy Laine, Kazu
Yamamoto, Christian Huitema, Hugo Landau, Kazuho Oku, and Jonathan Lennox for
their feedback and suggestions.</t>
    </section>
    <section numbered="false" removeInRFC="true" anchor="change-log">
      <name>Change Log</name>
      <section numbered="false" anchor="since-draft-ietf-quic-qlog-h3-events-13">
        <name>Since draft-ietf-quic-qlog-h3-events-13:</name>
        <ul spacing="normal">
          <li>Wide range of editorial and consistency changes</li>
        </ul>
      </section>
      <section numbered="false" anchor="since-draft-ietf-quic-qlog-h3-events-12">
        <name>Since draft-ietf-quic-qlog-h3-events-12:</name>
        <ul spacing="normal">
          <li>Added HTTP3OriginFrame (#504)</li>
          <li>Added support for Capsule Protocol (#504)</li>
          <li>Wide range of editorial changes</li>
        </ul>
      </section>
      <section numbered="false" anchor="since-draft-ietf-quic-qlog-h3-events-11">
        <name>Since draft-ietf-quic-qlog-h3-events-11:</name>
        <ul spacing="normal">
          <li>Replaced all length fields with raw.length (#495)</li>
          <li>Renamed owner to initiator (#498)</li>
        </ul>
      </section>
      <section numbered="false" anchor="since-draft-ietf-quic-qlog-h3-events-09">
        <name>Since draft-ietf-quic-qlog-h3-events-09:</name>
        <ul spacing="normal">
          <li>Several editorial changes</li>
          <li>Consistent use of RawInfo and _bytes fields to log raw data (#450)</li>
        </ul>
      </section>
      <section numbered="false" anchor="since-draft-ietf-quic-qlog-h3-events-08">
        <name>Since draft-ietf-quic-qlog-h3-events-08:</name>
        <ul spacing="normal">
          <li>Removed individual categories and put every event in the single <tt>http3</tt> event
schema namespace. Major change (#439)</li>
          <li>Changed protocol id from <tt>HTTP3</tt> to <tt>HTTP/3</tt> (#428)</li>
        </ul>
      </section>
      <section numbered="false" anchor="since-draft-ietf-quic-qlog-h3-events-07">
        <name>Since draft-ietf-quic-qlog-h3-events-07:</name>
        <ul spacing="normal">
          <li>TODO (we forgot...)</li>
        </ul>
      </section>
      <section numbered="false" anchor="since-draft-ietf-quic-qlog-h3-events-06">
        <name>Since draft-ietf-quic-qlog-h3-events-06:</name>
        <ul spacing="normal">
          <li>ProtocolEventBody is now called ProtocolEventData (#352)</li>
          <li>Editorial changes (#402)</li>
        </ul>
      </section>
      <section numbered="false" anchor="since-draft-ietf-quic-qlog-h3-events-05">
        <name>Since draft-ietf-quic-qlog-h3-events-05:</name>
        <ul spacing="normal">
          <li>Removed all qpack event definitions (#335)</li>
          <li>Various editorial changes</li>
        </ul>
      </section>
      <section numbered="false" anchor="since-draft-ietf-quic-qlog-h3-events-04">
        <name>Since draft-ietf-quic-qlog-h3-events-04:</name>
        <ul spacing="normal">
          <li>Renamed 'http' category to 'h3' (#300)</li>
          <li>H3HTTPField.value is now optional (#296)</li>
          <li>Added definitions for RFC9297 (HTTP/3 Datagram extension) (#310)</li>
          <li>Added definitions for RFC9218 (HTTP Extensible Prioritizations extension) (#312)</li>
          <li>Added definitions for RFC9220 (Extended Connect extension) (#325)</li>
          <li>Editorial and formatting changes (#298, #258, #299, #304, #327)</li>
        </ul>
      </section>
      <section numbered="false" anchor="since-draft-ietf-quic-qlog-h3-events-03">
        <name>Since draft-ietf-quic-qlog-h3-events-03:</name>
        <ul spacing="normal">
          <li>Ensured consistent use of RawInfo to indicate raw wire bytes (#243)</li>
          <li>Changed HTTPStreamTypeSet:raw_stream_type to stream_type_value (#54)</li>
          <li>Changed HTTPUnknownFrame:raw_frame_type to frame_type_value (#54)</li>
          <li>Renamed max_header_list_size to max_field_section_size (#282)</li>
        </ul>
      </section>
      <section numbered="false" anchor="since-draft-ietf-quic-qlog-h3-events-02">
        <name>Since draft-ietf-quic-qlog-h3-events-02:</name>
        <ul spacing="normal">
          <li>Renamed HTTPStreamType data to request (#222)</li>
          <li>Added HTTPStreamType value unknown (#227)</li>
          <li>Added HTTPUnknownFrame (#224)</li>
          <li>Replaced old and new fields with stream_type in HTTPStreamTypeSet (#240)</li>
          <li>Changed HTTPFrame to a CDDL plug type (#257)</li>
          <li>Moved data definitions out of the appendix into separate sections</li>
          <li>Added overview Table of Contents</li>
        </ul>
      </section>
      <section numbered="false" anchor="since-draft-ietf-quic-qlog-h3-events-01">
        <name>Since draft-ietf-quic-qlog-h3-events-01:</name>
        <ul spacing="normal">
          <li>No changes - new draft to prevent expiration</li>
        </ul>
      </section>
      <section numbered="false" anchor="since-draft-ietf-quic-qlog-h3-events-00">
        <name>Since draft-ietf-quic-qlog-h3-events-00:</name>
        <ul spacing="normal">
          <li>Change the data definition language from TypeScript to CDDL (#143)</li>
        </ul>
      </section>
      <section numbered="false" anchor="since-draft-marx-qlog-event-definitions-quic-h3-02">
        <name>Since draft-marx-qlog-event-definitions-quic-h3-02:</name>
        <ul spacing="normal">
          <li>These changes were done in preparation of the adoption of the drafts by the QUIC
working group (#137)</li>
          <li>Split QUIC and HTTP/3 events into two separate documents</li>
          <li>Moved RawInfo, Importance, Generic events and Simulation events to the main
schema document.</li>
        </ul>
      </section>
      <section numbered="false" anchor="since-draft-marx-qlog-event-definitions-quic-h3-01">
        <name>Since draft-marx-qlog-event-definitions-quic-h3-01:</name>
        <t>Major changes:</t>
        <ul spacing="normal">
          <li>Moved data_moved from http to transport. Also made the "from" and "to" fields
flexible strings instead of an enum (#111,#65)</li>
          <li>Moved packet_type fields to PacketHeader. Moved packet_size field out of
PacketHeader to RawInfo:length (#40)</li>
          <li>Made events that need to log packet_type and packet_number use a header field
instead of logging these fields individually</li>
          <li>Added support for logging retry, stateless reset and initial tokens (#94,#86,#117)</li>
          <li>Moved separate general event categories into a single category "generic" (#47)</li>
          <li>Added "transport:connection_closed" event (#43,#85,#78,#49)</li>
          <li>Added version_information and alpn_information events (#85,#75,#28)</li>
          <li>Added parameters_restored events to help clarify 0-RTT behaviour (#88)</li>
        </ul>
        <t>Smaller changes:</t>
        <ul spacing="normal">
          <li>Merged loss_timer events into one loss_timer_updated event</li>
          <li>Field data types are now strongly defined (#10,#39,#36,#115)</li>
          <li>Renamed qpack instruction_received and instruction_sent to instruction_created
and instruction_parsed (#114)</li>
          <li>Updated qpack:dynamic_table_updated.update_type. It now has the value "inserted"
instead of "added" (#113)</li>
          <li>Updated qpack:dynamic_table_updated. It now has an "owner" field to
differentiate encoder vs decoder state (#112)</li>
          <li>Removed push_allowed from http:parameters_set (#110)</li>
          <li>Removed explicit trigger field indications from events, since this was moved to
be a generic property of the "data" field (#80)</li>
          <li>Updated transport:connection_id_updated to be more in line with other similar
events. Also dropped importance from Core to Base (#45)</li>
          <li>Added length property to PaddingFrame (#34)</li>
          <li>Added packet_number field to transport:frames_processed (#74)</li>
          <li>Added a way to generically log packet header flags (first 8 bits) to
PacketHeader</li>
          <li>Added additional guidance on which events to log in which situations (#53)</li>
          <li>Added "simulation:scenario" event to help indicate simulation details</li>
          <li>Added "packets_acked" event (#107)</li>
          <li>Added "datagram_ids" to the datagram_X and packet_X events to allow tracking of
coalesced QUIC packets (#91)</li>
          <li>Extended connection_state_updated with more fine-grained states (#49)</li>
        </ul>
      </section>
      <section numbered="false" anchor="since-draft-marx-qlog-event-definitions-quic-h3-00">
        <name>Since draft-marx-qlog-event-definitions-quic-h3-00:</name>
        <ul spacing="normal">
          <li>Event and category names are now all lowercase</li>
          <li>Added many new events and their definitions</li>
          <li>"type" fields have been made more specific (especially important for PacketType
fields, which are now called packet_type instead of type)</li>
          <li>Events are given an importance indicator (issue #22)</li>
          <li>Event names are more consistent and use past tense (issue #21)</li>
          <li>Triggers have been redefined as properties of the "data" field and updated for most events (issue #23)</li>
        </ul>
      </section>
    </section>
  </back>
  <!-- ##markdown-source:
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
5JpOXueFNeR2JJCh/wGGVO6DQYsAAA==

-->

</rfc>
