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/