| < draft-ietf-httpbis-priority-10.txt | draft-ietf-httpbis-priority-11.txt > | |||
|---|---|---|---|---|
| HTTP K. Oku | HTTP K. Oku | |||
| Internet-Draft Fastly | Internet-Draft Fastly | |||
| Intended status: Standards Track L. Pardue | Intended status: Standards Track L. Pardue | |||
| Expires: 23 May 2022 Cloudflare | Expires: 12 June 2022 Cloudflare | |||
| 19 November 2021 | 9 December 2021 | |||
| Extensible Prioritization Scheme for HTTP | Extensible Prioritization Scheme for HTTP | |||
| draft-ietf-httpbis-priority-10 | draft-ietf-httpbis-priority-11 | |||
| Abstract | Abstract | |||
| This document describes a scheme that allows an HTTP client to | This document describes a scheme that allows an HTTP client to | |||
| communicate its preferences for how the upstream server prioritizes | communicate its preferences for how the upstream server prioritizes | |||
| responses to its requests, and also allows a server to hint to a | responses to its requests, and also allows a server to hint to a | |||
| downstream intermediary how its responses should be prioritized when | downstream intermediary how its responses should be prioritized when | |||
| they are forwarded. This document defines the Priority header field | they are forwarded. This document defines the Priority header field | |||
| for communicating the initial priority in an HTTP version-independent | for communicating the initial priority in an HTTP version-independent | |||
| manner, as well as HTTP/2 and HTTP/3 frames for reprioritizing | manner, as well as HTTP/2 and HTTP/3 frames for reprioritizing | |||
| responses. These share a common format structure that is designed to | responses. These share a common format structure that is designed to | |||
| provide future extensibility. | provide future extensibility. | |||
| Note to Readers | About This Document | |||
| _RFC EDITOR: please remove this section before publication_ | This note is to be removed before publishing as an RFC. | |||
| Discussion of this draft takes place on the HTTP working group | Status information for this document may be found at | |||
| mailing list (ietf-http-wg@w3.org), which is archived at | https://datatracker.ietf.org/doc/draft-ietf-httpbis-priority/. | |||
| https://lists.w3.org/Archives/Public/ietf-http-wg/ | ||||
| (https://lists.w3.org/Archives/Public/ietf-http-wg/). | ||||
| Working Group information can be found at https://httpwg.org/ | Discussion of this document takes place on the HTTP Working Group | |||
| (https://httpwg.org/); source code and issues list for this draft can | mailing list (mailto:ietf-http-wg@w3.org), which is archived at | |||
| be found at https://github.com/httpwg/http-extensions/labels/ | https://lists.w3.org/Archives/Public/ietf-http-wg/. Working Group | |||
| priorities (https://github.com/httpwg/http-extensions/labels/ | information can be found at https://httpwg.org/. | |||
| priorities). | ||||
| Source for this draft and an issue tracker can be found at | ||||
| https://github.com/httpwg/http-extensions/labels/priorities. | ||||
| Status of This Memo | Status of This Memo | |||
| This Internet-Draft is submitted in full conformance with the | This Internet-Draft is submitted in full conformance with the | |||
| provisions of BCP 78 and BCP 79. | provisions of BCP 78 and BCP 79. | |||
| Internet-Drafts are working documents of the Internet Engineering | Internet-Drafts are working documents of the Internet Engineering | |||
| Task Force (IETF). Note that other groups may also distribute | Task Force (IETF). Note that other groups may also distribute | |||
| working documents as Internet-Drafts. The list of current Internet- | working documents as Internet-Drafts. The list of current Internet- | |||
| Drafts is at https://datatracker.ietf.org/drafts/current/. | Drafts is at https://datatracker.ietf.org/drafts/current/. | |||
| Internet-Drafts are draft documents valid for a maximum of six months | Internet-Drafts are draft documents valid for a maximum of six months | |||
| and may be updated, replaced, or obsoleted by other documents at any | and may be updated, replaced, or obsoleted by other documents at any | |||
| time. It is inappropriate to use Internet-Drafts as reference | time. It is inappropriate to use Internet-Drafts as reference | |||
| material or to cite them other than as "work in progress." | material or to cite them other than as "work in progress." | |||
| This Internet-Draft will expire on 23 May 2022. | This Internet-Draft will expire on 12 June 2022. | |||
| Copyright Notice | Copyright Notice | |||
| Copyright (c) 2021 IETF Trust and the persons identified as the | Copyright (c) 2021 IETF Trust and the persons identified as the | |||
| document authors. All rights reserved. | document authors. All rights reserved. | |||
| This document is subject to BCP 78 and the IETF Trust's Legal | This document is subject to BCP 78 and the IETF Trust's Legal | |||
| Provisions Relating to IETF Documents (https://trustee.ietf.org/ | Provisions Relating to IETF Documents (https://trustee.ietf.org/ | |||
| license-info) in effect on the date of publication of this document. | license-info) in effect on the date of publication of this document. | |||
| Please review these documents carefully, as they describe your rights | Please review these documents carefully, as they describe your rights | |||
| skipping to change at page 2, line 35 ¶ | skipping to change at page 2, line 35 ¶ | |||
| Table of Contents | Table of Contents | |||
| 1. Introduction . . . . . . . . . . . . . . . . . . . . . . . . 3 | 1. Introduction . . . . . . . . . . . . . . . . . . . . . . . . 3 | |||
| 1.1. Notational Conventions . . . . . . . . . . . . . . . . . 5 | 1.1. Notational Conventions . . . . . . . . . . . . . . . . . 5 | |||
| 2. Motivation for Replacing RFC 7540 Priorities . . . . . . . . 5 | 2. Motivation for Replacing RFC 7540 Priorities . . . . . . . . 5 | |||
| 2.1. Disabling RFC 7540 Priorities . . . . . . . . . . . . . . 6 | 2.1. Disabling RFC 7540 Priorities . . . . . . . . . . . . . . 6 | |||
| 2.1.1. Advice when Using Extensible Priorities as the | 2.1.1. Advice when Using Extensible Priorities as the | |||
| Alternative . . . . . . . . . . . . . . . . . . . . . 7 | Alternative . . . . . . . . . . . . . . . . . . . . . 7 | |||
| 3. Applicability of the Extensible Priority Scheme . . . . . . . 7 | 3. Applicability of the Extensible Priority Scheme . . . . . . . 7 | |||
| 4. Priority Parameters . . . . . . . . . . . . . . . . . . . . . 7 | 4. Priority Parameters . . . . . . . . . . . . . . . . . . . . . 8 | |||
| 4.1. Urgency . . . . . . . . . . . . . . . . . . . . . . . . . 8 | 4.1. Urgency . . . . . . . . . . . . . . . . . . . . . . . . . 8 | |||
| 4.2. Incremental . . . . . . . . . . . . . . . . . . . . . . . 9 | 4.2. Incremental . . . . . . . . . . . . . . . . . . . . . . . 9 | |||
| 4.3. Defining New Parameters . . . . . . . . . . . . . . . . . 10 | 4.3. Defining New Priority Parameters . . . . . . . . . . . . 10 | |||
| 4.3.1. Registration . . . . . . . . . . . . . . . . . . . . 10 | 4.3.1. Registration . . . . . . . . . . . . . . . . . . . . 10 | |||
| 5. The Priority HTTP Header Field . . . . . . . . . . . . . . . 11 | 5. The Priority HTTP Header Field . . . . . . . . . . . . . . . 11 | |||
| 6. Reprioritization . . . . . . . . . . . . . . . . . . . . . . 12 | 6. Reprioritization . . . . . . . . . . . . . . . . . . . . . . 12 | |||
| 7. The PRIORITY_UPDATE Frame . . . . . . . . . . . . . . . . . . 12 | 7. The PRIORITY_UPDATE Frame . . . . . . . . . . . . . . . . . . 12 | |||
| 7.1. HTTP/2 PRIORITY_UPDATE Frame . . . . . . . . . . . . . . 13 | 7.1. HTTP/2 PRIORITY_UPDATE Frame . . . . . . . . . . . . . . 13 | |||
| 7.2. HTTP/3 PRIORITY_UPDATE Frame . . . . . . . . . . . . . . 14 | 7.2. HTTP/3 PRIORITY_UPDATE Frame . . . . . . . . . . . . . . 14 | |||
| 8. Merging Client- and Server-Driven Parameters . . . . . . . . 15 | 8. Merging Client- and Server-Driven Priority Parameters . . . . 16 | |||
| 9. Client Scheduling . . . . . . . . . . . . . . . . . . . . . . 16 | 9. Client Scheduling . . . . . . . . . . . . . . . . . . . . . . 17 | |||
| 10. Server Scheduling . . . . . . . . . . . . . . . . . . . . . . 17 | 10. Server Scheduling . . . . . . . . . . . . . . . . . . . . . . 17 | |||
| 10.1. Intermediaries with Multiple Backend Connections . . . . 18 | 10.1. Intermediaries with Multiple Backend Connections . . . . 19 | |||
| 11. Scheduling and the CONNECT Method . . . . . . . . . . . . . . 19 | 11. Scheduling and the CONNECT Method . . . . . . . . . . . . . . 19 | |||
| 12. Retransmission Scheduling . . . . . . . . . . . . . . . . . . 19 | 12. Retransmission Scheduling . . . . . . . . . . . . . . . . . . 19 | |||
| 13. Fairness . . . . . . . . . . . . . . . . . . . . . . . . . . 20 | 13. Fairness . . . . . . . . . . . . . . . . . . . . . . . . . . 20 | |||
| 13.1. Coalescing Intermediaries . . . . . . . . . . . . . . . 20 | 13.1. Coalescing Intermediaries . . . . . . . . . . . . . . . 20 | |||
| 13.2. HTTP/1.x Back Ends . . . . . . . . . . . . . . . . . . . 21 | 13.2. HTTP/1.x Back Ends . . . . . . . . . . . . . . . . . . . 21 | |||
| 13.3. Intentional Introduction of Unfairness . . . . . . . . . 21 | 13.3. Intentional Introduction of Unfairness . . . . . . . . . 21 | |||
| 14. Why use an End-to-End Header Field? . . . . . . . . . . . . . 21 | 14. Why use an End-to-End Header Field? . . . . . . . . . . . . . 21 | |||
| 15. Security Considerations . . . . . . . . . . . . . . . . . . . 22 | 15. Security Considerations . . . . . . . . . . . . . . . . . . . 22 | |||
| 16. IANA Considerations . . . . . . . . . . . . . . . . . . . . . 22 | 16. IANA Considerations . . . . . . . . . . . . . . . . . . . . . 22 | |||
| 17. References . . . . . . . . . . . . . . . . . . . . . . . . . 23 | 17. References . . . . . . . . . . . . . . . . . . . . . . . . . 23 | |||
| 17.1. Normative References . . . . . . . . . . . . . . . . . . 23 | 17.1. Normative References . . . . . . . . . . . . . . . . . . 23 | |||
| 17.2. Informative References . . . . . . . . . . . . . . . . . 24 | 17.2. Informative References . . . . . . . . . . . . . . . . . 24 | |||
| Appendix A. Acknowledgements . . . . . . . . . . . . . . . . . . 25 | Appendix A. Acknowledgements . . . . . . . . . . . . . . . . . . 25 | |||
| Appendix B. Change Log . . . . . . . . . . . . . . . . . . . . . 25 | Appendix B. Change Log . . . . . . . . . . . . . . . . . . . . . 26 | |||
| B.1. Since draft-ietf-httpbis-priority-09 . . . . . . . . . . 25 | B.1. Since draft-ietf-httpbis-priority-10 . . . . . . . . . . 26 | |||
| B.2. Since draft-ietf-httpbis-priority-08 . . . . . . . . . . 25 | B.2. Since draft-ietf-httpbis-priority-09 . . . . . . . . . . 26 | |||
| B.3. Since draft-ietf-httpbis-priority-07 . . . . . . . . . . 26 | B.3. Since draft-ietf-httpbis-priority-08 . . . . . . . . . . 26 | |||
| B.4. Since draft-ietf-httpbis-priority-06 . . . . . . . . . . 26 | B.4. Since draft-ietf-httpbis-priority-07 . . . . . . . . . . 26 | |||
| B.5. Since draft-ietf-httpbis-priority-05 . . . . . . . . . . 26 | B.5. Since draft-ietf-httpbis-priority-06 . . . . . . . . . . 26 | |||
| B.6. Since draft-ietf-httpbis-priority-04 . . . . . . . . . . 26 | B.6. Since draft-ietf-httpbis-priority-05 . . . . . . . . . . 27 | |||
| B.7. Since draft-ietf-httpbis-priority-03 . . . . . . . . . . 26 | B.7. Since draft-ietf-httpbis-priority-04 . . . . . . . . . . 27 | |||
| B.8. Since draft-ietf-httpbis-priority-02 . . . . . . . . . . 27 | B.8. Since draft-ietf-httpbis-priority-03 . . . . . . . . . . 27 | |||
| B.9. Since draft-ietf-httpbis-priority-01 . . . . . . . . . . 27 | B.9. Since draft-ietf-httpbis-priority-02 . . . . . . . . . . 27 | |||
| B.10. Since draft-ietf-httpbis-priority-00 . . . . . . . . . . 27 | B.10. Since draft-ietf-httpbis-priority-01 . . . . . . . . . . 27 | |||
| B.11. Since draft-kazuho-httpbis-priority-04 . . . . . . . . . 27 | B.11. Since draft-ietf-httpbis-priority-00 . . . . . . . . . . 28 | |||
| B.12. Since draft-kazuho-httpbis-priority-03 . . . . . . . . . 28 | B.12. Since draft-kazuho-httpbis-priority-04 . . . . . . . . . 28 | |||
| B.13. Since draft-kazuho-httpbis-priority-02 . . . . . . . . . 28 | B.13. Since draft-kazuho-httpbis-priority-03 . . . . . . . . . 28 | |||
| B.14. Since draft-kazuho-httpbis-priority-01 . . . . . . . . . 28 | B.14. Since draft-kazuho-httpbis-priority-02 . . . . . . . . . 28 | |||
| B.15. Since draft-kazuho-httpbis-priority-00 . . . . . . . . . 28 | B.15. Since draft-kazuho-httpbis-priority-01 . . . . . . . . . 29 | |||
| Authors' Addresses . . . . . . . . . . . . . . . . . . . . . . . 28 | B.16. Since draft-kazuho-httpbis-priority-00 . . . . . . . . . 29 | |||
| Authors' Addresses . . . . . . . . . . . . . . . . . . . . . . . 29 | ||||
| 1. Introduction | 1. Introduction | |||
| It is common for representations of an HTTP [HTTP] resource to have | It is common for representations of an HTTP [HTTP] resource to have | |||
| relationships to one or more other resources. Clients will often | relationships to one or more other resources. Clients will often | |||
| discover these relationships while processing a retrieved | discover these relationships while processing a retrieved | |||
| representation, which may lead to further retrieval requests. | representation, which may lead to further retrieval requests. | |||
| Meanwhile, the nature of the relationship determines whether the | Meanwhile, the nature of the relationship determines whether the | |||
| client is blocked from continuing to process locally available | client is blocked from continuing to process locally available | |||
| resources. An example of this is visual rendering of an HTML | resources. An example of this is visual rendering of an HTML | |||
| skipping to change at page 4, line 32 ¶ | skipping to change at page 4, line 32 ¶ | |||
| RFC 7540 [RFC7540] stream priority allowed a client to send a series | RFC 7540 [RFC7540] stream priority allowed a client to send a series | |||
| of priority signals that communicate to the server a "priority tree"; | of priority signals that communicate to the server a "priority tree"; | |||
| the structure of this tree represents the client's preferred relative | the structure of this tree represents the client's preferred relative | |||
| ordering and weighted distribution of the bandwidth among HTTP | ordering and weighted distribution of the bandwidth among HTTP | |||
| responses. Servers could use these priority signals as input into | responses. Servers could use these priority signals as input into | |||
| prioritization decision making. | prioritization decision making. | |||
| The design and implementation of RFC 7540 stream priority was | The design and implementation of RFC 7540 stream priority was | |||
| observed to have shortcomings, explained in Section 2. HTTP/2 | observed to have shortcomings, explained in Section 2. HTTP/2 | |||
| [HTTP2] has consequently deprecated the use of these stream priority | [HTTP2] has consequently deprecated the use of these stream priority | |||
| signals. | signals. The prioritization scheme and priority signals defined | |||
| herein can act as a substitute for RFC 7540 stream priority. | ||||
| This document describes an extensible scheme for prioritizing HTTP | This document describes an extensible scheme for prioritizing HTTP | |||
| responses that uses absolute values. Section 4 defines priority | responses that uses absolute values. Section 4 defines priority | |||
| parameters, which are a standardized and extensible format of | parameters, which are a standardized and extensible format of | |||
| priority information. Section 5 defines the Priority HTTP header | priority information. Section 5 defines the Priority HTTP header | |||
| field, a protocol-version-independent and end-to-end priority signal. | field, a protocol-version-independent and end-to-end priority signal. | |||
| Clients can use this header to signal priority to servers in order to | Clients can send this header field to signal their view of how | |||
| specify the precedence of HTTP responses. Similarly, servers behind | responses should be prioritized. Similarly, servers behind an | |||
| an intermediary can use it to signal priority to the intermediary. | intermediary can use it to signal priority to the intermediary. | |||
| Section 7.1 and Section 7.2 define version-specific frames that carry | After sending a request, a client can change the priority of the | |||
| parameters, which clients can use for reprioritization. | response (see Section 6) using HTTP-version-specific frames defined | |||
| in Section 7.1 and Section 7.2. | ||||
| Header field and frame priority signals are input to a server's | Header field and frame priority signals are input to a server's | |||
| response prioritization process. They are only a suggestion and do | response prioritization process. They are only a suggestion and do | |||
| not guarantee any particular processing or transmission order for one | not guarantee any particular processing or transmission order for one | |||
| response relative to any other response. Section 10 and Section 12 | response relative to any other response. Section 10 and Section 12 | |||
| provide consideration and guidance about how servers might act upon | provide consideration and guidance about how servers might act upon | |||
| signals. | signals. | |||
| The prioritization scheme and priority signals defined herein can act | ||||
| as a substitute for RFC 7540 stream priority. | ||||
| 1.1. Notational Conventions | 1.1. Notational Conventions | |||
| The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", | The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", | |||
| "SHOULD", "SHOULD NOT", "RECOMMENDED", "NOT RECOMMENDED", "MAY", and | "SHOULD", "SHOULD NOT", "RECOMMENDED", "NOT RECOMMENDED", "MAY", and | |||
| "OPTIONAL" in this document are to be interpreted as described in | "OPTIONAL" in this document are to be interpreted as described in | |||
| BCP 14 [RFC2119] [RFC8174] when, and only when, they appear in all | BCP 14 [RFC2119] [RFC8174] when, and only when, they appear in all | |||
| capitals, as shown here. | capitals, as shown here. | |||
| The terms Dictionary, sf-boolean, sf-dictionary, and sf-integer are | The terms Dictionary, sf-boolean, sf-dictionary, and sf-integer are | |||
| imported from [STRUCTURED-FIELDS]. | imported from [STRUCTURED-FIELDS]. | |||
| Example HTTP requests and responses use the HTTP/2-style formatting | Example HTTP requests and responses use the HTTP/2-style formatting | |||
| from [HTTP2]. | from [HTTP2]. | |||
| This document uses the variable-length integer encoding from [QUIC]. | This document uses the variable-length integer encoding from [QUIC]. | |||
| The term control stream is used to describe the HTTP/2 stream with | The term control stream is used to describe both the HTTP/2 stream | |||
| identifier 0x0, and HTTP/3 control stream; see Section 6.2.1 of | with identifier 0x0, and the HTTP/3 control stream; see Section 6.2.1 | |||
| [HTTP3]. | of [HTTP3]. | |||
| The term HTTP/2 priority signal is used to describe the priority | The term HTTP/2 priority signal is used to describe the priority | |||
| information sent from clients to servers in HTTP/2 frames; see | information sent from clients to servers in HTTP/2 frames; see | |||
| Section 5.3.2 of [HTTP2]. | Section 5.3.2 of [HTTP2]. | |||
| 2. Motivation for Replacing RFC 7540 Priorities | 2. Motivation for Replacing RFC 7540 Priorities | |||
| RFC 7540 stream priority (see Section 5.3 of [RFC7540]) is a complex | RFC 7540 stream priority (see Section 5.3 of [RFC7540]) is a complex | |||
| system where clients signal stream dependencies and weights to | system where clients signal stream dependencies and weights to | |||
| describe an unbalanced tree. It suffered from limited deployment and | describe an unbalanced tree. It suffered from limited deployment and | |||
| interoperability and was deprecated in a revision of HTTP/2 [HTTP2]. | interoperability and was deprecated in a revision of HTTP/2 [HTTP2]. | |||
| HTTP/2 retains these protocol elements in order to maintain wire | HTTP/2 retains these protocol elements in order to maintain wire | |||
| compatibility (see Section 5.3.2 of [HTTP2]), which means that they | compatibility (see Section 5.3.2 of [HTTP2]), which means that they | |||
| might still be used in the absence of alternative signaling, such as | might still be used even in the presence of alternative signaling, | |||
| the scheme this document describes. | such as the scheme this document describes. | |||
| Many RFC 7540 server implementations do not act on HTTP/2 priority | Many RFC 7540 server implementations do not act on HTTP/2 priority | |||
| signals. | signals. | |||
| Prioritization can use information that servers have about resources | Prioritization can use information that servers have about resources | |||
| or the order in which requests are generated. For example, a server, | or the order in which requests are generated. For example, a server, | |||
| with knowledge of an HTML document structure, might want to | with knowledge of an HTML document structure, might want to | |||
| prioritize the delivery of images that are critical to user | prioritize the delivery of images that are critical to user | |||
| experience above other images. With RFC 7540 it is difficult for | experience above other images. With RFC 7540 it is difficult for | |||
| servers to interpret signals from clients for prioritization as the | servers to interpret signals from clients for prioritization as the | |||
| skipping to change at page 6, line 17 ¶ | skipping to change at page 6, line 14 ¶ | |||
| RFC 7540 does not define a method that can be used by a server to | RFC 7540 does not define a method that can be used by a server to | |||
| provide a priority signal for intermediaries. | provide a priority signal for intermediaries. | |||
| RFC 7540 priority is expressed relative to other requests on the same | RFC 7540 priority is expressed relative to other requests on the same | |||
| connection. Many requests are generated without knowledge of how | connection. Many requests are generated without knowledge of how | |||
| other requests might share a connection, which makes this difficult | other requests might share a connection, which makes this difficult | |||
| to use reliably, especially in protocols that do not have strong | to use reliably, especially in protocols that do not have strong | |||
| ordering guarantees, like HTTP/3 [HTTP3]. | ordering guarantees, like HTTP/3 [HTTP3]. | |||
| Multiple experiments from independent research have shown that | Multiple experiments from independent research ([MARX], [MEENAN]) | |||
| simpler schemes can reach at least equivalent performance | have shown that simpler schemes can reach at least equivalent | |||
| characteristics compared to the more complex RFC 7540 setups seen in | performance characteristics compared to the more complex RFC 7540 | |||
| practice, at least for the web use case. | setups seen in practice, at least for the web use case. | |||
| 2.1. Disabling RFC 7540 Priorities | 2.1. Disabling RFC 7540 Priorities | |||
| The problems and insights set out above provided the motivation for | The problems and insights set out above provided the motivation for | |||
| an alternative to RFC 7540 stream priority (see Section 5.3 of | an alternative to RFC 7540 stream priority (see Section 5.3 of | |||
| [HTTP2]). | [HTTP2]). | |||
| The SETTINGS_NO_RFC7540_PRIORITIES HTTP/2 setting is defined by this | The SETTINGS_NO_RFC7540_PRIORITIES HTTP/2 setting is defined by this | |||
| document in order to allow endpoints to omit or ignore HTTP/2 | document in order to allow endpoints to omit or ignore HTTP/2 | |||
| priority signals (see Section 5.3.2 of [HTTP2]), as described below. | priority signals (see Section 5.3.2 of [HTTP2]), as described below. | |||
| skipping to change at page 7, line 37 ¶ | skipping to change at page 7, line 33 ¶ | |||
| Similarly, if the client receives SETTINGS_NO_RFC7540_PRIORITIES with | Similarly, if the client receives SETTINGS_NO_RFC7540_PRIORITIES with | |||
| value of 0 or if the settings parameter was absent, it SHOULD stop | value of 0 or if the settings parameter was absent, it SHOULD stop | |||
| sending PRIORITY_UPDATE frames (Section 7.1), since those frames are | sending PRIORITY_UPDATE frames (Section 7.1), since those frames are | |||
| likely to be ignored. However, the client MAY continue sending the | likely to be ignored. However, the client MAY continue sending the | |||
| Priority header field (Section 5), as it is an end-to-end signal that | Priority header field (Section 5), as it is an end-to-end signal that | |||
| might be useful to nodes behind the server that the client is | might be useful to nodes behind the server that the client is | |||
| directly connected to. | directly connected to. | |||
| 3. Applicability of the Extensible Priority Scheme | 3. Applicability of the Extensible Priority Scheme | |||
| The priority scheme defined by this document considers only the | The priority scheme defined by this document is primarily focused on | |||
| prioritization of HTTP messages and tunnels, see Section 9, | the prioritization of HTTP response messages (see Section 3.4 of | |||
| Section 10, and Section 11. | [HTTP]). It defines new priority parameters (Section 4) and their | |||
| conveyors (Section 5 and Section 7) intended to communicate the | ||||
| priority of responses to a server that is responsible for | ||||
| prioritizing them. Section 10 provides considerations for servers | ||||
| about acting on those signals in combination with other inputs and | ||||
| factors. | ||||
| Where HTTP extensions change stream behavior or define new data | The CONNECT method (see Section 9.3.6 of [HTTP]) can be used to | |||
| carriage mechanisms, they can also define how this priority scheme | establish tunnels. Signaling applies similarly to tunnels; | |||
| can be applied. | additional considerations for server prioritization are given in | |||
| Section 11. | ||||
| Section 9 describes how clients can optionally apply elements of this | ||||
| scheme locally to the request messages that they generate. | ||||
| Some forms of HTTP extensions might change HTTP/2 or HTTP/3 stream | ||||
| behavior or define new data carriage mechanisms. Such extensions can | ||||
| define themselves how this priority scheme is to be applied. | ||||
| 4. Priority Parameters | 4. Priority Parameters | |||
| The priority information is a sequence of key-value pairs, providing | The priority information is a sequence of key-value pairs, providing | |||
| room for future extensions. Each key-value pair represents a | room for future extensions. Each key-value pair represents a | |||
| priority parameter. | priority parameter. | |||
| The Priority HTTP header field (Section 5) is an end-to-end way to | The Priority HTTP header field (Section 5) is an end-to-end way to | |||
| transmit this set of parameters when a request or a response is | transmit this set of priority parameters when a request or a response | |||
| issued. In order to reprioritize a request, HTTP-version-specific | is issued. In order to reprioritize a request (Section 6), HTTP- | |||
| PRIORITY_UPDATE frames (Section 7.1 and Section 7.2) are used by | version-specific PRIORITY_UPDATE frames (Section 7.1 and Section 7.2) | |||
| clients to transmit the same information on a single hop. | are used by clients to transmit the same information on a single hop. | |||
| Intermediaries can consume and produce priority signals in a | Intermediaries can consume and produce priority signals in a | |||
| PRIORITY_UPDATE frame or Priority header field. Sending a | PRIORITY_UPDATE frame or Priority header field. Sending a | |||
| PRIORITY_UPDATE frame preserves the signal from the client, but | PRIORITY_UPDATE frame preserves the signal from the client, but | |||
| provides a signal that overrides that for the next hop; see | provides a signal that overrides that for the next hop; see | |||
| Section 14. Replacing or adding a Priority header field overrides | Section 14. Replacing or adding a Priority header field overrides | |||
| any signal from a client and can affect prioritization for all | any signal from a client and can affect prioritization for all | |||
| subsequent recipients. | subsequent recipients. | |||
| For both the Priority header field and the PRIORITY_UPDATE frame, the | For both the Priority header field and the PRIORITY_UPDATE frame, the | |||
| set of priority parameters is encoded as a Structured Fields | set of priority parameters is encoded as a Structured Fields | |||
| Dictionary (see Section 3.2 of [STRUCTURED-FIELDS]). | Dictionary (see Section 3.2 of [STRUCTURED-FIELDS]). | |||
| This document defines the urgency(u) and incremental(i) parameters. | This document defines the urgency(u) and incremental(i) priority | |||
| When receiving an HTTP request that does not carry these priority | parameters. When receiving an HTTP request that does not carry these | |||
| parameters, a server SHOULD act as if their default values were | priority parameters, a server SHOULD act as if their default values | |||
| specified. Note that handling of omitted parameters is different | were specified. | |||
| when processing an HTTP response; see Section 8. | ||||
| An intermediary can combine signals from requests and responses that | ||||
| it forwards. Note that omission of priority parameters in responses | ||||
| is handled differently from omission in requests; see Section 8. | ||||
| Receivers parse the Dictionary as defined in Section 4.2 of | Receivers parse the Dictionary as defined in Section 4.2 of | |||
| [STRUCTURED-FIELDS]. Where the Dictionary is successfully parsed, | [STRUCTURED-FIELDS]. Where the Dictionary is successfully parsed, | |||
| this document places the additional requirement that unknown priority | this document places the additional requirement that unknown priority | |||
| parameters, parameters with out-of-range values, or values of | parameters, priority parameters with out-of-range values, or values | |||
| unexpected types MUST be ignored. | of unexpected types MUST be ignored. | |||
| 4.1. Urgency | 4.1. Urgency | |||
| The urgency parameter (u) takes an integer between 0 and 7, in | The urgency parameter (u) takes an integer between 0 and 7, in | |||
| descending order of priority. | descending order of priority. | |||
| The value is encoded as an sf-integer. The default value is 3. | The value is encoded as an sf-integer. The default value is 3. | |||
| Endpoints use this parameter to communicate their view of the | Endpoints use this parameter to communicate their view of the | |||
| precedence of HTTP responses. The chosen value of urgency can be | precedence of HTTP responses. The chosen value of urgency can be | |||
| skipping to change at page 10, line 5 ¶ | skipping to change at page 10, line 14 ¶ | |||
| The following example shows a request for a JPEG file with the | The following example shows a request for a JPEG file with the | |||
| urgency parameter set to 5 and the incremental parameter set to true. | urgency parameter set to 5 and the incremental parameter set to true. | |||
| :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 | |||
| 4.3. Defining New Parameters | 4.3. Defining New Priority Parameters | |||
| When attempting to define new parameters, care must be taken so that | When attempting to define new priority parameters, care must be taken | |||
| they do not adversely interfere with prioritization performed by | so that they do not adversely interfere with prioritization performed | |||
| existing endpoints or intermediaries that do not understand the newly | by existing endpoints or intermediaries that do not understand the | |||
| defined parameter. Since unknown parameters are ignored, new | newly defined priority parameter. Since unknown priority parameters | |||
| parameters should not change the interpretation of, or modify, the | are ignored, new priority parameters should not change the | |||
| urgency (see Section 4.1) or incremental (see Section 4.2) parameters | interpretation of, or modify, the urgency (see Section 4.1) or | |||
| in a way that is not backwards compatible or fallback safe. | incremental (see Section 4.2) priority parameters in a way that is | |||
| not backwards compatible or fallback safe. | ||||
| For example, if there is a need to provide more granularity than | For example, if there is a need to provide more granularity than | |||
| eight urgency levels, it would be possible to subdivide the range | eight urgency levels, it would be possible to subdivide the range | |||
| using an additional parameter. Implementations that do not recognize | using an additional priority parameter. Implementations that do not | |||
| the parameter can safely continue to use the less granular eight | recognize the parameter can safely continue to use the less granular | |||
| levels. | eight levels. | |||
| Alternatively, the urgency can be augmented. For example, a | Alternatively, the urgency can be augmented. For example, a | |||
| graphical user agent could send a visible parameter to indicate if | graphical user agent could send a visible priority parameter to | |||
| the resource being requested is within the viewport. | indicate if the resource being requested is within the viewport. | |||
| Generic parameters are preferred over vendor-specific, application- | Generic priority parameters are preferred over vendor-specific, | |||
| specific or deployment-specific values. If a generic value cannot be | application-specific or deployment-specific values. If a generic | |||
| agreed upon in the community, the parameter's name should be | value cannot be agreed upon in the community, the parameter's name | |||
| correspondingly specific (e.g., with a prefix that identifies the | should be correspondingly specific (e.g., with a prefix that | |||
| vendor, application or deployment). | identifies the vendor, application or deployment). | |||
| 4.3.1. Registration | 4.3.1. Registration | |||
| New Priority parameters can be defined by registering them in the | New priority parameters can be defined by registering them in the | |||
| HTTP Priority Parameters Registry. The registry governs the keys | HTTP Priority Parameters Registry. The registry governs the keys | |||
| (short textual strings) used in Structured Fields Dictionary (see | (short textual strings) used in the Structured Fields Dictionary (see | |||
| Section 3.2 of [STRUCTURED-FIELDS]). Since each HTTP request can | Section 3.2 of [STRUCTURED-FIELDS]). Since each HTTP request can | |||
| have associated priority signals, there is value in having short key | have associated priority signals, there is value in having short key | |||
| lengths, especially single-character strings. In order to encourage | lengths, especially single-character strings. In order to encourage | |||
| extension while avoiding unintended conflict among attractive key | extension while avoiding unintended conflict among attractive key | |||
| values, the HTTP Priority Parameters Registry operates two | values, the HTTP Priority Parameters Registry operates two | |||
| registration policies depending on key length. | registration policies depending on key length. | |||
| * Registration requests for parameters with a key length of one use | * Registration requests for priority parameters with a key length of | |||
| the Specification Required policy, as per Section 4.6 of | one use the Specification Required policy, as per Section 4.6 of | |||
| [RFC8126]. | [RFC8126]. | |||
| * Registration requests for parameters with a key length greater | * Registration requests for priority parameters with a key length | |||
| than one use the Expert Review policy, as per Section 4.5 of | greater than one use the Expert Review policy, as per Section 4.5 | |||
| [RFC8126]. A specification document is appreciated, but not | of [RFC8126]. A specification document is appreciated, but not | |||
| required. | required. | |||
| When reviewing registration requests, the designated expert(s) can | When reviewing registration requests, the designated expert(s) can | |||
| consider the additional guidance provided in Section 4.3 but cannot | consider the additional guidance provided in Section 4.3 but cannot | |||
| use it as a basis for rejection. | use it as a basis for rejection. | |||
| Registration requests should use the following template: | Registration requests should use the following template: | |||
| Name: [a name for the Priority Parameter that matches key] | Name: [a name for the Priority Parameter that matches key] | |||
| Description: [a description of the parameter semantics and value] | Description: [a description of the priority parameter semantics and | |||
| value] | ||||
| Reference: [to a specification defining this parameter] | Reference: [to a specification defining this priority parameter] | |||
| See the registry at https://iana.org/assignments/http-priority | See the registry at https://iana.org/assignments/http-priority | |||
| (https://iana.org/assignments/http-priority) for details on where to | (https://iana.org/assignments/http-priority) for details on where to | |||
| send registration requests. | send registration requests. | |||
| 5. The Priority HTTP Header Field | 5. The Priority HTTP Header Field | |||
| The Priority HTTP header field carries priority parameters Section 4. | The Priority HTTP header field carries priority parameters (see | |||
| It can appear in requests and responses. It is an end-to-end signal | Section 4). It can appear in requests and responses. It is an end- | |||
| of the request priority from the client or the response priority from | to-end signal of the request priority from the client or the response | |||
| the server. Section 8 describes how intermediaries can combine the | priority from the server. Section 8 describes how intermediaries can | |||
| priority information from client requests and server responses to | combine the priority information sent from clients and servers. | |||
| correct or amend the precedence. Clients cannot interpret the | Clients cannot interpret the appearance or omission of a Priority | |||
| appearance or omission of a Priority response header as | response header field as acknowledgement that any prioritization has | |||
| acknowledgement that any prioritization has occurred. Guidance for | occurred. Guidance for how endpoints can act on Priority header | |||
| how endpoints can act on Priority header values is given in | values is given in Section 10 and Section 9. | |||
| Section 10 and Section 9. | ||||
| Priority is a Dictionary (Section 3.2 of [STRUCTURED-FIELDS]): | Priority is a Dictionary (Section 3.2 of [STRUCTURED-FIELDS]): | |||
| Priority = sf-dictionary | Priority = sf-dictionary | |||
| An HTTP request with a Priority header field might be cached and re- | ||||
| As is the ordinary case for HTTP caching [CACHING], a response with a | used for subsequent requests; see [CACHING]. When an origin server | |||
| Priority header field might be cached and re-used for subsequent | generates the Priority response header field based on properties of | |||
| requests. When an origin server generates the Priority response | an HTTP request it receives, the server is expected to control the | |||
| header field based on properties of an HTTP request it receives, the | cacheability or the applicability of the cached response, by using | |||
| server is expected to control the cacheability or the applicability | header fields that control the caching behavior (e.g., Cache-Control, | |||
| of the cached response, by using header fields that control the | Vary). | |||
| caching behavior (e.g., Cache-Control, Vary). | ||||
| 6. Reprioritization | 6. Reprioritization | |||
| After a client sends a request, it may be beneficial to change the | After a client sends a request, it may be beneficial to change the | |||
| priority of the response. As an example, a web browser might issue a | priority of the response. As an example, a web browser might issue a | |||
| prefetch request for a JavaScript file with the urgency parameter of | prefetch request for a JavaScript file with the urgency parameter of | |||
| the Priority request header field set to u=7 (background). Then, | the Priority request header field set to u=7 (background). Then, | |||
| when the user navigates to a page which references the new JavaScript | when the user navigates to a page which references the new JavaScript | |||
| file, while the prefetch is in progress, the browser would send a | file, while the prefetch is in progress, the browser would send a | |||
| reprioritization signal with the priority field value set to u=0. | reprioritization signal with the priority field value set to u=0. | |||
| skipping to change at page 12, line 33 ¶ | skipping to change at page 12, line 40 ¶ | |||
| HTTP/3, the identifier is either the Stream ID or Push ID. Unlike | HTTP/3, the identifier is either the Stream ID or Push ID. Unlike | |||
| the Priority header field, the PRIORITY_UPDATE frame is a hop-by-hop | the Priority header field, the PRIORITY_UPDATE frame is a hop-by-hop | |||
| signal. | signal. | |||
| PRIORITY_UPDATE frames are sent by clients on the control stream, | PRIORITY_UPDATE frames are sent by clients on the control stream, | |||
| allowing them to be sent independent from the stream that carries the | allowing them to be sent independent from the stream that carries the | |||
| response. This means they can be used to reprioritize a response or | response. This means they can be used to reprioritize a response or | |||
| a push stream; or signal the initial priority of a response instead | a push stream; or signal the initial priority of a response instead | |||
| of the Priority header field. | of the Priority header field. | |||
| A PRIORITY_UPDATE frame communicates a complete set of all parameters | A PRIORITY_UPDATE frame communicates a complete set of all priority | |||
| in the Priority Field Value field. Omitting a parameter is a signal | parameters in the Priority Field Value field. Omitting a priority | |||
| to use the parameter's default value. Failure to parse the Priority | parameter is a signal to use its default value. Failure to parse the | |||
| Field Value MAY be treated as a connection error. In HTTP/2 the | Priority Field Value MAY be treated as a connection error. In HTTP/2 | |||
| error is of type PROTOCOL_ERROR; in HTTP/3 the error is of type | the error is of type PROTOCOL_ERROR; in HTTP/3 the error is of type | |||
| H3_GENERAL_PROTOCOL_ERROR. | H3_GENERAL_PROTOCOL_ERROR. | |||
| A client MAY send a PRIORITY_UPDATE frame before the stream that it | A client MAY send a PRIORITY_UPDATE frame before the stream that it | |||
| references is open (except for HTTP/2 push streams; see Section 7.1). | references is open (except for HTTP/2 push streams; see Section 7.1). | |||
| Furthermore, HTTP/3 offers no guaranteed ordering across streams, | Furthermore, HTTP/3 offers no guaranteed ordering across streams, | |||
| which could cause the frame to be received earlier than intended. | which could cause the frame to be received earlier than intended. | |||
| Either case leads to a race condition where a server receives a | Either case leads to a race condition where a server receives a | |||
| PRIORITY_UPDATE frame that references a request stream that is yet to | PRIORITY_UPDATE frame that references a request stream that is yet to | |||
| be opened. To solve this condition, for the purposes of scheduling, | be opened. To solve this condition, for the purposes of scheduling, | |||
| the most recently received PRIORITY_UPDATE frame can be considered as | the most recently received PRIORITY_UPDATE frame can be considered as | |||
| the most up-to-date information that overrides any other signal. | the most up-to-date information that overrides any other signal. | |||
| Servers SHOULD buffer the most recently received PRIORITY_UPDATE | Servers SHOULD buffer the most recently received PRIORITY_UPDATE | |||
| frame and apply it once the referenced stream is opened. Holding | frame and apply it once the referenced stream is opened. Holding | |||
| PRIORITY_UPDATE frames for each stream requires server resources, | PRIORITY_UPDATE frames for each stream requires server resources, | |||
| which can can be bound by local implementation policy. Although | which can can be bounded by local implementation policy. Although | |||
| there is no limit to the number of PRIORITY_UPDATES that can be sent, | there is no limit to the number of PRIORITY_UPDATES that can be sent, | |||
| storing only the most recently received frame limits resource | storing only the most recently received frame limits resource | |||
| commitment. | commitment. | |||
| 7.1. HTTP/2 PRIORITY_UPDATE Frame | 7.1. HTTP/2 PRIORITY_UPDATE Frame | |||
| The HTTP/2 PRIORITY_UPDATE frame (type=0x10) is used by clients to | The HTTP/2 PRIORITY_UPDATE frame (type=0x10) is used by clients to | |||
| signal the initial priority of a response, or to reprioritize a | signal the initial priority of a response, or to reprioritize a | |||
| response or push stream. It carries the stream ID of the response | response or push stream. It carries the stream ID of the response | |||
| and the priority in ASCII text, using the same representation as the | and the priority in ASCII text, using the same representation as the | |||
| skipping to change at page 15, line 45 ¶ | skipping to change at page 16, line 5 ¶ | |||
| The push-stream variant PRIORITY_UPDATE (type=0xF0701) MUST reference | The push-stream variant PRIORITY_UPDATE (type=0xF0701) MUST reference | |||
| a promised push stream. If a server receives a PRIORITY_UPDATE | a promised push stream. If a server receives a PRIORITY_UPDATE | |||
| (type=0xF0701) with a Push ID that is greater than the maximum Push | (type=0xF0701) with a Push ID that is greater than the maximum Push | |||
| ID or which has not yet been promised, this MUST be treated as a | ID or which has not yet been promised, this MUST be treated as a | |||
| connection error of type H3_ID_ERROR. | connection error of type H3_ID_ERROR. | |||
| PRIORITY_UPDATE frames of either type are only sent by clients. If a | PRIORITY_UPDATE frames of either type are only sent by clients. If a | |||
| client receives a PRIORITY_UPDATE frame, this MUST be treated as a | client receives a PRIORITY_UPDATE frame, this MUST be treated as a | |||
| connection error of type H3_FRAME_UNEXPECTED. | connection error of type H3_FRAME_UNEXPECTED. | |||
| 8. Merging Client- and Server-Driven Parameters | 8. Merging Client- and Server-Driven Priority Parameters | |||
| It is not always the case that the client has the best understanding | It is not always the case that the client has the best understanding | |||
| of how the HTTP responses deserve to be prioritized. The server | of how the HTTP responses deserve to be prioritized. The server | |||
| might have additional information that can be combined with the | might have additional information that can be combined with the | |||
| client's indicated priority in order to improve the prioritization of | client's indicated priority in order to improve the prioritization of | |||
| the response. For example, use of an HTML document might depend | the response. For example, use of an HTML document might depend | |||
| heavily on one of the inline images; existence of such dependencies | heavily on one of the inline images; existence of such dependencies | |||
| is typically best known to the server. Or, a server that receives | is typically best known to the server. Or, a server that receives | |||
| requests for a font [RFC8081] and images with the same urgency might | requests for a font [RFC8081] and images with the same urgency might | |||
| give higher precedence to the font, so that a visual client can | give higher precedence to the font, so that a visual client can | |||
| render textual information at an early moment. | render textual information at an early moment. | |||
| An origin can use the Priority response header field to indicate its | An origin can use the Priority response header field to indicate its | |||
| view on how an HTTP response should be prioritized. An intermediary | view on how an HTTP response should be prioritized. An intermediary | |||
| that forwards an HTTP response can use the parameters found in the | that forwards an HTTP response can use the priority parameters found | |||
| Priority response header field, in combination with the client | in the Priority response header field, in combination with the client | |||
| Priority request header field, as input to its prioritization | Priority request header field, as input to its prioritization | |||
| process. No guidance is provided for merging priorities, this is | process. No guidance is provided for merging priorities, this is | |||
| left as an implementation decision. | left as an implementation decision. | |||
| Absence of a priority parameter in an HTTP response indicates the | Absence of a priority parameter in an HTTP response indicates the | |||
| server's disinterest in changing the client-provided value. This is | server's disinterest in changing the client-provided value. This is | |||
| different from the logic being defined for the request header field, | different from the the request header field, in which omission of a | |||
| in which omission of a priority parameter implies the use of their | priority parameter implies the use of their default values (see | |||
| default values (see Section 4). | Section 4). | |||
| As a non-normative example, when the client sends an HTTP request | As a non-normative example, when the client sends an HTTP request | |||
| with the urgency parameter set to 5 and the incremental parameter set | with the urgency parameter set to 5 and the incremental parameter set | |||
| to true | to true | |||
| :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 | |||
| skipping to change at page 17, line 7 ¶ | skipping to change at page 17, line 12 ¶ | |||
| the client, as the server did not specify the incremental(i) | the client, as the server did not specify the incremental(i) | |||
| parameter. | parameter. | |||
| 9. Client Scheduling | 9. Client Scheduling | |||
| A client MAY use priority values to make local processing or | A client MAY use priority values to make local processing or | |||
| scheduling choices about the requests it initiates. | scheduling choices about the requests it initiates. | |||
| 10. Server Scheduling | 10. Server Scheduling | |||
| Priority signals are input to a prioritization process. They do not | It is generally beneficial for an HTTP server to send all responses | |||
| guarantee any particular processing or transmission order for one | as early as possible. However, when serving multiple requests on a | |||
| response relative to any other response. An endpoint cannot force a | single connection, there could be competition between the requests | |||
| peer to process concurrent request in a particular order using | for resources such as connection bandwidth. This section describes | |||
| priority. Expressing priority is therefore only a suggestion. | considerations regarding how servers can schedule the order in which | |||
| the competing responses will be sent, when such competition exists. | ||||
| A server can use priority signals along with other inputs to make | ||||
| scheduling decisions. No guidance is provided about how this can or | ||||
| should be done. Factors such as implementation choices or deployment | ||||
| environment also play a role. Any given connection is likely to have | ||||
| many dynamic permutations. For these reasons, there is no unilateral | ||||
| perfect scheduler and this document only provides some basic | ||||
| recommendations for implementations. | ||||
| Clients cannot depend on particular treatment based on priority | Server scheduling is a prioritization process based on many inputs, | |||
| signals. Servers can use other information to prioritize responses. | with priority signals being only one form of input. Factors such as | |||
| implementation choices or deployment environment also play a role. | ||||
| Any given connection is likely to have many dynamic permutations. | ||||
| For these reasons, there is no unilateral perfect scheduler. This | ||||
| document provides some basic, non-exhaustive, recommendations for how | ||||
| servers might act on priority parameters. It does not describe in | ||||
| detail how servers might combine priority signals with other factors. | ||||
| Endpoints cannot depend on particular treatment based on priority | ||||
| signals. Expressing priority is only a suggestion. | ||||
| It is RECOMMENDED that, when possible, servers respect the urgency | It is RECOMMENDED that, when possible, servers respect the urgency | |||
| parameter (Section 4.1), sending higher urgency responses before | parameter (Section 4.1), sending higher urgency responses before | |||
| lower urgency responses. | lower urgency responses. | |||
| The incremental parameter indicates how a client processes response | The incremental parameter indicates how a client processes response | |||
| bytes as they arrive. It is RECOMMENDED that, when possible, servers | bytes as they arrive. It is RECOMMENDED that, when possible, servers | |||
| respect the incremental parameter (Section 4.2). Non-incremental | respect the incremental parameter (Section 4.2). | |||
| resources can only be used when all of the response payload has been | ||||
| received. Therefore, non-incremental responses of the same urgency | Non-incremental responses of the same urgency SHOULD be served by | |||
| SHOULD be served in their entirety, one-by-one, based on the stream | prioritizing bandwidth allocation in ascending order of the stream | |||
| ID, which corresponds to the order in which clients make requests. | ID, which corresponds to the order in which clients make requests. | |||
| Doing so ensures that clients can use request ordering to influence | Doing so ensures that clients can use request ordering to influence | |||
| response order. | response order. | |||
| Incremental responses of the same urgency SHOULD be served by sharing | Incremental responses of the same urgency SHOULD be served by sharing | |||
| bandwidth amongst them. Incremental resources are used as parts, or | bandwidth amongst them. Incremental resources are used as parts, or | |||
| chunks, of the response payload are received. A client might benefit | chunks, of the response payload are received. A client might benefit | |||
| more from receiving a portion of all these resources rather than the | more from receiving a portion of all these resources rather than the | |||
| entirety of a single resource. How large a portion of the resource | entirety of a single resource. How large a portion of the resource | |||
| is needed to be useful in improving performance varies. Some | is needed to be useful in improving performance varies. Some | |||
| skipping to change at page 18, line 46 ¶ | skipping to change at page 19, line 13 ¶ | |||
| signals, applying default parameter values could be suboptimal. By | signals, applying default parameter values could be suboptimal. By | |||
| whatever means a server decides to schedule a pushed response, it can | whatever means a server decides to schedule a pushed response, it can | |||
| signal the intended priority to the client by including the Priority | signal the intended priority to the client by including the Priority | |||
| field in a PUSH_PROMISE or HEADERS frame. | field in a PUSH_PROMISE or HEADERS frame. | |||
| 10.1. Intermediaries with Multiple Backend Connections | 10.1. Intermediaries with Multiple Backend Connections | |||
| An intermediary serving an HTTP connection might split requests over | An intermediary serving an HTTP connection might split requests over | |||
| multiple backend connections. When it applies prioritization rules | multiple backend connections. When it applies prioritization rules | |||
| strictly, low priority requests cannot make progress while requests | strictly, low priority requests cannot make progress while requests | |||
| with higher priorities are inflight. This blocking can propagate to | with higher priorities are in flight. This blocking can propagate to | |||
| backend connections, which the peer might interpret as a connection | backend connections, which the peer might interpret as a connection | |||
| stall. Endpoints often implement protections against stalls, such as | stall. Endpoints often implement protections against stalls, such as | |||
| abruptly closing connections after a certain time period. To reduce | abruptly closing connections after a certain time period. To reduce | |||
| the possibility of this occurring, intermediaries can avoid strictly | the possibility of this occurring, intermediaries can avoid strictly | |||
| following prioritization and instead allocate small amounts of | following prioritization and instead allocate small amounts of | |||
| bandwidth for all the requests that they are forwarding, so that | bandwidth for all the requests that they are forwarding, so that | |||
| every request can make some progress over time. | every request can make some progress over time. | |||
| Similarly, servers SHOULD allocate some amount of bandwidths to | Similarly, servers SHOULD allocate some amount of bandwidths to | |||
| streams acting as tunnels. | streams acting as tunnels. | |||
| 11. Scheduling and the CONNECT Method | 11. Scheduling and the CONNECT Method | |||
| When a request stream carries the CONNECT method, the scheduling | When a request stream carries the CONNECT method, the scheduling | |||
| guidance in this document applies to the frames on the stream. A | guidance in this document applies to the frames on the stream. A | |||
| client that issues multiple CONNECT requests can set the incremental | client that issues multiple CONNECT requests can set the incremental | |||
| parameter to true, servers that implement the recommendation in | parameter to true. Servers that implement the recommendations for | |||
| Section 10 will schedule these fairly. | handling of the incremental parameter in Section 10 are likely to | |||
| schedule these fairly, avoiding one CONNECT stream from blocking | ||||
| others. | ||||
| 12. Retransmission Scheduling | 12. Retransmission Scheduling | |||
| Transport protocols such as TCP and QUIC provide reliability by | Transport protocols such as TCP and QUIC provide reliability by | |||
| detecting packet losses and retransmitting lost information. While | detecting packet losses and retransmitting lost information. In | |||
| this document specifies HTTP-layer prioritization, its effectiveness | addition to the considerations in Section 10, scheduling of | |||
| can be further enhanced if the transport layer factors priority into | retransmission data could compete with new data. The remainder of | |||
| scheduling both new data and retransmission data. The remainder of | ||||
| this section discusses considerations when using QUIC. | this section discusses considerations when using QUIC. | |||
| Section 13.3 of [QUIC] states "Endpoints SHOULD prioritize | Section 13.3 of [QUIC] states "Endpoints SHOULD prioritize | |||
| retransmission of data over sending new data, unless priorities | retransmission of data over sending new data, unless priorities | |||
| specified by the application indicate otherwise". When an HTTP/3 | specified by the application indicate otherwise". When an HTTP/3 | |||
| application uses the priority scheme defined in this document and the | application uses the priority scheme defined in this document and the | |||
| QUIC transport implementation supports application indicated stream | QUIC transport implementation supports application indicated stream | |||
| priority, a transport that considers the relative priority of streams | priority, a transport that considers the relative priority of streams | |||
| when scheduling both new data and retransmission data might better | when scheduling both new data and retransmission data might better | |||
| match the expectations of the application. However, there are no | match the expectations of the application. However, there are no | |||
| requirements on how a transport chooses to schedule based on this | requirements on how a transport chooses to schedule based on this | |||
| information because the decision depends on several factors and | information because the decision depends on several factors and | |||
| trade-offs. It could prioritize new data for a higher urgency stream | trade-offs. It could prioritize new data for a higher urgency stream | |||
| over retransmission data for a lower priority stream, or it could | over retransmission data for a lower priority stream, or it could | |||
| prioritize retransmission data over new data irrespective of | prioritize retransmission data over new data irrespective of | |||
| urgencies. | urgencies. | |||
| Section 6.2.4 of [QUIC-RECOVERY], also highlights consideration of | Section 6.2.4 of [QUIC-RECOVERY] also highlights consideration of | |||
| application priorities when sending probe packets after Probe Timeout | application priorities when sending probe packets after Probe Timeout | |||
| timer expiration. A QUIC implementation supporting application- | timer expiration. A QUIC implementation supporting application- | |||
| indicated priorities might use the relative priority of streams when | indicated priorities might use the relative priority of streams when | |||
| choosing probe data. | choosing probe data. | |||
| 13. Fairness | 13. Fairness | |||
| As a general guideline, a server SHOULD NOT use priority information | Typically, HTTP implementations depend on the underlying transport to | |||
| for making scheduling decisions across multiple connections, unless | maintain fairness between connections competing for bandwidth. When | |||
| it knows that those connections originate from the same client. Due | HTTP requests are forwarded through intermediaries, progress made by | |||
| to this, priority information conveyed over a non-coalesced HTTP | each connection originating from end clients can become different | |||
| connection (e.g., HTTP/1.1) might go unused. | over time, depending on how intermediaries coalesce or split requests | |||
| into backend connections. This unfairness can expand if priority | ||||
| signals are used. Section 13.1 and Section 13.2 discuss mitigations | ||||
| against this expansion of unfairness. | ||||
| The remainder of this section discusses scenarios where unfairness is | Conversely, Section 13.3 discusses how servers might intentionally | |||
| problematic and presents possible mitigations, or where unfairness is | allocate unequal bandwidth to some connections depending on the | |||
| desirable. | priority signals. | |||
| 13.1. Coalescing Intermediaries | 13.1. Coalescing Intermediaries | |||
| When an intermediary coalesces HTTP requests coming from multiple | When an intermediary coalesces HTTP requests coming from multiple | |||
| clients into one HTTP/2 or HTTP/3 connection going to the backend | clients into one HTTP/2 or HTTP/3 connection going to the backend | |||
| server, requests that originate from one client might have higher | server, requests that originate from one client might carry signals | |||
| precedence than those coming from others. | indicating higher priority than those coming from others. | |||
| It is sometimes beneficial for the server running behind an | It is sometimes beneficial for the server running behind an | |||
| intermediary to obey to the value of the Priority header field. As | intermediary to obey Priority header field values. As an example, a | |||
| an example, a resource-constrained server might defer the | resource-constrained server might defer the transmission of software | |||
| transmission of software update files that would have the background | update files that would have the background urgency being associated. | |||
| urgency being associated. However, in the worst case, the asymmetry | However, in the worst case, the asymmetry between the priority | |||
| between the precedence declared by multiple clients might cause | declared by multiple clients might cause responses going to one user | |||
| responses going to one user agent to be delayed totally after those | agent to be delayed totally after those going to another. | |||
| going to another. | ||||
| In order to mitigate this fairness problem, a server could use | In order to mitigate this fairness problem, a server could use | |||
| knowledge about the intermediary as another signal in its | knowledge about the intermediary as another input in its | |||
| prioritization decisions. For instance, if a server knows the | prioritization decisions. For instance, if a server knows the | |||
| intermediary is coalescing requests, then it could avoid serving the | intermediary is coalescing requests, then it could avoid serving the | |||
| responses in their entirety and instead distribute bandwidth (for | responses in their entirety and instead distribute bandwidth (for | |||
| example, in a round-robin manner). This can work if the constrained | example, in a round-robin manner). This can work if the constrained | |||
| resource is network capacity between the intermediary and the user | resource is network capacity between the intermediary and the user | |||
| agent, as the intermediary buffers responses and forwards the chunks | agent, as the intermediary buffers responses and forwards the chunks | |||
| based on the prioritization scheme it implements. | based on the prioritization scheme it implements. | |||
| A server can determine if a request came from an intermediary through | A server can determine if a request came from an intermediary through | |||
| configuration, or by consulting if that request contains one of the | configuration, or by consulting if that request contains one of the | |||
| skipping to change at page 21, line 34 ¶ | skipping to change at page 21, line 45 ¶ | |||
| amount of unfairness between the connections and therefore between | amount of unfairness between the connections and therefore between | |||
| the requests served on those connections. | the requests served on those connections. | |||
| For example, a server might use a scavenging congestion controller on | For example, a server might use a scavenging congestion controller on | |||
| connections that only convey background priority responses such as | connections that only convey background priority responses such as | |||
| software update images. Doing so improves responsiveness of other | software update images. Doing so improves responsiveness of other | |||
| connections at the cost of delaying the delivery of updates. | connections at the cost of delaying the delivery of updates. | |||
| 14. Why use an End-to-End Header Field? | 14. Why use an End-to-End Header Field? | |||
| Contrary to the prioritization scheme of HTTP/2 that uses a hop-by- | In contrast to the prioritization scheme of HTTP/2 that uses a hop- | |||
| hop frame, the Priority header field is defined as end-to-end. | by-hop frame, the Priority header field is defined as end-to-end. | |||
| The rationale is that the Priority header field transmits how each | The way that a client processes a response is a property associated | |||
| response affects the client's processing of those responses, rather | with the client generating that request. Not that of an | |||
| than how relatively urgent each response is to others. The way a | intermediary. Therefore, it is an end-to-end property. How these | |||
| client processes a response is a property associated to that client | end-to-end properties carried by the Priority header field affect the | |||
| generating that request. Not that of an intermediary. Therefore, it | prioritization between the responses that share a connection is a | |||
| is an end-to-end property. How these end-to-end properties carried | hop-by-hop issue. | |||
| by the Priority header field affect the prioritization between the | ||||
| responses that share a connection is a hop-by-hop issue. | ||||
| Having the Priority header field defined as end-to-end is important | Having the Priority header field defined as end-to-end is important | |||
| for caching intermediaries. Such intermediaries can cache the value | for caching intermediaries. Such intermediaries can cache the value | |||
| of the Priority header field along with the response, and utilize the | of the Priority header field along with the response, and utilize the | |||
| value of the cached header field when serving the cached response, | value of the cached header field when serving the cached response, | |||
| only because the header field is defined as end-to-end rather than | only because the header field is defined as end-to-end rather than | |||
| hop-by-hop. | hop-by-hop. | |||
| It should also be noted that the use of a header field carrying a | ||||
| textual value makes the prioritization scheme extensible; see the | ||||
| discussion below. | ||||
| 15. Security Considerations | 15. Security Considerations | |||
| [RFC7540] stream prioritization relies on dependencies. | ||||
| Considerations are presented to implementations, describing how | ||||
| limiting state or work commitments can avoid some types of problems. | ||||
| In addition, [CVE-2019-9513] aka "Resource Loop", is an example of a | ||||
| DoS attack that abuses stream dependencies. Extensible priorities | ||||
| does not use dependencies, which avoids these issues. | ||||
| Section 7 describes considerations for server buffering of | Section 7 describes considerations for server buffering of | |||
| PRIORITY_UPDATE frames. | PRIORITY_UPDATE frames. | |||
| Section 10 presents examples where servers that prioritize responses | Section 10 presents examples where servers that prioritize responses | |||
| in a certain way might be starved of the ability to transmit payload. | in a certain way might be starved of the ability to transmit payload. | |||
| The security considerations from [STRUCTURED-FIELDS] apply to | The security considerations from [STRUCTURED-FIELDS] apply to | |||
| processing of priority parameters defined in Section 4. | processing of priority parameters defined in Section 4. | |||
| 16. IANA Considerations | 16. IANA Considerations | |||
| skipping to change at page 22, line 48 ¶ | skipping to change at page 23, line 4 ¶ | |||
| This specification registers the following entry in the HTTP/2 | This specification registers the following entry in the HTTP/2 | |||
| Settings registry established by [RFC7540]: | Settings registry established by [RFC7540]: | |||
| Name: SETTINGS_NO_RFC7540_PRIORITIES | Name: SETTINGS_NO_RFC7540_PRIORITIES | |||
| Code: 0x9 | Code: 0x9 | |||
| Initial value: 0 | Initial value: 0 | |||
| Specification: This document | Specification: This document | |||
| This specification registers the following entry in the HTTP/2 Frame | This specification registers the following entry in the HTTP/2 Frame | |||
| Type registry established by [RFC7540]: | Type registry established by [RFC7540]: | |||
| Frame Type: PRIORITY_UPDATE | Frame Type: PRIORITY_UPDATE | |||
| Code: 0x10 | Code: 0x10 | |||
| Specification: This document | Specification: This document | |||
| This specification registers the following entries in the HTTP/3 | This specification registers the following entries in the HTTP/3 | |||
| Frame Type registry established by [HTTP3]: | Frame Type registry established by [HTTP3]: | |||
| Frame Type: PRIORITY_UPDATE | Frame Type: PRIORITY_UPDATE | |||
| Code: 0xF0700 and 0xF0701 | Code: 0xF0700 and 0xF0701 | |||
| Specification: This document | Specification: This document | |||
| Upon publication, please create the HTTP Priority Parameters registry | Upon publication, please create the HTTP Priority Parameters registry | |||
| at https://iana.org/assignments/http-priority | at https://iana.org/assignments/http-priority | |||
| (https://iana.org/assignments/http-priority) and populate it with the | (https://iana.org/assignments/http-priority) and populate it with the | |||
| types defined in Section 4; see Section 4.3.1 for its associated | entries in Table 1; see Section 4.3.1 for its associated procedures. | |||
| procedures. | ||||
| +======+==================================+===============+ | ||||
| | Name | Description | Specification | | ||||
| +======+==================================+===============+ | ||||
| | u | The urgency of an HTTP response. | Section 4.1 | | ||||
| +------+----------------------------------+---------------+ | ||||
| | i | Whether an HTTP response can be | Section 4.2 | | ||||
| | | processed incrementally. | | | ||||
| +------+----------------------------------+---------------+ | ||||
| Table 1: Initial Priority Parameters | ||||
| 17. References | 17. References | |||
| 17.1. Normative References | 17.1. Normative References | |||
| [HTTP] Fielding, R. T., Nottingham, M., and J. Reschke, "HTTP | [HTTP] Fielding, R. T., Nottingham, M., and J. Reschke, "HTTP | |||
| Semantics", Work in Progress, Internet-Draft, draft-ietf- | Semantics", Work in Progress, Internet-Draft, draft-ietf- | |||
| httpbis-semantics-19, 12 September 2021, | httpbis-semantics-19, 12 September 2021, | |||
| <https://datatracker.ietf.org/doc/html/draft-ietf-httpbis- | <https://datatracker.ietf.org/doc/html/draft-ietf-httpbis- | |||
| semantics-19>. | semantics-19>. | |||
| [HTTP2] Thomson, M. and C. Benfield, "Hypertext Transfer Protocol | [HTTP2] Thomson, M. and C. Benfield, "Hypertext Transfer Protocol | |||
| Version 2 (HTTP/2)", Work in Progress, Internet-Draft, | Version 2 (HTTP/2)", Work in Progress, Internet-Draft, | |||
| draft-ietf-httpbis-http2bis-05, 26 September 2021, | draft-ietf-httpbis-http2bis-06, 18 November 2021, | |||
| <https://datatracker.ietf.org/doc/html/draft-ietf-httpbis- | <https://datatracker.ietf.org/doc/html/draft-ietf-httpbis- | |||
| http2bis-05>. | http2bis-06>. | |||
| [HTTP3] Bishop, M., "Hypertext Transfer Protocol Version 3 | [HTTP3] Bishop, M., "Hypertext Transfer Protocol Version 3 | |||
| (HTTP/3)", Work in Progress, Internet-Draft, draft-ietf- | (HTTP/3)", Work in Progress, Internet-Draft, draft-ietf- | |||
| quic-http-34, 2 February 2021, | quic-http-34, 2 February 2021, | |||
| <https://datatracker.ietf.org/doc/html/draft-ietf-quic- | <https://datatracker.ietf.org/doc/html/draft-ietf-quic- | |||
| http-34>. | http-34>. | |||
| [QUIC] Iyengar, J., Ed. and M. Thomson, Ed., "QUIC: A UDP-Based | [QUIC] Iyengar, J., Ed. and M. Thomson, Ed., "QUIC: A UDP-Based | |||
| Multiplexed and Secure Transport", RFC 9000, | Multiplexed and Secure Transport", RFC 9000, | |||
| DOI 10.17487/RFC9000, May 2021, | DOI 10.17487/RFC9000, May 2021, | |||
| skipping to change at page 24, line 32 ¶ | skipping to change at page 24, line 49 ¶ | |||
| <https://www.rfc-editor.org/rfc/rfc8941>. | <https://www.rfc-editor.org/rfc/rfc8941>. | |||
| 17.2. Informative References | 17.2. Informative References | |||
| [CACHING] Fielding, R. T., Nottingham, M., and J. Reschke, "HTTP | [CACHING] Fielding, R. T., Nottingham, M., and J. Reschke, "HTTP | |||
| Caching", Work in Progress, Internet-Draft, draft-ietf- | Caching", Work in Progress, Internet-Draft, draft-ietf- | |||
| httpbis-cache-19, 12 September 2021, | httpbis-cache-19, 12 September 2021, | |||
| <https://datatracker.ietf.org/doc/html/draft-ietf-httpbis- | <https://datatracker.ietf.org/doc/html/draft-ietf-httpbis- | |||
| cache-19>. | cache-19>. | |||
| [CVE-2019-9513] | ||||
| Common Vulnerabilities and Exposures, "CVE-2019-9513", 1 | ||||
| March 2019, <https://cve.mitre.org/cgi-bin/ | ||||
| cvename.cgi?name=CVE-2019-9513>. | ||||
| [FORWARDED] | [FORWARDED] | |||
| Petersson, A. and M. Nilsson, "Forwarded HTTP Extension", | Petersson, A. and M. Nilsson, "Forwarded HTTP Extension", | |||
| RFC 7239, DOI 10.17487/RFC7239, June 2014, | RFC 7239, DOI 10.17487/RFC7239, June 2014, | |||
| <https://www.rfc-editor.org/rfc/rfc7239>. | <https://www.rfc-editor.org/rfc/rfc7239>. | |||
| [I-D.lassey-priority-setting] | [I-D.lassey-priority-setting] | |||
| Lassey, B. and L. Pardue, "Declaring Support for HTTP/2 | Lassey, B. and L. Pardue, "Declaring Support for HTTP/2 | |||
| Priorities", Work in Progress, Internet-Draft, draft- | Priorities", Work in Progress, Internet-Draft, draft- | |||
| lassey-priority-setting-00, 25 July 2019, | lassey-priority-setting-00, 25 July 2019, | |||
| <https://datatracker.ietf.org/doc/html/draft-lassey- | <https://datatracker.ietf.org/doc/html/draft-lassey- | |||
| priority-setting-00>. | priority-setting-00>. | |||
| [MARX] Marx, R., Decker, T.D., Quax, P., and W. Lamotte, "Of the | ||||
| Utmost Importance: Resource Prioritization in HTTP/3 over | ||||
| QUIC", DOI 10.5220/0008191701300143, | ||||
| SCITEPRESS Proceedings of the 15th International | ||||
| Conference on Web Information Systems and Technologies | ||||
| (pages 130-143), September 2019, | ||||
| <https://www.doi.org/10.5220/0008191701300143>. | ||||
| [MEENAN] Meenan, P., "Better HTTP/2 Prioritization for a Faster | ||||
| Web", 14 May 2019, <https://blog.cloudflare.com/better- | ||||
| http-2-prioritization-for-a-faster-web/>. | ||||
| [QUIC-RECOVERY] | [QUIC-RECOVERY] | |||
| Iyengar, J., Ed. and I. Swett, Ed., "QUIC Loss Detection | Iyengar, J., Ed. and I. Swett, Ed., "QUIC Loss Detection | |||
| and Congestion Control", RFC 9002, DOI 10.17487/RFC9002, | and Congestion Control", RFC 9002, DOI 10.17487/RFC9002, | |||
| May 2021, <https://www.rfc-editor.org/rfc/rfc9002>. | May 2021, <https://www.rfc-editor.org/rfc/rfc9002>. | |||
| [RFC7540] Belshe, M., Peon, R., and M. Thomson, Ed., "Hypertext | [RFC7540] Belshe, M., Peon, R., and M. Thomson, Ed., "Hypertext | |||
| Transfer Protocol Version 2 (HTTP/2)", RFC 7540, | Transfer Protocol Version 2 (HTTP/2)", RFC 7540, | |||
| DOI 10.17487/RFC7540, May 2015, | DOI 10.17487/RFC7540, May 2015, | |||
| <https://www.rfc-editor.org/rfc/rfc7540>. | <https://www.rfc-editor.org/rfc/rfc7540>. | |||
| skipping to change at page 25, line 45 ¶ | skipping to change at page 26, line 22 ¶ | |||
| Alan Frindell, Andrew Galloni, Craig Taylor, Ian Swett, Kazuho Oku, | Alan Frindell, Andrew Galloni, Craig Taylor, Ian Swett, Kazuho Oku, | |||
| Lucas Pardue, Matthew Cox, Mike Bishop, Roberto Peon, Robin Marx, Roy | Lucas Pardue, Matthew Cox, Mike Bishop, Roberto Peon, Robin Marx, Roy | |||
| Fielding. | Fielding. | |||
| Yang Chi contributed the section on retransmission scheduling. | Yang Chi contributed the section on retransmission scheduling. | |||
| Appendix B. Change Log | Appendix B. Change Log | |||
| _RFC EDITOR: please remove this section before publication_ | _RFC EDITOR: please remove this section before publication_ | |||
| B.1. Since draft-ietf-httpbis-priority-09 | B.1. Since draft-ietf-httpbis-priority-10 | |||
| * Editorial changes | * Editorial changes | |||
| B.2. Since draft-ietf-httpbis-priority-08 | * Add clearer IANA instructions for Priority Parameter initial | |||
| population | ||||
| B.2. Since draft-ietf-httpbis-priority-09 | ||||
| * Editorial changes | ||||
| B.3. Since draft-ietf-httpbis-priority-08 | ||||
| * Changelog fixups | * Changelog fixups | |||
| B.3. Since draft-ietf-httpbis-priority-07 | B.4. Since draft-ietf-httpbis-priority-07 | |||
| * Relax requirements of receiving SETTINGS_NO_RFC7540_PRIORITIES | * Relax requirements of receiving SETTINGS_NO_RFC7540_PRIORITIES | |||
| that changes value (#1714, #1725) | that changes value (#1714, #1725) | |||
| * Clarify how intermediaries might use frames vs. headers (#1715, | * Clarify how intermediaries might use frames vs. headers (#1715, | |||
| #1735) | #1735) | |||
| * Relax requirement when receiving a PRIORITY_UPDATE with an invalid | * Relax requirement when receiving a PRIORITY_UPDATE with an invalid | |||
| structured field value (#1741, #1756) | structured field value (#1741, #1756) | |||
| B.4. Since draft-ietf-httpbis-priority-06 | B.5. Since draft-ietf-httpbis-priority-06 | |||
| * Focus on editorial changes | * Focus on editorial changes | |||
| * Clarify rules about Sf-Dictionary handling in headers | * Clarify rules about Sf-Dictionary handling in headers | |||
| * Split policy for parameter IANA registry into two sections based | * Split policy for parameter IANA registry into two sections based | |||
| on key length | on key length | |||
| B.5. Since draft-ietf-httpbis-priority-05 | B.6. Since draft-ietf-httpbis-priority-05 | |||
| * Renamed SETTINGS_DEPRECATE_RFC7540_PRIORITIES to | * Renamed SETTINGS_DEPRECATE_RFC7540_PRIORITIES to | |||
| SETTINGS_NO_RFC7540_PRIORITIES | SETTINGS_NO_RFC7540_PRIORITIES | |||
| * Clarify that senders of the HTTP/2 setting can use any alternative | * Clarify that senders of the HTTP/2 setting can use any alternative | |||
| (#1679, #1705) | (#1679, #1705) | |||
| B.6. Since draft-ietf-httpbis-priority-04 | B.7. Since draft-ietf-httpbis-priority-04 | |||
| * Renamed SETTINGS_DEPRECATE_HTTP2_PRIORITIES to | * Renamed SETTINGS_DEPRECATE_HTTP2_PRIORITIES to | |||
| SETTINGS_DEPRECATE_RFC7540_PRIORITIES (#1601) | SETTINGS_DEPRECATE_RFC7540_PRIORITIES (#1601) | |||
| * Reoriented text towards RFC7540bis (#1561, #1601) | * Reoriented text towards RFC7540bis (#1561, #1601) | |||
| * Clarify intermediary behavior (#1562) | * Clarify intermediary behavior (#1562) | |||
| B.7. Since draft-ietf-httpbis-priority-03 | B.8. Since draft-ietf-httpbis-priority-03 | |||
| * Add statement about what this scheme applies to. Clarify | * Add statement about what this scheme applies to. Clarify | |||
| extensions can use it but must define how themselves (#1550, | extensions can use it but must define how themselves (#1550, | |||
| #1559) | #1559) | |||
| * Describe scheduling considerations for the CONNECT method (#1495, | * Describe scheduling considerations for the CONNECT method (#1495, | |||
| #1544) | #1544) | |||
| * Describe scheduling considerations for retransmitted data (#1429, | * Describe scheduling considerations for retransmitted data (#1429, | |||
| #1504) | #1504) | |||
| * Suggest intermediaries might avoid strict prioritization (#1562) | * Suggest intermediaries might avoid strict prioritization (#1562) | |||
| B.8. Since draft-ietf-httpbis-priority-02 | B.9. Since draft-ietf-httpbis-priority-02 | |||
| * Describe considerations for server push prioritization (#1056, | * Describe considerations for server push prioritization (#1056, | |||
| #1345) | #1345) | |||
| * Define HTTP/2 PRIORITY_UPDATE ID limits in HTTP/2 terms (#1261, | * Define HTTP/2 PRIORITY_UPDATE ID limits in HTTP/2 terms (#1261, | |||
| #1344) | #1344) | |||
| * Add a Parameters registry (#1371) | * Add a Priority Parameters registry (#1371) | |||
| B.9. Since draft-ietf-httpbis-priority-01 | B.10. Since draft-ietf-httpbis-priority-01 | |||
| * PRIORITY_UPDATE frame changes (#1096, #1079, #1167, #1262, #1267, | * PRIORITY_UPDATE frame changes (#1096, #1079, #1167, #1262, #1267, | |||
| #1271) | #1271) | |||
| * Add section to describe server scheduling considerations (#1215, | * Add section to describe server scheduling considerations (#1215, | |||
| #1232, #1266) | #1232, #1266) | |||
| * Remove specific instructions related to intermediary fairness | * Remove specific instructions related to intermediary fairness | |||
| (#1022, #1264) | (#1022, #1264) | |||
| B.10. Since draft-ietf-httpbis-priority-00 | B.11. Since draft-ietf-httpbis-priority-00 | |||
| * Move text around (#1217, #1218) | * Move text around (#1217, #1218) | |||
| * Editorial change to the default urgency. The value is 3, which | * Editorial change to the default urgency. The value is 3, which | |||
| was always the intent of previous changes. | was always the intent of previous changes. | |||
| B.11. Since draft-kazuho-httpbis-priority-04 | B.12. Since draft-kazuho-httpbis-priority-04 | |||
| * Minimize semantics of Urgency levels (#1023, #1026) | * Minimize semantics of Urgency levels (#1023, #1026) | |||
| * Reduce guidance about how intermediary implements merging priority | * Reduce guidance about how intermediary implements merging priority | |||
| signals (#1026) | signals (#1026) | |||
| * Remove mention of CDN-Loop (#1062) | * Remove mention of CDN-Loop (#1062) | |||
| * Editorial changes | * Editorial changes | |||
| * Make changes due to WG adoption | * Make changes due to WG adoption | |||
| * Removed outdated Consideration (#118) | * Removed outdated Consideration (#118) | |||
| B.12. Since draft-kazuho-httpbis-priority-03 | B.13. Since draft-kazuho-httpbis-priority-03 | |||
| * Changed numbering from [-1,6] to [0,7] (#78) | * Changed numbering from [-1,6] to [0,7] (#78) | |||
| * Replaced priority scheme negotiation with HTTP/2 priority | * Replaced priority scheme negotiation with HTTP/2 priority | |||
| deprecation (#100) | deprecation (#100) | |||
| * Shorten parameter names (#108) | * Shorten parameter names (#108) | |||
| * Expand on considerations (#105, #107, #109, #110, #111, #113) | * Expand on considerations (#105, #107, #109, #110, #111, #113) | |||
| B.13. Since draft-kazuho-httpbis-priority-02 | B.14. Since draft-kazuho-httpbis-priority-02 | |||
| * Consolidation of the problem statement (#61, #73) | * Consolidation of the problem statement (#61, #73) | |||
| * Define SETTINGS_PRIORITIES for negotiation (#58, #69) | * Define SETTINGS_PRIORITIES for negotiation (#58, #69) | |||
| * Define PRIORITY_UPDATE frame for HTTP/2 and HTTP/3 (#51) | * Define PRIORITY_UPDATE frame for HTTP/2 and HTTP/3 (#51) | |||
| * Explain fairness issue and mitigations (#56) | * Explain fairness issue and mitigations (#56) | |||
| B.14. Since draft-kazuho-httpbis-priority-01 | B.15. Since draft-kazuho-httpbis-priority-01 | |||
| * Explain how reprioritization might be supported. | * Explain how reprioritization might be supported. | |||
| B.15. Since draft-kazuho-httpbis-priority-00 | B.16. Since draft-kazuho-httpbis-priority-00 | |||
| * Expand urgency levels from 3 to 8. | * Expand urgency levels from 3 to 8. | |||
| Authors' Addresses | Authors' Addresses | |||
| Kazuho Oku | Kazuho Oku | |||
| Fastly | Fastly | |||
| Email: kazuhooku@gmail.com | Email: kazuhooku@gmail.com | |||
| End of changes. 81 change blocks. | ||||
| 222 lines changed or deleted | 252 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/ | ||||