Internet DRAFT - draft-pardue-httpbis-priority-order
draft-pardue-httpbis-priority-order
HTTP L. Pardue
Internet-Draft Cloudflare
Intended status: Standards Track 26 March 2023
Expires: 27 September 2023
HTTP priority order extension
draft-pardue-httpbis-priority-order-00
Abstract
The send-order parameter for the HTTP extensible prioritization
scheme allows explicit ordering indication independent of request
order. This can be used to as an additional input signal to
scheduling decisions, to support alternative sending behaviors.
About This Document
This note is to be removed before publishing as an RFC.
The latest revision of this draft can be found at
https://LPardue.github.io/draft-pardue-httpbis-priority-order/draft-
pardue-httpbis-priority-order.html. Status information for this
document may be found at https://datatracker.ietf.org/doc/draft-
pardue-httpbis-priority-order/.
Discussion of this document takes place on the HTTP Working Group
mailing list (mailto:ietf-http-wg@w3.org), which is archived at
https://lists.w3.org/Archives/Public/ietf-http-wg/.
Source for this draft and an issue tracker can be found at
https://github.com/LPardue/draft-pardue-httpbis-priority-order.
Status of This Memo
This Internet-Draft is submitted in full conformance with the
provisions of BCP 78 and BCP 79.
Internet-Drafts are working documents of the Internet Engineering
Task Force (IETF). Note that other groups may also distribute
working documents as Internet-Drafts. The list of current Internet-
Drafts is at https://datatracker.ietf.org/drafts/current/.
Internet-Drafts are draft documents valid for a maximum of six months
and may be updated, replaced, or obsoleted by other documents at any
time. It is inappropriate to use Internet-Drafts as reference
material or to cite them other than as "work in progress."
Pardue Expires 27 September 2023 [Page 1]
Internet-Draft HTTP priority order March 2023
This Internet-Draft will expire on 27 September 2023.
Copyright Notice
Copyright (c) 2023 IETF Trust and the persons identified as the
document authors. All rights reserved.
This document is subject to BCP 78 and the IETF Trust's Legal
Provisions Relating to IETF Documents (https://trustee.ietf.org/
license-info) in effect on the date of publication of this document.
Please review these documents carefully, as they describe your rights
and restrictions with respect to this document. Code Components
extracted from this document must include Revised BSD License text as
described in Section 4.e of the Trust Legal Provisions and are
provided without warranty as described in the Revised BSD License.
Table of Contents
1. Introduction . . . . . . . . . . . . . . . . . . . . . . . . 2
2. Conventions and Definitions . . . . . . . . . . . . . . . . . 3
3. The send-order parameter . . . . . . . . . . . . . . . . . . 4
4. Server Scheduling . . . . . . . . . . . . . . . . . . . . . . 6
5. Security Considerations . . . . . . . . . . . . . . . . . . . 7
6. IANA Considerations . . . . . . . . . . . . . . . . . . . . . 7
7. Normative References . . . . . . . . . . . . . . . . . . . . 7
Acknowledgments . . . . . . . . . . . . . . . . . . . . . . . . . 8
Author's Address . . . . . . . . . . . . . . . . . . . . . . . . 8
1. Introduction
The extensible prioritization scheme for HTTP provides guidance for
servers using priority signals to schedule the sending of stream
data; Section 10 of [RFC9218]. It recommends that when there are
multiple items with the same urgency servers choose how to allocate
bandwidth by considering the stream ID and incremental parameter, and
possibly other signals.
Pardue Expires 27 September 2023 [Page 2]
Internet-Draft HTTP priority order March 2023
In web use cases, an HTML document can include other resources and
user agents tend to issue requests in an ordered sequence that
matches the actions of HTML or HTTP receiver processing. Requests
are made using ascending stream IDs where lower-numbered streams
typically relate to objects that were discovered earlier than higher-
numbered streams. Because stream IDs represent an ordering that
closely matches the receiver processing needs, the scheduling
guidance in [RFC9218] can be effectively used to send data that is
optimal for this consumption pattern. As a simple example, a client
that issues non-incremental requests of the same urgency on streams
0, 4, 8 and 12 would expect a server , that is following Section 10
of [RFC9218], to serve the response in the order 0, 4, 8 and 12.
A strictly singular serving order is unlikely to meet the needs of
HTTP-based applications. The urgency and incremental parameters
augment stream ID, urgency allows more important resources (from a
processing perspective) to be sent ahead of less important resources,
while incremental streams share bandwidth among resources that can be
effectively loaded in parallel.
There are other use cases where the user agent may not be able to
influence the order of request emission in the most optimal sequence,
or may discover an important resource late on and would like the
response to "jump the queue" of other streams within a single urgency
level. The send-order parameter defined by this document can be used
in these situations. While it might be possible to achieve a similar
outcome by careful use of the urgency parameter, such as reserving an
urgency level, the limited number of levels can make this approach
difficult in practice. Alternatively, rebalancing or
reprioritization of concurrent stream urgencies might also achieve
these goals but encounters issues related to churn and responsiveness
due to the latency of reprioritization signals.
2. Conventions and Definitions
The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT",
"SHOULD", "SHOULD NOT", "RECOMMENDED", "NOT RECOMMENDED", "MAY", and
"OPTIONAL" in this document are to be interpreted as described in
BCP 14 [RFC2119] [RFC8174] when, and only when, they appear in all
capitals, as shown here.
This document uses the following terminology from Section 3 of
[STRUCTURED-FIELDS] to specify syntax and parsing: Boolean,
Dictionary, and Integer.
Example HTTP requests and responses use the HTTP/2-style formatting
from [HTTP/2].
Pardue Expires 27 September 2023 [Page 3]
Internet-Draft HTTP priority order March 2023
This document uses the variable-length integer encoding from [QUIC].
3. The send-order parameter
The send-order (bikeshed-order-name) parameter value is Integer (see
Section 3.3.1 of [STRUCTURED-FIELDS]), between 0 and 2^32. The range
is ascending, higher values have precedence over lower values.
Endpoints use send-order to communicate an ordering precedence that
is independent of the request order. There is no default value,
omission of the parameter means that there is no additional ordering
preference.
The send-order parameter satisfies the urgency and incremental
parameter compatibility requirements in Section 4.3 of [RFC9218].
The following example shows an HTTP/3 client issuing multiple
requests on the same connection, without the send-order parameter,
and responses sent by a server following the guidance in Section 10
of [RFC9218].
Pardue Expires 27 September 2023 [Page 4]
Internet-Draft HTTP priority order March 2023
Client Server
HEADERS (stream 0)
:method = GET
:scheme = https
:authority = example.net
:path = /image1.jpg
priority = u=1
HEADERS (stream 4)
:method = GET
:scheme = https
:authority = example.net
:path = /image2.jpg
priority = u=1
HEADERS (stream 8)
:method = GET
:scheme = https
:authority = example.net
:path = /image3.jpg
priority = u=1
HEADERS (stream 0)
:status = 200
content-type = image/jpeg
DATA (stream 0)
{binary data}
HEADERS (stream 4)
:status = 200
content-type = image/jpeg
DATA (stream 4)
{binary data}
HEADERS (stream 8)
:status = 200
content-type = image/jpeg
DATA (stream 8)
{binary data}
The following example shows an HTTP/3 client issuing multiple
requests on the same connection, without the send-order parameter,
and responses sent by a server following the guidance in Section 4.
Pardue Expires 27 September 2023 [Page 5]
Internet-Draft HTTP priority order March 2023
Client Server
HEADERS (stream 0)
:method = GET
:scheme = https
:authority = example.net
:path = /image1.jpg
priority = u=1
HEADERS (stream 4)
:method = GET
:scheme = https
:authority = example.net
:path = /image2.jpg
priority = u=1,bikeshed-order-name=25
HEADERS (stream 8)
:method = GET
:scheme = https
:authority = example.net
:path = /image3.jpg
priority = u=1,bikeshed-order-name=15
HEADERS (stream 4)
:status = 200
content-type = image/jpeg
DATA (stream 4)
{binary data}
HEADERS (stream 8)
:status = 200
content-type = image/jpeg
DATA (stream 8)
{binary data}
HEADERS (stream 0)
:status = 200
content-type = image/jpeg
DATA (stream 0)
{binary data}
4. Server Scheduling
This document updates the scheduling guidance in Section 10 of
[RFC9218].
Pardue Expires 27 September 2023 [Page 6]
Internet-Draft HTTP priority order March 2023
Non-incremental responses of the same urgency SHOULD be served by
prioritizing bandwidth allocation in ascending order of send-order.
If there are no responses with a send-order, allocation SHOULD use
ascending order of stream ID.
Incremental responses of the same urgency are not affected by send-
order.
5. Security Considerations
The considerations in [RFC9218] apply. There are not believed to be
any additional considerations.
6. IANA Considerations
TODO
7. Normative References
[HTTP/2] Thomson, M., Ed. and C. Benfield, Ed., "HTTP/2", RFC 9113,
DOI 10.17487/RFC9113, June 2022,
<https://www.rfc-editor.org/rfc/rfc9113>.
[QUIC] Iyengar, J., Ed. and M. Thomson, Ed., "QUIC: A UDP-Based
Multiplexed and Secure Transport", RFC 9000,
DOI 10.17487/RFC9000, May 2021,
<https://www.rfc-editor.org/rfc/rfc9000>.
[RFC2119] Bradner, S., "Key words for use in RFCs to Indicate
Requirement Levels", BCP 14, RFC 2119,
DOI 10.17487/RFC2119, March 1997,
<https://www.rfc-editor.org/rfc/rfc2119>.
[RFC8174] Leiba, B., "Ambiguity of Uppercase vs Lowercase in RFC
2119 Key Words", BCP 14, RFC 8174, DOI 10.17487/RFC8174,
May 2017, <https://www.rfc-editor.org/rfc/rfc8174>.
[RFC9218] Oku, K. and L. Pardue, "Extensible Prioritization Scheme
for HTTP", RFC 9218, DOI 10.17487/RFC9218, June 2022,
<https://www.rfc-editor.org/rfc/rfc9218>.
[STRUCTURED-FIELDS]
Nottingham, M. and P-H. Kamp, "Structured Field Values for
HTTP", RFC 8941, DOI 10.17487/RFC8941, February 2021,
<https://www.rfc-editor.org/rfc/rfc8941>.
Pardue Expires 27 September 2023 [Page 7]
Internet-Draft HTTP priority order March 2023
Acknowledgments
TODO acknowledge.
Author's Address
Lucas Pardue
Cloudflare
Email: lucaspardue.24.7@gmail.com
Pardue Expires 27 September 2023 [Page 8]