<?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-10" 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-10"/>
    <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>Cloudflare</organization>
      <address>
        <email>lucas@lucaspardue.com</email>
      </address>
    </author>
    <date year="2025" month="March" day="17"/>
    <area>Transport</area>
    <workgroup>QUIC</workgroup>
    <keyword>Internet-Draft</keyword>
    <abstract>
      <t>This document defines a qlog event schema containing concrete events for the
core HTTP/3 protocol and selected extensions.</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>
      <t>Concrete examples of integrations of this schema in
various programming languages can be found at
<eref target="https://github.com/quiclog/qlog/">https://github.com/quiclog/qlog/</eref>.</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 (<xref target="EXTENDED-CONNECT"/>, <xref target="H3_PRIORITIZATION"/>, and
<xref target="H3-DATAGRAM"/>).</t>
      <t>The event namespace with identifier <tt>http3</tt> is defined; see <xref target="schema-def"/>. In
this namespace multiple events derive from the qlog abstract Event class
(<xref section="7" sectionFormat="of" target="QLOG-MAIN"/>), each extending the "data" field and defining
their "name" field values and semantics.</t>
      <t><xref target="h3-events"/> summarizes the name value of each event type that is defined in
this specification. Some event data fields use complex data types. These are
represented as enums or re-usable definitions, which are grouped together on the
bottom of this document for clarity.</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>
      <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"/>. If used with QUIC events, the QUIC
document takes precedence in terms of recommended filenames and trace separation
setups.</t>
        <t>If used without QUIC events, it is recommended that the implementation assign a
globally unique identifier to each HTTP/3 connection. This ID can then be used as
the value of the qlog "group_id" field, as well as the qlog filename or file
identifier, potentially suffixed by the vantagepoint type (For example,
abcd1234_server.qlog would contain the server-side trace of the connection with
GUID 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 ths document are expressed
in the Concise Data Definition Language <xref target="CDDL"/> and its
extensions described in <xref target="QLOG-MAIN"/>.</t>
        <t>The following fields from <xref target="QLOG-MAIN"/> are imported and used: name, namespace,
type, data, group_id, importance, RawInfo, and time-related fields.</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>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 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 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 events are logged when a certain condition happens at the application
layer, and there isn't always a one to one mapping between HTTP and QUIC events.
The exchange of data between the HTTP and QUIC layer is logged via the
"stream_data_moved" and "datagram_data_moved" 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 frame_created
(<xref target="h3-framecreated"/>) and frame_parsed (<xref target="h3-frameparsed"/>) events. Subsequent
frame payload data transfer is indicated by stream_data_moved events.
Furthermore, stream_data_moved events can appear before frame_parsed 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; see
<xref section="9.2" sectionFormat="of" target="QLOG-MAIN"/>.</t>
        <t>All these parameters are typically set once and never change. However, they
might be set at different times during the connection, therefore a qlog can have
multiple instances of <tt>parameters_set</tt> with different fields set.</t>
        <t>The "owner" field reflects how Settings are exchanged on a connection. Sent
settings have the value "local" and received settings have the value
"received".</t>
        <figure anchor="h3-parametersset-def">
          <name>HTTP3ParametersSet definition</name>
          <sourcecode type="cddl"><![CDATA[
HTTP3ParametersSet = {
    ? owner: Owner

    ; RFC9114
    ? max_field_section_size: uint64

    ; RFC9204
    ? max_table_capacity: uint64
    ? blocked_streams_count: uint64

    ; RFC9220 (SETTINGS_ENABLE_CONNECT_PROTOCOL)
    ? extended_connect: uint16

    ; RFC9297 (SETTINGS_H3_DATAGRAM)
    ? h3_datagram: uint16

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

    * $$http3-parametersset-extension
}
]]></sourcecode>
        </figure>
        <t>The <tt>parameters_set</tt> event can contain any number of unspecified fields. This
allows for representation of reserved settings (aka GREASE) or ad-hoc support
for extension settings that do not have a related qlog schema definition.</t>
      </section>
      <section anchor="h3-parametersrestored">
        <name>parameters_restored</name>
        <t>When using QUIC 0-RTT, HTTP/3 clients are expected to remember and reuse the
server's SETTINGs from the previous connection. The <tt>parameters_restored</tt> event
is used to indicate which HTTP/3 settings were restored and to which values when
utilizing 0-RTT. It has Base importance level; see <xref section="9.2" sectionFormat="of" target="QLOG-MAIN"/>.</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: uint16

    ; RFC9297 (SETTINGS_H3_DATAGRAM)
    ? h3_datagram: uint16

    * $$http3-parametersrestored-extension
}
]]></sourcecode>
        </figure>
      </section>
      <section anchor="h3-streamtypeset">
        <name>stream_type_set</name>
        <t>The <tt>stream_type_set</tt> event conveys when a HTTP/3 stream type 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; see <xref section="9.2" sectionFormat="of" target="QLOG-MAIN"/>.</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 with a variable-length
integer type. Where the type is not known, the stream_type value of "unknown"
type can be used and the value captured in the stream_type_bytes field; a
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 = {
    ? owner: Owner
    stream_id: uint64
    stream_type: $HTTP3StreamType

    ; only when stream_type === "unknown"
    ? 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="RFC9218"/>. It has Base importance level; see <xref section="9.2" sectionFormat="of" target="QLOG-MAIN"/>.</t>
        <t>There can be several reasons why a <tt>priority_updated</tt> occurs, and why a
particular value was chosen. For example, the priority can be updated through
signals received from client and/or server (e.g., in HTTP/3 HEADERS or
PRIORITY_UPDATE frames) or it can be changed or overridden due to local
policies. The <tt>trigger</tt> and <tt>reason</tt> fields can be used to optionally
capture such 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 the HTTP/3 framing actually happens.
It has Core importance level; see <xref section="9.2" sectionFormat="of" target="QLOG-MAIN"/>.</t>
        <t>This event does not necessarily coincide with HTTP/3 data getting 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
    ? length: uint64
    frame: $HTTP3Frame
    ? raw: RawInfo

    * $$http3-framecreated-extension
}
]]></sourcecode>
        </figure>
      </section>
      <section anchor="h3-frameparsed">
        <name>frame_parsed</name>
        <t>The <tt>frame_parsed</tt> event is emitted when the HTTP/3 frame is parsed. It has Core
importance level; see <xref section="9.2" sectionFormat="of" target="QLOG-MAIN"/>.</t>
        <t>This event is not necessarily the same as when the HTTP/3 data is actually
received on 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
    ? length: uint64
    frame: $HTTP3Frame
    ? raw: RawInfo

    * $$h3-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 is created (see
<xref target="RFC9297"/>). It has Base importance level; see <xref section="9.2" sectionFormat="of" target="QLOG-MAIN"/>.</t>
        <t>This event does not necessarily coincide with the HTTP/3 Datagram getting 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
    ? datagram: $HTTP3Datagram
    ? 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 the HTTP/3 Datagram is parsed (see
<xref target="RFC9297"/>). It has Base importance level; see <xref section="9.2" sectionFormat="of" target="QLOG-MAIN"/>.</t>
        <t>This event is not necessarily the same as when the HTTP/3 Datagram is actually
received on 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
    ? datagram: $HTTP3Datagram
    ? 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 pushed resource (<xref section="4.6" sectionFormat="of" target="RFC9114"/>) is successfully claimed (used) or, conversely, abandoned (rejected)
by the application on top of HTTP/3 (e.g., the web browser). This event provides
additional context that can is aid debugging issues related to server push. It
has Extra importance level; see <xref section="9.2" sectionFormat="of" target="QLOG-MAIN"/>.</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="http3-data-type-definitions">
      <name>HTTP/3 Data Type Definitions</name>
      <t>The following data type definitions can be used in HTTP/3 events.</t>
      <section anchor="owner">
        <name>Owner</name>
        <figure anchor="owner-def">
          <name>Owner definition</name>
          <sourcecode type="cddl"><![CDATA[
Owner = "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 definition</name>
          <sourcecode type="cddl"><![CDATA[
HTTP3BaseFrames = HTTP3DataFrame /
                  HTTP3HeadersFrame /
                  HTTP3CancelPushFrame /
                  HTTP3SettingsFrame /
                  HTTP3PushPromiseFrame /
                  HTTP3GoawayFrame /
                  HTTP3MaxPushIDFrame /
                  HTTP3ReservedFrame /
                  HTTP3UnknownFrame

$HTTP3Frame /= HTTP3BaseFrames
]]></sourcecode>
        </figure>
      </section>
      <section anchor="http3datagram">
        <name>HTTP3Datagram</name>
        <t>The generic <tt>$HTTP3Datagram</tt> is defined here as a CDDL "type socket" extension
point. It can be extended to support additional HTTP/3 datagram types. This
document intentionally does not define any specific qlog schemas for specific
HTTP/3 Datagram types.</t>
        <figure anchor="h3-datagram-def">
          <name>HTTP3Datagram type socket definition</name>
          <artwork><![CDATA[
; The HTTP3Datagram is any key-value map (e.g., JSON object)
$HTTP3Datagram /= {
    * text => any
}
]]></artwork>
        </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>HTTP3HeaderFrame</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": "/"
  },
  {
    "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 sections 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> field.
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>An endpoint that receives unknown settings is not able to log a specific name.
Instead, the name value of "unknown" can be used and the value captured in the
<tt>name_bytes</tt> field; a 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"
    ? 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="http3priorityupdateframe">
          <name>HTTP3PriorityUpdateFrame</name>
          <t>The PRIORITY_UPDATE frame is defined in <xref target="RFC9218"/>.</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="http3reservedframe">
          <name>HTTP3ReservedFrame</name>
          <t>The frame_type_bytes field is the numerical value 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 frame_type_bytes field is the numerical value 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="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_early_response" /
                       "http_connect_error" /
                       "http_version_fallback"
]]></sourcecode>
          </figure>
          <t>The HTTP3ApplicationError extends the general $ApplicationError
definition in the qlog QUIC document, see <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>
    <section anchor="security-and-privacy-considerations">
      <name>Security and Privacy Considerations</name>
      <t>The security and privacy considerations discussed in <xref target="QLOG-MAIN"/> apply to this
document as well.</t>
    </section>
    <section anchor="iana-considerations">
      <name>IANA Considerations</name>
      <t>This document registers a new entry in the "qlog event schema URIs" registry.</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>
      </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="21" month="October" year="2024"/>
          <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.

   Concrete examples of integrations of this schema in various
   programming languages can be found at https://github.com/quiclog/
   qlog/ (https://github.com/quiclog/qlog/).

            </t>
          </abstract>
        </front>
        <seriesInfo name="Internet-Draft" value="draft-ietf-quic-qlog-main-schema-10"/>
      </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="21" month="October" year="2024"/>
          <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.

   Concrete examples of integrations of this schema in various
   programming languages can be found at https://github.com/quiclog/
   qlog/ (https://github.com/quiclog/qlog/).

            </t>
          </abstract>
        </front>
        <seriesInfo name="Internet-Draft" value="draft-ietf-quic-qlog-quic-events-09"/>
      </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="H3_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="H3-DATAGRAM">
        <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>
      <reference anchor="RFC9218">
        <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="RFC9297">
        <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>
    </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 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-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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
AAA=

-->

</rfc>
