| draft-ietf-quic-http-28.txt | draft-ietf-quic-http-29.txt | |||
|---|---|---|---|---|
| QUIC M. Bishop, Ed. | QUIC M. Bishop, Ed. | |||
| Internet-Draft Akamai | Internet-Draft Akamai | |||
| Intended status: Standards Track 20 May 2020 | Intended status: Standards Track 9 June 2020 | |||
| Expires: 21 November 2020 | Expires: 11 December 2020 | |||
| Hypertext Transfer Protocol Version 3 (HTTP/3) | Hypertext Transfer Protocol Version 3 (HTTP/3) | |||
| draft-ietf-quic-http-28 | draft-ietf-quic-http-29 | |||
| Abstract | Abstract | |||
| The QUIC transport protocol has several features that are desirable | The QUIC transport protocol has several features that are desirable | |||
| in a transport for HTTP, such as stream multiplexing, per-stream flow | in a transport for HTTP, such as stream multiplexing, per-stream flow | |||
| control, and low-latency connection establishment. This document | control, and low-latency connection establishment. This document | |||
| describes a mapping of HTTP semantics over QUIC. This document also | describes a mapping of HTTP semantics over QUIC. This document also | |||
| identifies HTTP/2 features that are subsumed by QUIC, and describes | identifies HTTP/2 features that are subsumed by QUIC, and describes | |||
| how HTTP/2 extensions can be ported to HTTP/3. | how HTTP/2 extensions can be ported to HTTP/3. | |||
| skipping to change at page 1, line 46 ¶ | skipping to change at page 1, line 46 ¶ | |||
| 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 21 November 2020. | This Internet-Draft will expire on 11 December 2020. | |||
| Copyright Notice | Copyright Notice | |||
| Copyright (c) 2020 IETF Trust and the persons identified as the | Copyright (c) 2020 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 Simplified BSD License text | |||
| as described in Section 4.e of the Trust Legal Provisions and are | as 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 Simplified BSD License. | |||
| Table of Contents | Table of Contents | |||
| 1. Introduction . . . . . . . . . . . . . . . . . . . . . . . . 4 | 1. Introduction . . . . . . . . . . . . . . . . . . . . . . . . 4 | |||
| 1.1. Prior versions of HTTP . . . . . . . . . . . . . . . . . 4 | 1.1. Prior versions of HTTP . . . . . . . . . . . . . . . . . 5 | |||
| 1.2. Delegation to QUIC . . . . . . . . . . . . . . . . . . . 5 | 1.2. Delegation to QUIC . . . . . . . . . . . . . . . . . . . 5 | |||
| 2. HTTP/3 Protocol Overview . . . . . . . . . . . . . . . . . . 5 | 2. HTTP/3 Protocol Overview . . . . . . . . . . . . . . . . . . 5 | |||
| 2.1. Document Organization . . . . . . . . . . . . . . . . . . 6 | 2.1. Document Organization . . . . . . . . . . . . . . . . . . 6 | |||
| 2.2. Conventions and Terminology . . . . . . . . . . . . . . . 7 | 2.2. Conventions and Terminology . . . . . . . . . . . . . . . 7 | |||
| 3. Connection Setup and Management . . . . . . . . . . . . . . . 8 | 3. Connection Setup and Management . . . . . . . . . . . . . . . 8 | |||
| 3.1. Draft Version Identification . . . . . . . . . . . . . . 8 | 3.1. Draft Version Identification . . . . . . . . . . . . . . 8 | |||
| 3.2. Discovering an HTTP/3 Endpoint . . . . . . . . . . . . . 9 | 3.2. Discovering an HTTP/3 Endpoint . . . . . . . . . . . . . 9 | |||
| 3.2.1. HTTP Alternative Services . . . . . . . . . . . . . . 9 | 3.2.1. HTTP Alternative Services . . . . . . . . . . . . . . 10 | |||
| 3.2.2. Other Schemes . . . . . . . . . . . . . . . . . . . . 10 | 3.2.2. Other Schemes . . . . . . . . . . . . . . . . . . . . 10 | |||
| 3.3. Connection Establishment . . . . . . . . . . . . . . . . 10 | 3.3. Connection Establishment . . . . . . . . . . . . . . . . 10 | |||
| 3.4. Connection Reuse . . . . . . . . . . . . . . . . . . . . 11 | 3.4. Connection Reuse . . . . . . . . . . . . . . . . . . . . 11 | |||
| 4. HTTP Request Lifecycle . . . . . . . . . . . . . . . . . . . 12 | 4. HTTP Request Lifecycle . . . . . . . . . . . . . . . . . . . 12 | |||
| 4.1. HTTP Message Exchanges . . . . . . . . . . . . . . . . . 12 | 4.1. HTTP Message Exchanges . . . . . . . . . . . . . . . . . 12 | |||
| 4.1.1. Field Formatting and Compression . . . . . . . . . . 13 | 4.1.1. Field Formatting and Compression . . . . . . . . . . 14 | |||
| 4.1.2. Request Cancellation and Rejection . . . . . . . . . 17 | 4.1.2. Request Cancellation and Rejection . . . . . . . . . 17 | |||
| 4.1.3. Malformed Requests and Responses . . . . . . . . . . 18 | 4.1.3. Malformed Requests and Responses . . . . . . . . . . 18 | |||
| 4.2. The CONNECT Method . . . . . . . . . . . . . . . . . . . 18 | 4.2. The CONNECT Method . . . . . . . . . . . . . . . . . . . 19 | |||
| 4.3. HTTP Upgrade . . . . . . . . . . . . . . . . . . . . . . 20 | 4.3. HTTP Upgrade . . . . . . . . . . . . . . . . . . . . . . 20 | |||
| 4.4. Server Push . . . . . . . . . . . . . . . . . . . . . . . 20 | 4.4. Server Push . . . . . . . . . . . . . . . . . . . . . . . 21 | |||
| 5. Connection Closure . . . . . . . . . . . . . . . . . . . . . 22 | 5. Connection Closure . . . . . . . . . . . . . . . . . . . . . 23 | |||
| 5.1. Idle Connections . . . . . . . . . . . . . . . . . . . . 22 | 5.1. Idle Connections . . . . . . . . . . . . . . . . . . . . 23 | |||
| 5.2. Connection Shutdown . . . . . . . . . . . . . . . . . . . 23 | 5.2. Connection Shutdown . . . . . . . . . . . . . . . . . . . 23 | |||
| 5.3. Immediate Application Closure . . . . . . . . . . . . . . 25 | 5.3. Immediate Application Closure . . . . . . . . . . . . . . 25 | |||
| 5.4. Transport Closure . . . . . . . . . . . . . . . . . . . . 25 | 5.4. Transport Closure . . . . . . . . . . . . . . . . . . . . 26 | |||
| 6. Stream Mapping and Usage . . . . . . . . . . . . . . . . . . 25 | 6. Stream Mapping and Usage . . . . . . . . . . . . . . . . . . 26 | |||
| 6.1. Bidirectional Streams . . . . . . . . . . . . . . . . . . 26 | 6.1. Bidirectional Streams . . . . . . . . . . . . . . . . . . 26 | |||
| 6.2. Unidirectional Streams . . . . . . . . . . . . . . . . . 26 | 6.2. Unidirectional Streams . . . . . . . . . . . . . . . . . 27 | |||
| 6.2.1. Control Streams . . . . . . . . . . . . . . . . . . . 27 | 6.2.1. Control Streams . . . . . . . . . . . . . . . . . . . 28 | |||
| 6.2.2. Push Streams . . . . . . . . . . . . . . . . . . . . 28 | 6.2.2. Push Streams . . . . . . . . . . . . . . . . . . . . 29 | |||
| 6.2.3. Reserved Stream Types . . . . . . . . . . . . . . . . 28 | 6.2.3. Reserved Stream Types . . . . . . . . . . . . . . . . 29 | |||
| 7. HTTP Framing Layer . . . . . . . . . . . . . . . . . . . . . 29 | 7. HTTP Framing Layer . . . . . . . . . . . . . . . . . . . . . 30 | |||
| 7.1. Frame Layout . . . . . . . . . . . . . . . . . . . . . . 30 | 7.1. Frame Layout . . . . . . . . . . . . . . . . . . . . . . 31 | |||
| 7.2. Frame Definitions . . . . . . . . . . . . . . . . . . . . 30 | 7.2. Frame Definitions . . . . . . . . . . . . . . . . . . . . 31 | |||
| 7.2.1. DATA . . . . . . . . . . . . . . . . . . . . . . . . 30 | 7.2.1. DATA . . . . . . . . . . . . . . . . . . . . . . . . 31 | |||
| 7.2.2. HEADERS . . . . . . . . . . . . . . . . . . . . . . . 31 | 7.2.2. HEADERS . . . . . . . . . . . . . . . . . . . . . . . 32 | |||
| 7.2.3. CANCEL_PUSH . . . . . . . . . . . . . . . . . . . . . 31 | 7.2.3. CANCEL_PUSH . . . . . . . . . . . . . . . . . . . . . 32 | |||
| 7.2.4. SETTINGS . . . . . . . . . . . . . . . . . . . . . . 32 | 7.2.4. SETTINGS . . . . . . . . . . . . . . . . . . . . . . 33 | |||
| 7.2.5. PUSH_PROMISE . . . . . . . . . . . . . . . . . . . . 35 | 7.2.5. PUSH_PROMISE . . . . . . . . . . . . . . . . . . . . 36 | |||
| 7.2.6. GOAWAY . . . . . . . . . . . . . . . . . . . . . . . 37 | 7.2.6. GOAWAY . . . . . . . . . . . . . . . . . . . . . . . 38 | |||
| 7.2.7. MAX_PUSH_ID . . . . . . . . . . . . . . . . . . . . . 37 | 7.2.7. MAX_PUSH_ID . . . . . . . . . . . . . . . . . . . . . 38 | |||
| 7.2.8. Reserved Frame Types . . . . . . . . . . . . . . . . 38 | 7.2.8. Reserved Frame Types . . . . . . . . . . . . . . . . 39 | |||
| 8. Error Handling . . . . . . . . . . . . . . . . . . . . . . . 38 | 8. Error Handling . . . . . . . . . . . . . . . . . . . . . . . 39 | |||
| 8.1. HTTP/3 Error Codes . . . . . . . . . . . . . . . . . . . 39 | 8.1. HTTP/3 Error Codes . . . . . . . . . . . . . . . . . . . 40 | |||
| 9. Extensions to HTTP/3 . . . . . . . . . . . . . . . . . . . . 40 | 9. Extensions to HTTP/3 . . . . . . . . . . . . . . . . . . . . 41 | |||
| 10. Security Considerations . . . . . . . . . . . . . . . . . . . 41 | 10. Security Considerations . . . . . . . . . . . . . . . . . . . 42 | |||
| 10.1. Server Authority . . . . . . . . . . . . . . . . . . . . 41 | 10.1. Server Authority . . . . . . . . . . . . . . . . . . . . 42 | |||
| 10.2. Cross-Protocol Attacks . . . . . . . . . . . . . . . . . 41 | 10.2. Cross-Protocol Attacks . . . . . . . . . . . . . . . . . 42 | |||
| 10.3. Intermediary Encapsulation Attacks . . . . . . . . . . . 42 | 10.3. Intermediary Encapsulation Attacks . . . . . . . . . . . 43 | |||
| 10.4. Cacheability of Pushed Responses . . . . . . . . . . . . 42 | 10.4. Cacheability of Pushed Responses . . . . . . . . . . . . 43 | |||
| 10.5. Denial-of-Service Considerations . . . . . . . . . . . . 42 | 10.5. Denial-of-Service Considerations . . . . . . . . . . . . 43 | |||
| 10.5.1. Limits on Field Section Size . . . . . . . . . . . . 43 | 10.5.1. Limits on Field Section Size . . . . . . . . . . . . 44 | |||
| 10.5.2. CONNECT Issues . . . . . . . . . . . . . . . . . . . 44 | 10.5.2. CONNECT Issues . . . . . . . . . . . . . . . . . . . 45 | |||
| 10.6. Use of Compression . . . . . . . . . . . . . . . . . . . 44 | 10.6. Use of Compression . . . . . . . . . . . . . . . . . . . 45 | |||
| 10.7. Padding and Traffic Analysis . . . . . . . . . . . . . . 45 | 10.7. Padding and Traffic Analysis . . . . . . . . . . . . . . 46 | |||
| 10.8. Frame Parsing . . . . . . . . . . . . . . . . . . . . . 45 | 10.8. Frame Parsing . . . . . . . . . . . . . . . . . . . . . 46 | |||
| 10.9. Early Data . . . . . . . . . . . . . . . . . . . . . . . 45 | 10.9. Early Data . . . . . . . . . . . . . . . . . . . . . . . 46 | |||
| 10.10. Migration . . . . . . . . . . . . . . . . . . . . . . . 46 | 10.10. Migration . . . . . . . . . . . . . . . . . . . . . . . 47 | |||
| 10.11. Privacy Considerations . . . . . . . . . . . . . . . . . 46 | 10.11. Privacy Considerations . . . . . . . . . . . . . . . . . 47 | |||
| 11. IANA Considerations . . . . . . . . . . . . . . . . . . . . . 46 | 11. IANA Considerations . . . . . . . . . . . . . . . . . . . . . 47 | |||
| 11.1. Registration of HTTP/3 Identification String . . . . . . 46 | 11.1. Registration of HTTP/3 Identification String . . . . . . 47 | |||
| 11.2. New Registries . . . . . . . . . . . . . . . . . . . . . 47 | 11.2. New Registries . . . . . . . . . . . . . . . . . . . . . 48 | |||
| 11.2.1. Frame Types . . . . . . . . . . . . . . . . . . . . 47 | 11.2.1. Frame Types . . . . . . . . . . . . . . . . . . . . 48 | |||
| 11.2.2. Settings Parameters . . . . . . . . . . . . . . . . 48 | 11.2.2. Settings Parameters . . . . . . . . . . . . . . . . 49 | |||
| 11.2.3. Error Codes . . . . . . . . . . . . . . . . . . . . 49 | 11.2.3. Error Codes . . . . . . . . . . . . . . . . . . . . 50 | |||
| 11.2.4. Stream Types . . . . . . . . . . . . . . . . . . . . 52 | 11.2.4. Stream Types . . . . . . . . . . . . . . . . . . . . 53 | |||
| 12. References . . . . . . . . . . . . . . . . . . . . . . . . . 52 | 12. References . . . . . . . . . . . . . . . . . . . . . . . . . 53 | |||
| 12.1. Normative References . . . . . . . . . . . . . . . . . . 52 | 12.1. Normative References . . . . . . . . . . . . . . . . . . 53 | |||
| 12.2. Informative References . . . . . . . . . . . . . . . . . 54 | 12.2. Informative References . . . . . . . . . . . . . . . . . 55 | |||
| Appendix A. Considerations for Transitioning from HTTP/2 . . . . 55 | Appendix A. Considerations for Transitioning from HTTP/2 . . . . 56 | |||
| A.1. Streams . . . . . . . . . . . . . . . . . . . . . . . . . 56 | A.1. Streams . . . . . . . . . . . . . . . . . . . . . . . . . 57 | |||
| A.2. HTTP Frame Types . . . . . . . . . . . . . . . . . . . . 56 | A.2. HTTP Frame Types . . . . . . . . . . . . . . . . . . . . 57 | |||
| A.2.1. Prioritization Differences . . . . . . . . . . . . . 57 | A.2.1. Prioritization Differences . . . . . . . . . . . . . 58 | |||
| A.2.2. Field Compression Differences . . . . . . . . . . . . 57 | A.2.2. Field Compression Differences . . . . . . . . . . . . 58 | |||
| A.2.3. Guidance for New Frame Type Definitions . . . . . . . 57 | A.2.3. Guidance for New Frame Type Definitions . . . . . . . 58 | |||
| A.2.4. Mapping Between HTTP/2 and HTTP/3 Frame Types . . . . 58 | A.2.4. Mapping Between HTTP/2 and HTTP/3 Frame Types . . . . 59 | |||
| A.3. HTTP/2 SETTINGS Parameters . . . . . . . . . . . . . . . 59 | A.3. HTTP/2 SETTINGS Parameters . . . . . . . . . . . . . . . 60 | |||
| A.4. HTTP/2 Error Codes . . . . . . . . . . . . . . . . . . . 60 | A.4. HTTP/2 Error Codes . . . . . . . . . . . . . . . . . . . 61 | |||
| A.4.1. Mapping Between HTTP/2 and HTTP/3 Errors . . . . . . 61 | A.4.1. Mapping Between HTTP/2 and HTTP/3 Errors . . . . . . 62 | |||
| Appendix B. Change Log . . . . . . . . . . . . . . . . . . . . . 61 | Appendix B. Change Log . . . . . . . . . . . . . . . . . . . . . 62 | |||
| B.1. Since draft-ietf-quic-http-27 . . . . . . . . . . . . . . 62 | B.1. Since draft-ietf-quic-http-28 . . . . . . . . . . . . . . 63 | |||
| B.2. Since draft-ietf-quic-http-26 . . . . . . . . . . . . . . 62 | B.2. Since draft-ietf-quic-http-27 . . . . . . . . . . . . . . 63 | |||
| B.3. Since draft-ietf-quic-http-25 . . . . . . . . . . . . . . 62 | B.3. Since draft-ietf-quic-http-26 . . . . . . . . . . . . . . 63 | |||
| B.4. Since draft-ietf-quic-http-24 . . . . . . . . . . . . . . 62 | B.4. Since draft-ietf-quic-http-25 . . . . . . . . . . . . . . 63 | |||
| B.5. Since draft-ietf-quic-http-23 . . . . . . . . . . . . . . 62 | B.5. Since draft-ietf-quic-http-24 . . . . . . . . . . . . . . 63 | |||
| B.6. Since draft-ietf-quic-http-22 . . . . . . . . . . . . . . 62 | B.6. Since draft-ietf-quic-http-23 . . . . . . . . . . . . . . 63 | |||
| B.7. Since draft-ietf-quic-http-21 . . . . . . . . . . . . . . 63 | B.7. Since draft-ietf-quic-http-22 . . . . . . . . . . . . . . 64 | |||
| B.8. Since draft-ietf-quic-http-20 . . . . . . . . . . . . . . 63 | B.8. Since draft-ietf-quic-http-21 . . . . . . . . . . . . . . 64 | |||
| B.9. Since draft-ietf-quic-http-19 . . . . . . . . . . . . . . 64 | B.9. Since draft-ietf-quic-http-20 . . . . . . . . . . . . . . 65 | |||
| B.10. Since draft-ietf-quic-http-18 . . . . . . . . . . . . . . 64 | B.10. Since draft-ietf-quic-http-19 . . . . . . . . . . . . . . 65 | |||
| B.11. Since draft-ietf-quic-http-17 . . . . . . . . . . . . . . 65 | B.11. Since draft-ietf-quic-http-18 . . . . . . . . . . . . . . 66 | |||
| B.12. Since draft-ietf-quic-http-16 . . . . . . . . . . . . . . 65 | B.12. Since draft-ietf-quic-http-17 . . . . . . . . . . . . . . 66 | |||
| B.13. Since draft-ietf-quic-http-15 . . . . . . . . . . . . . . 66 | B.13. Since draft-ietf-quic-http-16 . . . . . . . . . . . . . . 66 | |||
| B.14. Since draft-ietf-quic-http-14 . . . . . . . . . . . . . . 66 | B.14. Since draft-ietf-quic-http-15 . . . . . . . . . . . . . . 67 | |||
| B.15. Since draft-ietf-quic-http-13 . . . . . . . . . . . . . . 66 | B.15. Since draft-ietf-quic-http-14 . . . . . . . . . . . . . . 67 | |||
| B.16. Since draft-ietf-quic-http-12 . . . . . . . . . . . . . . 66 | B.16. Since draft-ietf-quic-http-13 . . . . . . . . . . . . . . 67 | |||
| B.17. Since draft-ietf-quic-http-11 . . . . . . . . . . . . . . 67 | B.17. Since draft-ietf-quic-http-12 . . . . . . . . . . . . . . 67 | |||
| B.18. Since draft-ietf-quic-http-10 . . . . . . . . . . . . . . 67 | B.18. Since draft-ietf-quic-http-11 . . . . . . . . . . . . . . 68 | |||
| B.19. Since draft-ietf-quic-http-09 . . . . . . . . . . . . . . 67 | B.19. Since draft-ietf-quic-http-10 . . . . . . . . . . . . . . 68 | |||
| B.20. Since draft-ietf-quic-http-08 . . . . . . . . . . . . . . 67 | B.20. Since draft-ietf-quic-http-09 . . . . . . . . . . . . . . 68 | |||
| B.21. Since draft-ietf-quic-http-07 . . . . . . . . . . . . . . 67 | B.21. Since draft-ietf-quic-http-08 . . . . . . . . . . . . . . 68 | |||
| B.22. Since draft-ietf-quic-http-06 . . . . . . . . . . . . . . 67 | B.22. Since draft-ietf-quic-http-07 . . . . . . . . . . . . . . 68 | |||
| B.23. Since draft-ietf-quic-http-05 . . . . . . . . . . . . . . 67 | B.23. Since draft-ietf-quic-http-06 . . . . . . . . . . . . . . 68 | |||
| B.24. Since draft-ietf-quic-http-04 . . . . . . . . . . . . . . 67 | B.24. Since draft-ietf-quic-http-05 . . . . . . . . . . . . . . 68 | |||
| B.25. Since draft-ietf-quic-http-03 . . . . . . . . . . . . . . 68 | B.25. Since draft-ietf-quic-http-04 . . . . . . . . . . . . . . 69 | |||
| B.26. Since draft-ietf-quic-http-02 . . . . . . . . . . . . . . 68 | B.26. Since draft-ietf-quic-http-03 . . . . . . . . . . . . . . 69 | |||
| B.27. Since draft-ietf-quic-http-01 . . . . . . . . . . . . . . 68 | B.27. Since draft-ietf-quic-http-02 . . . . . . . . . . . . . . 69 | |||
| B.28. Since draft-ietf-quic-http-00 . . . . . . . . . . . . . . 69 | B.28. Since draft-ietf-quic-http-01 . . . . . . . . . . . . . . 69 | |||
| B.29. Since draft-shade-quic-http2-mapping-00 . . . . . . . . . 69 | B.29. Since draft-ietf-quic-http-00 . . . . . . . . . . . . . . 70 | |||
| Acknowledgements . . . . . . . . . . . . . . . . . . . . . . . . 69 | B.30. Since draft-shade-quic-http2-mapping-00 . . . . . . . . . 70 | |||
| Author's Address . . . . . . . . . . . . . . . . . . . . . . . . 70 | Acknowledgements . . . . . . . . . . . . . . . . . . . . . . . . 70 | |||
| Author's Address . . . . . . . . . . . . . . . . . . . . . . . . 72 | ||||
| 1. Introduction | 1. Introduction | |||
| HTTP semantics [SEMANTICS] are used for a broad range of services on | HTTP semantics [SEMANTICS] are used for a broad range of services on | |||
| the Internet. These semantics have most commonly been used with two | the Internet. These semantics have most commonly been used with two | |||
| different TCP mappings, HTTP/1.1 and HTTP/2. HTTP/3 supports the | different TCP mappings, HTTP/1.1 and HTTP/2. HTTP/3 supports the | |||
| same semantics over a new transport protocol, QUIC. | same semantics over a new transport protocol, QUIC. | |||
| 1.1. Prior versions of HTTP | 1.1. Prior versions of HTTP | |||
| skipping to change at page 19, line 17 ¶ | skipping to change at page 19, line 42 ¶ | |||
| method is used to establish a tunnel over a single stream. | method is used to establish a tunnel over a single stream. | |||
| A CONNECT request MUST be constructed as follows: | A CONNECT request MUST be constructed as follows: | |||
| * The ":method" pseudo-header field is set to "CONNECT" | * The ":method" pseudo-header field is set to "CONNECT" | |||
| * The ":scheme" and ":path" pseudo-header fields are omitted | * The ":scheme" and ":path" pseudo-header fields are omitted | |||
| * The ":authority" pseudo-header field contains the host and port to | * The ":authority" pseudo-header field contains the host and port to | |||
| connect to (equivalent to the authority-form of the request-target | connect to (equivalent to the authority-form of the request-target | |||
| of CONNECT requests; see Section 5.3 of [HTTP11]) | of CONNECT requests; see Section 3.2.3 of [HTTP11]) | |||
| The request stream remains open at the end of the request to carry | The request stream remains open at the end of the request to carry | |||
| the data to be transferred. A CONNECT request that does not conform | the data to be transferred. A CONNECT request that does not conform | |||
| to these restrictions is malformed; see Section 4.1.3. | to these restrictions is malformed; see Section 4.1.3. | |||
| A proxy that supports CONNECT establishes a TCP connection | A proxy that supports CONNECT establishes a TCP connection | |||
| ([RFC0793]) to the server identified in the ":authority" pseudo- | ([RFC0793]) to the server identified in the ":authority" pseudo- | |||
| header field. Once this connection is successfully established, the | header field. Once this connection is successfully established, the | |||
| proxy sends a HEADERS frame containing a 2xx series status code to | proxy sends a HEADERS frame containing a 2xx series status code to | |||
| the client, as defined in Section 9.3 of [SEMANTICS]. | the client, as defined in Section 9.3 of [SEMANTICS]. | |||
| skipping to change at page 22, line 34 ¶ | skipping to change at page 23, line 23 ¶ | |||
| Each QUIC endpoint declares an idle timeout during the handshake. If | Each QUIC endpoint declares an idle timeout during the handshake. If | |||
| the connection remains idle (no packets received) for longer than | the connection remains idle (no packets received) for longer than | |||
| this duration, the peer will assume that the connection has been | this duration, the peer will assume that the connection has been | |||
| closed. HTTP/3 implementations will need to open a new connection | closed. HTTP/3 implementations will need to open a new connection | |||
| for new requests if the existing connection has been idle for longer | for new requests if the existing connection has been idle for longer | |||
| than the server's advertised idle timeout, and SHOULD do so if | than the server's advertised idle timeout, and SHOULD do so if | |||
| approaching the idle timeout. | approaching the idle timeout. | |||
| HTTP clients are expected to request that the transport keep | HTTP clients are expected to request that the transport keep | |||
| connections open while there are responses outstanding for requests | connections open while there are responses outstanding for requests | |||
| or server pushes, as described in Section 19.2 of [QUIC-TRANSPORT]. | or server pushes, as described in Section 10.2.2 of [QUIC-TRANSPORT]. | |||
| If the client is not expecting a response from the server, allowing | If the client is not expecting a response from the server, allowing | |||
| an idle connection to time out is preferred over expending effort | an idle connection to time out is preferred over expending effort | |||
| maintaining a connection that might not be needed. A gateway MAY | maintaining a connection that might not be needed. A gateway MAY | |||
| maintain connections in anticipation of need rather than incur the | maintain connections in anticipation of need rather than incur the | |||
| latency cost of connection establishment to servers. Servers SHOULD | latency cost of connection establishment to servers. Servers SHOULD | |||
| NOT actively keep connections open. | NOT actively keep connections open. | |||
| 5.2. Connection Shutdown | 5.2. Connection Shutdown | |||
| Even when a connection is not idle, either endpoint can decide to | Even when a connection is not idle, either endpoint can decide to | |||
| skipping to change at page 24, line 15 ¶ | skipping to change at page 24, line 40 ¶ | |||
| Servers SHOULD send a GOAWAY frame when the closing of a connection | Servers SHOULD send a GOAWAY frame when the closing of a connection | |||
| is known in advance, even if the advance notice is small, so that the | is known in advance, even if the advance notice is small, so that the | |||
| remote peer can know whether a request has been partially processed | remote peer can know whether a request has been partially processed | |||
| or not. For example, if an HTTP client sends a POST at the same time | or not. For example, if an HTTP client sends a POST at the same time | |||
| that a server closes a QUIC connection, the client cannot know if the | that a server closes a QUIC connection, the client cannot know if the | |||
| server started to process that POST request if the server does not | server started to process that POST request if the server does not | |||
| send a GOAWAY frame to indicate what streams it might have acted on. | send a GOAWAY frame to indicate what streams it might have acted on. | |||
| A client that is unable to retry requests loses all requests that are | A client that is unable to retry requests loses all requests that are | |||
| in flight when the server closes the connection. An endpoint MAY | in flight when the server closes the connection. An endpoint MAY | |||
| send multiple GOAWAY frames indicating different identifiers, but | send multiple GOAWAY frames indicating different identifiers, but the | |||
| MUST NOT increase the identifier value they send, since clients might | identifier in each frame MUST NOT be greater than the identifier in | |||
| already have retried unprocessed requests on another connection. | any previous frame, since clients might already have retried | |||
| unprocessed requests on another connection. Receiving a GOAWAY | ||||
| containing a larger identifier than previously received MUST be | ||||
| treated as a connection error of type H3_ID_ERROR. | ||||
| An endpoint that is attempting to gracefully shut down a connection | An endpoint that is attempting to gracefully shut down a connection | |||
| can send a GOAWAY frame with a value set to the maximum possible | can send a GOAWAY frame with a value set to the maximum possible | |||
| value (2^62-4 for servers, 2^62-1 for clients). This ensures that | value (2^62-4 for servers, 2^62-1 for clients). This ensures that | |||
| the peer stops creating new requests or pushes. After allowing time | the peer stops creating new requests or pushes. After allowing time | |||
| for any in-flight requests or pushes to arrive, the endpoint can send | for any in-flight requests or pushes to arrive, the endpoint can send | |||
| another GOAWAY frame indicating which requests or pushes it might | another GOAWAY frame indicating which requests or pushes it might | |||
| accept before the end of the connection. This ensures that a | accept before the end of the connection. This ensures that a | |||
| connection can be cleanly shut down without losing requests. | connection can be cleanly shut down without losing requests. | |||
| skipping to change at page 32, line 6 ¶ | skipping to change at page 32, line 48 ¶ | |||
| When a client sends CANCEL_PUSH, it is indicating that it does not | When a client sends CANCEL_PUSH, it is indicating that it does not | |||
| wish to receive the promised resource. The server SHOULD abort | wish to receive the promised resource. The server SHOULD abort | |||
| sending the resource, but the mechanism to do so depends on the state | sending the resource, but the mechanism to do so depends on the state | |||
| of the corresponding push stream. If the server has not yet created | of the corresponding push stream. If the server has not yet created | |||
| a push stream, it does not create one. If the push stream is open, | a push stream, it does not create one. If the push stream is open, | |||
| the server SHOULD abruptly terminate that stream. If the push stream | the server SHOULD abruptly terminate that stream. If the push stream | |||
| has already ended, the server MAY still abruptly terminate the stream | has already ended, the server MAY still abruptly terminate the stream | |||
| or MAY take no action. | or MAY take no action. | |||
| When a server sends CANCEL_PUSH, it is indicating that it will not be | When a server sends CANCEL_PUSH, it is indicating that it will not be | |||
| fulfilling a promise and has not created a push stream. The client | fulfilling a promise. The client cannot expect the corresponding | |||
| should not expect the corresponding promise to be fulfilled. | promise to be fulfilled, unless it has already received and processed | |||
| the promised response. A server SHOULD send a CANCEL_PUSH even if it | ||||
| has opened the corresponding stream. | ||||
| Sending CANCEL_PUSH has no direct effect on the state of existing | Sending CANCEL_PUSH has no direct effect on the state of existing | |||
| push streams. A server SHOULD NOT send a CANCEL_PUSH when it has | push streams. A client SHOULD NOT send a CANCEL_PUSH when it has | |||
| already created a corresponding push stream, and a client SHOULD NOT | already received a corresponding push stream. A push stream could | |||
| send a CANCEL_PUSH when it has already received a corresponding push | arrive after a client has sent CANCEL_PUSH, because a server might | |||
| stream. If a push stream arrives after a client has sent | not have processed the CANCEL_PUSH. The client SHOULD abort reading | |||
| CANCEL_PUSH, this MAY be treated as a stream error of type | the stream with an error code of H3_REQUEST_CANCELLED. | |||
| H3_STREAM_CREATION_ERROR. | ||||
| A CANCEL_PUSH frame is sent on the control stream. Receiving a | A CANCEL_PUSH frame is sent on the control stream. Receiving a | |||
| CANCEL_PUSH frame on a stream other than the control stream MUST be | CANCEL_PUSH frame on a stream other than the control stream MUST be | |||
| treated as a connection error of type H3_FRAME_UNEXPECTED. | treated as a connection error of type H3_FRAME_UNEXPECTED. | |||
| CANCEL_PUSH Frame { | CANCEL_PUSH Frame { | |||
| Type (i) = 0x3, | Type (i) = 0x3, | |||
| Length (i), | Length (i), | |||
| Push ID (..), | Push ID (..), | |||
| } | } | |||
| skipping to change at page 53, line 7 ¶ | skipping to change at page 54, line 7 ¶ | |||
| 12. References | 12. References | |||
| 12.1. Normative References | 12.1. Normative References | |||
| [ALTSVC] Nottingham, M., McManus, P., and J. Reschke, "HTTP | [ALTSVC] Nottingham, M., McManus, P., and J. Reschke, "HTTP | |||
| Alternative Services", RFC 7838, DOI 10.17487/RFC7838, | Alternative Services", RFC 7838, DOI 10.17487/RFC7838, | |||
| April 2016, <https://www.rfc-editor.org/info/rfc7838>. | April 2016, <https://www.rfc-editor.org/info/rfc7838>. | |||
| [CACHING] Fielding, R., Nottingham, M., and J. Reschke, "HTTP | [CACHING] Fielding, R., Nottingham, M., and J. Reschke, "HTTP | |||
| Caching", Work in Progress, Internet-Draft, draft-ietf- | Caching", Work in Progress, Internet-Draft, draft-ietf- | |||
| httpbis-cache-07, 7 March 2020, <http://www.ietf.org/ | httpbis-cache-08, 26 May 2020, <http://www.ietf.org/ | |||
| internet-drafts/draft-ietf-httpbis-cache-07.txt>. | internet-drafts/draft-ietf-httpbis-cache-08.txt>. | |||
| [HTTP-REPLAY] | [HTTP-REPLAY] | |||
| Thomson, M., Nottingham, M., and W. Tarreau, "Using Early | Thomson, M., Nottingham, M., and W. Tarreau, "Using Early | |||
| Data in HTTP", RFC 8470, DOI 10.17487/RFC8470, September | Data in HTTP", RFC 8470, DOI 10.17487/RFC8470, September | |||
| 2018, <https://www.rfc-editor.org/info/rfc8470>. | 2018, <https://www.rfc-editor.org/info/rfc8470>. | |||
| [QPACK] Krasic, C., Bishop, M., and A. Frindell, Ed., "QPACK: | [QPACK] Krasic, C., Bishop, M., and A. Frindell, Ed., "QPACK: | |||
| Header Compression for HTTP over QUIC", Work in Progress, | Header Compression for HTTP over QUIC", Work in Progress, | |||
| Internet-Draft, draft-ietf-quic-qpack-15, 20 May 2020, | Internet-Draft, draft-ietf-quic-qpack-16, 9 June 2020, | |||
| <https://tools.ietf.org/html/draft-ietf-quic-qpack-15>. | <https://tools.ietf.org/html/draft-ietf-quic-qpack-16>. | |||
| [QUIC-TRANSPORT] | [QUIC-TRANSPORT] | |||
| Iyengar, J., Ed. and M. Thomson, Ed., "QUIC: A UDP-Based | Iyengar, J., Ed. and M. Thomson, Ed., "QUIC: A UDP-Based | |||
| Multiplexed and Secure Transport", Work in Progress, | Multiplexed and Secure Transport", Work in Progress, | |||
| Internet-Draft, draft-ietf-quic-transport-28, 20 May 2020, | Internet-Draft, draft-ietf-quic-transport-28, 9 June 2020, | |||
| <https://tools.ietf.org/html/draft-ietf-quic-transport- | <https://tools.ietf.org/html/draft-ietf-quic-transport- | |||
| 28>. | 28>. | |||
| [RFC0793] Postel, J., "Transmission Control Protocol", STD 7, | [RFC0793] Postel, J., "Transmission Control Protocol", STD 7, | |||
| RFC 793, DOI 10.17487/RFC0793, September 1981, | RFC 793, DOI 10.17487/RFC0793, September 1981, | |||
| <https://www.rfc-editor.org/info/rfc793>. | <https://www.rfc-editor.org/info/rfc793>. | |||
| [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, | |||
| skipping to change at page 54, line 32 ¶ | skipping to change at page 55, line 32 ¶ | |||
| HTTP/2", RFC 8164, DOI 10.17487/RFC8164, May 2017, | HTTP/2", RFC 8164, DOI 10.17487/RFC8164, May 2017, | |||
| <https://www.rfc-editor.org/info/rfc8164>. | <https://www.rfc-editor.org/info/rfc8164>. | |||
| [RFC8174] Leiba, B., "Ambiguity of Uppercase vs Lowercase in RFC | [RFC8174] Leiba, B., "Ambiguity of Uppercase vs Lowercase in RFC | |||
| 2119 Key Words", BCP 14, RFC 8174, DOI 10.17487/RFC8174, | 2119 Key Words", BCP 14, RFC 8174, DOI 10.17487/RFC8174, | |||
| May 2017, <https://www.rfc-editor.org/info/rfc8174>. | May 2017, <https://www.rfc-editor.org/info/rfc8174>. | |||
| [SEMANTICS] | [SEMANTICS] | |||
| Fielding, R., Nottingham, M., and J. Reschke, "HTTP | Fielding, R., Nottingham, M., and J. Reschke, "HTTP | |||
| Semantics", Work in Progress, Internet-Draft, draft-ietf- | Semantics", Work in Progress, Internet-Draft, draft-ietf- | |||
| httpbis-semantics-07, 7 March 2020, <http://www.ietf.org/ | httpbis-semantics-08, 26 May 2020, <http://www.ietf.org/ | |||
| internet-drafts/draft-ietf-httpbis-semantics-07.txt>. | internet-drafts/draft-ietf-httpbis-semantics-08.txt>. | |||
| 12.2. Informative References | 12.2. Informative References | |||
| [BREACH] Gluck, Y., Harris, N., and A. Prado, "BREACH: Reviving the | [BREACH] Gluck, Y., Harris, N., and A. Prado, "BREACH: Reviving the | |||
| CRIME Attack", July 2013, | CRIME Attack", July 2013, | |||
| <http://breachattack.com/resources/ | <http://breachattack.com/resources/ | |||
| BREACH%20-%20SSL,%20gone%20in%2030%20seconds.pdf>. | BREACH%20-%20SSL,%20gone%20in%2030%20seconds.pdf>. | |||
| [HPACK] Peon, R. and H. Ruellan, "HPACK: Header Compression for | [HPACK] Peon, R. and H. Ruellan, "HPACK: Header Compression for | |||
| HTTP/2", RFC 7541, DOI 10.17487/RFC7541, May 2015, | HTTP/2", RFC 7541, DOI 10.17487/RFC7541, May 2015, | |||
| <https://www.rfc-editor.org/info/rfc7541>. | <https://www.rfc-editor.org/info/rfc7541>. | |||
| [HTTP11] Fielding, R., Nottingham, M., and J. Reschke, "HTTP/1.1 | [HTTP11] Fielding, R., Nottingham, M., and J. Reschke, "HTTP/1.1 | |||
| Messaging", Work in Progress, Internet-Draft, draft-ietf- | Messaging", Work in Progress, Internet-Draft, draft-ietf- | |||
| httpbis-messaging-07, 7 March 2020, <http://www.ietf.org/ | httpbis-messaging-08, 26 May 2020, <http://www.ietf.org/ | |||
| internet-drafts/draft-ietf-httpbis-messaging-07.txt>. | internet-drafts/draft-ietf-httpbis-messaging-08.txt>. | |||
| [HTTP2] Belshe, M., Peon, R., and M. Thomson, Ed., "Hypertext | [HTTP2] 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/info/rfc7540>. | <https://www.rfc-editor.org/info/rfc7540>. | |||
| [RFC6585] Nottingham, M. and R. Fielding, "Additional HTTP Status | [RFC6585] Nottingham, M. and R. Fielding, "Additional HTTP Status | |||
| Codes", RFC 6585, DOI 10.17487/RFC6585, April 2012, | Codes", RFC 6585, DOI 10.17487/RFC6585, April 2012, | |||
| <https://www.rfc-editor.org/info/rfc6585>. | <https://www.rfc-editor.org/info/rfc6585>. | |||
| skipping to change at page 62, line 5 ¶ | skipping to change at page 63, line 5 ¶ | |||
| inappropriate or unknown error codes for the target version. An | inappropriate or unknown error codes for the target version. An | |||
| intermediary is permitted to promote stream errors to connection | intermediary is permitted to promote stream errors to connection | |||
| errors but they should be aware of the cost to the connection for | errors but they should be aware of the cost to the connection for | |||
| what might be a temporary or intermittent error. | what might be a temporary or intermittent error. | |||
| Appendix B. Change Log | Appendix B. Change Log | |||
| *RFC Editor's Note:* Please remove this section prior to | *RFC Editor's Note:* Please remove this section prior to | |||
| publication of a final version of this document. | publication of a final version of this document. | |||
| B.1. Since draft-ietf-quic-http-27 | B.1. Since draft-ietf-quic-http-28 | |||
| * CANCEL_PUSH is recommended even when the stream is reset (#3698, | ||||
| #3700) | ||||
| * Use H3_ID_ERROR when GOAWAY contains a larger identifier (#3631, | ||||
| #3634) | ||||
| B.2. Since draft-ietf-quic-http-27 | ||||
| * Updated text to refer to latest HTTP revisions | * Updated text to refer to latest HTTP revisions | |||
| * Use the HTTP definition of authority for establishing and | * Use the HTTP definition of authority for establishing and | |||
| coalescing connections (#253, #2223, #3558) | coalescing connections (#253, #2223, #3558) | |||
| * Define use of GOAWAY from both endpoints (#2632, #3129) | * Define use of GOAWAY from both endpoints (#2632, #3129) | |||
| * Require either :authority or Host if the URI scheme has a | * Require either :authority or Host if the URI scheme has a | |||
| mandatory authority component (#3408, #3475) | mandatory authority component (#3408, #3475) | |||
| B.2. Since draft-ietf-quic-http-26 | B.3. Since draft-ietf-quic-http-26 | |||
| * No changes | * No changes | |||
| B.3. Since draft-ietf-quic-http-25 | B.4. Since draft-ietf-quic-http-25 | |||
| * Require QUICv1 for HTTP/3 (#3117, #3323) | * Require QUICv1 for HTTP/3 (#3117, #3323) | |||
| * Remove DUPLICATE_PUSH and allow duplicate PUSH_PROMISE (#3275, | * Remove DUPLICATE_PUSH and allow duplicate PUSH_PROMISE (#3275, | |||
| #3309) | #3309) | |||
| * Clarify the definition of "malformed" (#3352, #3345) | * Clarify the definition of "malformed" (#3352, #3345) | |||
| B.4. Since draft-ietf-quic-http-24 | B.5. Since draft-ietf-quic-http-24 | |||
| * Removed H3_EARLY_RESPONSE error code; H3_NO_ERROR is recommended | * Removed H3_EARLY_RESPONSE error code; H3_NO_ERROR is recommended | |||
| instead (#3130,#3208) | instead (#3130,#3208) | |||
| * Unknown error codes are equivalent to H3_NO_ERROR (#3276,#3331) | * Unknown error codes are equivalent to H3_NO_ERROR (#3276,#3331) | |||
| * Some error codes are reserved for greasing (#3325,#3360) | * Some error codes are reserved for greasing (#3325,#3360) | |||
| B.5. Since draft-ietf-quic-http-23 | B.6. Since draft-ietf-quic-http-23 | |||
| * Removed "quic" Alt-Svc parameter (#3061,#3118) | * Removed "quic" Alt-Svc parameter (#3061,#3118) | |||
| * Clients need not persist unknown settings for use in 0-RTT | * Clients need not persist unknown settings for use in 0-RTT | |||
| (#3110,#3113) | (#3110,#3113) | |||
| * Clarify error cases around CANCEL_PUSH (#2819,#3083) | * Clarify error cases around CANCEL_PUSH (#2819,#3083) | |||
| B.6. Since draft-ietf-quic-http-22 | B.7. Since draft-ietf-quic-http-22 | |||
| * Removed priority signaling (#2922,#2924) | * Removed priority signaling (#2922,#2924) | |||
| * Further changes to error codes (#2662,#2551): | * Further changes to error codes (#2662,#2551): | |||
| - Error codes renumbered | - Error codes renumbered | |||
| - HTTP_MALFORMED_FRAME replaced by HTTP_FRAME_ERROR, | - HTTP_MALFORMED_FRAME replaced by HTTP_FRAME_ERROR, | |||
| HTTP_ID_ERROR, and others | HTTP_ID_ERROR, and others | |||
| skipping to change at page 63, line 41 ¶ | skipping to change at page 64, line 49 ¶ | |||
| * Clarify that Upgrade and the 101 status code are prohibited | * Clarify that Upgrade and the 101 status code are prohibited | |||
| (#2898,#2889) | (#2898,#2889) | |||
| * Clarify that frame types reserved for greasing can occur on any | * Clarify that frame types reserved for greasing can occur on any | |||
| stream, but frame types reserved due to HTTP/2 correspondence are | stream, but frame types reserved due to HTTP/2 correspondence are | |||
| prohibited (#2997,#2692,#2693) | prohibited (#2997,#2692,#2693) | |||
| * Unknown error codes cannot be treated as errors (#2998,#2816) | * Unknown error codes cannot be treated as errors (#2998,#2816) | |||
| B.7. Since draft-ietf-quic-http-21 | B.8. Since draft-ietf-quic-http-21 | |||
| No changes | No changes | |||
| B.8. Since draft-ietf-quic-http-20 | B.9. Since draft-ietf-quic-http-20 | |||
| * Prohibit closing the control stream (#2509, #2666) | * Prohibit closing the control stream (#2509, #2666) | |||
| * Change default priority to use an orphan node (#2502, #2690) | * Change default priority to use an orphan node (#2502, #2690) | |||
| * Exclusive priorities are restored (#2754, #2781) | * Exclusive priorities are restored (#2754, #2781) | |||
| * Restrict use of frames when using CONNECT (#2229, #2702) | * Restrict use of frames when using CONNECT (#2229, #2702) | |||
| * Close and maybe reset streams if a connection error occurs for | * Close and maybe reset streams if a connection error occurs for | |||
| CONNECT (#2228, #2703) | CONNECT (#2228, #2703) | |||
| * Encourage provision of sufficient unidirectional streams for QPACK | * Encourage provision of sufficient unidirectional streams for QPACK | |||
| (#2100, #2529, #2762) | (#2100, #2529, #2762) | |||
| * Allow extensions to use server-initiated bidirectional streams | * Allow extensions to use server-initiated bidirectional streams | |||
| (#2711, #2773) | (#2711, #2773) | |||
| skipping to change at page 64, line 39 ¶ | skipping to change at page 65, line 48 ¶ | |||
| - Specified error code for receiving DATA before HEADERS (#2715) | - Specified error code for receiving DATA before HEADERS (#2715) | |||
| - Describe malformed messages and their handling (#2410, #2764) | - Describe malformed messages and their handling (#2410, #2764) | |||
| - Remove HTTP_PUSH_ALREADY_IN_CACHE error (#2812, #2813) | - Remove HTTP_PUSH_ALREADY_IN_CACHE error (#2812, #2813) | |||
| - Refactor Push ID related errors (#2818, #2820) | - Refactor Push ID related errors (#2818, #2820) | |||
| - Rationalize HTTP/3 stream creation errors (#2821, #2822) | - Rationalize HTTP/3 stream creation errors (#2821, #2822) | |||
| B.9. Since draft-ietf-quic-http-19 | B.10. Since draft-ietf-quic-http-19 | |||
| * SETTINGS_NUM_PLACEHOLDERS is 0x9 (#2443,#2530) | * SETTINGS_NUM_PLACEHOLDERS is 0x9 (#2443,#2530) | |||
| * Non-zero bits in the Empty field of the PRIORITY frame MAY be | * Non-zero bits in the Empty field of the PRIORITY frame MAY be | |||
| treated as an error (#2501) | treated as an error (#2501) | |||
| B.10. Since draft-ietf-quic-http-18 | B.11. Since draft-ietf-quic-http-18 | |||
| * Resetting streams following a GOAWAY is recommended, but not | * Resetting streams following a GOAWAY is recommended, but not | |||
| required (#2256,#2457) | required (#2256,#2457) | |||
| * Use variable-length integers throughout (#2437,#2233,#2253,#2275) | * Use variable-length integers throughout (#2437,#2233,#2253,#2275) | |||
| - Variable-length frame types, stream types, and settings | - Variable-length frame types, stream types, and settings | |||
| identifiers | identifiers | |||
| - Renumbered stream type assignments | - Renumbered stream type assignments | |||
| - Modified associated reserved values | - Modified associated reserved values | |||
| * Frame layout switched from Length-Type-Value to Type-Length-Value | * Frame layout switched from Length-Type-Value to Type-Length-Value | |||
| (#2395,#2235) | (#2395,#2235) | |||
| * Specified error code for servers receiving DUPLICATE_PUSH (#2497) | * Specified error code for servers receiving DUPLICATE_PUSH (#2497) | |||
| * Use connection error for invalid PRIORITY (#2507, #2508) | * Use connection error for invalid PRIORITY (#2507, #2508) | |||
| B.11. Since draft-ietf-quic-http-17 | B.12. Since draft-ietf-quic-http-17 | |||
| * HTTP_REQUEST_REJECTED is used to indicate a request can be retried | * HTTP_REQUEST_REJECTED is used to indicate a request can be retried | |||
| (#2106, #2325) | (#2106, #2325) | |||
| * Changed error code for GOAWAY on the wrong stream (#2231, #2343) | * Changed error code for GOAWAY on the wrong stream (#2231, #2343) | |||
| B.12. Since draft-ietf-quic-http-16 | B.13. Since draft-ietf-quic-http-16 | |||
| * Rename "HTTP/QUIC" to "HTTP/3" (#1973) | * Rename "HTTP/QUIC" to "HTTP/3" (#1973) | |||
| * Changes to PRIORITY frame (#1865, #2075) | * Changes to PRIORITY frame (#1865, #2075) | |||
| - Permitted as first frame of request streams | - Permitted as first frame of request streams | |||
| - Remove exclusive reprioritization | - Remove exclusive reprioritization | |||
| - Changes to Prioritized Element Type bits | - Changes to Prioritized Element Type bits | |||
| skipping to change at page 66, line 5 ¶ | skipping to change at page 67, line 13 ¶ | |||
| (#1809, #1846, #2038) | (#1809, #1846, #2038) | |||
| * Clarify message processing rules for streams that aren't closed | * Clarify message processing rules for streams that aren't closed | |||
| (#1972, #2003) | (#1972, #2003) | |||
| * Removed reservation of error code 0 and moved HTTP_NO_ERROR to | * Removed reservation of error code 0 and moved HTTP_NO_ERROR to | |||
| this value (#1922) | this value (#1922) | |||
| * Removed prohibition of zero-length DATA frames (#2098) | * Removed prohibition of zero-length DATA frames (#2098) | |||
| B.13. Since draft-ietf-quic-http-15 | B.14. Since draft-ietf-quic-http-15 | |||
| Substantial editorial reorganization; no technical changes. | Substantial editorial reorganization; no technical changes. | |||
| B.14. Since draft-ietf-quic-http-14 | B.15. Since draft-ietf-quic-http-14 | |||
| * Recommend sensible values for QUIC transport parameters | * Recommend sensible values for QUIC transport parameters | |||
| (#1720,#1806) | (#1720,#1806) | |||
| * Define error for missing SETTINGS frame (#1697,#1808) | * Define error for missing SETTINGS frame (#1697,#1808) | |||
| * Setting values are variable-length integers (#1556,#1807) and do | * Setting values are variable-length integers (#1556,#1807) and do | |||
| not have separate maximum values (#1820) | not have separate maximum values (#1820) | |||
| * Expanded discussion of connection closure (#1599,#1717,#1712) | * Expanded discussion of connection closure (#1599,#1717,#1712) | |||
| * HTTP_VERSION_FALLBACK falls back to HTTP/1.1 (#1677,#1685) | * HTTP_VERSION_FALLBACK falls back to HTTP/1.1 (#1677,#1685) | |||
| B.15. Since draft-ietf-quic-http-13 | B.16. Since draft-ietf-quic-http-13 | |||
| * Reserved some frame types for grease (#1333, #1446) | * Reserved some frame types for grease (#1333, #1446) | |||
| * Unknown unidirectional stream types are tolerated, not errors; | * Unknown unidirectional stream types are tolerated, not errors; | |||
| some reserved for grease (#1490, #1525) | some reserved for grease (#1490, #1525) | |||
| * Require settings to be remembered for 0-RTT, prohibit reductions | * Require settings to be remembered for 0-RTT, prohibit reductions | |||
| (#1541, #1641) | (#1541, #1641) | |||
| * Specify behavior for truncated requests (#1596, #1643) | * Specify behavior for truncated requests (#1596, #1643) | |||
| B.16. Since draft-ietf-quic-http-12 | B.17. Since draft-ietf-quic-http-12 | |||
| * TLS SNI extension isn't mandatory if an alternative method is used | * TLS SNI extension isn't mandatory if an alternative method is used | |||
| (#1459, #1462, #1466) | (#1459, #1462, #1466) | |||
| * Removed flags from HTTP/3 frames (#1388, #1398) | * Removed flags from HTTP/3 frames (#1388, #1398) | |||
| * Reserved frame types and settings for use in preserving | * Reserved frame types and settings for use in preserving | |||
| extensibility (#1333, #1446) | extensibility (#1333, #1446) | |||
| * Added general error code (#1391, #1397) | * Added general error code (#1391, #1397) | |||
| * Unidirectional streams carry a type byte and are extensible | * Unidirectional streams carry a type byte and are extensible | |||
| (#910,#1359) | (#910,#1359) | |||
| * Priority mechanism now uses explicit placeholders to enable | * Priority mechanism now uses explicit placeholders to enable | |||
| persistent structure in the tree (#441,#1421,#1422) | persistent structure in the tree (#441,#1421,#1422) | |||
| B.17. Since draft-ietf-quic-http-11 | B.18. Since draft-ietf-quic-http-11 | |||
| * Moved QPACK table updates and acknowledgments to dedicated streams | * Moved QPACK table updates and acknowledgments to dedicated streams | |||
| (#1121, #1122, #1238) | (#1121, #1122, #1238) | |||
| B.18. Since draft-ietf-quic-http-10 | B.19. Since draft-ietf-quic-http-10 | |||
| * Settings need to be remembered when attempting and accepting 0-RTT | * Settings need to be remembered when attempting and accepting 0-RTT | |||
| (#1157, #1207) | (#1157, #1207) | |||
| B.19. Since draft-ietf-quic-http-09 | B.20. Since draft-ietf-quic-http-09 | |||
| * Selected QCRAM for header compression (#228, #1117) | * Selected QCRAM for header compression (#228, #1117) | |||
| * The server_name TLS extension is now mandatory (#296, #495) | * The server_name TLS extension is now mandatory (#296, #495) | |||
| * Specified handling of unsupported versions in Alt-Svc (#1093, | * Specified handling of unsupported versions in Alt-Svc (#1093, | |||
| #1097) | #1097) | |||
| B.20. Since draft-ietf-quic-http-08 | B.21. Since draft-ietf-quic-http-08 | |||
| * Clarified connection coalescing rules (#940, #1024) | * Clarified connection coalescing rules (#940, #1024) | |||
| B.21. Since draft-ietf-quic-http-07 | B.22. Since draft-ietf-quic-http-07 | |||
| * Changes for integer encodings in QUIC (#595,#905) | * Changes for integer encodings in QUIC (#595,#905) | |||
| * Use unidirectional streams as appropriate (#515, #240, #281, #886) | * Use unidirectional streams as appropriate (#515, #240, #281, #886) | |||
| * Improvement to the description of GOAWAY (#604, #898) | * Improvement to the description of GOAWAY (#604, #898) | |||
| * Improve description of server push usage (#947, #950, #957) | * Improve description of server push usage (#947, #950, #957) | |||
| B.22. Since draft-ietf-quic-http-06 | B.23. Since draft-ietf-quic-http-06 | |||
| * Track changes in QUIC error code usage (#485) | * Track changes in QUIC error code usage (#485) | |||
| B.23. Since draft-ietf-quic-http-05 | B.24. Since draft-ietf-quic-http-05 | |||
| * Made push ID sequential, add MAX_PUSH_ID, remove | * Made push ID sequential, add MAX_PUSH_ID, remove | |||
| SETTINGS_ENABLE_PUSH (#709) | SETTINGS_ENABLE_PUSH (#709) | |||
| * Guidance about keep-alive and QUIC PINGs (#729) | * Guidance about keep-alive and QUIC PINGs (#729) | |||
| * Expanded text on GOAWAY and cancellation (#757) | * Expanded text on GOAWAY and cancellation (#757) | |||
| B.24. Since draft-ietf-quic-http-04 | B.25. Since draft-ietf-quic-http-04 | |||
| * Cite RFC 5234 (#404) | * Cite RFC 5234 (#404) | |||
| * Return to a single stream per request (#245,#557) | * Return to a single stream per request (#245,#557) | |||
| * Use separate frame type and settings registries from HTTP/2 (#81) | * Use separate frame type and settings registries from HTTP/2 (#81) | |||
| * SETTINGS_ENABLE_PUSH instead of SETTINGS_DISABLE_PUSH (#477) | * SETTINGS_ENABLE_PUSH instead of SETTINGS_DISABLE_PUSH (#477) | |||
| * Restored GOAWAY (#696) | * Restored GOAWAY (#696) | |||
| * Identify server push using Push ID rather than a stream ID | * Identify server push using Push ID rather than a stream ID | |||
| (#702,#281) | (#702,#281) | |||
| * DATA frames cannot be empty (#700) | * DATA frames cannot be empty (#700) | |||
| B.25. Since draft-ietf-quic-http-03 | B.26. Since draft-ietf-quic-http-03 | |||
| None. | None. | |||
| B.26. Since draft-ietf-quic-http-02 | B.27. Since draft-ietf-quic-http-02 | |||
| * Track changes in transport draft | * Track changes in transport draft | |||
| B.27. Since draft-ietf-quic-http-01 | B.28. Since draft-ietf-quic-http-01 | |||
| * SETTINGS changes (#181): | * SETTINGS changes (#181): | |||
| - SETTINGS can be sent only once at the start of a connection; no | - SETTINGS can be sent only once at the start of a connection; no | |||
| changes thereafter | changes thereafter | |||
| - SETTINGS_ACK removed | - SETTINGS_ACK removed | |||
| - Settings can only occur in the SETTINGS frame a single time | - Settings can only occur in the SETTINGS frame a single time | |||
| skipping to change at page 69, line 5 ¶ | skipping to change at page 70, line 15 ¶ | |||
| * Closing the connection control stream or any message control | * Closing the connection control stream or any message control | |||
| stream is a fatal error (#176) | stream is a fatal error (#176) | |||
| * HPACK Sequence counter can wrap (#173) | * HPACK Sequence counter can wrap (#173) | |||
| * 0-RTT guidance added | * 0-RTT guidance added | |||
| * Guide to differences from HTTP/2 and porting HTTP/2 extensions | * Guide to differences from HTTP/2 and porting HTTP/2 extensions | |||
| added (#127,#242) | added (#127,#242) | |||
| B.28. Since draft-ietf-quic-http-00 | B.29. Since draft-ietf-quic-http-00 | |||
| * Changed "HTTP/2-over-QUIC" to "HTTP/QUIC" throughout (#11,#29) | * Changed "HTTP/2-over-QUIC" to "HTTP/QUIC" throughout (#11,#29) | |||
| * Changed from using HTTP/2 framing within Stream 3 to new framing | * Changed from using HTTP/2 framing within Stream 3 to new framing | |||
| format and two-stream-per-request model (#71,#72,#73) | format and two-stream-per-request model (#71,#72,#73) | |||
| * Adopted SETTINGS format from draft-bishop-httpbis-extended- | * Adopted SETTINGS format from draft-bishop-httpbis-extended- | |||
| settings-01 | settings-01 | |||
| * Reworked SETTINGS_ACK to account for indeterminate inter-stream | * Reworked SETTINGS_ACK to account for indeterminate inter-stream | |||
| order (#75) | order (#75) | |||
| * Described CONNECT pseudo-method (#95) | * Described CONNECT pseudo-method (#95) | |||
| * Updated ALPN token and Alt-Svc guidance (#13,#87) | * Updated ALPN token and Alt-Svc guidance (#13,#87) | |||
| * Application-layer-defined error codes (#19,#74) | * Application-layer-defined error codes (#19,#74) | |||
| B.29. Since draft-shade-quic-http2-mapping-00 | B.30. Since draft-shade-quic-http2-mapping-00 | |||
| * Adopted as base for draft-ietf-quic-http | * Adopted as base for draft-ietf-quic-http | |||
| * Updated authors/editors list | * Updated authors/editors list | |||
| Acknowledgements | Acknowledgements | |||
| The original authors of this specification were Robbie Shade and Mike | The original authors of this specification were Robbie Shade and Mike | |||
| Warres. | Warres. | |||
| End of changes. 54 change blocks. | ||||
| 150 lines changed or deleted | 164 lines changed or added | |||
This html diff was produced by rfcdiff 1.45. The latest version is available from http://tools.ietf.org/tools/rfcdiff/ | ||||