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/ |