| rfc9220.original | rfc9220.txt | |||
|---|---|---|---|---|
| HTTP R. Hamilton | Internet Engineering Task Force (IETF) R. Hamilton | |||
| Internet-Draft Google | Request for Comments: 9220 Google | |||
| Intended status: Standards Track 8 February 2022 | Category: Standards Track June 2022 | |||
| Expires: 12 August 2022 | ISSN: 2070-1721 | |||
| Bootstrapping WebSockets with HTTP/3 | Bootstrapping WebSockets with HTTP/3 | |||
| draft-ietf-httpbis-h3-websockets-04 | ||||
| Abstract | Abstract | |||
| The mechanism for running the WebSocket Protocol over a single stream | The mechanism for running the WebSocket Protocol over a single stream | |||
| of an HTTP/2 connection is equally applicable to HTTP/3, but the HTTP | of an HTTP/2 connection is equally applicable to HTTP/3, but the | |||
| version-specific details need to be specified. This document | HTTP-version-specific details need to be specified. This document | |||
| describes how the mechanism is adapted for HTTP/3. | describes how the mechanism is adapted for HTTP/3. | |||
| About This Document | ||||
| This note is to be removed before publishing as an RFC. | ||||
| Status information for this document may be found at | ||||
| https://datatracker.ietf.org/doc/draft-ietf-httpbis-h3-websockets/. | ||||
| Discussion of this document takes place on the HTTP Working Group | ||||
| mailing list (mailto:ietf-http-wg@w3.org), which is archived at | ||||
| https://lists.w3.org/Archives/Public/ietf-http-wg/. Working Group | ||||
| information can be found at https://httpwg.org/. | ||||
| Source for this draft and an issue tracker can be found at | ||||
| https://github.com/httpwg/http-extensions/labels/h3-websockets. | ||||
| Status of This Memo | Status of This Memo | |||
| This Internet-Draft is submitted in full conformance with the | This is an Internet Standards Track document. | |||
| provisions of BCP 78 and BCP 79. | ||||
| Internet-Drafts are working documents of the Internet Engineering | ||||
| Task Force (IETF). Note that other groups may also distribute | ||||
| working documents as Internet-Drafts. The list of current Internet- | ||||
| Drafts is at https://datatracker.ietf.org/drafts/current/. | ||||
| Internet-Drafts are draft documents valid for a maximum of six months | This document is a product of the Internet Engineering Task Force | |||
| and may be updated, replaced, or obsoleted by other documents at any | (IETF). It represents the consensus of the IETF community. It has | |||
| time. It is inappropriate to use Internet-Drafts as reference | received public review and has been approved for publication by the | |||
| material or to cite them other than as "work in progress." | Internet Engineering Steering Group (IESG). Further information on | |||
| Internet Standards is available in Section 2 of RFC 7841. | ||||
| This Internet-Draft will expire on 12 August 2022. | Information about the current status of this document, any errata, | |||
| and how to provide feedback on it may be obtained at | ||||
| https://www.rfc-editor.org/info/rfc9220. | ||||
| Copyright Notice | Copyright Notice | |||
| Copyright (c) 2022 IETF Trust and the persons identified as the | Copyright (c) 2022 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 | |||
| license-info) in effect on the date of publication of this document. | (https://trustee.ietf.org/license-info) in effect on the date of | |||
| Please review these documents carefully, as they describe your rights | publication of this document. Please review these documents | |||
| and restrictions with respect to this document. Code Components | carefully, as they describe your rights and restrictions with respect | |||
| extracted from this document must include Revised BSD License text as | to this document. Code Components extracted from this document must | |||
| described in Section 4.e of the Trust Legal Provisions and are | include Revised BSD License text as described in Section 4.e of the | |||
| provided without warranty as described in the Revised BSD License. | Trust Legal Provisions and are provided without warranty as described | |||
| in the Revised BSD License. | ||||
| Table of Contents | Table of Contents | |||
| 1. Introduction . . . . . . . . . . . . . . . . . . . . . . . . 2 | 1. Introduction | |||
| 2. Conventions and Definitions . . . . . . . . . . . . . . . . . 2 | 2. Conventions and Definitions | |||
| 3. Websockets Upgrade over HTTP/3 . . . . . . . . . . . . . . . 3 | 3. WebSockets Upgrade over HTTP/3 | |||
| 4. Security Considerations . . . . . . . . . . . . . . . . . . . 3 | 4. Security Considerations | |||
| 5. IANA Considerations . . . . . . . . . . . . . . . . . . . . . 3 | 5. IANA Considerations | |||
| 6. Normative References . . . . . . . . . . . . . . . . . . . . 4 | 6. Normative References | |||
| Acknowledgments . . . . . . . . . . . . . . . . . . . . . . . . . 5 | Acknowledgments | |||
| Author's Address . . . . . . . . . . . . . . . . . . . . . . . . 5 | Author's Address | |||
| 1. Introduction | 1. Introduction | |||
| "Bootstrapping WebSockets with HTTP/2" [RFC8441] defines an extension | "Bootstrapping WebSockets with HTTP/2" [RFC8441] defines an extension | |||
| to HTTP/2 [HTTP2] which is also useful in HTTP/3 [HTTP3]. This | to HTTP/2 [HTTP/2] that is also useful in HTTP/3 [HTTP/3]. This | |||
| extension makes use of an HTTP/2 setting. Appendix A.3 of [HTTP3] | extension makes use of an HTTP/2 setting. Appendix A.3 of [HTTP/3] | |||
| gives some guidance on what changes (if any) are appropriate when | gives some guidance on what changes (if any) are appropriate when | |||
| porting settings from HTTP/2 to HTTP/3. | porting settings from HTTP/2 to HTTP/3. | |||
| 2. Conventions and Definitions | 2. Conventions and Definitions | |||
| The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", | The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", | |||
| "SHOULD", "SHOULD NOT", "RECOMMENDED", "NOT RECOMMENDED", "MAY", and | "SHOULD", "SHOULD NOT", "RECOMMENDED", "NOT RECOMMENDED", "MAY", and | |||
| "OPTIONAL" in this document are to be interpreted as described in | "OPTIONAL" in this document are to be interpreted as described in | |||
| BCP 14 [RFC2119] [RFC8174] when, and only when, they appear in all | BCP 14 [RFC2119] [RFC8174] when, and only when, they appear in all | |||
| capitals, as shown here. | capitals, as shown here. | |||
| 3. Websockets Upgrade over HTTP/3 | 3. WebSockets Upgrade over HTTP/3 | |||
| [RFC8441] defines a mechanism for running the WebSocket Protocol | [RFC8441] defines a mechanism for running the WebSocket Protocol | |||
| [RFC6455] over a single stream of an HTTP/2 connection. It defines | [RFC6455] over a single stream of an HTTP/2 connection. It defines | |||
| an Extended CONNECT method which specifies a new ":protocol" pseudo- | an Extended CONNECT method that specifies a new ":protocol" pseudo- | |||
| header field and new semantics for the ":path" and ":authority" | header field and new semantics for the ":path" and ":authority" | |||
| pseudo-header fields. It also defines a new HTTP/2 setting sent by a | pseudo-header fields. It also defines a new HTTP/2 setting sent by a | |||
| server to allow the client to use Extended CONNECT. | server to allow the client to use Extended CONNECT. | |||
| The semantics of the pseudo-header fields and setting are identical | The semantics of the pseudo-header fields and setting are identical | |||
| to those in HTTP/2 as defined [RFC8441]. Appendix A.3 of [HTTP3] | to those in HTTP/2 as defined in [RFC8441]. Appendix A.3 of [HTTP/3] | |||
| requires that HTTP/3 settings be registered separately for HTTP/3. | requires that HTTP/3 settings be registered separately for HTTP/3. | |||
| The SETTINGS_ENABLE_CONNECT_PROTOCOL value is 0x08 (decimal 8), as in | The SETTINGS_ENABLE_CONNECT_PROTOCOL value is 0x08 (decimal 8), as in | |||
| HTTP/2. | HTTP/2. | |||
| If a server advertises support for Extended CONNECT but receives an | If a server advertises support for Extended CONNECT but receives an | |||
| Extended CONNECT request with a ":protocol" value that is unknown or | Extended CONNECT request with a ":protocol" value that is unknown or | |||
| is not supported, the server SHOULD respond to the request with a 501 | is not supported, the server SHOULD respond to the request with a 501 | |||
| (Not Implemented) status code (Section 15.6.2 of [HTTP]). A server | (Not Implemented) status code (Section 15.6.2 of [HTTP]). A server | |||
| MAY provide more information via a Problem Details response | MAY provide more information via a "problem details" response | |||
| [RFC7807]. | [RFC7807]. | |||
| The HTTP/3 stream closure is also analogous to the TCP connection | The HTTP/3 stream closure is also analogous to the TCP connection | |||
| closure of [RFC6455]. Orderly TCP-level closures are represented as | closure of [RFC6455]. Orderly TCP-level closures are represented as | |||
| a FIN bit on the stream (Section 4.2 of [HTTP3]). RST exceptions are | a FIN bit on the stream (Section 4.4 of [HTTP/3]). RST exceptions | |||
| represented with a stream error (Section 8 of [HTTP3]) of type | are represented with a stream error (Section 8 of [HTTP/3]) of type | |||
| H3_REQUEST_CANCELLED (Section 8.1 of [HTTP3]). | H3_REQUEST_CANCELLED (Section 8.1 of [HTTP/3]). | |||
| 4. Security Considerations | 4. Security Considerations | |||
| This document introduces no new security considerations beyond those | This document introduces no new security considerations beyond those | |||
| discussed in [RFC8441]. | discussed in [RFC8441]. | |||
| 5. IANA Considerations | 5. IANA Considerations | |||
| This document registers a new setting in the "HTTP/3 Settings" | This document registers a new setting in the "HTTP/3 Settings" | |||
| registry (Section 11.2.2 of [HTTP3]). | registry (Section 11.2.2 of [HTTP/3]). | |||
| Value: 0x08 | Value: 0x08 | |||
| Setting Name: SETTINGS_ENABLE_CONNECT_PROTOCOL | Setting Name: SETTINGS_ENABLE_CONNECT_PROTOCOL | |||
| Default: 0 | Default: 0 | |||
| Status: permanent | Status: permanent | |||
| Specification: This document | ||||
| Specification: This Document | ||||
| Date: [ date of publication ] | ||||
| Change Controller: IETF | Change Controller: IETF | |||
| Contact: HTTP Working Group (ietf-http-wg@w3.org) | Contact: HTTP Working Group (ietf-http-wg@w3.org) | |||
| Notes: | ||||
| 6. Normative References | 6. Normative References | |||
| [HTTP] Fielding, R. T., Nottingham, M., and J. Reschke, "HTTP | [HTTP] Fielding, R., Ed., Nottingham, M., Ed., and J. Reschke, | |||
| Semantics", Work in Progress, Internet-Draft, draft-ietf- | Ed., "HTTP Semantics", STD 97, RFC 9110, | |||
| httpbis-semantics-19, 12 September 2021, | DOI 10.17487/RFC9110, June 2022, | |||
| <https://datatracker.ietf.org/doc/html/draft-ietf-httpbis- | <https://www.rfc-editor.org/info/rfc9110>. | |||
| semantics-19>. | ||||
| [HTTP2] Thomson, M. and C. Benfield, "HTTP/2", Work in Progress, | [HTTP/2] Thomson, M., Ed. and C. Benfield, Ed., "HTTP/2", RFC 9113, | |||
| Internet-Draft, draft-ietf-httpbis-http2bis-07, 24 January | DOI 10.17487/RFC9113, June 2022, | |||
| 2022, <https://datatracker.ietf.org/doc/html/draft-ietf- | <https://www.rfc-editor.org/info/rfc9113>. | |||
| httpbis-http2bis-07>. | ||||
| [HTTP3] Bishop, M., "Hypertext Transfer Protocol Version 3 | [HTTP/3] Bishop, M., Ed., "HTTP/3", RFC 9114, DOI 10.17487/RFC9114, | |||
| (HTTP/3)", Work in Progress, Internet-Draft, draft-ietf- | June 2022, <https://www.rfc-editor.org/info/rfc9114>. | |||
| quic-http-34, 2 February 2021, | ||||
| <https://datatracker.ietf.org/doc/html/draft-ietf-quic- | ||||
| http-34>. | ||||
| [RFC2119] Bradner, S., "Key words for use in RFCs to Indicate | [RFC2119] Bradner, S., "Key words for use in RFCs to Indicate | |||
| Requirement Levels", BCP 14, RFC 2119, | Requirement Levels", BCP 14, RFC 2119, | |||
| DOI 10.17487/RFC2119, March 1997, | DOI 10.17487/RFC2119, March 1997, | |||
| <https://www.rfc-editor.org/rfc/rfc2119>. | <https://www.rfc-editor.org/info/rfc2119>. | |||
| [RFC6455] Fette, I. and A. Melnikov, "The WebSocket Protocol", | [RFC6455] Fette, I. and A. Melnikov, "The WebSocket Protocol", | |||
| RFC 6455, DOI 10.17487/RFC6455, December 2011, | RFC 6455, DOI 10.17487/RFC6455, December 2011, | |||
| <https://www.rfc-editor.org/rfc/rfc6455>. | <https://www.rfc-editor.org/info/rfc6455>. | |||
| [RFC7807] Nottingham, M. and E. Wilde, "Problem Details for HTTP | [RFC7807] Nottingham, M. and E. Wilde, "Problem Details for HTTP | |||
| APIs", RFC 7807, DOI 10.17487/RFC7807, March 2016, | APIs", RFC 7807, DOI 10.17487/RFC7807, March 2016, | |||
| <https://www.rfc-editor.org/rfc/rfc7807>. | <https://www.rfc-editor.org/info/rfc7807>. | |||
| [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/rfc/rfc8174>. | May 2017, <https://www.rfc-editor.org/info/rfc8174>. | |||
| [RFC8441] McManus, P., "Bootstrapping WebSockets with HTTP/2", | [RFC8441] McManus, P., "Bootstrapping WebSockets with HTTP/2", | |||
| RFC 8441, DOI 10.17487/RFC8441, September 2018, | RFC 8441, DOI 10.17487/RFC8441, September 2018, | |||
| <https://www.rfc-editor.org/rfc/rfc8441>. | <https://www.rfc-editor.org/info/rfc8441>. | |||
| Acknowledgments | Acknowledgments | |||
| This document had reviews and input from many contributors in the | This document had reviews and input from many contributors in the | |||
| IETF HTTP and QUIC Working Groups, with substantive input from David | IETF HTTP and QUIC Working Groups, with substantive input from David | |||
| Schinazi, Martin Thomson, Lucas Pardue, Mike Bishop, Dragana | Schinazi, Martin Thomson, Lucas Pardue, Mike Bishop, Dragana | |||
| Damjanovic, Mark Nottingham, and Julian Reschke. | Damjanovic, Mark Nottingham, and Julian Reschke. | |||
| Author's Address | Author's Address | |||
| End of changes. 30 change blocks. | ||||
| 88 lines changed or deleted | 56 lines changed or added | |||
This html diff was produced by rfcdiff 1.48. The latest version is available from http://tools.ietf.org/tools/rfcdiff/ | ||||