<?xml version="1.0" encoding="UTF-8"?>
  <?xml-stylesheet type="text/xsl" href="rfc2629.xslt" ?>
  <!-- generated by https://github.com/cabo/kramdown-rfc2629 version 1.2.13 -->

<!DOCTYPE rfc SYSTEM "rfc2629.dtd" [
]>

<?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 ipr="trust200902" docName="draft-ietf-httpbis-priority-02" category="std">

  <front>
    <title abbrev="HTTP Priorities">Extensible Prioritization Scheme for HTTP</title>

    <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="2020" month="October" day="01"/>

    <area>Applications and Real-Time</area>
    <workgroup>HTTP</workgroup>
    <keyword>Internet-Draft</keyword>

    <abstract>


<t>This document describes a scheme for prioritizing HTTP responses. This scheme
expresses the priority of each HTTP response using absolute values, rather than
as a relative relationship between a group of HTTP responses.</t>

<t>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 the responses. These share a common format structure
that is designed to provide future extensibility.</t>



    </abstract>


    <note title="Note to Readers">


<t><spanx style="emph">RFC EDITOR: please remove this section before publication</spanx></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" title="Introduction">

<t>It is common for an HTTP (<xref target="RFC7230"/>) resource representation to have
relationships to one or more other resources.  Clients will often discover these
relationships while processing a retrieved representation, leading to further
retrieval requests.  Meanwhile, the nature of the relationship determines
whether the client is blocked from continuing to process locally available
resources.  For example, visual rendering of an HTML document 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>To provide meaningful presentation of a 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.</t>

<t>HTTP/2 (<xref target="RFC7540"/>) provides such a prioritization scheme. A client sends a
series of PRIORITY frames to communicate to the server a “priority tree”; this
represents the client’s preferred ordering and weighted distribution of the
bandwidth among the HTTP responses. However, the design and implementation of
this scheme has been observed to have shortcomings, explained in <xref target="motivation"/>.</t>

<t>This document defines the Priority HTTP header field that can be used by both
client and server to specify the precedence of HTTP responses in a standardized,
extensible, protocol-version-independent, end-to-end format. Along with the
protocol-version-specific frame for reprioritization, this prioritization scheme
acts as a substitute for the original prioritization scheme of HTTP/2.</t>

<section anchor="notational-conventions" title="Notational Conventions">

<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"/>.</t>

<t>The terms sf-token and sf-boolean are imported from
<xref target="STRUCTURED-FIELDS"/>.</t>

<t>Example HTTP requests and responses use the HTTP/2-style formatting from
<xref target="RFC7540"/>.</t>

<t>This document uses the variable-length integer encoding from
<xref target="I-D.ietf-quic-transport"/>.</t>

<t>The term control stream is used to describe the HTTP/2 stream with identifier
0x0, and HTTP/3 control stream; see <xref target="I-D.ietf-quic-http"/>, Section 6.2.1.</t>

</section>
</section>
<section anchor="motivation" title="Motivation for Replacing HTTP/2 Priorities">

<t>An important feature of any implementation of a protocol that provides
multiplexing is the ability to prioritize the sending of information. This was
an important realization in the design of HTTP/2. Prioritization is a
difficult problem, so it will always be suboptimal, particularly if one endpoint
operates in ignorance of the needs of its peer.</t>

<t>HTTP/2 introduced a complex prioritization signaling scheme that used a
combination of dependencies and weights, formed into an unbalanced tree. This
scheme has suffered from poor deployment and interoperability.</t>

<t>The rich flexibility of client-driven HTTP/2 prioritization tree building is
rarely exercised. Experience has shown that clients tend to choose a single
model optimized for a web 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 HTTP/2 server implementations do not include support for the priority
scheme. 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 the 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>The HTTP/2 scheme 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. The scheme 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>HTTP/2 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 HTTP/2 implementations. One
attack, <xref target="CVE-2019-9513"></xref> aka “Resource Loop”, is based on manipulation of the
priority tree.</t>

<t>The HTTP/2 scheme depends on in-order delivery of signals, leading to challenges
in porting the scheme to protocols that do not provide global ordering. For
example, the scheme cannot be used in HTTP/3 <xref target="I-D.ietf-quic-http"/> without
changing the signal and its processing.</t>

<t>Considering the problems with deployment and adaptability to HTTP/3, retaining
the HTTP/2 priority scheme increases the complexity of the entire system without
any evidence that the value it provides offsets that complexity. In fact,
multiple experiments from independent research have shown that simpler schemes
can reach at least equivalent performance characteristics compared to the more
complex HTTP/2 setups seen in practice, at least for the web use case.</t>

<section anchor="disabling" title="Disabling HTTP/2 Priorities">

<t>The problems and insights set out above are motivation for allowing endpoints to
opt out of using the HTTP/2 priority scheme, in favor of using an alternative
such as the scheme defined in this specification. The
SETTINGS_DEPRECATE_HTTP2_PRIORITIES setting described below enables endpoints to
understand their peer’s intention. The value of the parameter MUST
be 0 or 1. Any value other than 0 or 1 MUST be treated as a connection error
(see <xref target="RFC7540"/>, Section 5.4.1) of type PROTOCOL_ERROR.</t>

<t>Endpoints MUST send this SETTINGS parameter as part of the first SETTINGS frame.
When the peer receives the first SETTINGS frame, it learns the sender has
deprecated the HTTP/2 priority scheme if it receives the
SETTINGS_DEPRECATE_HTTP2_PRIORITIES parameter with the value of 1.</t>

<t>A sender MUST NOT change the SETTINGS_DEPRECATE_HTTP2_PRIORITIES parameter value
after the first SETTINGS frame. Detection of a change by a receiver MUST be
treated as a connection error of type PROTOCOL_ERROR.</t>

<t>Until the client receives the SETTINGS frame from the server, the client SHOULD
send both the priority signal defined in the HTTP/2 priority scheme and also
that of this prioritization scheme. Once the client learns that the HTTP/2
priority scheme is deprecated, it SHOULD stop sending the HTTP/2 priority
signals. If the client learns that the HTTP/2 priority scheme is not deprecated,
it SHOULD stop sending PRIORITY_UPDATE frames (<xref target="h2-update-frame"/>), but MAY
continue sending the Priority header field (<xref target="header-field"/>), 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>

<t>The SETTINGS frame precedes any priority signal sent from a client in HTTP/2, so
a server can determine if it should respect the HTTP/2 scheme before building
state. A server that receives SETTINGS_DEPRECATE_HTTP2_PRIORITIES MUST ignore
HTTP/2 priority signals.</t>

<t>Where both endpoints disable HTTP/2 priorities, the client is expected to send
this scheme’s priority signal. Handling of omitted signals is described in
<xref target="parameters"/>.</t>

</section>
</section>
<section anchor="parameters" title="Priority Parameters">

<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"/>) 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 frames (<xref target="h2-update-frame"/> and
<xref target="h3-update-frame"/>) are used by clients to transmit the same information on a
single hop.  If intermediaries want to specify prioritization on a multiplexed
HTTP connection, they SHOULD use a PRIORITY_UPDATE frame and SHOULD NOT change
the Priority header field.</t>

<t>In both cases, the set of priority parameters is encoded as a Structured Fields
Dictionary (<xref target="STRUCTURED-FIELDS"/>).</t>

<t>This document defines the urgency(<spanx style="verb">u</spanx>) and incremental(<spanx style="verb">i</spanx>) 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"/>.</t>

<t>Unknown parameters, parameters with out-of-range values or values of unexpected
types MUST be ignored.</t>

<section anchor="urgency" title="Urgency">

<t>The urgency parameter (<spanx style="verb">u</spanx>) takes an integer between 0 and 7, in descending
order of priority. This range provides sufficient granularity for prioritizing
responses for ordinary web browsing, at minimal complexity.</t>

<t>The value is encoded as an sf-integer. The default value is 3.</t>

<t>This parameter indicates the sender’s recommendation, based on the expectation
that the server would transmit HTTP responses in the order of their urgency
values if possible. 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
<spanx style="verb">0</spanx>:</t>

<figure><artwork type="example"><![CDATA[
:method = GET
:scheme = https
:authority = example.net
:path = /style.css
priority = u=0
]]></artwork></figure>

<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"/>).</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" title="Incremental">

<t>The incremental parameter (<spanx style="verb">i</spanx>) 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 (<spanx style="verb">0</spanx>).</t>

<t>A server might distribute the bandwidth of a connection between incremental
responses that share the same urgency, hoping that providing those responses in
parallel would be more helpful to the client than delivering the responses one
by one.</t>

<t>If a client makes concurrent requests with the incremental parameter set to
false, there is no benefit serving responses in parallel because the client is
not going to process those responses incrementally. Serving non-incremental
responses one by one, in the order in which those requests were generated is
considered to be the best strategy.</t>

<t>The following example shows a request for a JPEG file with the urgency parameter
set to <spanx style="verb">5</spanx> and the incremental parameter set to <spanx style="verb">true</spanx>.</t>

<figure><artwork type="example"><![CDATA[
:method = GET
:scheme = https
:authority = example.net
:path = /image.jpg
priority = u=5, i
]]></artwork></figure>

</section>
<section anchor="defining-new-parameters" title="Defining New Parameters">

<t>When attempting to extend priorities, care must be taken to ensure any use of
existing parameters leaves them either unchanged or modified in a way that is
backwards compatible for peers that are unaware of the extended meaning.</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 <spanx style="verb">visible</spanx> parameter to indicate if the resource being requested is
within the viewport.</t>

</section>
</section>
<section anchor="header-field" title="The Priority HTTP Header Field">

<t>The Priority HTTP header field can appear in requests and responses. A client
uses it to specify the priority of the response. A server uses it to inform
the client that the priority was overwritten. An intermediary can use the
Priority information from client requests and server responses to correct or
amend the precedence to suit it (see <xref target="merging"/>).</t>

<t>The Priority header field is an end-to-end signal of the request priority from
the client or the response priority from the server.</t>

<t>As is the ordinary case for HTTP caching (<xref target="RFC7234"/>), 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>

<t>An endpoint that fails to parse the Priority header field SHOULD use default
parameter values.</t>

</section>
<section anchor="reprioritization" title="Reprioritization">

<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 <spanx style="verb">u=7</spanx> (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 <spanx style="verb">u=0</spanx>. The PRIORITY_UPDATE frame (<xref target="frame"/>) can be used for such
reprioritization.</t>

</section>
<section anchor="frame" title="The PRIORITY_UPDATE Frame">

<t>This document specifies a new PRIORITY_UPDATE frame for HTTP/2 (<xref target="RFC7540"/>)
and HTTP/3 (<xref target="I-D.ietf-quic-http"/>). 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 MUST 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_FRAME_ERROR.</t>

<t>A client MAY send a PRIORITY_UPDATE frame before the stream that it references
is open. 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. (TODO: consider resolving #1261, and adding more text about bounds).
Although there is no limit to the number PRIORITY_UPDATES that can be sent,
storing only the most recently received frame limits resource commitment.</t>

<section anchor="h2-update-frame" title="HTTP/2 PRIORITY_UPDATE Frame">

<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 (<xref target="RFC7540"/>, Section 4.1) 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 title="HTTP/2 PRIORITY_UPDATE Frame Payload" anchor="fig-h2-reprioritization-frame"><artwork type="drawing"><![CDATA[
  0                   1                   2                   3
  0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
 +---------------------------------------------------------------+
 |R|                Prioritized Stream ID (31)                   |
 +---------------------------------------------------------------+
 |                   Priority Field Value (*)                  ...
 +---------------------------------------------------------------+
]]></artwork></figure>

<t>The PRIORITY_UPDATE frame payload has the following fields:</t>

<t><list style="hanging">
  <t hangText='R:'>
  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>
  <t hangText='Prioritized Stream ID:'>
  A 31-bit stream identifier for the stream that is the target of the priority
update.</t>
  <t hangText='Priority Field Value:'>
  The priority update value in ASCII text, encoded using Structured Fields.</t>
</list></t>

<t>The Prioritized Stream ID MUST be within the stream limit. If a
server receives a PRIORITY_UPDATE with a Prioritized Stream ID that is beyond
the stream limits, this SHOULD be treated as 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" title="HTTP/3 PRIORITY_UPDATE Frame">

<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
(<xref target="I-D.ietf-quic-http"/>, Section 6.2.1). 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 title="HTTP/3 PRIORITY_UPDATE Frame" anchor="fig-h3-reprioritization-frame"><artwork type="drawing"><![CDATA[
HTTP/3 PRIORITY_UPDATE Frame {
  Type (i) = 0xF0700..0xF0701,
  Length (i),
  Prioritized Element ID (i),
  Priority Field Value (..),
}
]]></artwork></figure>

<t>The PRIORITY_UPDATE frame payload has the following fields:</t>

<t><list style="hanging">
  <t hangText='Prioritized Element ID:'>
  The stream ID or push ID that is the target of the priority update.</t>
  <t hangText='Priority Field Value:'>
  The priority update value in ASCII text, encoded using Structured Fields.</t>
</list></t>

<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.</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" title="Merging Client- and Server-Driven Parameters">

<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"/> 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"/>).</t>

<t>As a non-normative example, when the client sends an HTTP request with the
urgency parameter set to <spanx style="verb">5</spanx> and the incremental parameter set to <spanx style="verb">true</spanx></t>

<figure><artwork type="example"><![CDATA[
:method = GET
:scheme = https
:authority = example.net
:path = /menu.png
priority = u=5, i
]]></artwork></figure>

<t>and the origin responds with</t>

<figure><artwork type="example"><![CDATA[
:status = 200
content-type = image/png
priority = u=1
]]></artwork></figure>

<t>the intermediary might alter its understanding of the urgency from <spanx style="verb">5</spanx> to <spanx style="verb">1</spanx>,
because it prefers the server-provided value over the client’s. The incremental
value continues to be <spanx style="verb">true</spanx>, the value specified by the client, as the server did
not specify the incremental(<spanx style="verb">i</spanx>) parameter.</t>

</section>
<section anchor="client-scheduling" title="Client Scheduling">

<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" title="Server Scheduling">

<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"/>), sending higher urgency responses before lower urgency responses.</t>

<t>It is RECOMMENDED that, when possible, servers respect the incremental
parameter (<xref target="incremental"/>). Non-incremental responses of the same urgency
SHOULD be served 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. Incremental responses of the same
urgency SHOULD be served in round-robin manner.</t>

<t>The incremental parameter indicates how a client processes response bytes as
they arrive. Non-incremental resources are only used when all of the response
payload has been received. Incremental resources are used as parts, or chunks,
of the response payload are received. Therefore, the timing of response data
reception at the client, such as the time to early bytes or the time to receive
the entire payload, plays an important role in perceived performance. Timings
depend on resource size but this scheme provides no explicit guidance about how
a server should use size as an input to prioritization. Instead, the following
examples demonstrate how a server that strictly abides the scheduling guidance
based on urgency and request generation order could find that early requests
prevent serving of later requests.</t>

<t><list style="numbers">
  <t>At the same urgency level, a non-incremental request for a large resource
followed by an incremental request for a small resource.</t>
  <t>At the same urgency level, an incremental request of indeterminate length
followed by a non-incremental large resource.</t>
</list></t>

<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>

</section>
<section anchor="fairness" title="Fairness">

<t>As a general guideline, a server SHOULD NOT use priority information for making
schedule 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>

<t>TODO: Discuss if we should add a signal that mitigates this issue. For example,
we might add a SETTINGS parameter that indicates the next hop that the
connection is NOT coalesced (see https://github.com/kazuho/draft-kazuho-httpbis-priority/issues/99).</t>

<section anchor="coalescing-intermediaries" title="Coalescing Intermediaries">

<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 serve the responses in 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>

<t><list style="symbols">
  <t>Forwarded, X-Forwarded-For (<xref target="RFC7239"/>)</t>
  <t>Via (<xref target="RFC7230"/>, Section 5.7.1)</t>
</list></t>

</section>
<section anchor="http1x-back-ends" title="HTTP/1.x Back Ends">

<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. As HTTP/1.1 and older do not provide a way
to concurrently transmit multiple responses, there is no immediate fairness
issue in protocol. 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" title="Intentional Introduction of Unfairness">

<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="why-use-an-end-to-end-header-field" title="Why use an End-to-End Header Field?">

<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" title="Security Considerations">

<t><xref target="CVE-2019-9513"></xref> aka “Resource Loop”, is a DoS attack based on manipulation of
the HTTP/2 priority tree. Extensible priorities does not use stream
dependencies, which mitigates this vulnerability.</t>

<t>TBD: depending on the outcome of reprioritization discussions, following
paragraphs may change or be removed.</t>

<t><xref target="RFC7540"/>, Section 5.3.4 describes a scenario where closure of streams in the
priority tree could cause suboptimal prioritization. To avoid this, <xref target="RFC7540"/>
states that “an endpoint SHOULD retain stream prioritization state for a period
after streams become closed”. Retaining state for streams no longer counted
towards stream concurrency consumes server resources. Furthermore, <xref target="RFC7540"/>
identifies that reprioritization of a closed stream could affect dependents; it
recommends updating the priority tree if sufficient state is stored, which will
also consume server resources. To limit this commitment, it is stated that “The
amount of prioritization state that is retained MAY be limited” and “If a limit
is applied, endpoints SHOULD maintain state for at least as many streams as
allowed by their setting for SETTINGS_MAX_CONCURRENT_STREAMS.”. Extensible
priorities does not use stream dependencies, which minimizes most of the
resource concerns related to this scenario.</t>

<t><xref target="RFC7540"/>, Section 5.3.4 also presents considerations about the state required
to store priority information about streams in an “idle” state. This state can
be limited by adopting the guidance about concurrency limits described above.
Extensible priorities is subject to a similar consideration because
PRIORITY_UPDATE frames may arrive before the request that they reference. A
server is required to store the information in order to apply the most
up-to-date signal to the request. However, HTTP/3 implementations might have
practical barriers to determining reasonable stream concurrency limits depending
on the information that is available to them from the QUIC transport layer.
TODO: so what can we suggest?</t>

</section>
<section anchor="iana-considerations" title="IANA Considerations">

<t>This specification registers the following entry in the Permanent Message Header
Field Names registry established by <xref target="RFC3864"/>:</t>

<t><list style="hanging">
  <t hangText='Header field name:'>
  Priority</t>
  <t hangText='Applicable protocol:'>
  http</t>
  <t hangText='Status:'>
  standard</t>
  <t hangText='Author/change controller:'>
  IETF</t>
  <t hangText='Specification document(s):'>
  This document</t>
  <t hangText='Related information:'>
  n/a</t>
</list></t>

<t>This specification registers the following entry in the HTTP/2 Settings registry
established by <xref target="RFC7540"/>:</t>

<t><list style="hanging">
  <t hangText='Name:'>
  SETTINGS_DEPRECATE_HTTP2_PRIORITIES</t>
  <t hangText='Code:'>
  0x9</t>
  <t hangText='Initial value:'>
  0</t>
  <t hangText='Specification:'>
  This document</t>
</list></t>

<t>This specification registers the following entry in the HTTP/2 Frame Type
registry established by <xref target="RFC7540"/>:</t>

<t><list style="hanging">
  <t hangText='Frame Type:'>
  PRIORITY_UPDATE</t>
  <t hangText='Code:'>
  0x10</t>
  <t hangText='Specification:'>
  This document</t>
</list></t>

<t>This specification registers the following entries in the HTTP/3 Frame Type
registry established by <xref target="I-D.ietf-quic-http"/>:</t>

<t><list style="hanging">
  <t hangText='Frame Type:'>
  PRIORITY_UPDATE</t>
  <t hangText='Code:'>
  0xF0700 and 0xF0701</t>
  <t hangText='Specification:'>
  This document</t>
</list></t>

</section>


  </middle>

  <back>

    <references title='Normative References'>





<reference  anchor="RFC7230" target='https://www.rfc-editor.org/info/rfc7230'>
<front>
<title>Hypertext Transfer Protocol (HTTP/1.1): Message Syntax and Routing</title>
<author initials='R.' surname='Fielding' fullname='R. Fielding' role='editor'><organization /></author>
<author initials='J.' surname='Reschke' fullname='J. Reschke' role='editor'><organization /></author>
<date year='2014' month='June' />
<abstract><t>The Hypertext Transfer Protocol (HTTP) is a stateless application-level protocol for distributed, collaborative, hypertext information systems.  This document provides an overview of HTTP architecture and its associated terminology, defines the &quot;http&quot; and &quot;https&quot; Uniform Resource Identifier (URI) schemes, defines the HTTP/1.1 message syntax and parsing requirements, and describes related security concerns for implementations.</t></abstract>
</front>
<seriesInfo name='RFC' value='7230'/>
<seriesInfo name='DOI' value='10.17487/RFC7230'/>
</reference>



<reference  anchor="RFC7540" target='https://www.rfc-editor.org/info/rfc7540'>
<front>
<title>Hypertext Transfer Protocol Version 2 (HTTP/2)</title>
<author initials='M.' surname='Belshe' fullname='M. Belshe'><organization /></author>
<author initials='R.' surname='Peon' fullname='R. Peon'><organization /></author>
<author initials='M.' surname='Thomson' fullname='M. Thomson' role='editor'><organization /></author>
<date year='2015' month='May' />
<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="RFC2119" target='https://www.rfc-editor.org/info/rfc2119'>
<front>
<title>Key words for use in RFCs to Indicate Requirement Levels</title>
<author initials='S.' surname='Bradner' fullname='S. Bradner'><organization /></author>
<date year='1997' month='March' />
<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 initials='M' surname='Nottingham' fullname='Mark Nottingham'>
    <organization />
</author>

<author initials='P' surname='Kamp' fullname='Poul-Henning Kamp'>
    <organization />
</author>

<date month='June' day='3' year='2020' />

<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='Internet-Draft' value='draft-ietf-httpbis-header-structure-19' />
<format type='TXT'
        target='http://www.ietf.org/internet-drafts/draft-ietf-httpbis-header-structure-19.txt' />
</reference>



<reference anchor="I-D.ietf-quic-transport">
<front>
<title>QUIC: A UDP-Based Multiplexed and Secure Transport</title>

<author initials='J' surname='Iyengar' fullname='Jana Iyengar'>
    <organization />
</author>

<author initials='M' surname='Thomson' fullname='Martin Thomson'>
    <organization />
</author>

<date month='September' day='24' year='2020' />

<abstract><t>This document defines the core of the QUIC transport protocol. Accompanying documents describe QUIC's loss detection and congestion control and the use of TLS for key negotiation.  Note to Readers  Discussion of this draft takes place on the QUIC working group mailing list (quic@ietf.org (mailto: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/-transport.</t></abstract>

</front>

<seriesInfo name='Internet-Draft' value='draft-ietf-quic-transport-31' />
<format type='TXT'
        target='http://www.ietf.org/internet-drafts/draft-ietf-quic-transport-31.txt' />
</reference>



<reference anchor="I-D.ietf-quic-http">
<front>
<title>Hypertext Transfer Protocol Version 3 (HTTP/3)</title>

<author initials='M' surname='Bishop' fullname='Mike Bishop'>
    <organization />
</author>

<date month='September' day='24' year='2020' />

<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='Internet-Draft' value='draft-ietf-quic-http-31' />
<format type='TXT'
        target='http://www.ietf.org/internet-drafts/draft-ietf-quic-http-31.txt' />
</reference>




    </references>

    <references title='Informative References'>

<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="RFC7234" target='https://www.rfc-editor.org/info/rfc7234'>
<front>
<title>Hypertext Transfer Protocol (HTTP/1.1): Caching</title>
<author initials='R.' surname='Fielding' fullname='R. Fielding' role='editor'><organization /></author>
<author initials='M.' surname='Nottingham' fullname='M. Nottingham' role='editor'><organization /></author>
<author initials='J.' surname='Reschke' fullname='J. Reschke' role='editor'><organization /></author>
<date year='2014' month='June' />
<abstract><t>The Hypertext Transfer Protocol (HTTP) is a stateless \%application- level protocol for distributed, collaborative, hypertext information systems.  This document defines HTTP caches and the associated header fields that control cache behavior or indicate cacheable response messages.</t></abstract>
</front>
<seriesInfo name='RFC' value='7234'/>
<seriesInfo name='DOI' value='10.17487/RFC7234'/>
</reference>



<reference  anchor="RFC8081" target='https://www.rfc-editor.org/info/rfc8081'>
<front>
<title>The &quot;font&quot; Top-Level Media Type</title>
<author initials='C.' surname='Lilley' fullname='C. Lilley'><organization /></author>
<date year='2017' month='February' />
<abstract><t>This memo serves to register and document the &quot;font&quot; 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 &quot;application&quot; tree by their separate registrations.</t></abstract>
</front>
<seriesInfo name='RFC' value='8081'/>
<seriesInfo name='DOI' value='10.17487/RFC8081'/>
</reference>



<reference  anchor="RFC7239" target='https://www.rfc-editor.org/info/rfc7239'>
<front>
<title>Forwarded HTTP Extension</title>
<author initials='A.' surname='Petersson' fullname='A. Petersson'><organization /></author>
<author initials='M.' surname='Nilsson' fullname='M. Nilsson'><organization /></author>
<date year='2014' month='June' />
<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="RFC3864" target='https://www.rfc-editor.org/info/rfc3864'>
<front>
<title>Registration Procedures for Message Header Fields</title>
<author initials='G.' surname='Klyne' fullname='G. Klyne'><organization /></author>
<author initials='M.' surname='Nottingham' fullname='M. Nottingham'><organization /></author>
<author initials='J.' surname='Mogul' fullname='J. Mogul'><organization /></author>
<date year='2004' month='September' />
<abstract><t>This specification defines registration procedures for the message header fields used by Internet mail, HTTP, Netnews and other applications.  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='90'/>
<seriesInfo name='RFC' value='3864'/>
<seriesInfo name='DOI' value='10.17487/RFC3864'/>
</reference>



<reference anchor="I-D.lassey-priority-setting">
<front>
<title>Declaring Support for HTTP/2 Priorities</title>

<author initials='B' surname='Lassey' fullname='Bradford Lassey'>
    <organization />
</author>

<author initials='L' surname='Pardue' fullname='Lucas Pardue'>
    <organization />
</author>

<date month='July' day='25' 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' />
<format type='TXT'
        target='http://www.ietf.org/internet-drafts/draft-lassey-priority-setting-00.txt' />
</reference>




    </references>


<section anchor="acknowledgements" title="Acknowledgements">

<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
advocates for representing the priorities using a tuple of urgency and
concurrency. The ability to deprecate HTTP/2 prioritization is based on
<xref target="I-D.lassey-priority-setting"/>, 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>

</section>
<section anchor="change-log" title="Change Log">

<section anchor="since-draft-ietf-httpbis-priority-01" title="Since draft-ietf-httpbis-priority-01">

<t><list style="symbols">
  <t>PRIORITY_UPDATE frame changes (#1096, #1079, #1167, #1262, #1267, #1271)</t>
  <t>Add section to describe server scheduling considerations (#1215, #1232, #1266)</t>
  <t>Remove specific instructions related to intermediary fairness (#1022, #1264)</t>
</list></t>

</section>
<section anchor="since-draft-ietf-httpbis-priority-00" title="Since draft-ietf-httpbis-priority-00">

<t><list style="symbols">
  <t>Move text around (#1217, #1218)</t>
  <t>Editorial change to the default urgency. The value is 3, which was always the
intent of previous changes.</t>
</list></t>

</section>
<section anchor="since-draft-kazuho-httpbis-priority-04" title="Since draft-kazuho-httpbis-priority-04">

<t><list style="symbols">
  <t>Minimize semantics of Urgency levels (#1023, #1026)</t>
  <t>Reduce guidance about how intermediary implements merging priority signals
(#1026)</t>
  <t>Remove mention of CDN-Loop (#1062)</t>
  <t>Editorial changes</t>
  <t>Make changes due to WG adoption</t>
  <t>Removed outdated Consideration (#118)</t>
</list></t>

</section>
<section anchor="since-draft-kazuho-httpbis-priority-03" title="Since draft-kazuho-httpbis-priority-03">

<t><list style="symbols">
  <t>Changed numbering from <spanx style="verb">[-1,6]</spanx> to <spanx style="verb">[0,7]</spanx> (#78)</t>
  <t>Replaced priority scheme negotiation with HTTP/2 priority deprecation (#100)</t>
  <t>Shorten parameter names (#108)</t>
  <t>Expand on considerations (#105, #107, #109, #110, #111, #113)</t>
</list></t>

</section>
<section anchor="since-draft-kazuho-httpbis-priority-02" title="Since draft-kazuho-httpbis-priority-02">

<t><list style="symbols">
  <t>Consolidation of the problem statement (#61, #73)</t>
  <t>Define SETTINGS_PRIORITIES for negotiation (#58, #69)</t>
  <t>Define PRIORITY_UPDATE frame for HTTP/2 and HTTP/3 (#51)</t>
  <t>Explain fairness issue and mitigations (#56)</t>
</list></t>

</section>
<section anchor="since-draft-kazuho-httpbis-priority-01" title="Since draft-kazuho-httpbis-priority-01">

<t><list style="symbols">
  <t>Explain how reprioritization might be supported.</t>
</list></t>

</section>
<section anchor="since-draft-kazuho-httpbis-priority-00" title="Since draft-kazuho-httpbis-priority-00">

<t><list style="symbols">
  <t>Expand urgency levels from 3 to 8.</t>
</list></t>

</section>
</section>


  </back>

<!-- ##markdown-source:
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
KViTjBZKjskoe5sPOGEyzKKjnBpgQcO5imwVofKhil6PUiUAu40OEqb1Sw52
fEKWRq9Y7cFEkSQ4oWsAtVXhqnf9FAYupUotuxrMOkZbaJZnXUHed/J+Vg3j
rRJD3X7tW44HneHYSSHuOhqlWyI4zsgwigA8p0YAEerchcg5U8gJryvxrAr0
GVPG/rdPjnIxAPStME2hcrkWnqRZVNDiKPdzVdyXwID0w4w4Jd/EHclr20Sm
B/ufXZ470kfk3Jg8tCB2qX60lxuqlhVg09VI71xfnF4c+RRXGrEgL9PD/YMn
+wPJUqRJkkXf2o+tZK/SGxpAm2ADz6tuNk+8Y0W+YCuNIE23GMPovWVeOfFd
Olk/gJVWXLlaFqv7toBJTi9JUtoX8AdcJnuDXb7eFpzRjwInCa1b0A7Kmxd7
H/f3Hvlc6zQw/NW6gmtH79VEkR5CZKJiTdcE5d53Gnu7MzQUOL46OT+n3RuE
TEJFDtteZba5r4MBqwPJQZEJBPThUwI2pdJRIp14Inq05W4F7k0u4vh3W1d6
Z+/jHqCyyxDN3bIxbHEKNJfyKj7mt7Feuj8VcHvyFzoasWIZ4xJa7+n1/+1v
+NvBhr8d0vf34bND/YN+rJ/op/qZfv4tf1P634f/2v/+Xel/XP6jPzVf4gX0
Cdhx5xA2bv1///htZrFh5I24Yuf7DZMYjUa/xSzQu/vpSD+c5rMhyIS+wTIU
DYmNWF48uFemvDWrojLZA+cw28iqS36Iaq/axJXO1v+RUpdH6kgfh8Db/nCc
tw7TUbTWLgBpUJ2PJP3hA+zFldTBgRcE8BEwHZ2A2lK4sSsRUdLhYjPV5cDh
V3ohf37A51Mg2N/EJzzjQ56pU3WRbHBlNSma2GpAYbseFs7hhQlH4PuuYynH
T7s4fCryXAifRd9agkrqeuvxvyNH5EmVRZD6oexGnyRyD84SCbX5JY4eY7uq
KBstfUkjZqGDKF8px9SaHKOY2FbbzqvXe+cKg1N5LWoQ+Ea+ZKTN7IU6yH//
6+VrHKv7ElYlT9L9r1NfeJ3DBofbscHhVmyw/qUUG7zce7pHCej84/4WpKAC
UtC/CVJQASkkNnF0Cl1oh7FgxHUUbAq7TbKDuJCJkH0ZTOitYMJlJtst/mCx
MbecFxG+VKQ41Y66eaO8lyk1VBrnLPuG8faT8SLU5SXDxg13koHcFM6twTyc
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
kAAA

-->

</rfc>

