| < draft-ietf-httpbis-priority-09.txt | draft-ietf-httpbis-priority-10.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: 14 May 2022 Cloudflare | Expires: 23 May 2022 Cloudflare | |||
| 10 November 2021 | 19 November 2021 | |||
| Extensible Prioritization Scheme for HTTP | Extensible Prioritization Scheme for HTTP | |||
| draft-ietf-httpbis-priority-09 | draft-ietf-httpbis-priority-10 | |||
| 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 | |||
| skipping to change at page 2, line 10 ¶ | skipping to change at page 2, line 10 ¶ | |||
| 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 14 May 2022. | This Internet-Draft will expire on 23 May 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 | |||
| and restrictions with respect to this document. Code Components | and restrictions with respect to this document. Code Components | |||
| extracted from this document must include Simplified BSD License text | extracted from this document must include Revised BSD License text as | |||
| as described in Section 4.e of the Trust Legal Provisions and are | described in Section 4.e of the Trust Legal Provisions and are | |||
| provided without warranty as described in the Simplified BSD License. | provided without warranty as described in the Revised BSD License. | |||
| Table of Contents | Table of Contents | |||
| 1. Introduction . . . . . . . . . . . . . . . . . . . . . . . . 3 | 1. Introduction . . . . . . . . . . . . . . . . . . . . . . . . 3 | |||
| 1.1. Notational Conventions . . . . . . . . . . . . . . . . . 4 | 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 . . . . . . . 8 | 3. Applicability of the Extensible Priority Scheme . . . . . . . 7 | |||
| 4. Priority Parameters . . . . . . . . . . . . . . . . . . . . . 8 | 4. Priority Parameters . . . . . . . . . . . . . . . . . . . . . 7 | |||
| 4.1. Urgency . . . . . . . . . . . . . . . . . . . . . . . . . 9 | 4.1. Urgency . . . . . . . . . . . . . . . . . . . . . . . . . 8 | |||
| 4.2. Incremental . . . . . . . . . . . . . . . . . . . . . . . 9 | 4.2. Incremental . . . . . . . . . . . . . . . . . . . . . . . 9 | |||
| 4.3. Defining New Parameters . . . . . . . . . . . . . . . . . 10 | 4.3. Defining New Parameters . . . . . . . . . . . . . . . . . 10 | |||
| 4.3.1. Registration . . . . . . . . . . . . . . . . . . . . 11 | 4.3.1. Registration . . . . . . . . . . . . . . . . . . . . 10 | |||
| 5. The Priority HTTP Header Field . . . . . . . . . . . . . . . 12 | 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 . . . . . . . . . . . . . . 15 | 7.2. HTTP/3 PRIORITY_UPDATE Frame . . . . . . . . . . . . . . 14 | |||
| 8. Merging Client- and Server-Driven Parameters . . . . . . . . 16 | 8. Merging Client- and Server-Driven Parameters . . . . . . . . 15 | |||
| 9. Client Scheduling . . . . . . . . . . . . . . . . . . . . . . 17 | 9. Client Scheduling . . . . . . . . . . . . . . . . . . . . . . 16 | |||
| 10. Server Scheduling . . . . . . . . . . . . . . . . . . . . . . 17 | 10. Server Scheduling . . . . . . . . . . . . . . . . . . . . . . 17 | |||
| 10.1. Intermediaries with Multiple Backend Connections . . . . 19 | 10.1. Intermediaries with Multiple Backend Connections . . . . 18 | |||
| 11. Scheduling and the CONNECT Method . . . . . . . . . . . . . . 19 | 11. Scheduling and the CONNECT Method . . . . . . . . . . . . . . 19 | |||
| 12. Retransmission Scheduling . . . . . . . . . . . . . . . . . . 20 | 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? . . . . . . . . . . . . . 22 | 14. Why use an End-to-End Header Field? . . . . . . . . . . . . . 21 | |||
| 15. Security Considerations . . . . . . . . . . . . . . . . . . . 22 | 15. Security Considerations . . . . . . . . . . . . . . . . . . . 22 | |||
| 16. IANA Considerations . . . . . . . . . . . . . . . . . . . . . 23 | 16. IANA Considerations . . . . . . . . . . . . . . . . . . . . . 22 | |||
| 17. References . . . . . . . . . . . . . . . . . . . . . . . . . 23 | 17. References . . . . . . . . . . . . . . . . . . . . . . . . . 23 | |||
| 17.1. Normative References . . . . . . . . . . . . . . . . . . 24 | 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 . . . . . . . . . . . . . . . . . . . . . 26 | Appendix B. Change Log . . . . . . . . . . . . . . . . . . . . . 25 | |||
| B.1. Since draft-ietf-httpbis-priority-08 . . . . . . . . . . 26 | B.1. Since draft-ietf-httpbis-priority-09 . . . . . . . . . . 25 | |||
| B.2. Since draft-ietf-httpbis-priority-07 . . . . . . . . . . 26 | B.2. Since draft-ietf-httpbis-priority-08 . . . . . . . . . . 25 | |||
| B.3. Since draft-ietf-httpbis-priority-06 . . . . . . . . . . 26 | B.3. Since draft-ietf-httpbis-priority-07 . . . . . . . . . . 26 | |||
| B.4. Since draft-ietf-httpbis-priority-05 . . . . . . . . . . 26 | B.4. Since draft-ietf-httpbis-priority-06 . . . . . . . . . . 26 | |||
| B.5. Since draft-ietf-httpbis-priority-04 . . . . . . . . . . 27 | B.5. Since draft-ietf-httpbis-priority-05 . . . . . . . . . . 26 | |||
| B.6. Since draft-ietf-httpbis-priority-03 . . . . . . . . . . 27 | B.6. Since draft-ietf-httpbis-priority-04 . . . . . . . . . . 26 | |||
| B.7. Since draft-ietf-httpbis-priority-02 . . . . . . . . . . 27 | B.7. Since draft-ietf-httpbis-priority-03 . . . . . . . . . . 26 | |||
| B.8. Since draft-ietf-httpbis-priority-01 . . . . . . . . . . 27 | B.8. Since draft-ietf-httpbis-priority-02 . . . . . . . . . . 27 | |||
| B.9. Since draft-ietf-httpbis-priority-00 . . . . . . . . . . 27 | B.9. Since draft-ietf-httpbis-priority-01 . . . . . . . . . . 27 | |||
| B.10. Since draft-kazuho-httpbis-priority-04 . . . . . . . . . 28 | B.10. Since draft-ietf-httpbis-priority-00 . . . . . . . . . . 27 | |||
| B.11. Since draft-kazuho-httpbis-priority-03 . . . . . . . . . 28 | B.11. Since draft-kazuho-httpbis-priority-04 . . . . . . . . . 27 | |||
| B.12. Since draft-kazuho-httpbis-priority-02 . . . . . . . . . 28 | B.12. Since draft-kazuho-httpbis-priority-03 . . . . . . . . . 28 | |||
| B.13. Since draft-kazuho-httpbis-priority-01 . . . . . . . . . 28 | B.13. Since draft-kazuho-httpbis-priority-02 . . . . . . . . . 28 | |||
| B.14. Since draft-kazuho-httpbis-priority-00 . . . . . . . . . 28 | B.14. Since draft-kazuho-httpbis-priority-01 . . . . . . . . . 28 | |||
| Authors' Addresses . . . . . . . . . . . . . . . . . . . . . . . 29 | B.15. Since draft-kazuho-httpbis-priority-00 . . . . . . . . . 28 | |||
| Authors' Addresses . . . . . . . . . . . . . . . . . . . . . . . 28 | ||||
| 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 49 ¶ | skipping to change at page 5, line 11 ¶ | |||
| 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 | The prioritization scheme and priority signals defined herein can act | |||
| as a substitute for RFC 7540 stream priority. | 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", "MAY", and "OPTIONAL" in this | "SHOULD", "SHOULD NOT", "RECOMMENDED", "NOT RECOMMENDED", "MAY", and | |||
| document are to be interpreted as described in [RFC2119]. | "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. | ||||
| 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 the HTTP/2 stream with | |||
| skipping to change at page 5, line 27 ¶ | skipping to change at page 5, line 38 ¶ | |||
| 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]. | |||
| However, in order to maintain wire compatibility, HTTP/2 priority | HTTP/2 retains these protocol elements in order to maintain wire | |||
| signals are still mandatory to handle (see Section 5.3.2 of [HTTP2]). | compatibility (see Section 5.3.2 of [HTTP2]), which means that they | |||
| might still be used in the absence of alternative signaling, such as | ||||
| Clients can build RFC 7540 trees with rich flexibility but experience | the scheme this document describes. | |||
| has shown this is rarely exercised. Instead they tend to choose a | ||||
| single model optimized for a single use case and experiment within | ||||
| the model constraints, or do nothing at all. Furthermore, many | ||||
| clients build their prioritization tree in a unique way, which makes | ||||
| it difficult for servers to understand their intent and act or | ||||
| intervene accordingly. | ||||
| 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. Some instead favor custom server-driven schemes based on | signals. | |||
| heuristics or other hints, such as resource content type or request | ||||
| generation order. For example, a server, with knowledge of an HTML | ||||
| document structure, might want to prioritize the delivery of images | ||||
| that are critical to user experience above other images, but below | ||||
| the CSS files. Since client trees vary, it is impossible for the | ||||
| server to determine how such images should be prioritized against | ||||
| other responses. | ||||
| RFC 7540 allows intermediaries to coalesce multiple client trees into | ||||
| a single tree that is used for a single upstream HTTP/2 connection. | ||||
| However, most intermediaries do not support this. Additionally, RFC | ||||
| 7540 does not define a method that can be used by a server to express | ||||
| the priority of a response. Without such a method, intermediaries | ||||
| cannot coordinate client-driven and server-driven priorities. | ||||
| RFC 7540 describes denial-of-service considerations for | Prioritization can use information that servers have about resources | |||
| implementations. On 2019-08-13 Netflix issued an advisory notice | or the order in which requests are generated. For example, a server, | |||
| about the discovery of several resource exhaustion vectors affecting | with knowledge of an HTML document structure, might want to | |||
| multiple RFC 7540 implementations. One attack, [CVE-2019-9513] aka | prioritize the delivery of images that are critical to user | |||
| "Resource Loop", is based on using priority signals to manipulate the | experience above other images. With RFC 7540 it is difficult for | |||
| server's stored prioritization state. | servers to interpret signals from clients for prioritization as the | |||
| same conditions could result in very different signaling from | ||||
| different clients. This document describes signaling that is simpler | ||||
| and more constrained, requiring less interpretation and allowing less | ||||
| variation. | ||||
| HTTP/2 priority associated with an HTTP request is signalled as a | RFC 7540 does not define a method that can be used by a server to | |||
| value relative to those of other requests sharing the same HTTP/2 | provide a priority signal for intermediaries. | |||
| connection. Therefore, in order to prioritize requests, endpoints | ||||
| are compelled to have the knowledge of the underlying HTTP version | ||||
| and how the requests are coalesced. This has been a burden to HTTP | ||||
| endpoints that generate or forward requests in a version-agnostic | ||||
| manner. | ||||
| HTTP/2 priority signals are required to be delivered and processed in | RFC 7540 priority is expressed relative to other requests on the same | |||
| the order they are sent so that the receiver handling is | connection. Many requests are generated without knowledge of how | |||
| deterministic. Porting HTTP/2 priority signals to protocols that do | other requests might share a connection, which makes this difficult | |||
| not provide ordering guarantees presents challenges. For example, | to use reliably, especially in protocols that do not have strong | |||
| HTTP/3 [HTTP3] lacks global ordering across streams that would carry | ordering guarantees, like HTTP/3 [HTTP3]. | |||
| priority signals. Early attempts to port HTTP/2 priority signals to | ||||
| HTTP/3 required adding additional information to the signals, leading | ||||
| to more complicated processing. Problems found with this approach | ||||
| could not be resolved and definition of a HTTP/3 priority signalling | ||||
| feature was removed before publication. | ||||
| Considering the deployment problems and the design restrictions of | Multiple experiments from independent research have shown that | |||
| RFC 7540 stream priority, as well as the difficulties in adapting it | simpler schemes can reach at least equivalent performance | |||
| to HTTP/3, continuing to base prioritization on this mechanism risks | characteristics compared to the more complex RFC 7540 setups seen in | |||
| increasing the complexity of systems. Multiple experiments from | practice, at least for the web use case. | |||
| independent research have shown that simpler schemes can reach at | ||||
| least equivalent performance characteristics compared to the more | ||||
| complex RFC 7540 setups seen in practice, at least for the web use | ||||
| case. | ||||
| 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 | |||
| deprecating RFC 7540 stream priority (see Section 5.3 of [RFC7540]). | an alternative to RFC 7540 stream priority (see Section 5.3 of | |||
| [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. | |||
| The value of SETTINGS_NO_RFC7540_PRIORITIES MUST be 0 or 1. Any | The value of SETTINGS_NO_RFC7540_PRIORITIES MUST be 0 or 1. Any | |||
| value other than 0 or 1 MUST be treated as a connection error (see | value other than 0 or 1 MUST be treated as a connection error (see | |||
| Section 5.4.1 of [HTTP2]) of type PROTOCOL_ERROR. The initial value | Section 5.4.1 of [HTTP2]) of type PROTOCOL_ERROR. The initial value | |||
| is 0. | is 0. | |||
| If endpoints use SETTINGS_NO_RFC7540_PRIORITIES they MUST send it in | If endpoints use SETTINGS_NO_RFC7540_PRIORITIES they MUST send it in | |||
| skipping to change at page 7, line 38 ¶ | skipping to change at page 7, line 16 ¶ | |||
| indicate that they will ignore HTTP/2 priority signals sent by | indicate that they will ignore HTTP/2 priority signals sent by | |||
| clients. | clients. | |||
| Endpoints that send SETTINGS_NO_RFC7540_PRIORITIES are encouraged to | Endpoints that send SETTINGS_NO_RFC7540_PRIORITIES are encouraged to | |||
| use alternative priority signals (for example, Section 5 or | use alternative priority signals (for example, Section 5 or | |||
| Section 7.1) but there is no requirement to use a specific signal | Section 7.1) but there is no requirement to use a specific signal | |||
| type. | type. | |||
| 2.1.1. Advice when Using Extensible Priorities as the Alternative | 2.1.1. Advice when Using Extensible Priorities as the Alternative | |||
| Until the client receives the SETTINGS frame from the server, the | Before receiving a SETTINGS frame from a server, a client does not | |||
| know if the server is ignoring HTTP/2 priority signals. Therefore, | ||||
| until the client receives the SETTINGS frame from the server, the | ||||
| client SHOULD send both the HTTP/2 priority signals and the signals | client SHOULD send both the HTTP/2 priority signals and the signals | |||
| of this prioritization scheme (see Section 5 and Section 7.1). When | of this prioritization scheme (see Section 5 and Section 7.1). | |||
| the client receives the first SETTINGS frame that contains the | ||||
| Once the client receives the first SETTINGS frame that contains the | ||||
| SETTINGS_NO_RFC7540_PRIORITIES parameter with value of 1, it SHOULD | SETTINGS_NO_RFC7540_PRIORITIES parameter with value of 1, it SHOULD | |||
| stop sending the HTTP/2 priority signals. If the value was 0 or if | stop sending the HTTP/2 priority signals. This avoids sending | |||
| the settings parameter was absent, it SHOULD stop sending | redundant signals that are known to be ignored. | |||
| PRIORITY_UPDATE frames (Section 7.1), but MAY continue sending the | ||||
| Similarly, if the client receives SETTINGS_NO_RFC7540_PRIORITIES with | ||||
| value of 0 or if the settings parameter was absent, it SHOULD stop | ||||
| sending PRIORITY_UPDATE frames (Section 7.1), since those frames are | ||||
| 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 considers only the | |||
| prioritization of HTTP messages and tunnels, see Section 9, | prioritization of HTTP messages and tunnels, see Section 9, | |||
| Section 10, and Section 11. | Section 10, and Section 11. | |||
| skipping to change at page 24, line 39 ¶ | skipping to change at page 24, line 15 ¶ | |||
| [RFC2119] Bradner, S., "Key words for use in RFCs to Indicate | [RFC2119] Bradner, S., "Key words for use in RFCs to Indicate | |||
| Requirement Levels", BCP 14, RFC 2119, | Requirement Levels", BCP 14, RFC 2119, | |||
| DOI 10.17487/RFC2119, March 1997, | DOI 10.17487/RFC2119, March 1997, | |||
| <https://www.rfc-editor.org/rfc/rfc2119>. | <https://www.rfc-editor.org/rfc/rfc2119>. | |||
| [RFC8126] Cotton, M., Leiba, B., and T. Narten, "Guidelines for | [RFC8126] Cotton, M., Leiba, B., and T. Narten, "Guidelines for | |||
| Writing an IANA Considerations Section in RFCs", BCP 26, | Writing an IANA Considerations Section in RFCs", BCP 26, | |||
| RFC 8126, DOI 10.17487/RFC8126, June 2017, | RFC 8126, DOI 10.17487/RFC8126, June 2017, | |||
| <https://www.rfc-editor.org/rfc/rfc8126>. | <https://www.rfc-editor.org/rfc/rfc8126>. | |||
| [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>. | ||||
| [STRUCTURED-FIELDS] | [STRUCTURED-FIELDS] | |||
| Nottingham, M. and P-H. Kamp, "Structured Field Values for | Nottingham, M. and P-H. Kamp, "Structured Field Values for | |||
| HTTP", RFC 8941, DOI 10.17487/RFC8941, February 2021, | HTTP", RFC 8941, DOI 10.17487/RFC8941, February 2021, | |||
| <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, | |||
| skipping to change at page 26, line 22 ¶ | skipping to change at page 25, line 45 ¶ | |||
| 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-08 | B.1. Since draft-ietf-httpbis-priority-09 | |||
| * Editorial changes | ||||
| B.2. Since draft-ietf-httpbis-priority-08 | ||||
| * Changelog fixups | * Changelog fixups | |||
| B.2. Since draft-ietf-httpbis-priority-07 | B.3. 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.3. Since draft-ietf-httpbis-priority-06 | B.4. 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.4. Since draft-ietf-httpbis-priority-05 | B.5. 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.5. Since draft-ietf-httpbis-priority-04 | B.6. 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.6. Since draft-ietf-httpbis-priority-03 | B.7. 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.7. Since draft-ietf-httpbis-priority-02 | B.8. 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 Parameters registry (#1371) | |||
| B.8. Since draft-ietf-httpbis-priority-01 | B.9. 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.9. Since draft-ietf-httpbis-priority-00 | B.10. 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.10. Since draft-kazuho-httpbis-priority-04 | B.11. 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.11. Since draft-kazuho-httpbis-priority-03 | B.12. 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.12. Since draft-kazuho-httpbis-priority-02 | B.13. 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.13. Since draft-kazuho-httpbis-priority-01 | B.14. Since draft-kazuho-httpbis-priority-01 | |||
| * Explain how reprioritization might be supported. | * Explain how reprioritization might be supported. | |||
| B.14. Since draft-kazuho-httpbis-priority-00 | B.15. 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. 41 change blocks. | ||||
| 116 lines changed or deleted | 106 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/ | ||||