rfc9218.original.xml | rfc9218.xml | |||
---|---|---|---|---|
<?xml version='1.0' encoding='utf-8'?> | <?xml version="1.0" encoding="UTF-8"?> | |||
<!-- [CS] updated by Chris 01/21/22 --> | ||||
<!-- draft submitted in xml v3 --> | ||||
<!DOCTYPE rfc [ | <!DOCTYPE rfc [ | |||
<!ENTITY nbsp " "> | <!ENTITY nbsp " "> | |||
<!ENTITY zwsp "​"> | <!ENTITY zwsp "​"> | |||
<!ENTITY nbhy "‑"> | <!ENTITY nbhy "‑"> | |||
<!ENTITY wj "⁠"> | <!ENTITY wj "⁠"> | |||
]> | ]> | |||
<?xml-stylesheet type="text/xsl" href="rfc2629.xslt" ?> | ||||
<!-- generated by https://github.com/cabo/kramdown-rfc2629 version 1.5.24 --> | <!-- generated by https://github.com/cabo/kramdown-rfc2629 version 1.5.24 --> | |||
<?rfc docindent="yes"?> | <rfc xmlns:xi="http://www.w3.org/2001/XInclude" ipr="trust200902" docName="draft | |||
<?rfc strict="yes"?> | -ietf-httpbis-priority-12" number="9218" submissionType="IETF" category="std" co | |||
<?rfc compact="yes"?> | nsensus="true" tocInclude="true" sortRefs="true" symRefs="true" obsoletes="" upd | |||
<?rfc comments="yes"?> | ates="" xml:lang="en" version="3"> | |||
<?rfc inline="yes"?> | ||||
<rfc xmlns:xi="http://www.w3.org/2001/XInclude" ipr="trust200902" docName="draft | ||||
-ietf-httpbis-priority-12" category="std" consensus="true" tocInclude="true" sor | ||||
tRefs="true" symRefs="true" obsoletes="" updates="" submissionType="IETF" xml:la | ||||
ng="en" version="3"> | ||||
<!-- xml2rfc v2v3 conversion 3.12.0 --> | <!-- xml2rfc v2v3 conversion 3.12.0 --> | |||
<front> | <front> | |||
<title abbrev="HTTP Priorities">Extensible Prioritization Scheme for HTTP</t itle> | <title abbrev="HTTP Priorities">Extensible Prioritization Scheme for HTTP</t itle> | |||
<seriesInfo name="Internet-Draft" value="draft-ietf-httpbis-priority-12"/> | <seriesInfo name="RFC" value="9218"/> | |||
<author initials="K." surname="Oku" fullname="Kazuho Oku"> | <author asciiFullname="Kazuho Oku" fullname="奥 一穂"> | |||
<organization>Fastly</organization> | <organization>Fastly</organization> | |||
<address> | <address> | |||
<email>kazuhooku@gmail.com</email> | <email>kazuhooku@gmail.com</email> | |||
</address> | </address> | |||
</author> | </author> | |||
<author initials="L." surname="Pardue" fullname="Lucas Pardue"> | <author initials="L." surname="Pardue" fullname="Lucas Pardue"> | |||
<organization>Cloudflare</organization> | <organization>Cloudflare</organization> | |||
<address> | <address> | |||
<email>lucaspardue.24.7@gmail.com</email> | <email>lucaspardue.24.7@gmail.com</email> | |||
</address> | </address> | |||
</author> | </author> | |||
<date year="2022" month="January" day="18"/> | <date year="2022" month="June"/> | |||
<area>Applications and Real-Time</area> | <area>Applications and Real-Time</area> | |||
<workgroup>HTTP</workgroup> | <workgroup>HTTP</workgroup> | |||
<keyword>Internet-Draft</keyword> | <keyword>Response priority</keyword> | |||
<keyword>Stream multiplexing</keyword> | ||||
<keyword>Reprioritization</keyword> | ||||
<keyword>Server scheduling</keyword> | ||||
<abstract> | <abstract> | |||
<t>This document describes a scheme that allows an HTTP client to communic ate its | <t>This document describes a scheme that allows an HTTP client to communic ate its | |||
preferences for how the upstream server prioritizes responses to its requests, | 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 | 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 | should be prioritized when they are forwarded. This document defines the | |||
Priority header field for communicating the initial priority in an HTTP | Priority header field for communicating the initial priority in an HTTP | |||
version-independent manner, as well as HTTP/2 and HTTP/3 frames for | version-independent manner, as well as HTTP/2 and HTTP/3 frames for | |||
reprioritizing responses. These share a common format structure that is designed | reprioritizing responses. These share a common format structure that is designed | |||
to provide future extensibility.</t> | to provide future extensibility.</t> | |||
</abstract> | </abstract> | |||
<note removeInRFC="true"> | ||||
<name>About This Document</name> | ||||
<t> | ||||
Status information for this document may be found at <eref target="https | ||||
://datatracker.ietf.org/doc/draft-ietf-httpbis-priority/"/>. | ||||
</t> | ||||
<t> | ||||
Discussion of this document takes place on the | ||||
HTTP Working Group mailing list (<eref target="mailto:ietf-http-wg@w3.or | ||||
g"/>), | ||||
which is archived at <eref target="https://lists.w3.org/Archives/Public/ | ||||
ietf-http-wg/"/>. | ||||
Working Group information can be found at <eref target="https://httpwg.o | ||||
rg/"/>. | ||||
</t> | ||||
<t>Source for this draft and an issue tracker can be found at | ||||
<eref target="https://github.com/httpwg/http-extensions/labels/prioritie | ||||
s"/>.</t> | ||||
</note> | ||||
</front> | </front> | |||
<middle> | <middle> | |||
<section anchor="introduction" numbered="true" toc="default"> | <section anchor="introduction" numbered="true" toc="default"> | |||
<name>Introduction</name> | <name>Introduction</name> | |||
<t>It is common for representations of an HTTP <xref target="HTTP" format= "default"/> | <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 | resource to have relationships to one or more other resources. Clients will | |||
often discover these relationships while processing a retrieved representation, | often discover these relationships while processing a retrieved representation, | |||
which may lead to further retrieval requests. Meanwhile, the nature of the | which may lead to further retrieval requests. Meanwhile, the nature of the | |||
relationship determines whether the client is blocked from continuing to process | relationships determines whether a client is blocked from continuing to process | |||
locally available resources. An example of this is visual rendering of an HTML | locally available resources. An example of this is the visual rendering of an H | |||
document, which could be blocked by the retrieval of a CSS file that the | TML | |||
document, which could be blocked by the retrieval of a Cascading Style Sheets (C | ||||
SS) file that the | ||||
document refers to. In contrast, inline images do not block rendering and get dr awn | document refers to. In contrast, inline images do not block rendering and get dr awn | |||
incrementally as the chunks of the images arrive.</t> | incrementally as the chunks of the images arrive.</t> | |||
<t>HTTP/2 <xref target="HTTP2" format="default"/> and HTTP/3 | <t>HTTP/2 <xref target="HTTP2" format="default"/> and HTTP/3 | |||
<xref target="HTTP3" format="default"/> support multiplexing of requests and res ponses in | <xref target="HTTP3" format="default"/> support multiplexing of requests and res ponses in | |||
a single connection. An important feature of any implementation of a protocol | a single connection. An important feature of any implementation of a protocol | |||
that provides multiplexing is the ability to prioritize the sending of | that provides multiplexing is the ability to prioritize the sending of | |||
information. For example, to provide meaningful presentation of an HTML document | 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 | 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 | HTTP responses, or the chunks of those HTTP responses, that it sends to a | |||
client.</t> | client.</t> | |||
skipping to change at line 93 ¶ | skipping to change at line 78 ¶ | |||
successfully serve HTTP responses. However, servers that operate in ignorance | successfully serve HTTP responses. However, servers that operate in ignorance | |||
of how clients issue requests and consume responses can cause suboptimal client | of how clients issue requests and consume responses can cause suboptimal client | |||
application performance. Priority signals allow clients to communicate their | application performance. Priority signals allow clients to communicate their | |||
view of request priority. Servers have their own needs that are independent of | view of request priority. Servers have their own needs that are independent of | |||
client needs, so they often combine priority signals with other available | client needs, so they often combine priority signals with other available | |||
information in order to inform scheduling of response data.</t> | information in order to inform scheduling of response data.</t> | |||
<t>RFC 7540 <xref target="RFC7540" format="default"/> stream priority allo wed a client to send a series of | <t>RFC 7540 <xref target="RFC7540" format="default"/> stream priority allo wed a client to send a series of | |||
priority signals that communicate to the server a "priority tree"; the structure | priority signals that communicate to the server a "priority tree"; the structure | |||
of this tree represents the client's preferred relative ordering and weighted | of this tree represents the client's preferred relative ordering and weighted | |||
distribution of the bandwidth among HTTP responses. Servers could use these | distribution of the bandwidth among HTTP responses. Servers could use these | |||
priority signals as input into prioritization decision-making.</t> | priority signals as input into prioritization decisions.</t> | |||
<t>The design and implementation of RFC 7540 stream priority was observed | <t>The design and implementation of RFC 7540 stream priority were observed | |||
to have | to have | |||
shortcomings, explained in <xref target="motivation" format="default"/>. HTTP/2 | shortcomings, as explained in <xref target="motivation" format="default"/>. HTTP | |||
/2 | ||||
<xref target="HTTP2" format="default"/> has consequently deprecated the use of | <xref target="HTTP2" format="default"/> has consequently deprecated the use of | |||
these stream priority signals. The prioritization scheme and priority signals | these stream priority signals. The prioritization scheme and priority signals | |||
defined herein can act as a substitute for RFC 7540 stream priority.</t> | defined herein can act as a substitute for RFC 7540 stream priority.</t> | |||
<t>This document describes an extensible scheme for prioritizing HTTP resp onses | <t>This document describes an extensible scheme for prioritizing HTTP resp onses | |||
that uses absolute values. <xref target="parameters" format="default"/> defines priority parameters, which are | that uses absolute values. <xref target="parameters" format="default"/> defines priority parameters, which are | |||
a standardized and extensible format of priority information. <xref target="head er-field" format="default"/> | a standardized and extensible format of priority information. <xref target="head er-field" format="default"/> | |||
defines the Priority HTTP header field, a protocol-version-independent and | defines the Priority HTTP header field, which is an | |||
end-to-end priority signal. Clients can send this header field to signal their | end-to-end priority signal that is independent of protocol version. Clients can | |||
send this header field to signal their | ||||
view of how responses should be prioritized. Similarly, servers behind an | view of how responses should be prioritized. Similarly, servers behind an | |||
intermediary can use it to signal priority to the intermediary. After sending a | intermediary can use it to signal priority to the intermediary. After sending a | |||
request, a client can change their view of response priority (see | request, a client can change their view of response priority (see | |||
<xref target="reprioritization" format="default"/>) by sending HTTP-version-spec | <xref target="reprioritization" format="default"/>) by sending HTTP-version-spec | |||
ific frames defined in | ific frames as defined in | |||
<xref target="h2-update-frame" format="default"/> and <xref target="h3-update-fr | Sections <xref target="h2-update-frame" format="counter"/> and <xref target | |||
ame" format="default"/>.</t> | ="h3-update-frame" format="counter"/>.</t> | |||
<t>Header field and frame priority signals are input to a server's respons e | <t>Header field and frame priority signals are input to a server's respons e | |||
prioritization process. They are only a suggestion and do not guarantee any | prioritization process. They are only a suggestion and do not guarantee any | |||
particular processing or transmission order for one response relative to any | particular processing or transmission order for one response relative to any | |||
other response. <xref target="server-scheduling" format="default"/> and <xref ta | other response. Sections <xref target="server-scheduling" format="counter"/ | |||
rget="retransmission-scheduling" format="default"/> provide | > and <xref target="retransmission-scheduling" format="counter"/> provide | |||
consideration and guidance about how servers might act upon signals.</t> | considerations and guidance about how servers might act upon signals.</t> | |||
<section anchor="notational-conventions" numbered="true" toc="default"> | <section anchor="notational-conventions" numbered="true" toc="default"> | |||
<name>Notational Conventions</name> | <name>Notational Conventions</name> | |||
<t>The key words "<bcp14>MUST</bcp14>", "<bcp14>MUST NOT</bcp14>", "<bcp | <t>The key words "<bcp14>MUST</bcp14>", "<bcp14>MUST NOT</bcp14>", | |||
14>REQUIRED</bcp14>", "<bcp14>SHALL</bcp14>", "<bcp14>SHALL | "<bcp14>REQUIRED</bcp14>", "<bcp14>SHALL</bcp14>", | |||
NOT</bcp14>", "<bcp14>SHOULD</bcp14>", "<bcp14>SHOULD NOT</bcp14>", "<bcp14>RECO | "<bcp14>SHALL NOT</bcp14>", "<bcp14>SHOULD</bcp14>", | |||
MMENDED</bcp14>", "<bcp14>NOT RECOMMENDED</bcp14>", | "<bcp14>SHOULD NOT</bcp14>", | |||
"<bcp14>MAY</bcp14>", and "<bcp14>OPTIONAL</bcp14>" in this document are to be i | "<bcp14>RECOMMENDED</bcp14>", "<bcp14>NOT RECOMMENDED</bcp14>", | |||
nterpreted as | "<bcp14>MAY</bcp14>", and "<bcp14>OPTIONAL</bcp14>" in this document | |||
described in BCP 14 <xref target="RFC2119" format="default"/> <xref target="RFC8 | are to be interpreted as described in BCP 14 | |||
174" format="default"/> when, and only when, they | <xref target="RFC2119"/> <xref target="RFC8174"/> when, and only | |||
appear in all capitals, as shown here.</t> | when, they appear in all capitals, as shown here.</t> | |||
<t>The terms Dictionary, sf-boolean, sf-dictionary, and sf-integer are i | <t>This document uses the following terminology from <xref section="3" s | |||
mported from | ectionFormat="of" target="STRUCTURED-FIELDS"/> to specify syntax and parsing: "B | |||
<xref target="STRUCTURED-FIELDS" format="default"/>.</t> | oolean", "Dictionary", and "Integer".</t> | |||
<t>Example HTTP requests and responses use the HTTP/2-style formatting f rom | <t>Example HTTP requests and responses use the HTTP/2-style formatting f rom | |||
<xref target="HTTP2" format="default"/>.</t> | <xref target="HTTP2" format="default"/>.</t> | |||
<t>This document uses the variable-length integer encoding from | <t>This document uses the variable-length integer encoding from | |||
<xref target="QUIC" format="default"/>.</t> | <xref target="QUIC" format="default"/>.</t> | |||
<t>The term control stream is used to describe both the HTTP/2 stream wi th | <t>The term "control stream" is used to describe both the HTTP/2 stream with | |||
identifier 0x0 and the HTTP/3 control stream; see <xref section="6.2.1" sectionF ormat="of" target="HTTP3" format="default"/>.</t> | identifier 0x0 and the HTTP/3 control stream; see <xref section="6.2.1" sectionF ormat="of" target="HTTP3" format="default"/>.</t> | |||
<t>The term HTTP/2 priority signal is used to describe the priority info rmation | <t>The term "HTTP/2 priority signal" is used to describe the priority in formation | |||
sent from clients to servers in HTTP/2 frames; see <xref section="5.3.2" section Format="of" target="HTTP2" format="default"/>.</t> | sent from clients to servers in HTTP/2 frames; see <xref section="5.3.2" section Format="of" target="HTTP2" format="default"/>.</t> | |||
</section> | </section> | |||
</section> | </section> | |||
<section anchor="motivation" numbered="true" toc="default"> | <section anchor="motivation" numbered="true" toc="default"> | |||
<name>Motivation for Replacing RFC 7540 Priorities</name> | <name>Motivation for Replacing RFC 7540 Stream Priorities</name> | |||
<t>RFC 7540 stream priority (see <xref section="5.3" sectionFormat="of" ta rget="RFC7540" format="default"/>) is a complex system | <t>RFC 7540 stream priority (see <xref section="5.3" sectionFormat="of" ta rget="RFC7540" format="default"/>) is a complex system | |||
where clients signal stream dependencies and weights to describe an unbalanced | where clients signal stream dependencies and weights to describe an unbalanced | |||
tree. It suffered from limited deployment and interoperability and was deprecate d | tree. It suffered from limited deployment and interoperability and has been depr ecated | |||
in a revision of HTTP/2 <xref target="HTTP2" format="default"/>. HTTP/2 retains these protocol elements in | in a revision of HTTP/2 <xref target="HTTP2" format="default"/>. HTTP/2 retains these protocol elements in | |||
order to maintain wire compatibility (see <xref section="5.3.2" sectionFormat="o f" target="HTTP2" format="default"/>), which | order to maintain wire compatibility (see <xref section="5.3.2" sectionFormat="o f" target="HTTP2" format="default"/>), which | |||
means that they might still be used even in the presence of alternative signalin g, | means that they might still be used even in the presence of alternative signalin g, | |||
such as the scheme this document describes.</t> | such as the scheme this document describes.</t> | |||
<t>Many RFC 7540 server implementations do not act on HTTP/2 priority | <t>Many RFC 7540 server implementations do not act on HTTP/2 priority | |||
signals.</t> | signals.</t> | |||
<t>Prioritization can use information that servers have about resources or | <t>Prioritization can use information that servers have about resources or | |||
the order in which requests are generated. For example, a server, with knowledge | the order in which requests are generated. For example, a server, with knowledge | |||
of an HTML document structure, might want to prioritize the delivery of images | of an HTML document structure, might want to prioritize the delivery of images | |||
that are critical to user experience above other images. With RFC 7540 it is | that are critical to user experience above other images. With RFC 7540, it is | |||
difficult for servers to interpret signals from clients for prioritization as | difficult for servers to interpret signals from clients for prioritization, as | |||
the same conditions could result in very different signaling from different | the same conditions could result in very different signaling from different | |||
clients. This document describes signaling that is simpler and more constrained, | clients. This document describes signaling that is simpler and more constrained, | |||
requiring less interpretation and allowing less variation.</t> | requiring less interpretation and allowing less variation.</t> | |||
<t>RFC 7540 does not define a method that can be used by a server to provi de a | <t>RFC 7540 does not define a method that can be used by a server to provi de a | |||
priority signal for intermediaries.</t> | priority signal for intermediaries.</t> | |||
<t>RFC 7540 priority is expressed relative to other requests sharing the s | <t>RFC 7540 stream priority is expressed relative to other requests sharin | |||
ame | g the same | |||
connection at the same time. It is difficult to incorporate such design into | connection at the same time. It is difficult to incorporate such a design into | |||
applications that generate requests without knowledge of how other requests | applications that generate requests without knowledge of how other requests | |||
might share a connection, or into protocols that do not have strong ordering | might share a connection, or into protocols that do not have strong ordering | |||
guarantees across streams, like HTTP/3 <xref target="HTTP3" format="default"/>.< /t> | guarantees across streams, like HTTP/3 <xref target="HTTP3" format="default"/>.< /t> | |||
<t>Experiments from independent research (<xref target="MARX" format="defa ult"/>) have shown | <t>Experiments from independent research <xref target="MARX" format="defau lt"/> have shown | |||
that simpler schemes can reach at least equivalent performance characteristics | 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 | compared to the more complex RFC 7540 setups seen in practice, at least for the | |||
web use case.</t> | Web use case.</t> | |||
<section anchor="disabling" numbered="true" toc="default"> | <section anchor="disabling" numbered="true" toc="default"> | |||
<name>Disabling RFC 7540 Priorities</name> | <name>Disabling RFC 7540 Stream Priorities</name> | |||
<t>The problems and insights set out above provided the motivation for a n | <t>The problems and insights set out above provided the motivation for a n | |||
alternative to RFC 7540 stream priority (see <xref section="5.3" sectionFormat=" of" target="HTTP2" format="default"/>).</t> | alternative to RFC 7540 stream priority (see <xref section="5.3" sectionFormat=" of" target="HTTP2" format="default"/>).</t> | |||
<t>The SETTINGS_NO_RFC7540_PRIORITIES HTTP/2 setting is defined by this document in | <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 | 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 | <xref section="5.3.2" sectionFormat="of" target="HTTP2" format="default"/>), as described below. The value of | |||
SETTINGS_NO_RFC7540_PRIORITIES <bcp14>MUST</bcp14> be 0 or 1. Any value other th an 0 or 1 <bcp14>MUST</bcp14> | SETTINGS_NO_RFC7540_PRIORITIES <bcp14>MUST</bcp14> be 0 or 1. Any value other th an 0 or 1 <bcp14>MUST</bcp14> | |||
be treated as a connection error (see <xref section="5.4.1" sectionFormat="of" t arget="HTTP2" format="default"/>) of type | be treated as a connection error (see <xref section="5.4.1" sectionFormat="of" t arget="HTTP2" format="default"/>) of type | |||
PROTOCOL_ERROR. The initial value is 0.</t> | PROTOCOL_ERROR. The initial value is 0.</t> | |||
<t>If endpoints use SETTINGS_NO_RFC7540_PRIORITIES they <bcp14>MUST</bcp 14> send it in the first | <t>If endpoints use SETTINGS_NO_RFC7540_PRIORITIES, they <bcp14>MUST</bc p14> send it in the first | |||
SETTINGS frame. Senders <bcp14>MUST NOT</bcp14> change the SETTINGS_NO_RFC7540_P RIORITIES value | SETTINGS frame. Senders <bcp14>MUST NOT</bcp14> change the SETTINGS_NO_RFC7540_P RIORITIES value | |||
after the first SETTINGS frame. Receivers that detect a change <bcp14>MAY</bcp14 > treat it as a | after the first SETTINGS frame. Receivers that detect a change <bcp14>MAY</bcp14 > treat it as a | |||
connection error of type PROTOCOL_ERROR.</t> | connection error of type PROTOCOL_ERROR.</t> | |||
<t>Clients can send SETTINGS_NO_RFC7540_PRIORITIES with a value of 1 to indicate | <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 | 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 | 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 | need to allocate any resources to signal handling before signals arrive. A | |||
server that receives SETTINGS_NO_RFC7540_PRIORITIES with a value of 1 <bcp14>MUS T</bcp14> | server that receives SETTINGS_NO_RFC7540_PRIORITIES with a value of 1 <bcp14>MUS T</bcp14> | |||
ignore HTTP/2 priority signals.</t> | ignore HTTP/2 priority signals.</t> | |||
<t>Servers can send SETTINGS_NO_RFC7540_PRIORITIES with a value of 1 to indicate | <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> | that they will ignore HTTP/2 priority signals sent by clients.</t> | |||
<t>Endpoints that send SETTINGS_NO_RFC7540_PRIORITIES are encouraged to use | <t>Endpoints that send SETTINGS_NO_RFC7540_PRIORITIES are encouraged to use | |||
alternative priority signals (for example, <xref target="header-field" format="d | alternative priority signals (for example, see <xref target="header-field" forma | |||
efault"/> or | t="default"/> or | |||
<xref target="h2-update-frame" format="default"/>) but there is no requirement t | <xref target="h2-update-frame" format="default"/>), but there is no requirement | |||
o use a specific signal type.</t> | to use a specific signal type.</t> | |||
<section anchor="advice-when-using-extensible-priorities-as-the-alternat ive" numbered="true" toc="default"> | <section anchor="advice-when-using-extensible-priorities-as-the-alternat ive" numbered="true" toc="default"> | |||
<name>Advice when Using Extensible Priorities as the Alternative</name > | <name>Advice when Using Extensible Priorities as the Alternative</name > | |||
<t>Before receiving a SETTINGS frame from a server, a client does not know if the server | <t>Before receiving a SETTINGS frame from a server, a client does not know if the server | |||
is ignoring HTTP/2 priority signals. Therefore, until the client receives the | is ignoring HTTP/2 priority signals. Therefore, until the client receives the | |||
SETTINGS frame from the server, the client <bcp14>SHOULD</bcp14> send both the H TTP/2 | SETTINGS frame from the server, the client <bcp14>SHOULD</bcp14> send both the H TTP/2 | |||
priority signals and the signals of this prioritization scheme (see | priority signals and the signals of this prioritization scheme (see | |||
<xref target="header-field" format="default"/> and <xref target="h2-update-frame " format="default"/>).</t> | Sections <xref target="header-field" format="counter"/> and <xref target="h 2-update-frame" format="counter"/>).</t> | |||
<t>Once the client receives the first SETTINGS frame that contains the | <t>Once the client receives the first SETTINGS frame that contains the | |||
SETTINGS_NO_RFC7540_PRIORITIES parameter with value of 1, it <bcp14>SHOULD</bcp1 4> stop sending | SETTINGS_NO_RFC7540_PRIORITIES parameter with a value of 1, it <bcp14>SHOULD</bc p14> stop sending | |||
the HTTP/2 priority signals. This avoids sending redundant signals that are | the HTTP/2 priority signals. This avoids sending redundant signals that are | |||
known to be ignored.</t> | known to be ignored.</t> | |||
<t>Similarly, if the client receives SETTINGS_NO_RFC7540_PRIORITIES wi th value of 0 | <t>Similarly, if the client receives SETTINGS_NO_RFC7540_PRIORITIES wi th a value of 0 | |||
or if the settings parameter was absent, it <bcp14>SHOULD</bcp14> stop sending P RIORITY_UPDATE | or if the settings parameter was absent, it <bcp14>SHOULD</bcp14> stop sending P RIORITY_UPDATE | |||
frames (<xref target="h2-update-frame" format="default"/>), since those frames a re likely to be ignored. | frames (<xref target="h2-update-frame" format="default"/>), since those frames a re likely to be ignored. | |||
However, the client <bcp14>MAY</bcp14> continue sending the Priority header fiel d | However, the client <bcp14>MAY</bcp14> continue sending the Priority header fiel d | |||
(<xref target="header-field" format="default"/>), as it is an end-to-end signal that might be useful to nodes | (<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> | behind the server that the client is directly connected to.</t> | |||
</section> | </section> | |||
</section> | </section> | |||
</section> | </section> | |||
<section anchor="applicability-of-the-extensible-priority-scheme" numbered=" true" toc="default"> | <section anchor="applicability-of-the-extensible-priority-scheme" numbered=" true" toc="default"> | |||
<name>Applicability of the Extensible Priority Scheme</name> | <name>Applicability of the Extensible Priority Scheme</name> | |||
<t>The priority scheme defined by this document is primarily focused on th e | <t>The priority scheme defined by this document is primarily focused on th e | |||
prioritization of HTTP response messages (see <xref section="3.4" sectionFormat= "of" target="HTTP" format="default"/>). It | prioritization of HTTP response messages (see <xref section="3.4" sectionFormat= "of" target="HTTP" format="default"/>). It | |||
defines new priority parameters (<xref target="parameters" format="default"/>) a nd a means of conveying those | defines new priority parameters (<xref target="parameters" format="default"/>) a nd a means of conveying those | |||
parameters (<xref target="header-field" format="default"/> and <xref target="fra me" format="default"/>), which is intended to communicate | parameters (Sections <xref target="header-field" format="counter"/> and <xr ef target="frame" format="counter"/>), which is intended to communicate | |||
the priority of responses to a server that is responsible for prioritizing | the priority of responses to a server that is responsible for prioritizing | |||
them. <xref target="server-scheduling" format="default"/> provides consideration s for servers about acting on | them. <xref target="server-scheduling" format="default"/> provides consideration s for servers about acting on | |||
those signals in combination with other inputs and factors.</t> | those signals in combination with other inputs and factors.</t> | |||
<t>The CONNECT method (see <xref section="9.3.6" sectionFormat="of" target ="HTTP" format="default"/>) can be used to establish | <t>The CONNECT method (see <xref section="9.3.6" sectionFormat="of" target ="HTTP" format="default"/>) can be used to establish | |||
tunnels. Signaling applies similarly to tunnels; additional considerations for | tunnels. Signaling applies similarly to tunnels; additional considerations for | |||
server prioritization are given in <xref target="connect-scheduling" format="def ault"/>.</t> | server prioritization are given in <xref target="connect-scheduling" format="def ault"/>.</t> | |||
<t><xref target="client-scheduling" format="default"/> describes how clien ts can optionally apply elements of | <t><xref target="client-scheduling" format="default"/> describes how clien ts can optionally apply elements of | |||
this scheme locally to the request messages that they generate.</t> | this scheme locally to the request messages that they generate.</t> | |||
<t>Some forms of HTTP extensions might change HTTP/2 or HTTP/3 stream beha vior or | <t>Some forms of HTTP extensions might change HTTP/2 or HTTP/3 stream beha vior or | |||
define new data carriage mechanisms. Such extensions can define themselves how | define new data carriage mechanisms. Such extensions can themselves define | |||
this priority scheme is to be applied.</t> | how this priority scheme is to be applied.</t> | |||
</section> | </section> | |||
<section anchor="parameters" numbered="true" toc="default"> | <section anchor="parameters" numbered="true" toc="default"> | |||
<name>Priority Parameters</name> | <name>Priority Parameters</name> | |||
<t>The priority information is a sequence of key-value pairs, providing ro om for | <t>The priority information is a sequence of key-value pairs, providing ro om for | |||
future extensions. Each key-value pair represents a priority parameter.</t> | future extensions. Each key-value pair represents a priority parameter.</t> | |||
<t>The Priority HTTP header field (<xref target="header-field" format="def ault"/>) is an end-to-end way to | <t>The Priority HTTP header field (<xref target="header-field" format="def ault"/>) is an end-to-end way to | |||
transmit this set of priority parameters when a request or a response is issued. | transmit this set of priority parameters when a request or a response is issued. | |||
After sending a request, a client can change their view of response priority | After sending a request, a client can change their view of response priority | |||
(<xref target="reprioritization" format="default"/>) by sending HTTP-version-spe | (<xref target="reprioritization" format="default"/>) by sending HTTP-version-spe | |||
cific PRIORITY_UPDATE frames | cific PRIORITY_UPDATE frames as | |||
defined in <xref target="h2-update-frame" format="default"/> and <xref target="h | defined in Sections <xref target="h2-update-frame" format="counter"/> and < | |||
3-update-frame" format="default"/>. Frames transmit priority | xref target="h3-update-frame" format="counter"/>. Frames transmit priority | |||
parameters on a single hop only.</t> | parameters on a single hop only.</t> | |||
<t>Intermediaries can consume and produce priority signals in a PRIORITY_U PDATE | <t>Intermediaries can consume and produce priority signals in a PRIORITY_U PDATE | |||
frame or Priority header field. Sending a PRIORITY_UPDATE frame preserves the | frame or Priority header field. An intermediary that passes only the Priority | |||
signal from the client carried by the Priority header field, but provides a | request header field to the next hop preserves the original end-to-end signal | |||
signal that overrides that for the next hop; see <xref target="header-field-rati | from the client; see <xref target="header-field-rationale" format="default"/>. | |||
onale" format="default"/>. | An intermediary could pass the Priority header field and additionally send a PRI | |||
Replacing or adding a Priority header field overrides any signal from a client | ORITY_UPDATE frame. This would have the effect of preserving the original client | |||
and can affect prioritization for all subsequent recipients.</t> | end-to-end signal, while instructing the next hop to use a different priority, | |||
per the guidance in <xref target="frame"/>. An intermediary that replaces or add | ||||
s a Priority request header field overrides the original client end-to-end signa | ||||
l, which can affect prioritization for all subsequent recipients of the request. | ||||
</t> | ||||
<t>For both the Priority header field and the PRIORITY_UPDATE frame, the s et of | <t>For both the Priority header field and the PRIORITY_UPDATE frame, the s et of | |||
priority parameters is encoded as a Structured Fields Dictionary (see | priority parameters is encoded as a Dictionary (see | |||
<xref section="3.2" sectionFormat="of" target="STRUCTURED-FIELDS" format="defaul t"/>).</t> | <xref section="3.2" sectionFormat="of" target="STRUCTURED-FIELDS" format="defaul t"/>).</t> | |||
<t>This document defines the urgency(<tt>u</tt>) and incremental(<tt>i</tt >) priority parameters. | <t>This document defines the urgency (<tt>u</tt>) and incremental (<tt>i</ tt>) priority parameters. | |||
When receiving an HTTP request that does not carry these priority parameters, a | When receiving an HTTP request that does not carry these priority parameters, a | |||
server <bcp14>SHOULD</bcp14> act as if their default values were specified.</t> | server <bcp14>SHOULD</bcp14> act as if their default values were specified.</t> | |||
<t>An intermediary can combine signals from requests and responses that it forwards. | <t>An intermediary can combine signals from requests and responses that it forwards. | |||
Note that omission of priority parameters in responses is handled differently fr om | Note that omission of priority parameters in responses is handled differently fr om | |||
omission in requests; see <xref target="merging" format="default"/>.</t> | omission in requests; see <xref target="merging" format="default"/>.</t> | |||
<t>Receivers parse the Dictionary as defined in <xref section="4.2" sectio nFormat="of" target="STRUCTURED-FIELDS" format="default"/>. Where the Dictionary is successfully parsed, this document | <t>Receivers parse the Dictionary as described in <xref section="4.2" sect ionFormat="of" target="STRUCTURED-FIELDS" format="default"/>. Where the Dictiona ry is successfully parsed, this document | |||
places the additional requirement that unknown priority parameters, priority | places the additional requirement that unknown priority parameters, priority | |||
parameters with out-of-range values, or values of unexpected types <bcp14>MUST</ bcp14> be | parameters with out-of-range values, or values of unexpected types <bcp14>MUST</ bcp14> be | |||
ignored.</t> | ignored.</t> | |||
<section anchor="urgency" numbered="true" toc="default"> | <section anchor="urgency" numbered="true" toc="default"> | |||
<name>Urgency</name> | <name>Urgency</name> | |||
<t>The urgency parameter (<tt>u</tt>) takes an integer between 0 and 7, | <t>The urgency (<tt>u</tt>) parameter value is Integer (see <xref sectio | |||
in descending | n="3.3.1" sectionFormat="of" target="STRUCTURED-FIELDS"/>), between 0 and 7 incl | |||
order of priority.</t> | usive, in descending order of priority. The default is 3.</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 precede nce of | <t>Endpoints use this parameter to communicate their view of the precede nce of | |||
HTTP responses. The chosen value of urgency can be based on the expectation that | 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 | servers might use this information to transmit HTTP responses in the order of | |||
their urgency. The smaller the value, the higher the precedence.</t> | 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 | <t>The following example shows a request for a CSS file with the urgency set to | |||
<tt>0</tt>:</t> | <tt>0</tt>:</t> | |||
<sourcecode type="example"><![CDATA[ | <artwork type=""><![CDATA[ | |||
:method = GET | :method = GET | |||
:scheme = https | :scheme = https | |||
:authority = example.net | :authority = example.net | |||
:path = /style.css | :path = /style.css | |||
priority = u=0 | priority = u=0 | |||
]]></sourcecode> | ]]></artwork> | |||
<t>A client that fetches a document that likely consists of multiple HTT P resources | <t>A client that fetches a document that likely consists of multiple HTT P resources | |||
(e.g., HTML) <bcp14>SHOULD</bcp14> assign the default urgency level to the main resource. This | (e.g., HTML) <bcp14>SHOULD</bcp14> assign the default urgency level to the main resource. This | |||
convention allows servers to refine the urgency using | convention allows servers to refine the urgency using | |||
knowledge specific to the web-site (see <xref target="merging" format="default"/ >).</t> | knowledge specific to the website (see <xref target="merging" format="default"/> ).</t> | |||
<t>The lowest urgency level (7) is reserved for background tasks such as delivery | <t>The lowest urgency level (7) is reserved for background tasks such as delivery | |||
of software updates. This urgency level <bcp14>SHOULD NOT</bcp14> be used for fe tching | of software updates. This urgency level <bcp14>SHOULD NOT</bcp14> be used for fe tching | |||
responses that have impact on user interaction.</t> | responses that have any impact on user interaction.</t> | |||
</section> | </section> | |||
<section anchor="incremental" numbered="true" toc="default"> | <section anchor="incremental" numbered="true" toc="default"> | |||
<name>Incremental</name> | <name>Incremental</name> | |||
<t>The incremental parameter (<tt>i</tt>) takes an sf-boolean as the val ue that indicates | <t>The incremental (<tt>i</tt>) parameter value is Boolean (see <xref se ction="3.3.6" sectionFormat="of" target="STRUCTURED-FIELDS"/>). It indicates | |||
if an HTTP response can be processed incrementally, i.e., provide some | if an HTTP response can be processed incrementally, i.e., provide some | |||
meaningful output as chunks of the response arrive.</t> | meaningful output as chunks of the response arrive.</t> | |||
<t>The default value of the incremental parameter is false (<tt>0</tt>). </t> | <t>The default value of the incremental parameter is <tt>false</tt> (<tt >0</tt>).</t> | |||
<t>If a client makes concurrent requests with the incremental parameter set to | <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 | <tt>false</tt>, there is no benefit in serving responses with the same urgency c oncurrently | |||
because the client is not going to process those responses incrementally. | 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 | 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> | requests were generated, is considered to be the best strategy.</t> | |||
<t>If a client makes concurrent requests with the incremental parameter set to | <t>If a client makes concurrent requests with the incremental parameter set to | |||
true, serving requests with the same urgency concurrently might be beneficial. | <tt>true</tt>, serving requests with the same urgency concurrently might be bene ficial. | |||
Doing this distributes the connection bandwidth, meaning that responses take | Doing this distributes the connection bandwidth, meaning that responses take | |||
longer to complete. Incremental delivery is most useful where multiple | longer to complete. Incremental delivery is most useful where multiple | |||
partial responses might provide some value to clients ahead of a | partial responses might provide some value to clients ahead of a | |||
complete response being available.</t> | complete response being available.</t> | |||
<t>The following example shows a request for a JPEG file with the urgenc y parameter | <t>The following example shows a request for a JPEG file with the urgenc y parameter | |||
set to <tt>5</tt> and the incremental parameter set to <tt>true</tt>.</t> | set to <tt>5</tt> and the incremental parameter set to <tt>true</tt>.</t> | |||
<sourcecode type="example"><![CDATA[ | <artwork type=""><![CDATA[ | |||
:method = GET | :method = GET | |||
:scheme = https | :scheme = https | |||
:authority = example.net | :authority = example.net | |||
:path = /image.jpg | :path = /image.jpg | |||
priority = u=5, i | priority = u=5, i | |||
]]></sourcecode> | ]]></artwork> | |||
</section> | </section> | |||
<section anchor="new-parameters" numbered="true" toc="default"> | <section anchor="new-parameters" numbered="true" toc="default"> | |||
<name>Defining New Priority Parameters</name> | <name>Defining New Priority Parameters</name> | |||
<t>When attempting to define new priority parameters, care must be taken so that | <t>When attempting to define new priority parameters, care must be taken so that | |||
they do not adversely interfere with prioritization performed by existing | they do not adversely interfere with prioritization performed by existing | |||
endpoints or intermediaries that do not understand the newly defined priority | endpoints or intermediaries that do not understand the newly defined priority | |||
parameter. Since unknown priority parameters are ignored, new priority | parameters. Since unknown priority parameters are ignored, new priority | |||
parameters should not change the interpretation of, or modify, the urgency (see | parameters should not change the interpretation of, or modify, the urgency (see | |||
<xref target="urgency" format="default"/>) or incremental (see <xref target="inc remental" format="default"/>) priority parameters in a way | <xref target="urgency" format="default"/>) or incremental (see <xref target="inc remental" format="default"/>) priority parameters in a way | |||
that is not backwards compatible or fallback safe.</t> | that is not backwards compatible or fallback safe.</t> | |||
<t>For example, if there is a need to provide more granularity than eigh t urgency | <t>For example, if there is a need to provide more granularity than eigh t urgency | |||
levels, it would be possible to subdivide the range using an additional priority | levels, it would be possible to subdivide the range using an additional priority | |||
parameter. Implementations that do not recognize the parameter can safely | parameter. Implementations that do not recognize the parameter can safely | |||
continue to use the less granular eight levels.</t> | continue to use the less granular eight levels.</t> | |||
<t>Alternatively, the urgency can be augmented. For example, a graphical user agent | <t>Alternatively, the urgency can be augmented. For example, a graphical user agent | |||
could send a <tt>visible</tt> priority parameter to indicate if the resource bei ng requested is | could send a <tt>visible</tt> priority parameter to indicate if the resource bei ng requested is | |||
within the viewport.</t> | within the viewport.</t> | |||
<t>Generic priority parameters are preferred over vendor-specific, | <t>Generic priority parameters are preferred over vendor-specific, | |||
application-specific or deployment-specific values. If a generic value cannot be | application-specific, or deployment-specific values. If a generic value cannot b e | |||
agreed upon in the community, the parameter's name should be correspondingly | agreed upon in the community, the parameter's name should be correspondingly | |||
specific (e.g., with a prefix that identifies the vendor, application or | specific (e.g., with a prefix that identifies the vendor, application, or | |||
deployment).</t> | deployment).</t> | |||
<section anchor="register" numbered="true" toc="default"> | <section anchor="register" numbered="true" toc="default"> | |||
<name>Registration</name> | <name>Registration</name> | |||
<t>New priority parameters can be defined by registering them in the H | <t>New priority parameters can be defined by registering them in the " | |||
TTP Priority | HTTP Priority" | |||
Parameters Registry. The registry governs the keys (short textual strings) used | registry. This registry governs the keys (short textual strings) used | |||
in the Structured Fields Dictionary (see <xref section="3.2" sectionFormat="of" | in the Dictionary (see <xref section="3.2" sectionFormat="of" target="STRUCTURED | |||
target="STRUCTURED-FIELDS" format="default"/>). | -FIELDS" format="default"/>). | |||
Since each HTTP request can have associated priority signals, there is value | Since each HTTP request can have associated priority signals, there is value | |||
in having short key lengths, especially single-character strings. In order to | in having short key lengths, especially single-character strings. In order to | |||
encourage extension while avoiding unintended conflict among attractive key | encourage extensions while avoiding unintended conflict among attractive key | |||
values, the HTTP Priority Parameters Registry operates two registration policies | values, the "HTTP Priority" registry operates two registration policies, | |||
depending on key length.</t> | depending on key length.</t> | |||
<ul spacing="normal"> | <ul spacing="normal"> | |||
<li>Registration requests for priority parameters with a key length of one use the | <li>Registration requests for priority parameters with a key length of one use the | |||
Specification Required policy, as per <xref section="4.6" sectionFormat="of" tar get="RFC8126" format="default"/>.</li> | Specification Required policy, per <xref section="4.6" sectionFormat="of" target ="RFC8126" format="default"/>.</li> | |||
<li>Registration requests for priority parameters with a key length greater than | <li>Registration requests for priority parameters with a key length greater than | |||
one use the Expert Review policy, as per <xref section="4.5" sectionFormat="of" | one use the Expert Review policy, per <xref section="4.5" sectionFormat="of" tar | |||
target="RFC8126" format="default"/>. A | get="RFC8126" format="default"/>. A | |||
specification document is appreciated, but not required.</li> | specification document is appreciated but not required.</li> | |||
</ul> | </ul> | |||
<t>When reviewing registration requests, the designated expert(s) can consider the | <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 | additional guidance provided in <xref target="new-parameters" format="default"/> but cannot use it as a basis | |||
for rejection.</t> | for rejection.</t> | |||
<t>Registration requests should use the following template:</t> | <t>Registration requests should use the following template:</t> | |||
<dl> | <dl> | |||
<dt> | <dt> | |||
Name: </dt> | Name: </dt> | |||
<dd> | <dd> | |||
<t>[a name for the Priority Parameter that matches key]</t> | <t>[a name for the priority parameter that matches the parameter k ey]</t> | |||
</dd> | </dd> | |||
<dt> | <dt> | |||
Description: </dt> | Description: </dt> | |||
<dd> | <dd> | |||
<t>[a description of the priority parameter semantics and value]</ t> | <t>[a description of the priority parameter semantics and value]</ t> | |||
</dd> | </dd> | |||
<dt> | <dt> | |||
Reference: </dt> | Reference: </dt> | |||
<dd> | <dd> | |||
<t>[to a specification defining this priority parameter]</t> | <t>[to a specification defining this priority parameter]</t> | |||
</dd> | </dd> | |||
</dl> | </dl> | |||
<t>See the registry at <eref target="https://iana.org/assignments/http -priority">https://iana.org/assignments/http-priority</eref> for details on | <t>See the registry at <eref target="https://www.iana.org/assignments/ http-priority" brackets="angle"/> for details on | |||
where to send registration requests.</t> | where to send registration requests.</t> | |||
</section> | </section> | |||
</section> | </section> | |||
</section> | </section> | |||
<section anchor="header-field" numbered="true" toc="default"> | <section anchor="header-field" numbered="true" toc="default"> | |||
<name>The Priority HTTP Header Field</name> | <name>The Priority HTTP Header Field</name> | |||
<t>The Priority HTTP header field carries priority parameters (see <xref t arget="parameters" format="default"/>). | <t>The Priority HTTP header field is a Dictionary that carries priority pa rameters (see <xref target="parameters" format="default"/>). | |||
It can appear in requests and responses. It is an end-to-end signal that | It can appear in requests and responses. It is an end-to-end signal that | |||
indicates the endpoint's view of how HTTP responses should be prioritized. | indicates the endpoint's view of how HTTP responses should be prioritized. | |||
<xref target="merging" format="default"/> describes how intermediaries can combi ne the priority information | <xref target="merging" format="default"/> describes how intermediaries can combi ne the priority information | |||
sent from clients and servers. Clients cannot interpret the appearance or | sent from clients and servers. Clients cannot interpret the appearance or | |||
omission of a Priority response header field as acknowledgement that any | omission of a Priority response header field as acknowledgement that any | |||
prioritization has occurred. Guidance for how endpoints can act on Priority | prioritization has occurred. Guidance for how endpoints can act on Priority | |||
header values is given in <xref target="client-scheduling" format="default"/> an | header values is given in Sections <xref target="client-scheduling" format= | |||
d <xref target="server-scheduling" format="default"/>.</t> | "counter"/> and <xref target="server-scheduling" format="counter"/>.</t> | |||
<t>Priority is a Dictionary (<xref section="3.2" sectionFormat="of" target | <t>An HTTP request with a Priority header field might be cached and reused | |||
="STRUCTURED-FIELDS" format="default"/>):</t> | for | |||
<sourcecode type="abnf"><![CDATA[ | ||||
Priority = sf-dictionary | ||||
]]></sourcecode> | ||||
<t>An HTTP request with a Priority header field might be cached and re-use | ||||
d for | ||||
subsequent requests; see <xref target="CACHING" format="default"/>. When an orig in | subsequent requests; see <xref target="CACHING" format="default"/>. When an orig in | |||
server generates the Priority response header field based on properties of an | 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 | 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 applicability of the cached response by using header fields that control | |||
the caching behavior (e.g., Cache-Control, Vary).</t> | the caching behavior (e.g., Cache-Control, Vary).</t> | |||
</section> | </section> | |||
<section anchor="reprioritization" numbered="true" toc="default"> | <section anchor="reprioritization" numbered="true" toc="default"> | |||
<name>Reprioritization</name> | <name>Reprioritization</name> | |||
<t>After a client sends a request, it may be beneficial to change the prio rity of | <t>After a client sends a request, it may be beneficial to change the prio rity of | |||
the response. As an example, a web browser might issue a prefetch request for a | 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 | 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 | set to <tt>u=7</tt> (background). Then, when the user navigates to a page that | |||
references the new JavaScript file, while the prefetch is in progress, the | references the new JavaScript file, while the prefetch is in progress, the | |||
browser would send a reprioritization signal with the priority field value set | 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 | to <tt>u=0</tt>. The PRIORITY_UPDATE frame (<xref target="frame" format="default "/>) can be used for such | |||
reprioritization.</t> | reprioritization.</t> | |||
</section> | </section> | |||
<section anchor="frame" numbered="true" toc="default"> | <section anchor="frame" numbered="true" toc="default"> | |||
<name>The PRIORITY_UPDATE Frame</name> | <name>The PRIORITY_UPDATE Frame</name> | |||
<t>This document specifies a new PRIORITY_UPDATE frame for HTTP/2 <xref ta rget="HTTP2" format="default"/> | <t>This document specifies a new PRIORITY_UPDATE frame for HTTP/2 <xref ta rget="HTTP2" format="default"/> | |||
and HTTP/3 <xref target="HTTP3" format="default"/>. It carries priority paramete rs and | and HTTP/3 <xref target="HTTP3" format="default"/>. It carries priority paramete rs and | |||
references the target of the prioritization based on a version-specific | 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. 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, | 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> | the PRIORITY_UPDATE frame is a hop-by-hop signal.</t> | |||
<t>PRIORITY_UPDATE frames are sent by clients on the control stream, allow ing them | <t>PRIORITY_UPDATE frames are sent by clients on the control stream, allow ing them | |||
to be sent independent of the stream that carries the response. This means | to be sent independently of the stream that carries the response. This means | |||
they can be used to reprioritize a response or a push stream; or signal the | they can be used to reprioritize a response or a push stream, or to signal the | |||
initial priority of a response instead of the Priority header field.</t> | initial priority of a response instead of the Priority header field.</t> | |||
<t>A PRIORITY_UPDATE frame communicates a complete set of all priority par ameters | <t>A PRIORITY_UPDATE frame communicates a complete set of all priority par ameters | |||
in the Priority Field Value field. Omitting a priority parameter is a signal to | in the Priority Field Value field. Omitting a priority parameter is a signal to | |||
use its default value. Failure to parse the Priority Field Value <bcp14>MAY</bcp 14> be treated | use its default value. Failure to parse the Priority Field Value <bcp14>MAY</bcp 14> be treated | |||
as a connection error. In HTTP/2 the error is of type PROTOCOL_ERROR; in HTTP/3 | 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> | the error is of type H3_GENERAL_PROTOCOL_ERROR.</t> | |||
<t>A client <bcp14>MAY</bcp14> send a PRIORITY_UPDATE frame before the str eam that it references | <t>A client <bcp14>MAY</bcp14> send a PRIORITY_UPDATE frame before the str eam that it references | |||
is open (except for HTTP/2 push streams; see <xref target="h2-update-frame" form at="default"/>). Furthermore, | is open (except for HTTP/2 push streams; see <xref target="h2-update-frame" form at="default"/>). Furthermore, | |||
HTTP/3 offers no guaranteed ordering across streams, which could cause the frame | 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 | 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 | 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 | 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 | scheduling, the most recently received PRIORITY_UPDATE frame can be considered | |||
as the most up-to-date information that overrides any other signal. Servers | as the most up-to-date information that overrides any other signal. Servers | |||
<bcp14>SHOULD</bcp14> buffer the most recently received PRIORITY_UPDATE frame an d apply it once | <bcp14>SHOULD</bcp14> buffer the most recently received PRIORITY_UPDATE frame an d apply it once | |||
skipping to change at line 445 ¶ | skipping to change at line 426 ¶ | |||
<name>HTTP/2 PRIORITY_UPDATE Frame</name> | <name>HTTP/2 PRIORITY_UPDATE Frame</name> | |||
<t>The HTTP/2 PRIORITY_UPDATE frame (type=0x10) is used by clients to si gnal the | <t>The HTTP/2 PRIORITY_UPDATE frame (type=0x10) is used by clients to si gnal the | |||
initial priority of a response, or to reprioritize a response or push stream. It | 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 | carries the stream ID of the response and the priority in ASCII text, using the | |||
same representation as the Priority header field value.</t> | 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 | <t>The Stream Identifier field (see <xref section="5.1.1" sectionFormat= "of" target="HTTP2" format="default"/>) in the | |||
PRIORITY_UPDATE frame header <bcp14>MUST</bcp14> be zero (0x0). Receiving a PRIO RITY_UPDATE | PRIORITY_UPDATE frame header <bcp14>MUST</bcp14> be zero (0x0). Receiving a PRIO RITY_UPDATE | |||
frame with a field of any other value <bcp14>MUST</bcp14> be treated as a connec tion error of | frame with a field of any other value <bcp14>MUST</bcp14> be treated as a connec tion error of | |||
type PROTOCOL_ERROR.</t> | type PROTOCOL_ERROR.</t> | |||
<figure anchor="fig-h2-reprioritization-frame"> | <figure anchor="fig-h2-reprioritization-frame"> | |||
<name>HTTP/2 PRIORITY_UPDATE Frame Payload</name> | <name>HTTP/2 PRIORITY_UPDATE Frame Format</name> | |||
<sourcecode type="drawing"><![CDATA[ | <artwork type=""><![CDATA[ | |||
HTTP/2 PRIORITY_UPDATE Frame { | HTTP/2 PRIORITY_UPDATE Frame { | |||
Length (24), | Length (24), | |||
Type (8) = 0x10, | Type (8) = 0x10, | |||
Unused Flags (8). | Unused Flags (8), | |||
Reserved (1), | Reserved (1), | |||
Stream Identifier (31), | Stream Identifier (31), | |||
Reserved (1), | Reserved (1), | |||
Prioritized Stream ID (31), | Prioritized Stream ID (31), | |||
Priority Field Value (..), | Priority Field Value (..), | |||
} | } | |||
]]></sourcecode> | ]]></artwork> | |||
</figure> | </figure> | |||
<t>The Length, Type, Unused Flag(s), Reserved, and Stream Identifier fie lds are | <t>The Length, Type, Unused Flag(s), Reserved, and Stream Identifier fie lds are | |||
described in <xref section="4" sectionFormat="of" target="HTTP2" format="default "/>. The PRIORITY_UPDATE frame payload | described in <xref section="4" sectionFormat="of" target="HTTP2" format="default "/>. The PRIORITY_UPDATE frame payload | |||
contains the following additional fields:</t> | contains the following additional fields:</t> | |||
<dl> | <dl> | |||
<dt> | <dt> | |||
Reserved: </dt> | ||||
<dd> | ||||
<t>A reserved 1-bit field. The semantics of this bit are undefined. | ||||
It <bcp14>MUST</bcp14> | ||||
remain unset (0x0) when sending and <bcp14>MUST</bcp14> be ignored when receivin | ||||
g.</t> | ||||
</dd> | ||||
<dt> | ||||
Prioritized Stream ID: </dt> | Prioritized Stream ID: </dt> | |||
<dd> | <dd> | |||
<t>A 31-bit stream identifier for the stream that is the target of t he priority | <t>A 31-bit stream identifier for the stream that is the target of t he priority | |||
update.</t> | update.</t> | |||
</dd> | </dd> | |||
<dt> | <dt> | |||
Priority Field Value: </dt> | Priority Field Value: </dt> | |||
<dd> | <dd> | |||
<t>The priority update value in ASCII text, encoded using Structured Fields. This | <t>The priority update value in ASCII text, encoded using Structured Fields. This | |||
is the same representation as the Priority header field value.</t> | is the same representation as the Priority header field value.</t> | |||
</dd> | </dd> | |||
</dl> | </dl> | |||
<t>When the PRIORITY_UPDATE frame applies to a request stream, clients < bcp14>SHOULD</bcp14> | <t>When the PRIORITY_UPDATE frame applies to a request stream, clients < bcp14>SHOULD</bcp14> | |||
provide a Prioritized Stream ID that refers to a stream in the "open", | 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 | "half-closed (local)", or "idle" state (i.e., streams where data might still be | |||
Prioritized Stream ID refers to a stream in the "half-closed (local)" or | received). Servers can discard frames where the | |||
"closed" state. The number of streams which have been prioritized but remain in | prioritized stream ID refers to a stream in the "half-closed (local)" or | |||
the "idle" state plus the number of active streams (those in the "open" or | "closed" state (i.e., streams where no further data will be sent). | |||
either "half-closed" state; see <xref section="5.1.2" sectionFormat="of" target= | The number of streams that have been prioritized but remain in | |||
"HTTP2" format="default"/>) <bcp14>MUST NOT</bcp14> exceed | the "idle" state plus the number of active streams (those in the "open" state or | |||
in either of the "half-closed" states; see <xref section="5.1.2" sectionFormat=" | ||||
of" target="HTTP2" format="default"/>) <bcp14>MUST NOT</bcp14> exceed | ||||
the value of the SETTINGS_MAX_CONCURRENT_STREAMS parameter. Servers that receive | the value of the SETTINGS_MAX_CONCURRENT_STREAMS parameter. Servers that receive | |||
such a PRIORITY_UPDATE <bcp14>MUST</bcp14> respond with a connection error of ty pe | such a PRIORITY_UPDATE <bcp14>MUST</bcp14> respond with a connection error of ty pe | |||
PROTOCOL_ERROR.</t> | PROTOCOL_ERROR.</t> | |||
<t>When the PRIORITY_UPDATE frame applies to a push stream, clients <bcp 14>SHOULD</bcp14> provide | <t>When the PRIORITY_UPDATE frame applies to a push stream, clients <bcp 14>SHOULD</bcp14> provide | |||
a Prioritized Stream ID that refers to a stream in the "reserved (remote)" or | 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 | "half-closed (local)" state. Servers can discard frames where the prioritized | |||
Stream ID refers to a stream in the "closed" state. Clients <bcp14>MUST NOT</bcp | stream ID refers to a stream in the "closed" state. Clients <bcp14>MUST NOT</bcp | |||
14> provide a | 14> provide a | |||
Prioritized Stream ID that refers to a push stream in the "idle" state. Servers | 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 <bcp14>MUST </bcp14> | that receive a PRIORITY_UPDATE for a push stream in the "idle" state <bcp14>MUST </bcp14> | |||
respond with a connection error of type PROTOCOL_ERROR.</t> | respond with a connection error of type PROTOCOL_ERROR.</t> | |||
<t>If a PRIORITY_UPDATE frame is received with a Prioritized Stream ID o f 0x0, the | <t>If a PRIORITY_UPDATE frame is received with a prioritized stream ID o f 0x0, the | |||
recipient <bcp14>MUST</bcp14> respond with a connection error of type PROTOCOL_E RROR.</t> | recipient <bcp14>MUST</bcp14> respond with a connection error of type PROTOCOL_E RROR.</t> | |||
<t>Servers <bcp14>MUST NOT</bcp14> send PRIORITY_UPDATE frames. If a cli ent receives a | <t>Servers <bcp14>MUST NOT</bcp14> send PRIORITY_UPDATE frames. If a cli ent receives a | |||
PRIORITY_UPDATE frame, it <bcp14>MUST</bcp14> respond with a connection error of type | PRIORITY_UPDATE frame, it <bcp14>MUST</bcp14> respond with a connection error of type | |||
PROTOCOL_ERROR.</t> | PROTOCOL_ERROR.</t> | |||
</section> | </section> | |||
<section anchor="h3-update-frame" numbered="true" toc="default"> | <section anchor="h3-update-frame" numbered="true" toc="default"> | |||
<name>HTTP/3 PRIORITY_UPDATE Frame</name> | <name>HTTP/3 PRIORITY_UPDATE Frame</name> | |||
<t>The HTTP/3 PRIORITY_UPDATE frame (type=0xF0700 or 0xF0701) is used by clients to | <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 | 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 | stream. It carries the identifier of the element that is being prioritized and | |||
the updated priority in ASCII text that uses the same representation as that of | the updated priority in ASCII text that uses the same representation as that of | |||
the Priority header field value. PRIORITY_UPDATE with a frame type of 0xF0700 is | 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 request streams, while PRIORITY_UPDATE with a frame type of 0xF0701 is | |||
used for push streams.</t> | used for push streams.</t> | |||
<t>The PRIORITY_UPDATE frame <bcp14>MUST</bcp14> be sent on the client c ontrol stream | <t>The PRIORITY_UPDATE frame <bcp14>MUST</bcp14> be sent on the client c ontrol stream | |||
(see <xref section="6.2.1" sectionFormat="of" target="HTTP3" format="default"/>) . Receiving a PRIORITY_UPDATE frame on a | (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 <bcp14>MUST</bcp14> be treated as a connection | stream other than the client control stream <bcp14>MUST</bcp14> be treated as a connection | |||
error of type H3_FRAME_UNEXPECTED.</t> | error of type H3_FRAME_UNEXPECTED.</t> | |||
<figure anchor="fig-h3-reprioritization-frame"> | <figure anchor="fig-h3-reprioritization-frame"> | |||
<name>HTTP/3 PRIORITY_UPDATE Frame</name> | <name>HTTP/3 PRIORITY_UPDATE Frame</name> | |||
<sourcecode type="drawing"><![CDATA[ | <artwork type=""><![CDATA[ | |||
HTTP/3 PRIORITY_UPDATE Frame { | HTTP/3 PRIORITY_UPDATE Frame { | |||
Type (i) = 0xF0700..0xF0701, | Type (i) = 0xF0700..0xF0701, | |||
Length (i), | Length (i), | |||
Prioritized Element ID (i), | Prioritized Element ID (i), | |||
Priority Field Value (..), | Priority Field Value (..), | |||
} | } | |||
]]></sourcecode> | ]]></artwork> | |||
</figure> | </figure> | |||
<t>The PRIORITY_UPDATE frame payload has the following fields:</t> | <t>The PRIORITY_UPDATE frame payload has the following fields:</t> | |||
<dl> | <dl> | |||
<dt> | <dt> | |||
Prioritized Element ID: </dt> | Prioritized Element ID: </dt> | |||
<dd> | <dd> | |||
<t>The stream ID or push ID that is the target of the priority updat e.</t> | <t>The stream ID or push ID that is the target of the priority updat e.</t> | |||
</dd> | </dd> | |||
<dt> | <dt> | |||
Priority Field Value: </dt> | Priority Field Value: </dt> | |||
<dd> | <dd> | |||
<t>The priority update value in ASCII text, encoded using Structured Fields. This | <t>The priority update value in ASCII text, encoded using Structured Fields. This | |||
is the same representation as the Priority header field value.</t> | is the same representation as the Priority header field value.</t> | |||
</dd> | </dd> | |||
</dl> | </dl> | |||
<t>The request-stream variant of PRIORITY_UPDATE (type=0xF0700) <bcp14>M UST</bcp14> reference a | <t>The request-stream variant of PRIORITY_UPDATE (type=0xF0700) <bcp14>M UST</bcp14> reference a | |||
request stream. If a server receives a PRIORITY_UPDATE (type=0xF0700) for a | request stream. If a server receives a PRIORITY_UPDATE (type=0xF0700) for a | |||
Stream ID that is not a request stream, this <bcp14>MUST</bcp14> be treated as a | stream ID that is not a request stream, this <bcp14>MUST</bcp14> be treated as a | |||
connection | connection | |||
error of type H3_ID_ERROR. The Stream ID <bcp14>MUST</bcp14> be within the clien | error of type H3_ID_ERROR. The stream ID <bcp14>MUST</bcp14> be within the clien | |||
t-initiated | t-initiated | |||
bidirectional stream limit. If a server receives a PRIORITY_UPDATE | bidirectional stream limit. If a server receives a PRIORITY_UPDATE | |||
(type=0xF0700) with a Stream ID that is beyond the stream limits, this <bcp14>SH OULD</bcp14> be | (type=0xF0700) with a stream ID that is beyond the stream limits, this <bcp14>SH OULD</bcp14> be | |||
treated as a connection error of type H3_ID_ERROR. Generating an error is not | 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 | mandatory because HTTP/3 implementations might have practical barriers to | |||
determining the active stream concurrency limit that is applied by the QUIC | determining the active stream concurrency limit that is applied by the QUIC | |||
layer.</t> | layer.</t> | |||
<t>The push-stream variant PRIORITY_UPDATE (type=0xF0701) <bcp14>MUST</b | <t>The push-stream variant of PRIORITY_UPDATE (type=0xF0701) <bcp14>MUST | |||
cp14> reference a promised | </bcp14> reference a promised | |||
push stream. If a server receives a PRIORITY_UPDATE (type=0xF0701) with a Push I | push stream. If a server receives a PRIORITY_UPDATE (type=0xF0701) with a push I | |||
D | D | |||
that is greater than the maximum Push ID or which has not yet been promised, thi | that is greater than the maximum push ID or that has not yet been promised, this | |||
s | ||||
<bcp14>MUST</bcp14> be treated as a connection error of type H3_ID_ERROR.</t> | <bcp14>MUST</bcp14> be treated as a connection error of type H3_ID_ERROR.</t> | |||
<t>Servers <bcp14>MUST NOT</bcp14> send PRIORITY_UPDATE frames of either type. If a client | <t>Servers <bcp14>MUST NOT</bcp14> send PRIORITY_UPDATE frames of either type. If a client | |||
receives a PRIORITY_UPDATE frame, this <bcp14>MUST</bcp14> be treated as a conne ction error of | receives a PRIORITY_UPDATE frame, this <bcp14>MUST</bcp14> be treated as a conne ction error of | |||
type H3_FRAME_UNEXPECTED.</t> | type H3_FRAME_UNEXPECTED.</t> | |||
</section> | </section> | |||
</section> | </section> | |||
<section anchor="merging" numbered="true" toc="default"> | <section anchor="merging" numbered="true" toc="default"> | |||
<name>Merging Client- and Server-Driven Priority Parameters</name> | <name>Merging Client- and Server-Driven Priority Parameters</name> | |||
<t>It is not always the case that the client has the best understanding of how the | <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 | HTTP responses deserve to be prioritized. The server might have additional | |||
information that can be combined with the client's indicated priority in order | 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 | 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 | document might depend heavily on one of the inline images; the existence of such | |||
dependencies is typically best known to the server. Or, a server that receives | 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 th e same urgency might give | requests for a font <xref target="RFC8081" format="default"/> and images with th e same urgency might give | |||
higher precedence to the font, so that a visual client can render textual | higher precedence to the font, so that a visual client can render textual | |||
information at an early moment.</t> | information at an early moment.</t> | |||
<t>An origin can use the Priority response header field to indicate its vi ew on how | <t>An origin can use the Priority response header field to indicate its vi ew on how | |||
an HTTP response should be prioritized. An intermediary that forwards an HTTP | an HTTP response should be prioritized. An intermediary that forwards an HTTP | |||
response can use the priority parameters found in the Priority response header | response can use the priority parameters found in the Priority response header | |||
field, in combination with the client Priority request header field, as input to | field, in combination with the client Priority request header field, as input to | |||
its prioritization process. No guidance is provided for merging priorities; this | its prioritization process. No guidance is provided for merging priorities; this | |||
is left as an implementation decision.</t> | is left as an implementation decision.</t> | |||
<t>Absence of a priority parameter in an HTTP response indicates the serve r's | <t>The absence of a priority parameter in an HTTP response indicates the s erver's | |||
disinterest in changing the client-provided value. This is different from the | disinterest in changing the client-provided value. This is different from the | |||
request header field, in which omission of a priority parameter implies the use | request header field, in which omission of a priority parameter implies the use | |||
of their default values (see <xref target="parameters" format="default"/>).</t> | of its default value (see <xref target="parameters" format="default"/>).</t> | |||
<t>As a non-normative example, when the client sends an HTTP request with the | <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>tru e</tt></t> | urgency parameter set to <tt>5</tt> and the incremental parameter set to <tt>tru e</tt></t> | |||
<sourcecode type="example"><![CDATA[ | <artwork type=""><![CDATA[ | |||
:method = GET | :method = GET | |||
:scheme = https | :scheme = https | |||
:authority = example.net | :authority = example.net | |||
:path = /menu.png | :path = /menu.png | |||
priority = u=5, i | priority = u=5, i | |||
]]></sourcecode> | ]]></artwork> | |||
<t>and the origin responds with</t> | <t>and the origin responds with</t> | |||
<sourcecode type="example"><![CDATA[ | <artwork type=""><![CDATA[ | |||
:status = 200 | :status = 200 | |||
content-type = image/png | content-type = image/png | |||
priority = u=1 | priority = u=1 | |||
]]></sourcecode> | ]]></artwork> | |||
<t>the intermediary might alter its understanding of the urgency from <tt> 5</tt> to <tt>1</tt>, | <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 | 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 s | value continues to be <tt>true</tt>, i.e., the value specified by the client, as | |||
erver did | the server did | |||
not specify the incremental(<tt>i</tt>) parameter.</t> | not specify the incremental (<tt>i</tt>) parameter.</t> | |||
</section> | </section> | |||
<section anchor="client-scheduling" numbered="true" toc="default"> | <section anchor="client-scheduling" numbered="true" toc="default"> | |||
<name>Client Scheduling</name> | <name>Client Scheduling</name> | |||
<t>A client <bcp14>MAY</bcp14> use priority values to make local processin g or scheduling choices | <t>A client <bcp14>MAY</bcp14> use priority values to make local processin g or scheduling choices | |||
about the requests it initiates.</t> | about the requests it initiates.</t> | |||
</section> | </section> | |||
<section anchor="server-scheduling" numbered="true" toc="default"> | <section anchor="server-scheduling" numbered="true" toc="default"> | |||
<name>Server Scheduling</name> | <name>Server Scheduling</name> | |||
<t>It is generally beneficial for an HTTP server to send all responses as early as | <t>It is generally beneficial for an HTTP server to send all responses as early as | |||
possible. However, when serving multiple requests on a single connection, there | possible. However, when serving multiple requests on a single connection, there | |||
skipping to change at line 629 ¶ | skipping to change at line 604 ¶ | |||
<t>Server scheduling is a prioritization process based on many inputs, wit h | <t>Server scheduling is a prioritization process based on many inputs, wit h | |||
priority signals being only one form of input. Factors such as implementation | priority signals being only one form of input. Factors such as implementation | |||
choices or deployment environment also play a role. Any given connection is | choices or deployment environment also play a role. Any given connection is | |||
likely to have many dynamic permutations. For these reasons, it is not possible | likely to have many dynamic permutations. For these reasons, it is not possible | |||
to describe a universal scheduling algorithm. This document provides some basic, | to describe a universal scheduling algorithm. This document provides some basic, | |||
non-exhaustive recommendations for how servers might act on priority | non-exhaustive recommendations for how servers might act on priority | |||
parameters. It does not describe in detail how servers might combine priority | parameters. It does not describe in detail how servers might combine priority | |||
signals with other factors. Endpoints cannot depend on particular treatment | signals with other factors. Endpoints cannot depend on particular treatment | |||
based on priority signals. Expressing priority is only a suggestion.</t> | based on priority signals. Expressing priority is only a suggestion.</t> | |||
<t>It is <bcp14>RECOMMENDED</bcp14> that, when possible, servers respect t he urgency parameter | <t>It is <bcp14>RECOMMENDED</bcp14> that, when possible, servers respect t he urgency parameter | |||
(<xref target="urgency" format="default"/>), sending higher urgency responses be fore lower urgency responses.</t> | (<xref target="urgency" format="default"/>), sending higher-urgency responses be fore lower-urgency responses.</t> | |||
<t>The incremental parameter indicates how a client processes response byt es as | <t>The incremental parameter indicates how a client processes response byt es as | |||
they arrive. It is <bcp14>RECOMMENDED</bcp14> that, when possible, servers respe ct the | they arrive. It is <bcp14>RECOMMENDED</bcp14> that, when possible, servers respe ct the | |||
incremental parameter (<xref target="incremental" format="default"/>).</t> | incremental parameter (<xref target="incremental" format="default"/>).</t> | |||
<t>Non-incremental responses of the same urgency <bcp14>SHOULD</bcp14> be served by prioritizing | <t>Non-incremental responses of the same urgency <bcp14>SHOULD</bcp14> be served by prioritizing | |||
bandwidth allocation in ascending order of the stream ID, which corresponds to | bandwidth allocation in ascending order of the stream ID, which corresponds to | |||
the order in which clients make requests. Doing so ensures that clients can use | the order in which clients make requests. Doing so ensures that clients can use | |||
request ordering to influence response order.</t> | request ordering to influence response order.</t> | |||
<t>Incremental responses of the same urgency <bcp14>SHOULD</bcp14> be serv ed by sharing bandwidth | <t>Incremental responses of the same urgency <bcp14>SHOULD</bcp14> be serv ed by sharing bandwidth | |||
among them. Payload of incremental responses are used in parts, or chunks, as | among them. The message content of incremental responses is used as parts, or ch | |||
they are received. A client might benefit more from receiving a portion of all | unks, | |||
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 | 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. | portion of the resource is needed to be useful in improving performance varies. | |||
Some resource types place critical elements early; others can use information | Some resource types place critical elements early; others can use information | |||
progressively. This scheme provides no explicit mandate about how a server | 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> | 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 in cremental | <t>There can be scenarios where a server will need to schedule multiple in cremental | |||
and non-incremental responses at the same urgency level. Strictly abiding the | and non-incremental responses at the same urgency level. Strictly abiding by the | |||
scheduling guidance based on urgency and request generation order might lead | scheduling guidance based on urgency and request generation order might lead | |||
to suboptimal results at the client, as early non-incremental responses might | to suboptimal results at the client, as early non-incremental responses might | |||
prevent serving of incremental responses issued later. The following are | prevent the serving of incremental responses issued later. The following are | |||
examples of such challenges.</t> | examples of such challenges:</t> | |||
<ol spacing="normal" type="1"><li>At the same urgency level, a non-increme ntal request for a large resource | <ol spacing="normal" type="1"><li>At the same urgency level, a non-increme ntal request for a large resource | |||
followed by an incremental request for a small resource.</li> | followed by an incremental request for a small resource.</li> | |||
<li>At the same urgency level, an incremental request of indeterminate l ength | <li>At the same urgency level, an incremental request of indeterminate l ength | |||
followed by a non-incremental large resource.</li> | followed by a non-incremental large resource.</li> | |||
</ol> | </ol> | |||
<t>It is <bcp14>RECOMMENDED</bcp14> that servers avoid such starvation whe re possible. The method | <t>It is <bcp14>RECOMMENDED</bcp14> that servers avoid such starvation whe re possible. The method | |||
to do so is an implementation decision. For example, a server might | for doing so is an implementation decision. For example, a server might | |||
pre-emptively send responses of a particular incremental type based on other | preemptively send responses of a particular incremental type based on other | |||
information such as content size.</t> | information such as content size.</t> | |||
<t>Optimal scheduling of server push is difficult, especially when pushed resources | <t>Optimal scheduling of server push is difficult, especially when pushed resources | |||
contend with active concurrent requests. Servers can consider many factors when | 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 | 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 request that triggered the push, the count of active concurrent responses, | |||
the priority of other active concurrent responses, etc. There is no general | 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 | 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 | 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> | 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 o f | <t>Priority signals are a factor for server push scheduling. The concept o f | |||
parameter value defaults applies slightly differently because there is no | parameter value defaults applies slightly differently because there is no | |||
explicit client-signalled initial priority. A server can apply priority signals | explicit client-signaled initial priority. A server can apply priority signals | |||
provided in an origin response; see the merging guidance given in <xref target=" merging" format="default"/>. | 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 | 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 | 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 | can signal the intended priority to the client by including the Priority field | |||
in a PUSH_PROMISE or HEADERS frame.</t> | in a PUSH_PROMISE or HEADERS frame.</t> | |||
<section anchor="intermediaries-with-multiple-backend-connections" numbere d="true" toc="default"> | <section anchor="intermediaries-with-multiple-backend-connections" numbere d="true" toc="default"> | |||
<name>Intermediaries with Multiple Backend Connections</name> | <name>Intermediaries with Multiple Backend Connections</name> | |||
<t>An intermediary serving an HTTP connection might split requests over multiple | <t>An intermediary serving an HTTP connection might split requests over multiple | |||
backend connections. When it applies prioritization rules strictly, low priority | backend connections. When it applies prioritization rules strictly, low-priority | |||
requests cannot make progress while requests with higher priorities are in | requests cannot make progress while requests with higher priorities are in | |||
flight. This blocking can propagate to backend connections, which the peer might | flight. This blocking can propagate to backend connections, which the peer might | |||
interpret as a connection stall. Endpoints often implement protections against | interpret as a connection stall. Endpoints often implement protections against | |||
stalls, such as abruptly closing connections after a certain time period. To | stalls, such as abruptly closing connections after a certain time period. To | |||
reduce the possibility of this occurring, intermediaries can avoid strictly | reduce the possibility of this occurring, intermediaries can avoid strictly | |||
following prioritization and instead allocate small amounts of bandwidth for all | following prioritization and instead allocate small amounts of bandwidth for all | |||
the requests that they are forwarding, so that every request can make some | the requests that they are forwarding, so that every request can make some | |||
progress over time.</t> | progress over time.</t> | |||
<t>Similarly, servers <bcp14>SHOULD</bcp14> allocate some amount of band widths to streams acting | <t>Similarly, servers <bcp14>SHOULD</bcp14> allocate some amount of band widths to streams acting | |||
as tunnels.</t> | as tunnels.</t> | |||
</section> | </section> | |||
</section> | </section> | |||
<section anchor="connect-scheduling" numbered="true" toc="default"> | <section anchor="connect-scheduling" numbered="true" toc="default"> | |||
<name>Scheduling and the CONNECT Method</name> | <name>Scheduling and the CONNECT Method</name> | |||
<t>When a request stream carries the CONNECT method, the scheduling guidan | <t>When a stream carries a CONNECT request, the scheduling guidance in | |||
ce in | this document applies to the frames on the stream. A client that issues multipl | |||
this document applies to the frames on the stream. A client that issues multiple | e | |||
CONNECT requests can set the incremental parameter to <tt>true</tt>. Servers tha t | CONNECT requests can set the incremental parameter to <tt>true</tt>. Servers tha t | |||
implement the recommendations for handling of the incremental parameter in | implement the recommendations for handling of the incremental parameter (<xref t | |||
<xref target="server-scheduling" format="default"/> are likely to schedule these | arget="server-scheduling" format="default"/>) are likely to schedule these fairl | |||
fairly, avoiding one | y, preventing one | |||
CONNECT stream from blocking others.</t> | CONNECT stream from blocking others.</t> | |||
</section> | </section> | |||
<section anchor="retransmission-scheduling" numbered="true" toc="default"> | <section anchor="retransmission-scheduling" numbered="true" toc="default"> | |||
<name>Retransmission Scheduling</name> | <name>Retransmission Scheduling</name> | |||
<t>Transport protocols such as TCP and QUIC provide reliability by detecti ng packet | <t>Transport protocols such as TCP and QUIC provide reliability by detecti ng packet | |||
losses and retransmitting lost information. In addition to the considerations in | losses and retransmitting lost information. In addition to the considerations in | |||
<xref target="server-scheduling" format="default"/>, scheduling of retransmissio n data could compete with new | <xref target="server-scheduling" format="default"/>, scheduling of retransmissio n data could compete with new | |||
data. The remainder of this section discusses considerations when using QUIC.</t > | 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 <bcp14>SHOULD</bcp14> prioritize | <t><xref section="13.3" sectionFormat="of" target="QUIC" format="default"/ > states the following: "Endpoints <bcp14>SHOULD</bcp14> prioritize | |||
retransmission of data over sending new data, unless priorities specified by the | retransmission of data over sending new data, unless priorities specified by the | |||
application indicate otherwise". When an HTTP/3 application uses the priority | application indicate otherwise". When an HTTP/3 application uses the priority | |||
scheme defined in this document and the QUIC transport implementation supports | scheme defined in this document and the QUIC transport implementation supports | |||
application indicated stream priority, a transport that considers the relative | application-indicated stream priority, a transport that considers the relative | |||
priority of streams when scheduling both new data and retransmission data might | priority of streams when scheduling both new data and retransmission data might | |||
better match the expectations of the application. However, there are no | better match the expectations of the application. However, there are no | |||
requirements on how a transport chooses to schedule based on this information | requirements on how a transport chooses to schedule based on this information | |||
because the decision depends on several factors and trade-offs. It could | 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 | 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 | lower-priority stream, or it could prioritize retransmission data over new data | |||
irrespective of urgencies.</t> | irrespective of urgencies.</t> | |||
<t><xref section="6.2.4" sectionFormat="of" target="QUIC-RECOVERY" format= "default"/> also highlights consideration of | <t><xref section="6.2.4" sectionFormat="of" target="QUIC-RECOVERY" format= "default"/> also highlights considerations regarding | |||
application priorities when sending probe packets after Probe Timeout timer | application priorities when sending probe packets after Probe Timeout timer | |||
expiration. A QUIC implementation supporting application-indicated priorities | expiration. A QUIC implementation supporting application-indicated priorities | |||
might use the relative priority of streams when choosing probe data.</t> | might use the relative priority of streams when choosing probe data.</t> | |||
</section> | </section> | |||
<section anchor="fairness" numbered="true" toc="default"> | <section anchor="fairness" numbered="true" toc="default"> | |||
<name>Fairness</name> | <name>Fairness</name> | |||
<t>Typically, HTTP implementations depend on the underlying transport to m aintain | <t>Typically, HTTP implementations depend on the underlying transport to m aintain | |||
fairness between connections competing for bandwidth. When HTTP requests are | fairness between connections competing for bandwidth. When an intermediary recei | |||
forwarded through intermediaries, progress made by each connection originating | ves HTTP requests on client connections, it forwards them to backend connections | |||
from end clients can become different over time, depending on how intermediaries | . Depending on how the intermediary coalesces or splits requests across differen | |||
coalesce or split requests into backend connections. This unfairness can expand | t backend connections, different clients might experience dissimilar performance | |||
if priority signals are used. <xref target="coalescing" format="default"/> and < | . This dissimilarity might expand if the intermediary also uses priority signals | |||
xref target="h1-backends" format="default"/> discuss | when | |||
mitigations against this expansion of unfairness.</t> | forwarding requests. Sections <xref target="coalescing" format="counter"/> | |||
and <xref target="h1-backends" format="counter"/> discuss | ||||
mitigations of this expansion of unfairness.</t> | ||||
<t>Conversely, <xref target="intentional-unfairness" format="default"/> di scusses how servers might intentionally | <t>Conversely, <xref target="intentional-unfairness" format="default"/> di scusses how servers might intentionally | |||
allocate unequal bandwidth to some connections depending on the priority | allocate unequal bandwidth to some connections, depending on the priority | |||
signals.</t> | signals.</t> | |||
<section anchor="coalescing" numbered="true" toc="default"> | <section anchor="coalescing" numbered="true" toc="default"> | |||
<name>Coalescing Intermediaries</name> | <name>Coalescing Intermediaries</name> | |||
<t>When an intermediary coalesces HTTP requests coming from multiple cli ents into | <t>When an intermediary coalesces HTTP requests coming from multiple cli ents into | |||
one HTTP/2 or HTTP/3 connection going to the backend server, requests that | one HTTP/2 or HTTP/3 connection going to the backend server, requests that | |||
originate from one client might carry signals indicating higher priority than | originate from one client might carry signals indicating higher priority than | |||
those coming from others.</t> | those coming from others.</t> | |||
<t>It is sometimes beneficial for the server running behind an intermedi ary to obey | <t>It is sometimes beneficial for the server running behind an intermedi ary to obey | |||
Priority header field values. As an example, a resource-constrained | Priority header field values. As an example, a resource-constrained | |||
server might defer the transmission of software update files that have the | server might defer the transmission of software update files that have the | |||
background urgency. However, in the worst case, the asymmetry | background urgency level (7). However, in the worst case, the asymmetry | |||
between the priority declared by multiple clients might cause responses going to | between the priority declared by multiple clients might cause all responses goin | |||
one user agent to be delayed totally after those going to another.</t> | g to | |||
one user agent to be delayed until all responses going to another user agent hav | ||||
e | ||||
been sent.</t> | ||||
<t>In order to mitigate this fairness problem, a server could use knowle dge about | <t>In order to mitigate this fairness problem, a server could use knowle dge about | |||
the intermediary as another input in its prioritization decisions. For | the intermediary as another input in its prioritization decisions. For | |||
instance, if a server knows the intermediary is coalescing requests, then it | instance, if a server knows the intermediary is coalescing requests, then it | |||
could avoid serving the responses in their entirety and instead distribute | could avoid serving the responses in their entirety and instead distribute | |||
bandwidth (for example, in a round-robin manner). This can work if the | bandwidth (for example, in a round-robin manner). This can work if the | |||
constrained resource is network capacity between the intermediary and the user | constrained resource is network capacity between the intermediary and the user | |||
agent, as the intermediary buffers responses and forwards the chunks based on | agent, as the intermediary buffers responses and forwards the chunks based on | |||
the prioritization scheme it implements.</t> | the prioritization scheme it implements.</t> | |||
<t>A server can determine if a request came from an intermediary through | <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 | configuration or can check to see if the request contains one of the following | |||
header fields:</t> | header fields:</t> | |||
<ul spacing="normal"> | <ul spacing="normal"> | |||
<li>Forwarded <xref target="FORWARDED" format="default"/>, X-Forwarded -For</li> | <li>Forwarded <xref target="FORWARDED" format="default"/>, X-Forwarded -For</li> | |||
<li>Via (see <xref section="7.6.3" sectionFormat="of" target="HTTP" fo rmat="default"/>)</li> | <li>Via (see <xref section="7.6.3" sectionFormat="of" target="HTTP" fo rmat="default"/>)</li> | |||
</ul> | </ul> | |||
</section> | </section> | |||
<section anchor="h1-backends" numbered="true" toc="default"> | <section anchor="h1-backends" numbered="true" toc="default"> | |||
<name>HTTP/1.x Back Ends</name> | <name>HTTP/1.x Back Ends</name> | |||
<t>It is common for CDN infrastructure to support different HTTP version s on the | <t>It is common for Content Delivery Network (CDN) infrastructure to sup port different HTTP versions on the | |||
front end and back end. For instance, the client-facing edge might support | 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/2 and HTTP/3 while communication to backend servers is done using | |||
HTTP/1.1. Unlike with connection coalescing, the CDN will "de-mux" requests into | HTTP/1.1. Unlike connection coalescing, the CDN will "demux" requests into | |||
discrete connections to the back end. HTTP/1.1 and older do not support response | discrete connections to the back end. Response multiplexing in a single connecti | |||
multiplexing in a single connection, so there is not a fairness problem. | on is not supported by HTTP/1.1 (or older), so there is not a fairness problem. | |||
However, back end servers <bcp14>MAY</bcp14> still use client headers for reques | However, backend servers <bcp14>MAY</bcp14> still use client headers for request | |||
t scheduling. | scheduling. | |||
Back end servers <bcp14>SHOULD</bcp14> only schedule based on client priority in | Backend servers <bcp14>SHOULD</bcp14> only schedule based on client priority inf | |||
formation where | ormation where | |||
that information can be scoped to individual end clients. Authentication and | that information can be scoped to individual end clients. Authentication and | |||
other session information might provide this linkability.</t> | other session information might provide this linkability.</t> | |||
</section> | </section> | |||
<section anchor="intentional-unfairness" numbered="true" toc="default"> | <section anchor="intentional-unfairness" numbered="true" toc="default"> | |||
<name>Intentional Introduction of Unfairness</name> | <name>Intentional Introduction of Unfairness</name> | |||
<t>It is sometimes beneficial to deprioritize the transmission of one co nnection | <t>It is sometimes beneficial to deprioritize the transmission of one co nnection | |||
over others, knowing that doing so introduces a certain amount of unfairness | over others, knowing that doing so introduces a certain amount of unfairness | |||
between the connections and therefore between the requests served on those | between the connections and therefore between the requests served on those | |||
connections.</t> | connections.</t> | |||
<t>For example, a server might use a scavenging congestion controller on | <t>For example, a server might use a scavenging congestion controller on | |||
connections that only convey background priority responses such as software | connections that only convey background priority responses such as software | |||
update images. Doing so improves responsiveness of other connections at the cost | update images. Doing so improves responsiveness of other connections at the cost | |||
of delaying the delivery of updates.</t> | of delaying the delivery of updates.</t> | |||
</section> | </section> | |||
</section> | </section> | |||
<section anchor="header-field-rationale" numbered="true" toc="default"> | <section anchor="header-field-rationale" numbered="true" toc="default"> | |||
<name>Why use an End-to-End Header Field?</name> | <name>Why Use an End-to-End Header Field?</name> | |||
<t>In contrast to the prioritization scheme of HTTP/2 that uses a hop-by-h | <t>In contrast to the prioritization scheme of HTTP/2, which uses a hop-by | |||
op frame, | -hop frame, | |||
the Priority header field is defined as end-to-end.</t> | the Priority header field is defined as "end-to-end".</t> | |||
<t>The way that a client processes a response is a property associated wit h the | <t>The way that a client processes a response is a property associated wit h the | |||
client generating that request, not that of an intermediary. Therefore, it is | 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 | 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 | header field affect the prioritization between the responses that share a | |||
connection is a hop-by-hop issue.</t> | connection is a hop-by-hop issue.</t> | |||
<t>Having the Priority header field defined as end-to-end is important for caching | <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 | 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 | 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 | when serving the cached response, only because the header field is defined as | |||
end-to-end rather than hop-by-hop.</t> | end-to-end rather than hop-by-hop.</t> | |||
</section> | </section> | |||
<section anchor="security-considerations" numbered="true" toc="default"> | <section anchor="security-considerations" numbered="true" toc="default"> | |||
<name>Security Considerations</name> | <name>Security Considerations</name> | |||
<t><xref target="frame" format="default"/> describes considerations for se rver buffering of PRIORITY_UPDATE | <t><xref target="frame" format="default"/> describes considerations for se rver buffering of PRIORITY_UPDATE | |||
frames.</t> | frames.</t> | |||
<t><xref target="server-scheduling" format="default"/> presents examples w here servers that prioritize responses | <t><xref target="server-scheduling" format="default"/> presents examples w here servers that prioritize responses | |||
in a certain way might be starved of the ability to transmit payload.</t> | in a certain way might be starved of the ability to transmit responses.</t> | |||
<t>The security considerations from <xref target="STRUCTURED-FIELDS" forma | <t>The security considerations from <xref target="STRUCTURED-FIELDS" forma | |||
t="default"/> apply to processing of | t="default"/> apply to the processing of | |||
priority parameters defined in <xref target="parameters" format="default"/>.</t> | priority parameters defined in <xref target="parameters" format="default"/>.</t> | |||
</section> | </section> | |||
<section anchor="iana-considerations" numbered="true" toc="default"> | <section anchor="iana-considerations" numbered="true" toc="default"> | |||
<name>IANA Considerations</name> | <name>IANA Considerations</name> | |||
<t>This specification registers the following entry in the Hypertext Trans | <t>This specification registers the following entry in the "Hypertext Tran | |||
fer | sfer | |||
Protocol (HTTP) Field Name Registry established by <xref target="HTTP" format="d | Protocol (HTTP) Field Name Registry" defined in <xref target="HTTP2" format="def | |||
efault"/>:</t> | ault"/>:</t> | |||
<dl> | <dl spacing="compact"> | |||
<dt> | <dt> | |||
Field name: </dt> | Field Name: </dt> | |||
<dd> | <dd> | |||
<t>Priority</t> | <t>Priority</t> | |||
</dd> | </dd> | |||
<dt> | <dt> | |||
Status: </dt> | Status: </dt> | |||
<dd> | <dd> | |||
<t>permanent</t> | <t>permanent</t> | |||
</dd> | </dd> | |||
<dt> | <dt> | |||
Specification document(s): </dt> | Reference: </dt> | |||
<dd> | <dd> | |||
<t>This document</t> | <t>This document</t> | |||
</dd> | </dd> | |||
</dl> | </dl> | |||
<t>This specification registers the following entry in the HTTP/2 Settings | <t>This specification registers the following entry in the "HTTP/2 Setting | |||
registry | s" registry | |||
established by <xref target="RFC7540" format="default"/>:</t> | defined in <xref target="HTTP2" format="default"/>:</t> | |||
<dl> | <dl spacing="compact"> | |||
<dt> | <dt> | |||
Name: </dt> | Code: </dt> | |||
<dd> | <dd> | |||
<t>SETTINGS_NO_RFC7540_PRIORITIES</t> | <t>0x9</t> | |||
</dd> | </dd> | |||
<dt> | <dt> | |||
Code: </dt> | Name: </dt> | |||
<dd> | <dd> | |||
<t>0x9</t> | <t>SETTINGS_NO_RFC7540_PRIORITIES</t> | |||
</dd> | </dd> | |||
<dt> | <dt> | |||
Initial value: </dt> | Initial Value: </dt> | |||
<dd> | <dd> | |||
<t>0</t> | <t>0</t> | |||
</dd> | </dd> | |||
<dt> | <dt> | |||
Specification: </dt> | Reference: </dt> | |||
<dd> | <dd> | |||
<t>This document</t> | <t>This document</t> | |||
</dd> | </dd> | |||
</dl> | </dl> | |||
<t>This specification registers the following entry in the HTTP/2 Frame Ty | <t>This specification registers the following entry in the "HTTP/2 Frame T | |||
pe | ype" | |||
registry established by <xref target="RFC7540" format="default"/>:</t> | registry defined in <xref target="HTTP2" format="default"/>:</t> | |||
<dl> | <dl spacing="compact"> | |||
<dt> | <dt> | |||
Frame Type: </dt> | Code: </dt> | |||
<dd> | <dd> | |||
<t>PRIORITY_UPDATE</t> | <t>0x10</t> | |||
</dd> | </dd> | |||
<dt> | <dt> | |||
Code: </dt> | Frame Type: </dt> | |||
<dd> | <dd> | |||
<t>0x10</t> | <t>PRIORITY_UPDATE</t> | |||
</dd> | </dd> | |||
<dt> | <dt> | |||
Specification: </dt> | Reference: </dt> | |||
<dd> | <dd> | |||
<t>This document</t> | <t>This document</t> | |||
</dd> | </dd> | |||
</dl> | </dl> | |||
<t>This specification registers the following entries in the HTTP/3 Frame Type | <t>This specification registers the following entry in the "HTTP/3 Frame T ypes" | |||
registry established by <xref target="HTTP3" format="default"/>:</t> | registry established by <xref target="HTTP3" format="default"/>:</t> | |||
<dl> | <dl spacing="compact"> | |||
<dt> | ||||
Value: </dt> | ||||
<dd> | ||||
<t>0xF0700-0xF0701</t> | ||||
</dd> | ||||
<dt> | <dt> | |||
Frame Type: </dt> | Frame Type: </dt> | |||
<dd> | <dd> | |||
<t>PRIORITY_UPDATE</t> | <t>PRIORITY_UPDATE</t> | |||
</dd> | </dd> | |||
<dt> | <dt> | |||
Code: </dt> | Status: </dt> | |||
<dd> | <dd> | |||
<t>0xF0700 and 0xF0701</t> | <t>permanent</t> | |||
</dd> | </dd> | |||
<dt> | <dt> | |||
Specification: </dt> | Reference: </dt> | |||
<dd> | <dd> | |||
<t>This document</t> | <t>This document</t> | |||
</dd> | </dd> | |||
<dt> | ||||
Change Controller: </dt> | ||||
<dd> | ||||
<t>IETF</t> | ||||
</dd> | ||||
<dt> | ||||
Contact: </dt> | ||||
<dd> | ||||
<t>ietf-http-wg@w3.org</t> | ||||
</dd> | ||||
</dl> | </dl> | |||
<t>Upon publication, please create the HTTP Priority Parameters registry a | <t>IANA has created the "Hypertext Transfer Protocol (HTTP) Priority" regi | |||
t | stry at | |||
<eref target="https://iana.org/assignments/http-priority">https://iana.org/assig | <eref target="https://www.iana.org/assignments/http-priority" brackets="angle"/> | |||
nments/http-priority</eref> and populate it with the entries in | and has populated it with the entries in | |||
<xref target="iana-parameter-table" format="default"/>; see <xref target="regist er" format="default"/> for its associated procedures.</t> | <xref target="iana-parameter-table" format="default"/>; see <xref target="regist er" format="default"/> for its associated procedures.</t> | |||
<table anchor="iana-parameter-table" align="center"> | <table anchor="iana-parameter-table" align="center"> | |||
<name>Initial Priority Parameters</name> | <name>Initial Priority Parameters</name> | |||
<thead> | <thead> | |||
<tr> | <tr> | |||
<th align="left">Name</th> | <th align="left">Name</th> | |||
<th align="center">Description</th> | <th align="center">Description</th> | |||
<th align="left">Specification</th> | <th align="left">Reference</th> | |||
</tr> | </tr> | |||
</thead> | </thead> | |||
<tbody> | <tbody> | |||
<tr> | <tr> | |||
<td align="left">u</td> | <td align="left">u</td> | |||
<td align="center">The urgency of an HTTP response.</td> | <td align="center">The urgency of an HTTP response.</td> | |||
<td align="left"> | <td align="left"> | |||
<xref target="urgency" format="default"/></td> | <xref target="urgency" format="default"/></td> | |||
</tr> | </tr> | |||
<tr> | <tr> | |||
<td align="left">i</td> | <td align="left">i</td> | |||
<td align="center">Whether an HTTP response can be processed increme ntally.</td> | <td align="center">Whether an HTTP response can be processed increme ntally.</td> | |||
<td align="left"> | <td align="left"> | |||
<xref target="incremental" format="default"/></td> | <xref target="incremental" format="default"/></td> | |||
</tr> | </tr> | |||
</tbody> | </tbody> | |||
</table> | </table> | |||
</section> | </section> | |||
</middle> | </middle> | |||
<back> | <back> | |||
<displayreference target="HTTP2" to="HTTP/2"/> | ||||
<displayreference target="HTTP3" to="HTTP/3"/> | ||||
<displayreference target="I-D.lassey-priority-setting" to="PRIORITY-SETTING"/> | ||||
<references> | <references> | |||
<name>References</name> | <name>References</name> | |||
<references> | <references> | |||
<name>Normative References</name> | <name>Normative References</name> | |||
<reference anchor="HTTP"> | <!-- [HTTP] draft-ietf-httpbis-semantics (RFC 9110) AUTH48 --> | |||
<reference anchor='HTTP' target="https://www.rfc-editor.org/info/rfc9110 | ||||
"> | ||||
<front> | <front> | |||
<title>HTTP Semantics</title> | <title>HTTP Semantics</title> | |||
<author fullname="Roy T. Fielding"> | <author initials='R' surname='Fielding' fullname='Roy Fielding' role | |||
<organization>Adobe</organization> | ="editor"> | |||
</author> | <organization /> | |||
<author fullname="Mark Nottingham"> | ||||
<organization>Fastly</organization> | ||||
</author> | ||||
<author fullname="Julian Reschke"> | ||||
<organization>greenbytes GmbH</organization> | ||||
</author> | </author> | |||
<date day="12" month="September" year="2021"/> | <author initials='M' surname='Nottingham' fullname='Mark Nottingham' | |||
<abstract> | role="editor"> | |||
<t> The Hypertext Transfer Protocol (HTTP) is a stateless applic | <organization /> | |||
ation- | ||||
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> | |||
<author fullname="Cory Benfield"> | <author initials='J' surname='Reschke' fullname='Julian Reschke' rol | |||
<organization>Apple Inc.</organization> | e="editor"> | |||
<organization /> | ||||
</author> | </author> | |||
<date day="18" month="November" year="2021"/> | <date year='2022' month='June'/> | |||
<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> | </front> | |||
<seriesInfo name="Internet-Draft" value="draft-ietf-httpbis-http2bis-0 | <seriesInfo name="STD" value="97"/> | |||
6"/> | <seriesInfo name="RFC" value="9110"/> | |||
<seriesInfo name="DOI" value="10.17487/RFC9110"/> | ||||
</reference> | </reference> | |||
<reference anchor="HTTP3"> | <!-- [HTTP/2] draft-ietf-httpbis-http2bis (RFC 9113) AUTH48 --> | |||
<reference anchor='HTTP2' target="https://www.rfc-editor.org/info/rfc911 | ||||
3"> | ||||
<front> | <front> | |||
<title>Hypertext Transfer Protocol Version 3 (HTTP/3)</title> | <title>HTTP/2</title> | |||
<author fullname="Mike Bishop"> | <author initials='M' surname='Thomson' fullname='Martin Thomson' rol | |||
<organization>Akamai</organization> | e="editor"> | |||
<organization /> | ||||
</author> | </author> | |||
<date day="2" month="February" year="2021"/> | <author initials='C' surname='Benfield' fullname='Cory Benfield' rol | |||
<abstract> | e="editor"> | |||
<t> The QUIC transport protocol has several features that are de | <organization /> | |||
sirable | ||||
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</tit | ||||
le> | ||||
<author fullname="S. Bradner" initials="S." surname="Bradner"> | ||||
<organization/> | ||||
</author> | </author> | |||
<date month="March" year="1997"/> | <date year='2022' month='June'/> | |||
<abstract> | ||||
<t>In many standards track documents several words are used to sig | ||||
nify the requirements in the specification. These words are often capitalized. | ||||
This document defines these words as they should be interpreted in IETF document | ||||
s. This document specifies an Internet Best Current Practices for the Internet | ||||
Community, and requests discussion and suggestions for improvements.</t> | ||||
</abstract> | ||||
</front> | </front> | |||
<seriesInfo name="BCP" value="14"/> | <seriesInfo name="RFC" value="9113"/> | |||
<seriesInfo name="RFC" value="2119"/> | <seriesInfo name="DOI" value="10.17487/RFC9113"/> | |||
<seriesInfo name="DOI" value="10.17487/RFC2119"/> | ||||
</reference> | </reference> | |||
<reference anchor="RFC8174"> | <!-- [HTTP/3] draft-ietf-quic-http (RFC 9114) AUTH48 --> | |||
<reference anchor='HTTP3' target="https://www.rfc-editor.org/info/rfc911 | ||||
4"> | ||||
<front> | <front> | |||
<title>Ambiguity of Uppercase vs Lowercase in RFC 2119 Key Words</ti | <title>HTTP/3</title> | |||
tle> | <author initials='M' surname='Bishop' fullname='Mike Bishop' role="e | |||
<author fullname="B. Leiba" initials="B." surname="Leiba"> | ditor"> | |||
<organization/> | <organization /> | |||
</author> | </author> | |||
<date month="May" year="2017"/> | <date year='2022' month='June'/> | |||
<abstract> | ||||
<t>RFC 2119 specifies common key words that may be used in protoco | ||||
l specifications. This document aims to reduce the ambiguity by clarifying tha | ||||
t only UPPERCASE usage of the key words have the defined special meanings.</t> | ||||
</abstract> | ||||
</front> | </front> | |||
<seriesInfo name="BCP" value="14"/> | <seriesInfo name="RFC" value="9114"/> | |||
<seriesInfo name="RFC" value="8174"/> | <seriesInfo name="DOI" value="10.17487/RFC9114"/> | |||
<seriesInfo name="DOI" value="10.17487/RFC8174"/> | ||||
</reference> | </reference> | |||
<reference anchor="STRUCTURED-FIELDS"> | <xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.R | |||
FC.2119.xml"/> | ||||
<xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.R | ||||
FC.8174.xml"/> | ||||
<reference anchor="STRUCTURED-FIELDS" target="https://www.rfc-editor.org | ||||
/info/rfc8941"> | ||||
<front> | <front> | |||
<title>Structured Field Values for HTTP</title> | <title>Structured Field Values for HTTP</title> | |||
<author fullname="M. Nottingham" initials="M." surname="Nottingham"> | <author fullname="M. Nottingham" initials="M." surname="Nottingham"> | |||
<organization/> | <organization/> | |||
</author> | </author> | |||
<author fullname="P-H. Kamp" initials="P-H." surname="Kamp"> | <author fullname="P-H. Kamp" initials="P-H." surname="Kamp"> | |||
<organization/> | <organization/> | |||
</author> | </author> | |||
<date month="February" year="2021"/> | <date month="February" year="2021"/> | |||
<abstract> | ||||
<t>This document describes a set of data types and associated algo | ||||
rithms that are intended to make it easier and safer to define and handle HTTP h | ||||
eader and trailer fields, known as "Structured Fields", "Structured Headers", or | ||||
"Structured Trailers". It is intended for use by specifications of new HTTP fie | ||||
lds that wish to use a common syntax that is more restrictive than traditional H | ||||
TTP field values.</t> | ||||
</abstract> | ||||
</front> | </front> | |||
<seriesInfo name="RFC" value="8941"/> | <seriesInfo name="RFC" value="8941"/> | |||
<seriesInfo name="DOI" value="10.17487/RFC8941"/> | <seriesInfo name="DOI" value="10.17487/RFC8941"/> | |||
</reference> | </reference> | |||
<reference anchor="QUIC"> | <reference anchor="QUIC" target="https://www.rfc-editor.org/info/rfc9000 "> | |||
<front> | <front> | |||
<title>QUIC: A UDP-Based Multiplexed and Secure Transport</title> | <title>QUIC: A UDP-Based Multiplexed and Secure Transport</title> | |||
<author fullname="J. Iyengar" initials="J." role="editor" surname="I yengar"> | <author fullname="J. Iyengar" initials="J." role="editor" surname="I yengar"> | |||
<organization/> | <organization/> | |||
</author> | </author> | |||
<author fullname="M. Thomson" initials="M." role="editor" surname="T homson"> | <author fullname="M. Thomson" initials="M." role="editor" surname="T homson"> | |||
<organization/> | <organization/> | |||
</author> | </author> | |||
<date month="May" year="2021"/> | <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 communic | ||||
ation, low-latency connection establishment, and network path migration. QUIC in | ||||
cludes security measures that ensure confidentiality, integrity, and availabilit | ||||
y in a range of deployment circumstances. Accompanying documents describe the i | ||||
ntegration of TLS for key negotiation, loss detection, and an exemplary congesti | ||||
on control algorithm.</t> | ||||
</abstract> | ||||
</front> | </front> | |||
<seriesInfo name="RFC" value="9000"/> | <seriesInfo name="RFC" value="9000"/> | |||
<seriesInfo name="DOI" value="10.17487/RFC9000"/> | <seriesInfo name="DOI" value="10.17487/RFC9000"/> | |||
</reference> | </reference> | |||
<reference anchor="RFC8126"> | <xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.R | |||
<front> | FC.8126.xml"/> | |||
<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 con | ||||
stants to identify various protocol parameters. To ensure that the values in th | ||||
ese fields do not have conflicting uses and to promote interoperability, their a | ||||
llocations 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 des | ||||
cribing the conditions under which new values should be assigned, as well as whe | ||||
n and how modifications to existing values can be made, is needed. This documen | ||||
t defines a framework for the documentation of these guidelines by specification | ||||
authors, in order to assure that the provided guidance for the IANA Considerati | ||||
ons is clear and addresses the various issues that are likely in the operation o | ||||
f a registry.</t> | ||||
<t>This is the third edition of this document; it obsoletes RFC 52 | ||||
26.</t> | ||||
</abstract> | ||||
</front> | ||||
<seriesInfo name="BCP" value="26"/> | ||||
<seriesInfo name="RFC" value="8126"/> | ||||
<seriesInfo name="DOI" value="10.17487/RFC8126"/> | ||||
</reference> | ||||
</references> | </references> | |||
<references> | <references> | |||
<name>Informative References</name> | <name>Informative References</name> | |||
<reference anchor="MARX" target="https://www.doi.org/10.5220/00081917013 00143"> | <reference anchor="MARX" target="https://www.doi.org/10.5220/00081917013 00143"> | |||
<front> | <front> | |||
<title>Of the Utmost Importance: Resource Prioritization in HTTP/3 o ver QUIC</title> | <title>Of the Utmost Importance: Resource Prioritization in HTTP/3 o ver QUIC</title> | |||
<author initials="R." surname="Marx" fullname="Robin Marx"> | <author initials="R." surname="Marx" fullname="Robin Marx"> | |||
<organization/> | <organization/> | |||
</author> | </author> | |||
<author initials="T.D." surname="Decker" fullname="Tom De Decker"> | <author initials="T." surname="De Decker" fullname="Tom De Decker"> | |||
<organization/> | <organization/> | |||
</author> | </author> | |||
<author initials="P." surname="Quax" fullname="Peter Quax"> | <author initials="P." surname="Quax" fullname="Peter Quax"> | |||
<organization/> | <organization/> | |||
</author> | </author> | |||
<author initials="W." surname="Lamotte" fullname="Wim Lamotte"> | <author initials="W." surname="Lamotte" fullname="Wim Lamotte"> | |||
<organization/> | <organization/> | |||
</author> | </author> | |||
<date year="2019" month="September"/> | <date year="2019" month="September"/> | |||
</front> | </front> | |||
<seriesInfo name="DOI" value="10.5220/0008191701300143"/> | <seriesInfo name="DOI" value="10.5220/0008191701300143"/> | |||
<seriesInfo name="SCITEPRESS" value="Proceedings of the 15th Internati | <refcontent>SCITEPRESS Proceedings of the 15th International Conferenc | |||
onal Conference on Web Information Systems and Technologies (pages 130-143)"/> | e on Web Information Systems and Technologies (pages 130-143)</refcontent> | |||
</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="T | ||||
homson"> | ||||
<organization/> | ||||
</author> | ||||
<date month="May" year="2015"/> | ||||
<abstract> | ||||
<t>This specification describes an optimized expression of the sem | ||||
antics 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 reduce | ||||
d perception of latency by introducing header field compression and allowing mul | ||||
tiple concurrent exchanges on the same connection. It also introduces unsolicit | ||||
ed 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> | |||
<reference anchor="CACHING"> | <xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.R | |||
FC.7540.xml"/> | ||||
<!-- [CACHING] draft-ietf-httpbis-cache (RFC 9111) AUTH48 --> | ||||
<reference anchor='CACHING' target="https://www.rfc-editor.org/info/rfc9 | ||||
111"> | ||||
<front> | <front> | |||
<title>HTTP Caching</title> | <title>HTTP Caching</title> | |||
<author fullname="Roy T. Fielding"> | <author initials='R' surname='Fielding' fullname='Roy Fielding' role | |||
<organization>Adobe</organization> | ="editor"> | |||
</author> | <organization /> | |||
<author fullname="Mark Nottingham"> | ||||
<organization>Fastly</organization> | ||||
</author> | </author> | |||
<author fullname="Julian Reschke"> | <author initials='M' surname='Nottingham' fullname='Mark Nottingham' | |||
<organization>greenbytes GmbH</organization> | role="editor"> | |||
<organization /> | ||||
</author> | </author> | |||
<date day="12" month="September" year="2021"/> | <author initials='J' surname='Reschke' fullname='Julian Reschke' rol | |||
<abstract> | e="editor"> | |||
<t> The Hypertext Transfer Protocol (HTTP) is a stateless applic | <organization /> | |||
ation- | ||||
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> | </author> | |||
<date month="February" year="2017"/> | <date year='2022' month='June'/> | |||
<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 reg | ||||
istered. This document also serves as a registration application for a set of i | ||||
ntended subtypes, which are representative of some existing subtypes already in | ||||
use, and currently registered under the "application" tree by their separate reg | ||||
istrations.</t> | ||||
</abstract> | ||||
</front> | </front> | |||
<seriesInfo name="RFC" value="8081"/> | <seriesInfo name="STD" value="98"/> | |||
<seriesInfo name="DOI" value="10.17487/RFC8081"/> | <seriesInfo name="RFC" value="9111"/> | |||
</reference> | <seriesInfo name="DOI" value="10.17487/RFC9111"/> | |||
<reference anchor="QUIC-RECOVERY"> | </reference> | |||
<xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.R | ||||
FC.8081.xml"/> | ||||
<reference anchor="QUIC-RECOVERY" target="https://www.rfc-editor.org/inf | ||||
o/rfc9002"> | ||||
<front> | <front> | |||
<title>QUIC Loss Detection and Congestion Control</title> | <title>QUIC Loss Detection and Congestion Control</title> | |||
<author fullname="J. Iyengar" initials="J." role="editor" surname="I yengar"> | <author fullname="J. Iyengar" initials="J." role="editor" surname="I yengar"> | |||
<organization/> | <organization/> | |||
</author> | </author> | |||
<author fullname="I. Swett" initials="I." role="editor" surname="Swe tt"> | <author fullname="I. Swett" initials="I." role="editor" surname="Swe tt"> | |||
<organization/> | <organization/> | |||
</author> | </author> | |||
<date month="May" year="2021"/> | <date month="May" year="2021"/> | |||
<abstract> | ||||
<t>This document describes loss detection and congestion control m | ||||
echanisms for QUIC.</t> | ||||
</abstract> | ||||
</front> | </front> | |||
<seriesInfo name="RFC" value="9002"/> | <seriesInfo name="RFC" value="9002"/> | |||
<seriesInfo name="DOI" value="10.17487/RFC9002"/> | <seriesInfo name="DOI" value="10.17487/RFC9002"/> | |||
</reference> | </reference> | |||
<reference anchor="FORWARDED"> | <reference anchor="FORWARDED" target="https://www.rfc-editor.org/info/rf c7239"> | |||
<front> | <front> | |||
<title>Forwarded HTTP Extension</title> | <title>Forwarded HTTP Extension</title> | |||
<author fullname="A. Petersson" initials="A." surname="Petersson"> | <author fullname="A. Petersson" initials="A." surname="Petersson"> | |||
<organization/> | <organization/> | |||
</author> | </author> | |||
<author fullname="M. Nilsson" initials="M." surname="Nilsson"> | <author fullname="M. Nilsson" initials="M." surname="Nilsson"> | |||
<organization/> | <organization/> | |||
</author> | </author> | |||
<date month="June" year="2014"/> | <date month="June" year="2014"/> | |||
<abstract> | ||||
<t>This document defines an HTTP extension header field that allow | ||||
s proxy components to disclose information lost in the proxying process, for exa | ||||
mple, 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 po | ||||
ssible 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 administrat | ||||
or to anonymize the origin of a request.</t> | ||||
</abstract> | ||||
</front> | </front> | |||
<seriesInfo name="RFC" value="7239"/> | <seriesInfo name="RFC" value="7239"/> | |||
<seriesInfo name="DOI" value="10.17487/RFC7239"/> | <seriesInfo name="DOI" value="10.17487/RFC7239"/> | |||
</reference> | </reference> | |||
<reference anchor="I-D.lassey-priority-setting"> | <!-- draft-lassey-priority-setting (Expired) --> | |||
<front> | <xi:include href="https://datatracker.ietf.org/doc/bibxml3/reference.I-D | |||
<title>Declaring Support for HTTP/2 Priorities</title> | .lassey-priority-setting.xml"/> | |||
<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 s | ||||
hown 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> | </references> | |||
<section anchor="acknowledgements" numbered="true" toc="default"> | </references> | |||
<section anchor="acknowledgements" numbered="false" toc="default"> | ||||
<name>Acknowledgements</name> | <name>Acknowledgements</name> | |||
<t>Roy Fielding presented the idea of using a header field for representin | <t><contact fullname="Roy Fielding"/> | |||
g | presented the idea of using a header field for representing | |||
priorities in <eref target="https://www.ietf.org/proceedings/83/slides/slides-83 | priorities in <eref target="https://www.ietf.org/proceedings/83/slides/slides-83 | |||
-httpbis-5.pdf">https://www.ietf.org/proceedings/83/slides/slides-83-httpbis-5.p | -httpbis-5.pdf" brackets="angle"/>. | |||
df</eref>. | In <eref target="https://github.com/pmeenan/http3-prioritization-proposal" brack | |||
In <eref target="https://github.com/pmeenan/http3-prioritization-proposal">https | ets="angle"/>, <contact fullname="Patrick Meenan"/> | |||
://github.com/pmeenan/http3-prioritization-proposal</eref>, Patrick Meenan | ||||
advocated for representing the priorities using a tuple of urgency and | advocated for representing the priorities using a tuple of urgency and | |||
concurrency. The ability to disable HTTP/2 prioritization is inspired by | 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 | <xref target="I-D.lassey-priority-setting" format="default"/>, authored by <cont act fullname="Brad Lassey"/> and <contact fullname="Lucas Pardue"/>, with | |||
modifications based on feedback that was not incorporated into an update to that | modifications based on feedback that was not incorporated into an update to that | |||
document.</t> | document.</t> | |||
<t>The motivation for defining an alternative to HTTP/2 priorities is draw n from | <t>The motivation for defining an alternative to HTTP/2 priorities is draw n from | |||
discussion within the broad HTTP community. Special thanks to Roberto Peon, | discussion within the broad HTTP community. Special thanks to <contact fullname= | |||
Martin Thomson and Netflix for text that was incorporated explicitly in this | "Roberto Peon"/>, | |||
<contact fullname="Martin Thomson"/>, and Netflix for text that was incorporated | ||||
explicitly in this | ||||
document.</t> | document.</t> | |||
<t>In addition to the people above, this document owes a lot to the extens ive | <t>In addition to the people above, this document owes a lot to the extens ive | |||
discussion in the HTTP priority design team, consisting of Alan Frindell, | discussion in the HTTP priority design team, consisting of <contact fullname="Al | |||
Andrew Galloni, Craig Taylor, Ian Swett, Kazuho Oku, Lucas Pardue, Matthew Cox, | an Frindell"/>, | |||
Mike Bishop, Roberto Peon, Robin Marx, Roy Fielding.</t> | <contact fullname="Andrew Galloni"/>, <contact fullname="Craig Taylor"/>, <conta | |||
<t>Yang Chi contributed the section on retransmission scheduling.</t> | ct fullname="Ian Swett"/>, <contact fullname="Matthew Cox"/>, | |||
</section> | <contact fullname="Mike Bishop"/>, <contact fullname="Roberto Peon"/>, <contact | |||
<section anchor="change-log" numbered="true" toc="default"> | fullname="Robin Marx"/>, <contact fullname="Roy Fielding"/>, and the authors | |||
<name>Change Log</name> | of this document.</t> | |||
<t><em>RFC EDITOR: please remove this section before publication</em></t> | <t><contact fullname="Yang Chi"/> contributed the section on retransmissio | |||
<section anchor="since-draft-ietf-httpbis-priority-11" numbered="true" toc | n scheduling.</t> | |||
="default"> | ||||
<name>Since draft-ietf-httpbis-priority-11</name> | ||||
<ul spacing="normal"> | ||||
<li>Changes to address Last Call/IESG feedback</li> | ||||
</ul> | ||||
</section> | ||||
<section anchor="since-draft-ietf-httpbis-priority-10" numbered="true" toc | ||||
="default"> | ||||
<name>Since draft-ietf-httpbis-priority-10</name> | ||||
<ul spacing="normal"> | ||||
<li>Editorial changes</li> | ||||
<li>Add clearer IANA instructions for Priority Parameter initial popul | ||||
ation</li> | ||||
</ul> | ||||
</section> | ||||
<section anchor="since-draft-ietf-httpbis-priority-09" numbered="true" toc | ||||
="default"> | ||||
<name>Since draft-ietf-httpbis-priority-09</name> | ||||
<ul spacing="normal"> | ||||
<li>Editorial changes</li> | ||||
</ul> | ||||
</section> | ||||
<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 tha | ||||
t changes | ||||
value (#1714, #1725)</li> | ||||
<li>Clarify how intermediaries might use frames vs. headers (#1715, #1 | ||||
735)</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 o | ||||
n 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 extension | ||||
s 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, #13 | ||||
45)</li> | ||||
<li>Define HTTP/2 PRIORITY_UPDATE ID limits in HTTP/2 terms (#1261, #1 | ||||
344)</li> | ||||
<li>Add a Priority 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 (#10 | ||||
22, #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" t | ||||
oc="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" t | ||||
oc="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 deprecat | ||||
ion (#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" t | ||||
oc="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" t | ||||
oc="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" t | ||||
oc="default"> | ||||
<name>Since draft-kazuho-httpbis-priority-00</name> | ||||
<ul spacing="normal"> | ||||
<li>Expand urgency levels from 3 to 8.</li> | ||||
</ul> | ||||
</section> | ||||
</section> | </section> | |||
</back> | </back> | |||
<!-- ##markdown-source: | ||||
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 | ||||
s4svJ+HcISLb9xP3/wCGpqEiqsQAAA== | ||||
</rfc> | </rfc> | |||
End of changes. 168 change blocks. | ||||
1120 lines changed or deleted | 381 lines changed or added | |||
This html diff was produced by rfcdiff 1.48. The latest version is available from http://tools.ietf.org/tools/rfcdiff/ |