| 인터넷 엔지니어링 태스크 포스 (IETF) | R. Hamilton |
| Request for Comments: 9220 | |
| Category: Standards Track | 2022년 6월 |
| ISSN: 2070-1721 |
HTTP/3을 사용한 WebSockets 부트스트래핑
요약
HTTP/2 연결의 단일 스트림에서 WebSocket 프로토콜을 실행하는 메커니즘은 HTTP/3에도 동일하게 적용될 수 있으나, HTTP 버전별 세부사항은 명시될 필요가 있습니다. 이 문서는 해당 메커니즘이 HTTP/3에 어떻게 적응되는지를 설명합니다.
이 메모의 상태
이 문서는 인터넷 표준 트랙 문서입니다.
이 문서는 인터넷 엔지니어링 태스크 포스(IETF)의 산물입니다. 이 문서는 IETF 커뮤니티의 합의를 나타냅니다. 공개 검토를 거쳤으며 인터넷 엔지니어링 운영 그룹(IESG)의 출판 승인을 받았습니다. 인터넷 표준에 대한 추가 정보는 RFC 7841의 섹션 2에서 확인할 수 있습니다.
이 문서의 현재 상태, 정오표 및 이에 대한 피드백 제공 방법에 관한 정보는 https://www.rfc-editor.org/info/rfc9220에서 확인할 수 있습니다.
Copyright Notice
Copyright (c) 2022 IETF Trust and the persons identified as the document authors. All rights reserved.
This document is subject to BCP 78 and the IETF Trust's Legal Provisions Relating to IETF Documents (https://trustee.ietf.org/license-info) in effect on the date of publication of this document. Please review these documents carefully, as they describe your rights and restrictions with respect to this document. Code Components extracted from this document must include Revised BSD License text as described in Section 4.e of the Trust Legal Provisions and are provided without warranty as described in the Revised BSD License.
1. Introduction
"Bootstrapping WebSockets with HTTP/2" [RFC8441]는 HTTP/2에 대한 확장을 정의하며, 이 확장은 HTTP/3에서도 유용합니다([HTTP/2], [HTTP/3] 참조). 이 확장은 HTTP/2 설정을 사용합니다. Appendix A.3는 [HTTP/3]에서 HTTP/2의 설정을 HTTP/3으로 이식할 때 어떤 변경이 적절한지(있는 경우)에 대한 지침을 제공합니다.
2. Conventions and Definitions
3. WebSockets Upgrade over HTTP/3
[RFC8441]은 WebSocket 프로토콜([RFC6455])을 HTTP/2 연결의 단일 스트림에서 실행하는 메커니즘을 정의합니다. 이 문서는 새로운 ":protocol" 의사-헤더 필드와 ":path" 및 ":authority" 의사-헤더 필드에 대한 새로운 의미론을 지정하는 Extended CONNECT 메서드를 정의합니다. 또한 서버가 클라이언트가 Extended CONNECT를 사용할 수 있도록 허용하기 위해 전송하는 새로운 HTTP/2 설정을 정의합니다.
의사-헤더 필드와 설정의 의미론은 [RFC8441]에서 정의된 바와 동일합니다. Appendix A.3는 [HTTP/3]에서 HTTP/3 설정을 별도로 등록해야 함을 요구합니다. SETTINGS_ENABLE_CONNECT_PROTOCOL 값은 HTTP/2와 마찬가지로 0x08(10진수 8)입니다.
서버가 Extended CONNECT를 지원한다고 광고하지만, 수신한 Extended CONNECT 요청의 ":protocol" 값이 알 수 없거나 지원되지 않는 경우 서버는 요청에 501 (Not Implemented) 상태 코드를 응답해야 합니다(RFC 9110 섹션 15.6.2 참조). 서버는 [RFC7807]에 따른 "problem details" 응답을 통해 추가 정보를 제공할 수 있습니다.
HTTP/3 스트림 종료는 [RFC6455]의 TCP 연결 종료에 상응합니다. 정상적인 TCP 수준의 종료는 스트림의 FIN 비트로 표현됩니다(RFC 9114 섹션 4.4 참조). RST 예외는 스트림 오류(RFC 9114 섹션 8)로 표현되며, 오류 타입은 H3_REQUEST_CANCELLED입니다(RFC 9114 섹션 8.1 참조).
4. 보안 고려사항
이 문서는 [RFC8441]에서 논의된 것 이상의 새로운 보안 고려사항을 도입하지 않습니다.
5. IANA 고려사항
이 문서는 "HTTP/3 Settings" 레지스트리(RFC 9114 섹션 11.2.2) 에 새로운 설정을 등록합니다.
- Value:
-
0x08
- Setting Name:
-
SETTINGS_ENABLE_CONNECT_PROTOCOL
- Default:
-
0
- Status:
-
permanent
- Specification:
-
이 문서
- Change Controller:
-
IETF
- Contact:
-
HTTP Working Group (ietf-http-wg@w3.org)
6. 규범 참조
- [HTTP]
- Fielding, R., Ed., Nottingham, M., Ed., and J. Reschke, Ed., “HTTP Semantics”, STD 97, RFC 9110, DOI 10.17487/RFC9110, June 2022, <https://www.rfc-editor.org/info/rfc9110>.
- [HTTP/2]
- Thomson, M., Ed. and C. Benfield, Ed., “HTTP/2”, RFC 9113, DOI 10.17487/RFC9113, June 2022, <https://www.rfc-editor.org/info/rfc9113>.
- [HTTP/3]
- Bishop, M., Ed., “HTTP/3”, RFC 9114, DOI 10.17487/RFC9114, June 2022, <https://www.rfc-editor.org/info/rfc9114>.
- [RFC2119]
- Bradner, S., “Key words for use in RFCs to Indicate Requirement Levels”, BCP 14, RFC 2119, DOI 10.17487/RFC2119, March 1997, <https://www.rfc-editor.org/info/rfc2119>.
- [RFC6455]
- Fette, I. and A. Melnikov, “The WebSocket Protocol”, RFC 6455, DOI 10.17487/RFC6455, December 2011, <https://www.rfc-editor.org/info/rfc6455>.
- [RFC7807]
- Nottingham, M. and E. Wilde, “Problem Details for HTTP APIs”, RFC 7807, DOI 10.17487/RFC7807, March 2016, <https://www.rfc-editor.org/info/rfc7807>.
- [RFC8174]
- Leiba, B., “Ambiguity of Uppercase vs Lowercase in RFC 2119 Key Words”, BCP 14, RFC 8174, DOI 10.17487/RFC8174, May 2017, <https://www.rfc-editor.org/info/rfc8174>.
- [RFC8441]
- McManus, P., “Bootstrapping WebSockets with HTTP/2”, RFC 8441, DOI 10.17487/RFC8441, September 2018, <https://www.rfc-editor.org/info/rfc8441>.
감사의 글
이 문서는 IETF HTTP 및 QUIC 작업 그룹의 많은 기여자들로부터 검토와 입력을 받았으며, David Schinazi, Martin Thomson, Lucas Pardue, Mike Bishop, Dragana Damjanovic, Mark Nottingham, 및 Julian Reschke의 실질적인 입력을 포함합니다.