| draft-ietf-quic-http-06.txt | draft-ietf-quic-http-07.txt | |||
|---|---|---|---|---|
| QUIC M. Bishop, Ed. | QUIC M. Bishop, Ed. | |||
| Internet-Draft Microsoft | Internet-Draft Microsoft | |||
| Intended status: Standards Track September 22, 2017 | Intended status: Standards Track October 13, 2017 | |||
| Expires: March 26, 2018 | Expires: April 16, 2018 | |||
| Hypertext Transfer Protocol (HTTP) over QUIC | Hypertext Transfer Protocol (HTTP) over QUIC | |||
| draft-ietf-quic-http-06 | draft-ietf-quic-http-07 | |||
| 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 QUIC. | how HTTP/2 extensions can be ported to QUIC. | |||
| Note to Readers | Note to Readers | |||
| Discussion of this draft takes place on the QUIC working group | Discussion of this draft takes place on the QUIC working group | |||
| mailing list (quic@ietf.org), which is archived at | mailing list (quic@ietf.org), which is archived at | |||
| https://mailarchive.ietf.org/arch/search/?email_list=quic . | https://mailarchive.ietf.org/arch/search/?email_list=quic [1]. | |||
| Working Group information can be found at https://github.com/quicwg ; | Working Group information can be found at https://github.com/quicwg | |||
| source code and issues list for this draft can be found at | [2]; source code and issues list for this draft can be found at | |||
| https://github.com/quicwg/base-drafts/labels/http . | https://github.com/quicwg/base-drafts/labels/http [3]. | |||
| Status of This Memo | Status of This Memo | |||
| This Internet-Draft is submitted in full conformance with the | This Internet-Draft is submitted in full conformance with the | |||
| provisions of BCP 78 and BCP 79. | provisions of BCP 78 and BCP 79. | |||
| Internet-Drafts are working documents of the Internet Engineering | Internet-Drafts are working documents of the Internet Engineering | |||
| Task Force (IETF). Note that other groups may also distribute | Task Force (IETF). Note that other groups may also distribute | |||
| working documents as Internet-Drafts. The list of current Internet- | working documents as Internet-Drafts. The list of current Internet- | |||
| Drafts is at http://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 March 26, 2018. | This Internet-Draft will expire on April 16, 2018. | |||
| Copyright Notice | Copyright Notice | |||
| Copyright (c) 2017 IETF Trust and the persons identified as the | Copyright (c) 2017 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 | Provisions Relating to IETF Documents | |||
| (http://trustee.ietf.org/license-info) in effect on the date of | (https://trustee.ietf.org/license-info) in effect on the date of | |||
| publication of this document. Please review these documents | publication of this document. Please review these documents | |||
| carefully, as they describe your rights and restrictions with respect | carefully, as they describe your rights and restrictions with respect | |||
| to this document. Code Components extracted from this document must | to this document. Code Components extracted from this document must | |||
| include Simplified BSD License text as described in Section 4.e of | include Simplified BSD License text as described in Section 4.e of | |||
| the Trust Legal Provisions and are provided without warranty as | the Trust Legal Provisions and are provided without warranty as | |||
| described in the Simplified BSD License. | described in the Simplified BSD License. | |||
| Table of Contents | Table of Contents | |||
| 1. Introduction . . . . . . . . . . . . . . . . . . . . . . . . 3 | 1. Introduction . . . . . . . . . . . . . . . . . . . . . . . . 3 | |||
| 1.1. Notational Conventions . . . . . . . . . . . . . . . . . 3 | 1.1. Notational Conventions . . . . . . . . . . . . . . . . . 3 | |||
| 2. QUIC Advertisement . . . . . . . . . . . . . . . . . . . . . 3 | 2. QUIC Advertisement . . . . . . . . . . . . . . . . . . . . . 4 | |||
| 2.1. QUIC Version Hints . . . . . . . . . . . . . . . . . . . 4 | 2.1. QUIC Version Hints . . . . . . . . . . . . . . . . . . . 4 | |||
| 3. Connection Establishment . . . . . . . . . . . . . . . . . . 5 | 3. Connection Establishment . . . . . . . . . . . . . . . . . . 5 | |||
| 3.1. Draft Version Identification . . . . . . . . . . . . . . 5 | 3.1. Draft Version Identification . . . . . . . . . . . . . . 5 | |||
| 4. Stream Mapping and Usage . . . . . . . . . . . . . . . . . . 5 | 4. Stream Mapping and Usage . . . . . . . . . . . . . . . . . . 5 | |||
| 4.1. Stream 1: Control Stream . . . . . . . . . . . . . . . . 6 | 4.1. Stream 1: Control Stream . . . . . . . . . . . . . . . . 6 | |||
| 4.2. HTTP Message Exchanges . . . . . . . . . . . . . . . . . 6 | 4.2. HTTP Message Exchanges . . . . . . . . . . . . . . . . . 6 | |||
| 4.2.1. Header Compression . . . . . . . . . . . . . . . . . 7 | 4.2.1. Header Compression . . . . . . . . . . . . . . . . . 7 | |||
| 4.2.2. The CONNECT Method . . . . . . . . . . . . . . . . . 8 | 4.2.2. The CONNECT Method . . . . . . . . . . . . . . . . . 8 | |||
| 4.3. Request Prioritization . . . . . . . . . . . . . . . . . 9 | 4.3. Request Prioritization . . . . . . . . . . . . . . . . . 9 | |||
| 4.4. Server Push . . . . . . . . . . . . . . . . . . . . . . . 9 | 4.4. Server Push . . . . . . . . . . . . . . . . . . . . . . . 9 | |||
| 5. HTTP Framing Layer . . . . . . . . . . . . . . . . . . . . . 10 | 5. HTTP Framing Layer . . . . . . . . . . . . . . . . . . . . . 10 | |||
| 5.1. Frame Layout . . . . . . . . . . . . . . . . . . . . . . 10 | 5.1. Frame Layout . . . . . . . . . . . . . . . . . . . . . . 11 | |||
| 5.2. Frame Definitions . . . . . . . . . . . . . . . . . . . . 11 | 5.2. Frame Definitions . . . . . . . . . . . . . . . . . . . . 11 | |||
| 5.2.1. DATA . . . . . . . . . . . . . . . . . . . . . . . . 11 | 5.2.1. DATA . . . . . . . . . . . . . . . . . . . . . . . . 11 | |||
| 5.2.2. HEADERS . . . . . . . . . . . . . . . . . . . . . . . 11 | 5.2.2. HEADERS . . . . . . . . . . . . . . . . . . . . . . . 11 | |||
| 5.2.3. PRIORITY . . . . . . . . . . . . . . . . . . . . . . 12 | 5.2.3. PRIORITY . . . . . . . . . . . . . . . . . . . . . . 12 | |||
| 5.2.4. CANCEL_PUSH . . . . . . . . . . . . . . . . . . . . . 13 | 5.2.4. CANCEL_PUSH . . . . . . . . . . . . . . . . . . . . . 13 | |||
| 5.2.5. SETTINGS . . . . . . . . . . . . . . . . . . . . . . 14 | 5.2.5. SETTINGS . . . . . . . . . . . . . . . . . . . . . . 14 | |||
| 5.2.6. PUSH_PROMISE . . . . . . . . . . . . . . . . . . . . 17 | 5.2.6. PUSH_PROMISE . . . . . . . . . . . . . . . . . . . . 17 | |||
| 5.2.7. GOAWAY . . . . . . . . . . . . . . . . . . . . . . . 18 | 5.2.7. GOAWAY . . . . . . . . . . . . . . . . . . . . . . . 18 | |||
| 5.2.8. MAX_PUSH_ID . . . . . . . . . . . . . . . . . . . . . 20 | 5.2.8. MAX_PUSH_ID . . . . . . . . . . . . . . . . . . . . . 20 | |||
| 6. Connection Management . . . . . . . . . . . . . . . . . . . . 20 | 6. Connection Management . . . . . . . . . . . . . . . . . . . . 20 | |||
| 7. Error Handling . . . . . . . . . . . . . . . . . . . . . . . 21 | 7. Error Handling . . . . . . . . . . . . . . . . . . . . . . . 21 | |||
| 7.1. HTTP-Defined QUIC Error Codes . . . . . . . . . . . . . . 21 | 7.1. HTTP/QUIC Error Codes . . . . . . . . . . . . . . . . . . 21 | |||
| 8. Considerations for Transitioning from HTTP/2 . . . . . . . . 22 | 8. Considerations for Transitioning from HTTP/2 . . . . . . . . 22 | |||
| 8.1. HTTP Frame Types . . . . . . . . . . . . . . . . . . . . 23 | 8.1. HTTP Frame Types . . . . . . . . . . . . . . . . . . . . 23 | |||
| 8.2. HTTP/2 SETTINGS Parameters . . . . . . . . . . . . . . . 24 | 8.2. HTTP/2 SETTINGS Parameters . . . . . . . . . . . . . . . 25 | |||
| 8.3. HTTP/2 Error Codes . . . . . . . . . . . . . . . . . . . 25 | 8.3. HTTP/2 Error Codes . . . . . . . . . . . . . . . . . . . 25 | |||
| 9. Security Considerations . . . . . . . . . . . . . . . . . . . 26 | 9. Security Considerations . . . . . . . . . . . . . . . . . . . 26 | |||
| 10. IANA Considerations . . . . . . . . . . . . . . . . . . . . . 26 | 10. IANA Considerations . . . . . . . . . . . . . . . . . . . . . 27 | |||
| 10.1. Registration of HTTP/QUIC Identification String . . . . 26 | 10.1. Registration of HTTP/QUIC Identification String . . . . 27 | |||
| 10.2. Registration of QUIC Version Hint Alt-Svc Parameter . . 27 | 10.2. Registration of QUIC Version Hint Alt-Svc Parameter . . 27 | |||
| 10.3. Frame Types . . . . . . . . . . . . . . . . . . . . . . 27 | 10.3. Frame Types . . . . . . . . . . . . . . . . . . . . . . 27 | |||
| 10.4. Settings Parameters . . . . . . . . . . . . . . . . . . 28 | 10.4. Settings Parameters . . . . . . . . . . . . . . . . . . 28 | |||
| 10.5. Error Codes . . . . . . . . . . . . . . . . . . . . . . 29 | 10.5. Error Codes . . . . . . . . . . . . . . . . . . . . . . 29 | |||
| 11. References . . . . . . . . . . . . . . . . . . . . . . . . . 31 | 11. References . . . . . . . . . . . . . . . . . . . . . . . . . 32 | |||
| 11.1. Normative References . . . . . . . . . . . . . . . . . . 31 | 11.1. Normative References . . . . . . . . . . . . . . . . . . 32 | |||
| 11.2. Informative References . . . . . . . . . . . . . . . . . 32 | 11.2. Informative References . . . . . . . . . . . . . . . . . 33 | |||
| Appendix A. Contributors . . . . . . . . . . . . . . . . . . . . 32 | 11.3. URIs . . . . . . . . . . . . . . . . . . . . . . . . . . 33 | |||
| Appendix A. Contributors . . . . . . . . . . . . . . . . . . . . 33 | ||||
| Appendix B. Change Log . . . . . . . . . . . . . . . . . . . . . 33 | Appendix B. Change Log . . . . . . . . . . . . . . . . . . . . . 33 | |||
| B.1. Since draft-ietf-quic-http-05 . . . . . . . . . . . . . . 33 | B.1. Since draft-ietf-quic-http-06 . . . . . . . . . . . . . . 33 | |||
| B.2. Since draft-ietf-quic-http-04 . . . . . . . . . . . . . . 33 | B.2. Since draft-ietf-quic-http-05 . . . . . . . . . . . . . . 33 | |||
| B.3. Since draft-ietf-quic-http-03 . . . . . . . . . . . . . . 33 | B.3. Since draft-ietf-quic-http-04 . . . . . . . . . . . . . . 33 | |||
| B.4. Since draft-ietf-quic-http-02 . . . . . . . . . . . . . . 33 | B.4. Since draft-ietf-quic-http-03 . . . . . . . . . . . . . . 34 | |||
| B.5. Since draft-ietf-quic-http-01 . . . . . . . . . . . . . . 33 | B.5. Since draft-ietf-quic-http-02 . . . . . . . . . . . . . . 34 | |||
| B.6. Since draft-ietf-quic-http-00 . . . . . . . . . . . . . . 34 | B.6. Since draft-ietf-quic-http-01 . . . . . . . . . . . . . . 34 | |||
| B.7. Since draft-shade-quic-http2-mapping-00 . . . . . . . . . 34 | B.7. Since draft-ietf-quic-http-00 . . . . . . . . . . . . . . 35 | |||
| Author's Address . . . . . . . . . . . . . . . . . . . . . . . . 34 | B.8. Since draft-shade-quic-http2-mapping-00 . . . . . . . . . 35 | |||
| Author's Address . . . . . . . . . . . . . . . . . . . . . . . . 35 | ||||
| 1. Introduction | 1. Introduction | |||
| 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, drawing heavily on | describes a mapping of HTTP semantics over QUIC, drawing heavily on | |||
| the existing TCP mapping, HTTP/2. Specifically, this document | the existing TCP mapping, HTTP/2. Specifically, this document | |||
| identifies HTTP/2 features that are subsumed by QUIC, and describes | identifies HTTP/2 features that are subsumed by QUIC, and describes | |||
| how the other features can be implemented atop QUIC. | how the other features can be implemented atop QUIC. | |||
| skipping to change at page 21, line 26 ¶ | skipping to change at page 21, line 26 ¶ | |||
| 7. Error Handling | 7. Error Handling | |||
| QUIC allows the application to abruptly terminate (reset) individual | QUIC allows the application to abruptly terminate (reset) individual | |||
| streams or the entire connection when an error is encountered. These | streams or the entire connection when an error is encountered. These | |||
| are referred to as "stream errors" or "connection errors" and are | are referred to as "stream errors" or "connection errors" and are | |||
| described in more detail in [QUIC-TRANSPORT]. | described in more detail in [QUIC-TRANSPORT]. | |||
| This section describes HTTP-specific error codes which can be used to | This section describes HTTP-specific error codes which can be used to | |||
| express the cause of a connection or stream error. | express the cause of a connection or stream error. | |||
| 7.1. HTTP-Defined QUIC Error Codes | 7.1. HTTP/QUIC Error Codes | |||
| QUIC allocates error codes 0x0000-0x3FFF to application protocol | The following error codes are defined for use in QUIC RST_STREAM, | |||
| definition. The following error codes are defined by HTTP for use in | STOP_SENDING, and CONNECTION_CLOSE frames when using HTTP/QUIC. | |||
| QUIC RST_STREAM and CONNECTION_CLOSE frames. | ||||
| HTTP_PUSH_REFUSED (0x01): The server has attempted to push content | STOPPING (0x00): This value is reserved by the transport to be used | |||
| in response to QUIC STOP_SENDING frames. | ||||
| HTTP_NO_ERROR (0x01): No error. This is used when the connection or | ||||
| stream needs to be closed, but there is no error to signal. | ||||
| HTTP_PUSH_REFUSED (0x02): The server has attempted to push content | ||||
| which the client will not accept on this connection. | which the client will not accept on this connection. | |||
| HTTP_INTERNAL_ERROR (0x02): An internal error has occurred in the | HTTP_INTERNAL_ERROR (0x03): An internal error has occurred in the | |||
| HTTP stack. | HTTP stack. | |||
| HTTP_PUSH_ALREADY_IN_CACHE (0x03): The server has attempted to push | HTTP_PUSH_ALREADY_IN_CACHE (0x04): The server has attempted to push | |||
| content which the client has cached. | content which the client has cached. | |||
| HTTP_REQUEST_CANCELLED (0x04): The client no longer needs the | HTTP_REQUEST_CANCELLED (0x05): The client no longer needs the | |||
| requested data. | requested data. | |||
| HTTP_HPACK_DECOMPRESSION_FAILED (0x05): HPACK failed to decompress a | HTTP_HPACK_DECOMPRESSION_FAILED (0x06): HPACK failed to decompress a | |||
| frame and cannot continue. | frame and cannot continue. | |||
| HTTP_CONNECT_ERROR (0x06): The connection established in response to | HTTP_CONNECT_ERROR (0x07): The connection established in response to | |||
| a CONNECT request was reset or abnormally closed. | a CONNECT request was reset or abnormally closed. | |||
| HTTP_EXCESSIVE_LOAD (0x07): The endpoint detected that its peer is | HTTP_EXCESSIVE_LOAD (0x08): The endpoint detected that its peer is | |||
| exhibiting a behavior that might be generating excessive load. | exhibiting a behavior that might be generating excessive load. | |||
| HTTP_VERSION_FALLBACK (0x08): The requested operation cannot be | HTTP_VERSION_FALLBACK (0x09): The requested operation cannot be | |||
| served over HTTP/QUIC. The peer should retry over HTTP/2. | served over HTTP/QUIC. The peer should retry over HTTP/2. | |||
| HTTP_MALFORMED_HEADERS (0x09): A HEADERS frame has been received | HTTP_MALFORMED_HEADERS (0x0A): A HEADERS frame has been received | |||
| with an invalid format. | with an invalid format. | |||
| HTTP_MALFORMED_PRIORITY (0x0A): A PRIORITY frame has been received | HTTP_MALFORMED_PRIORITY (0x0B): A PRIORITY frame has been received | |||
| with an invalid format. | with an invalid format. | |||
| HTTP_MALFORMED_SETTINGS (0x0B): A SETTINGS frame has been received | HTTP_MALFORMED_SETTINGS (0x0C): A SETTINGS frame has been received | |||
| with an invalid format. | with an invalid format. | |||
| HTTP_MALFORMED_PUSH_PROMISE (0x0C): A PUSH_PROMISE frame has been | HTTP_MALFORMED_PUSH_PROMISE (0x0D): A PUSH_PROMISE frame has been | |||
| received with an invalid format. | received with an invalid format. | |||
| HTTP_MALFORMED_DATA (0x0D): A DATA frame has been received with an | HTTP_MALFORMED_DATA (0x0E): A DATA frame has been received with an | |||
| invalid format. | invalid format. | |||
| HTTP_INTERRUPTED_HEADERS (0x0E): A HEADERS frame without the End | HTTP_INTERRUPTED_HEADERS (0x0F): A HEADERS frame without the End | |||
| Header Block flag was followed by a frame other than HEADERS. | Header Block flag was followed by a frame other than HEADERS. | |||
| HTTP_WRONG_STREAM (0x0F): A frame was received on stream where it is | HTTP_WRONG_STREAM (0x10): A frame was received on stream where it is | |||
| not permitted. | not permitted. | |||
| HTTP_MULTIPLE_SETTINGS (0x10): More than one SETTINGS frame was | HTTP_MULTIPLE_SETTINGS (0x11): More than one SETTINGS frame was | |||
| received. | received. | |||
| HTTP_MALFORMED_PUSH (0x11): A push stream header was malformed or | HTTP_MALFORMED_PUSH (0x12): A push stream header was malformed or | |||
| included an invalid Push ID. | included an invalid Push ID. | |||
| HTTP_MALFORMED_MAX_PUSH_ID (0x12): A MAX_PUSH_ID frame has been | HTTP_MALFORMED_MAX_PUSH_ID (0x13): A MAX_PUSH_ID frame has been | |||
| received with an invalid format. | received with an invalid format. | |||
| 8. Considerations for Transitioning from HTTP/2 | 8. Considerations for Transitioning from HTTP/2 | |||
| HTTP/QUIC is strongly informed by HTTP/2, and bears many | HTTP/QUIC is strongly informed by HTTP/2, and bears many | |||
| similarities. This section describes the approach taken to design | similarities. This section describes the approach taken to design | |||
| HTTP/QUIC, points out important differences from HTTP/2, and | HTTP/QUIC, points out important differences from HTTP/2, and | |||
| describes how to map HTTP/2 extensions into HTTP/QUIC. | describes how to map HTTP/2 extensions into HTTP/QUIC. | |||
| HTTP/QUIC begins from the premise that HTTP/2 code reuse is a useful | HTTP/QUIC begins from the premise that HTTP/2 code reuse is a useful | |||
| skipping to change at page 25, line 35 ¶ | skipping to change at page 25, line 48 ¶ | |||
| IDs of settings defined in [RFC7540] have been reserved for | IDs of settings defined in [RFC7540] have been reserved for | |||
| simplicity. See Section 10.4. | simplicity. See Section 10.4. | |||
| 8.3. HTTP/2 Error Codes | 8.3. HTTP/2 Error Codes | |||
| QUIC has the same concepts of "stream" and "connection" errors that | QUIC has the same concepts of "stream" and "connection" errors that | |||
| HTTP/2 provides. However, because the error code space is shared | HTTP/2 provides. However, because the error code space is shared | |||
| between multiple components, there is no direct portability of HTTP/2 | between multiple components, there is no direct portability of HTTP/2 | |||
| error codes. | error codes. | |||
| The HTTP/2 error codes defined in Section 7 of [RFC7540] map to QUIC | The HTTP/2 error codes defined in Section 7 of [RFC7540] map to the | |||
| error codes as follows: | HTTP over QUIC error codes as follows: | |||
| NO_ERROR (0x0): QUIC_NO_ERROR | NO_ERROR (0x0): HTTP_NO_ERROR in Section 7.1. | |||
| PROTOCOL_ERROR (0x1): No single mapping. See new HTTP_MALFORMED_* | PROTOCOL_ERROR (0x1): No single mapping. See new HTTP_MALFORMED_* | |||
| error codes defined in Section 7.1. | error codes defined in Section 7.1. | |||
| INTERNAL_ERROR (0x2): HTTP_INTERNAL_ERROR in Section 7.1. | INTERNAL_ERROR (0x2): HTTP_INTERNAL_ERROR in Section 7.1. | |||
| FLOW_CONTROL_ERROR (0x3): Not applicable, since QUIC handles flow | FLOW_CONTROL_ERROR (0x3): Not applicable, since QUIC handles flow | |||
| control. Would provoke a QUIC_FLOW_CONTROL_RECEIVED_TOO_MUCH_DATA | control. Would provoke a QUIC_FLOW_CONTROL_RECEIVED_TOO_MUCH_DATA | |||
| from the QUIC layer. | from the QUIC layer. | |||
| skipping to change at page 27, line 26 ¶ | skipping to change at page 27, line 38 ¶ | |||
| Parameter: "quic" | Parameter: "quic" | |||
| Specification: This document, Section 2.1 | Specification: This document, Section 2.1 | |||
| 10.3. Frame Types | 10.3. Frame Types | |||
| This document establishes a registry for HTTP/QUIC frame type codes. | This document establishes a registry for HTTP/QUIC frame type codes. | |||
| The "HTTP/QUIC Frame Type" registry manages an 8-bit space. The | The "HTTP/QUIC Frame Type" registry manages an 8-bit space. The | |||
| "HTTP/QUIC Frame Type" registry operates under either of the "IETF | "HTTP/QUIC Frame Type" registry operates under either of the "IETF | |||
| Review" or "IESG Approval" policies [RFC5226] for values between 0x00 | Review" or "IESG Approval" policies [RFC8126] for values between 0x00 | |||
| and 0xef, with values between 0xf0 and 0xff being reserved for | and 0xef, with values between 0xf0 and 0xff being reserved for | |||
| Experimental Use. | Experimental Use. | |||
| While this registry is separate from the "HTTP/2 Frame Type" registry | While this registry is separate from the "HTTP/2 Frame Type" registry | |||
| defined in [RFC7540], it is preferable that the assignments parallel | defined in [RFC7540], it is preferable that the assignments parallel | |||
| each other. If an entry is present in only one registry, every | each other. If an entry is present in only one registry, every | |||
| effort SHOULD be made to avoid assigning the corresponding value to | effort SHOULD be made to avoid assigning the corresponding value to | |||
| an unrelated operation. | an unrelated operation. | |||
| New entries in this registry require the following information: | New entries in this registry require the following information: | |||
| skipping to change at page 28, line 36 ¶ | skipping to change at page 28, line 45 ¶ | |||
| | Reserved | 0x9 | N/A | | | Reserved | 0x9 | N/A | | |||
| | | | | | | | | | | |||
| | MAX_PUSH_ID | 0xD | Section 5.2.8 | | | MAX_PUSH_ID | 0xD | Section 5.2.8 | | |||
| +--------------+------+---------------+ | +--------------+------+---------------+ | |||
| 10.4. Settings Parameters | 10.4. Settings Parameters | |||
| This document establishes a registry for HTTP/QUIC settings. The | This document establishes a registry for HTTP/QUIC settings. The | |||
| "HTTP/QUIC Settings" registry manages a 16-bit space. The "HTTP/QUIC | "HTTP/QUIC Settings" registry manages a 16-bit space. The "HTTP/QUIC | |||
| Settings" registry operates under the "Expert Review" policy | Settings" registry operates under the "Expert Review" policy | |||
| [RFC5226] for values in the range from 0x0000 to 0xefff, with values | [RFC8126] for values in the range from 0x0000 to 0xefff, with values | |||
| between and 0xf000 and 0xffff being reserved for Experimental Use. | between and 0xf000 and 0xffff being reserved for Experimental Use. | |||
| The designated experts are the same as those for the "HTTP/2 | The designated experts are the same as those for the "HTTP/2 | |||
| Settings" registry defined in [RFC7540]. | Settings" registry defined in [RFC7540]. | |||
| While this registry is separate from the "HTTP/2 Settings" registry | While this registry is separate from the "HTTP/2 Settings" registry | |||
| defined in [RFC7540], it is preferable that the assignments parallel | defined in [RFC7540], it is preferable that the assignments parallel | |||
| each other. If an entry is present in only one registry, every | each other. If an entry is present in only one registry, every | |||
| effort SHOULD be made to avoid assigning the corresponding value to | effort SHOULD be made to avoid assigning the corresponding value to | |||
| an unrelated operation. | an unrelated operation. | |||
| skipping to change at page 29, line 29 ¶ | skipping to change at page 29, line 38 ¶ | |||
| | Reserved | 0x4 | N/A | | | Reserved | 0x4 | N/A | | |||
| | | | | | | | | | | |||
| | Reserved | 0x5 | N/A | | | Reserved | 0x5 | N/A | | |||
| | | | | | | | | | | |||
| | MAX_HEADER_LIST_SIZE | 0x6 | Section 5.2.5.2 | | | MAX_HEADER_LIST_SIZE | 0x6 | Section 5.2.5.2 | | |||
| +----------------------+------+-----------------+ | +----------------------+------+-----------------+ | |||
| 10.5. Error Codes | 10.5. Error Codes | |||
| This document establishes a registry for HTTP/QUIC error codes. The | This document establishes a registry for HTTP/QUIC error codes. The | |||
| "HTTP/QUIC Error Code" registry manages a 30-bit space. The "HTTP/ | "HTTP/QUIC Error Code" registry manages a 16-bit space. The "HTTP/ | |||
| QUIC Error Code" registry operates under the "Expert Review" policy | QUIC Error Code" registry operates under the "Expert Review" policy | |||
| [RFC5226]. | [RFC8126]. | |||
| Registrations for error codes are required to include a description | Registrations for error codes are required to include a description | |||
| of the error code. An expert reviewer is advised to examine new | of the error code. An expert reviewer is advised to examine new | |||
| registrations for possible duplication with existing error codes. | registrations for possible duplication with existing error codes. | |||
| Use of existing registrations is to be encouraged, but not mandated. | Use of existing registrations is to be encouraged, but not mandated. | |||
| New registrations are advised to provide the following information: | New registrations are advised to provide the following information: | |||
| Name: A name for the error code. Specifying an error code name is | Name: A name for the error code. Specifying an error code name is | |||
| optional. | optional. | |||
| Code: The 30-bit error code value. | Code: The 16-bit error code value. | |||
| Description: A brief description of the error code semantics, longer | Description: A brief description of the error code semantics, longer | |||
| if no detailed specification is provided. | if no detailed specification is provided. | |||
| Specification: An optional reference for a specification that | Specification: An optional reference for a specification that | |||
| defines the error code. | defines the error code. | |||
| The entries in the following table are registered by this document. | The entries in the following table are registered by this document. | |||
| +------------------------------+-----+--------------+---------------+ | +-----------------------------+-----+-------------+-----------------+ | |||
| | Name | Cod | Description | Specification | | | Name | Cod | Description | Specification | | |||
| | | e | | | | | | e | | | | |||
| +------------------------------+-----+--------------+---------------+ | +-----------------------------+-----+-------------+-----------------+ | |||
| | HTTP_PUSH_REFUSED | 0x0 | Client | Section 7.1 | | | STOPPING | 0x0 | Reserved by | [QUIC-TRANSPORT | | |||
| | | 1 | refused | | | | | 0 | QUIC | ] | | |||
| | | | pushed | | | | | | | | | |||
| | | | content | | | | HTTP_NO_ERROR | 0x0 | No error | Section 7.1 | | |||
| | | | | | | | | 1 | | | | |||
| | HTTP_INTERNAL_ERROR | 0x0 | Internal | Section 7.1 | | | | | | | | |||
| | | 2 | error | | | | HTTP_PUSH_REFUSED | 0x0 | Client | Section 7.1 | | |||
| | | | | | | | | 2 | refused | | | |||
| | HTTP_PUSH_ALREADY_IN_CACHE | 0x0 | Pushed | Section 7.1 | | | | | pushed | | | |||
| | | 3 | content | | | | | | content | | | |||
| | | | already | | | | | | | | | |||
| | | | cached | | | | HTTP_INTERNAL_ERROR | 0x0 | Internal | Section 7.1 | | |||
| | | | | | | | | 3 | error | | | |||
| | HTTP_REQUEST_CANCELLED | 0x0 | Data no | Section 7.1 | | | | | | | | |||
| | | 4 | longer | | | | HTTP_PUSH_ALREADY_IN_CACHE | 0x0 | Pushed | Section 7.1 | | |||
| | | | needed | | | | | 4 | content | | | |||
| | | | | | | | | | already | | | |||
| | HTTP_HPACK_DECOMPRESSION_FAI | 0x0 | HPACK cannot | Section 7.1 | | | | | cached | | | |||
| | LED | 5 | continue | | | | | | | | | |||
| | | | | | | | HTTP_REQUEST_CANCELLED | 0x0 | Data no | Section 7.1 | | |||
| | HTTP_CONNECT_ERROR | 0x0 | TCP reset or | Section 7.1 | | | | 5 | longer | | | |||
| | | 6 | error on | | | | | | needed | | | |||
| | | | CONNECT | | | | | | | | | |||
| | | | request | | | | HTTP_HPACK_DECOMPRESSION_FA | 0x0 | HPACK | Section 7.1 | | |||
| | | | | | | | ILED | 6 | cannot | | | |||
| | HTTP_EXCESSIVE_LOAD | 0x0 | Peer | Section 7.1 | | | | | continue | | | |||
| | | 7 | generating | | | | | | | | | |||
| | | | excessive | | | | HTTP_CONNECT_ERROR | 0x0 | TCP reset | Section 7.1 | | |||
| | | | load | | | | | 7 | or error on | | | |||
| | | | | | | | | | CONNECT | | | |||
| | HTTP_VERSION_FALLBACK | 0x0 | Retry over | Section 7.1 | | | | | request | | | |||
| | | 8 | HTTP/2 | | | | | | | | | |||
| | | | | | | | HTTP_EXCESSIVE_LOAD | 0x0 | Peer | Section 7.1 | | |||
| | HTTP_MALFORMED_HEADERS | 0x0 | Invalid | Section 7.1 | | | | 8 | generating | | | |||
| | | 9 | HEADERS | | | | | | excessive | | | |||
| | | | frame | | | | | | load | | | |||
| | | | | | | | | | | | | |||
| | HTTP_MALFORMED_PRIORITY | 0x0 | Invalid | Section 7.1 | | | HTTP_VERSION_FALLBACK | 0x0 | Retry over | Section 7.1 | | |||
| | | A | PRIORITY | | | | | 9 | HTTP/2 | | | |||
| | | | frame | | | | | | | | | |||
| | | | | | | | HTTP_MALFORMED_HEADERS | 0x0 | Invalid | Section 7.1 | | |||
| | HTTP_MALFORMED_SETTINGS | 0x0 | Invalid | Section 7.1 | | | | A | HEADERS | | | |||
| | | B | SETTINGS | | | | | | frame | | | |||
| | | | frame | | | | | | | | | |||
| | | | | | | | HTTP_MALFORMED_PRIORITY | 0x0 | Invalid | Section 7.1 | | |||
| | HTTP_MALFORMED_PUSH_PROMISE | 0x0 | Invalid | Section 7.1 | | | | B | PRIORITY | | | |||
| | | C | PUSH_PROMISE | | | | | | frame | | | |||
| | | | frame | | | | | | | | | |||
| | | | | | | | HTTP_MALFORMED_SETTINGS | 0x0 | Invalid | Section 7.1 | | |||
| | HTTP_MALFORMED_DATA | 0x0 | Invalid DATA | Section 7.1 | | | | C | SETTINGS | | | |||
| | | D | frame | | | | | | frame | | | |||
| | | | | | | | | | | | | |||
| | HTTP_INTERRUPTED_HEADERS | 0x0 | Incomplete | Section 7.1 | | | HTTP_MALFORMED_PUSH_PROMISE | 0x0 | Invalid PUS | Section 7.1 | | |||
| | | E | HEADERS | | | | | D | H_PROMISE | | | |||
| | | | block | | | | | | frame | | | |||
| | | | | | | | | | | | | |||
| | HTTP_WRONG_STREAM | 0x0 | A frame was | Section 7.1 | | | HTTP_MALFORMED_DATA | 0x0 | Invalid | Section 7.1 | | |||
| | | F | sent on the | | | | | E | DATA frame | | | |||
| | | | wrong stream | | | | | | | | | |||
| | | | | | | | HTTP_INTERRUPTED_HEADERS | 0x0 | Incomplete | Section 7.1 | | |||
| | HTTP_MULTIPLE_SETTINGS | 0x1 | Multiple | Section 7.1 | | | | F | HEADERS | | | |||
| | | 0 | SETTINGS | | | | | | block | | | |||
| | | | frames | | | | | | | | | |||
| | | | | | | | HTTP_WRONG_STREAM | 0x1 | A frame was | Section 7.1 | | |||
| | HTTP_MALFORMED_PUSH | 0x1 | Invalid push | Section 7.1 | | | | 0 | sent on the | | | |||
| | | 1 | stream | | | | | | wrong | | | |||
| | | | header | | | | | | stream | | | |||
| | | | | | | | | | | | | |||
| | HTTP_MALFORMED_MAX_PUSH_ID | 0x1 | Invalid | Section 7.1 | | | HTTP_MULTIPLE_SETTINGS | 0x1 | Multiple | Section 7.1 | | |||
| | | 2 | MAX_PUSH_ID | | | | | 1 | SETTINGS | | | |||
| | | | frame | | | | | | frames | | | |||
| +------------------------------+-----+--------------+---------------+ | | | | | | | |||
| | HTTP_MALFORMED_PUSH | 0x1 | Invalid | Section 7.1 | | ||||
| | | 2 | push stream | | | ||||
| | | | header | | | ||||
| | | | | | | ||||
| | HTTP_MALFORMED_MAX_PUSH_ID | 0x1 | Invalid | Section 7.1 | | ||||
| | | 3 | MAX_PUSH_ID | | | ||||
| | | | frame | | | ||||
| +-----------------------------+-----+-------------+-----------------+ | ||||
| 11. References | 11. References | |||
| 11.1. Normative References | 11.1. Normative References | |||
| [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", draft-ietf-quic- | Multiplexed and Secure Transport", draft-ietf-quic- | |||
| transport (work in progress), September 2017. | transport-07 (work in progress), October 2017. | |||
| [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, <https://www.rfc- | DOI 10.17487/RFC2119, March 1997, | |||
| editor.org/info/rfc2119>. | <https://www.rfc-editor.org/info/rfc2119>. | |||
| [RFC5234] Crocker, D., Ed. and P. Overell, "Augmented BNF for Syntax | [RFC5234] Crocker, D., Ed. and P. Overell, "Augmented BNF for Syntax | |||
| Specifications: ABNF", STD 68, RFC 5234, | Specifications: ABNF", STD 68, RFC 5234, | |||
| DOI 10.17487/RFC5234, January 2008, <https://www.rfc- | DOI 10.17487/RFC5234, January 2008, | |||
| editor.org/info/rfc5234>. | <https://www.rfc-editor.org/info/rfc5234>. | |||
| [RFC7230] Fielding, R., Ed. and J. Reschke, Ed., "Hypertext Transfer | [RFC7230] Fielding, R., Ed. and J. Reschke, Ed., "Hypertext Transfer | |||
| Protocol (HTTP/1.1): Message Syntax and Routing", | Protocol (HTTP/1.1): Message Syntax and Routing", | |||
| RFC 7230, DOI 10.17487/RFC7230, June 2014, | RFC 7230, DOI 10.17487/RFC7230, June 2014, | |||
| <https://www.rfc-editor.org/info/rfc7230>. | <https://www.rfc-editor.org/info/rfc7230>. | |||
| [RFC7231] Fielding, R., Ed. and J. Reschke, Ed., "Hypertext Transfer | [RFC7231] Fielding, R., Ed. and J. Reschke, Ed., "Hypertext Transfer | |||
| Protocol (HTTP/1.1): Semantics and Content", RFC 7231, | Protocol (HTTP/1.1): Semantics and Content", RFC 7231, | |||
| DOI 10.17487/RFC7231, June 2014, <https://www.rfc- | DOI 10.17487/RFC7231, June 2014, | |||
| editor.org/info/rfc7231>. | <https://www.rfc-editor.org/info/rfc7231>. | |||
| [RFC7540] Belshe, M., Peon, R., and M. Thomson, Ed., "Hypertext | [RFC7540] Belshe, M., Peon, R., and M. Thomson, Ed., "Hypertext | |||
| Transfer Protocol Version 2 (HTTP/2)", RFC 7540, | Transfer Protocol Version 2 (HTTP/2)", RFC 7540, | |||
| DOI 10.17487/RFC7540, May 2015, <https://www.rfc- | DOI 10.17487/RFC7540, May 2015, | |||
| editor.org/info/rfc7540>. | <https://www.rfc-editor.org/info/rfc7540>. | |||
| [RFC7541] Peon, R. and H. Ruellan, "HPACK: Header Compression for | [RFC7541] 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>. | |||
| [RFC7838] Nottingham, M., McManus, P., and J. Reschke, "HTTP | [RFC7838] 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>. | |||
| 11.2. Informative References | 11.2. Informative References | |||
| [RFC5226] Narten, T. and H. Alvestrand, "Guidelines for Writing an | ||||
| IANA Considerations Section in RFCs", RFC 5226, | ||||
| DOI 10.17487/RFC5226, May 2008, <https://www.rfc- | ||||
| editor.org/info/rfc5226>. | ||||
| [RFC7301] Friedl, S., Popov, A., Langley, A., and E. Stephan, | [RFC7301] Friedl, S., Popov, A., Langley, A., and E. Stephan, | |||
| "Transport Layer Security (TLS) Application-Layer Protocol | "Transport Layer Security (TLS) Application-Layer Protocol | |||
| Negotiation Extension", RFC 7301, DOI 10.17487/RFC7301, | Negotiation Extension", RFC 7301, DOI 10.17487/RFC7301, | |||
| July 2014, <https://www.rfc-editor.org/info/rfc7301>. | July 2014, <https://www.rfc-editor.org/info/rfc7301>. | |||
| [RFC8126] Cotton, M., Leiba, B., and T. Narten, "Guidelines for | ||||
| Writing an IANA Considerations Section in RFCs", BCP 26, | ||||
| RFC 8126, DOI 10.17487/RFC8126, June 2017, | ||||
| <https://www.rfc-editor.org/info/rfc8126>. | ||||
| 11.3. URIs | ||||
| [1] https://mailarchive.ietf.org/arch/search/?email_list=quic | ||||
| [2] https://github.com/quicwg | ||||
| [3] https://github.com/quicwg/base-drafts/labels/http | ||||
| Appendix A. Contributors | Appendix A. Contributors | |||
| The original authors of this specification were Robbie Shade and Mike | The original authors of this specification were Robbie Shade and Mike | |||
| Warres. | Warres. | |||
| 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-05 | B.1. Since draft-ietf-quic-http-06 | |||
| Nothing yet. | ||||
| B.2. Since draft-ietf-quic-http-05 | ||||
| o Made push ID sequential, add MAX_PUSH_ID, remove | o Made push ID sequential, add MAX_PUSH_ID, remove | |||
| SETTINGS_ENABLE_PUSH (#709) | SETTINGS_ENABLE_PUSH (#709) | |||
| o Guidance about keep-alive and QUIC PINGs (#729) | o Guidance about keep-alive and QUIC PINGs (#729) | |||
| o Expanded text on GOAWAY and cancellation (#757) | o Expanded text on GOAWAY and cancellation (#757) | |||
| B.2. Since draft-ietf-quic-http-04 | B.3. Since draft-ietf-quic-http-04 | |||
| o Cite RFC 5234 (#404) | o Cite RFC 5234 (#404) | |||
| o Return to a single stream per request (#245,#557) | o Return to a single stream per request (#245,#557) | |||
| o Use separate frame type and settings registries from HTTP/2 (#81) | o Use separate frame type and settings registries from HTTP/2 (#81) | |||
| o SETTINGS_ENABLE_PUSH instead of SETTINGS_DISABLE_PUSH (#477) | o SETTINGS_ENABLE_PUSH instead of SETTINGS_DISABLE_PUSH (#477) | |||
| o Restored GOAWAY (#696) | o Restored GOAWAY (#696) | |||
| o Identify server push using Push ID rather than a stream ID | o Identify server push using Push ID rather than a stream ID | |||
| (#702,#281) | (#702,#281) | |||
| o DATA frames cannot be empty (#700) | o DATA frames cannot be empty (#700) | |||
| B.3. Since draft-ietf-quic-http-03 | B.4. Since draft-ietf-quic-http-03 | |||
| None. | None. | |||
| B.4. Since draft-ietf-quic-http-02 | B.5. Since draft-ietf-quic-http-02 | |||
| o Track changes in transport draft | o Track changes in transport draft | |||
| B.5. Since draft-ietf-quic-http-01 | B.6. Since draft-ietf-quic-http-01 | |||
| o SETTINGS changes (#181): | o 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 | |||
| * Boolean format updated | * Boolean format updated | |||
| o Alt-Svc parameter changed from "v" to "quic"; format updated | o Alt-Svc parameter changed from "v" to "quic"; format updated | |||
| (#229) | (#229) | |||
| o Closing the connection control stream or any message control | o Closing the connection control stream or any message control | |||
| stream is a fatal error (#176) | stream is a fatal error (#176) | |||
| o HPACK Sequence counter can wrap (#173) | o HPACK Sequence counter can wrap (#173) | |||
| o 0-RTT guidance added | o 0-RTT guidance added | |||
| o Guide to differences from HTTP/2 and porting HTTP/2 extensions | o Guide to differences from HTTP/2 and porting HTTP/2 extensions | |||
| added (#127,#242) | added (#127,#242) | |||
| B.6. Since draft-ietf-quic-http-00 | B.7. Since draft-ietf-quic-http-00 | |||
| o Changed "HTTP/2-over-QUIC" to "HTTP/QUIC" throughout (#11,#29) | o Changed "HTTP/2-over-QUIC" to "HTTP/QUIC" throughout (#11,#29) | |||
| o Changed from using HTTP/2 framing within Stream 3 to new framing | o 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) | |||
| o Adopted SETTINGS format from draft-bishop-httpbis-extended- | o Adopted SETTINGS format from draft-bishop-httpbis-extended- | |||
| settings-01 | settings-01 | |||
| o Reworked SETTINGS_ACK to account for indeterminate inter-stream | o Reworked SETTINGS_ACK to account for indeterminate inter-stream | |||
| order (#75) | order (#75) | |||
| o Described CONNECT pseudo-method (#95) | o Described CONNECT pseudo-method (#95) | |||
| o Updated ALPN token and Alt-Svc guidance (#13,#87) | o Updated ALPN token and Alt-Svc guidance (#13,#87) | |||
| o Application-layer-defined error codes (#19,#74) | o Application-layer-defined error codes (#19,#74) | |||
| B.7. Since draft-shade-quic-http2-mapping-00 | B.8. Since draft-shade-quic-http2-mapping-00 | |||
| o Adopted as base for draft-ietf-quic-http | o Adopted as base for draft-ietf-quic-http | |||
| o Updated authors/editors list | o Updated authors/editors list | |||
| Author's Address | Author's Address | |||
| Mike Bishop (editor) | Mike Bishop (editor) | |||
| Microsoft | Microsoft | |||
| End of changes. 58 change blocks. | ||||
| 156 lines changed or deleted | 183 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/ | ||||