<?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-rfc2629 version 1.5.16 -->
<?rfc toc="yes"?>
<?rfc docindent="yes"?>
<?rfc sortrefs="yes"?>
<?rfc symrefs="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-httpbis-priority-09" category="std" obsoletes="" updates="" submissionType="IETF" xml:lang="en" tocInclude="true" sortRefs="true" symRefs="true" version="3">
  <!-- xml2rfc v2v3 conversion 3.11.1 -->
  <front>
    <title abbrev="HTTP Priorities">Extensible Prioritization Scheme for HTTP</title>
    <seriesInfo name="Internet-Draft" value="draft-ietf-httpbis-priority-09"/>
    <author initials="K." surname="Oku" fullname="Kazuho Oku">
      <organization>Fastly</organization>
      <address>
        <email>kazuhooku@gmail.com</email>
      </address>
    </author>
    <author initials="L." surname="Pardue" fullname="Lucas Pardue">
      <organization>Cloudflare</organization>
      <address>
        <email>lucaspardue.24.7@gmail.com</email>
      </address>
    </author>
    <date year="2021" month="November" day="10"/>
    <area>Applications and Real-Time</area>
    <workgroup>HTTP</workgroup>
    <keyword>Internet-Draft</keyword>
    <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>
    <note>
      <name>Note to Readers</name>
      <t><em>RFC EDITOR: please remove this section before publication</em></t>
      <t>Discussion of this draft takes place on the HTTP working group mailing list
(ietf-http-wg@w3.org), which is archived at <eref target="https://lists.w3.org/Archives/Public/ietf-http-wg/">https://lists.w3.org/Archives/Public/ietf-http-wg/</eref>.</t>
      <t>Working Group information can be found at <eref target="https://httpwg.org/">https://httpwg.org/</eref>; source
code and issues list for this draft can be found at
<eref target="https://github.com/httpwg/http-extensions/labels/priorities">https://github.com/httpwg/http-extensions/labels/priorities</eref>.</t>
    </note>
  </front>
  <middle>
    <section anchor="introduction" numbered="true" toc="default">
      <name>Introduction</name>
      <t>It is common for representations of an HTTP <xref target="HTTP" format="default"/>
resource to have relationships to one or more other resources. Clients will
often discover these relationships while processing a retrieved representation,
which may lead to further retrieval requests.  Meanwhile, the nature of the
relationship determines whether the client is blocked from continuing to process
locally available resources.  An example of this is visual rendering of an HTML
document, which could be blocked by the retrieval of a CSS file that the
document refers to. In contrast, inline images do not block rendering and get drawn
incrementally as the chunks of the images arrive.</t>
      <t>HTTP/2 <xref target="HTTP2" format="default"/> and HTTP/3
<xref target="HTTP3" format="default"/> support multiplexing of requests and responses in
a single connection. An important feature of any implementation of a protocol
that provides multiplexing is the ability to prioritize the sending of
information. For example, to provide meaningful presentation of an HTML document
at the earliest moment, it is important for an HTTP server to prioritize the
HTTP responses, or the chunks of those HTTP responses, that it sends to a
client.</t>
      <t>A server that operates in ignorance of how clients issue requests and
consume responses can cause suboptimal client application performance. Priority
signals allow clients to communicate their view of request
priority. Servers have their own needs that are independent from client needs,
so they often combine priority signals with other available information in order
to inform scheduling of response data.</t>
      <t>RFC 7540 <xref target="RFC7540" format="default"/> stream priority allowed a client to send a series of
priority signals that communicate to the server a "priority tree"; the structure
of this tree represents the client's preferred relative ordering and weighted
distribution of the bandwidth among HTTP responses. Servers could use these
priority signals as input into prioritization decision making.</t>
      <t>The design and implementation of RFC 7540 stream priority was observed to have
shortcomings, explained in <xref target="motivation" format="default"/>. HTTP/2
<xref target="HTTP2" format="default"/> has consequently deprecated the use of
these stream priority signals.</t>
      <t>This document describes an extensible scheme for prioritizing HTTP responses
that uses absolute values. <xref target="parameters" format="default"/> defines priority parameters, which are
a standardized and extensible format of priority information. <xref target="header-field" format="default"/>
defines the Priority HTTP header field, a protocol-version-independent and
end-to-end priority signal. Clients can use this header to signal priority to
servers in order to specify the precedence of HTTP responses. Similarly, servers
behind an intermediary can use it to signal priority to the intermediary.
<xref target="h2-update-frame" format="default"/> and <xref target="h3-update-frame" format="default"/> define version-specific frames that
carry parameters, which clients can use for reprioritization.</t>
      <t>Header field and frame priority signals are input to a server's response
prioritization process. They are only a suggestion and do not guarantee any
particular processing or transmission order for one response relative to any
other response. <xref target="server-scheduling" format="default"/> and <xref target="retransmission-scheduling" format="default"/> provide
consideration and guidance about how servers might act upon signals.</t>
      <t>The prioritization scheme and priority signals defined herein can act as a
substitute for RFC 7540 stream priority.</t>
      <section anchor="notational-conventions" numbered="true" toc="default">
        <name>Notational Conventions</name>
        <t>The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", "SHOULD",
"SHOULD NOT", "RECOMMENDED", "MAY", and "OPTIONAL" in this document are to be
interpreted as described in <xref target="RFC2119" format="default"/>.</t>
        <t>The terms Dictionary, sf-boolean, sf-dictionary, and sf-integer are imported from
<xref target="STRUCTURED-FIELDS" format="default"/>.</t>
        <t>Example HTTP requests and responses use the HTTP/2-style formatting from
<xref target="HTTP2" format="default"/>.</t>
        <t>This document uses the variable-length integer encoding from
<xref target="QUIC" format="default"/>.</t>
        <t>The term control stream is used to describe the HTTP/2 stream with identifier
0x0, and HTTP/3 control stream; see <xref section="6.2.1" sectionFormat="of" target="HTTP3" format="default"/>.</t>
        <t>The term HTTP/2 priority signal is used to describe the priority information
sent from clients to servers in HTTP/2 frames; see <xref section="5.3.2" sectionFormat="of" target="HTTP2" format="default"/>.</t>
      </section>
    </section>
    <section anchor="motivation" numbered="true" toc="default">
      <name>Motivation for Replacing RFC 7540 Priorities</name>
      <t>RFC 7540 stream priority (see <xref section="5.3" sectionFormat="of" target="RFC7540" format="default"/>) is a complex system
where clients signal stream dependencies and weights to describe an unbalanced
tree. It suffered from limited deployment and interoperability and was deprecated
in a revision of HTTP/2 <xref target="HTTP2" format="default"/>. However, in order to maintain wire
compatibility, HTTP/2 priority signals are still mandatory to handle (see
<xref section="5.3.2" sectionFormat="of" target="HTTP2" format="default"/>).</t>
      <t>Clients can build RFC 7540 trees with rich flexibility but experience has shown
this is rarely exercised. Instead they tend to choose a single model optimized
for a single use case and experiment within the model constraints, or do nothing
at all. Furthermore, many clients build their prioritization tree in a unique
way, which makes it difficult for servers to understand their intent and act or
intervene accordingly.</t>
      <t>Many RFC 7540 server implementations do not act on HTTP/2 priority signals. Some
instead favor custom server-driven schemes based on heuristics or other hints,
such as resource content type or request generation order. For example, a
server, with knowledge of an HTML document structure, might want to prioritize
the delivery of images that are critical to user experience above other images,
but below the CSS files. Since client trees vary, it is impossible for the
server to determine how such images should be prioritized against other
responses.</t>
      <t>RFC 7540 allows intermediaries to coalesce multiple client trees into a single
tree that is used for a single upstream HTTP/2 connection. However, most
intermediaries do not support this. Additionally, RFC 7540 does not define a
method that can be used by a server to express the priority of a response.
Without such a method, intermediaries cannot coordinate client-driven and
server-driven priorities.</t>
      <t>RFC 7540 describes denial-of-service considerations for implementations. On
2019-08-13 Netflix issued an advisory notice about the discovery of several
resource exhaustion vectors affecting multiple RFC 7540 implementations. One
attack, <xref target="CVE-2019-9513" format="default"/> aka "Resource Loop", is based on using priority signals
to manipulate the server's stored prioritization state.</t>
      <t>HTTP/2 priority associated with an HTTP request is signalled as a value relative
to those of other requests sharing the same HTTP/2 connection. Therefore, in
order to prioritize requests, endpoints are compelled to have the knowledge of
the underlying HTTP version and how the requests are coalesced. This has been
a burden to HTTP endpoints that generate or forward requests in a
version-agnostic manner.</t>
      <t>HTTP/2 priority signals are required to be delivered and processed in the order
they are sent so that the receiver handling is deterministic. Porting HTTP/2
priority signals to protocols that do not provide ordering guarantees presents
challenges. For example, HTTP/3 <xref target="HTTP3" format="default"/> lacks global ordering across streams
that would carry priority signals. Early attempts to port HTTP/2 priority
signals to HTTP/3 required adding additional information to the signals, leading
to more complicated processing. Problems found with this approach could not be
resolved and definition of a HTTP/3 priority signalling feature was removed
before publication.</t>
      <t>Considering the deployment problems and the design restrictions of RFC 7540
stream priority, as well as the difficulties in adapting it to HTTP/3,
continuing to base prioritization on this mechanism risks increasing the
complexity of systems. Multiple experiments from independent research have shown
that simpler schemes can reach at least equivalent performance characteristics
compared to the more complex RFC 7540 setups seen in practice, at least for the
web use case.</t>
      <section anchor="disabling" numbered="true" toc="default">
        <name>Disabling RFC 7540 Priorities</name>
        <t>The problems and insights set out above provided the motivation for deprecating
RFC 7540 stream priority (see <xref section="5.3" sectionFormat="of" target="RFC7540" format="default"/>).</t>
        <t>The SETTINGS_NO_RFC7540_PRIORITIES HTTP/2 setting is defined by this document in
order to allow endpoints to omit or ignore HTTP/2 priority signals (see
<xref section="5.3.2" sectionFormat="of" target="HTTP2" format="default"/>), as described below. The value of
SETTINGS_NO_RFC7540_PRIORITIES MUST be 0 or 1. Any value other than 0 or 1 MUST
be treated as a connection error (see <xref section="5.4.1" sectionFormat="of" target="HTTP2" format="default"/>) of type
PROTOCOL_ERROR. The initial value is 0.</t>
        <t>If endpoints use SETTINGS_NO_RFC7540_PRIORITIES they MUST send it in the first
SETTINGS frame. Senders MUST NOT change the SETTINGS_NO_RFC7540_PRIORITIES value
after the first SETTINGS frame. Receivers that detect a change MAY treat it as a
connection error of type PROTOCOL_ERROR.</t>
        <t>Clients can send SETTINGS_NO_RFC7540_PRIORITIES with a value of 1 to indicate
that they are not using HTTP/2 priority signals. The SETTINGS frame precedes any
HTTP/2 priority signal sent from clients, so servers can determine whether they
need to allocate any resources to signal handling before signals arrive. A
server that receives SETTINGS_NO_RFC7540_PRIORITIES with a value of 1 MUST
ignore HTTP/2 priority signals.</t>
        <t>Servers can send SETTINGS_NO_RFC7540_PRIORITIES with a value of 1 to indicate
that they will ignore HTTP/2 priority signals sent by clients.</t>
        <t>Endpoints that send SETTINGS_NO_RFC7540_PRIORITIES are encouraged to use
alternative priority signals (for example, <xref target="header-field" format="default"/> or
<xref target="h2-update-frame" format="default"/>) but there is no requirement to use a specific signal type.</t>
        <section anchor="advice-when-using-extensible-priorities-as-the-alternative" numbered="true" toc="default">
          <name>Advice when Using Extensible Priorities as the Alternative</name>
          <t>Until the client receives the SETTINGS frame from the server, the client SHOULD
send both the HTTP/2 priority signals and the signals of this prioritization
scheme (see <xref target="header-field" format="default"/> and <xref target="h2-update-frame" format="default"/>). When the client receives
the first SETTINGS frame that contains the SETTINGS_NO_RFC7540_PRIORITIES
parameter with value of 1, it SHOULD stop sending the HTTP/2 priority signals.
If the value was 0 or if the settings parameter was absent, it SHOULD stop
sending PRIORITY_UPDATE frames (<xref target="h2-update-frame" format="default"/>), but MAY continue sending
the Priority header field (<xref target="header-field" format="default"/>), as it is an end-to-end signal that
might be useful to nodes behind the server that the client is directly connected
to.</t>
        </section>
      </section>
    </section>
    <section anchor="applicability-of-the-extensible-priority-scheme" numbered="true" toc="default">
      <name>Applicability of the Extensible Priority Scheme</name>
      <t>The priority scheme defined by this document considers only the prioritization
of HTTP messages and tunnels, see <xref target="client-scheduling" format="default"/>, <xref target="server-scheduling" format="default"/>,
and <xref target="connect-scheduling" format="default"/>.</t>
      <t>Where HTTP extensions change stream behavior or define new data carriage
mechanisms, they can also define how this priority scheme can be applied.</t>
    </section>
    <section anchor="parameters" numbered="true" toc="default">
      <name>Priority Parameters</name>
      <t>The priority information is a sequence of key-value pairs, providing room for
future extensions. Each key-value pair represents a priority parameter.</t>
      <t>The Priority HTTP header field (<xref target="header-field" format="default"/>) is an end-to-end way to
transmit this set of parameters when a request or a response is issued. In order
to reprioritize a request, HTTP-version-specific PRIORITY_UPDATE frames
(<xref target="h2-update-frame" format="default"/> and <xref target="h3-update-frame" format="default"/>) are used by clients to transmit
the same information on a single hop.</t>
      <t>Intermediaries can consume and produce priority signals in a PRIORITY_UPDATE
frame or Priority header field. Sending a PRIORITY_UPDATE frame preserves the
signal from the client, but provides a signal that overrides that for the next
hop; see <xref target="header-field-rationale" format="default"/>. Replacing or adding a Priority header field
overrides any signal from a client and can affect prioritization for all
subsequent recipients.</t>
      <t>For both the Priority header field and the PRIORITY_UPDATE frame, the set of
priority parameters is encoded as a Structured Fields Dictionary (see
<xref section="3.2" sectionFormat="of" target="STRUCTURED-FIELDS" format="default"/>).</t>
      <t>This document defines the urgency(<tt>u</tt>) and incremental(<tt>i</tt>) parameters. When
receiving an HTTP request that does not carry these priority parameters, a
server SHOULD act as if their default values were specified. Note that handling
of omitted parameters is different when processing an HTTP response; see
<xref target="merging" format="default"/>.</t>
      <t>Receivers parse the Dictionary as defined in <xref section="4.2" sectionFormat="of" target="STRUCTURED-FIELDS" format="default"/>. Where the Dictionary is successfully parsed, this document
places the additional requirement that unknown priority parameters, parameters
with out-of-range values, or values of unexpected types MUST be ignored.</t>
      <section anchor="urgency" numbered="true" toc="default">
        <name>Urgency</name>
        <t>The urgency parameter (<tt>u</tt>) takes an integer between 0 and 7, in descending
order of priority.</t>
        <t>The value is encoded as an sf-integer. The default value is 3.</t>
        <t>Endpoints use this parameter to communicate their view of the precedence of
HTTP responses. The chosen value of urgency can be based on the expectation that
servers might use this information to transmit HTTP responses in the order of
their urgency. The smaller the value, the higher the precedence.</t>
        <t>The following example shows a request for a CSS file with the urgency set to
<tt>0</tt>:</t>
        <sourcecode type="example"><![CDATA[
:method = GET
:scheme = https
:authority = example.net
:path = /style.css
priority = u=0
]]></sourcecode>
        <t>A client that fetches a document that likely consists of multiple HTTP resources
(e.g., HTML) SHOULD assign the default urgency level to the main resource.  This
convention allows servers to refine the urgency using
knowledge specific to the web-site (see <xref target="merging" format="default"/>).</t>
        <t>The lowest urgency level (7) is reserved for background tasks such as delivery
of software updates. This urgency level SHOULD NOT be used for fetching
responses that have impact on user interaction.</t>
      </section>
      <section anchor="incremental" numbered="true" toc="default">
        <name>Incremental</name>
        <t>The incremental parameter (<tt>i</tt>) takes an sf-boolean as the value that indicates
if an HTTP response can be processed incrementally, i.e., provide some
meaningful output as chunks of the response arrive.</t>
        <t>The default value of the incremental parameter is false (<tt>0</tt>).</t>
        <t>If a client makes concurrent requests with the incremental parameter set to
false, there is no benefit serving responses with the same urgency concurrently
because the client is not going to process those responses incrementally.
Serving non-incremental responses with the same urgency one by one, in the order in which those
requests were generated is considered to be the best strategy.</t>
        <t>If a client makes concurrent requests with the incremental parameter set to
true, serving requests with the same urgency concurrently might be beneficial.
Doing this distributes the connection bandwidth, meaning that responses take
longer to complete. Incremental delivery is most useful where multiple
partial responses might provide some value to clients ahead of a
complete response being available.</t>
        <t>The following example shows a request for a JPEG file with the urgency parameter
set to <tt>5</tt> and the incremental parameter set to <tt>true</tt>.</t>
        <sourcecode type="example"><![CDATA[
:method = GET
:scheme = https
:authority = example.net
:path = /image.jpg
priority = u=5, i
]]></sourcecode>
      </section>
      <section anchor="new-parameters" numbered="true" toc="default">
        <name>Defining New Parameters</name>
        <t>When attempting to define new parameters, care must be taken so that they do not
adversely interfere with prioritization performed by existing endpoints or
intermediaries that do not understand the newly defined parameter. Since unknown
parameters are ignored, new parameters should not change the interpretation of,
or modify, the urgency (see <xref target="urgency" format="default"/>) or incremental (see <xref target="incremental" format="default"/>)
parameters in a way that is not backwards compatible or fallback safe.</t>
        <t>For example, if there is a need to provide more granularity than eight urgency
levels, it would be possible to subdivide the range using an additional
parameter. Implementations that do not recognize the parameter can safely
continue to use the less granular eight levels.</t>
        <t>Alternatively, the urgency can be augmented. For example, a graphical user agent
could send a <tt>visible</tt> parameter to indicate if the resource being requested is
within the viewport.</t>
        <t>Generic parameters are preferred over vendor-specific, application-specific or
deployment-specific values. If a generic value cannot be agreed upon in the
community, the parameter's name should be correspondingly specific (e.g., with
a prefix that identifies the vendor, application or deployment).</t>
        <section anchor="register" numbered="true" toc="default">
          <name>Registration</name>
          <t>New Priority parameters can be defined by registering them in the HTTP Priority
Parameters Registry. The registry governs the keys (short textual strings) used
in Structured Fields Dictionary (see <xref section="3.2" sectionFormat="of" target="STRUCTURED-FIELDS" format="default"/>).
Since each HTTP request can have associated priority signals, there is value
in having short key lengths, especially single-character strings. In order to
encourage extension while avoiding unintended conflict among attractive key
values, the HTTP Priority Parameters Registry operates two registration policies
depending on key length.</t>
          <ul spacing="normal">
            <li>Registration requests for parameters with a key length of one use the
Specification Required policy, as per <xref section="4.6" sectionFormat="of" target="RFC8126" format="default"/>.</li>
            <li>Registration requests for parameters with a key length greater than one use the
Expert Review policy, as per <xref section="4.5" sectionFormat="of" target="RFC8126" format="default"/>. A specification
document is appreciated, but not required.</li>
          </ul>
          <t>When reviewing registration requests, the designated expert(s) can consider the
additional guidance provided in <xref target="new-parameters" format="default"/> but cannot use it as a basis
for rejection.</t>
          <t>Registration requests should use the following template:</t>
          <dl>
            <dt>
Name:  </dt>
            <dd>
              <t>[a name for the Priority Parameter that matches key]</t>
            </dd>
            <dt>
Description:  </dt>
            <dd>
              <t>[a description of the parameter semantics and value]</t>
            </dd>
            <dt>
Reference:  </dt>
            <dd>
              <t>[to a specification defining this parameter]</t>
            </dd>
          </dl>
          <t>See the registry at <eref target="https://iana.org/assignments/http-priority">https://iana.org/assignments/http-priority</eref> for details on
where to send registration requests.</t>
        </section>
      </section>
    </section>
    <section anchor="header-field" numbered="true" toc="default">
      <name>The Priority HTTP Header Field</name>
      <t>The Priority HTTP header field carries priority parameters <xref target="parameters" format="default"/>. It
can appear in requests and responses. It is an end-to-end signal of the request
priority from the client or the response priority from the server. <xref target="merging" format="default"/>
describes how intermediaries can combine the priority information from client
requests and server responses to correct or amend the precedence. Clients cannot
interpret the appearance or omission of a Priority response header as
acknowledgement that any prioritization has occurred. Guidance for how endpoints
can act on Priority header values is given in <xref target="server-scheduling" format="default"/> and
<xref target="client-scheduling" format="default"/>.</t>
      <t>Priority is a Dictionary (<xref section="3.2" sectionFormat="of" target="STRUCTURED-FIELDS" format="default"/>):</t>
      <sourcecode type="abnf"><![CDATA[
Priority   = sf-dictionary
]]></sourcecode>
      <t>As is the ordinary case for HTTP caching <xref target="CACHING" format="default"/>, a
response with a Priority header field might be cached and re-used for subsequent
requests. When an origin server generates the Priority response header field
based on properties of an HTTP request it receives, the server is expected to
control the cacheability or the applicability of the cached response, by using
header fields that control the caching behavior (e.g., Cache-Control, Vary).</t>
    </section>
    <section anchor="reprioritization" numbered="true" toc="default">
      <name>Reprioritization</name>
      <t>After a client sends a request, it may be beneficial to change the priority of
the response. As an example, a web browser might issue a prefetch request for a
JavaScript file with the urgency parameter of the Priority request header field
set to <tt>u=7</tt> (background). Then, when the user navigates to a page which
references the new JavaScript file, while the prefetch is in progress, the
browser would send a reprioritization signal with the priority field value set
to <tt>u=0</tt>. The PRIORITY_UPDATE frame (<xref target="frame" format="default"/>) can be used for such
reprioritization.</t>
    </section>
    <section anchor="frame" numbered="true" toc="default">
      <name>The PRIORITY_UPDATE Frame</name>
      <t>This document specifies a new PRIORITY_UPDATE frame for HTTP/2 <xref target="HTTP2" format="default"/>
and HTTP/3 <xref target="HTTP3" format="default"/>. It carries priority parameters and
references the target of the prioritization based on a version-specific
identifier. In HTTP/2, this identifier is the Stream ID; in HTTP/3, the
identifier is either the Stream ID or Push ID. Unlike the Priority header field,
the PRIORITY_UPDATE frame is a hop-by-hop signal.</t>
      <t>PRIORITY_UPDATE frames are sent by clients on the control stream, allowing them
to be sent independent from the stream that carries the response. This means
they can be used to reprioritize a response or a push stream; or signal the
initial priority of a response instead of the Priority header field.</t>
      <t>A PRIORITY_UPDATE frame communicates a complete set of all parameters in the
Priority Field Value field. Omitting a parameter is a signal to use the
parameter's default value. Failure to parse the Priority Field Value MAY be
treated as a connection error. In HTTP/2 the error is of type PROTOCOL_ERROR; in
HTTP/3 the error is of type H3_GENERAL_PROTOCOL_ERROR.</t>
      <t>A client MAY send a PRIORITY_UPDATE frame before the stream that it references
is open (except for HTTP/2 push streams; see <xref target="h2-update-frame" format="default"/>). Furthermore,
HTTP/3 offers no guaranteed ordering across streams, which could cause the frame
to be received earlier than intended. Either case leads to a race condition
where a server receives a PRIORITY_UPDATE frame that references a request stream
that is yet to be opened. To solve this condition, for the purposes of
scheduling, the most recently received PRIORITY_UPDATE frame can be considered
as the most up-to-date information that overrides any other signal. Servers
SHOULD buffer the most recently received PRIORITY_UPDATE frame and apply it once
the referenced stream is opened. Holding PRIORITY_UPDATE frames for each stream
requires server resources, which can can be bound by local implementation
policy. Although there is no limit to the number of PRIORITY_UPDATES that can be
sent, storing only the most recently received frame limits resource commitment.</t>
      <section anchor="h2-update-frame" numbered="true" toc="default">
        <name>HTTP/2 PRIORITY_UPDATE Frame</name>
        <t>The HTTP/2 PRIORITY_UPDATE frame (type=0x10) is used by clients to signal the
initial priority of a response, or to reprioritize a response or push stream. It
carries the stream ID of the response and the priority in ASCII text, using the
same representation as the Priority header field value.</t>
        <t>The Stream Identifier field (see <xref section="5.1.1" sectionFormat="of" target="HTTP2" format="default"/>) in the
PRIORITY_UPDATE frame header MUST be zero (0x0). Receiving a PRIORITY_UPDATE
frame with a field of any other value MUST be treated as a connection error of
type PROTOCOL_ERROR.</t>
        <figure anchor="fig-h2-reprioritization-frame">
          <name>HTTP/2 PRIORITY_UPDATE Frame Payload</name>
          <sourcecode type="drawing"><![CDATA[
HTTP/2 PRIORITY_UPDATE Frame {
  Length (24),
  Type (i) = 10,

  Unused Flags (8).

  Reserved (1),
  Stream Identifier (31),

  Reserved (1),
  Prioritized Stream ID (31),
  Priority Field Value (..),
}
]]></sourcecode>
        </figure>
        <t>The Length, Type, Unused Flag(s), Reserved, and Stream Identifier fields are
described in <xref section="4" sectionFormat="of" target="HTTP2" format="default"/>. The frame payload of PRIORITY_UPDATE
frame payload contains the following additional fields:</t>
        <dl>
          <dt>
Reserved:  </dt>
          <dd>
            <t>A reserved 1-bit field. The semantics of this bit are undefined, and the bit
MUST remain unset (0x0) when sending and MUST be ignored when receiving.</t>
          </dd>
          <dt>
Prioritized Stream ID:  </dt>
          <dd>
            <t>A 31-bit stream identifier for the stream that is the target of the priority
update.</t>
          </dd>
          <dt>
Priority Field Value:  </dt>
          <dd>
            <t>The priority update value in ASCII text, encoded using Structured Fields. This
is the same representation as the Priority header field value.</t>
          </dd>
        </dl>
        <t>When the PRIORITY_UPDATE frame applies to a request stream, clients SHOULD
provide a Prioritized Stream ID that refers to a stream in the "open",
"half-closed (local)", or "idle" state. Servers can discard frames where the
Prioritized Stream ID refers to a stream in the "half-closed (local)" or
"closed" state. The number of streams which have been prioritized but remain in
the "idle" state plus the number of active streams (those in the "open" or
either "half-closed" state; see <xref section="5.1.2" sectionFormat="of" target="HTTP2" format="default"/>) MUST NOT exceed
the value of the SETTINGS_MAX_CONCURRENT_STREAMS parameter. Servers that receive
such a PRIORITY_UPDATE MUST respond with a connection error of type
PROTOCOL_ERROR.</t>
        <t>When the PRIORITY_UPDATE frame applies to a push stream, clients SHOULD provide
a Prioritized Stream ID that refers to a stream in the "reserved (remote)" or
"half-closed (local)" state. Servers can discard frames where the Prioritized
Stream ID refers to a stream in the "closed" state. Clients MUST NOT provide a
Prioritized Stream ID that refers to a push stream in the "idle" state. Servers
that receive a PRIORITY_UPDATE for a push stream in the "idle" state MUST
respond with a connection error of type PROTOCOL_ERROR.</t>
        <t>If a PRIORITY_UPDATE frame is received with a Prioritized Stream ID of 0x0, the
recipient MUST respond with a connection error of type PROTOCOL_ERROR.</t>
        <t>If a client receives a PRIORITY_UPDATE frame, it MUST respond with a connection
error of type PROTOCOL_ERROR.</t>
      </section>
      <section anchor="h3-update-frame" numbered="true" toc="default">
        <name>HTTP/3 PRIORITY_UPDATE Frame</name>
        <t>The HTTP/3 PRIORITY_UPDATE frame (type=0xF0700 or 0xF0701) is used by clients to
signal the initial priority of a response, or to reprioritize a response or push
stream. It carries the identifier of the element that is being prioritized, and
the updated priority in ASCII text, using the same representation as that of the
Priority header field value. PRIORITY_UPDATE with a frame type of 0xF0700 is
used for request streams, while PRIORITY_UPDATE with a frame type of 0xF0701 is
used for push streams.</t>
        <t>The PRIORITY_UPDATE frame MUST be sent on the client control stream
(see <xref section="6.2.1" sectionFormat="of" target="HTTP3" format="default"/>). Receiving a PRIORITY_UPDATE frame on a
stream other than the client control stream MUST be treated as a connection
error of type H3_FRAME_UNEXPECTED.</t>
        <figure anchor="fig-h3-reprioritization-frame">
          <name>HTTP/3 PRIORITY_UPDATE Frame</name>
          <sourcecode type="drawing"><![CDATA[
HTTP/3 PRIORITY_UPDATE Frame {
  Type (i) = 0xF0700..0xF0701,
  Length (i),
  Prioritized Element ID (i),
  Priority Field Value (..),
}
]]></sourcecode>
        </figure>
        <t>The PRIORITY_UPDATE frame payload has the following fields:</t>
        <dl>
          <dt>
Prioritized Element ID:  </dt>
          <dd>
            <t>The stream ID or push ID that is the target of the priority update.</t>
          </dd>
          <dt>
Priority Field Value:  </dt>
          <dd>
            <t>The priority update value in ASCII text, encoded using Structured Fields. This
is the same representation as the Priority header field value.</t>
          </dd>
        </dl>
        <t>The request-stream variant of PRIORITY_UPDATE (type=0xF0700) MUST reference a
request stream. If a server receives a PRIORITY_UPDATE (type=0xF0700) for a
Stream ID that is not a request stream, this MUST be treated as a connection
error of type H3_ID_ERROR. The Stream ID MUST be within the client-initiated
bidirectional stream limit. If a server receives a PRIORITY_UPDATE
(type=0xF0700) with a Stream ID that is beyond the stream limits, this SHOULD be
treated as a connection error of type H3_ID_ERROR. Generating an error is not
mandatory because HTTP/3 implementations might have practical barriers to
determining the active stream concurrency limit that is applied by the QUIC
layer.</t>
        <t>The push-stream variant PRIORITY_UPDATE (type=0xF0701) MUST reference a promised
push stream. If a server receives a PRIORITY_UPDATE (type=0xF0701) with a Push ID
that is greater than the maximum Push ID or which has not yet been promised, this
MUST be treated as a connection error of type H3_ID_ERROR.</t>
        <t>PRIORITY_UPDATE frames of either type are only sent by clients. If a client
receives a PRIORITY_UPDATE frame, this MUST be treated as a connection error of
type H3_FRAME_UNEXPECTED.</t>
      </section>
    </section>
    <section anchor="merging" numbered="true" toc="default">
      <name>Merging Client- and Server-Driven Parameters</name>
      <t>It is not always the case that the client has the best understanding of how the
HTTP responses deserve to be prioritized. The server might have additional
information that can be combined with the client's indicated priority in order
to improve the prioritization of the response. For example, use of an HTML
document might depend heavily on one of the inline images; existence of such
dependencies is typically best known to the server. Or, a server that receives
requests for a font <xref target="RFC8081" format="default"/> and images with the same urgency might give
higher precedence to the font, so that a visual client can render textual
information at an early moment.</t>
      <t>An origin can use the Priority response header field to indicate its view on how
an HTTP response should be prioritized. An intermediary that forwards an HTTP
response can use the parameters found in the Priority response header field, in
combination with the client Priority request header field, as input to its
prioritization process. No guidance is provided for merging priorities, this is
left as an implementation decision.</t>
      <t>Absence of a priority parameter in an HTTP response indicates the server's
disinterest in changing the client-provided value. This is different from the
logic being defined for the request header field, in which omission of a
priority parameter implies the use of their default values (see <xref target="parameters" format="default"/>).</t>
      <t>As a non-normative example, when the client sends an HTTP request with the
urgency parameter set to <tt>5</tt> and the incremental parameter set to <tt>true</tt></t>
      <sourcecode type="example"><![CDATA[
:method = GET
:scheme = https
:authority = example.net
:path = /menu.png
priority = u=5, i
]]></sourcecode>
      <t>and the origin responds with</t>
      <sourcecode type="example"><![CDATA[
:status = 200
content-type = image/png
priority = u=1
]]></sourcecode>
      <t>the intermediary might alter its understanding of the urgency from <tt>5</tt> to <tt>1</tt>,
because it prefers the server-provided value over the client's. The incremental
value continues to be <tt>true</tt>, the value specified by the client, as the server did
not specify the incremental(<tt>i</tt>) parameter.</t>
    </section>
    <section anchor="client-scheduling" numbered="true" toc="default">
      <name>Client Scheduling</name>
      <t>A client MAY use priority values to make local processing or scheduling choices
about the requests it initiates.</t>
    </section>
    <section anchor="server-scheduling" numbered="true" toc="default">
      <name>Server Scheduling</name>
      <t>Priority signals are input to a prioritization process. They do not guarantee
any particular processing or transmission order for one response relative to any
other response. An endpoint cannot force a peer to process concurrent request in
a particular order using priority. Expressing priority is therefore only a
suggestion.</t>
      <t>A server can use priority signals along with other inputs to make scheduling
decisions. No guidance is provided about how this can or should be done. Factors
such as implementation choices or deployment environment also play a role. Any
given connection is likely to have many dynamic permutations. For these reasons,
there is no unilateral perfect scheduler and this document only provides some
basic recommendations for implementations.</t>
      <t>Clients cannot depend on particular treatment based on priority signals. Servers
can use other information to prioritize responses.</t>
      <t>It is RECOMMENDED that, when possible, servers respect the urgency parameter
(<xref target="urgency" format="default"/>), sending higher urgency responses before lower urgency responses.</t>
      <t>The incremental parameter indicates how a client processes response bytes as
they arrive. It is RECOMMENDED that, when possible, servers respect the
incremental parameter (<xref target="incremental" format="default"/>). Non-incremental resources can only be used
when all of the response payload has been received. Therefore, non-incremental
responses of the same urgency SHOULD be served in their entirety, one-by-one,
based on the stream ID, which corresponds to the order in which clients make
requests. Doing so ensures that clients can use request ordering to influence
response order.</t>
      <t>Incremental responses of the same urgency SHOULD be served by sharing bandwidth
amongst them. Incremental resources are used as parts, or chunks, of the
response payload are received. A client might benefit more from receiving a
portion of all these resources rather than the entirety of a single resource.
How large a portion of the resource is needed to be useful in improving
performance varies. Some resource types place critical elements early, others
can use information progressively. This scheme provides no explicit mandate
about how a server should use size, type or any other input to decide how to
prioritize.</t>
      <t>There can be scenarios where a server will need to schedule multiple incremental
and non-incremental responses at the same urgency level. Strictly abiding the
scheduling guidance based on urgency and request generation order might lead
to sub-optimal results at the client, as early non-incremental responses might
prevent serving of incremental responses issued later. The following are
examples of such challenges.</t>
      <ol spacing="normal" type="1"><li>At the same urgency level, a non-incremental request for a large resource
followed by an incremental request for a small resource.</li>
        <li>At the same urgency level, an incremental request of indeterminate length
followed by a non-incremental large resource.</li>
      </ol>
      <t>It is RECOMMENDED that servers avoid such starvation where possible. The method
to do so is an implementation decision. For example, a server might
pre-emptively send responses of a particular incremental type based on other
information such as content size.</t>
      <t>Optimal scheduling of server push is difficult, especially when pushed resources
contend with active concurrent requests. Servers can consider many factors when
scheduling, such as the type or size of resource being pushed, the priority of
the request that triggered the push, the count of active concurrent responses,
the priority of other active concurrent responses, etc. There is no general
guidance on the best way to apply these. A server that is too simple could
easily push at too high a priority and block client requests, or push at too low
a priority and delay the response, negating intended goals of server push.</t>
      <t>Priority signals are a factor for server push scheduling. The concept of
parameter value defaults applies slightly differently because there is no
explicit client-signalled initial priority. A server can apply priority signals
provided in an origin response; see the merging guidance given in <xref target="merging" format="default"/>.
In the absence of origin signals, applying default parameter values could be
suboptimal. By whatever means a server decides to schedule a pushed response, it
can signal the intended priority to the client by including the Priority field
in a PUSH_PROMISE or HEADERS frame.</t>
      <section anchor="intermediaries-with-multiple-backend-connections" numbered="true" toc="default">
        <name>Intermediaries with Multiple Backend Connections</name>
        <t>An intermediary serving an HTTP connection might split requests over multiple
backend connections. When it applies prioritization rules strictly, low priority
requests cannot make progress while requests with higher priorities are inflight. This
blocking can propagate to backend connections, which the peer might interpret as
a connection stall. Endpoints often implement protections against stalls, such
as abruptly closing connections after a certain time period. To reduce the
possibility of this occurring, intermediaries can avoid strictly following
prioritization and instead allocate small amounts of bandwidth for all the
requests that they are forwarding, so that every request can make some progress
over time.</t>
        <t>Similarly, servers SHOULD allocate some amount of bandwidths to streams acting
as tunnels.</t>
      </section>
    </section>
    <section anchor="connect-scheduling" numbered="true" toc="default">
      <name>Scheduling and the CONNECT Method</name>
      <t>When a request stream carries the CONNECT method, the scheduling guidance in
this document applies to the frames on the stream. A client that issues multiple
CONNECT requests can set the incremental parameter to <tt>true</tt>, servers that
implement the recommendation in <xref target="server-scheduling" format="default"/> will schedule these
fairly.</t>
    </section>
    <section anchor="retransmission-scheduling" numbered="true" toc="default">
      <name>Retransmission Scheduling</name>
      <t>Transport protocols such as TCP and QUIC provide reliability by detecting packet
losses and retransmitting lost information. While this document specifies
HTTP-layer prioritization, its effectiveness can be further enhanced if the
transport layer factors priority into scheduling both new data and
retransmission data. The remainder of this section discusses considerations when
using QUIC.</t>
      <t><xref section="13.3" sectionFormat="of" target="QUIC" format="default"/> states "Endpoints SHOULD prioritize
retransmission of data over sending new data, unless priorities specified by the
application indicate otherwise". When an HTTP/3 application uses the priority
scheme defined in this document and the QUIC transport implementation supports
application indicated stream priority, a transport that considers the relative
priority of streams when scheduling both new data and retransmission data might
better match the expectations of the application. However, there are no
requirements on how a transport chooses to schedule based on this information
because the decision depends on several factors and trade-offs. It could
prioritize new data for a higher urgency stream over retransmission data for a
lower priority stream, or it could prioritize retransmission data over new data
irrespective of urgencies.</t>
      <t><xref section="6.2.4" sectionFormat="of" target="QUIC-RECOVERY" format="default"/>, also highlights consideration of
application priorities when sending probe packets after Probe Timeout timer
expiration. A QUIC implementation supporting application-indicated priorities
might use the relative priority of streams when choosing probe data.</t>
    </section>
    <section anchor="fairness" numbered="true" toc="default">
      <name>Fairness</name>
      <t>As a general guideline, a server SHOULD NOT use priority information for making
scheduling decisions across multiple connections, unless it knows that those
connections originate from the same client. Due to this, priority information
conveyed over a non-coalesced HTTP connection (e.g., HTTP/1.1) might go unused.</t>
      <t>The remainder of this section discusses scenarios where unfairness is
problematic and presents possible mitigations, or where unfairness is desirable.</t>
      <section anchor="coalescing-intermediaries" numbered="true" toc="default">
        <name>Coalescing Intermediaries</name>
        <t>When an intermediary coalesces HTTP requests coming from multiple clients into
one HTTP/2 or HTTP/3 connection going to the backend server, requests that
originate from one client might have higher precedence than those coming from
others.</t>
        <t>It is sometimes beneficial for the server running behind an intermediary to obey
to the value of the Priority header field. As an example, a resource-constrained
server might defer the transmission of software update files that would have the
background urgency being associated. However, in the worst case, the asymmetry
between the precedence declared by multiple clients might cause responses going
to one user agent to be delayed totally after those going to another.</t>
        <t>In order to mitigate this fairness problem, a server could use knowledge about
the intermediary as another signal in its prioritization decisions. For
instance, if a server knows the intermediary is coalescing requests, then it
could avoid serving the responses in their entirety and instead distribute
bandwidth (for example, in a round-robin manner). This can work if the
constrained resource is network capacity between the intermediary and the user
agent, as the intermediary buffers responses and forwards the chunks based on
the prioritization scheme it implements.</t>
        <t>A server can determine if a request came from an intermediary through
configuration, or by consulting if that request contains one of the following
header fields:</t>
        <ul spacing="normal">
          <li>Forwarded <xref target="FORWARDED" format="default"/>, X-Forwarded-For</li>
          <li>Via (see <xref section="7.6.3" sectionFormat="of" target="HTTP" format="default"/>)</li>
        </ul>
      </section>
      <section anchor="http1x-back-ends" numbered="true" toc="default">
        <name>HTTP/1.x Back Ends</name>
        <t>It is common for CDN infrastructure to support different HTTP versions on the
front end and back end. For instance, the client-facing edge might support
HTTP/2 and HTTP/3 while communication to back end servers is done using
HTTP/1.1. Unlike with connection coalescing, the CDN will "de-mux" requests into
discrete connections to the back end. HTTP/1.1 and older do not support response
multiplexing in a single connection, so there is not a fairness problem.
However, back end servers MAY still use client headers for request scheduling.
Back end servers SHOULD only schedule based on client priority information where
that information can be scoped to individual end clients. Authentication and
other session information might provide this linkability.</t>
      </section>
      <section anchor="intentional-introduction-of-unfairness" numbered="true" toc="default">
        <name>Intentional Introduction of Unfairness</name>
        <t>It is sometimes beneficial to deprioritize the transmission of one connection
over others, knowing that doing so introduces a certain amount of unfairness
between the connections and therefore between the requests served on those
connections.</t>
        <t>For example, a server might use a scavenging congestion controller on
connections that only convey background priority responses such as software
update images. Doing so improves responsiveness of other connections at the cost
of delaying the delivery of updates.</t>
      </section>
    </section>
    <section anchor="header-field-rationale" numbered="true" toc="default">
      <name>Why use an End-to-End Header Field?</name>
      <t>Contrary to the prioritization scheme of HTTP/2 that uses a hop-by-hop frame,
the Priority header field is defined as end-to-end.</t>
      <t>The rationale is that the Priority header field transmits how each response
affects the client's processing of those responses, rather than how relatively
urgent each response is to others.  The way a client processes a response is a
property associated to that client generating that request.  Not that of an
intermediary.  Therefore, it is an end-to-end property.  How these end-to-end
properties carried by the Priority header field affect the prioritization
between the responses that share a connection is a hop-by-hop issue.</t>
      <t>Having the Priority header field defined as end-to-end is important for caching
intermediaries.  Such intermediaries can cache the value of the Priority header
field along with the response, and utilize the value of the cached header field
when serving the cached response, only because the header field is defined as
end-to-end rather than hop-by-hop.</t>
      <t>It should also be noted that the use of a header field carrying a textual value
makes the prioritization scheme extensible; see the discussion below.</t>
    </section>
    <section anchor="security-considerations" numbered="true" toc="default">
      <name>Security Considerations</name>
      <t><xref target="RFC7540" format="default"/> stream prioritization relies on dependencies. Considerations are
presented to implementations, describing how limiting state or work commitments
can avoid some types of problems. In addition, <xref target="CVE-2019-9513" format="default"/> aka "Resource
Loop", is an example of a DoS attack that abuses stream dependencies. Extensible
priorities does not use dependencies, which avoids these issues.</t>
      <t><xref target="frame" format="default"/> describes considerations for server buffering of PRIORITY_UPDATE
frames.</t>
      <t><xref target="server-scheduling" format="default"/> presents examples where servers that prioritize responses
in a certain way might be starved of the ability to transmit payload.</t>
      <t>The security considerations from <xref target="STRUCTURED-FIELDS" format="default"/> apply to processing of
priority parameters defined in <xref target="parameters" format="default"/>.</t>
    </section>
    <section anchor="iana-considerations" numbered="true" toc="default">
      <name>IANA Considerations</name>
      <t>This specification registers the following entry in the the Hypertext Transfer
Protocol (HTTP) Field Name Registry established by <xref target="HTTP" format="default"/>:</t>
      <dl>
        <dt>
Field name:  </dt>
        <dd>
          <t>Priority</t>
        </dd>
        <dt>
Status:  </dt>
        <dd>
          <t>permanent</t>
        </dd>
        <dt>
Specification document(s):  </dt>
        <dd>
          <t>This document</t>
        </dd>
      </dl>
      <t>This specification registers the following entry in the HTTP/2 Settings registry
established by <xref target="RFC7540" format="default"/>:</t>
      <dl>
        <dt>
Name:  </dt>
        <dd>
          <t>SETTINGS_NO_RFC7540_PRIORITIES</t>
        </dd>
        <dt>
Code:  </dt>
        <dd>
          <t>0x9</t>
        </dd>
        <dt>
Initial value:  </dt>
        <dd>
          <t>0</t>
        </dd>
        <dt>
Specification:  </dt>
        <dd>
          <t>This document</t>
        </dd>
      </dl>
      <t>This specification registers the following entry in the HTTP/2 Frame Type
registry established by <xref target="RFC7540" format="default"/>:</t>
      <dl>
        <dt>
Frame Type:  </dt>
        <dd>
          <t>PRIORITY_UPDATE</t>
        </dd>
        <dt>
Code:  </dt>
        <dd>
          <t>0x10</t>
        </dd>
        <dt>
Specification:  </dt>
        <dd>
          <t>This document</t>
        </dd>
      </dl>
      <t>This specification registers the following entries in the HTTP/3 Frame Type
registry established by <xref target="HTTP3" format="default"/>:</t>
      <dl>
        <dt>
Frame Type:  </dt>
        <dd>
          <t>PRIORITY_UPDATE</t>
        </dd>
        <dt>
Code:  </dt>
        <dd>
          <t>0xF0700 and 0xF0701</t>
        </dd>
        <dt>
Specification:  </dt>
        <dd>
          <t>This document</t>
        </dd>
      </dl>
      <t>Upon publication, please create the HTTP Priority Parameters registry at
<eref target="https://iana.org/assignments/http-priority">https://iana.org/assignments/http-priority</eref> and populate it with the types
defined in <xref target="parameters" format="default"/>; see <xref target="register" format="default"/> for its associated procedures.</t>
    </section>
  </middle>
  <back>
    <references>
      <name>References</name>
      <references>
        <name>Normative References</name>
        <reference anchor="HTTP">
          <front>
            <title>HTTP Semantics</title>
            <author fullname="Roy T. Fielding">
              <organization>Adobe</organization>
            </author>
            <author fullname="Mark Nottingham">
              <organization>Fastly</organization>
            </author>
            <author fullname="Julian Reschke">
              <organization>greenbytes GmbH</organization>
            </author>
            <date day="12" month="September" year="2021"/>
            <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.

   This document updates RFC 3864 and obsoletes RFC 2818, RFC 7231, RFC
   7232, RFC 7233, RFC 7235, RFC 7538, RFC 7615, RFC 7694, and portions
   of RFC 7230.

              </t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-ietf-httpbis-semantics-19"/>
        </reference>
        <reference anchor="HTTP2">
          <front>
            <title>Hypertext Transfer Protocol Version 2 (HTTP/2)</title>
            <author fullname="Martin Thomson">
              <organization>Mozilla</organization>
            </author>
            <author fullname="Cory Benfield">
              <organization>Apple Inc.</organization>
            </author>
            <date day="26" month="September" year="2021"/>
            <abstract>
              <t>   This specification describes an optimized expression of the semantics
   of the Hypertext Transfer Protocol (HTTP), referred to as HTTP
   version 2 (HTTP/2).  HTTP/2 enables a more efficient use of network
   resources and a reduced latency by introducing field compression and
   allowing multiple concurrent exchanges on the same connection.

   This document obsoletes RFC 7540 and RFC 8740.

              </t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-ietf-httpbis-http2bis-05"/>
        </reference>
        <reference anchor="HTTP3">
          <front>
            <title>Hypertext Transfer Protocol Version 3 (HTTP/3)</title>
            <author fullname="Mike Bishop">
              <organization>Akamai</organization>
            </author>
            <date day="2" month="February" year="2021"/>
            <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.

DO NOT DEPLOY THIS VERSION OF HTTP

   DO NOT DEPLOY THIS VERSION OF HTTP/3 UNTIL IT IS IN AN RFC.  This
   version is still a work in progress.  For trial deployments, please
   use earlier versions.

Note to Readers

   Discussion of this draft takes place on the QUIC working group
   mailing list (quic@ietf.org), which is archived at
   https://mailarchive.ietf.org/arch/search/?email_list=quic.

   Working Group information can be found at https://github.com/quicwg;
   source code and issues list for this draft can be found at
   https://github.com/quicwg/base-drafts/labels/-http.

              </t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-ietf-quic-http-34"/>
        </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">
              <organization/>
            </author>
            <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="STRUCTURED-FIELDS">
          <front>
            <title>Structured Field Values for HTTP</title>
            <author fullname="M. Nottingham" initials="M." surname="Nottingham">
              <organization/>
            </author>
            <author fullname="P-H. Kamp" initials="P-H." surname="Kamp">
              <organization/>
            </author>
            <date month="February" year="2021"/>
            <abstract>
              <t>This document describes a set of data types and associated algorithms that are intended to make it easier and safer to define and handle HTTP header and trailer fields, known as "Structured Fields", "Structured Headers", or "Structured Trailers". It is intended for use by specifications of new HTTP fields that wish to use a common syntax that is more restrictive than traditional HTTP field values.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="8941"/>
          <seriesInfo name="DOI" value="10.17487/RFC8941"/>
        </reference>
        <reference anchor="QUIC">
          <front>
            <title>QUIC: A UDP-Based Multiplexed and Secure Transport</title>
            <author fullname="J. Iyengar" initials="J." role="editor" surname="Iyengar">
              <organization/>
            </author>
            <author fullname="M. Thomson" initials="M." role="editor" surname="Thomson">
              <organization/>
            </author>
            <date month="May" year="2021"/>
            <abstract>
              <t>This document defines the core of the QUIC transport protocol.  QUIC provides applications with flow-controlled streams for structured communication, low-latency connection establishment, and network path migration. QUIC includes security measures that ensure confidentiality, integrity, and availability in a range of deployment circumstances.  Accompanying documents describe the integration of TLS for key negotiation, loss detection, and an exemplary congestion control algorithm.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="9000"/>
          <seriesInfo name="DOI" value="10.17487/RFC9000"/>
        </reference>
        <reference anchor="RFC8126">
          <front>
            <title>Guidelines for Writing an IANA Considerations Section in RFCs</title>
            <author fullname="M. Cotton" initials="M." surname="Cotton">
              <organization/>
            </author>
            <author fullname="B. Leiba" initials="B." surname="Leiba">
              <organization/>
            </author>
            <author fullname="T. Narten" initials="T." surname="Narten">
              <organization/>
            </author>
            <date month="June" year="2017"/>
            <abstract>
              <t>Many protocols make use of points of extensibility that use constants to identify various protocol parameters.  To ensure that the values in these fields do not have conflicting uses and to promote interoperability, their allocations are often coordinated by a central record keeper.  For IETF protocols, that role is filled by the Internet Assigned Numbers Authority (IANA).</t>
              <t>To make assignments in a given registry prudently, guidance describing the conditions under which new values should be assigned, as well as when and how modifications to existing values can be made, is needed.  This document defines a framework for the documentation of these guidelines by specification authors, in order to assure that the provided guidance for the IANA Considerations is clear and addresses the various issues that are likely in the operation of a registry.</t>
              <t>This is the third edition of this document; it obsoletes RFC 5226.</t>
            </abstract>
          </front>
          <seriesInfo name="BCP" value="26"/>
          <seriesInfo name="RFC" value="8126"/>
          <seriesInfo name="DOI" value="10.17487/RFC8126"/>
        </reference>
      </references>
      <references>
        <name>Informative References</name>
        <reference anchor="CVE-2019-9513" target="https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2019-9513">
          <front>
            <title>CVE-2019-9513</title>
            <author>
              <organization>Common Vulnerabilities and Exposures</organization>
            </author>
            <date year="2019" month="March" day="01"/>
          </front>
        </reference>
        <reference anchor="RFC7540">
          <front>
            <title>Hypertext Transfer Protocol Version 2 (HTTP/2)</title>
            <author fullname="M. Belshe" initials="M." surname="Belshe">
              <organization/>
            </author>
            <author fullname="R. Peon" initials="R." surname="Peon">
              <organization/>
            </author>
            <author fullname="M. Thomson" initials="M." role="editor" surname="Thomson">
              <organization/>
            </author>
            <date month="May" year="2015"/>
            <abstract>
              <t>This specification describes an optimized expression of the semantics of the Hypertext Transfer Protocol (HTTP), referred to as HTTP version 2 (HTTP/2).  HTTP/2 enables a more efficient use of network resources and a reduced perception of latency by introducing header field compression and allowing multiple concurrent exchanges on the same connection.  It also introduces unsolicited push of representations from servers to clients.</t>
              <t>This specification is an alternative to, but does not obsolete, the HTTP/1.1 message syntax.  HTTP's existing semantics remain unchanged.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="7540"/>
          <seriesInfo name="DOI" value="10.17487/RFC7540"/>
        </reference>
        <reference anchor="CACHING">
          <front>
            <title>HTTP Caching</title>
            <author fullname="Roy T. Fielding">
              <organization>Adobe</organization>
            </author>
            <author fullname="Mark Nottingham">
              <organization>Fastly</organization>
            </author>
            <author fullname="Julian Reschke">
              <organization>greenbytes GmbH</organization>
            </author>
            <date day="12" month="September" year="2021"/>
            <abstract>
              <t>   The Hypertext Transfer Protocol (HTTP) is a stateless application-
   level protocol for distributed, collaborative, hypertext information
   systems.  This document defines HTTP caches and the associated header
   fields that control cache behavior or indicate cacheable response
   messages.

   This document obsoletes RFC 7234.

              </t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-ietf-httpbis-cache-19"/>
        </reference>
        <reference anchor="RFC8081">
          <front>
            <title>The "font" Top-Level Media Type</title>
            <author fullname="C. Lilley" initials="C." surname="Lilley">
              <organization/>
            </author>
            <date month="February" year="2017"/>
            <abstract>
              <t>This memo serves to register and document the "font" top-level media type, under which subtypes for representation formats for fonts may be registered.  This document also serves as a registration application for a set of intended subtypes, which are representative of some existing subtypes already in use, and currently registered under the "application" tree by their separate registrations.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="8081"/>
          <seriesInfo name="DOI" value="10.17487/RFC8081"/>
        </reference>
        <reference anchor="QUIC-RECOVERY">
          <front>
            <title>QUIC Loss Detection and Congestion Control</title>
            <author fullname="J. Iyengar" initials="J." role="editor" surname="Iyengar">
              <organization/>
            </author>
            <author fullname="I. Swett" initials="I." role="editor" surname="Swett">
              <organization/>
            </author>
            <date month="May" year="2021"/>
            <abstract>
              <t>This document describes loss detection and congestion control mechanisms for QUIC.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="9002"/>
          <seriesInfo name="DOI" value="10.17487/RFC9002"/>
        </reference>
        <reference anchor="FORWARDED">
          <front>
            <title>Forwarded HTTP Extension</title>
            <author fullname="A. Petersson" initials="A." surname="Petersson">
              <organization/>
            </author>
            <author fullname="M. Nilsson" initials="M." surname="Nilsson">
              <organization/>
            </author>
            <date month="June" year="2014"/>
            <abstract>
              <t>This document defines an HTTP extension header field that allows proxy components to disclose information lost in the proxying process, for example, the originating IP address of a request or IP address of the proxy on the user-agent-facing interface.  In a path of proxying components, this makes it possible to arrange it so that each subsequent component will have access to, for example, all IP addresses used in the chain of proxied HTTP requests.</t>
              <t>This document also specifies guidelines for a proxy administrator to anonymize the origin of a request.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="7239"/>
          <seriesInfo name="DOI" value="10.17487/RFC7239"/>
        </reference>
        <reference anchor="I-D.lassey-priority-setting">
          <front>
            <title>Declaring Support for HTTP/2 Priorities</title>
            <author fullname="Brad Lassey">
              <organization>Google</organization>
            </author>
            <author fullname="Lucas Pardue">
              <organization>Cloudflare</organization>
            </author>
            <date day="25" month="July" year="2019"/>
            <abstract>
              <t>   HTTP/2 provides a prioritization scheme but experience has shown that
   implementation support varies.  This document defines an HTTP/2
   setting that endpoints can use as an affirmative signal to indicate
   their support for HTTP/2 Priorities.

              </t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-lassey-priority-setting-00"/>
        </reference>
      </references>
    </references>
    <section anchor="acknowledgements" numbered="true" toc="default">
      <name>Acknowledgements</name>
      <t>Roy Fielding presented the idea of using a header field for representing
priorities in <eref target="http://tools.ietf.org/agenda/83/slides/slides-83-httpbis-5.pdf">http://tools.ietf.org/agenda/83/slides/slides-83-httpbis-5.pdf</eref>.
In <eref target="https://github.com/pmeenan/http3-prioritization-proposal">https://github.com/pmeenan/http3-prioritization-proposal</eref>, Patrick Meenan
advocated for representing the priorities using a tuple of urgency and
concurrency. The ability to disable HTTP/2 prioritization is inspired by
<xref target="I-D.lassey-priority-setting" format="default"/>, authored by Brad Lassey and Lucas Pardue, with
modifications based on feedback that was not incorporated into an update to that
document.</t>
      <t>The motivation for defining an alternative to HTTP/2 priorities is drawn from
discussion within the broad HTTP community. Special thanks to Roberto Peon,
Martin Thomson and Netflix for text that was incorporated explicitly in this
document.</t>
      <t>In addition to the people above, this document owes a lot to the extensive
discussion in the HTTP priority design team, consisting of Alan Frindell,
Andrew Galloni, Craig Taylor, Ian Swett, Kazuho Oku, Lucas Pardue, Matthew Cox,
Mike Bishop, Roberto Peon, Robin Marx, Roy Fielding.</t>
      <t>Yang Chi contributed the section on retransmission scheduling.</t>
    </section>
    <section anchor="change-log" numbered="true" toc="default">
      <name>Change Log</name>
      <t><em>RFC EDITOR: please remove this section before publication</em></t>
      <section anchor="since-draft-ietf-httpbis-priority-08" numbered="true" toc="default">
        <name>Since draft-ietf-httpbis-priority-08</name>
        <ul spacing="normal">
          <li>Changelog fixups</li>
        </ul>
      </section>
      <section anchor="since-draft-ietf-httpbis-priority-07" numbered="true" toc="default">
        <name>Since draft-ietf-httpbis-priority-07</name>
        <ul spacing="normal">
          <li>Relax requirements of receiving SETTINGS_NO_RFC7540_PRIORITIES that changes
value (#1714, #1725)</li>
          <li>Clarify how intermediaries might use frames vs. headers (#1715, #1735)</li>
          <li>Relax requirement when receiving a PRIORITY_UPDATE with an invalid structured
field value (#1741, #1756)</li>
        </ul>
      </section>
      <section anchor="since-draft-ietf-httpbis-priority-06" numbered="true" toc="default">
        <name>Since draft-ietf-httpbis-priority-06</name>
        <ul spacing="normal">
          <li>Focus on editorial changes</li>
          <li>Clarify rules about Sf-Dictionary handling in headers</li>
          <li>Split policy for parameter IANA registry into two sections based on key length</li>
        </ul>
      </section>
      <section anchor="since-draft-ietf-httpbis-priority-05" numbered="true" toc="default">
        <name>Since draft-ietf-httpbis-priority-05</name>
        <ul spacing="normal">
          <li>Renamed SETTINGS_DEPRECATE_RFC7540_PRIORITIES to
SETTINGS_NO_RFC7540_PRIORITIES</li>
          <li>Clarify that senders of the HTTP/2 setting can use any alternative (#1679,
#1705)</li>
        </ul>
      </section>
      <section anchor="since-draft-ietf-httpbis-priority-04" numbered="true" toc="default">
        <name>Since draft-ietf-httpbis-priority-04</name>
        <ul spacing="normal">
          <li>Renamed SETTINGS_DEPRECATE_HTTP2_PRIORITIES to
SETTINGS_DEPRECATE_RFC7540_PRIORITIES (#1601)</li>
          <li>Reoriented text towards RFC7540bis (#1561, #1601)</li>
          <li>Clarify intermediary behavior (#1562)</li>
        </ul>
      </section>
      <section anchor="since-draft-ietf-httpbis-priority-03" numbered="true" toc="default">
        <name>Since draft-ietf-httpbis-priority-03</name>
        <ul spacing="normal">
          <li>Add statement about what this scheme applies to. Clarify extensions can
use it but must define how themselves (#1550, #1559)</li>
          <li>Describe scheduling considerations for the CONNECT method (#1495, #1544)</li>
          <li>Describe scheduling considerations for retransmitted data (#1429, #1504)</li>
          <li>Suggest intermediaries might avoid strict prioritization (#1562)</li>
        </ul>
      </section>
      <section anchor="since-draft-ietf-httpbis-priority-02" numbered="true" toc="default">
        <name>Since draft-ietf-httpbis-priority-02</name>
        <ul spacing="normal">
          <li>Describe considerations for server push prioritization (#1056, #1345)</li>
          <li>Define HTTP/2 PRIORITY_UPDATE ID limits in HTTP/2 terms (#1261, #1344)</li>
          <li>Add a Parameters registry (#1371)</li>
        </ul>
      </section>
      <section anchor="since-draft-ietf-httpbis-priority-01" numbered="true" toc="default">
        <name>Since draft-ietf-httpbis-priority-01</name>
        <ul spacing="normal">
          <li>PRIORITY_UPDATE frame changes (#1096, #1079, #1167, #1262, #1267, #1271)</li>
          <li>Add section to describe server scheduling considerations (#1215, #1232, #1266)</li>
          <li>Remove specific instructions related to intermediary fairness (#1022, #1264)</li>
        </ul>
      </section>
      <section anchor="since-draft-ietf-httpbis-priority-00" numbered="true" toc="default">
        <name>Since draft-ietf-httpbis-priority-00</name>
        <ul spacing="normal">
          <li>Move text around (#1217, #1218)</li>
          <li>Editorial change to the default urgency. The value is 3, which was always the
intent of previous changes.</li>
        </ul>
      </section>
      <section anchor="since-draft-kazuho-httpbis-priority-04" numbered="true" toc="default">
        <name>Since draft-kazuho-httpbis-priority-04</name>
        <ul spacing="normal">
          <li>Minimize semantics of Urgency levels (#1023, #1026)</li>
          <li>Reduce guidance about how intermediary implements merging priority signals
(#1026)</li>
          <li>Remove mention of CDN-Loop (#1062)</li>
          <li>Editorial changes</li>
          <li>Make changes due to WG adoption</li>
          <li>Removed outdated Consideration (#118)</li>
        </ul>
      </section>
      <section anchor="since-draft-kazuho-httpbis-priority-03" numbered="true" toc="default">
        <name>Since draft-kazuho-httpbis-priority-03</name>
        <ul spacing="normal">
          <li>Changed numbering from <tt>[-1,6]</tt> to <tt>[0,7]</tt> (#78)</li>
          <li>Replaced priority scheme negotiation with HTTP/2 priority deprecation (#100)</li>
          <li>Shorten parameter names (#108)</li>
          <li>Expand on considerations (#105, #107, #109, #110, #111, #113)</li>
        </ul>
      </section>
      <section anchor="since-draft-kazuho-httpbis-priority-02" numbered="true" toc="default">
        <name>Since draft-kazuho-httpbis-priority-02</name>
        <ul spacing="normal">
          <li>Consolidation of the problem statement (#61, #73)</li>
          <li>Define SETTINGS_PRIORITIES for negotiation (#58, #69)</li>
          <li>Define PRIORITY_UPDATE frame for HTTP/2 and HTTP/3 (#51)</li>
          <li>Explain fairness issue and mitigations (#56)</li>
        </ul>
      </section>
      <section anchor="since-draft-kazuho-httpbis-priority-01" numbered="true" toc="default">
        <name>Since draft-kazuho-httpbis-priority-01</name>
        <ul spacing="normal">
          <li>Explain how reprioritization might be supported.</li>
        </ul>
      </section>
      <section anchor="since-draft-kazuho-httpbis-priority-00" numbered="true" toc="default">
        <name>Since draft-kazuho-httpbis-priority-00</name>
        <ul spacing="normal">
          <li>Expand urgency levels from 3 to 8.</li>
        </ul>
      </section>
    </section>
  </back>
  <!-- ##markdown-source:
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

-->

</rfc>
