| ์ธํฐ๋ท ์์ง๋์ด๋ง ํ์คํฌ ํฌ์ค (IETF) | M. Bishop, ํธ์ง์ |
| ์์ฒญ ์๊ฒฌ(Request for Comments): 9114 | Akamai |
| ๋ถ๋ฅ: ํ์ค ํธ๋ | 2022๋ 6์ |
| ISSN: 2070-1721 |
HTTP/3
์์ฝ
QUIC ์ ์ก ํ๋กํ ์ฝ์ ์คํธ๋ฆผ ๋ค์คํ, ์คํธ๋ฆผ๋ณ ํ๋ฆ ์ ์ด, ์ ์ง์ฐ ์ฐ๊ฒฐ ์๋ฆฝ๊ณผ ๊ฐ์ด HTTP ์ ์ก์์ ๋ฐ๋์งํ ์ฌ๋ฌ ๊ธฐ๋ฅ์ ์ ๊ณตํฉ๋๋ค. ์ด ๋ฌธ์๋ QUIC ์์์์ HTTP ์๋ฏธ ๋งคํ์ ์ค๋ช ํฉ๋๋ค. ๋ํ ์ด ๋ฌธ์๋ QUIC์ ์ํด ํฌํจ๋ HTTP/2 ๊ธฐ๋ฅ๋ค์ ์๋ณํ๊ณ HTTP/2 ํ์ฅ ๊ธฐ๋ฅ์ HTTP/3๋ก ์ด์ํ๋ ๋ฐฉ๋ฒ์ ์ค๋ช ํฉ๋๋ค.
์ด ๋ฉ๋ชจ์ ์ํ
์ด ๋ฌธ์๋ ์ธํฐ๋ท ํ์ค ํธ๋ ๋ฌธ์์ ๋๋ค.
์ด ๋ฌธ์๋ ์ธํฐ๋ท ์์ง๋์ด๋ง ํ์คํฌ ํฌ์ค(IETF)์ ์ฐ๋ฌผ์ ๋๋ค. ์ด๋ IETF ์ปค๋ฎค๋ํฐ์ ํฉ์๋ฅผ ๋ํ๋ ๋๋ค. ๊ณต๊ฐ ๊ฒํ ๋ฅผ ๊ฑฐ์ณค์ผ๋ฉฐ ์ธํฐ๋ท ์์ง๋์ด๋ง ์ด์ ๊ทธ๋ฃน(IESG)์ ์ํด ์ถํ ์น์ธ์ ๋ฐ์์ต๋๋ค. ์ธํฐ๋ท ํ์ค์ ๊ดํ ์ถ๊ฐ ์ ๋ณด๋ RFC 7841์ ์น์ 2์์ ํ์ธํ ์ ์์ต๋๋ค.
์ด ๋ฌธ์์ ํ์ฌ ์ํ, ์ ์คํ ๋ฐ ํผ๋๋ฐฑ ์ ๊ณต ๋ฐฉ๋ฒ์ ๋ํ ์ ๋ณด๋ https://www.rfc-editor.org/info/rfc9114์์ ์ป์ ์ ์์ต๋๋ค.
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. ์๊ฐ
- 2. HTTP/3 ํ๋กํ ์ฝ ๊ฐ์
- 3. ์ฐ๊ฒฐ ์ค์ ๋ฐ ๊ด๋ฆฌ
- 4. HTTP/3์์ HTTP ์๋ฏธ ํํ
- 5. ์ฐ๊ฒฐ ์ข ๋ฃ
- 6. ์คํธ๋ฆผ ๋งคํ ๋ฐ ์ฌ์ฉ
- 7. HTTP ํ๋ ์ด๋ฐ ๊ณ์ธต
- 8. ์ค๋ฅ ์ฒ๋ฆฌ
- 9. HTTP/3 ํ์ฅ
- 10. ๋ณด์
๊ณ ๋ ค์ฌํญ
- 10.1. ์๋ฒ ๊ถํ
- 10.2. ๊ต์ฐจ ํ๋กํ ์ฝ ๊ณต๊ฒฉ
- 10.3. ์ค๊ฐ์ ์บก์ํ ๊ณต๊ฒฉ
- 10.4. ํธ์๋ ์๋ต์ ์บ์ ๊ฐ๋ฅ์ฑ
- 10.5. ์๋น์ค ๊ฑฐ๋ถ(DoS) ๊ณ ๋ ค์ฌํญ
- 10.6. ์์ถ ์ฌ์ฉ
- 10.7. ํจ๋ฉ ๋ฐ ํธ๋ํฝ ๋ถ์
- 10.8. ํ๋ ์ ํ์ฑ
- 10.9. ์กฐ๊ธฐ ๋ฐ์ดํฐ
- 10.10. ๋ง์ด๊ทธ๋ ์ด์
- 10.11. ํ๋ผ์ด๋ฒ์ ๊ณ ๋ ค์ฌํญ
- 11. IANA ๊ณ ๋ ค์ฌํญ
- 12. ์ฐธ๊ณ ๋ฌธํ
- Appendix A. HTTP/2์์ ์ ํํ๊ธฐ ์ํ ๊ณ ๋ ค์ฌํญ
- ๊ฐ์ฌ์ ๊ธ
- ์์ธ
- ์ ์ ์ฃผ์
1. ์๊ฐ
HTTP ์๋ฏธ๋ก ([HTTP])์ ์ธํฐ๋ท์์ ๊ด๋ฒ์ํ ์๋น์ค์ ์ฌ์ฉ๋ฉ๋๋ค. ์ด๋ฌํ ์๋ฏธ๋ก ์ ๋ณดํต HTTP/1.1 ๋ฐ HTTP/2์ ํจ๊ป ์ฌ์ฉ๋์์ต๋๋ค. HTTP/1.1์ ๋ค์ํ ์ ์ก ๋ฐ ์ธ์ ๊ณ์ธต ์์์ ์ฌ์ฉ๋์ด ์๊ณ , HTTP/2๋ ์ฃผ๋ก TLS ์์ TCP์ ํจ๊ป ์ฌ์ฉ๋์ด ์์ต๋๋ค. HTTP/3์ ๋์ผํ ์๋ฏธ๋ก ์ ์๋ก์ด ์ ์ก ํ๋กํ ์ฝ์ธ QUIC ์์์ ์ง์ํฉ๋๋ค.
1.1. HTTP์ ์ด์ ๋ฒ์
HTTP/1.1 ([HTTP/1.1])์ ๊ณต๋ฐฑ์ผ๋ก ๊ตฌ๋ถ๋ ํ ์คํธ ํ๋๋ฅผ ์ฌ์ฉํ์ฌ HTTP ๋ฉ์์ง๋ฅผ ์ ๋ฌํฉ๋๋ค. ์ด๋ฌํ ๊ตํ์ ์ฌ๋์ด ์ฝ์ ์ ์์ง๋ง, ๋ฉ์์ง ํฌ๋งท์ ๊ณต๋ฐฑ์ ์ฌ์ฉํ๋ ๊ฒ์ ํ์ฑ ๋ณต์ก์ฑ๊ณผ ๋ณํ๋ ๋์์ ๋ํ ๊ณผ๋ํ ๊ด์ฉ์ผ๋ก ์ด์ด์ง๋๋ค.
HTTP/1.1์๋ ๋ค์คํ ๊ณ์ธต์ด ํฌํจ๋์ด ์์ง ์๊ธฐ ๋๋ฌธ์, ์ฌ๋ฌ TCP ์ฐ๊ฒฐ์ด ๋ณ๋ ฌ๋ก ์์ฒญ์ ์ฒ๋ฆฌํ๋ ๋ฐ ์์ฃผ ์ฌ์ฉ๋ฉ๋๋ค. ๊ทธ๋ฌ๋ TCP๊ฐ ์ฌ๋ฌ ์ฐ๊ฒฐ ๊ฐ์ ํผ์ก ์ ์ด๋ฅผ ๊ณต์ ํ์ง ์๊ธฐ ๋๋ฌธ์ ์ด๋ ํผ์ก ์ ์ด ๋ฐ ๋คํธ์ํฌ ํจ์จ์ฑ์ ๋ถ์ ์ ์ธ ์ํฅ์ ์ค๋๋ค.
HTTP/2 ([HTTP/2])๋ ์ ์ก ๊ณ์ธต์ ๋ณ๊ฒฝํ์ง ์๊ณ ์ง์ฐ ์๊ฐ์ ๊ฐ์ ํ๊ธฐ ์ํด ์ด์ง ํ๋ ์ด๋ฐ ๋ฐ ๋ค์คํ ๊ณ์ธต์ ๋์ ํ์ต๋๋ค. ๊ทธ๋ฌ๋ HTTP/2์ ๋ณ๋ ฌ์ ๋ค์คํ ํน์ฑ์ TCP์ ์์ค ๋ณต๊ตฌ ๋ฉ์ปค๋์ฆ์ ๋ณด์ด์ง ์๊ธฐ ๋๋ฌธ์, ํจํท ์์ค์ด๋ ์ฌ์ ๋ ฌ์ด ๋ฐ์ํ๋ฉด ํด๋น ์์ค ํจํท๊ณผ ์ง์ ์ ์ธ ๊ด๋ จ์ด ์๋ ํ์ฑ ํธ๋์ญ์ ๋ค๋ ์ ์ง(stall)๋ฅผ ๊ฒช๊ฒ ๋ฉ๋๋ค.
1.2. QUIC๋ก์ ์์
QUIC ์ ์ก ํ๋กํ ์ฝ์ HTTP/2 ํ๋ ์ด๋ฐ ๊ณ์ธต์ด ์ ๊ณตํ๋ ๊ฒ๊ณผ ์ ์ฌํ ์คํธ๋ฆผ ๋ค์คํ ๋ฐ ์คํธ๋ฆผ๋ณ ํ๋ฆ ์ ์ด๋ฅผ ํตํฉํฉ๋๋ค. ์คํธ๋ฆผ ์์ค์ ์ ๋ขฐ์ฑ(reliability)๊ณผ ์ฐ๊ฒฐ ์ ์ฒด์ ๋ํ ํผ์ก ์ ์ด๋ฅผ ์ ๊ณตํจ์ผ๋ก์จ, QUIC๋ TCP ๋งคํ๊ณผ ๋น๊ตํ์ฌ HTTP ์ฑ๋ฅ์ ๊ฐ์ ํ ์ ์๋ ๋ฅ๋ ฅ์ ๊ฐ์ง๋๋ค. QUIC์ ๋ํ ์ ์ก ๊ณ์ธต์์ TLS 1.3([TLS])์ ํตํฉํ์ฌ, TCP ์์์ TLS๋ฅผ ์คํํ๋ ๊ฒ๊ณผ ์ ์ฌํ ๊ธฐ๋ฐ์ฑ ๋ฐ ๋ฌด๊ฒฐ์ฑ์ ์ ๊ณตํ๋ฉด์ TCP Fast Open([TFO])์ ํฅ์๋ ์ฐ๊ฒฐ ์ค์ ์ง์ฐ์ ์ ๊ณตํฉ๋๋ค.
์ด ๋ฌธ์๋ QUIC ์ ์ก ํ๋กํ ์ฝ ์์์์ HTTP ์๋ฏธ๋ก ๋งคํ์ธ HTTP/3๋ฅผ ์ ์ํ๋ฉฐ, ์ค๊ณ๋ HTTP/2์ ํฌ๊ฒ ์์กดํฉ๋๋ค. HTTP/3๋ ๋ฐ์ดํฐ์ ๊ธฐ๋ฐ์ฑ๊ณผ ๋ฌด๊ฒฐ์ฑ ๋ณดํธ, ํผ์ด ์ธ์ฆ, ๊ทธ๋ฆฌ๊ณ ์คํธ๋ฆผ๋ณ๋ก ์ ๋ขฐํ ์ ์๊ณ ์์ํ๋ ์ ๋ฌ์ ์ ๊ณตํ๊ธฐ ์ํด QUIC์ ์์กดํฉ๋๋ค. ์คํธ๋ฆผ ์๋ช ๋ฐ ํ๋ฆ ์ ์ด ๋ฌธ์ ๋ฅผ QUIC์ ์์ํ๋ ๋์์๋, ๊ฐ ์คํธ๋ฆผ์์๋ HTTP/2 ํ๋ ์ด๋ฐ๊ณผ ์ ์ฌํ ์ด์ง ํ๋ ์ด๋ฐ์ด ์ฌ์ฉ๋ฉ๋๋ค. ์ผ๋ถ HTTP/2 ๊ธฐ๋ฅ์ QUIC์ ์ํด ํฌํจ(subsumed)๋๋ฉฐ, ๋ค๋ฅธ ๊ธฐ๋ฅ๋ค์ QUIC ์์ ๊ตฌํ๋ฉ๋๋ค.
QUIC์ [QUIC-TRANSPORT]์์ ์ค๋ช ๋ฉ๋๋ค. HTTP/2์ ์ ์ฒด ์ค๋ช ์ [HTTP/2]๋ฅผ ์ฐธ์กฐํ์ญ์์ค.
2. HTTP/3 ํ๋กํ ์ฝ ๊ฐ์
HTTP/3๋ QUIC ์ ์ก ํ๋กํ ์ฝ๊ณผ HTTP/2์ ์ ์ฌํ ๋ด๋ถ ํ๋ ์ด๋ฐ ๊ณ์ธต์ ์ฌ์ฉํ์ฌ HTTP ์๋ฏธ๋ก ์ ์ํ ์ ์ก์ ์ ๊ณตํฉ๋๋ค.
ํด๋ผ์ด์ธํธ๊ฐ ํน์ ์๋ํฌ์ธํธ์ HTTP/3 ์๋ฒ๊ฐ ์กด์ฌํ๋ค๋ ๊ฒ์ ์๊ฒ ๋๋ฉด QUIC ์ฐ๊ฒฐ์ ์ฝ๋๋ค. QUIC์ ํ๋กํ ์ฝ ํ์, ์คํธ๋ฆผ ๊ธฐ๋ฐ ๋ค์คํ ๋ฐ ํ๋ฆ ์ ์ด๋ฅผ ์ ๊ณตํฉ๋๋ค. HTTP/3 ์๋ํฌ์ธํธ์ ๊ฒ์์ ์น์ 3.1์ ์ค๋ช ๋์ด ์์ต๋๋ค.
๊ฐ ์คํธ๋ฆผ ๋ด์์ HTTP/3 ํต์ ์ ๊ธฐ๋ณธ ๋จ์๋ ํ๋ ์(์น์ 7.2)์ ๋๋ค. ๊ฐ ํ๋ ์ ์ ํ์ ์๋ก ๋ค๋ฅธ ๋ชฉ์ ์ ๊ฐ์ง๋๋ค. ์๋ฅผ ๋ค์ด, HEADERS ๋ฐ DATA ํ๋ ์์ HTTP ์์ฒญ๊ณผ ์๋ต์ ๊ธฐ์ด๋ฅผ ํ์ฑํฉ๋๋ค(์น์ 4.1). ์ฐ๊ฒฐ ์ ์ฒด์ ์ ์ฉ๋๋ ํ๋ ์์ ์ ์ฉ ์ ์ด ์คํธ๋ฆผ์์ ์ ๋ฌ๋ฉ๋๋ค.
์์ฒญ์ ๋ค์คํ๋ QUIC ์คํธ๋ฆผ ์ถ์ํ๋ฅผ ์ฌ์ฉํ์ฌ ์ํ๋๋ฉฐ, ์ด๋ ์น์ 2์ [QUIC-TRANSPORT]์ ์ค๋ช ๋์ด ์์ต๋๋ค. ๊ฐ ์์ฒญ-์๋ต ์์ ๋จ์ผ QUIC ์คํธ๋ฆผ์ ์๋นํฉ๋๋ค. ์คํธ๋ฆผ๋ค์ ์๋ก ๋ ๋ฆฝ์ ์ด๋ฏ๋ก, ํ๋์ ์คํธ๋ฆผ์ด ์ฐจ๋จ๋๊ฑฐ๋ ํจํท ์์ค์ ๊ฒช๋๋ผ๋ ๋ค๋ฅธ ์คํธ๋ฆผ์ ์งํ์ ๋ฐฉํดํ์ง ์์ต๋๋ค.
์๋ฒ ํธ์๋ HTTP/2([HTTP/2])์์ ๋์ ๋ ์ํธ์์ฉ ๋ชจ๋๋ก์, ์๋ฒ๊ฐ ํด๋ผ์ด์ธํธ๊ฐ ํด๋น ์์ฒญ์ ํ ๊ฒ์ผ๋ก ์์ํ์ฌ ์์ฒญ-์๋ต ๊ตํ์ ํด๋ผ์ด์ธํธ๋ก ํธ์ํ ์ ์๊ฒ ํ์ฉํฉ๋๋ค. ์ด๋ ์ ์ฌ์ ์ง์ฐ ๊ฐ์ ์ ์ํด ๋คํธ์ํฌ ์ฌ์ฉ์ ๊ฑฐ๋(trade-off)ํ๋ ๊ฒ์ ๋๋ค. ์๋ฒ ํธ์๋ฅผ ๊ด๋ฆฌํ๊ธฐ ์ํด PUSH_PROMISE, MAX_PUSH_ID, ๋ฐ CANCEL_PUSH์ ๊ฐ์ ์ฌ๋ฌ HTTP/3 ํ๋ ์์ด ์ฌ์ฉ๋ฉ๋๋ค.
HTTP/2์์์ ๊ฐ์ด ์์ฒญ ๋ฐ ์๋ต ํ๋๋ ์ ์ก์ ์ํด ์์ถ๋ฉ๋๋ค. HPACK([HPACK])์ ์์ถ๋ ํ๋ ์น์ ์ ์์ฐจ์ ์ ์ก์ ์์กดํ๋๋ฐ(์ด๋ QUIC์ด ๋ณด์ฅํ์ง ์๋ ํน์ฑ), HTTP/3๋ HPACK์ QPACK([QPACK])์ผ๋ก ๋์ฒดํฉ๋๋ค. QPACK์ ํ๋ ํ ์ด๋ธ ์ํ๋ฅผ ์์ ํ๊ณ ์ถ์ ํ๊ธฐ ์ํด ๋ณ๋์ ๋จ๋ฐฉํฅ ์คํธ๋ฆผ์ ์ฌ์ฉํ๊ณ , ์ธ์ฝ๋ฉ๋ ํ๋ ์น์ ์ ํ ์ด๋ธ์ ์์ ํ์ง ์๊ณ ๊ทธ ์ํ๋ฅผ ์ฐธ์กฐํฉ๋๋ค.
2.1. ๋ฌธ์ ๊ตฌ์ฑ
๋ค์ ์น์ ๋ค์ HTTP/3 ์ฐ๊ฒฐ์ ์๋ช ์ฃผ๊ธฐ์ ๋ํ ์์ธํ ๊ฐ์๋ฅผ ์ ๊ณตํฉ๋๋ค:
- "์ฐ๊ฒฐ ์ค์ ๋ฐ ๊ด๋ฆฌ" (์น์ 3)์ HTTP/3 ์๋ํฌ์ธํธ๊ฐ ์ด๋ป๊ฒ ๊ฒ์๋๊ณ HTTP/3 ์ฐ๊ฒฐ์ด ์ด๋ป๊ฒ ์๋ฆฝ๋๋์ง๋ฅผ ๋ค๋ฃน๋๋ค.
- "HTTP/3์์ HTTP ์๋ฏธ ํํ" (์น์ 4)์ ํ๋ ์์ ์ฌ์ฉํ์ฌ HTTP ์๋ฏธ๋ก ์ด ์ด๋ป๊ฒ ํํ๋๋์ง๋ฅผ ์ค๋ช ํฉ๋๋ค.
- "์ฐ๊ฒฐ ์ข ๋ฃ" (์น์ 5)์ HTTP/3 ์ฐ๊ฒฐ์ด ์ ์์ ์ผ๋ก ๋๋ ๊ฐ์์ค๋ฝ๊ฒ ์ด๋ป๊ฒ ์ข ๋ฃ๋๋์ง๋ฅผ ์ค๋ช ํฉ๋๋ค.
์์ด์ด ํ๋กํ ์ฝ์ ์ธ๋ถ์ฌํญ๊ณผ ์ ์ก๊ณผ์ ์ํธ์์ฉ์ ์ดํ ์น์ ๋ค์์ ์ค๋ช ๋ฉ๋๋ค:
- "์คํธ๋ฆผ ๋งคํ ๋ฐ ์ฌ์ฉ" (์น์ 6)์ QUIC ์คํธ๋ฆผ์ด ์ฌ์ฉ๋๋ ๋ฐฉ์์ ์ค๋ช ํฉ๋๋ค.
- "HTTP ํ๋ ์ด๋ฐ ๊ณ์ธต" (์น์ 7)์ ๋๋ถ๋ถ์ ์คํธ๋ฆผ์์ ์ฌ์ฉ๋๋ ํ๋ ์๋ค์ ์ค๋ช ํฉ๋๋ค.
- "์ค๋ฅ ์ฒ๋ฆฌ" (์น์ 8)์ ํน์ ์คํธ๋ฆผ ๋๋ ์ฐ๊ฒฐ ์ ์ฒด์ ๋ํด ์ค๋ฅ ์ํ๊ฐ ์ด๋ป๊ฒ ์ฒ๋ฆฌ๋๊ณ ํํ๋๋์ง๋ฅผ ์ค๋ช ํฉ๋๋ค.
์ถ๊ฐ ์์์ ๋ฌธ์์ ๋ง์ง๋ง ์น์ ๋ค์ ์ ๊ณต๋ฉ๋๋ค:
- "HTTP/3 ํ์ฅ" (์น์ 9)์ ํฅํ ๋ฌธ์์์ ์๋ก์ด ๊ธฐ๋ฅ์ ์ด๋ป๊ฒ ์ถ๊ฐํ ์ ์๋์ง๋ฅผ ์ค๋ช ํฉ๋๋ค.
- HTTP/2์ HTTP/3 ๊ฐ์ ๋ณด๋ค ์์ธํ ๋น๊ต๋ ๋ถ๋ก A์์ ์ฐพ์ ์ ์์ต๋๋ค.
2.2. ๊ด๋ก ๋ฐ ์ฉ์ด
์ด ๋ฌธ์์์ ํค์๋ "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", "SHOULD", "SHOULD NOT", "RECOMMENDED", "NOT RECOMMENDED", "MAY", ๋ฐ "OPTIONAL"์ ๋ชจ๋ ๋๋ฌธ์๋ก ๋ํ๋๋ ๊ฒฝ์ฐ์ ํํด BCP 14์ [RFC2119] ๋ฐ [RFC8174]์ ์ค๋ช ๋ ๋๋ก ํด์๋ฉ๋๋ค.
์ด ๋ฌธ์๋ [QUIC-TRANSPORT]์์ ์ฌ์ฉ๋๋ ๊ฐ๋ณ ๊ธธ์ด ์ ์ ์ธ์ฝ๋ฉ์ ์ฌ์ฉํฉ๋๋ค.
๋ค์ ์ฉ์ด๋ค์ด ์ฌ์ฉ๋ฉ๋๋ค:
- ์ค๋จ(abort):
-
์ค๋ฅ ์ํ๋ก ์ธํด ๋ฐ์ํ ์ ์๋ ์ฐ๊ฒฐ ๋๋ ์คํธ๋ฆผ์ ๊ฐ์์ค๋ฌ์ด ์ข ๋ฃ์ ๋๋ค.
- ํด๋ผ์ด์ธํธ(client):
-
HTTP/3 ์ฐ๊ฒฐ์ ์์ํ๋ ์๋ํฌ์ธํธ์ ๋๋ค. ํด๋ผ์ด์ธํธ๋ HTTP ์์ฒญ์ ๋ณด๋ด๊ณ HTTP ์๋ต์ ์์ ํฉ๋๋ค.
- ์ฐ๊ฒฐ(connection):
-
QUIC์ ์ ์ก ํ๋กํ ์ฝ๋ก ์ฌ์ฉํ๋ ๋ ์๋ํฌ์ธํธ ๊ฐ์ ์ ์ก ๊ณ์ธต ์ฐ๊ฒฐ์ ๋๋ค.
- ์ฐ๊ฒฐ ์ค๋ฅ(connection error) :
-
์ ์ฒด HTTP/3 ์ฐ๊ฒฐ์ ์ํฅ์ ๋ฏธ์น๋ ์ค๋ฅ์ ๋๋ค.
- ์๋ํฌ์ธํธ(endpoint):
-
์ฐ๊ฒฐ์ ํด๋ผ์ด์ธํธ ๋๋ ์๋ฒ ์ค ํ๋์ ๋๋ค.
- ํ๋ ์(frame):
-
ํค๋์ ํ๋ ์ ์ ํ์ ๋ฐ๋ผ ๊ตฌ์กฐํ๋ ๊ฐ๋ณ ๊ธธ์ด ๋ฐ์ดํธ ์ํ์ค๋ก ๊ตฌ์ฑ๋ HTTP/3์์ ์คํธ๋ฆผ์์ ๊ฐ์ฅ ์์ ํต์ ๋จ์์ ๋๋ค.์ด ๋ฌธ์์ [QUIC-TRANSPORT] ๋ชจ๋์ "ํ๋ ์"์ด๋ผ ๋ถ๋ฆฌ๋ ํ๋กํ ์ฝ ์์๊ฐ ์กด์ฌํฉ๋๋ค. [QUIC-TRANSPORT]์ ํ๋ ์์ด ์ฐธ์กฐ๋ ๋๋ ํ๋ ์ ์ด๋ฆ ์์ "QUIC"์ด ๋ถ์ต๋๋ค. ์๋ฅผ ๋ค์ด, "QUIC CONNECTION_CLOSE frames". ์ด ์ ๋์ฌ๊ฐ ์๋ ์ฐธ์กฐ๋ ์น์ 7.2์์ ์ ์๋ ํ๋ ์์ ๊ฐ๋ฆฌํต๋๋ค.
- HTTP/3 ์ฐ๊ฒฐ(HTTP/3 connection):
-
ํ์๋ ์ ํ๋ฆฌ์ผ์ด์ ํ๋กํ ์ฝ์ด HTTP/3์ธ QUIC ์ฐ๊ฒฐ์ ๋๋ค.
- ํผ์ด(peer):
-
์๋ํฌ์ธํธ๋ฅผ ์๋ฏธํฉ๋๋ค. ํน์ ์๋ํฌ์ธํธ๋ฅผ ๋ ผํ ๋ "ํผ์ด"๋ ๋ ผ์์ ์ฃผ์ ๋์์์ ์๊ฒฉ์ ์๋ ์๋ํฌ์ธํธ๋ฅผ ๊ฐ๋ฆฌํต๋๋ค.
- ์์ ์(receiver):
-
ํ๋ ์์ ์์ ํ๋ ์๋ํฌ์ธํธ์ ๋๋ค.
- ์ก์ ์(sender):
-
ํ๋ ์์ ์ ์กํ๋ ์๋ํฌ์ธํธ์ ๋๋ค.
- ์๋ฒ(server):
-
HTTP/3 ์ฐ๊ฒฐ์ ์๋ฝํ๋ ์๋ํฌ์ธํธ์ ๋๋ค. ์๋ฒ๋ HTTP ์์ฒญ์ ์์ ํ๊ณ HTTP ์๋ต์ ๋ณด๋ ๋๋ค.
- ์คํธ๋ฆผ(stream):
-
QUIC ์ ์ก์ด ์ ๊ณตํ๋ ์๋ฐฉํฅ ๋๋ ๋จ๋ฐฉํฅ ๋ฐ์ดํธ ์คํธ๋ฆผ์ ๋๋ค. HTTP/3 ์ฐ๊ฒฐ ๋ด์ ๋ชจ๋ ์คํธ๋ฆผ์ "HTTP/3 ์คํธ๋ฆผ"์ผ๋ก ๊ฐ์ฃผ๋ ์ ์์ง๋ง, HTTP/3 ๋ด์์ ์ฌ๋ฌ ์คํธ๋ฆผ ์ ํ์ด ์ ์๋ฉ๋๋ค.
- ์คํธ๋ฆผ ์ค๋ฅ(stream error) :
-
๊ฐ๋ณ ์คํธ๋ฆผ์์ ์ ํ๋ฆฌ์ผ์ด์ ์์ค ์ค๋ฅ์ ๋๋ค.
"์ฝํ ์ธ (content)"๋ผ๋ ์ฉ์ด๋ RFC 9110์ ์น์ 6.4์์ ์ ์๋ฉ๋๋ค ([HTTP]).
๋ง์ง๋ง์ผ๋ก, "๋ฆฌ์์ค(resource)", "๋ฉ์์ง(message)", "์ ์ ์์ด์ ํธ(user agent)", "์ค๋ฆฌ์ง ์๋ฒ(origin server)", "๊ฒ์ดํธ์จ์ด(gateway)", "์ค๊ณ์(intermediary)", "ํ๋ก์(proxy)", ๋ฐ "ํฐ๋(tunnel)"์ด๋ผ๋ ์ฉ์ด๋ค์ RFC 9110์ ์น์ 3์์ ์ ์๋ฉ๋๋ค ([HTTP]).
์ด ๋ฌธ์์ ํจํท ๋ค์ด์ด๊ทธ๋จ์ ํ๋์ ์์์ ํฌ๊ธฐ๋ฅผ ์ค๋ช ํ๊ธฐ ์ํด RFC 9000์ ์น์ 1.3์ ์ ์๋ ํ์์ ์ฌ์ฉํฉ๋๋ค ([QUIC-TRANSPORT]).
3. ์ฐ๊ฒฐ ์ค์ ๋ฐ ๊ด๋ฆฌ
3.1. HTTP/3 ์๋ํฌ์ธํธ ๊ฒ์
HTTP๋ ๊ถํ ์๋ ์๋ต(authoritative response)์ด๋ผ๋ ๊ฐ๋ ์ ์์กดํฉ๋๋ค: ์ด๋ ์๋ต ์์ ์ ๋์ ๋ฆฌ์์ค์ ์ํ๋ฅผ ๊ณ ๋ คํ์ฌ ์๋ณธ URI ๋ด์ ์๋ณ๋ ์ค๋ฆฌ์ง ์๋ฒ์ ์ํด(๋๋ ๊ทธ ์ง์์ ๋ฐ๋ผ) ํด๋น ์์ฒญ์ ๋ํด ๊ฐ์ฅ ์ ์ ํ๋ค๊ณ ํ๋จ๋ ์๋ต์ ๋๋ค. HTTP URI์ ๋ํ ๊ถํ ์๋ ์๋ฒ๋ฅผ ์ฐพ๋ ๋ฐฉ๋ฒ์ RFC 9110 ์น์ 4.3์ ๋ ผ์๋์ด ์์ต๋๋ค ([HTTP]).
"https" ์คํด์ ๊ถํ(authority)์ URI์ ๊ถํ ๊ตฌ์ฑ์์๋ก ์๋ณ๋ ํธ์คํธ์ ๋ํด ํด๋ผ์ด์ธํธ๊ฐ ์ ๋ขฐํ ์ ์๋ค๊ณ ํ๋จํ๋ ์ธ์ฆ์์ ์์ ์ ์ฐ๊ด์ํต๋๋ค. TLS ํธ๋์ ฐ์ดํฌ์์ ์๋ฒ ์ธ์ฆ์๋ฅผ ์์ ํ ํ, ํด๋ผ์ด์ธํธ๋ RFC 9110 ์น์ 4.3.4์ ์ค๋ช ๋ ์ ์ฐจ๋ฅผ ์ฌ์ฉํ์ฌ ์ธ์ฆ์๊ฐ URI์ ์ค๋ฆฌ์ง ์๋ฒ์ ์๋ฝ ๊ฐ๋ฅํ๊ฒ ์ผ์นํ๋์ง ๊ฒ์ฆํด์ผ ํฉ๋๋ค(MUST). ์ธ์ฆ์๊ฐ URI์ ์ค๋ฆฌ์ง ์๋ฒ์ ๊ด๋ จํ์ฌ ๊ฒ์ฆ๋ ์ ์๋ค๋ฉด, ํด๋ผ์ด์ธํธ๋ ํด๋น ์๋ฒ๋ฅผ ๊ทธ ์ค๋ฆฌ์ง์ ๋ํด ๊ถํ ์๋ ๊ฒ์ผ๋ก ๊ฐ์ฃผํด์๋ ์ ๋ฉ๋๋ค(MUST NOT).
ํด๋ผ์ด์ธํธ๋ ํธ์คํธ ์๋ณ์๋ฅผ IP ์ฃผ์๋ก ํด์ํ๊ณ ํด๋น ์ฃผ์์ ์ง์ ๋ ํฌํธ๋ก QUIC ์ฐ๊ฒฐ์ ์ค์ (์์์ ์ค๋ช ํ ์๋ฒ ์ธ์ฆ์ ๊ฒ์ฆ ํฌํจ)ํ ๋ค, ํด๋น ๋ณด์ ์ฐ๊ฒฐ์ ํตํด URI๋ฅผ ๋์์ผ๋ก ํ๋ HTTP/3 ์์ฒญ ๋ฉ์์ง๋ฅผ ์๋ฒ๋ก ์ ์กํจ์ผ๋ก์จ "https" URI์ ์๋ ๋ฆฌ์์ค์ ์ ๊ทผ์ ์๋ํ ์ ์์ต๋๋ค(MAY). HTTP/3๋ฅผ ์ ํํ๊ธฐ ์ํ ๋ค๋ฅธ ๋ฉ์ปค๋์ฆ์ด ์ฌ์ฉ๋์ง ์๋ ํ, ํ ํฐ "h3"๋ TLS ํธ๋์ ฐ์ดํฌ ๋์์ Application-Layer Protocol Negotiation(ALPN; [RFC7301]) ํ์ฅ์์ ์ฌ์ฉ๋ฉ๋๋ค.
์ฐ๊ฒฐ ๋ฌธ์ (์: UDP ์ฐจ๋จ)๋ QUIC ์ฐ๊ฒฐ ์๋ฆฝ ์คํจ๋ฅผ ์ด๋ํ ์ ์์ต๋๋ค; ์ด ๊ฒฝ์ฐ ํด๋ผ์ด์ธํธ๋ TCP ๊ธฐ๋ฐ ๋ฒ์ ์ HTTP๋ฅผ ์ฌ์ฉํ๋ ค๊ณ ์๋ํด์ผ ํฉ๋๋ค(SHOULD).
์๋ฒ๋ ์์์ UDP ํฌํธ์์ HTTP/3๋ฅผ ์ ๊ณตํ ์ ์์ต๋๋ค(MAY); ๋์ฒด ์๋น์ค ๊ด๊ณ ๋ ํญ์ ๋ช ์์ ์ธ ํฌํธ๋ฅผ ํฌํจํ๋ฉฐ, URI๋ ๋ช ์์ ํฌํธ ๋๋ ์คํด๊ณผ ์ฐ๊ด๋ ๊ธฐ๋ณธ ํฌํธ๋ฅผ ํฌํจํฉ๋๋ค.
3.1.1. HTTP ๋์ฒด ์๋น์ค
HTTP ์ค๋ฆฌ์ง์ Alt-Svc HTTP ์๋ต ํค๋ ํ๋ ๋๋ HTTP/2 ALTSVC ํ๋ ์([ALTSVC])์ ํตํด "h3" ALPN ํ ํฐ์ ์ฌ์ฉํ์ฌ ๋๋ฑํ HTTP/3 ์๋ํฌ์ธํธ์ ๊ฐ์ฉ์ฑ์ ๊ด๊ณ ํ ์ ์์ต๋๋ค.
์๋ฅผ ๋ค์ด, ์ค๋ฆฌ์ง์ HTTP ์๋ต์ ๋ค์ ํค๋ ํ๋๋ฅผ ํฌํจํ์ฌ ๋์ผํ ํธ์คํธ ์ด๋ฆ์์ UDP ํฌํธ 50781์์ HTTP/3๊ฐ ์ฌ์ฉ ๊ฐ๋ฅํจ์ ๋ํ๋ผ ์ ์์ต๋๋ค:
Alt-Svc: h3=":50781"
HTTP/3 ์ง์์ ๋ํ๋ด๋ Alt-Svc ๋ ์ฝ๋๋ฅผ ์์ ํ๋ฉด, ํด๋ผ์ด์ธํธ๋ ํ์๋ ํธ์คํธ ๋ฐ ํฌํธ๋ก QUIC ์ฐ๊ฒฐ์ ์๋ฆฝํ๋ ค๊ณ ์๋ํ ์ ์์ต๋๋ค(MAY); ์ด ์ฐ๊ฒฐ์ด ์ฑ๊ณตํ๋ฉด, ํด๋ผ์ด์ธํธ๋ ์ด ๋ฌธ์์ ์ค๋ช ๋ ๋งคํ์ ์ฌ์ฉํ์ฌ HTTP ์์ฒญ์ ๋ณด๋ผ ์ ์์ต๋๋ค.
3.1.2. ๊ธฐํ ์คํด
HTTP๋ ์ ์ก ํ๋กํ ์ฝ๊ณผ ๋ ๋ฆฝ์ ์ด์ง๋ง, "http" ์คํด์ ๊ถํ์ ํด๋น ๊ถํ ๊ตฌ์ฑ์์์ ์๋ณ๋ ํธ์คํธ์ ์ง์ ๋ ํฌํธ์์ TCP ์ฐ๊ฒฐ์ ์์ ํ ์ ์๋ ๋ฅ๋ ฅ๊ณผ ์ฐ๊ด์ํต๋๋ค. HTTP/3๋ TCP๋ฅผ ์ฌ์ฉํ์ง ์๊ธฐ ๋๋ฌธ์, "http" URI๋ก ์๋ณ๋ ๋ฆฌ์์ค์ ๊ถํ ์๋ ์๋ฒ์ ๋ํ ์ง์ ์ก์ธ์ค์๋ HTTP/3์ ์ฌ์ฉํ ์ ์์ต๋๋ค. ๊ทธ๋ฌ๋ [ALTSVC]์ ๊ฐ์ ํ๋กํ ์ฝ ํ์ฅ์ ๊ถํ ์๋ ์๋ฒ๊ฐ ๋ํ ๊ถํ์ ๊ฐ์ง๋ฉฐ HTTP/3์ ํตํด ์ ๊ทผ ๊ฐ๋ฅํ ์ ์๋ ๋ค๋ฅธ ์๋น์ค๋ฅผ ์๋ณํ๋๋ก ํ์ฉํฉ๋๋ค.
"https"๊ฐ ์๋ ์คํด์ ๊ฐ์ง ์ค๋ฆฌ์ง์ ๋ํด ์์ฒญ์ ํ๊ธฐ ์ ์, ํด๋ผ์ด์ธํธ๋ ์๋ฒ๊ฐ ํด๋น ์คํด์ ์ ๊ณตํ ์์ฌ๊ฐ ์๋์ง ํ์ธํด์ผ ํฉ๋๋ค(MUST). "http" ์คํด์ ๊ฐ์ง ์ค๋ฆฌ์ง์ ๋ํด ์ด๋ฅผ ๋ฌ์ฑํ๊ธฐ ์ํ ์คํ์ ๋ฐฉ๋ฒ์ [RFC8164]์ ์ค๋ช ๋์ด ์์ต๋๋ค. ํฅํ ๋ค์ํ ์คํด์ ๋ํด ๋ค๋ฅธ ๋ฉ์ปค๋์ฆ์ด ์ ์๋ ์ ์์ต๋๋ค.
3.2. ์ฐ๊ฒฐ ์๋ฆฝ
HTTP/3๋ ๊ธฐ๋ณธ ์ ์ก์ผ๋ก QUIC ๋ฒ์ 1์ ์ฌ์ฉํฉ๋๋ค. HTTP/3์ ํจ๊ป ๋ค๋ฅธ QUIC ์ ์ก ๋ฒ์ ์ ์ฌ์ฉํ๋ ๊ฒ์ ํฅํ ๊ท๊ฒฉ์์ ์ ์๋ ์ ์์ต๋๋ค(MAY).
QUIC ๋ฒ์ 1์ ํธ๋์ ฐ์ดํฌ ํ๋กํ ์ฝ๋ก TLS ๋ฒ์ 1.3 ์ด์์ ์ฌ์ฉํฉ๋๋ค. HTTP/3 ํด๋ผ์ด์ธํธ๋ TLS ํธ๋์ ฐ์ดํฌ ๋์ ๋์ ํธ์คํธ๋ฅผ ์๋ฒ์ ํ์ํ๋ ๋ฉ์ปค๋์ฆ์ ์ง์ํด์ผ ํฉ๋๋ค(MUST). ์๋ฒ๊ฐ ๋๋ฉ์ธ ์ด๋ฆ์ผ๋ก ์๋ณ๋๋ ๊ฒฝ์ฐ([DNS-TERMS]), ํด๋ผ์ด์ธํธ๋ ๋์ ํธ์คํธ๋ฅผ ํ์ํ๊ธฐ ์ํด Server Name Indication(SNI; [RFC6066]) TLS ํ์ฅ์ ๋ณด๋ด์ผ ํฉ๋๋ค(MUST), ๋์ฒด ๋ฉ์ปค๋์ฆ์ด ์ฌ์ฉ๋์ง ์๋ ํ.
QUIC ์ฐ๊ฒฐ์ [QUIC-TRANSPORT]์ ์ค๋ช ๋ ๋๋ก ์๋ฆฝ๋ฉ๋๋ค. ์ฐ๊ฒฐ ์๋ฆฝ ๋์ HTTP/3 ์ง์์ TLS ํธ๋์ ฐ์ดํฌ์์ ALPN ํ ํฐ "h3"๋ฅผ ์ ํํจ์ผ๋ก์จ ํ์๋ฉ๋๋ค. ๋์ผํ ํธ๋์ ฐ์ดํฌ์์ ๋ค๋ฅธ ์ ํ๋ฆฌ์ผ์ด์ ๊ณ์ธต ํ๋กํ ์ฝ์ ๋ํ ์ง์์ด ์ ๊ณต๋ ์ ์์ต๋๋ค(MAY).
ํต์ฌ QUIC ํ๋กํ ์ฝ๊ณผ ๊ด๋ จ๋ ์ฐ๊ฒฐ ์์ค ์ต์ ์ ์ด๊ธฐ ์ํธํ ํธ๋์ ฐ์ดํฌ์์ ์ค์ ๋๋ ๋ฐ๋ฉด, HTTP/3์ ํน์ ํ ์ค์ ์ SETTINGS ํ๋ ์์์ ์ ๋ฌ๋ฉ๋๋ค. QUIC ์ฐ๊ฒฐ์ด ์ค์ ๋ ํ, ๊ฐ ์๋ํฌ์ธํธ๋ ์์ ์ HTTP ์ ์ด ์คํธ๋ฆผ์ ์ด๊ธฐ ํ๋ ์์ผ๋ก SETTINGS ํ๋ ์์ ๋ณด๋ด์ผ ํฉ๋๋ค(MUST).
3.3. ์ฐ๊ฒฐ ์ฌ์ฌ์ฉ
HTTP/3 ์ฐ๊ฒฐ์ ์ฌ๋ฌ ์์ฒญ์ ๊ฑธ์ณ ์ง์๋ฉ๋๋ค. ์ต์์ ์ฑ๋ฅ์ ์ํด, ํด๋ผ์ด์ธํธ๋ ์๋ฒ์์ ์ถ๊ฐ ํต์ ์ด ํ์ ์๋ค๊ณ ํ๋จ๋ ๋(์: ์ฌ์ฉ์๊ฐ ํน์ ์นํ์ด์ง์์ ๋ ๋ ๋)๊น์ง ์ฐ๊ฒฐ์ ๋ซ์ง ์๋ ๊ฒ์ด ์์๋ฉ๋๋ค. ๋๋ ์๋ฒ๊ฐ ์ฐ๊ฒฐ์ ๋ซ์ ๋๊น์ง ์ ์งํฉ๋๋ค.
์๋ฒ ์๋ํฌ์ธํธ์ ๋ํ ์ฐ๊ฒฐ์ด ์กด์ฌํ๋ฉด, ์ด ์ฐ๊ฒฐ์ ์ฌ๋ฌ ๋ค๋ฅธ URI ๊ถํ ๊ตฌ์ฑ์์๋ฅผ ๊ฐ์ง ์์ฒญ๋ค์ ๋ํด ์ฌ์ฌ์ฉ๋ ์ ์์ต๋๋ค(MAY). ์๋ก์ด ์ค๋ฆฌ์ง์ ๋ํด ๊ธฐ์กด ์ฐ๊ฒฐ์ ์ฌ์ฉํ๋ ค๋ฉด, ํด๋ผ์ด์ธํธ๋ ์ ์ค๋ฆฌ์ง ์๋ฒ์ ๋ํด ์๋ฒ๊ฐ ์ ์ํ ์ธ์ฆ์๋ฅผ RFC 9110 ์น์ 4.3.4์ ์ค๋ช ๋ ์ ์ฐจ๋ฅผ ์ฌ์ฉํ์ฌ ๊ฒ์ฆํด์ผ ํฉ๋๋ค(MUST). ์ด๋ ํด๋ผ์ด์ธํธ๊ฐ ์๋ฒ ์ธ์ฆ์์ ํด๋น ์ธ์ฆ์๋ฅผ ๊ฒ์ฆํ๋ ๋ฐ ํ์ํ ์ถ๊ฐ ์ ๋ณด๋ฅผ ๋ณด์ ํด์ผ ํจ์ ์๋ฏธํฉ๋๋ค; ์ด๋ฅผ ๋ณด์ ํ์ง ์๋ ํด๋ผ์ด์ธํธ๋ ์ถ๊ฐ ์ค๋ฆฌ์ง์ ๋ํด ์ฐ๊ฒฐ์ ์ฌ์ฌ์ฉํ ์ ์์ต๋๋ค.
์ด๋ค ์ด์ ๋ก๋ ์ธ์ฆ์๊ฐ ์ ์ค๋ฆฌ์ง์ ๋ํด ์๋ฝ๋ ์ ์๋ค๋ฉด, ํด๋น ์ฐ๊ฒฐ์ ์ฌ์ฌ์ฉ๋์ด์๋ ์ ๋๋ฉฐ(MUST NOT) ์ ์ค๋ฆฌ์ง์ ๋ํด ์๋ก์ด ์ฐ๊ฒฐ์ ์๋ฆฝํด์ผ ํฉ๋๋ค(SHOULD). ์ธ์ฆ์ ๊ฒ์ฆ ์คํจ์ ์ด์ ๊ฐ ์ฐ๊ฒฐ์ ์ด๋ฏธ ์ฐ๊ด๋ ๋ค๋ฅธ ์ค๋ฆฌ์ง๋ค์๋ ์ ์ฉ๋ ์ ์๋ ๊ฒฝ์ฐ, ํด๋ผ์ด์ธํธ๋ ํด๋น ์ค๋ฆฌ์ง๋ค์ ๋ํด ์๋ฒ ์ธ์ฆ์๋ฅผ ๋ค์ ๊ฒ์ฆํ๋ ๊ฒ์ด ๋ฐ๋์งํฉ๋๋ค(SHOULD). ์๋ฅผ ๋ค์ด, ์ธ์ฆ์๊ฐ ๋ง๋ฃ๋์๊ฑฐ๋ ํ์ง๋ ๊ฒฝ์ฐ, ์ด๋ ํด๋น ์ธ์ฆ์๋ฅผ ์ฌ์ฉํ์ฌ ๊ถํ์ ์ค์ ํ ๋ค๋ฅธ ๋ชจ๋ ์ค๋ฆฌ์ง์ ๋ฌดํจํํ๋ ๋ฐ ์ฌ์ฉ๋ ์ ์์ต๋๋ค.
ํด๋ผ์ด์ธํธ๋ URI, ์ ํ๋ ๋์ฒด ์๋น์ค([ALTSVC]), ๊ตฌ์ฑ๋ ํ๋ก์ ๋๋ ์ด๋ค ์ค ์ด๋ ๊ฒ์ ์ด๋ฆ ํด์์์ ํ์๋ ์ ์๋ ํน์ IP ์ฃผ์์ UDP ํฌํธ์ ๋ํด ๋ ๊ฐ ์ด์์ HTTP/3 ์ฐ๊ฒฐ์ ์ด์ด์๋ ์ ๋ฉ๋๋ค(SHOULD NOT). ํด๋ผ์ด์ธํธ๋ ์๋ก ๋ค๋ฅธ ์ ์ก ๋๋ TLS ๊ตฌ์ฑ์ผ๋ก ๋์ผํ IP ์ฃผ์์ UDP ํฌํธ์ ๋ํด ์ฌ๋ฌ HTTP/3 ์ฐ๊ฒฐ์ ์ด ์ ์์ง๋ง(MAY), ๋์ผํ ๊ตฌ์ฑ์ผ๋ก ์ฌ๋ฌ ์ฐ๊ฒฐ์ ์์ฑํ๋ ๊ฒ์ ํผํด์ผ ํฉ๋๋ค(SHOULD).
์๋ฒ๋ ๊ฐ๋ฅํ ํ ์ค๋ ์ด๋ฆฐ HTTP/3 ์ฐ๊ฒฐ์ ์ ์งํ๋ ๊ฒ์ด ๊ถ์ฅ๋์ง๋ง, ํ์ํ๋ค๋ฉด ์ ํด ์ฐ๊ฒฐ์ ์ข ๋ฃํ ์ ์์ต๋๋ค. ์ด๋ ์ชฝ ์๋ํฌ์ธํธ๊ฐ HTTP/3 ์ฐ๊ฒฐ์ ๋ซ๊ธฐ๋ก ์ ํํ๋ฉด, ์ข ๋ฃํ๋ ์๋ํฌ์ธํธ๋ ๋จผ์ GOAWAY ํ๋ ์(์น์ 5.2)์ ๋ณด๋ด์ด ์ ์๋ํฌ์ธํธ๊ฐ ์ด์ ์ ์ ์ก๋ ํ๋ ์๋ค์ด ์ฒ๋ฆฌ๋์๋์ง ์ ๋ขฐ์ฑ ์๊ฒ ํ๋จํ๊ณ ํ์ํ ๋จ์ ์์ ์ ์ ์์ ์ผ๋ก ์๋ฃํ๊ฑฐ๋ ์ข ๋ฃํ ์ ์๋๋ก ํด์ผ ํฉ๋๋ค(SHOULD).
ํน์ ์ค๋ฆฌ์ง์ ๋ํด ํด๋ผ์ด์ธํธ๊ฐ HTTP/3 ์ฐ๊ฒฐ์ ์ฌ์ฌ์ฉํ๊ธฐ๋ฅผ ์์น ์๋ ์๋ฒ๋ ํด๋น ์์ฒญ์ ๋ํด 421(์๋ชป๋ ๋์ ์์ฒญ, Misdirected Request) ์ํ ์ฝ๋๋ฅผ ์๋ต์ผ๋ก ๋ณด๋ด์ด ์์ ์ด ๊ทธ ์์ฒญ์ ๋ํด ๊ถํ์ด ์์์ ํ์ํ ์ ์์ต๋๋ค; ์์ธํ ๋ด์ฉ์ RFC 9110 ์น์ 7.4๋ฅผ ์ฐธ์กฐํ์ญ์์ค ([HTTP]).
4. HTTP/3์์ HTTP ์๋ฏธ ํํ
4.1. HTTP ๋ฉ์์ง ํ๋ ์ด๋ฐ
ํด๋ผ์ด์ธํธ๋ request stream์์ HTTP ์์ฒญ์ ๋ณด๋ ๋๋ค. ์ด๋ ํด๋ผ์ด์ธํธ๊ฐ ์์ํ๋ ์๋ฐฉํฅ QUIC ์คํธ๋ฆผ์ ๋๋ค; ์น์ 6.1์ ์ฐธ์กฐํ์ญ์์ค. ํด๋ผ์ด์ธํธ๋ ์ฃผ์ด์ง ์คํธ๋ฆผ์์ ๋จ ํ๋์ ์์ฒญ๋ง ์ ์กํด์ผ ํฉ๋๋ค(MUST). ์๋ฒ๋ ๊ฐ์ ์คํธ๋ฆผ์์ 0๊ฐ ์ด์์ ์ค๊ฐ(interim) HTTP ์๋ต์ ์ ์กํ ๋ค, ์๋์ ์์ธํ ์ค๋ช ๋ ๊ฒ์ฒ๋ผ ๋จ ํ๋์ ์ต์ข HTTP ์๋ต์ ์ ์กํฉ๋๋ค. ์ค๊ฐ ๋ฐ ์ต์ข HTTP ์๋ต์ ๋ํ ์ค๋ช ์ RFC 9110 ์น์ 15์ ์ฐธ๊ณ ํ์ญ์์ค.
ํธ์๋ ์๋ต์ ์๋ฒ๊ฐ ์์ํ ๋จ๋ฐฉํฅ QUIC ์คํธ๋ฆผ์์ ์ ์ก๋ฉ๋๋ค; ์น์ 6.2.2๋ฅผ ์ฐธ์กฐํ์ญ์์ค. ์๋ฒ๋ ํ์ค ์๋ต๊ณผ ๋์ผํ ๋ฐฉ์์ผ๋ก 0๊ฐ ์ด์์ ์ค๊ฐ ์๋ต์ ๋ณด๋ด๊ณ ์ด์ด์ ๋จ ํ๋์ ์ต์ข ์๋ต์ ๋ณด๋ ๋๋ค. ํธ์์ ๋ํ ์์ธํ ๋ด์ฉ์ ์น์ 4.6์ ์ค๋ช ๋์ด ์์ต๋๋ค.
์ฃผ์ด์ง ์คํธ๋ฆผ์์ ๋ค์์ ์์ฒญ ์์ ๋๋ ์ต์ข ์๋ต ๋ค์ ์ถ๊ฐ HTTP ์๋ต์ด ์์ ๋๋ ๊ฒฝ์ฐ๋ malformed๋ก ์ทจ๊ธ๋์ด์ผ ํฉ๋๋ค(MUST).
HTTP ๋ฉ์์ง(์์ฒญ ๋๋ ์๋ต)๋ ๋ค์์ผ๋ก ๊ตฌ์ฑ๋ฉ๋๋ค:
- ๋ฉ์์ง ์ ์ด ๋ฐ์ดํฐ๋ฅผ ํฌํจํ๋ ํค๋ ์น์ ์ผ๋ก, ๋จ์ผ HEADERS ํ๋ ์์ผ๋ก ์ ์ก๋ฉ๋๋ค,
- ์ ํ์ ์ผ๋ก, ์ฝํ ์ธ ๊ฐ ์์ ๊ฒฝ์ฐ ์ผ๋ จ์ DATA ํ๋ ์์ผ๋ก ์ ์ก๋ฉ๋๋ค, ๊ทธ๋ฆฌ๊ณ
- ์ ํ์ ์ผ๋ก, ํธ๋ ์ผ๋ฌ ์น์ ์ด ์์ ๊ฒฝ์ฐ ๋จ์ผ HEADERS ํ๋ ์์ผ๋ก ์ ์ก๋ฉ๋๋ค.
ํค๋ ๋ฐ ํธ๋ ์ผ๋ฌ ์น์ ์ RFC 9110 ์น์ 6.3 ๋ฐ ์น์ 6.5์ ์ค๋ช ๋์ด ์์ผ๋ฉฐ, ์ฝํ ์ธ ๋ ์น์ 6.4์ ์ค๋ช ๋์ด ์์ต๋๋ค.
์๋ชป๋ ํ๋ ์ ์ํ์ค ์์ ์ connection error ์ ํ H3_FRAME_UNEXPECTED๋ก ์ฒ๋ฆฌ๋์ด์ผ ํฉ๋๋ค(MUST). ํนํ, ์ด๋ค DATA ํ๋ ์์ด ์ด๋ ํ HEADERS ํ๋ ์ ์ ์ ์ค๊ฑฐ๋, ํธ๋ ์ผ๋ง HEADERS ํ๋ ์ ๋ค์ HEADERS ๋๋ DATA ํ๋ ์์ด ์ค๋ ๊ฒฝ์ฐ๋ ๋ฌดํจ๋ก ๊ฐ์ฃผ๋ฉ๋๋ค. ๋ค๋ฅธ ํ๋ ์ ์ ํ, ํนํ ์๋ ค์ง์ง ์์ ํ๋ ์ ์ ํ์ ์์ฒด ๊ท์น์ ๋ฐ๋ผ ํ์ฉ๋ ์ ์์ต๋๋ค; ์์ธํ ๋ด์ฉ์ ์น์ 9๋ฅผ ์ฐธ์กฐํ์ญ์์ค.
์๋ฒ๋ ์๋ต ๋ฉ์์ง์ ํ๋ ์๋ค ์ด์ , ์ดํ ๋๋ ๊ต์ฐจ๋ก ํ๋ ์ด์ ์ PUSH_PROMISE ํ๋ ์์ ๋ณด๋ผ ์ ์์ต๋๋ค(MAY). ์ด๋ฌํ PUSH_PROMISE ํ๋ ์์ ์๋ต์ ์ผ๋ถ๊ฐ ์๋๋๋ค; ์์ธํ ๋ด์ฉ์ ์น์ 4.6์ ์ฐธ์กฐํ์ญ์์ค. PUSH_PROMISE ํ๋ ์์ push streams์์ ํ์ฉ๋์ง ์์ต๋๋ค; ๋ง์ฝ ํธ์๋ ์๋ต์ด PUSH_PROMISE ํ๋ ์์ ํฌํจํ๋ฉด ์ด๋ connection error ์ ํ H3_FRAME_UNEXPECTED๋ก ์ฒ๋ฆฌ๋์ด์ผ ํฉ๋๋ค(MUST).
์๋ ค์ง์ง ์์ ์ ํ์ ํ๋ ์(์น์ 9), ์์ฝ๋ ํ๋ ์(์น์ 7.2.8)์ ํฌํจํ์ฌ, ์ด๋ฌํ ํ๋ ์๋ค์ ์์ฒญ ๋๋ push stream์์ ๋ค๋ฅธ ์ด ์ ์์ ์ค๋ช ๋ ํ๋ ์๋ค ์ด์ , ์ดํ ๋๋ ๊ต์ฐจ๋ก ์ ์ก๋ ์ ์์ต๋๋ค(MAY).
HEADERS ๋ฐ PUSH_PROMISE ํ๋ ์์ QPACK ๋์ ํ ์ด๋ธ์ ๋ํ ์ ๋ฐ์ดํธ๋ฅผ ์ฐธ์กฐํ ์ ์์ต๋๋ค. ์ด๋ฌํ ์ ๋ฐ์ดํธ๋ ๋ฉ์์ง ๊ตํ์ ์ง์ ์ ์ธ ์ผ๋ถ๋ ์๋์ง๋ง, ๋ฉ์์ง๋ฅผ ์๋นํ๊ธฐ ์ ์ ์์ ๋ฐ ์ฒ๋ฆฌ๋์ด์ผ ํฉ๋๋ค. ์์ธํ ๋ด์ฉ์ ์น์ 4.2๋ฅผ ์ฐธ์กฐํ์ญ์์ค.
Transfer codings(์์ธํ ๋ด์ฉ์ RFC 9112 ์น์ 7)์ HTTP/3์ ๋ํด ์ ์๋์ง ์์ต๋๋ค; Transfer-Encoding ํค๋ ํ๋๋ ์ฌ์ฉ๋์ด์๋ ์ ๋ฉ๋๋ค(MUST NOT).
์๋ต์ ์ค์ง ํ๋ ์ด์์ ์ค๊ฐ ์๋ต(1xx; RFC 9110 ์น์ 15.2 ์ฐธ์กฐ)์ด ๋์ผํ ์์ฒญ์ ๋ํ ์ต์ข ์๋ต์ ์์ค ๋์๋ง ์ฌ๋ฌ ๋ฉ์์ง๋ก ๊ตฌ์ฑ๋ ์ ์์ต๋๋ค(MAY). ์ค๊ฐ ์๋ต์๋ ์ฝํ ์ธ ๋ ํธ๋ ์ผ๋ฌ ์น์ ์ด ํฌํจ๋์ง ์์ต๋๋ค.
HTTP ์์ฒญ/์๋ต ๊ตํ์ ํด๋ผ์ด์ธํธ๊ฐ ์์ํ ์๋ฐฉํฅ QUIC ์คํธ๋ฆผ์ ์์ ํ ์๋นํฉ๋๋ค. ์์ฒญ์ ์ ์กํ ํ, ํด๋ผ์ด์ธํธ๋ ์ ์ก์ ์ํ ์คํธ๋ฆผ์ ๋ซ์์ผ ํฉ๋๋ค(MUST). CONNECT ๋ฉ์๋๋ฅผ ์ฌ์ฉํ๋ ๊ฒฝ์ฐ๋ฅผ ์ ์ธํ๊ณ (์น์ 4.4 ์ฐธ์กฐ), ํด๋ผ์ด์ธํธ๋ ์๋ต์ ์์ ํ๋ ๊ฒ์ ์คํธ๋ฆผ ๋ซ๊ธฐ ์กฐ๊ฑด์ผ๋ก ์ผ์์๋ ์ ๋ฉ๋๋ค(MUST NOT). ์๋ฒ๋ ์ต์ข ์๋ต์ ์ ์กํ ํ ์ ์ก์ ์ํ ์คํธ๋ฆผ์ ๋ซ์์ผ ํฉ๋๋ค(MUST). ์ด ์์ ์์ QUIC ์คํธ๋ฆผ์ ์์ ํ ๋ซํ๋๋ค.
์คํธ๋ฆผ์ด ๋ซํ๋ฉด ์ด๋ ์ต์ข HTTP ๋ฉ์์ง์ ๋์ ๋ํ๋ ๋๋ค. ์ผ๋ถ ๋ฉ์์ง๋ ํฌ๊ฑฐ๋ ๋ฌดํํ ์ ์๊ธฐ ๋๋ฌธ์, ์๋ํฌ์ธํธ๋ ๋ฉ์์ง์ ์ผ๋ถ๊ฐ ๋์ฐฉํ์ฌ ์งํ์ ์ถฉ๋ถํ ๋ ๋ถ๋ถ HTTP ๋ฉ์์ง ์ฒ๋ฆฌ๋ฅผ ์์ํ๋ ๊ฒ์ด ๊ถ์ฅ๋ฉ๋๋ค(SHOULD). ํด๋ผ์ด์ธํธ๊ฐ ์์ํ ์คํธ๋ฆผ์ด HTTP ๋ฉ์์ง๋ฅผ ์์ ํ๊ฒ ์ ๊ณตํ ๋งํผ ์ข ๋ฃ๋์ง ์์ ์ํ๋ก ์ข ๋ฃ๋๋ฉด, ์๋ฒ๋ ์๋ต ์คํธ๋ฆผ์ ์ค๋ฅ ์ฝ๋ H3_REQUEST_INCOMPLETE๋ก ์ค๋จ(abort)ํ๋ ๊ฒ์ด ๊ถ์ฅ๋ฉ๋๋ค(SHOULD).
์๋ฒ๋ ์์ฒญ์ ์์ง ์ ์ก๋์ง ์์ ๋ถ๋ถ์ ์์กดํ์ง ์๋ ๊ฒฝ์ฐ, ํด๋ผ์ด์ธํธ๊ฐ ์ ์ฒด ์์ฒญ์ ๋ณด๋ด๊ธฐ ์ ์ ์์ ํ ์๋ต์ ๋ณด๋ผ ์ ์์ต๋๋ค. ์๋ฒ๊ฐ ๋๋จธ์ง ์์ฒญ์ ๋ฐ์ ํ์๊ฐ ์์ ๋์๋, ์์ฒญ ์คํธ๋ฆผ์ ์ฝ๊ธฐ๋ฅผ ์ค๋จ(abort)ํ๊ณ (request stream), ์์ ํ ์๋ต์ ์ ์กํ๊ณ ์ ์ก ์ธก ์คํธ๋ฆผ์ ์ ์์ ์ผ๋ก ๋ซ์ ์ ์์ต๋๋ค. ์ด๋ ํด๋ผ์ด์ธํธ์๊ฒ ์ ์ก ์ค์ง๋ฅผ ์์ฒญํ ๋์๋ ์ค๋ฅ ์ฝ๋ H3_NO_ERROR๋ฅผ ์ฌ์ฉํ๋ ๊ฒ์ด ๊ถ์ฅ๋ฉ๋๋ค(SHOULD). ํด๋ผ์ด์ธํธ๋ ์์ฒญ์ด ๊ฐ์์ค๋ฝ๊ฒ ์ค๋จ๋์๋ค๊ณ ํด์ ์์ ํ ์๋ต์ ํ๊ธฐํด์๋ ์ ๋๋ฉฐ(MUST NOT), ๋ค๋ฅธ ์ด์ ๋ก ์ธ์ ๋ ์๋ต์ ํ๊ธฐํ ์๋ ์์ต๋๋ค. ์๋ฒ๊ฐ ๋ถ๋ถ์ ๋๋ ์์ ํ ์๋ต์ ์ ์กํ์ง๋ง ์์ฒญ ์ฝ๊ธฐ๋ฅผ ์ค๋จํ์ง ์์ ๊ฒฝ์ฐ, ํด๋ผ์ด์ธํธ๋ ์์ฒญ์ ์ฝํ ์ธ ์ ์ก์ ๊ณ์ํ๊ณ ์คํธ๋ฆผ์ ์ ์์ ์ผ๋ก ๋ซ์์ผ ํฉ๋๋ค(SHOULD).
4.1.1. ์์ฒญ ์ทจ์ ๋ฐ ๊ฑฐ๋ถ
ํ๋ฒ request stream์ด ์ด๋ฆฌ๋ฉด, ํด๋น ์์ฒญ์ ์ด๋ ์๋ํฌ์ธํธ์ ์ํด์๋ ์ทจ์๋ ์ ์์ต๋๋ค(MAY). ํด๋ผ์ด์ธํธ๋ ์๋ต์ด ๋ ์ด์ ํ์ํ์ง ์์ ๋ ์์ฒญ์ ์ทจ์ํ๊ณ , ์๋ฒ๋ ์๋ตํ ์ ์๊ฑฐ๋ ์๋ตํ์ง ์๊ธฐ๋ก ๊ฒฐ์ ํ ๋ ์์ฒญ์ ์ทจ์ํฉ๋๋ค. ๊ฐ๋ฅํ๋ฉด ์๋ฒ๋ ์์ฒญ์ ์ด๋ฏธ ์ฒ๋ฆฌํ๊ธฐ ์์ํ ๊ฒฝ์ฐ์๋ ์์ฒญ์ ์ทจ์ํ๋ ๋์ ์ ์ ํ ์ํ ์ฝ๋๋ฅผ ๊ฐ์ง HTTP ์๋ต์ ๋ณด๋ด๋ ๊ฒ์ด ๊ถ์ฅ๋ฉ๋๋ค(RECOMMENDED).
๊ตฌํ์ฒด๋ ์คํธ๋ฆผ์ ์์ง ์ด๋ฆฐ ๋ฐฉํฅ์ ๊ฐ์์ค๋ฝ๊ฒ ์ข ๋ฃํจ์ผ๋ก์จ ์์ฒญ์ ์ทจ์ํด์ผ ํฉ๋๋ค(SHOULD). ์ด๋ฅผ ์ํด ๊ตฌํ์ฒด๋ ์คํธ๋ฆผ์ ์ ์ก ๋ถ๋ถ์ ๋ฆฌ์ ํ๊ณ ์์ ๋ถ๋ถ์์๋ ์ฝ๊ธฐ๋ฅผ ์ค๋จํด์ผ ํฉ๋๋ค; ๊ด๋ จ ๋ด์ฉ์ RFC 9000 ์น์ 2.4๋ฅผ ์ฐธ์กฐํ์ญ์์ค.
์๋ฒ๊ฐ ์ด๋ค ์ ํ๋ฆฌ์ผ์ด์ ์ฒ๋ฆฌ๋ ์ํํ์ง ์๊ณ ์์ฒญ์ ์ทจ์ํ ๋, ๊ทธ ์์ฒญ์ "rejected"๋ก ๊ฐ์ฃผ๋ฉ๋๋ค. ์๋ฒ๋ ์๋ต ์คํธ๋ฆผ์ ์ค๋ฅ ์ฝ๋ H3_REQUEST_REJECTED๋ก ์ค๋จ(abort)ํด์ผ ํฉ๋๋ค(SHOULD). ์ฌ๊ธฐ์ "processed"๋ ์คํธ๋ฆผ์ ์ผ๋ถ ๋ฐ์ดํฐ๊ฐ ์์ ์ํํธ์จ์ด ๊ณ์ธต์ผ๋ก ์ ๋ฌ๋์ด ๊ทธ๋ก ์ธํด ์ด๋ค ๋์์ด ๋ฐ์ํ์ ๊ฐ๋ฅ์ฑ์ด ์๋ ์ํ๋ฅผ ์๋ฏธํฉ๋๋ค. ํด๋ผ์ด์ธํธ๋ ์๋ฒ๊ฐ ๊ฑฐ๋ถํ ์์ฒญ์ ๋ง์น ์ ํ ์ ์ก๋์ง ์์๋ ๊ฒ์ฒ๋ผ ์ทจ๊ธํ์ฌ ๋์ค์ ์ฌ์๋ํ ์ ์์ต๋๋ค.
์๋ฒ๋ ๋ถ๋ถ์ ๋๋ ์ ๋ถ ์ฒ๋ฆฌ๋ ์์ฒญ์ ๋ํด H3_REQUEST_REJECTED ์ค๋ฅ ์ฝ๋๋ฅผ ์ฌ์ฉํด์๋ ์ ๋ฉ๋๋ค(MUST NOT). ์๋ฒ๊ฐ ๋ถ๋ถ ์ฒ๋ฆฌ ํ ์๋ต์ ํฌ๊ธฐํ๋ ๊ฒฝ์ฐ์๋ ์๋ต ์คํธ๋ฆผ์ ์ค๋ฅ ์ฝ๋ H3_REQUEST_CANCELLED๋ก ์ค๋จํ๋ ๊ฒ์ด ๊ถ์ฅ๋ฉ๋๋ค(SHOULD).
ํด๋ผ์ด์ธํธ๋ ์์ฒญ์ ์ทจ์ํ ๋ ์ค๋ฅ ์ฝ๋ H3_REQUEST_CANCELLED์ ์ฌ์ฉํ๋ ๊ฒ์ด ๊ถ์ฅ๋ฉ๋๋ค(SHOULD). ์ด ์ค๋ฅ ์ฝ๋๋ฅผ ์์ ํ๋ฉด ์๋ฒ๋ ์ด๋ค ์ฒ๋ฆฌ๋ ์ํ๋์ง ์์๋ค๋ฉด ์๋ต์ H3_REQUEST_REJECTED๋ก ๊ฐ์์ค๋ฝ๊ฒ ์ข ๋ฃํ ์ ์์ต๋๋ค(MAY). ํด๋ผ์ด์ธํธ๋ ์๋ฒ๊ฐ ์์ฒญ ์คํธ๋ฆผ์ ์ข ๋ฃ๋ฅผ ์ด ์ค๋ฅ ์ฝ๋๋ก ์์ฒญํ์ง ์๋ ํ H3_REQUEST_REJECTED ์ค๋ฅ ์ฝ๋๋ฅผ ์ฌ์ฉํด์๋ ์ ๋ฉ๋๋ค(MUST NOT).
์คํธ๋ฆผ์ด ์์ ํ ์๋ต์ ๋ฐ์ ํ ์ทจ์๋๋ฉด, ํด๋ผ์ด์ธํธ๋ ์ทจ์๋ฅผ ๋ฌด์ํ๊ณ ์๋ต์ ์ฌ์ฉํ ์ ์์ต๋๋ค(MAY). ๊ทธ๋ฌ๋ ์คํธ๋ฆผ์ด ๋ถ๋ถ ์๋ต์ ๋ฐ์ ํ ์ทจ์๋๋ฉด ํด๋น ์๋ต์ ์ฌ์ฉ๋์ด์๋ ์ ๋ฉ๋๋ค(SHOULD NOT). GET, PUT, DELETE์ ๊ฐ์ ๋ฉฑ๋ฑ(idempotent) ๋์๋ง ์์ ํ๊ฒ ์ฌ์๋๋ ์ ์์ต๋๋ค; ํด๋ผ์ด์ธํธ๋ ์์ฒญ ๋ฉ์๋์ ๋ฌด๊ดํ๊ฒ ์์ฒญ ์๋ฏธ๊ฐ ๋ฉฑ๋ฑ์์ ๋ ๋ฆฝ์ ์ผ๋ก ์๊ฑฐ๋ ์๋ ์์ฒญ์ด ๊ฒฐ์ฝ ์ ์ฉ๋์ง ์์์์ ๊ฐ์งํ ์ ์๋ ์๋จ์ด ์๋ ํ ๋น๋ฉฑ๋ฑ ์์ฒญ์ ์๋์ผ๋ก ์ฌ์๋ํด์๋ ์ ๋ฉ๋๋ค(SHOULD NOT). ์์ธํ ๋ด์ฉ์ RFC 9110 ์น์ 9.2.2๋ฅผ ์ฐธ์กฐํ์ญ์์ค.
4.1.2. ํ์์ด ์๋ชป๋ ์์ฒญ ๋ฐ ์๋ต
ํ์์ด ์๋ชป๋ ์์ฒญ ๋๋ ์๋ต์ด๋, ํ๋ ์ ์ํ์ค ์์ฒด๋ ์ ํจํ์ง๋ง ๋ค์๊ณผ ๊ฐ์ ์ด์ ๋ก ๋ฌดํจ์ธ ๊ฒฝ์ฐ๋ฅผ ๋งํฉ๋๋ค:
- ๊ธ์ง๋ ํ๋ ๋๋ ์์ฌ-ํค๋ ํ๋์ ์กด์ฌ,
- ํ์ ์์ฌ-ํค๋ ํ๋์ ๋ถ์ฌ,
- ์์ฌ-ํค๋ ํ๋์ ์๋ชป๋ ๊ฐ,
- ํ๋ ๋ค์ ์ค๋ ์์ฌ-ํค๋ ํ๋,
- ์๋ชป๋ HTTP ๋ฉ์์ง ์์,
- ๋๋ฌธ์ ํ๋ ์ด๋ฆ ํฌํจ, ๋๋
- ํ๋ ์ด๋ฆ ๋๋ ๊ฐ์ ์๋ชป๋ ๋ฌธ์ ํฌํจ.
Content-Length ํค๋ ํ๋๊ฐ ์๋ ๊ฒฝ์ฐ(์์ธํ ๋ด์ฉ์ RFC 9110 ์น์ 8.6) ์ฝํ ์ธ ๋ฅผ ๊ฐ์ง ๊ฒ์ผ๋ก ์ ์๋ ์์ฒญ ๋๋ ์๋ต์, ์์ ๋ DATA ํ๋ ์ ๊ธธ์ด์ ํฉ์ด Content-Length ํค๋ ๊ฐ๊ณผ ๊ฐ์ง ์์ผ๋ฉด ํ์์ด ์๋ชป๋ ๊ฒ์ผ๋ก ๊ฐ์ฃผ๋ฉ๋๋ค. ์ฝํ ์ธ ๋ฅผ ๊ฒฐ์ฝ ๊ฐ์ง์ง ์๋ ๊ฒ์ผ๋ก ์ ์๋ ์๋ต์ Content-Length๊ฐ ์กด์ฌํ๋๋ผ๋ DATA ํ๋ ์์ ์ฝํ ์ธ ๊ฐ ํฌํจ๋์ง ์๋ ํ ๋น์ ๋ก Content-Length ๊ฐ์ ๊ฐ์ง ์ ์์ต๋๋ค.
HTTP ์์ฒญ ๋๋ ์๋ต์ ์ฒ๋ฆฌํ๋ ์ค๊ฐ์(ํฐ๋๋ก ๋์ํ์ง ์๋ ๋ชจ๋ ์ค๊ฐ์)๋ ํ์์ด ์๋ชป๋ ์์ฒญ ๋๋ ์๋ต์ ์ ๋ฌํด์๋ ์ ๋ฉ๋๋ค(MUST NOT). ๊ฐ์ง๋ ํ์์ด ์๋ชป๋ ์์ฒญ ๋๋ ์๋ต์ ์คํธ๋ฆผ ์ค๋ฅ(stream error) ์ ํ H3_MESSAGE_ERROR๋ก ์ฒ๋ฆฌ๋์ด์ผ ํฉ๋๋ค(MUST).
ํ์์ด ์๋ชป๋ ์์ฒญ์ ๊ฒฝ์ฐ, ์๋ฒ๋ ์คํธ๋ฆผ์ ๋ซ๊ฑฐ๋ ๋ฆฌ์ ํ๊ธฐ ์ ์ ์ค๋ฅ๋ฅผ ๋ํ๋ด๋ HTTP ์๋ต์ ๋ณด๋ผ ์ ์์ต๋๋ค(MAY). ํด๋ผ์ด์ธํธ๋ ํ์์ด ์๋ชป๋ ์๋ต์ ์๋ฝํด์๋ ์ ๋ฉ๋๋ค(MUST NOT). ์ด๋ฌํ ์๊ตฌ์ฌํญ์ HTTP์ ๋ํ ์ฌ๋ฌ ์ผ๋ฐ์ ์ธ ๊ณต๊ฒฉ ์ ํ์ผ๋ก๋ถํฐ ๋ณดํธํ๊ธฐ ์ํ ๊ฒ์ด๋ฉฐ, ๊ด๋ํ๊ฒ ์ฒ๋ฆฌํ๋ฉด ๊ตฌํ์ฒด๊ฐ ์ทจ์ฝํด์ง ์ ์์ผ๋ฏ๋ก ์๋์ ์ผ๋ก ์๊ฒฉํ๊ฒ ์ค๊ณ๋์์ต๋๋ค.
4.2. HTTP ํ๋
HTTP ๋ฉ์์ง๋ "HTTP ํ๋"๋ผ๊ณ ๋ถ๋ฆฌ๋ ์ผ๋ จ์ ํค-๊ฐ ์์ผ๋ก ๋ฉํ๋ฐ์ดํฐ๋ฅผ ์ ๋ฌํฉ๋๋ค; ์น์ 6.3 ๋ฐ ์น์ 6.5๋ฅผ [HTTP]์์ ์ฐธ์กฐํ์ญ์์ค. ๋ฑ๋ก๋ HTTP ํ๋์ ๋ชฉ๋ก์ <https://www.iana.org/assignments/http-fields/>์ ๋ณด๊ด๋ "Hypertext Transfer Protocol (HTTP) Field Name Registry"๋ฅผ ์ฐธ์กฐํ์ญ์์ค. HTTP/2์ ๋ง์ฐฌ๊ฐ์ง๋ก, HTTP/3์์๋ ํ๋ ์ด๋ฆ์ ์ฌ์ฉ๋๋ ๋ฌธ์, Connection ํค๋ ํ๋ ๋ฐ ์์ฌ-ํค๋(pseudo-header) ํ๋์ ์ฌ์ฉ๊ณผ ๊ด๋ จ๋ ์ถ๊ฐ์ ์ธ ๊ณ ๋ ค์ฌํญ์ด ์์ต๋๋ค.
ํ๋ ์ด๋ฆ์ ASCII ๋ฌธ์ ํ์ ์งํฉ์ ํฌํจํ๋ ๋ฌธ์์ด์ ๋๋ค. HTTP ํ๋ ์ด๋ฆ๊ณผ ๊ฐ์ ์์ฑ์ RFC 9110 ์น์ 5.1์ ๋ ์์ธํ ์ค๋ช ๋์ด ์์ต๋๋ค. ํ๋ ์ด๋ฆ์ ๋ฌธ์๋ ์ธ์ฝ๋ฉํ๊ธฐ ์ ์ ์๋ฌธ์๋ก ๋ณํ๋์ด์ผ ํฉ๋๋ค(MUST). ํ๋ ์ด๋ฆ์ ๋๋ฌธ์๊ฐ ํฌํจ๋ ์์ฒญ ๋๋ ์๋ต์ malformed๋ก ์ทจ๊ธ๋์ด์ผ ํฉ๋๋ค(MUST).
HTTP/3๋ Connection ํค๋ ํ๋๋ฅผ ์ฌ์ฉํ์ฌ ์ฐ๊ฒฐ-ํน์ ํ๋๋ฅผ ๋ํ๋ด์ง ์์ต๋๋ค; ์ด ํ๋กํ ์ฝ์์๋ ์ฐ๊ฒฐ-ํน์ ๋ฉํ๋ฐ์ดํฐ๊ฐ ๋ค๋ฅธ ์๋จ์ผ๋ก ์ ๋ฌ๋ฉ๋๋ค. ์๋ํฌ์ธํธ๋ ์ฐ๊ฒฐ-ํน์ ํ๋๋ฅผ ํฌํจํ๋ HTTP/3 ํ๋ ์น์ ์ ์์ฑํด์๋ ์ ๋ฉ๋๋ค(MUST NOT); ์ฐ๊ฒฐ-ํน์ ํ๋๋ฅผ ํฌํจํ๋ ๋ชจ๋ ๋ฉ์์ง๋ malformed๋ก ์ทจ๊ธ๋์ด์ผ ํฉ๋๋ค(MUST).
์์ธ๋ TE ํค๋ ํ๋๋ฟ์ด๋ฉฐ, ์ด๋ HTTP/3 ์์ฒญ ํค๋์ ํฌํจ๋ ์ ์์ต๋๋ค(MAY). ์ด ํ๋๊ฐ ์์ ๊ฒฝ์ฐ "trailers" ์ด์ธ์ ๊ฐ์ ํฌํจํด์๋ ์ ๋ฉ๋๋ค(MUST NOT).
HTTP/1.x ๋ฉ์์ง๋ฅผ HTTP/3๋ก ๋ณํํ๋ ์ค๊ฐ์๋ RFC 9110 ์น์ 7.6.1์์ ๋ ผ์๋ ๋๋ก ์ฐ๊ฒฐ-ํน์ ํค๋ ํ๋๋ฅผ ์ ๊ฑฐํด์ผ ํฉ๋๋ค(MUST); ๊ทธ๋ ์ง ์์ผ๋ฉด ๋ค๋ฅธ HTTP/3 ์๋ํฌ์ธํธ์ ์ํด ๊ทธ๋ค์ ๋ฉ์์ง๋ malformed๋ก ์ฒ๋ฆฌ๋ ๊ฒ์ ๋๋ค.
4.2.1. ํ๋ ์์ถ
[QPACK]์ HPACK์ ๋ณํ์ ์ค๋ช ํ๋ฉฐ, ์ด๋ ์ธ์ฝ๋๊ฐ ์์ถ์ผ๋ก ์ธํด ๋ฐ์ํ ์ ์๋ head-of-line blocking์ ์ ๋๋ฅผ ์ด๋ ์ ๋ ์ ์ดํ ์ ์๊ฒ ํฉ๋๋ค. ์ด๋ ์ธ์ฝ๋๊ฐ ์์ถ ํจ์จ์ฑ๊ณผ ์ง์ฐ ์๊ฐ ๊ฐ์ ๊ท ํ์ ๋ง์ถ ์ ์๊ฒ ํด์ค๋๋ค. HTTP/3๋ ํค๋ ๋ฐ ํธ๋ ์ผ๋ฌ ์น์ (ํค๋ ์น์ ์ ์๋ ์ ์ด ๋ฐ์ดํฐ ํฌํจ)์ ์์ถํ๊ธฐ ์ํด QPACK์ ์ฌ์ฉํฉ๋๋ค.
๋ ๋์ ์์ถ ํจ์จ์ ํ์ฉํ๊ธฐ ์ํด Cookie ํค๋ ํ๋([COOKIES])๋ ์์ถ ์ ์ ํ๋ ์ด์์ cookie-pair๋ฅผ ํฌํจํ๋ ๋ณ๋์ ํ๋ ๋ผ์ธ๋ค๋ก ๋ถํ ๋ ์ ์์ต๋๋ค(MAY). ์์ถ ํด์ ๋ ํ๋ ์น์ ์ด ์ฌ๋ฌ ๊ฐ์ cookie ํ๋ ๋ผ์ธ์ ํฌํจํ๋ ๊ฒฝ์ฐ, ์ด๋ค์ HTTP/2 ๋๋ HTTP/3 ์ด์ธ์ ์ปจํ ์คํธ(์: HTTP/1.1 ์ฐ๊ฒฐ ๋๋ ์ผ๋ฐ HTTP ์๋ฒ ์ ํ๋ฆฌ์ผ์ด์ )์ ์ ๋ฌ๋๊ธฐ ์ ์ "; "(ASCII 0x3b, 0x20)์ 2๋ฐ์ดํธ ๊ตฌ๋ถ์๋ฅผ ์ฌ์ฉํ์ฌ ๋จ์ผ ๋ฐ์ดํธ ๋ฌธ์์ด๋ก ์ฐ๊ฒฐ๋์ด์ผ ํฉ๋๋ค(MUST).
4.2.2. ํค๋ ํฌ๊ธฐ ์ ์ฝ
HTTP/3 ๊ตฌํ์ฒด๋ ๊ฐ๋ณ HTTP ๋ฉ์์ง์์ ์์ฉํ ์ต๋ ํค๋ ํฌ๊ธฐ์ ๋ํ ์ ํ์ ๋ ์ ์์ต๋๋ค(MAY). ์๋ฒ๊ฐ ์ฒ๋ฆฌํ๊ธฐ์ ๋๋ฌด ํฐ ํค๋ ์น์ ์ ์์ ํ๋ฉด HTTP 431 (Request Header Fields Too Large) ์ํ ์ฝ๋๋ฅผ ๋ณด๋ผ ์ ์์ต๋๋ค([RFC6585]). ํด๋ผ์ด์ธํธ๋ ์ฒ๋ฆฌํ ์ ์๋ ์๋ต์ ํ๊ธฐํ ์ ์์ต๋๋ค. ํ๋ ๋ชฉ๋ก์ ํฌ๊ธฐ๋ ์ด๋ฆ๊ณผ ๊ฐ์ ๋ฐ์ดํธ ๊ธธ์ด ๋ฐ ๊ฐ ํ๋์ ๋ํด 32๋ฐ์ดํธ์ ์ค๋ฒํค๋๋ฅผ ํฌํจํ ๋น์์ถ๋ ํ๋ ํฌ๊ธฐ๋ฅผ ๊ธฐ์ค์ผ๋ก ๊ณ์ฐ๋ฉ๋๋ค.
๊ตฌํ์ฒด๊ฐ ํผ์ด์๊ฒ ์ด ์ ํ์ ์๋ฆฌ๊ณ ์ ํ๋ ๊ฒฝ์ฐ, ์ด๋ SETTINGS_MAX_FIELD_SECTION_SIZE ๋งค๊ฐ๋ณ์์ ๋ฐ์ดํธ ์๋ก ์ ๋ฌํ ์ ์์ต๋๋ค. ์ด ๋งค๊ฐ๋ณ์๋ฅผ ์์ ํ ๊ตฌํ์ฒด๋ ํ์๋ ํฌ๊ธฐ๋ฅผ ์ด๊ณผํ๋ HTTP ๋ฉ์์ง ํค๋๋ฅผ ์ ์กํด์๋ ์ ๋ฉ๋๋ค(SHOULD NOT), ํผ์ด๊ฐ ์ด๋ฅผ ์ฒ๋ฆฌํ์ง ์์ ๊ฐ๋ฅ์ฑ์ด ๋๊ธฐ ๋๋ฌธ์ ๋๋ค. ๊ทธ๋ฌ๋ HTTP ๋ฉ์์ง๋ ์ค๋ฆฌ์ง ์๋ฒ์ ๋๋ฌํ๊ธฐ ์ ์ ํ๋ ์ด์์ ์ค๊ฐ์๋ฅผ ํต๊ณผํ ์ ์์ต๋๋ค; ์์ธํ ๋ด์ฉ์ RFC 9110 ์น์ 3.7์ ์ฐธ์กฐํ์ญ์์ค. ์ด ์ ํ์ ๋ฉ์์ง๋ฅผ ์ฒ๋ฆฌํ๋ ๊ฐ ๊ตฌํ์ฒด์ ์ํด ๋ณ๋๋ก ์ ์ฉ๋๋ฏ๋ก, ์ด ์ ํ๋ณด๋ค ์์ ๋ฉ์์ง๋ผ๋ ์๋ฝ๋๋ค๊ณ ๋ณด์ฅ๋์ง ์์ต๋๋ค.
4.3. HTTP ์ ์ด ๋ฐ์ดํฐ
HTTP/2์ ๋ง์ฐฌ๊ฐ์ง๋ก, HTTP/3๋ ํ๋ ์ด๋ฆ์ด : ๋ฌธ์(ASCII 0x3a)๋ก ์์ํ๋ ์ผ๋ จ์ ์์ฌ-ํค๋(pseudo-header) ํ๋๋ฅผ ์ฌ์ฉํฉ๋๋ค. ์ด๋ฌํ ์์ฌ-ํค๋ ํ๋๋ ๋ฉ์์ง ์ ์ด ๋ฐ์ดํฐ๋ฅผ ์ ๋ฌํฉ๋๋ค; ์์ธํ ๋ด์ฉ์ RFC 9110 ์น์ 6.2๋ฅผ ์ฐธ์กฐํ์ญ์์ค.
์์ฌ-ํค๋ ํ๋๋ HTTP ํ๋๊ฐ ์๋๋๋ค. ์๋ํฌ์ธํธ๋ ์ด ๋ฌธ์์ ์ ์๋ ๊ฒ ์ด์ธ์ ์์ฌ-ํค๋ ํ๋๋ฅผ ์์ฑํด์๋ ์ ๋ฉ๋๋ค(MUST NOT). ๊ทธ๋ฌ๋ ํ์ฅ์ผ๋ก ์ด ์ ํ์ ์์ ์ด ํ์๋ ์ ์์ต๋๋ค; ์์ธํ ๋ด์ฉ์ ์น์ 9๋ฅผ ์ฐธ์กฐํ์ญ์์ค.
์์ฌ-ํค๋ ํ๋๋ ์ ์๋ ๋ฌธ๋งฅ์์๋ง ์ ํจํฉ๋๋ค. ์์ฒญ์ ๋ํด ์ ์๋ ์์ฌ-ํค๋ ํ๋๋ ์๋ต์ ๋ํ๋๋ฉด ์ ๋๋ฉฐ(MUST NOT), ์๋ต์ ๋ํด ์ ์๋ ์์ฌ-ํค๋ ํ๋๋ ์์ฒญ์ ๋ํ๋๋ฉด ์ ๋ฉ๋๋ค(MUST NOT). ์์ฌ-ํค๋ ํ๋๋ ํธ๋ ์ผ๋ฌ ์น์ ์ ๋ํ๋๋ฉด ์ ๋ฉ๋๋ค(MUST NOT). ์๋ํฌ์ธํธ๋ ์ ์๋์ง ์์๊ฑฐ๋ ์๋ชป๋ ์์ฌ-ํค๋ ํ๋๋ฅผ ํฌํจํ๋ ์์ฒญ ๋๋ ์๋ต์ malformed๋ก ์ฒ๋ฆฌํด์ผ ํฉ๋๋ค(MUST).
๋ชจ๋ ์์ฌ-ํค๋ ํ๋๋ ์ผ๋ฐ ํค๋ ํ๋๋ณด๋ค ๋จผ์ ํค๋ ์น์ ์ ๋ํ๋์ผ ํฉ๋๋ค(MUST). ์ผ๋ฐ ํค๋ ํ๋ ์ดํ์ ๋ํ๋๋ ์์ฌ-ํค๋ ํ๋๋ฅผ ํฌํจํ๋ ์์ฒญ ๋๋ ์๋ต์ malformed๋ก ์ฒ๋ฆฌ๋์ด์ผ ํฉ๋๋ค(MUST).
4.3.1. ์์ฒญ ์์ฌ-ํค๋ ํ๋
์์ฒญ์ ๋ํด ๋ค์ ์์ฌ-ํค๋ ํ๋๋ค์ด ์ ์๋ฉ๋๋ค:
- ":method":
-
HTTP ๋ฉ์๋๋ฅผ ํฌํจํฉ๋๋ค(RFC 9110 ์น์ 9 ์ฐธ์กฐ).
- ":scheme":
-
๋์ URI์ ์คํด ๋ถ๋ถ์ ํฌํจํฉ๋๋ค(RFC 3986 ์น์ 3.1 ์ฐธ์กฐ).
-
:scheme ์์ฌ-ํค๋๋ "http"์ "https"๋ก ์ ํ๋์ง ์์ต๋๋ค. ํ๋ก์๋ ๊ฒ์ดํธ์จ์ด๋ ๋น-HTTP ์คํด์ ๋ํ ์์ฒญ์ ๋ฒ์ญํ์ฌ HTTP๋ฅผ ์ฌ์ฉํด ๋น-HTTP ์๋น์ค์ ์ํธ์์ฉํ ์ ์๊ฒ ํฉ๋๋ค.
-
"https" ์ด์ธ์ ์คํด ์ฌ์ฉ์ ๊ดํ ์ง์นจ์ ์น์ 3.1.2๋ฅผ ์ฐธ์กฐํ์ญ์์ค.
- ":authority":
-
๋์ URI์ authority ๋ถ๋ถ์ ํฌํจํฉ๋๋ค(RFC 3986 ์น์ 3.2 ์ฐธ์กฐ). "http" ๋๋ "https" ์คํด์ ๊ฐ์ง URI์ ๊ฒฝ์ฐ, ์ด authority๋ ๋ ์ด์ ์ฌ์ฉ๋์ง ์๋ userinfo ํ์ ๊ตฌ์ฑ์์๋ฅผ ํฌํจํด์๋ ์ ๋ฉ๋๋ค(MUST NOT).
-
HTTP/1.1 ์์ฒญ ์ค์ ์ ํํ ์ฌํํ๊ธฐ ์ํด, ์ด ์์ฌ-ํค๋ ํ๋๋ ๋ฉ์๋๋ณ ํ์์ ์์ฒญ-ํ๊น์ ๊ฐ์ง HTTP/1.1 ์์ฒญ์ ๋ฒ์ญํ ๋ ์๋ต๋์ด์ผ ํฉ๋๋ค(MUST); ์์ธํ ๋ด์ฉ์ RFC 9110 ์น์ 7.1์ ์ฐธ์กฐํ์ญ์์ค. HTTP/3 ์์ฒญ์ ์ง์ ์์ฑํ๋ ํด๋ผ์ด์ธํธ๋ Host ํค๋ ํ๋ ๋์ :authority ์์ฌ-ํค๋ ํ๋๋ฅผ ์ฌ์ฉํ๋ ๊ฒ์ด ๊ถ์ฅ๋ฉ๋๋ค(SHOULD). HTTP/3 ์์ฒญ์ HTTP/1.1์ผ๋ก ๋ณํํ๋ ์ค๊ฐ์๋ ์์ฒญ์ Host ํ๋๊ฐ ์์ผ๋ฉด :authority ์์ฌ-ํค๋ ๊ฐ์ ๋ณต์ฌํ์ฌ Host ํ๋๋ฅผ ์์ฑํด์ผ ํฉ๋๋ค(MUST).
- ":path":
-
๋์ URI์ ๊ฒฝ๋ก ๋ฐ ์ฟผ๋ฆฌ ๋ถ๋ถ์ ํฌํจํฉ๋๋ค("path-absolute" ์์ฑ๋ฌผ๊ณผ ์ ํ์ ์ผ๋ก ?(ASCII 0x3f) ๋ค์ "query" ์์ฑ๋ฌผ; RFC 3986์ ์น์ 3.3 ๋ฐ 3.4 ์ฐธ์กฐ).
-
"http" ๋๋ "https" URI์ ๊ฒฝ์ฐ ์ด ์์ฌ-ํค๋ ํ๋๋ ๋น์ด ์์ ์ ์์ผ๋ฉฐ, ๊ฒฝ๋ก ๊ตฌ์ฑ์์๊ฐ ์๋ "http" ๋๋ "https" URI๋ /(ASCII 0x2f)๋ฅผ ํฌํจํด์ผ ํฉ๋๋ค(MUST). ๊ฒฝ๋ก ๊ตฌ์ฑ์์๊ฐ ์๋ OPTIONS ์์ฒญ์ :path ์์ฌ-ํค๋์ *(ASCII 0x2a)๋ฅผ ํฌํจํฉ๋๋ค.
๋ชจ๋ HTTP/3 ์์ฒญ์ :method, :scheme, :path ์์ฌ-ํค๋ ํ๋๋ฅผ ์ ํํ ํ๋์ฉ ํฌํจํด์ผ ํฉ๋๋ค(MUST), CONNECT ์์ฒญ์ ๊ฒฝ์ฐ๋ ์์ธ์ ๋๋ค; ์น์ 4.4๋ฅผ ์ฐธ์กฐํ์ญ์์ค.
:scheme ์์ฌ-ํค๋๊ฐ ๊ถํ(authority) ๊ตฌ์ฑ์์๋ฅผ ํ์๋ก ๊ฐ์ง๋ ์คํด(์: "http", "https")์ ์๋ณํ๋ ๊ฒฝ์ฐ, ์์ฒญ์ :authority ์์ฌ-ํค๋ ํ๋ ๋๋ Host ํค๋ ํ๋ ์ค ํ๋๋ฅผ ํฌํจํด์ผ ํฉ๋๋ค(MUST) . ์ด๋ฌํ ํ๋๊ฐ ์กด์ฌํ ๊ฒฝ์ฐ ๋น์ด ์์ด์๋ ์ ๋๋ฉฐ(MUST NOT), ๋ ํ๋๊ฐ ๋ชจ๋ ์กด์ฌํ๋ค๋ฉด ๋์ผํ ๊ฐ์ ๊ฐ์ ธ์ผ ํฉ๋๋ค(MUST). ์คํด์ด ๊ถํ ๊ตฌ์ฑ์์๋ฅผ ํ์๋ก ๊ฐ์ง ์์ผ๋ฉฐ ์์ฒญ ํ๊น์ ์ ๊ณต๋์ง ์์ ๊ฒฝ์ฐ, ์์ฒญ์ :authority ์์ฌ-ํค๋ ๋๋ Host ํค๋๋ฅผ ํฌํจํด์๋ ์ ๋ฉ๋๋ค(MUST NOT).
ํ์ ์์ฌ-ํค๋ ํ๋๋ฅผ ์๋ตํ๊ฑฐ๋ ํด๋น ์์ฌ-ํค๋ ํ๋์ ์๋ชป๋ ๊ฐ์ ํฌํจํ๋ HTTP ์์ฒญ์ malformed์ ๋๋ค.
HTTP/3๋ HTTP/1.1 ์์ฒญ ์ค์ ํฌํจ๋ ๋ฒ์ ์๋ณ์๋ฅผ ์ ๋ฌํ๋ ๋ฐฉ๋ฒ์ ์ ์ํ์ง ์์ต๋๋ค. HTTP/3 ์์ฒญ์ ๋ฌต์์ ์ผ๋ก "3.0" ํ๋กํ ์ฝ ๋ฒ์ ์ ๊ฐ์ง๋๋ค.
4.3.2. ์๋ต ์์ฌ-ํค๋ ํ๋
์๋ต์ ๋ํด์๋ HTTP ์ํ ์ฝ๋๋ฅผ ์ ๋ฌํ๋ ๋จ์ผ ":status" ์์ฌ-ํค๋ ํ๋๊ฐ ์ ์๋ฉ๋๋ค; ์์ธํ ๋ด์ฉ์ RFC 9110 ์น์ 15๋ฅผ ์ฐธ์กฐํ์ญ์์ค. ์ด ์์ฌ-ํค๋ ํ๋๋ ๋ชจ๋ ์๋ต์ ํฌํจ๋์ด์ผ ํฉ๋๋ค(MUST); ๊ทธ๋ ์ง ์์ผ๋ฉด ์๋ต์ malformed์ ๋๋ค.
HTTP/3๋ HTTP/1.1 ์ํ ์ค์ ํฌํจ๋ ๋ฒ์ ์ด๋ ์ด์ ๊ตฌ๋ฌธ(reason phrase)์ ์ ๋ฌํ๋ ๋ฐฉ๋ฒ์ ์ ์ํ์ง ์์ต๋๋ค. HTTP/3 ์๋ต์ ๋ฌต์์ ์ผ๋ก "3.0" ํ๋กํ ์ฝ ๋ฒ์ ์ ๊ฐ์ง๋๋ค.
4.4. CONNECT ๋ฉ์๋
CONNECT ๋ฉ์๋๋ ์์ ์๊ฐ ์์ฒญ-ํ๊น์ผ๋ก ์๋ณ๋ ๋์ ์ค๋ฆฌ์ง ์๋ฒ์ ๋ํด ํฐ๋์ ์ค์ ํ๋๋ก ์์ฒญํฉ๋๋ค; ์์ธํ ๋ด์ฉ์ RFC 9110 ์น์ 9.3.6๋ฅผ ์ฐธ์กฐํ์ญ์์ค. ์ฃผ๋ก HTTP ํ๋ก์์ ํจ๊ป ์ฌ์ฉ๋์ด ์ค๋ฆฌ์ง ์๋ฒ์ TLS ์ธ์ ์ ์ค์ ํ๊ณ "https" ๋ฆฌ์์ค์ ์ํธ์์ฉํ๋ ๋ฐ ์ฌ์ฉ๋ฉ๋๋ค.
HTTP/1.x์์๋ CONNECT๊ฐ ์ ์ฒด HTTP ์ฐ๊ฒฐ์ ์๊ฒฉ ํธ์คํธ๋ก์ ํฐ๋๋ก ๋ณํํ๋ ๋ฐ ์ฌ์ฉ๋ฉ๋๋ค. HTTP/2 ๋ฐ HTTP/3์์๋ CONNECT ๋ฉ์๋๊ฐ ๋จ์ผ ์คํธ๋ฆผ์ ํตํด ํฐ๋์ ์ค์ ํ๋ ๋ฐ ์ฌ์ฉ๋ฉ๋๋ค.
CONNECT ์์ฒญ์ ๋ค์๊ณผ ๊ฐ์ด ๊ตฌ์ฑ๋์ด์ผ ํฉ๋๋ค(MUST):
- :method ์์ฌ-ํค๋ ํ๋๋ "CONNECT"๋ก ์ค์ ๋๋ค
- :scheme ๋ฐ :path ์์ฌ-ํค๋ ํ๋๋ ์๋ต๋๋ค
- :authority ์์ฌ-ํค๋ ํ๋๋ ์ฐ๊ฒฐํ ํธ์คํธ์ ํฌํธ๋ฅผ ํฌํจํ๋ค(์ด๋ CONNECT ์์ฒญ์ authority-form ์์ฒญ-ํ๊น์ ํด๋น).
request stream์ ์ ์ก์ด ์ข ๋ฃ๋ ํ์๋ ์ ์ก๋ ๋ฐ์ดํฐ๋ฅผ ๋ด๊ธฐ ์ํด ์์ฒญ์ ๋์์ ์ด๋ ค ์์ต๋๋ค. ์ด ๊ท์น์ ์ค์ํ์ง ์๋ CONNECT ์์ฒญ์ malformed์ ๋๋ค.
CONNECT๋ฅผ ์ง์ํ๋ ํ๋ก์๋ :authority ์์ฌ-ํค๋ ํ๋์ ์๋ณ๋ ์๋ฒ์ TCP ์ฐ๊ฒฐ์ ์ค์ ํฉ๋๋ค([RFC0793]). ์ด ์ฐ๊ฒฐ์ด ์ฑ๊ณต์ ์ผ๋ก ์ค์ ๋๋ฉด, ํ๋ก์๋ ํด๋ผ์ด์ธํธ์๊ฒ 2xx ๊ณ์ด ์ํ ์ฝ๋๋ฅผ ํฌํจํ HEADERS ํ๋ ์์ ์ ์กํฉ๋๋ค(์์ธํ ๋ด์ฉ์ RFC 9110 ์น์ 15.3).
์คํธ๋ฆผ์ ๋ชจ๋ DATA ํ๋ ์์ TCP ์ฐ๊ฒฐ์์ ์ ์ก๋๊ฑฐ๋ ์์ ๋ ๋ฐ์ดํฐ์ ํด๋นํฉ๋๋ค. ํด๋ผ์ด์ธํธ๊ฐ ์ ์กํ DATA ํ๋ ์์ ํ์ด๋ก๋๋ ํ๋ก์๊ฐ TCP ์๋ฒ๋ก ์ ์กํ๊ณ , TCP ์๋ฒ๋ก๋ถํฐ ์์ ๋ ๋ฐ์ดํฐ๋ ํ๋ก์๊ฐ DATA ํ๋ ์์ผ๋ก ํด๋ผ์ด์ธํธ์๊ฒ ํจํค์งํ์ฌ ์ ์กํฉ๋๋ค. TCP ์ธ๊ทธ๋จผํธ์ ํฌ๊ธฐ ๋ฐ ์๊ฐ HTTP DATA ๋๋ QUIC STREAM ํ๋ ์์ ํฌ๊ธฐ ๋ฐ ์์ ์์ธก ๊ฐ๋ฅํ๊ฒ ๋งคํ๋๋ค๊ณ ๋ณด์ฅ๋์ง ์์์ ์ ์ํ์ญ์์ค.
CONNECT ๋ฉ์๋๊ฐ ์๋ฃ๋๋ฉด ์คํธ๋ฆผ์์ ์ ์กํ ์ ์๋ ๊ฒ์ DATA ํ๋ ์๋ฟ์ ๋๋ค. ํ์ฅ ํ๋ ์์ ํ์ฅ ์ ์์์ ๋ช ์์ ์ผ๋ก ํ์ฉ๋๋ ๊ฒฝ์ฐ์๋ง ์ฌ์ฉํ ์ ์์ต๋๋ค(MAY). ๋ค๋ฅธ ์๋ ค์ง ํ๋ ์ ์ ํ์ ์์ ์ connection error ์ ํ H3_FRAME_UNEXPECTED๋ก ์ฒ๋ฆฌ๋์ด์ผ ํฉ๋๋ค(MUST).
TCP ์ฐ๊ฒฐ์ ์ด๋ ํผ์ด์ ์ํด์๋ ๋ซํ ์ ์์ต๋๋ค. ํด๋ผ์ด์ธํธ๊ฐ request stream์ ์ข ๋ฃํ๋ฉด(์ฆ, ํ๋ก์์์ ์์ ์คํธ๋ฆผ์ด "Data Recvd" ์ํ์ ๋ค์ด๊ฐ), ํ๋ก์๋ TCP ์๋ฒ์ ๋ํ ์ฐ๊ฒฐ์์ FIN ๋นํธ๋ฅผ ์ค์ ํฉ๋๋ค. ํ๋ก์๊ฐ FIN ๋นํธ๊ฐ ์ค์ ๋ ํจํท์ ์์ ํ๋ฉด, ํด๋ผ์ด์ธํธ์๊ฒ ๋ณด๋ด๋ ์ ์ก ์คํธ๋ฆผ์ ๋ซ์ต๋๋ค. ๋จ๋ฐฉํฅ์ผ๋ก ๋ฐ์ชฝ ๋ซํ TCP ์ฐ๊ฒฐ์ ๋ฌดํจ๋ ์๋์ง๋ง ์ข ์ข ์๋ฒ์์ ์ ๋๋ก ์ฒ๋ฆฌ๋์ง ์์ผ๋ฏ๋ก, ํด๋ผ์ด์ธํธ๋ CONNECT ๋์์์ ๋ฐ์ดํฐ๋ฅผ ๋ฐ์ ๊ฒ์ผ๋ก ์์๋๋ ๋์ ์ ์ก์ ์ํ ์คํธ๋ฆผ์ ๋ซ์์๋ ์ ๋ฉ๋๋ค(SHOULD NOT).
TCP connection error๋ ์คํธ๋ฆผ์ ๊ฐ์์ค๋ฝ๊ฒ ์ข ๋ฃํจ์ผ๋ก์จ ์ ํธ๋ฉ๋๋ค. ํ๋ก์๋ RST ๋นํธ๊ฐ ์ค์ ๋ TCP ์ธ๊ทธ๋จผํธ๋ฅผ ์์ ํ๋ ๊ฒ์ ํฌํจํ TCP ์ฐ๊ฒฐ์ ๋ชจ๋ ์ค๋ฅ๋ฅผ stream error ์ ํ H3_CONNECT_ERROR๋ก ์ฒ๋ฆฌํฉ๋๋ค.
๋ง์ฐฌ๊ฐ์ง๋ก, ํ๋ก์๊ฐ ์คํธ๋ฆผ ๋๋ QUIC ์ฐ๊ฒฐ์์ ์ค๋ฅ๋ฅผ ๊ฐ์งํ๋ฉด TCP ์ฐ๊ฒฐ์ ๋ซ์์ผ ํฉ๋๋ค(MUST). ํ๋ก์๊ฐ ํด๋ผ์ด์ธํธ๊ฐ ์คํธ๋ฆผ์ ๋ฆฌ์ ํ๊ฑฐ๋ ์คํธ๋ฆผ์์ ์ฝ๊ธฐ๋ฅผ ์ค๋จํ ๊ฒ์ ๊ฐ์งํ๋ฉด TCP ์ฐ๊ฒฐ์ ๋ซ์์ผ ํฉ๋๋ค(MUST). ์คํธ๋ฆผ์ด ๋ฆฌ์ ๋๊ฑฐ๋ ์ฝ๊ธฐ๊ฐ ํด๋ผ์ด์ธํธ์ ์ํด ์ค๋จ๋ ๊ฒฝ์ฐ, ํ๋ก์๋ ์คํธ๋ฆผ์ ๋ค๋ฅธ ๋ฐฉํฅ์ ๋ํด์๋ ๋์ผํ ์์ ์ ์ํํ์ฌ ์ ๋ฐฉํฅ ์คํธ๋ฆผ์ด ์ทจ์๋๋๋ก ํ๋ ๊ฒ์ด ๊ถ์ฅ๋ฉ๋๋ค(SHOULD). ๋ชจ๋ ๊ฒฝ์ฐ์, ๊ธฐ๋ฐ TCP ๊ตฌํ์ด ํ์ฉํ๋ค๋ฉด ํ๋ก์๋ RST ๋นํธ๊ฐ ์ค์ ๋ TCP ์ธ๊ทธ๋จผํธ๋ฅผ ๋ณด๋ด๋ ๊ฒ์ด ๊ถ์ฅ๋ฉ๋๋ค(SHOULD).
CONNECT๋ ์์์ ์๋ฒ๋ก ํฐ๋์ ์์ฑํ๋ฏ๋ก, CONNECT๋ฅผ ์ง์ํ๋ ํ๋ก์๋ ๊ทธ ์ฌ์ฉ์ ์๋ ค์ง ํฌํธ ์งํฉ์ด๋ ์์ ํ ์์ฒญ ๋์ ๋ชฉ๋ก์ผ๋ก ์ ํํ๋ ๊ฒ์ด ๊ถ์ฅ๋ฉ๋๋ค(SHOULD); ์์ธํ ๋ด์ฉ์ RFC 9110 ์น์ 9.3.6์ ์ฐธ์กฐํ์ญ์์ค.
4.5. HTTP ์ ๊ทธ๋ ์ด๋
HTTP/3๋ HTTP Upgrade ๋ฉ์ปค๋์ฆ(RFC 9110 ์น์ 7.8)์ด๋ 101 (Switching Protocols) ์ ๋ณด ์ํ ์ฝ๋(RFC 9110 ์น์ 15.2.2)๋ฅผ ์ง์ํ์ง ์์ต๋๋ค.
4.6. ์๋ฒ ํธ์
์๋ฒ ํธ์๋ ์๋ฒ๊ฐ ํด๋ผ์ด์ธํธ๊ฐ ํด๋น ์์ฒญ์ ํ ๊ฒ์ผ๋ก ์์ํ์ฌ ์์ฒญ-์๋ต ๊ตํ์ ํด๋ผ์ด์ธํธ๋ก ํธ์ํ ์ ์๊ฒ ํ๋ ์ํธ์์ฉ ๋ชจ๋์ ๋๋ค. ์ด๋ ์ ์ฌ์ ์ง์ฐ ๊ฐ์ ์ ์ํด ๋คํธ์ํฌ ์ฌ์ฉ์ ๊ฑฐ๋(trade-off)ํ๋ ๊ฒ์ ๋๋ค. HTTP/3์ ์๋ฒ ํธ์๋ RFC 9113 ์น์ 8.2์ ์ค๋ช ๋ ๋ด์ฉ๊ณผ ์ ์ฌํ์ง๋ง ๋ค๋ฅธ ๋ฉ์ปค๋์ฆ์ ์ฌ์ฉํฉ๋๋ค.
๊ฐ ์๋ฒ ํธ์์๋ ์๋ฒ๊ฐ ํ ๋นํ๋ ๊ณ ์ ํ push ID๊ฐ ์์ต๋๋ค. push ID๋ HTTP/3 ์ฐ๊ฒฐ ์๋ช ๋์ ๋ค์ํ ๋ฌธ๋งฅ์์ ํธ์๋ฅผ ์ฐธ์กฐํ๋ ๋ฐ ์ฌ์ฉ๋ฉ๋๋ค.
push ID ๊ณต๊ฐ์ 0์์ ์์ํ์ฌ MAX_PUSH_ID ํ๋ ์์ผ๋ก ์ค์ ๋ ์ต๋๊ฐ์ผ๋ก ๋๋ฉ๋๋ค. ํนํ, ํด๋ผ์ด์ธํธ๊ฐ MAX_PUSH_ID ํ๋ ์์ ์ ์กํ ์ดํ์์ผ ์๋ฒ๋ ํธ์๋ฅผ ํ ์ ์์ต๋๋ค. ํด๋ผ์ด์ธํธ๋ ์๋ฒ๊ฐ ์ฝ์ํ ์ ์๋ ํธ์ ์๋ฅผ ์ ์ดํ๊ธฐ ์ํด MAX_PUSH_ID ํ๋ ์์ ์ ์กํฉ๋๋ค. ์๋ฒ๋ 0๋ถํฐ ์์ํ์ฌ ์์ฐจ์ ์ผ๋ก push ID๋ฅผ ์ฌ์ฉํ๋ ๊ฒ์ด ๊ถ์ฅ๋ฉ๋๋ค(SHOULD). ํด๋ผ์ด์ธํธ๋ push stream์ ์์ ํ์ ๋, ์์ง MAX_PUSH_ID ํ๋ ์์ด ์ ์ก๋์ง ์์๊ฑฐ๋ ์คํธ๋ฆผ์ด ์ต๋ push ID๋ณด๋ค ํฐ push ID๋ฅผ ์ฐธ์กฐํ๋ฉด ์ด๋ฅผ connection error ์ ํ H3_ID_ERROR๋ก ์ฒ๋ฆฌํด์ผ ํฉ๋๋ค(MUST).
push ID๋ ์์ฒญ ๋ฉ์์ง์ ์ ์ด ๋ฐ์ดํฐ์ ํค๋ ํ๋๋ฅผ ์ด๋ฐํ๋ ํ๋ ์ด์์ PUSH_PROMISE ํ๋ ์์์ ์ฌ์ฉ๋ฉ๋๋ค. ์ด๋ฌํ ํ๋ ์์ ํธ์๋ฅผ ์์ฑํ request stream์์ ์ ์ก๋ฉ๋๋ค. ์ด๋ ์๋ฒ ํธ์๋ฅผ ํด๋ผ์ด์ธํธ ์์ฒญ๊ณผ ์ฐ๊ฒฐํ ์ ์๊ฒ ํฉ๋๋ค. ๋์ผํ push ID๊ฐ ์ฌ๋ฌ request streams์์ ์ฝ์๋ ๋, ์์ถ ํด์ ๋ ์์ฒญ ํ๋ ์น์ ์ ๋์ผํ ์์๋ก ๋์ผํ ํ๋๋ฅผ ํฌํจํด์ผ ํ๋ฉฐ ๊ฐ ํ๋์ ์ด๋ฆ๊ณผ ๊ฐ์ ๋์ผํด์ผ ํฉ๋๋ค(MUST).
๊ทธ ํ push ID๋ ํด๋น ์ฝ์์ ์ต์ข ์ ์ผ๋ก ์ดํํ๋ push stream์ ํฌํจ๋ฉ๋๋ค. ํด๋น push stream์ ์์ ์ด ์ดํํ๋ ์ฝ์์ push ID๋ฅผ ์๋ณํ๊ณ , ์ดํ ์น์ 4.1์ ์ค๋ช ๋ ๋๋ก ์ฝ์๋ ์์ฒญ์ ๋ํ ์๋ต์ ํฌํจํฉ๋๋ค.
๋ง์ง๋ง์ผ๋ก push ID๋ CANCEL_PUSH ํ๋ ์์์๋ ์ฌ์ฉ๋ ์ ์์ต๋๋ค; ์น์ 7.2.3 ์ฐธ์กฐ. ํด๋ผ์ด์ธํธ๋ ์ด ํ๋ ์์ ์ฌ์ฉํ์ฌ ์ฝ์๋ ๋ฆฌ์์ค๋ฅผ ์์ ํ๊ณ ์ ํ์ง ์์์ ํ์ํ๊ณ , ์๋ฒ๋ ์ด์ ์ฝ์์ ์ดํํ์ง ์์ ๊ฒ์์ ์๋ฆฌ๊ธฐ ์ํด ์ด ํ๋ ์์ ์ฌ์ฉํ ์ ์์ต๋๋ค.
๋ชจ๋ ์์ฒญ์ ํธ์ํ ์ ์๋ ๊ฒ์ ์๋๋๋ค. ์๋ฒ๋ ๋ค์ ์์ฑ์ ๊ฐ์ง ์์ฒญ์ ํธ์ํ ์ ์์ต๋๋ค(MAY):
- ์บ์ ๊ฐ๋ฅ(cacheable); RFC 9110 ์น์ 9.2.3 ์ฐธ์กฐ
- ์์ (safe); RFC 9110 ์น์ 9.2.1 ์ฐธ์กฐ
- ์์ฒญ ์ฝํ ์ธ ๋ ํธ๋ ์ผ๋ฌ ์น์ ์ ํฌํจํ์ง ์์
์๋ฒ๋ ์์ ์ด ๊ถํ์ ๊ฐ์ง๋ :authority ์์ฌ-ํค๋ ํ๋ ๊ฐ์ ํฌํจํด์ผ ํฉ๋๋ค(MUST). ํด๋ผ์ด์ธํธ๊ฐ ์์ง ํธ์๋ ์์ฒญ์ผ๋ก ํ์๋ ์ค๋ฆฌ์ง์ ๋ํด ์ฐ๊ฒฐ์ ๊ฒ์ฆํ์ง ์์๋ค๋ฉด, ํด๋ผ์ด์ธํธ๋ ํด๋น ์ค๋ฆฌ์ง์ ๋ํด ์์ฒญ์ ์ ์กํ๊ธฐ ์ ์ ์ํํ ๊ฒ๊ณผ ๋์ผํ ๊ฒ์ฆ ์ ์ฐจ๋ฅผ ์ํํด์ผ ํฉ๋๋ค(์น์ 3.3 ์ฐธ์กฐ). ์ด ๊ฒ์ฆ์ด ์คํจํ๋ฉด ํด๋ผ์ด์ธํธ๋ ํด๋น ์ค๋ฆฌ์ง์ ๋ํด ์๋ฒ๋ฅผ ๊ถํ ์๋ ๊ฒ์ผ๋ก ๊ฐ์ฃผํด์๋ ์ ๋ฉ๋๋ค(MUST NOT).
ํด๋ผ์ด์ธํธ๋ ์บ์ ๋ถ๊ฐํ๊ฑฐ๋ ์์ ์ฑ์ด ์๋ ค์ง์ง ์์๊ฑฐ๋ ์์ฒญ ์ฝํ ์ธ ๊ฐ ์์์ ๋ํ๋ด๋, ๋๋ ์๋ฒ๋ฅผ ํด๋น ์ค๋ฆฌ์ง์ ๋ํด ๊ถํ ์๋ ๊ฒ์ผ๋ก ์ฌ๊ธฐ์ง ์๋ ์์ฒญ์ ์ ๋ฌํ๋ PUSH_PROMISE ํ๋ ์์ ์์ ํ๋ฉด CANCEL_PUSH ํ๋ ์์ ๋ณด๋ด๋ ๊ฒ์ด ๊ถ์ฅ๋ฉ๋๋ค(SHOULD). ํด๋นํ๋ ์๋ต์ ์ฌ์ฉ๋๊ฑฐ๋ ์บ์๋์ด์๋ ์ ๋ฉ๋๋ค(MUST NOT).
๊ฐ ํธ์๋ ์๋ต์ ํ๋ ์ด์์ ํด๋ผ์ด์ธํธ ์์ฒญ๊ณผ ์ฐ๊ด๋ฉ๋๋ค. ํธ์๋ ํด๋น request stream์์ PUSH_PROMISE ํ๋ ์์ด ์์ ๋ ์์ฒญ๊ณผ ์ฐ๊ด๋ฉ๋๋ค. ๋์ผํ ์๋ฒ ํธ์๋ ๋์ผํ push ID๋ฅผ ๊ฐ์ง PUSH_PROMISE ํ๋ ์์ ์ฌ๋ฌ request streams์์ ์ฌ์ฉํ์ฌ ์ถ๊ฐ ํด๋ผ์ด์ธํธ ์์ฒญ๊ณผ ์ฐ๊ด๋ ์ ์์ต๋๋ค. ์ด๋ฌํ ์ฐ๊ด์ ํ๋กํ ์ฝ์ ๋์์ ์ํฅ์ ์ฃผ์ง ์์ง๋ง, ์ฌ์ฉ์ ์์ด์ ํธ๊ฐ ํธ์๋ ๋ฆฌ์์ค๋ฅผ ์ด๋ป๊ฒ ์ฌ์ฉํ ์ง ๊ฒฐ์ ํ ๋ ๊ณ ๋ คํ ์ ์์ต๋๋ค(MAY).
PUSH_PROMISE ํ๋ ์์ ์๋ต ๋ด ํน์ ๋ถ๋ถ๊ณผ์ ์์ ์ง์ ์ ์ค์ํฉ๋๋ค. ์๋ฒ๋ ์ฝ์๋ ์๋ต์ ์ฐธ์กฐํ๋ HEADERS ๋๋ DATA ํ๋ ์์ ๋ณด๋ด๊ธฐ ์ ์ PUSH_PROMISE ํ๋ ์์ ๋ณด๋ด๋ ๊ฒ์ด ๊ถ์ฅ๋ฉ๋๋ค(SHOULD). ์ด๋ ํด๋ผ์ด์ธํธ๊ฐ ์๋ฒ๊ฐ ํธ์ํ ๋ฆฌ์์ค๋ฅผ ์์ฒญํ ๊ฐ๋ฅ์ฑ์ ์ค์ ๋๋ค.
์ฌ์ ๋ ฌ๋ก ์ธํด push stream ๋ฐ์ดํฐ๊ฐ ๊ด๋ จ PUSH_PROMISE ํ๋ ์๋ณด๋ค ๋จผ์ ๋์ฐฉํ ์ ์์ต๋๋ค. ํด๋ผ์ด์ธํธ๊ฐ ์์ง ์๋ ค์ง์ง ์์ push ID๋ฅผ ๊ฐ์ง ์ push stream์ ์์ ํ๋ฉด, ๊ด๋ จ ํด๋ผ์ด์ธํธ ์์ฒญ๊ณผ ํธ์๋ ์์ฒญ ํค๋ ํ๋๋ ์ ์ ์์ต๋๋ค. ํด๋ผ์ด์ธํธ๋ ์ผ์นํ๋ PUSH_PROMISE ํ๋ ์์ ๊ธฐ๋ํ๋ฉฐ ์คํธ๋ฆผ ๋ฐ์ดํฐ๋ฅผ ๋ฒํผ๋งํ ์ ์์ต๋๋ค. ํด๋ผ์ด์ธํธ๋ ์คํธ๋ฆผ ํ๋ฆ ์ ์ด(RFC 9000 ์น์ 4.1)๋ฅผ ์ฌ์ฉํ์ฌ ์๋ฒ๊ฐ ํธ์ ์คํธ๋ฆผ์ ์ปค๋ฐํ ์ ์๋ ๋ฐ์ดํฐ ์์ ์ ํํ ์ ์์ต๋๋ค. ํด๋ผ์ด์ธํธ๋ ํฉ๋ฆฌ์ ์ธ ์๊ฐ ๋ด์ ๋์ํ๋ PUSH_PROMISE ํ๋ ์์ด ์ฒ๋ฆฌ๋์ง ์์ผ๋ฉด push streams์์์ ์ฝ๊ธฐ๋ฅผ ์ค๋จํ๊ณ ์ด๋ฏธ ์ฝ์ ๋ฐ์ดํฐ๋ฅผ ํ๊ธฐํ๋ ๊ฒ์ด ๊ถ์ฅ๋ฉ๋๋ค(SHOULD).
ํด๋ผ์ด์ธํธ๊ฐ ํธ์๋ฅผ ์ทจ์ํ ์ดํ์ push stream ๋ฐ์ดํฐ๊ฐ ๋์ฐฉํ ์๋ ์์ต๋๋ค. ์ด ๊ฒฝ์ฐ ํด๋ผ์ด์ธํธ๋ ์ค๋ฅ ์ฝ๋ H3_REQUEST_CANCELLED๋ก ์คํธ๋ฆผ ์ฝ๊ธฐ๋ฅผ ์ค๋จ(abort)ํ ์ ์์ต๋๋ค. ์ด๋ ์๋ฒ์๊ฒ ์ถ๊ฐ ๋ฐ์ดํฐ๋ฅผ ์ ์กํ์ง ๋ง ๊ฒ์ ์์ฒญํ๋ฉฐ ์์ ์ ํด๋น ๋ฐ์ดํฐ๊ฐ ํ๊ธฐ๋ ๊ฒ์์ ๋ํ๋ ๋๋ค.
์บ์ ๊ฐ๋ฅ(์์ธํ ๋ด์ฉ์ RFC 9111 ์น์ 3)ํ ํธ์๋ ์๋ต์ ํด๋ผ์ด์ธํธ๊ฐ HTTP ์บ์๋ฅผ ๊ตฌํํ ๊ฒฝ์ฐ ํด๋ผ์ด์ธํธ์ ์ํด ์ ์ฅ๋ ์ ์์ต๋๋ค. ํธ์๋ ์๋ต์ ์์ ์์ ์ ์ค๋ฆฌ์ง ์๋ฒ์์ ์ฑ๊ณต์ ์ผ๋ก ๊ฒ์ฆ๋ ๊ฒ์ผ๋ก ๊ฐ์ฃผ๋ฉ๋๋ค(์: "no-cache" ์บ์ ์๋ต ์ง์์๊ฐ ์๋ ๊ฒฝ์ฐ; RFC 9111 ์น์ 5.2.2.4 ์ฐธ์กฐ).
์บ์ ๋ถ๊ฐํ ํธ์๋ ์๋ต์ ์ด๋ค HTTP ์บ์์ ์ํด์๋ ์ ์ฅ๋์ด์๋ ์ ๋ฉ๋๋ค(MUST NOT). ๊ทธ๋ฌ๋ ์ ํ๋ฆฌ์ผ์ด์ ์ ๋ณ๋๋ก ์ ๊ณต๋ ์๋ ์์ต๋๋ค(MAY).
5. ์ฐ๊ฒฐ ์ข ๋ฃ
์ผ๋จ ์๋ฆฝ๋๋ฉด, HTTP/3 ์ฐ๊ฒฐ์ ์ฐ๊ฒฐ์ด ๋ซํ ๋๊น์ง ์ฌ๋ฌ ์์ฒญ๊ณผ ์๋ต์ ์ค๋ ๊ธฐ๊ฐ์ ๊ฑธ์ณ ์ฒ๋ฆฌํ๋ ๋ฐ ์ฌ์ฉํ ์ ์์ต๋๋ค. ์ฐ๊ฒฐ ์ข ๋ฃ๋ ์ฌ๋ฌ ๊ฐ์ง ๋ค๋ฅธ ๋ฐฉ์์ผ๋ก ๋ฐ์ํ ์ ์์ต๋๋ค.
5.1. ์ ํด ์ฐ๊ฒฐ
๊ฐ QUIC ์๋ํฌ์ธํธ๋ ํธ๋์ ฐ์ดํฌ ๋์ ์ ํด ํ์์์์ ์ ์ธํฉ๋๋ค. QUIC ์ฐ๊ฒฐ์ด ์ด ๊ธฐ๊ฐ๋ณด๋ค ์ค๋ ์ ํด ์ํ(ํจํท ์์ ์์)๋ก ์ ์ง๋๋ฉด, ํผ์ด๋ ํด๋น ์ฐ๊ฒฐ์ด ๋ซํ ๊ฒ์ผ๋ก ๊ฐ์ฃผํฉ๋๋ค. HTTP/3 ๊ตฌํ์ฒด๋ ๊ธฐ์กด ์ฐ๊ฒฐ์ด QUIC ํธ๋์ ฐ์ดํฌ ๋์ ํ์๋ ์ ํด ํ์์์๋ณด๋ค ์ค๋ ์ ํด ์ํ์์ ๊ฒฝ์ฐ ์ ์์ฒญ์ ์ฒ๋ฆฌํ๊ธฐ ์ํด ์๋ก์ด HTTP/3 ์ฐ๊ฒฐ์ ์ด์ด์ผ ํ๋ฉฐ, ์ ํด ํ์์์์ ์ ๊ทผํ๊ณ ์์ ๊ฒฝ์ฐ์๋ ๊ทธ๋ ๊ฒ ํด์ผ ํฉ๋๋ค(SHOULD); ๊ด๋ จ ๋ด์ฉ์ QUIC-TRANSPORT์ ์น์ 10.1์ ์ฐธ์กฐํ์ญ์์ค.
HTTP ํด๋ผ์ด์ธํธ๋ ์์ฒญ์ ๋ํ ์๋ต์ด๋ ์๋ฒ ํธ์๊ฐ ๋จ์ ์๋ ๋์ ์ ์ก์ด ์ฐ๊ฒฐ์ ์ ์งํ๋๋ก ์์ฒญํ๋ ๊ฒ์ด ์์๋ฉ๋๋ค(์์ธํ ๋ด์ฉ์ QUIC-TRANSPORT ์น์ 10.1.2 ์ฐธ์กฐ). ํด๋ผ์ด์ธํธ๊ฐ ์๋ฒ๋ก๋ถํฐ ์๋ต์ ๊ธฐ๋ํ์ง ์์ ๋๋ ํ์ํ์ง ์์ ์ ์๋ ์ฐ๊ฒฐ์ ์ ์งํ๋ ค๊ณ ๋ ธ๋ ฅํ๊ธฐ๋ณด๋ค๋ ์ ํด ์ฐ๊ฒฐ์ด ํ์์์๋๊ฒ ๋๋๋ ๊ฒ์ด ๋ฐ๋์งํฉ๋๋ค. ๊ฒ์ดํธ์จ์ด๋ ์๋ฒ์ ๋ํ ์ฐ๊ฒฐ ์ค์ ์ง์ฐ์ ํผํ๊ธฐ ์ํด ํ์๋ฅผ ์์ํ์ฌ ์ฐ๊ฒฐ์ ์ ์งํ ์ ์์ต๋๋ค(MAY). ์๋ฒ๋ ์ ๊ทน์ ์ผ๋ก ์ฐ๊ฒฐ์ ์ ์งํด์๋ ์ ๋ฉ๋๋ค(SHOULD NOT).
5.2. ์ฐ๊ฒฐ ์ ง๋ค์ด
์ฐ๊ฒฐ์ด ์ ํด ์ํ๊ฐ ์๋ ๋์๋, ์ด๋ ํ์ชฝ ์๋ํฌ์ธํธ๋ ์ฐ๊ฒฐ ์ฌ์ฉ์ ์ค๋จํ๊ณ ์ ์์ ์ธ ์ฐ๊ฒฐ ์ข ๋ฃ๋ฅผ ์์ํ๊ธฐ๋ก ๊ฒฐ์ ํ ์ ์์ต๋๋ค. ์๋ํฌ์ธํธ๋ GOAWAY ํ๋ ์์ ์ ์กํ์ฌ HTTP/3 ์ฐ๊ฒฐ์ ์ ์ ์ข ๋ฃ๋ฅผ ์์ํฉ๋๋ค. GOAWAY ํ๋ ์์๋ ์์ ์์๊ฒ ์ด ์ฐ๊ฒฐ์์ ์ฒ๋ฆฌ๋์๊ฑฐ๋ ์ฒ๋ฆฌ๋์์ ์ ์๋ ์์ฒญ ๋๋ ํธ์์ ๋ฒ์๋ฅผ ๋ํ๋ด๋ ์๋ณ์๊ฐ ํฌํจ๋ฉ๋๋ค. ์๋ฒ๋ ํด๋ผ์ด์ธํธ๊ฐ ์์ํ ์๋ฐฉํฅ ์คํธ๋ฆผ ID๋ฅผ, ํด๋ผ์ด์ธํธ๋ push ID๋ฅผ ๋ณด๋ ๋๋ค. ํ์๋ ์๋ณ์ ์ด์์ธ ์์ฒญ์ด๋ ํธ์๋ GOAWAY๋ฅผ ๋ณด๋ธ ์ธก์์ ๊ฑฐ๋ถ๋ฉ๋๋ค(์น์ 4.1.1 ์ฐธ์กฐ). ์ฒ๋ฆฌ๋ ์์ฒญ์ด๋ ํธ์๊ฐ ์๋ค๋ฉด ์ด ์๋ณ์๋ 0์ผ ์ ์์ต๋๋ค(MAY).
GOAWAY ํ๋ ์์ ํฌํจ๋ ์ ๋ณด๋ ํด๋ผ์ด์ธํธ์ ์๋ฒ๊ฐ HTTP/3 ์ฐ๊ฒฐ ์ข ๋ฃ ์ด์ ์ ์ด๋ค ์์ฒญ์ด๋ ํธ์๊ฐ ์๋ฝ๋์๋์ง ํฉ์ํ๋ ๋ฐ ๋์์ ์ค๋๋ค. GOAWAY ํ๋ ์์ ์ ์กํ ํ, ํด๋น ์๋ํฌ์ธํธ๋ ์ํฅ์ ๋ฐ๋ ์คํธ๋ฆผ์ ์ ์ก ์ํ๋ฅผ ์ ๋ฆฌํ๊ธฐ ์ํด ํ์๋ ์๋ณ์๋ณด๋ค ํฌ๊ฑฐ๋ ๊ฐ์ ์๋ณ์๋ฅผ ๊ฐ์ง ๋ชจ๋ ์์ฒญ์ด๋ ํธ์๋ฅผ ๋ช ์์ ์ผ๋ก ์ทจ์(์น์ 4.1.1 ๋ฐ ์น์ 7.2.3 ์ฐธ์กฐ)ํด์ผ ํฉ๋๋ค(SHOULD). ๋ ๋ง์ ์์ฒญ์ด๋ ํธ์๊ฐ ๋์ฐฉํ๋ ๋์์๋ ์ด๋ฅผ ๊ณ์ ์ํํด์ผ ํฉ๋๋ค(SHOULD).
์๋ํฌ์ธํธ๋ ํผ์ด๋ก๋ถํฐ GOAWAY ํ๋ ์์ ์์ ํ ํ์๋ ํด๋น ์ฐ๊ฒฐ์์ ์๋ก์ด ์์ฒญ์ ์์ํ๊ฑฐ๋ ์๋ก์ด ํธ์๋ฅผ ์ฝ์ํด์๋ ์ ๋ฉ๋๋ค(MUST NOT). ํด๋ผ์ด์ธํธ๋ ์ถ๊ฐ ์์ฒญ์ ๋ณด๋ด๊ธฐ ์ํด ์ ์ฐ๊ฒฐ์ ์๋ฆฝํ ์ ์์ต๋๋ค(MAY).
์ผ๋ถ ์์ฒญ์ด๋ ํธ์๋ ์ด๋ฏธ ์ ์ก ์ค์ผ ์ ์์ต๋๋ค:
-
GOAWAY ํ๋ ์์ ์์ ํ์ ๋, ํด๋ผ์ด์ธํธ๊ฐ ์ด๋ฏธ GOAWAY ํ๋ ์์ ํฌํจ๋ ์๋ณ์๋ณด๋ค ํฌ๊ฑฐ๋ ๊ฐ์ ์คํธ๋ฆผ ID๋ก ์์ฒญ์ ๋ณด๋๋ค๋ฉด, ํด๋น ์์ฒญ์ ์ฒ๋ฆฌ๋์ง ์์ต๋๋ค. ํด๋ผ์ด์ธํธ๋ ์ฒ๋ฆฌ๋์ง ์์ ์์ฒญ์ ๋ค๋ฅธ HTTP ์ฐ๊ฒฐ์์ ์์ ํ๊ฒ ์ฌ์๋ํ ์ ์์ต๋๋ค. ํด๋ผ์ด์ธํธ๊ฐ ์์ฒญ์ ์ฌ์๋ํ ์ ์๋ ๊ฒฝ์ฐ ์๋ฒ๊ฐ ์ฐ๊ฒฐ์ ๋ซ์ ๋ ์งํ ์ค์ธ ๋ชจ๋ ์์ฒญ์ ์๊ฒ ๋ฉ๋๋ค.
GOAWAY ํ๋ ์์ ์๋ ์คํธ๋ฆผ ID๋ณด๋ค ์์ ์คํธ๋ฆผ ID์ ์์ฒญ๋ค์ ์ฒ๋ฆฌ๋์์ ์๋ ์์ต๋๋ค; ํด๋น ์์ฒญ์ ๋ํ ์ํ๋ ์๋ต์ด ์์ ๋๊ฑฐ๋ ํด๋น ์คํธ๋ฆผ์ด ๊ฐ๋ณ์ ์ผ๋ก ๋ฆฌ์ ๋๊ฑฐ๋ ๋ ๋ฎ์ ์คํธ๋ฆผ ID๋ฅผ ํฌํจํ๋ ๋ค๋ฅธ GOAWAY๊ฐ ์์ ๋๊ฑฐ๋ ์ฐ๊ฒฐ์ด ์ข ๋ฃ๋ ๋๊น์ง ์ ์ ์์ต๋๋ค.
์๋ฒ๋ ์ฒ๋ฆฌ๋์ง ์์ ๊ฒฝ์ฐ ํ์๋ ID๋ณด๋ค ๋ฎ์ ์คํธ๋ฆผ์ ๊ฐ๋ณ ์์ฒญ์ ๊ฑฐ๋ถํ ์ ์์ต๋๋ค(MAY).
- ์๋ฒ๊ฐ GOAWAY ํ๋ ์์ ๋ฐ์ ์ดํ์ push ID๊ฐ ํด๋น GOAWAY ํ๋ ์์ ํฌํจ๋ ์๋ณ์๋ณด๋ค ํฌ๊ฑฐ๋ ๊ฐ์ ํธ์๋ฅผ ์ฝ์ํ๋ค๋ฉด, ๊ทธ ํธ์๋ ์๋ฝ๋์ง ์์ ๊ฒ์ ๋๋ค.
์๋ฒ๋ ์ฐ๊ฒฐ ์ข ๋ฃ๊ฐ ์ฌ์ ์ ์๋ ค์ง ๊ฒฝ์ฐ, ์ค๋ น ์ฌ์ ํต์ง๊ฐ ์งง๋๋ผ๋ ์๊ฒฉ ํผ์ด๊ฐ ์์ฒญ์ด ๋ถ๋ถ์ ์ผ๋ก ์ฒ๋ฆฌ๋์๋์ง ์ฌ๋ถ๋ฅผ ์ ์ ์๋๋ก GOAWAY ํ๋ ์์ ๋ณด๋ด๋ ๊ฒ์ด ๊ถ์ฅ๋ฉ๋๋ค(SHOULD). ์๋ฅผ ๋ค์ด, HTTP ํด๋ผ์ด์ธํธ๊ฐ POST๋ฅผ ์ ์กํ๋ ๋์์ ์๋ฒ๊ฐ QUIC ์ฐ๊ฒฐ์ ๋ซ๋ ๊ฒฝ์ฐ, ์๋ฒ๊ฐ ์ด๋ค ์คํธ๋ฆผ์์ ๋์ํ๋์ง ํ์ํ๋ GOAWAY ํ๋ ์์ ๋ณด๋ด์ง ์์ผ๋ฉด ํด๋ผ์ด์ธํธ๋ ์๋ฒ๊ฐ ํด๋น POST ์์ฒญ ์ฒ๋ฆฌ๋ฅผ ์์ํ๋์ง ์ ์ ์์ต๋๋ค.
์๋ํฌ์ธํธ๋ ์๋ก ๋ค๋ฅธ ์๋ณ์๋ฅผ ๋ํ๋ด๋ ์ฌ๋ฌ ๊ฐ์ GOAWAY ํ๋ ์์ ๋ณด๋ผ ์ ์์ง๋ง, ๊ฐ ํ๋ ์์ ์๋ณ์๋ ์ด์ ํ๋ ์์ ์๋ณ์๋ณด๋ค ํด ์ ์์ต๋๋ค(MUST NOT), ์๋ํ๋ฉด ํด๋ผ์ด์ธํธ๋ ์ด๋ฏธ ์ฒ๋ฆฌ๋์ง ์์ ์์ฒญ์ ๋ค๋ฅธ HTTP ์ฐ๊ฒฐ์์ ์ฌ์๋ํ์ ์ ์๊ธฐ ๋๋ฌธ์ ๋๋ค. ์ด์ ์ ์์ ํ ๊ฒ๋ณด๋ค ๋ ํฐ ์๋ณ์๋ฅผ ํฌํจํ GOAWAY๋ฅผ ์์ ํ๋ ๊ฒฝ์ฐ, ์ด๊ฒ์ connection error ์ ํ H3_ID_ERROR๋ก ์ฒ๋ฆฌ๋์ด์ผ ํฉ๋๋ค(MUST).
์ฐ๊ฒฐ์ ์ ์์ ์ผ๋ก ์ข ๋ฃํ๋ ค๋ ์๋ํฌ์ธํธ๋ ์ต๋ ๊ฐ๋ฅํ ๊ฐ(์๋ฒ์ ๊ฒฝ์ฐ 262-4, ํด๋ผ์ด์ธํธ์ ๊ฒฝ์ฐ 262-1)์ผ๋ก ์ค์ ๋ GOAWAY ํ๋ ์์ ๋ณด๋ผ ์ ์์ต๋๋ค. ์ด๋ ํผ์ด๊ฐ ์ ์์ฒญ์ด๋ ํธ์ ์์ฑ์ ์ค๋จํ๋๋ก ๋ณด์ฅํฉ๋๋ค. ์งํ ์ค์ธ ์์ฒญ์ด๋ ํธ์๊ฐ ๋์ฐฉํ ์๊ฐ์ ํ์ฉํ ํ, ์๋ํฌ์ธํธ๋ ์ฐ๊ฒฐ ์ข ๋ฃ ์ ์ ์๋ฝํ ์ ์๋ ์์ฒญ์ด๋ ํธ์๋ฅผ ๋ํ๋ด๋ ๋ ๋ค๋ฅธ GOAWAY ํ๋ ์์ ๋ณด๋ผ ์ ์์ต๋๋ค. ์ด๋ฅผ ํตํด ์์ฒญ์ ์์ง ์๊ณ ์ฐ๊ฒฐ์ ๊น๋ํ๊ฒ ์ข ๋ฃํ ์ ์์ต๋๋ค.
ํด๋ผ์ด์ธํธ๋ ์์ ์ด ์ ์กํ๋ GOAWAY์ Push ID ํ๋ ๊ฐ์ ๋ํด ๋ ๋ง์ ์ ์ฐ์ฑ์ ๊ฐ์ง๋๋ค. ๊ฐ 262-1์ ์๋ฒ๊ฐ ์ด๋ฏธ ์ฝ์ํ ํธ์๋ฅผ ๊ณ์ ์ดํํ ์ ์์์ ๋ํ๋ ๋๋ค. ๋ ์์ ๊ฐ์ ํด๋ผ์ด์ธํธ๊ฐ ์ด ๊ฐ๋ณด๋ค ํฌ๊ฑฐ๋ ๊ฐ์ push ID๋ฅผ ๊ฐ์ง ํธ์๋ฅผ ๊ฑฐ๋ถํ ๊ฒ์์ ๋ํ๋ ๋๋ค. ์๋ฒ์ ๋ง์ฐฌ๊ฐ์ง๋ก, ํด๋ผ์ด์ธํธ๋ ์ง์ ๋ push ID๊ฐ ์ด์ ์ ์ ์กํ ๊ฐ๋ณด๋ค ํฌ์ง ์์ ํ ํ์ GOAWAY ํ๋ ์์ ๋ณด๋ผ ์ ์์ต๋๋ค(MAY).
GOAWAY๊ฐ ์ฃผ์ด์ง ์์ฒญ์ด๋ ํธ์๊ฐ ์ฒ๋ฆฌ๋๊ฑฐ๋ ์๋ฝ๋์ง ์์ ๊ฒ์์ ๋ํ๋ด๋๋ผ๋, ๊ธฐ๋ณธ ์ ์ก ๋ฆฌ์์ค๋ ์ฌ์ ํ ์กด์ฌํฉ๋๋ค. ์ด๋ฌํ ์์ฒญ์ ์์ํ ์๋ํฌ์ธํธ๋ ์ ์ก ์ํ๋ฅผ ์ ๋ฆฌํ๊ธฐ ์ํด ์ด๋ฅผ ์ทจ์ํ ์ ์์ต๋๋ค.
์๋ฝ๋ ๋ชจ๋ ์์ฒญ๊ณผ ํธ์๊ฐ ์ฒ๋ฆฌ๋๋ฉด, ์๋ํฌ์ธํธ๋ ์ฐ๊ฒฐ์ ์ ํด ์ํ๊ฐ ๋๋๋ก ํ์ฉํ๊ฑฐ๋ ์ฆ์ ์ฐ๊ฒฐ์ ์ข ๋ฃํ ์ ์์ต๋๋ค(MAY). ์ ์์ ์ธ ์ ง๋ค์ด์ ์๋ฃํ ์๋ํฌ์ธํธ๋ ์ฐ๊ฒฐ์ ๋ซ์ ๋ H3_NO_ERROR ์ค๋ฅ ์ฝ๋๋ฅผ ์ฌ์ฉํ๋ ๊ฒ์ด ๊ถ์ฅ๋ฉ๋๋ค(SHOULD).
ํด๋ผ์ด์ธํธ๊ฐ ์์ฒญ์ผ๋ก ์ฌ์ฉ ๊ฐ๋ฅํ ๋ชจ๋ ์๋ฐฉํฅ ์คํธ๋ฆผ ID๋ฅผ ์๋นํ ๊ฒฝ์ฐ, ์๋ฒ๋ ํด๋ผ์ด์ธํธ๊ฐ ๋ ์ด์ ์์ฒญ์ ํ ์ ์์ผ๋ฏ๋ก GOAWAY ํ๋ ์์ ๋ณด๋ผ ํ์๊ฐ ์์ต๋๋ค.
5.3. ์ฆ์ ์ ํ๋ฆฌ์ผ์ด์ ์ข ๋ฃ
HTTP/3 ๊ตฌํ์ฒด๋ ์ธ์ ๋ ์ง QUIC ์ฐ๊ฒฐ์ ์ฆ์ ๋ซ์ ์ ์์ต๋๋ค. ์ด๋ ์ ํ๋ฆฌ์ผ์ด์ ๋ ์ด์ด๊ฐ ์ฐ๊ฒฐ์ ์ข ๋ฃํ์์ ๋ํ๋ด๋ QUIC CONNECTION_CLOSE ํ๋ ์์ ํผ์ด์๊ฒ ์ ์กํ๋ ๊ฒฐ๊ณผ๋ฅผ ์ด๋ํฉ๋๋ค. ์ด ํ๋ ์์ ์ ํ๋ฆฌ์ผ์ด์ ์ค๋ฅ ์ฝ๋๋ ์ฐ๊ฒฐ์ด ๋ซํ๋ ์ด์ ๋ฅผ ํผ์ด์๊ฒ ์ ๋ฌํฉ๋๋ค. ์ฐ๊ฒฐ์ ๋ซ์ ๋ ์ฌ์ฉํ ์ ์๋ ์ค๋ฅ ์ฝ๋๋ ์น์ 8์ ์ฐธ์กฐํ์ญ์์ค.
์ฐ๊ฒฐ์ ๋ซ๊ธฐ ์ ์, ํด๋ผ์ด์ธํธ๊ฐ ์ผ๋ถ ์์ฒญ์ ์ฌ์๋ํ ์ ์๋๋ก GOAWAY ํ๋ ์์ ์ ์กํ ์ ์์ต๋๋ค(MAY). QUIC CONNECTION_CLOSE ํ๋ ์๊ณผ ๋์ผํ ํจํท์ GOAWAY ํ๋ ์์ ํฌํจํ๋ฉด ํด๋ผ์ด์ธํธ๊ฐ ํ๋ ์์ ์์ ํ ๊ฐ๋ฅ์ฑ์ด ๋์์ง๋๋ค.
๋ช ์์ ์ผ๋ก ๋ซํ์ง ์์ ์ด๋ฆฐ ์คํธ๋ฆผ์ด ์๋ ๊ฒฝ์ฐ, ์ฐ๊ฒฐ์ด ๋ซํ ๋ ํด๋น ์คํธ๋ฆผ๋ค์ ์๋ฌต์ ์ผ๋ก ๋ซํ๋๋ค; ์์ธํ ๋ด์ฉ์ QUIC-TRANSPORT ์น์ 10.2๋ฅผ ์ฐธ์กฐํ์ญ์์ค.
5.4. ์ ์ก ์ข ๋ฃ
์ฌ๋ฌ ๊ฐ์ง ์ด์ ๋ก QUIC ์ ์ก์ ์ ํ๋ฆฌ์ผ์ด์ ๋ ์ด์ด์ ์ฐ๊ฒฐ์ด ์ข ๋ฃ๋์์์ ์๋ฆด ์ ์์ต๋๋ค. ์ด๋ ํผ์ด์ ๋ช ์์ ์ข ๋ฃ, ์ ์ก ๊ณ์ธต ์ค๋ฅ, ๋๋ ์ฐ๊ฒฐ์ฑ์ ์ค๋จ์ํค๋ ๋คํธ์ํฌ ํ ํด๋ก์ง์ ๋ณํ ๋๋ฌธ์ผ ์ ์์ต๋๋ค.
์ฐ๊ฒฐ์ด GOAWAY ํ๋ ์ ์์ด ์ข ๋ฃ๋๋ ๊ฒฝ์ฐ, ํด๋ผ์ด์ธํธ๋ ์ ์ก๋ ๋ชจ๋ ์์ฒญ(์ ๋ถ ๋๋ ์ผ๋ถ)์ด ์ฒ๋ฆฌ๋์์ ์ ์์์ ๊ฐ์ ํด์ผ ํฉ๋๋ค(MUST).
6. ์คํธ๋ฆผ ๋งคํ ๋ฐ ์ฌ์ฉ
QUIC ์คํธ๋ฆผ์ ๋ฐ์ดํธ์ ๋ํด ์ ๋ขฐ ๊ฐ๋ฅํ ์์ ์ ๋ฌ์ ์ ๊ณตํ์ง๋ง, ๋ค๋ฅธ ์คํธ๋ฆผ์ ๋ฐ์ดํธ์ ๊ด๋ จ๋ ์ ๋ฌ ์์์ ๋ํด์๋ ๋ณด์ฅ์ ์ ๊ณตํ์ง ์์ต๋๋ค. QUIC ๋ฒ์ 1์์๋ HTTP ํ๋ ์์ ํฌํจํ๋ ์คํธ๋ฆผ ๋ฐ์ดํฐ๊ฐ QUIC STREAM ํ๋ ์์ ์ํด ์ด๋ฐ๋์ง๋ง, ์ด ํ๋ ์ด๋ฐ์ HTTP ํ๋ ์ด๋ฐ ๊ณ์ธต์ ๋ํด์๋ ๋ณด์ด์ง ์์ต๋๋ค. ์ ์ก ๊ณ์ธต์ ์์ ๋ ์คํธ๋ฆผ ๋ฐ์ดํฐ๋ฅผ ๋ฒํผ๋งํ๊ณ ์ ๋ ฌํ์ฌ ์ ํ๋ฆฌ์ผ์ด์ ์ ์ ๋ขฐ ๊ฐ๋ฅํ ๋ฐ์ดํธ ์คํธ๋ฆผ์ ๋ ธ์ถํฉ๋๋ค. QUIC์ ์คํธ๋ฆผ ๋ด์์ ์์๊ฐ ๋ค๋ฐ๋ ์ ๋ฌ์ ํ์ฉํ์ง๋ง, HTTP/3๋ ์ด ๊ธฐ๋ฅ์ ์ฌ์ฉํ์ง ์์ต๋๋ค.
QUIC ์คํธ๋ฆผ์ ๋ฐ์ ์์์ ์์ ์ ์ชฝ์ผ๋ก๋ง ๋ฐ์ดํฐ๋ฅผ ์ด๋ฐํ๋ ๋จ๋ฐฉํฅ์ผ ์๋ ์๊ณ , ์๋ฐฉํฅ์ผ๋ก ๋ฐ์ดํฐ๋ฅผ ์ด๋ฐํ๋ ์๋ฐฉํฅ์ผ ์๋ ์์ต๋๋ค. ์คํธ๋ฆผ์ ํด๋ผ์ด์ธํธ๋ ์๋ฒ ์ค ์ด๋ ์ชฝ์์๋ ์์ํ ์ ์์ต๋๋ค. QUIC ์คํธ๋ฆผ์ ๋ํ ์์ธํ ๋ด์ฉ์ QUIC-TRANSPORT ์น์ 2์ ์ฐธ์กฐํ์ญ์์ค.
HTTP ํ๋์ ๋ฐ์ดํฐ๊ฐ QUIC์ ํตํด ์ ์ก๋ ๋, QUIC ๋ ์ด์ด๊ฐ ๋๋ถ๋ถ์ ์คํธ๋ฆผ ๊ด๋ฆฌ๋ฅผ ์ฒ๋ฆฌํฉ๋๋ค. QUIC์ ์ฌ์ฉํ ๋๋ HTTP๊ฐ ๋ณ๋์ ๋ค์คํ ์์ ์ ์ํํ ํ์๊ฐ ์์ต๋๋ค: QUIC ์คํธ๋ฆผ์ ํตํด ์ ์ก๋ ๋ฐ์ดํฐ๋ ํญ์ ํน์ HTTP ํธ๋์ญ์ ์ด๋ ์ ์ฒด HTTP/3 ์ฐ๊ฒฐ ์ปจํ ์คํธ์ ๋งคํ๋ฉ๋๋ค.
6.1. ์๋ฐฉํฅ ์คํธ๋ฆผ
๋ชจ๋ ํด๋ผ์ด์ธํธ๊ฐ ์์ํ ์๋ฐฉํฅ ์คํธ๋ฆผ์ HTTP ์์ฒญ ๋ฐ ์๋ต์ ์ฌ์ฉ๋ฉ๋๋ค. ์๋ฐฉํฅ ์คํธ๋ฆผ์ ์๋ต์ด ์์ฒญ๊ณผ ์ฝ๊ฒ ์ฐ๊ด๋ ์ ์๋๋ก ๋ณด์ฅํฉ๋๋ค. ์ด๋ฌํ ์คํธ๋ฆผ์ ์์ฒญ ์คํธ๋ฆผ์ด๋ผ๊ณ ํฉ๋๋ค.
์ด๋ ํด๋ผ์ด์ธํธ์ ์ฒซ ๋ฒ์งธ ์์ฒญ์ด QUIC ์คํธ๋ฆผ 0์์ ๋ฐ์ํ๊ณ , ์ดํ ์์ฒญ์ ์คํธ๋ฆผ 4, 8 ๋ฑ์์ ๋ฐ์ํจ์ ์๋ฏธํฉ๋๋ค. ์ด๋ฌํ ์คํธ๋ฆผ๋ค์ด ์ด๋ฆฌ๋๋ก ํ์ฉํ๊ธฐ ์ํด HTTP/3 ์๋ฒ๋ ํ์ฉ๋ ์คํธ๋ฆผ ์์ ์ด๊ธฐ ์คํธ๋ฆผ ํ๋ฆ ์ ์ด ์ฐฝ์ ๋ํด 0์ด ์๋ ์ต์๊ฐ์ ๊ตฌ์ฑํด์ผ ํฉ๋๋ค(SHOULD). ๋ณ๋ ฌ์ฑ์ ๋ถํ์ํ๊ฒ ์ ํํ์ง ์๊ธฐ ์ํด ํ ๋ฒ์ ์ ์ด๋ 100๊ฐ์ ์์ฒญ ์คํธ๋ฆผ์ ํ์ฉํ๋ ๊ฒ์ด ๊ถ์ฅ๋ฉ๋๋ค(SHOULD).
HTTP/3๋ ์๋ฒ๊ฐ ์์ํ ์๋ฐฉํฅ ์คํธ๋ฆผ์ ์ฌ์ฉํ์ง ์์ง๋ง, ํ์ฅ์ด ์ด๋ฌํ ์คํธ๋ฆผ์ ์ฌ์ฉ์ ์ ์ํ ์ ์์ต๋๋ค. ํด๋ผ์ด์ธํธ๋ ์๋ฒ๊ฐ ์์ํ ์๋ฐฉํฅ ์คํธ๋ฆผ์ ์์ ์ ํด๋น ํ์ฅ์ด ํ์๋์ง ์์ ํ connection error ์ ํ H3_STREAM_CREATION_ERROR๋ก ์ฒ๋ฆฌํด์ผ ํฉ๋๋ค(MUST).
6.2. ๋จ๋ฐฉํฅ ์คํธ๋ฆผ
๋จ๋ฐฉํฅ ์คํธ๋ฆผ(์ด๋ ๋ฐฉํฅ์ด๋ )์ ๋ค์ํ ๋ชฉ์ ์ ์ฌ์ฉ๋ฉ๋๋ค. ๋ชฉ์ ์ ์คํธ๋ฆผ ์์ ๋ถ๋ถ์ ๋ณ์ ๊ธธ์ด ์ ์๋ก ์ ์ก๋๋ ์คํธ๋ฆผ ์ ํ์ผ๋ก ํ์๋ฉ๋๋ค. ์ด ์ ์ ๋ค์ ๋ฐ๋ฅด๋ ๋ฐ์ดํฐ์ ํ์๊ณผ ๊ตฌ์กฐ๋ ์คํธ๋ฆผ ์ ํ์ ์ํด ๊ฒฐ์ ๋ฉ๋๋ค.
Unidirectional Stream Header {
Stream Type (i),
}
Figure 1: Unidirectional Stream Header
์ด ๋ฌธ์์์๋ ๋ ๊ฐ์ง ์คํธ๋ฆผ ์ ํ์ ์ ์ํฉ๋๋ค: ์ ์ด ์คํธ๋ฆผ(์น์ 6.2.1)๊ณผ ํธ์ ์คํธ๋ฆผ(์น์ 6.2.2). [QPACK]๋ ๋ ๊ฐ์ง ์ถ๊ฐ ์คํธ๋ฆผ ์ ํ์ ์ ์ํฉ๋๋ค. ๋ค๋ฅธ ์คํธ๋ฆผ ์ ํ์ HTTP/3 ํ์ฅ์ผ๋ก ์ ์๋ ์ ์์ต๋๋ค; ์์ธํ ๋ด์ฉ์ ์น์ 9์ ์ฐธ์กฐํ์ญ์์ค. ์ผ๋ถ ์คํธ๋ฆผ ์ ํ์ ์์ฝ๋์ด ์์ต๋๋ค(์น์ 6.2.3).
HTTP/3 ์ฐ๊ฒฐ์ ์ด๊ธฐ ๋จ๊ณ์์ ๋จ๋ฐฉํฅ ์คํธ๋ฆผ์ ์์ฑ ๋ฐ ๋ฐ์ดํฐ ๊ตํ์ ์ฑ๋ฅ์ ๋ฏผ๊ฐํฉ๋๋ค. ์๋ํฌ์ธํธ๊ฐ ์คํธ๋ฆผ ์๋ ์ด๋ฌํ ์คํธ๋ฆผ์ ํ๋ฆ ์ ์ด ์ฐฝ์ ๊ณผ๋ํ๊ฒ ์ ํํ๋ฉด ์๊ฒฉ ํผ์ด๊ฐ ์กฐ๊ธฐ์ ์ ํ์ ๋๋ฌํ์ฌ ์ฐจ๋จ๋ ๊ฐ๋ฅ์ฑ์ด ์ปค์ง๋๋ค. ํนํ ๊ตฌํ์ฒด๋ ์๊ฒฉ ํผ์ด๊ฐ ํ์ฉ๋ ์ผ๋ถ ๋จ๋ฐฉํฅ ์คํธ๋ฆผ์์ ์์ฝ๋ ์คํธ๋ฆผ ๋์(์น์ 6.2.3)์ ์ํํ๋ ค ํ ์ ์์์ ๊ณ ๋ คํด์ผ ํฉ๋๋ค.
๊ฐ ์๋ํฌ์ธํธ๋ HTTP ์ ์ด ์คํธ๋ฆผ์ ์ํด ์ต์ ํ๋์ ๋จ๋ฐฉํฅ ์คํธ๋ฆผ์ ์์ฑํด์ผ ํฉ๋๋ค. QPACK์ ์ถ๊ฐ๋ก ๋ ๊ฐ์ ๋จ๋ฐฉํฅ ์คํธ๋ฆผ์ ์๊ตฌํ๋ฉฐ, ๋ค๋ฅธ ํ์ฅ๋ ๋ ๋ง์ ์คํธ๋ฆผ์ ์๊ตฌํ ์ ์์ต๋๋ค. ๋ฐ๋ผ์ ํด๋ผ์ด์ธํธ์ ์๋ฒ๊ฐ ์ ์กํ๋ ์ ์ก ๋งค๊ฐ๋ณ์๋ ํผ์ด๊ฐ ์ ์ด๋ ์ธ ๊ฐ์ ๋จ๋ฐฉํฅ ์คํธ๋ฆผ์ ์์ฑํ ์ ์๋๋ก ํ์ฉํด์ผ ํฉ๋๋ค(MUST). ๋ํ ์ด๋ฌํ ์ ์ก ๋งค๊ฐ๋ณ์๋ ๊ฐ ๋จ๋ฐฉํฅ ์คํธ๋ฆผ์ ๋ํด ์ ์ด๋ 1,024 ๋ฐ์ดํธ์ ํ๋ฆ ์ ์ด ํฌ๋ ๋ง์ ์ ๊ณตํ๋ ๊ฒ์ด ๊ถ์ฅ๋ฉ๋๋ค(SHOULD).
ํผ์ด๊ฐ ์ค์ํ ๋จ๋ฐฉํฅ ์คํธ๋ฆผ์ ์์ฑํ๊ธฐ ์ ์ ์ด๊ธฐ ํฌ๋ ๋ง์ ๋ชจ๋ ์๋นํ๋ฉด, ์๋ํฌ์ธํธ๊ฐ ์ถ๊ฐ ๋จ๋ฐฉํฅ ์คํธ๋ฆผ์ ์์ฑํ๋ ๋ฐ ํ์ํ ์ถ๊ฐ ํฌ๋ ๋ง์ ๋ถ์ฌํ ํ์๋ ์๋ค๋ ์ ์ ์ ์ํ์ญ์์ค. ์๋ํฌ์ธํธ๋ HTTP ์ ์ด ์คํธ๋ฆผ ๋ฐ ํ์ ํ์ฅ(์: QPACK ์ธ์ฝ๋ ๋ฐ ๋์ฝ๋ ์คํธ๋ฆผ)์ ์ํด ์๊ตฌ๋๋ ๋จ๋ฐฉํฅ ์คํธ๋ฆผ์ ๋จผ์ ์์ฑํ ํ ํผ์ด๊ฐ ํ์ฉํ๋ ๋ฒ์ ๋ด์์ ์ถ๊ฐ ์คํธ๋ฆผ์ ์์ฑํ๋ ๊ฒ์ด ๋ฐ๋์งํฉ๋๋ค(SHOULD).
์คํธ๋ฆผ ํค๋๊ฐ ์์ ์์์ ์ง์๋์ง ์๋ ์คํธ๋ฆผ ์ ํ์ ๋ํ๋ด๋ฉด, ํด๋น ์คํธ๋ฆผ์ ๋๋จธ์ง ๋ถ๋ถ์ ์๋ฏธ๋ฅผ ์ ์ ์๊ธฐ ๋๋ฌธ์ ์๋น๋ ์ ์์ต๋๋ค. ๋ฏธ์ง์ ์คํธ๋ฆผ ์ ํ ์์ ์๋ ์คํธ๋ฆผ ์ฝ๊ธฐ๋ฅผ ์ค๋จํ๊ฑฐ๋ ์์ ๋ ๋ฐ์ดํฐ๋ฅผ ์ถ๊ฐ ์ฒ๋ฆฌ ์์ด ํ๊ธฐํด์ผ ํฉ๋๋ค(MUST). ์ฝ๊ธฐ๊ฐ ์ค๋จ๋๋ ๊ฒฝ์ฐ ์์ ์๋ H3_STREAM_CREATION_ERROR ์ค๋ฅ ์ฝ๋ ๋๋ ์์ฝ๋ ์ค๋ฅ ์ฝ๋๋ฅผ ์ฌ์ฉํ๋ ๊ฒ์ด ๊ถ์ฅ๋ฉ๋๋ค(SHOULD). ์์ ์๋ ๋ฏธ์ง์ ์คํธ๋ฆผ ์ ํ์ ์ด๋ ํ ์ข ๋ฅ์ connection error๋ก ๊ฐ์ฃผํด์๋ ์ ๋ฉ๋๋ค(MUST NOT).
ํน์ ์คํธ๋ฆผ ์ ํ์ด ์ฐ๊ฒฐ ์ํ์ ์ํฅ์ ์ค ์ ์์ผ๋ฏ๋ก, ์์ ์๋ ์คํธ๋ฆผ ์ ํ์ ์ฝ๊ธฐ ์ ์ ๋ค์ด์ค๋ ๋จ๋ฐฉํฅ ์คํธ๋ฆผ์ ๋ฐ์ดํฐ๋ฅผ ํ๊ธฐํ์ง ์๋ ๊ฒ์ด ๋ฐ๋์งํฉ๋๋ค(SHOULD NOT).
๊ตฌํ์ฒด๋ ํผ์ด๊ฐ ํด๋น ์คํธ๋ฆผ ์ ํ์ ์ง์ํ๋์ง ์๊ธฐ ์ ์ ์คํธ๋ฆผ ์ ํ์ ๋ณด๋ผ ์ ์์ต๋๋ค(MAY). ๊ทธ๋ฌ๋ QPACK์ด๋ ๋ค๋ฅธ ํ์ฅ์ ํฌํจํ์ฌ ๊ธฐ์กด ํ๋กํ ์ฝ ๊ตฌ์ฑ์์์ ์ํ๋ ์๋ฏธ๋ฅผ ๋ณ๊ฒฝํ ์ ์๋ ์คํธ๋ฆผ ์ ํ์ ํผ์ด๊ฐ ์ด๋ฅผ ์ง์ํ๋ ๊ฒ์ผ๋ก ํ์ธ๋ ๋๊น์ง ์ ์กํด์๋ ์ ๋ฉ๋๋ค(MUST NOT).
์ก์ ์๋ ๋ณ๋์ ๋ช ์๊ฐ ์๋ ํ ๋จ๋ฐฉํฅ ์คํธ๋ฆผ์ ๋ซ๊ฑฐ๋ ๋ฆฌ์ ํ ์ ์์ต๋๋ค. ์์ ์๋ ๋จ๋ฐฉํฅ ์คํธ๋ฆผ ํค๋๋ฅผ ์์ ํ๊ธฐ ์ ์ ๋จ๋ฐฉํฅ ์คํธ๋ฆผ์ด ๋ซํ๊ฑฐ๋ ๋ฆฌ์ ๋๋ ๊ฒ์ ํ์ฉํด์ผ ํฉ๋๋ค(MUST).
6.2.1. ์ ์ด ์คํธ๋ฆผ
์ ์ด ์คํธ๋ฆผ์ ์คํธ๋ฆผ ์ ํ 0x00์ผ๋ก ํ์๋ฉ๋๋ค. ์ด ์คํธ๋ฆผ์ ๋ฐ์ดํฐ๋ ์น์ 7.2์ ์ ์๋ ๋๋ก HTTP/3 ํ๋ ์์ผ๋ก ๊ตฌ์ฑ๋ฉ๋๋ค.
๊ฐ ์ธก์ ์ฐ๊ฒฐ ์์ ์ ๋จ์ผ ์ ์ด ์คํธ๋ฆผ์ ์์ํ๊ณ ํด๋น ์คํธ๋ฆผ์ ์ฒซ ๋ฒ์งธ ํ๋ ์์ผ๋ก ์์ ์ SETTINGS ํ๋ ์์ ์ ์กํด์ผ ํฉ๋๋ค(MUST). ์ ์ด ์คํธ๋ฆผ์ ์ฒซ ๋ฒ์งธ ํ๋ ์์ด ๋ค๋ฅธ ํ๋ ์ ์ ํ์ด๋ฉด ์ด๋ connection error ์ ํ H3_MISSING_SETTINGS๋ก ์ฒ๋ฆฌ๋์ด์ผ ํฉ๋๋ค(MUST). ํผ์ด๋น ํ๋์ ์ ์ด ์คํธ๋ฆผ๋ง ํ์ฉ๋๋ฉฐ; ์ ์ด ์คํธ๋ฆผ์ ์ฃผ์ฅํ๋ ๋ ๋ฒ์งธ ์คํธ๋ฆผ์ ์์ ํ๋ฉด ์ด๋ connection error ์ ํ H3_STREAM_CREATION_ERROR๋ก ์ฒ๋ฆฌ๋์ด์ผ ํฉ๋๋ค(MUST). ์ ์ก์๋ ์ ์ด ์คํธ๋ฆผ์ ๋ซ์์๋ ์ ๋๋ฉฐ(MUST NOT), ์์ ์๋ ์ ์ก์์๊ฒ ์ ์ด ์คํธ๋ฆผ์ ๋ซ๋๋ก ์์ฒญํด์๋ ์ ๋ฉ๋๋ค(MUST NOT). ์ด๋ ์ชฝ ์ ์ด ์คํธ๋ฆผ์ด๋ ๋ซํ๋ฉด ์ด๋ connection error ์ ํ H3_CLOSED_CRITICAL_STREAM๋ก ์ฒ๋ฆฌ๋์ด์ผ ํฉ๋๋ค(MUST). ์ฐ๊ฒฐ ์ค๋ฅ๋ ์น์ 8์ ์ค๋ช ๋์ด ์์ต๋๋ค.
์ ์ด ์คํธ๋ฆผ์ ๋ด์ฉ์ ๋ค๋ฅธ ์คํธ๋ฆผ์ ๋์์ ๊ด๋ฆฌํ๋ ๋ฐ ์ฌ์ฉ๋๋ฏ๋ก, ์๋ํฌ์ธํธ๋ ํผ์ด์ ์ ์ด ์คํธ๋ฆผ์ด ์ฐจ๋จ๋์ง ์๋๋ก ์ถฉ๋ถํ ํ๋ฆ ์ ์ด ํฌ๋ ๋ง์ ์ ๊ณตํ๋ ๊ฒ์ด ๋ฐ๋์งํฉ๋๋ค(SHOULD).
๋จ์ผ ์๋ฐฉํฅ ์คํธ๋ฆผ ๋์ ๋จ๋ฐฉํฅ ์คํธ๋ฆผ ์์ด ์ฌ์ฉ๋ฉ๋๋ค. ์ด๋ ์ด๋ ์ชฝ ํผ์ด๋ ๊ฐ๋ฅํ ํ ๋นจ๋ฆฌ ๋ฐ์ดํฐ๋ฅผ ๋ณด๋ผ ์ ์๊ฒ ํฉ๋๋ค. QUIC ์ฐ๊ฒฐ์์ 0-RTT ์ฌ์ฉ ๊ฐ๋ฅ ์ฌ๋ถ์ ๋ฐ๋ผ ํด๋ผ์ด์ธํธ ๋๋ ์๋ฒ๊ฐ ๋จผ์ ์คํธ๋ฆผ ๋ฐ์ดํฐ๋ฅผ ๋ณด๋ผ ์ ์์ต๋๋ค.
6.2.2. ํธ์ ์คํธ๋ฆผ
์๋ฒ ํธ์๋ ์๋ฒ๊ฐ ์์ฒญ์ด ์ด๋ฃจ์ด์ง๊ธฐ ์ ์ ์๋ต์ ์์ํ ์ ์๊ฒ ํ๋ HTTP/2์์ ๋์ ๋ ์ ํ์ ๊ธฐ๋ฅ์ ๋๋ค. ์์ธํ ๋ด์ฉ์ ์น์ 4.6์ ์ฐธ์กฐํ์ญ์์ค.
ํธ์ ์คํธ๋ฆผ์ ์คํธ๋ฆผ ์ ํ 0x01๋ก ํ์๋๋ฉฐ, ์ด์ด์ ์ฝ์์ ์ดํํ๋ push ID๊ฐ ๋ณ์ ๊ธธ์ด ์ ์๋ก ์ธ์ฝ๋ฉ๋์ด ์ต๋๋ค. ์ด ์คํธ๋ฆผ์ ๋๋จธ์ง ๋ฐ์ดํฐ๋ ์น์ 7.2์ ์ ์๋ ๋๋ก HTTP/3 ํ๋ ์์ผ๋ก ๊ตฌ์ฑ๋๋ฉฐ, 0๊ฐ ์ด์์ ์ค๊ฐ HTTP ์๋ต๊ณผ ๋จ์ผ ์ต์ข HTTP ์๋ต์ผ๋ก ์ฝ์๋ ์๋ฒ ํธ์๋ฅผ ์ดํํฉ๋๋ค(์น์ 4.1 ์ฐธ์กฐ). ์๋ฒ ํธ์์ push ID์ ๊ดํ ์ค๋ช ์ ์น์ 4.6์ ์ฐธ์กฐํ์ญ์์ค.
ํธ์๋ ์๋ฒ๋ง ์ํํ ์ ์์ต๋๋ค; ์๋ฒ๊ฐ ํด๋ผ์ด์ธํธ๊ฐ ์์ํ ํธ์ ์คํธ๋ฆผ์ ์์ ํ๋ฉด ์ด๋ connection error ์ ํ H3_STREAM_CREATION_ERROR๋ก ์ฒ๋ฆฌ๋์ด์ผ ํฉ๋๋ค(MUST).
Push Stream Header {
Stream Type (i) = 0x01,
Push ID (i),
}
Figure 2: Push Stream Header
ํด๋ผ์ด์ธํธ๋ ํธ์ ์คํธ๋ฆผ ํค๋๋ฅผ ์ฝ๊ธฐ ์ ์ ํด๋น ์คํธ๋ฆผ์์์ ์ฝ๊ธฐ๋ฅผ ์ค๋จํด์๋ ์ ๋ฉ๋๋ค(SHOULD NOT), ์ด๋ ํด๋ผ์ด์ธํธ์ ์๋ฒ ๊ฐ์ ์ด๋ค push ID๊ฐ ์ด๋ฏธ ์๋น๋์๋์ง์ ๋ํ ๋ถ์ผ์น๋ฅผ ์ด๋ํ ์ ์๊ธฐ ๋๋ฌธ์ ๋๋ค.
๊ฐ push ID๋ ํธ์ ์คํธ๋ฆผ ํค๋์์ ํ ๋ฒ๋ง ์ฌ์ฉ๋์ด์ผ ํฉ๋๋ค(MUST). ํด๋ผ์ด์ธํธ๊ฐ ๋ค๋ฅธ ํธ์ ์คํธ๋ฆผ ํค๋์์ ์ด๋ฏธ ์ฌ์ฉ๋ push ID๋ฅผ ํฌํจํ๋ ํธ์ ์คํธ๋ฆผ ํค๋๋ฅผ ๊ฐ์งํ๋ฉด, ํด๋ผ์ด์ธํธ๋ ์ด๋ฅผ connection error ์ ํ H3_ID_ERROR๋ก ์ฒ๋ฆฌํด์ผ ํฉ๋๋ค(MUST).
6.2.3. ์์ฝ๋ ์คํธ๋ฆผ ์ ํ
๋น์์ ์ ์ N์ ๋ํด ํ์ 0x1f * N + 0x21์ ์คํธ๋ฆผ ์ ํ์ ๋ฏธ์ง์ ์ ํ์ ๋ฌด์ํด์ผ ํ๋ค๋ ์๊ตฌ์ฌํญ์ ์ ๊ฒํ๊ธฐ ์ํด ์์ฝ๋์ด ์์ต๋๋ค. ์ด๋ฌํ ์คํธ๋ฆผ์ ์๋ฏธ๊ฐ ์์ผ๋ฉฐ, ์ ํ๋ฆฌ์ผ์ด์ ๋ ์ด์ด ํจ๋ฉ์ด ํ์ํ ๋ ์ ์กํ ์ ์์ต๋๋ค. ๋ํ ํ์ฌ ๋ฐ์ดํฐ๊ฐ ์ ์ก๋์ง ์๋ ์ฐ๊ฒฐ์์ ์ ์ก๋ ์ ์์ต๋๋ค(MAY). ์์ ์๋ ์ด๋ฌํ ์คํธ๋ฆผ์ ์์ ์ ์ด๋ค ์๋ฏธ๋ ๊ฐ์ง ๊ฒ์ผ๋ก ๊ฐ์ฃผํด์๋ ์ ๋ฉ๋๋ค(MUST NOT).
์คํธ๋ฆผ์ ํ์ด๋ก๋์ ๊ธธ์ด๋ ์ ์ก ๊ตฌํ์ฒด๊ฐ ์ ํํ๋ ๋ฐฉ์์ผ๋ก ์ ํ๋ฉ๋๋ค. ์์ฝ๋ ์คํธ๋ฆผ ์ ํ์ ์ ์กํ ๋ ๊ตฌํ์ฒด๋ ์คํธ๋ฆผ์ ์ ์์ ์ผ๋ก ์ข ๋ฃํ๊ฑฐ๋ ๋ฆฌ์ ํ ์ ์์ต๋๋ค(MAY). ์คํธ๋ฆผ์ ๋ฆฌ์ ํ ๋์๋ H3_NO_ERROR ์ค๋ฅ ์ฝ๋ ๋๋ ์์ฝ๋ ์ค๋ฅ ์ฝ๋๋ฅผ ์ฌ์ฉํ๋ ๊ฒ์ด ๊ถ์ฅ๋ฉ๋๋ค(SHOULD).
7. HTTP ํ๋ ์ด๋ฐ ๊ณ์ธต
HTTP ํ๋ ์์ ์น์ 6์ ์ค๋ช ๋ ๋๋ก QUIC ์คํธ๋ฆผ์์ ์ ๋ฌ๋ฉ๋๋ค. HTTP/3๋ ์ธ ๊ฐ์ง ์คํธ๋ฆผ ์ ํ์ ์ ์ํฉ๋๋ค: ์ ์ด ์คํธ๋ฆผ, ์์ฒญ ์คํธ๋ฆผ, ๋ฐ ํธ์ ์คํธ๋ฆผ. ์ด ์ ์ HTTP/3 ํ๋ ์ ํ์๊ณผ ํ์ฉ๋๋ ์คํธ๋ฆผ ์ ํ์ ์ค๋ช ํฉ๋๋ค; ๊ฐ์๋ ํ 1์ ์ฐธ์กฐํ์ญ์์ค. HTTP/2์ HTTP/3 ํ๋ ์์ ๋น๊ต๋ ๋ถ๋ก A.2์ ์ ๊ณต๋ฉ๋๋ค.
| Frame | Control Stream | Request Stream | Push Stream | Section |
|---|---|---|---|---|
| DATA | No | Yes | Yes | Section 7.2.1 |
| HEADERS | No | Yes | Yes | Section 7.2.2 |
| CANCEL_PUSH | Yes | No | No | Section 7.2.3 |
| SETTINGS | Yes (1) | No | No | Section 7.2.4 |
| PUSH_PROMISE | No | Yes | No | Section 7.2.5 |
| GOAWAY | Yes | No | No | Section 7.2.6 |
| MAX_PUSH_ID | Yes | No | No | Section 7.2.7 |
| Reserved | Yes | Yes | Yes | Section 7.2.8 |
SETTINGS ํ๋ ์์ ์ ์ด ์คํธ๋ฆผ์ ์ฒซ ๋ฒ์งธ ํ๋ ์์ผ๋ก๋ง ๋ฐ์ํ ์ ์์ต๋๋ค; ์ด๋ ํ 1์์ (1)๋ก ํ์๋์ด ์์ต๋๋ค. ๊ด๋ จ ์น์ ์ ๊ตฌ์ฒด์ ์ธ ์ง์นจ์ด ์ ๊ณต๋ฉ๋๋ค.
QUIC ํ๋ ์๊ณผ ๋ฌ๋ฆฌ, HTTP/3 ํ๋ ์์ ์ฌ๋ฌ ํจํท์ ๊ฑธ์ณ ์์ ์ ์๋ค๋ ์ ์ ์ ์ํ์ญ์์ค.
7.1. ํ๋ ์ ๋ ์ด์์
๋ชจ๋ ํ๋ ์์ ๋ค์ ํ์์ ๊ฐ์ง๋๋ค:
HTTP/3 Frame Format {
Type (i),
Length (i),
Frame Payload (..),
}
Figure 3: HTTP/3 Frame Format
ํ๋ ์์ ๋ค์ ํ๋๋ฅผ ํฌํจํฉ๋๋ค:
- Type:
-
ํ๋ ์ ์ ํ์ ์๋ณํ๋ ๋ณ์ ๊ธธ์ด ์ ์์ ๋๋ค.
- Length:
-
Frame Payload์ ๋ฐ์ดํธ ๊ธธ์ด๋ฅผ ์ค๋ช ํ๋ ๋ณ์ ๊ธธ์ด ์ ์์ ๋๋ค.
- Frame Payload:
-
Type ํ๋์ ์ํด ๊ฒฐ์ ๋๋ ์๋ฏธ๋ฅผ ๊ฐ๋ ํ์ด๋ก๋์ ๋๋ค.
๊ฐ ํ๋ ์์ ํ์ด๋ก๋๋ ๊ทธ ์ค๋ช ์ ์๋ณ๋ ํ๋๋ค๋ง ์ ํํ ํฌํจํด์ผ ํฉ๋๋ค(MUST). ์๋ณ๋ ํ๋ ์ดํ์ ์ถ๊ฐ ๋ฐ์ดํธ๋ฅผ ํฌํจํ๊ฑฐ๋ ์๋ณ๋ ํ๋๊ฐ ๋๋๊ธฐ ์ ์ ์ข ๋ฃ๋๋ ํ๋ ์ ํ์ด๋ก๋๋ connection error ์ ํ H3_FRAME_ERROR๋ก ์ฒ๋ฆฌ๋์ด์ผ ํฉ๋๋ค(MUST). ํนํ ์ค๋ณต๋ ๊ธธ์ด ์ธ์ฝ๋ฉ์ ์ผ๊ด์ฑ ์๋์ง ๊ฒ์ฆ๋์ด์ผ ํฉ๋๋ค; ์น์ 10.8๋ฅผ ์ฐธ์กฐํ์ญ์์ค.
์คํธ๋ฆผ์ด ์ ์์ ์ผ๋ก ์ข ๋ฃ๋ ๋ ์คํธ๋ฆผ์ ๋ง์ง๋ง ํ๋ ์์ด ์๋ ค ์์ผ๋ฉด ์ด๋ connection error ์ ํ H3_FRAME_ERROR๋ก ์ฒ๋ฆฌ๋์ด์ผ ํฉ๋๋ค(MUST). ๊ฐ์์ค๋ฝ๊ฒ ์ข ๋ฃ๋ ์คํธ๋ฆผ์ ํ๋ ์์ ์ด๋ ์์ ์์๋ ๋ฆฌ์ ๋ ์ ์์ต๋๋ค.
7.2. ํ๋ ์ ์ ์
7.2.1. DATA
DATA ํ๋ ์(type=0x00)์ HTTP ์์ฒญ ๋๋ ์๋ต ์ฝํ ์ธ ์ ๊ด๋ จ๋ ์์์ ๊ฐ๋ณ ๊ธธ์ด ๋ฐ์ดํธ ์ํ์ค๋ฅผ ์ ๋ฌํฉ๋๋ค.
DATA ํ๋ ์์ HTTP ์์ฒญ ๋๋ ์๋ต๊ณผ ์ฐ๊ด๋์ด์ผ ํฉ๋๋ค(MUST). DATA ํ๋ ์์ด ์ ์ด ์คํธ๋ฆผ์์ ์์ ๋๋ฉด, ์์ ์๋ connection error ์ ํ H3_FRAME_UNEXPECTED๋ก ์๋ตํด์ผ ํฉ๋๋ค.
DATA Frame {
Type (i) = 0x00,
Length (i),
Data (..),
}
Figure 4: DATA Frame
7.2.2. HEADERS
HEADERS ํ๋ ์(type=0x01)์ QPACK์ ์ฌ์ฉํด ์ธ์ฝ๋ฉ๋ HTTP ํ๋ ์น์ ์ ์ด๋ฐํ๋ ๋ฐ ์ฌ์ฉ๋ฉ๋๋ค. ์์ธํ ๋ด์ฉ์ [QPACK]์ ์ฐธ์กฐํ์ญ์์ค.
HEADERS Frame {
Type (i) = 0x01,
Length (i),
Encoded Field Section (..),
}
Figure 5: HEADERS Frame
HEADERS ํ๋ ์์ ์์ฒญ ์คํธ๋ฆผ ๋๋ ํธ์ ์คํธ๋ฆผ์์๋ง ์ ์ก๋ ์ ์์ต๋๋ค. ๋ง์ฝ HEADERS ํ๋ ์์ด ์ ์ด ์คํธ๋ฆผ์์ ์์ ๋๋ฉด, ์์ ์๋ connection error ์ ํ H3_FRAME_UNEXPECTED๋ก ์๋ตํด์ผ ํฉ๋๋ค(MUST).
7.2.3. CANCEL_PUSH
CANCEL_PUSH ํ๋ ์(type=0x03)์ ํธ์ ์คํธ๋ฆผ์ด ์์ ๋๊ธฐ ์ ์ ์๋ฒ ํธ์์ ์ทจ์๋ฅผ ์์ฒญํ๋ ๋ฐ ์ฌ์ฉ๋ฉ๋๋ค. CANCEL_PUSH ํ๋ ์์ ์๋ฒ ํธ์๋ฅผ push ID๋ก ์๋ณํฉ๋๋ค(์์ธํ ๋ด์ฉ์ ์น์ 4.6 ์ฐธ์กฐ), ์ด ๊ฐ์ ๋ณ์ ๊ธธ์ด ์ ์๋ก ์ธ์ฝ๋ฉ๋ฉ๋๋ค.
ํด๋ผ์ด์ธํธ๊ฐ CANCEL_PUSH ํ๋ ์์ ๋ณด๋ผ ๋ ์ด๋ ์ฝ์๋ ๋ฆฌ์์ค๋ฅผ ๋ฐ๊ณ ์ถ์ง ์์์ ๋ํ๋ ๋๋ค. ์๋ฒ๋ ๋ฆฌ์์ค ์ ์ก์ ์ค๋จํ๋ ๊ฒ์ด ๊ถ์ฅ๋์ง๋ง, ์ด๋ฅผ ์ํํ๋ ๋ฉ์ปค๋์ฆ์ ํด๋น ํธ์ ์คํธ๋ฆผ์ ์ํ์ ๋ฐ๋ผ ๋ค๋ฆ ๋๋ค. ์๋ฒ๊ฐ ์์ง ํธ์ ์คํธ๋ฆผ์ ์์ฑํ์ง ์์๋ค๋ฉด ์์ฑํ์ง ์์ต๋๋ค. ํธ์ ์คํธ๋ฆผ์ด ์ด๋ ค ์๋ค๋ฉด ์๋ฒ๋ ํด๋น ์คํธ๋ฆผ์ ๊ฐ์์ค๋ฝ๊ฒ ์ข ๋ฃํด์ผ ํฉ๋๋ค(SHOULD). ํธ์ ์คํธ๋ฆผ์ด ์ด๋ฏธ ์ข ๋ฃ๋ ๊ฒฝ์ฐ ์๋ฒ๋ ์คํธ๋ฆผ์ ๊ฐ์์ค๋ฝ๊ฒ ์ข ๋ฃํ ์๋ ์๊ณ ์๋ฌด ์กฐ์น๋ ์ทจํ์ง ์์ ์๋ ์์ต๋๋ค(MAY).
์๋ฒ๋ ์ด์ ์ ์ ์ก๋ ์ฝ์์ ์ดํํ์ง ์๊ฒ ๋ค๋ ๊ฒ์ ์๋ฆฌ๊ธฐ ์ํด CANCEL_PUSH ํ๋ ์์ ์ ์กํฉ๋๋ค. ํด๋ผ์ด์ธํธ๋ ํด๋น ์ฝ์์ด ์ด๋ฏธ ์์ ๋์ด ์ฒ๋ฆฌ๋์ง ์๋ ํ ์ฝ์์ด ์ดํ๋ ๊ฒ์ผ๋ก ๊ธฐ๋ํด์๋ ์ ๋ฉ๋๋ค. ํธ์ ์คํธ๋ฆผ์ด ์ด๋ฏธ ์ด๋ ธ๋๋ผ๋ ์๋ฒ๋ ์ฝ์์ด ์ดํ๋์ง ์์์ ๊ฒฐ์ ํ๋ฉด CANCEL_PUSH ํ๋ ์์ ๋ณด๋ด๋ ๊ฒ์ด ๊ถ์ฅ๋ฉ๋๋ค(SHOULD). ์คํธ๋ฆผ์ด ์ด๋ฏธ ์ด๋ ค ์๋ ๊ฒฝ์ฐ, ์๋ฒ๋ H3_REQUEST_CANCELLED ์ค๋ฅ ์ฝ๋๋ก ํด๋น ์คํธ๋ฆผ ์ ์ก์ ์ค๋จํ ์ ์์ต๋๋ค.
CANCEL_PUSH ํ๋ ์ ์ ์ก์ ๊ธฐ์กด ํธ์ ์คํธ๋ฆผ์ ์ํ์ ์ง์ ์ ์ธ ์ํฅ์ ์ฃผ์ง ์์ต๋๋ค. ํด๋ผ์ด์ธํธ๋ ์ด๋ฏธ ํด๋น ํธ์ ์คํธ๋ฆผ์ ์์ ํ ๊ฒฝ์ฐ CANCEL_PUSH ํ๋ ์์ ๋ณด๋ด์๋ ์ ๋ฉ๋๋ค(SHOULD NOT). ์๋ฒ๊ฐ CANCEL_PUSH๋ฅผ ์ฒ๋ฆฌํ์ง ์์ ํธ์ ์คํธ๋ฆผ์ด ํด๋ผ์ด์ธํธ์๊ฒ ๋์ฐฉํ ์ ์์ผ๋ฏ๋ก, ํด๋ผ์ด์ธํธ๋ H3_REQUEST_CANCELLED ์ค๋ฅ ์ฝ๋๋ก ์คํธ๋ฆผ ์ฝ๊ธฐ๋ฅผ ์ค๋จํ๋ ๊ฒ์ด ๊ถ์ฅ๋ฉ๋๋ค(SHOULD).
CANCEL_PUSH ํ๋ ์์ ์ ์ด ์คํธ๋ฆผ์์ ์ ์ก๋ฉ๋๋ค. ์ ์ด ์คํธ๋ฆผ์ด ์๋ ๋ค๋ฅธ ์คํธ๋ฆผ์์ CANCEL_PUSH ํ๋ ์์ ์์ ํ๋ฉด ์ด๋ connection error ์ ํ H3_FRAME_UNEXPECTED๋ก ์ฒ๋ฆฌ๋์ด์ผ ํฉ๋๋ค(MUST).
CANCEL_PUSH Frame {
Type (i) = 0x03,
Length (i),
Push ID (i),
}
Figure 6: CANCEL_PUSH Frame
CANCEL_PUSH ํ๋ ์์ push ID๋ฅผ ๋ณ์ ๊ธธ์ด ์ ์๋ก ์ธ์ฝ๋ฉํ ๊ฐ์ ์ด๋ฐํฉ๋๋ค. Push ID ํ๋๋ ์ทจ์๋๋ ์๋ฒ ํธ์๋ฅผ ์๋ณํฉ๋๋ค(์์ธํ ๋ด์ฉ์ ์น์ 4.6 ์ฐธ์กฐ). ๋ง์ฝ CANCEL_PUSH ํ๋ ์์ด ํ์ฌ ์ฐ๊ฒฐ์์ ํ์ฉ๋๋ ๊ฐ๋ณด๋ค ํฐ push ID๋ฅผ ์ฐธ์กฐํ๋ฉด, ์ด๋ connection error ์ ํ H3_ID_ERROR๋ก ์ฒ๋ฆฌ๋์ด์ผ ํฉ๋๋ค(MUST).
ํด๋ผ์ด์ธํธ๊ฐ CANCEL_PUSH ํ๋ ์์ ์์ ํ๋ฉด, ํด๋น ํ๋ ์์ ์ฌ์ ๋ ฌ๋ก ์ธํด ์์ง PUSH_PROMISE ํ๋ ์์ ์ํด ์ธ๊ธ๋์ง ์์ push ID๋ฅผ ์๋ณํ ์ ์์ต๋๋ค. ์๋ฒ๊ฐ ์์ง PUSH_PROMISE ํ๋ ์์ผ๋ก ์ธ๊ธํ์ง ์์ push ID์ ๋ํด CANCEL_PUSH๋ฅผ ๋ฐ์ผ๋ฉด, ์ด๋ connection error ์ ํ H3_ID_ERROR๋ก ์ฒ๋ฆฌ๋์ด์ผ ํฉ๋๋ค(MUST).
7.2.4. SETTINGS
SETTINGS ํ๋ ์(type=0x04)์ ์๋ํฌ์ธํธ ๊ฐ์ ํต์ ๋ฐฉ์์ ์ํฅ์ ๋ฏธ์น๋ ๊ตฌ์ฑ ๋งค๊ฐ๋ณ์๋ฅผ ์ ๋ฌํฉ๋๋ค. ์๋ฅผ ๋ค์ด ํผ์ด ๋์์ ๋ํ ์ ํธ์ฌํญ๊ณผ ์ ์ฝ์ด ์์ต๋๋ค. ๊ฐ๋ณ์ ์ผ๋ก SETTINGS ๋งค๊ฐ๋ณ์๋ "setting"์ด๋ผ๊ณ ๋ ๋ถ๋ฆฌ๋ฉฐ, ๊ฐ ์ค์ ๋งค๊ฐ๋ณ์์ ์๋ณ์์ ๊ฐ์ ๊ฐ๊ฐ "setting identifier"์ "setting value"๋ก ์ฐธ์กฐ๋ ์ ์์ต๋๋ค.
SETTINGS ํ๋ ์์ ํญ์ ์ ์ฒด HTTP/3 ์ฐ๊ฒฐ์ ์ ์ฉ๋๋ฉฐ ๋จ์ผ ์คํธ๋ฆผ์๋ ์ ์ฉ๋์ง ์์ต๋๋ค. ๊ฐ ํผ์ด๋ ์ ์ด ์คํธ๋ฆผ์ ์ฒซ ๋ฒ์งธ ํ๋ ์์ผ๋ก SETTINGS ํ๋ ์์ ์ ์กํด์ผ ํ๋ฉฐ(MUST), ์ดํ์๋ ์ ์กํด์๋ ์ ๋ฉ๋๋ค. ์ ์ด ์คํธ๋ฆผ์์ ๋ ๋ฒ์งธ SETTINGS ํ๋ ์์ ์์ ํ๋ฉด, ํด๋น ์๋ํฌ์ธํธ๋ connection error ์ ํ H3_FRAME_UNEXPECTED๋ก ์๋ตํด์ผ ํฉ๋๋ค(MUST).
SETTINGS ํ๋ ์์ ์ ์ด ์คํธ๋ฆผ ์ด์ธ์ ์ด๋ค ์คํธ๋ฆผ์์๋ ์ ์ก๋์ด์๋ ์ ๋ฉ๋๋ค(MUST NOT). ๋ง์ฝ ๋ค๋ฅธ ์คํธ๋ฆผ์์ SETTINGS ํ๋ ์์ ์์ ํ๋ฉด, ํด๋น ์๋ํฌ์ธํธ๋ connection error ์ ํ H3_FRAME_UNEXPECTED๋ก ์๋ตํด์ผ ํฉ๋๋ค(MUST).
SETTINGS ๋งค๊ฐ๋ณ์๋ ํ์๋์ง ์์ต๋๋ค; ์ด๋ค์ ์ ์กํ๋ ํผ์ด์ ํน์ฑ์ ์ค๋ช ํ๋ฉฐ ์์ ํผ์ด๊ฐ ์ด๋ฅผ ์ฌ์ฉํ ์ ์์ต๋๋ค. ๊ทธ๋ฌ๋ SETTINGS์ ์ฌ์ฉ์ผ๋ก ์๋ฌต์ ์ธ ํ์์ด ์ด๋ฃจ์ด์ง ์ ์์ต๋๋ค: ๊ฐ ํผ์ด๋ ์ง์๋๋ ๊ฐ ์งํฉ์ ๊ด๊ณ ํ๊ธฐ ์ํด SETTINGS๋ฅผ ์ฌ์ฉํฉ๋๋ค. ์ค์ ์ ์ ์๋ ๊ฐ ํผ์ด๊ฐ ๋ ์งํฉ์ ๊ฒฐํฉํ์ฌ ์ด๋ค ์ ํ์ด ์ฌ์ฉ๋ ์ง๋ฅผ ๊ฒฐ๋ก ๋ด๋ ๋ฐฉ๋ฒ์ ์ค๋ช ํฉ๋๋ค. SETTINGS๋ ์ ํ์ด ์ธ์ ํจ๋ ฅ์ ๋ฐ์ํ๋์ง ์๋ณํ๋ ๋ฉ์ปค๋์ฆ์ ์ ๊ณตํ์ง ์์ต๋๋ค.
๊ฐ์ ๋งค๊ฐ๋ณ์์ ๋ํด ์๋ก ๋ค๋ฅธ ๊ฐ์ด ๊ฐ ํผ์ด์ ์ํด ๊ด๊ณ ๋ ์ ์์ต๋๋ค. ์๋ฅผ ๋ค์ด, ํด๋ผ์ด์ธํธ๋ ๋งค์ฐ ํฐ ์๋ต ํ๋ ์น์ ์ ์๋นํ ์ํฅ์ด ์์ ์ ์์ง๋ง ์๋ฒ๋ ์์ฒญ ํฌ๊ธฐ์ ๋ํด ๋ ์ ์คํ ์ ์์ต๋๋ค.
๋์ผํ ์ค์ ์๋ณ์๊ฐ SETTINGS ํ๋ ์์์ ๋ ๋ฒ ์ด์ ๋ํ๋์๋ ์ ๋ฉ๋๋ค(MUST NOT). ์์ ์๋ ์ค๋ณต๋ ์ค์ ์๋ณ์์ ์กด์ฌ๋ฅผ connection error ์ ํ H3_SETTINGS_ERROR๋ก ์ฒ๋ฆฌํ ์ ์์ต๋๋ค(MAY).
SETTINGS ํ๋ ์์ ํ์ด๋ก๋๋ 0๊ฐ ์ด์์ ๋งค๊ฐ๋ณ์๋ก ๊ตฌ์ฑ๋ฉ๋๋ค. ๊ฐ ๋งค๊ฐ๋ณ์๋ ์๋ณ์์ ๊ฐ์ผ๋ก ๊ตฌ์ฑ๋๋ฉฐ, ๋ ๋ค QUIC ๋ณ์ ๊ธธ์ด ์ ์๋ก ์ธ์ฝ๋ฉ๋ฉ๋๋ค.
Setting {
Identifier (i),
Value (i),
}
SETTINGS Frame {
Type (i) = 0x04,
Length (i),
Setting (..) ...,
}
Figure 7: SETTINGS Frame
๊ตฌํ์ฒด๋ ์์ ์ด ์ดํดํ์ง ๋ชปํ๋ ์๋ณ์๋ฅผ ๊ฐ์ง ๋งค๊ฐ๋ณ์๋ฅผ ๋ฌด์ํด์ผ ํฉ๋๋ค(MUST).
7.2.4.1. ์ ์๋ SETTINGS ๋งค๊ฐ๋ณ์
๋ค์ ์ค์ ๋ค์ด HTTP/3์์ ์ ์๋ฉ๋๋ค:
- SETTINGS_MAX_FIELD_SECTION_SIZE (0x06):
-
๊ธฐ๋ณธ๊ฐ์ ๋ฌด์ ํ์ ๋๋ค. ์ฌ์ฉ๋ฒ์ ์น์ 4.2.2๋ฅผ ์ฐธ์กฐํ์ญ์์ค.
๋น์์ ์ ์ ๊ฐ N์ ๋ํด ํ์ 0x1f * N + 0x21์ ์ค์ ์๋ณ์๋ ๋ฏธ์ง์ ์๋ณ์๊ฐ ๋ฌด์๋์ด์ผ ํ๋ค๋ ์๊ตฌ์ฌํญ์ ์ ๊ฒํ๊ธฐ ์ํด ์์ฝ๋์ด ์์ต๋๋ค. ์ด๋ฌํ ์ค์ ์ ์ ์๋ ์๋ฏธ๊ฐ ์์ต๋๋ค. ์๋ํฌ์ธํธ๋ SETTINGS ํ๋ ์์ ์ ์ด๋ ํ๋์ ๊ทธ๋ฌํ ์ค์ ์ ํฌํจํ๋ ๊ฒ์ด ๊ถ์ฅ๋ฉ๋๋ค(SHOULD). ์์ ์๋ ์ด๋ฌํ ์ค์ ์ ์์ ์ ์ด๋ค ์๋ฏธ๋ ๊ฐ์ง ๊ฒ์ผ๋ก ๊ฐ์ฃผํด์๋ ์ ๋ฉ๋๋ค(MUST NOT).
ํด๋น ์ค์ ์ ์ ์๋ ์๋ฏธ๊ฐ ์์ผ๋ฏ๋ก, ์ค์ ์ ๊ฐ์ ๊ตฌํ์ฒด๊ฐ ์ ํํ ์์์ ๊ฐ์ผ ์ ์์ต๋๋ค.
[HTTP/2]์์ ์ ์๋์์ผ๋ HTTP/3์ ๋์ํ๋ ์ค์ ์ด ์๋ ์ค์ ์๋ณ์๋ค๋ ์์ฝ๋์ด ์์ต๋๋ค(์น์ 11.2.2). ์ด๋ฌํ ์์ฝ๋ ์ค์ ์ ์ ์กํด์๋ ์ ๋๋ฉฐ(MUST NOT), ์์ ๋๋ฉด connection error ์ ํ H3_SETTINGS_ERROR๋ก ์ฒ๋ฆฌ๋์ด์ผ ํฉ๋๋ค(MUST).
์ถ๊ฐ ์ค์ ์ HTTP/3 ํ์ฅ์ผ๋ก ์ ์๋ ์ ์์ต๋๋ค; ์์ธํ ๋ด์ฉ์ ์น์ 9์ ์ฐธ์กฐํ์ญ์์ค.
7.2.4.2. ์ด๊ธฐํ
HTTP ๊ตฌํ์ฒด๋ ํผ์ด์ ํ์ฌ ์ดํด์ ๊ทผ๊ฑฐํ์ฌ ๋ฌดํจํ ํ๋ ์์ด๋ ์์ฒญ์ ์ ์กํด์๋ ์ ๋ฉ๋๋ค(MUST NOT).
๋ชจ๋ ์ค์ ์ ์ด๊ธฐ๊ฐ์์ ์์ํฉ๋๋ค. ๊ฐ ์๋ํฌ์ธํธ๋ ํผ์ด์ SETTINGS ํ๋ ์์ด ๋์ฐฉํ๊ธฐ ์ ์ ์ด๋ฌํ ์ด๊ธฐ๊ฐ์ ์ฌ์ฉํ์ฌ ๋ฉ์์ง๋ฅผ ์ ์กํ๋ ๊ฒ์ด ๊ถ์ฅ๋ฉ๋๋ค(SHOULD), ์๋ํ๋ฉด SETTINGS๋ฅผ ํฌํจํ ํจํท์ด ์์ค๋๊ฑฐ๋ ์ง์ฐ๋ ์ ์๊ธฐ ๋๋ฌธ์ ๋๋ค. SETTINGS ํ๋ ์์ด ๋์ฐฉํ๋ฉด ์ค์ ์ ์๋ก์ด ๊ฐ์ผ๋ก ๋ณ๊ฒฝ๋ฉ๋๋ค.
์ด๋ SETTINGS ํ๋ ์์ ๊ธฐ๋ค๋ฆด ํ์๋ฅผ ์ ๊ฑฐํฉ๋๋ค. ์๋ํฌ์ธํธ๋ SETTINGS ํ๋ ์์ ์ ์กํ๊ธฐ ์ ์ ํผ์ด๋ก๋ถํฐ ์ด๋ค ๋ฐ์ดํฐ๋ฅผ ์์ ํด์ผ ํ๋ค๊ณ ์๊ตฌํด์๋ ์ ๋ฉ๋๋ค(MUST NOT); SETTINGS๋ ์ ์ก์ด ๋ฐ์ดํฐ๋ฅผ ๋ณด๋ผ ์ค๋น๊ฐ ๋๋ฉด ๊ฐ๋ฅํ ํ ๋นจ๋ฆฌ ์ ์ก๋์ด์ผ ํฉ๋๋ค(MUST).
์๋ฒ์ ๊ฒฝ์ฐ, ๊ฐ ํด๋ผ์ด์ธํธ ์ค์ ์ ์ด๊ธฐ๊ฐ์ ๊ธฐ๋ณธ๊ฐ์ ๋๋ค.
1-RTT QUIC ์ฐ๊ฒฐ์ ์ฌ์ฉํ๋ ํด๋ผ์ด์ธํธ์ ๊ฒฝ์ฐ, ๊ฐ ์๋ฒ ์ค์ ์ ์ด๊ธฐ๊ฐ์ ๊ธฐ๋ณธ๊ฐ์ ๋๋ค. 1-RTT ํค๋ ์๋ฒ๊ฐ ์ฆ์ SETTINGS๋ฅผ ์ ์กํ๋๋ผ๋ SETTINGS๋ฅผ ํฌํจํ ํจํท์ด QUIC์ ์ํด ์ฒ๋ฆฌ๋๊ธฐ ์ ์ ํญ์ ์ฌ์ฉ ๊ฐ๋ฅํด์ง๋๋ค. ํด๋ผ์ด์ธํธ๋ SETTINGS๊ฐ ๋์ฐฉํ๊ธฐ๋ฅผ ๋ฌด๊ธฐํ ๊ธฐ๋ค๋ ค์๋ ์ ๋์ง๋ง(SHOULD NOT), SETTINGS๊ฐ ์ฒซ ์์ฒญ์ ์ ์กํ๊ธฐ ์ ์ ์ฒ๋ฆฌ๋ ๊ฐ๋ฅ์ฑ์ ๋์ด๊ธฐ ์ํด ์์ ๋ ๋ฐ์ดํฐ๊ทธ๋จ์ ์ฒ๋ฆฌํด์ผ ํฉ๋๋ค(SHOULD).
0-RTT QUIC ์ฐ๊ฒฐ์ ์ฌ์ฉํ๋ ๊ฒฝ์ฐ, ๊ฐ ์๋ฒ ์ค์ ์ ์ด๊ธฐ๊ฐ์ ์ด์ ์ธ์ ์์ ์ฌ์ฉ๋ ๊ฐ์ ๋๋ค. ํด๋ผ์ด์ธํธ๋ ์ฌ๊ฐ ์ ๋ณด๊ฐ ์ ๊ณต๋ HTTP/3 ์ฐ๊ฒฐ์์ ์๋ฒ๊ฐ ์ ๊ณตํ ์ค์ ์ ์ ์ฅํ๋ ๊ฒ์ด ๊ถ์ฅ๋ฉ๋๋ค(SHOULD), ๊ทธ๋ฌ๋ ํน์ ๊ฒฝ์ฐ์๋ ์ค์ ์ ์ ์ฅํ์ง ์์ ์ ์์ต๋๋ค(MAY), ์: ์ธ์ ํฐ์ผ์ด SETTINGS ํ๋ ์๋ณด๋ค ๋จผ์ ์์ ๋ ๊ฒฝ์ฐ. ํด๋ผ์ด์ธํธ๋ 0-RTT ์ ์ ์ฅ๋ ์ค์ (๋๋ ์ ์ฅ๋ ๊ฐ์ด ์์ผ๋ฉด ๊ธฐ๋ณธ๊ฐ)์ ์ค์ํด์ผ ํฉ๋๋ค(MUST). ์๋ฒ๊ฐ ์ ์ค์ ์ ์ ๊ณตํ๋ฉด, ํด๋ผ์ด์ธํธ๋ ๊ทธ ๊ฐ์ ์ค์ํด์ผ ํฉ๋๋ค(MUST).
์๋ฒ๋ ์์ ์ด ๊ด๊ณ ํ ์ค์ ์ ๊ธฐ์ตํ๊ฑฐ๋ ํฐ์ผ์ ๊ฐ์ ๋ฌด๊ฒฐ์ฑ ๋ณดํธ๋ ๋ณต์ฌ๋ณธ์ ์ ์ฅํ๊ณ 0-RTT ๋ฐ์ดํฐ๋ฅผ ํ์ฉํ ๋ ์ ๋ณด๋ฅผ ๋ณต๊ตฌํ ์ ์์ต๋๋ค. ์๋ฒ๋ HTTP/3 ์ค์ ๊ฐ์ ์ฌ์ฉํ์ฌ 0-RTT ๋ฐ์ดํฐ๋ฅผ ์๋ฝํ ์ง ์ฌ๋ถ๋ฅผ ๊ฒฐ์ ํฉ๋๋ค. ์๋ฒ๊ฐ ํด๋ผ์ด์ธํธ๊ฐ ๊ธฐ์ตํ ์ค์ ์ด ํ์ฌ ์ค์ ๊ณผ ํธํ๋๋ค๋ ๊ฒ์ ํ๋จํ ์ ์์ผ๋ฉด 0-RTT ๋ฐ์ดํฐ๋ฅผ ์๋ฝํด์๋ ์ ๋ฉ๋๋ค(MUST NOT). ๊ธฐ์ต๋ ์ค์ ์ ํด๋ผ์ด์ธํธ๊ฐ ํด๋น ์ค์ ์ ์ค์ํ ๊ฒฝ์ฐ ์๋ฒ์ ํ์ฌ ์ค์ ์ ์๋ฐํ์ง ์๋ ๊ฒฝ์ฐ ํธํ๋๋ ๊ฒ์ผ๋ก ๊ฐ์ฃผ๋ฉ๋๋ค.
์๋ฒ๋ 0-RTT๋ฅผ ์๋ฝํ ์ ์์ผ๋ฉฐ ์ดํ SETTINGS ํ๋ ์์์ ๋ค๋ฅธ ์ค์ ์ ์ ๊ณตํ ์ ์์ต๋๋ค(MAY). ๋ง์ฝ ์๋ฒ๊ฐ 0-RTT ๋ฐ์ดํฐ๋ฅผ ์๋ฝํ๋ฉด, SETTINGS ํ๋ ์์ ํด๋ผ์ด์ธํธ์ 0-RTT ๋ฐ์ดํฐ๋ก ์ธํด ํด๋ผ์ด์ธํธ๊ฐ ์๋ฐํ ์ ์๋ ์ด๋ค ์ ํ๋ ์ค์ด๊ฑฐ๋ ๊ฐ์ ๋ณ๊ฒฝํด์๋ ์ ๋ฉ๋๋ค(MUST NOT). ์๋ฒ๋ ๊ธฐ๋ณธ๊ฐ๊ณผ ๋ค๋ฅธ ๋ชจ๋ ์ค์ ์ ํฌํจํด์ผ ํฉ๋๋ค(MUST). ์๋ฒ๊ฐ 0-RTT๋ฅผ ์๋ฝํ์ง๋ง ์ดํ์ ํด๋ผ์ด์ธํธ๊ฐ ์ด์ ์ ์ง์ ํ ์ค์ ๊ณผ ํธํ๋์ง ์๋ SETTINGS ํ๋ ์์ ์ ์กํ๋ฉด, ์ด๋ connection error ์ ํ H3_SETTINGS_ERROR๋ก ์ฒ๋ฆฌ๋์ด์ผ ํฉ๋๋ค(MUST). ์๋ฒ๊ฐ 0-RTT๋ฅผ ์๋ฝํ์ง๋ง ์ดํ์ ํด๋ผ์ด์ธํธ๊ฐ ์ดํดํ๋ ์ค์ ๊ฐ(์์ฝ๋ ์๋ณ์๋ฅผ ์ ์ธํ๊ณ ) ์ค ์ด์ ์ ๋น๊ธฐ๋ณธ๊ฐ์ผ๋ก ์ง์ ๋ ๊ฐ์ ๋๋ฝํ SETTINGS ํ๋ ์์ ๋ณด๋ธ๋ค๋ฉด, ์ด๋ connection error ์ ํ H3_SETTINGS_ERROR๋ก ์ฒ๋ฆฌ๋์ด์ผ ํฉ๋๋ค(MUST).
7.2.5. PUSH_PROMISE
PUSH_PROMISE ํ๋ ์(type=0x05)์ ์์ฒญ ์คํธ๋ฆผ์์ ์๋ฒ๊ฐ ํด๋ผ์ด์ธํธ์๊ฒ ์ฝ์๋ ์์ฒญ ํค๋ ์น์ ์ ์ ๋ฌํ๋ ๋ฐ ์ฌ์ฉ๋ฉ๋๋ค.
PUSH_PROMISE Frame {
Type (i) = 0x05,
Length (i),
Push ID (i),
Encoded Field Section (..),
}
Figure 8: PUSH_PROMISE Frame
ํ์ด๋ก๋๋ ๋ค์์ผ๋ก ๊ตฌ์ฑ๋ฉ๋๋ค:
- Push ID:
-
์๋ฒ ํธ์ ์์ ์ ์๋ณํ๋ ๋ณ์ ๊ธธ์ด ์ ์์ ๋๋ค. push ID๋ ํธ์ ์คํธ๋ฆผ ํค๋(์น์ 4.6) ๋ฐ CANCEL_PUSH ํ๋ ์์์ ์ฌ์ฉ๋ฉ๋๋ค.
- Encoded Field Section:
-
PROMISED ์๋ต์ ์ํ QPACK ์ธ์ฝ๋ฉ๋ ์์ฒญ ํค๋ ํ๋์ ๋๋ค. ์์ธํ ๋ด์ฉ์ [QPACK]์ ์ฐธ์กฐํ์ญ์์ค.
์๋ฒ๋ ํด๋ผ์ด์ธํธ๊ฐ MAX_PUSH_ID ํ๋ ์์์ ์ ๊ณตํ ๊ฐ๋ณด๋ค ๋ ํฐ push ID๋ฅผ ์ฌ์ฉํด์๋ ์ ๋ฉ๋๋ค(MUST NOT). ํด๋ผ์ด์ธํธ๋ ์์ ์ด ๊ด๊ณ ํ ๊ฐ๋ณด๋ค ํฐ push ID๋ฅผ ํฌํจํ๋ PUSH_PROMISE ํ๋ ์์ ์์ ํ๋ฉด, ์ด๋ฅผ connection error ์ ํ H3_ID_ERROR๋ก ์ฒ๋ฆฌํด์ผ ํฉ๋๋ค(MUST).
์๋ฒ๋ ๋์ผํ push ID๋ฅผ ์ฌ๋ฌ PUSH_PROMISE ํ๋ ์์์ ์ฌ์ฉํ ์ ์์ต๋๋ค(MAY). ์ด ๊ฒฝ์ฐ ์์ถ ํด์ ๋ ์์ฒญ ํค๋ ์งํฉ์ ๋์ผํ ์์๋ก ๋์ผํ ํ๋๋ฅผ ํฌํจํด์ผ ํ๋ฉฐ, ๊ฐ ํ๋์ ์ด๋ฆ๊ณผ ๊ฐ์ด ์ ํํ ์ผ์นํด์ผ ํฉ๋๋ค(MUST). ํด๋ผ์ด์ธํธ๋ ๋์ผํ ๋ฆฌ์์ค์ ๋ํด ์ฌ๋ฌ ๋ฒ ์ฝ์๋ ๊ฒฝ์ฐ ์์ฒญ ํค๋ ์น์ ์ ๋น๊ตํ๋ ๊ฒ์ด ๊ถ์ฅ๋ฉ๋๋ค(SHOULD). ํด๋ผ์ด์ธํธ๊ฐ ์ด๋ฏธ ์ฝ์๋ push ID๋ฅผ ๋ฐ๊ณ ๋ถ์ผ์น๋ฅผ ๊ฐ์งํ๋ฉด, ์ด๋ connection error ์ ํ H3_GENERAL_PROTOCOL_ERROR๋ก ์ฒ๋ฆฌ๋์ด์ผ ํฉ๋๋ค(MUST). ์์ถ ํด์ ๋ ํ๋ ์น์ ์ด ์ ํํ ์ผ์นํ๋ฉด, ํด๋ผ์ด์ธํธ๋ PUSH_PROMISE ํ๋ ์์ด ์์ ๋ ๊ฐ ์คํธ๋ฆผ์ ๋ํด ํธ์๋ ์ฝํ ์ธ ๋ฅผ ์ฐ๊ด์ํค๋ ๊ฒ์ด ๊ถ์ฅ๋ฉ๋๋ค(SHOULD).
๋์ผํ push ID์ ๋ํ ์ค๋ณต ์ฐธ์กฐ๋ฅผ ํ์ฉํ๋ ์ฃผ๋ ์ด์ ๋ ๋์ ์์ฒญ์ผ๋ก ์ธํ ์ค๋ณต์ ์ค์ด๊ธฐ ์ํจ์ ๋๋ค. ์๋ฒ๋ ์ฅ๊ธฐ๊ฐ์ ๊ฑธ์ณ push ID๋ฅผ ์ฌ์ฌ์ฉํ๋ ๊ฒ์ ํผํ๋ ๊ฒ์ด ๊ถ์ฅ๋ฉ๋๋ค(SHOULD). ํด๋ผ์ด์ธํธ๋ ์๋ฒ ํธ์ ์๋ต์ ์๋นํ๊ณ ์ฅ๊ธฐ๊ฐ ์ฌ์ฌ์ฉ์ ์ํด ๋ณด์ ํ์ง ์์ ๊ฐ๋ฅ์ฑ์ด ๋์ต๋๋ค. ์ด๋ฏธ ์๋นํ๊ณ ํ๊ธฐํ push ID๋ฅผ ์ฌ์ฉํ๋ PUSH_PROMISE ํ๋ ์์ ์์ ํ ํด๋ผ์ด์ธํธ๋ ํด๋น ์ฝ์์ ๋ฌด์ํด์ผ ํฉ๋๋ค.
๋ง์ฝ PUSH_PROMISE ํ๋ ใผใ ์ด ์ ์ด ์คํธ๋ฆผ์์ ์์ ๋๋ฉด, ํด๋ผ์ด์ธํธ๋ ์ด๋ฅผ connection error ์ ํ H3_FRAME_UNEXPECTED๋ก ์๋ตํด์ผ ํฉ๋๋ค(MUST).
ํด๋ผ์ด์ธํธ๋ PUSH_PROMISE ํ๋ ์์ ์ ์กํด์๋ ์ ๋ฉ๋๋ค(MUST NOT). ์๋ฒ๋ PUSH_PROMISE ํ๋ ์ ์์ ์ connection error ์ ํ H3_FRAME_UNEXPECTED๋ก ์ฒ๋ฆฌํด์ผ ํฉ๋๋ค(MUST).
์ ์ฒด ์๋ฒ ํธ์ ๋ฉ์ปค๋์ฆ์ ๋ํ ์ค๋ช ์ ์น์ 4.6์ ์ฐธ์กฐํ์ญ์์ค.
7.2.6. GOAWAY
GOAWAY ํ๋ ์(type=0x07)์ ์ด๋ ํ์ชฝ ์๋ํฌ์ธํธ๊ฐ HTTP/3 ์ฐ๊ฒฐ์ ์ ์ ์ข ๋ฃ๋ฅผ ์์ํ๋ ๋ฐ ์ฌ์ฉ๋ฉ๋๋ค. GOAWAY๋ ์๋ํฌ์ธํธ๊ฐ ์ด์ ์ ์์ ๋ ์์ฒญ๊ณผ ํธ์์ ์ฒ๋ฆฌ๋ฅผ ๋ง์น๋ฉด์ ์ ์์ฒญ์ด๋ ํธ์ ์๋ฝ์ ์ค์งํ ์ ์๊ฒ ํฉ๋๋ค. ์ด๋ ์๋ฒ ์ ์ง๋ณด์์ ๊ฐ์ ๊ด๋ฆฌ ์์ ์ ๊ฐ๋ฅํ๊ฒ ํฉ๋๋ค. GOAWAY ์์ฒด๋ ์ฐ๊ฒฐ์ ๋ซ์ง ์์ต๋๋ค.
GOAWAY Frame {
Type (i) = 0x07,
Length (i),
Stream ID/Push ID (i),
}
Figure 9: GOAWAY Frame
GOAWAY ํ๋ ์์ ํญ์ ์ ์ด ์คํธ๋ฆผ์์ ์ ์ก๋ฉ๋๋ค. ์๋ฒโํด๋ผ์ด์ธํธ ๋ฐฉํฅ์์๋ ํด๋ผ์ด์ธํธ๊ฐ ์์ํ ์๋ฐฉํฅ QUIC ์คํธ๋ฆผ์ ๋ํ QUIC ์คํธ๋ฆผ ID๋ฅผ ๋ณ์ ๊ธธ์ด ์ ์๋ก ํฌํจํฉ๋๋ค. ํด๋ผ์ด์ธํธ๋ ๋ค๋ฅธ ์ ํ์ ์คํธ๋ฆผ ID๋ฅผ ํฌํจํ GOAWAY ํ๋ ์์ ์์ ํ๋ฉด ์ด๋ฅผ connection error ์ ํ H3_ID_ERROR๋ก ์ฒ๋ฆฌํด์ผ ํฉ๋๋ค(MUST).
ํด๋ผ์ด์ธํธโ์๋ฒ ๋ฐฉํฅ์์๋ GOAWAY ํ๋ ์์ด ๋ณ์ ๊ธธ์ด ์ ์๋ก ์ธ์ฝ๋ฉ๋ push ID๋ฅผ ํฌํจํฉ๋๋ค.
GOAWAY ํ๋ ์์ ํน์ ์คํธ๋ฆผ์ด ์๋๋ผ ์ ์ฒด ์ฐ๊ฒฐ์ ์ ์ฉ๋ฉ๋๋ค. ํด๋ผ์ด์ธํธ๋ ์ ์ด ์คํธ๋ฆผ์ด ์๋ ์คํธ๋ฆผ์์ GOAWAY ํ๋ ์์ ์์ ํ๋ฉด ์ด๋ฅผ connection error ์ ํ H3_FRAME_UNEXPECTED๋ก ์ฒ๋ฆฌํด์ผ ํฉ๋๋ค(MUST).
GOAWAY ํ๋ ์ ์ฌ์ฉ์ ๊ดํ ์ถ๊ฐ ์ ๋ณด๋ ์น์ 5.2๋ฅผ ์ฐธ์กฐํ์ญ์์ค.
7.2.7. MAX_PUSH_ID
MAX_PUSH_ID ํ๋ ์(type=0x0d)์ ํด๋ผ์ด์ธํธ๊ฐ ์๋ฒ๊ฐ ์์ํ ์ ์๋ ์๋ฒ ํธ์ ์๋ฅผ ์ ์ดํ๋ ๋ฐ ์ฌ์ฉ๋ฉ๋๋ค. ์ด๋ ์๋ฒ๊ฐ PUSH_PROMISE ๋ฐ CANCEL_PUSH ํ๋ ์์์ ์ฌ์ฉํ ์ ์๋ push ID์ ์ต๋๊ฐ์ ์ค์ ํฉ๋๋ค. ๊ฒฐ๊ณผ์ ์ผ๋ก ์ด๋ QUIC ์ ์ก์ด ์ ์งํ๋ ์ ํ๊ณผ ๋๋ถ์ด ์๋ฒ๊ฐ ์์ํ ์ ์๋ ํธ์ ์คํธ๋ฆผ์ ์๋ฅผ ์ ํํฉ๋๋ค.
MAX_PUSH_ID ํ๋ ์์ ํญ์ ์ ์ด ์คํธ๋ฆผ์์ ์ ์ก๋ฉ๋๋ค. ๋ค๋ฅธ ์คํธ๋ฆผ์์ MAX_PUSH_ID ํ๋ ์์ ์์ ํ๋ฉด ์ด๋ connection error ์ ํ H3_FRAME_UNEXPECTED๋ก ์ฒ๋ฆฌ๋์ด์ผ ํฉ๋๋ค(MUST).
์๋ฒ๋ MAX_PUSH_ID ํ๋ ์์ ์ ์กํด์๋ ์ ๋ฉ๋๋ค(MUST NOT). ํด๋ผ์ด์ธํธ๋ MAX_PUSH_ID ํ๋ ์ ์์ ์ connection error ์ ํ H3_FRAME_UNEXPECTED๋ก ์ฒ๋ฆฌํด์ผ ํฉ๋๋ค(MUST).
HTTP/3 ์ฐ๊ฒฐ์ด ์์ฑ๋ ๋ ์ต๋ push ID๋ ์ค์ ๋์ง ์์ผ๋ฏ๋ก ์๋ฒ๋ MAX_PUSH_ID ํ๋ ์์ ์์ ํ๊ธฐ ์ ๊น์ง ํธ์๋ฅผ ์ํํ ์ ์์ต๋๋ค. ์ฝ์๋ ์๋ฒ ํธ์ ์๋ฅผ ๊ด๋ฆฌํ๋ ค๋ ํด๋ผ์ด์ธํธ๋ ์๋ฒ๊ฐ ํธ์๋ฅผ ์ดํํ๊ฑฐ๋ ์ทจ์ํ ๋ MAX_PUSH_ID ํ๋ ์์ ์ ์กํ์ฌ ์ต๋ push ID๋ฅผ ์ฆ๊ฐ์ํฌ ์ ์์ต๋๋ค.
MAX_PUSH_ID Frame {
Type (i) = 0x0d,
Length (i),
Push ID (i),
}
Figure 10: MAX_PUSH_ID Frame
MAX_PUSH_ID ํ๋ ์์ ์๋ฒ๊ฐ ์ฌ์ฉํ ์ ์๋ push ID์ ์ต๋๊ฐ์ ์๋ณํ๋ ๋จ์ผ ๋ณ์ ๊ธธ์ด ์ ์๋ฅผ ์ด๋ฐํฉ๋๋ค(์์ธํ ๋ด์ฉ์ ์น์ 4.6 ์ฐธ์กฐ). MAX_PUSH_ID ํ๋ ์์ ์ต๋ push ID๋ฅผ ์ค์ผ ์ ์์ต๋๋ค; ์ด์ ์ ์์ ํ ๊ฐ๋ณด๋ค ์์ ๊ฐ์ ํฌํจํ๋ MAX_PUSH_ID ํ๋ ์์ ์์ ์ connection error ์ ํ H3_ID_ERROR๋ก ์ฒ๋ฆฌ๋์ด์ผ ํฉ๋๋ค(MUST).
7.2.8. ์์ฝ๋ ํ๋ ์ ์ ํ
๋น์์ ์ ์ N์ ๋ํด ํ์ 0x1f * N + 0x21์ ํ๋ ์ ์ ํ์ ๋ฏธ์ง์ ์ ํ์ ๋ฌด์ํด์ผ ํ๋ค๋ ์๊ตฌ์ฌํญ์ ์ ๊ฒํ๊ธฐ ์ํด ์์ฝ๋์ด ์์ต๋๋ค(์น์ 9 ์ฐธ์กฐ). ์ด๋ฌํ ํ๋ ์์ ์๋ฏธ๊ฐ ์์ผ๋ฉฐ, ํ๋ ์์ด ํ์ฉ๋๋ ๋ชจ๋ ์คํธ๋ฆผ์์ ์ ์ก๋ ์ ์์ต๋๋ค(MAY). ์ด๋ ์ ํ๋ฆฌ์ผ์ด์ ๋ ์ด์ด ํจ๋ฉ์ ์ฌ์ฉ๋ ์ ์๋๋ก ํฉ๋๋ค. ์์ ์๋ ์ด๋ฌํ ํ๋ ์์ ์์ ์ ์ด๋ค ์๋ฏธ๋ ๊ฐ์ง ๊ฒ์ผ๋ก ๊ฐ์ฃผํด์๋ ์ ๋ฉ๋๋ค(MUST NOT).
ํ๋ ์์ ํ์ด๋ก๋์ ๊ธธ์ด๋ ๊ตฌํ์ฒด๊ฐ ์ ํํ๋ ๋ฐฉ์์ผ๋ก ์ ํ๋ฉ๋๋ค.
HTTP/2์์ ์ฌ์ฉ๋์์ง๋ง HTTP/3์ ๋์ํ๋ ํ๋ ์์ด ์๋ ํ๋ ์ ์ ํ๋ค๋ ์์ฝ๋์ด ์์ต๋๋ค(์น์ 11.2.1). ์ด๋ฌํ ํ๋ ์ ์ ํ์ ์ ์กํด์๋ ์ ๋๋ฉฐ(MUST NOT), ์์ ๋๋ฉด connection error ์ ํ H3_FRAME_UNEXPECTED๋ก ์ฒ๋ฆฌ๋์ด์ผ ํฉ๋๋ค(MUST).
8. ์ค๋ฅ ์ฒ๋ฆฌ
์คํธ๋ฆผ์ ์ ์์ ์ผ๋ก ์๋ฃํ ์ ์์ ๋, QUIC์ ์ ํ๋ฆฌ์ผ์ด์ ์ด ํด๋น ์คํธ๋ฆผ์ ๊ฐ์์ค๋ฝ๊ฒ ์ข ๋ฃ(๋ฆฌ์ )ํ๊ณ ์ด์ ๋ฅผ ์ ๋ฌํ ์ ์๋๋ก ํ์ฉํฉ๋๋ค; ์์ธํ ๋ด์ฉ์ Section 2.4์ [QUIC-TRANSPORT]๋ฅผ ์ฐธ์กฐํ์ญ์์ค. ์ด๋ฅผ "์คํธ๋ฆผ ์ค๋ฅ"๋ผ๊ณ ๋ถ๋ฆ ๋๋ค. HTTP/3 ๊ตฌํ์ฒด๋ QUIC ์คํธ๋ฆผ์ ๋ซ๊ณ ์ค๋ฅ ์ ํ์ ์ ๋ฌํ๋๋ก ๊ฒฐ์ ํ ์ ์์ต๋๋ค. ์ค๋ฅ ์ฝ๋์ ์์ด์ด ์ธ์ฝ๋ฉ์ ์น์ 8.1์ ์ ์๋์ด ์์ต๋๋ค. ์คํธ๋ฆผ ์ค๋ฅ๋ ์ค๋ฅ ์ํ๋ฅผ ๋ํ๋ด๋ HTTP ์ํ ์ฝ๋์๋ ๊ตฌ๋ณ๋ฉ๋๋ค. ์คํธ๋ฆผ ์ค๋ฅ๋ ์ก์ ์๊ฐ ์ ์ฒด ์์ฒญ ๋๋ ์๋ต์ ์ ์กํ๊ฑฐ๋ ์๋นํ์ง ์์์์ ๋ํ๋ด๋ ๋ฐ๋ฉด, HTTP ์ํ ์ฝ๋๋ ์ฑ๊ณต์ ์ผ๋ก ์์ ๋ ์์ฒญ์ ๊ฒฐ๊ณผ๋ฅผ ๋ํ๋ ๋๋ค.
์ฐ๊ฒฐ ์ ์ฒด๋ฅผ ์ข ๋ฃํด์ผ ํ๋ ๊ฒฝ์ฐ์๋ QUIC์ ์ ์ฌํ ๋ฐฉ์์ผ๋ก ์ด์ ๋ฅผ ์ ๋ฌํ๋ ๋ฉ์ปค๋์ฆ์ ์ ๊ณตํฉ๋๋ค; ์์ธํ ๋ด์ฉ์ Section 5.3์ [QUIC-TRANSPORT]๋ฅผ ์ฐธ์กฐํ์ญ์์ค. ์ด๋ฅผ "์ฐ๊ฒฐ ์ค๋ฅ"๋ผ๊ณ ๋ถ๋ฆ ๋๋ค. ์คํธ๋ฆผ ์ค๋ฅ์ ์ ์ฌํ๊ฒ, HTTP/3 ๊ตฌํ์ฒด๋ QUIC ์ฐ๊ฒฐ์ ์ข ๋ฃํ๊ณ ์น์ 8.1์ ์ค๋ฅ ์ฝ๋๋ฅผ ์ฌ์ฉํ์ฌ ์ด์ ๋ฅผ ์ ๋ฌํ ์ ์์ต๋๋ค.
์คํธ๋ฆผ๊ณผ ์ฐ๊ฒฐ์ ๋ซ๋ ์ด์ ๊ฐ "์ค๋ฅ"๋ผ๊ณ ๋ถ๋ฆฌ๋๋ผ๋, ์ด๋ฌํ ๋์์ด ๋ฐ๋์ ์ฐ๊ฒฐ์ด๋ ์ด๋ ํ ๊ตฌํ์ฒด์ ๋ฌธ์ ๋ฅผ ์๋ฏธํ์ง๋ ์์ต๋๋ค. ์๋ฅผ ๋ค์ด, ์์ฒญํ ๋ฆฌ์์ค๊ฐ ๋ ์ด์ ํ์ํ์ง ์์ ๊ฒฝ์ฐ ์คํธ๋ฆผ์ ๋ฆฌ์ ํ ์ ์์ต๋๋ค.
์๋ํฌ์ธํธ๋ ํน์ ์ํฉ์์ ์คํธ๋ฆผ ์ค๋ฅ๋ฅผ ์ฐ๊ฒฐ ์ค๋ฅ๋ก ์ฒ๋ฆฌํ์ฌ ๋จ์ผ ์คํธ๋ฆผ์ ์กฐ๊ฑด์ ๋์ํ์ฌ ์ ์ฒด ์ฐ๊ฒฐ์ ๋ซ๊ธฐ๋ก ์ ํํ MAY ์์ต๋๋ค. ๊ตฌํ์ฒด๋ ์ด๋ฌํ ์ ํ์ ํ๊ธฐ ์ ์ ๋ฏธ๊ฒฐ ์์ฒญ์ ๋ฏธ์น ์ํฅ์ ๊ณ ๋ คํด์ผ ํฉ๋๋ค.
์๋ก์ด ์ค๋ฅ ์ฝ๋๋ ํ์ ์์ด ์ ์๋ ์ ์์ผ๋ฏ๋ก(์์ธํ ๋ด์ฉ์ ์น์ 9 ์ฐธ์กฐ), ์๊ธฐ์น ์์ ๋ฌธ๋งฅ์์ ์ค๋ฅ ์ฝ๋๋ฅผ ์ฌ์ฉํ๊ฑฐ๋ ์ ์ ์๋ ์ค๋ฅ ์ฝ๋๋ฅผ ์์ ํ๋ ๊ฒฝ์ฐ ๊ทธ๊ฒ์ MUST H3_NO_ERROR์ ๋๋ฑํ๊ฒ ์ฒ๋ฆฌํด์ผ ํฉ๋๋ค. ๊ทธ๋ฌ๋ ์คํธ๋ฆผ์ ๋ซ๋ ๊ฒ์ ์ค๋ฅ ์ฝ๋์ ๊ด๊ณ์์ด ๋ค๋ฅธ ํจ๊ณผ๋ฅผ ๊ฐ์ง ์ ์์ต๋๋ค; ์๋ฅผ ๋ค์ด ์น์ 4.1๋ฅผ ์ฐธ์กฐํ์ญ์์ค.
8.1. HTTP/3 ์ค๋ฅ ์ฝ๋
๋ค์ ์ค๋ฅ ์ฝ๋๋ค์ ์คํธ๋ฆผ์ ๊ฐ์์ค๋ฝ๊ฒ ์ข ๋ฃํ๊ฑฐ๋ ์คํธ๋ฆผ ์ฝ๊ธฐ๋ฅผ ์ค๋จํ๊ฑฐ๋ HTTP/3 ์ฐ๊ฒฐ์ ์ฆ์ ๋ซ์ ๋ ์ฌ์ฉํ๊ธฐ ์ํด ์ ์๋ฉ๋๋ค.
- H3_NO_ERROR (0x0100):
-
์ค๋ฅ ์์. ์ฐ๊ฒฐ์ด๋ ์คํธ๋ฆผ์ ๋ซ์์ผ ํ์ง๋ง ์ ํธํ ์ค๋ฅ๊ฐ ์์ ๋ ์ฌ์ฉ๋ฉ๋๋ค.
- H3_GENERAL_PROTOCOL_ERROR (0x0101):
-
ํผ์ด๊ฐ ๋ ๊ตฌ์ฒด์ ์ธ ์ค๋ฅ ์ฝ๋์ ๋ง์ง ์๋ ๋ฐฉ์์ผ๋ก ํ๋กํ ์ฝ ์๊ตฌ์ฌํญ์ ์๋ฐํ๊ฑฐ๋, ์๋ํฌ์ธํธ๊ฐ ๋ ๊ตฌ์ฒด์ ์ธ ์ค๋ฅ ์ฝ๋๋ฅผ ์ฌ์ฉํ์ง ์๊ธฐ๋ก ํ ๊ฒฝ์ฐ.
- H3_INTERNAL_ERROR (0x0102):
-
HTTP ์คํ์์ ๋ด๋ถ ์ค๋ฅ๊ฐ ๋ฐ์ํ์ต๋๋ค.
- H3_STREAM_CREATION_ERROR (0x0103):
-
์๋ํฌ์ธํธ๊ฐ ํผ์ด๊ฐ ์์ฑํ ์คํธ๋ฆผ์ ์์ฉํ์ง ์๊ธฐ๋ก ๊ฐ์งํ์ต๋๋ค.
- H3_CLOSED_CRITICAL_STREAM (0x0104):
-
HTTP/3 ์ฐ๊ฒฐ์ ํ์ํ๋ ์คํธ๋ฆผ์ด ๋ซํ๊ฑฐ๋ ๋ฆฌ์ ๋์์ต๋๋ค.
- H3_FRAME_UNEXPECTED (0x0105):
-
ํ์ฌ ์ํ๋ ํด๋น ์คํธ๋ฆผ์์ ํ์ฉ๋์ง ์๋ ํ๋ ์์ด ์์ ๋์์ต๋๋ค.
- H3_FRAME_ERROR (0x0106):
-
๋ ์ด์์ ์๊ตฌ์ฌํญ์ ๋ง์กฑํ์ง ๋ชปํ๊ฑฐ๋ ์ ํจํ์ง ์์ ํฌ๊ธฐ์ ํ๋ ์์ด ์์ ๋์์ต๋๋ค.
- H3_EXCESSIVE_LOAD (0x0107):
-
ํผ์ด๊ฐ ๊ณผ๋ํ ๋ถํ๋ฅผ ๋ฐ์์ํค๋ ํํ๋ฅผ ๋ณด์ด๋ ๊ฒ์ผ๋ก ๊ฐ์ง๋์์ต๋๋ค.
- H3_ID_ERROR (0x0108):
-
์คํธ๋ฆผ ID ๋๋ push ID๊ฐ ์ ํ ์ด๊ณผ, ์ ํ ์ถ์, ์ฌ์ฌ์ฉ ๋ฑ ์๋ชป ์ฌ์ฉ๋์์ต๋๋ค.
- H3_SETTINGS_ERROR (0x0109):
-
์๋ํฌ์ธํธ๊ฐ SETTINGS ํ๋ ์์ ํ์ด๋ก๋์์ ์ค๋ฅ๋ฅผ ๊ฐ์งํ์ต๋๋ค.
- H3_MISSING_SETTINGS (0x010a):
-
์ ์ด ์คํธ๋ฆผ(control stream)์ ์์์์ SETTINGS ํ๋ ์์ด ์์ ๋์ง ์์์ต๋๋ค.
- H3_REQUEST_REJECTED (0x010b):
-
์๋ฒ๊ฐ ์ ํ๋ฆฌ์ผ์ด์ ์ฒ๋ฆฌ๋ฅผ ์ ํ ์ํํ์ง ์๊ณ ์์ฒญ์ ๊ฑฐ๋ถํ์ต๋๋ค.
- H3_REQUEST_CANCELLED (0x010c):
-
์์ฒญ ๋๋ ๊ทธ ์๋ต(ํธ์๋ ์๋ต ํฌํจ)์ด ์ทจ์๋์์ต๋๋ค.
- H3_REQUEST_INCOMPLETE (0x010d):
-
ํด๋ผ์ด์ธํธ์ ์คํธ๋ฆผ์ด ์์ ํ ์์ฒญ์ ํฌํจํ์ง ์์ ์ฑ ์ข ๋ฃ๋์์ต๋๋ค.
- H3_MESSAGE_ERROR (0x010e):
-
HTTP ๋ฉ์์ง๊ฐ ํ์์ด ์๋ชป๋จ์ผ๋ก ์ฒ๋ฆฌํ ์ ์์ต๋๋ค.
- H3_CONNECT_ERROR (0x010f):
-
CONNECT ์์ฒญ์ ์๋ตํ์ฌ ์ค์ ๋ TCP ์ฐ๊ฒฐ์ด ๋ฆฌ์ ๋์๊ฑฐ๋ ๋น์ ์์ ์ผ๋ก ์ข ๋ฃ๋์์ต๋๋ค.
- H3_VERSION_FALLBACK (0x0110):
-
์์ฒญ๋ ์์ ์ HTTP/3๋ก ์ ๊ณตํ ์ ์์ต๋๋ค. ํผ์ด๋ HTTP/1.1๋ก ์ฌ์๋ํด์ผ ํฉ๋๋ค.
๋น์์ ์ ์ ๊ฐ N์ ๋ํด ํ์ 0x1f * N + 0x21์ ์ค๋ฅ ์ฝ๋๋ ๋ฏธ์ง์ ์ค๋ฅ ์ฝ๋๊ฐ H3_NO_ERROR์ ๋๋ฑํ๊ฒ ์ฒ๋ฆฌ๋์ด์ผ ํ๋ค๋ ์๊ตฌ์ฌํญ์ ์ ๊ฒํ๊ธฐ ์ํด ์์ฝ๋์ด ์์ต๋๋ค(์น์ 9). ๊ตฌํ์ฒด๋ H3_NO_ERROR๋ฅผ ๋ณด๋ผ ๊ฐ๋ฅ์ฑ์ด ์์๋ ๊ฒฝ์ฐ์ ์ด๋ฌํ ๊ณต๊ฐ์์ ์ค๋ฅ ์ฝ๋๋ฅผ ์ ํํ๋ ๊ฒ์ด ๊ถ์ฅ๋ฉ๋๋ค(SHOULD).
9. HTTP/3 ํ์ฅ
HTTP/3๋ ํ๋กํ ์ฝ์ ํ์ฅ์ ํ์ฉํฉ๋๋ค. ์ด ์ ์ ์ค๋ช ๋ ์ ํ ๋ด์์, ํ๋กํ ์ฝ ํ์ฅ์ ์ถ๊ฐ ์๋น์ค๋ฅผ ์ ๊ณตํ๊ฑฐ๋ ํ๋กํ ์ฝ์ ์ด๋ ์ธก๋ฉด์ด๋ ๋ณ๊ฒฝํ๋ ๋ฐ ์ฌ์ฉ๋ ์ ์์ต๋๋ค. ํ์ฅ์ ๋จ์ผ HTTP/3 ์ฐ๊ฒฐ์ ๋ฒ์ ๋ด์์๋ง ์ ํจํฉ๋๋ค.
์ด๋ ์ด ๋ฌธ์์์ ์ ์๋ ํ๋กํ ์ฝ ์์์ ์ ์ฉ๋ฉ๋๋ค. ์ด๋ ์๋ก์ด ๋ฉ์๋, ์ํ ์ฝ๋ ๋๋ ํ๋๋ฅผ ์ ์ํ๋ ๋ฑ HTTP๋ฅผ ํ์ฅํ๋ ๊ธฐ์กด ์ต์ ๋ค์๋ ์ํฅ์ ๋ฏธ์น์ง ์์ต๋๋ค.
ํ์ฅ์ ์๋ก์ด ํ๋ ์ ์ ํ(์น์ 7.2), ์๋ก์ด ์ค์ (์น์ 7.2.4.1), ์๋ก์ด ์ค๋ฅ ์ฝ๋(์น์ 8), ๋๋ ์๋ก์ด ๋จ๋ฐฉํฅ ์คํธ๋ฆผ ์ ํ(์น์ 6.2)์ ์ฌ์ฉํ ์ ์์ต๋๋ค. ์ด๋ฌํ ํ์ฅ ํฌ์ธํธ๋ฅผ ๊ด๋ฆฌํ๊ธฐ ์ํ ๋ ์ง์คํธ๋ฆฌ๊ฐ ์ค์ ๋์ด ์์ต๋๋ค: ํ๋ ์ ์ ํ(์น์ 11.2.1), ์ค์ (์น์ 11.2.2), ์ค๋ฅ ์ฝ๋(์น์ 11.2.3), ์คํธ๋ฆผ ์ ํ(์น์ 11.2.4).
๊ตฌํ์ฒด๋ ๋ชจ๋ ํ์ฅ ๊ฐ๋ฅํ ํ๋กํ ์ฝ ์์์์ ์ ์ ์๊ฑฐ๋ ์ง์๋์ง ์๋ ๊ฐ์ ๋ฌด์ํด์ผ ํฉ๋๋ค(MUST). ๊ตฌํ์ฒด๋ ์ ์ ์๊ฑฐ๋ ์ง์๋์ง ์๋ ์ ํ์ ๋จ๋ฐฉํฅ ์คํธ๋ฆผ์์ ๋ฐ์ดํฐ๋ฅผ ํ๊ธฐํ๊ฑฐ๋ ์ฝ๊ธฐ๋ฅผ ์ค๋จํด์ผ ํฉ๋๋ค(MUST). ์ด๋ ์ด๋ฌํ ํ์ฅ ํฌ์ธํธ๋ค์ด ์ฌ์ ํฉ์๋ ํ์ ์์ด ํ์ฅ์ ์ํด ์์ ํ๊ฒ ์ฌ์ฉ๋ ์ ์์์ ์๋ฏธํฉ๋๋ค. ๊ทธ๋ฌ๋ SETTINGS ํ๋ ์์ด ์ ์ด ์คํธ๋ฆผ(์น์ 6.2.1)์ ์ฒซ ๋ฒ์งธ ํ๋ ์์ผ๋ก ์์ด์ผ ํ๋ค๋ ๊ฒ๊ณผ ๊ฐ์ด ์๋ ค์ง ํ๋ ์ ์ ํ์ด ํน์ ์์น์ ์์ด์ผ ํ๋ ๊ฒฝ์ฐ, ๋ฏธ์ง์ ํ๋ ์ ์ ํ์ ๊ทธ ์๊ตฌ์ฌํญ์ ๋ง์กฑํ์ง ๋ชปํ๋ฏ๋ก ์ค๋ฅ๋ก ์ฒ๋ฆฌ๋๋ ๊ฒ์ด ๊ถ์ฅ๋ฉ๋๋ค(SHOULD).
๊ธฐ์กด ํ๋กํ ์ฝ ๊ตฌ์ฑ์์์ ์๋ฏธ๋ฅผ ๋ณ๊ฒฝํ ์ ์๋ ํ์ฅ์ ์ฌ์ฉ๋๊ธฐ ์ ์ ํ์๋์ด์ผ ํฉ๋๋ค(MUST). ์๋ฅผ ๋ค์ด, HEADERS ํ๋ ์์ ๋ ์ด์์์ ๋ณ๊ฒฝํ๋ ํ์ฅ์ ํผ์ด๊ฐ ์ด๋ฅผ ์์ฉํ ๊ธ์ ์ ์ ํธ๋ฅผ ์ฃผ๊ธฐ ์ ๊น์ง ์ฌ์ฉํ ์ ์์ต๋๋ค. ์ด๋ฌํ ์์ ๋ ๋ ์ด์์์ด ์ธ์ ํจ๋ ฅ์ ๋ฐ์ํ๋์ง๋ฅผ ์กฐ์ ํ๋ ๊ฒ์ ๋ณต์กํ ์ ์์ต๋๋ค. ๋ฐ๋ผ์ ๊ธฐ์กด ํ๋กํ ์ฝ ์์์ ์๋ก์ด ์ ์์ ๋ํด ์๋ก์ด ์๋ณ์๋ฅผ ํ ๋นํ๋ ๊ฒ์ด ๋ ํจ๊ณผ์ ์ผ ์ ์์ต๋๋ค.
์ด ๋ฌธ์๋ ํ์ฅ ์ฌ์ฉ์ ํ์ํ๋ ํน์ ๋ฐฉ๋ฒ์ ๊ท์ ํ์ง ์์ง๋ง, ์ค์ (์น์ 7.2.4.1)์ด ๊ทธ ๋ชฉ์ ์ ์ฌ์ฉ๋ ์ ์์์ ์ง์ ํฉ๋๋ค. ์์ชฝ ํผ์ด๊ฐ ํ์ฅ ์ฌ์ฉ์ ๋์ํ๋ ๊ฐ์ ์ค์ ํ๋ฉด ํ์ฅ์ ์ฌ์ฉํ ์ ์์ต๋๋ค. ์ค์ ์ด ํ์ฅ ํ์์ ์ฌ์ฉ๋๋ ๊ฒฝ์ฐ, ์ค์ ์ ๊ธฐ๋ณธ๊ฐ์ ์ค์ ์ด ๋๋ฝ๋๋ฉด ํ์ฅ์ด ๋นํ์ฑํ๋๋๋ก ์ ์๋์ด์ผ ํฉ๋๋ค(MUST).
10. ๋ณด์ ๊ณ ๋ ค์ฌํญ
HTTP/3์ ๋ณด์ ๊ณ ๋ ค์ฌํญ์ TLS๋ฅผ ์ฌ์ฉํ๋ HTTP/2์ ๊ณ ๋ ค์ฌํญ๊ณผ ๋น๊ตํด ์ ์ฌํด์ผ ํฉ๋๋ค. ๊ทธ๋ฌ๋ RFC 9113 ์น์ 10์ ๋ง์ ๊ณ ๋ ค์ฌํญ์ด [QUIC-TRANSPORT]์ ์ ์ฉ๋๋ฉฐ ํด๋น ๋ฌธ์์์ ๋ ผ์๋ฉ๋๋ค.
10.2. ๊ต์ฐจ ํ๋กํ ์ฝ ๊ณต๊ฒฉ
TLS์ QUIC ํธ๋์ ฐ์ดํฌ์์ ALPN์ ์ฌ์ฉํ๋ ๊ฒ์ ์ ํ๋ฆฌ์ผ์ด์ ๋ ์ด์ด ๋ฐ์ดํธ๊ฐ ์ฒ๋ฆฌ๋๊ธฐ ์ ์ ๋์ ์ ํ๋ฆฌ์ผ์ด์ ํ๋กํ ์ฝ์ ํ๋ฆฝํฉ๋๋ค. ์ด๋ ํผ์ด๋ค์ด ๋์ผํ ํ๋กํ ์ฝ์ ์ฌ์ฉํ๊ณ ์๋ค๋ ๊ฐํ ํ์ ์ ๊ฐ๋๋ก ํฉ๋๋ค.
์ด๋ ๋ชจ๋ ๊ต์ฐจ ํ๋กํ ์ฝ ๊ณต๊ฒฉ์ผ๋ก๋ถํฐ์ ๋ณดํธ๋ฅผ ๋ณด์ฅํ์ง๋ ์์ต๋๋ค. RFC 9000 ์น์ 21.5๋ ์ธ์ฆ๋์ง ์์ ์ ์ก์ ์ฌ์ฉํ์ง ์๋ ์๋ํฌ์ธํธ๋ฅผ ๋์์ผ๋ก ํ๋ฌธ QUIC ํจํท์ ์ฌ์ฉํด ์์ฒญ ์์กฐ๋ฅผ ์ํํ ์ ์๋ ๋ช ๊ฐ์ง ๋ฐฉ๋ฒ์ ์ค๋ช ํฉ๋๋ค.
10.3. ์ค๊ฐ์ ์บก์ํ ๊ณต๊ฒฉ
HTTP/3 ํ๋ ์ธ์ฝ๋ฉ์ HTTP ๊ตฌ๋ฌธ์์ ์ ํจํ ํ๋ ์ด๋ฆ์ด ์๋ ์ด๋ฆ์ ํํํ ์ ์๊ฒ ํฉ๋๋ค(RFC 9110 ์น์ 5.1 ์ฐธ์กฐ). ์ ํจํ์ง ์์ ํ๋ ์ด๋ฆ์ ํฌํจํ๋ ์์ฒญ ๋๋ ์๋ต์ MUST ํ์์ด ์๋ชป๋ ๊ฒ์ผ๋ก ์ฒ๋ฆฌํด์ผ ํฉ๋๋ค. ๋ฐ๋ผ์ ์ค๊ฐ์๋ ์ ํจํ์ง ์์ ํ๋ ์ด๋ฆ์ ํฌํจํ HTTP/3 ์์ฒญ ๋๋ ์๋ต์ HTTP/1.1 ๋ฉ์์ง๋ก ๋ฒ์ญํ ์ ์์ต๋๋ค.
์ ์ฌํ๊ฒ, HTTP/3๋ ์ ํจํ์ง ์์ ํ๋ ๊ฐ์ ์ ์กํ ์ ์์ต๋๋ค. ์ธ์ฝ๋ฉ ๊ฐ๋ฅํ ๋๋ถ๋ถ์ ๊ฐ์ ํ๋ ํ์ฑ์ ๋ณ๊ฒฝํ์ง ์๊ฒ ์ง๋ง, ์บ๋ฆฌ์ง ๋ฆฌํด(ASCII 0x0d), ๋ผ์ธ ํผ๋(ASCII 0x0a), ๋ ๋ฌธ์(ASCII 0x00)๋ ๊ณต๊ฒฉ์๊ฐ ์ด๋ฅผ ๊ทธ๋๋ก ๋ฒ์ญํ ๊ฒฝ์ฐ ์ ์ฉ๋ ์ ์์ต๋๋ค. ํ๋ ๊ฐ์ ํ์ฉ๋์ง ์๋ ๋ฌธ์๋ฅผ ํฌํจํ๋ ๋ชจ๋ ์์ฒญ ๋๋ ์๋ต์ MUST ํ์์ด ์๋ชป๋ ๊ฒ์ผ๋ก ์ฒ๋ฆฌํด์ผ ํฉ๋๋ค. ์ ํจํ ๋ฌธ์๋ RFC 9110 ์น์ 5.5์ "field-content" ABNF ๊ท์น์ ์ํด ์ ์๋ฉ๋๋ค.
10.4. ํธ์๋ ์๋ต์ ์บ์ ๊ฐ๋ฅ์ฑ
ํธ์๋ ์๋ต์ ํด๋ผ์ด์ธํธ์ ๋ช ์์ ์์ฒญ์ด ์์ผ๋ฉฐ, ์์ฒญ์ ์๋ฒ๊ฐ PUSH_PROMISE ํ๋ ์์์ ์ ๊ณตํฉ๋๋ค.
ํธ์๋ ์๋ต์ ์บ์ํ๋ ๊ฒ์ ์ค๋ฆฌ์ง ์๋ฒ๊ฐ Cache-Control ํค๋ ํ๋์์ ์ ๊ณตํ๋ ์ง์นจ์ ๋ฐ๋ผ ๊ฐ๋ฅํฉ๋๋ค. ๊ทธ๋ฌ๋ ๋จ์ผ ์๋ฒ๊ฐ ๋ ์ด์์ ํ ๋ํธ๋ฅผ ํธ์คํ ํ๋ ๊ฒฝ์ฐ ๋ฌธ์ ๊ฐ ๋ฐ์ํ ์ ์์ต๋๋ค. ์๋ฅผ ๋ค์ด, ์๋ฒ๊ฐ ๊ฐ ์ฌ์ฉ์์๊ฒ URI ๊ณต๊ฐ์ ์์ ๋ถ๋ถ์ ์ ๊ณตํ ์ ์์ต๋๋ค.
์ฌ๋ฌ ํ ๋ํธ๊ฐ ๋์ผ ์๋ฒ์์ ๊ณต๊ฐ์ ๊ณต์ ํ๋ ๊ฒฝ์ฐ, ํด๋น ์๋ฒ๋ ํ ๋ํธ๊ฐ ๊ถํ์ด ์๋ ๋ฆฌ์์ค์ ํํ์ ํธ์ํ ์ ์๋๋ก ๋ณด์ฅํด์ผ ํฉ๋๋ค(MUST). ์ด๋ฅผ ๊ฐ์ ํ์ง ๋ชปํ๋ฉด ํ ๋ํธ๊ฐ ์บ์์์ ์ ๊ณต๋์ด ๊ถํ ์๋ ํ ๋ํธ๊ฐ ์ ๊ณตํ๋ ์ค์ ํํ์ ๋ฎ์ด์ธ ์ ์์ต๋๋ค.
ํด๋ผ์ด์ธํธ๋ ์ค๋ฆฌ์ง ์๋ฒ์ ๋ํด ๊ถํ์ด ์๋ ํธ์๋ ์๋ต์ ๊ฑฐ๋ถํด์ผ ํฉ๋๋ค; ์์ธํ ๋ด์ฉ์ ์น์ 4.6์ ์ฐธ์กฐํ์ญ์์ค.
10.5. ์๋น์ค ๊ฑฐ๋ถ(DoS) ๊ณ ๋ ค์ฌํญ
HTTP/3 ์ฐ๊ฒฐ์ HTTP/1.1 ๋๋ HTTP/2 ์ฐ๊ฒฐ๋ณด๋ค ์ด์์ ์ํด ๋ ๋ง์ ์์ ํ ๋น์ ์๊ตฌํ ์ ์์ต๋๋ค. ํ๋ ์์ถ๊ณผ ํ๋ฆ ์ ์ด์ ์ฌ์ฉ์ ๋ ๋ง์ ์ํ๋ฅผ ์ ์ฅํ๊ธฐ ์ํ ์์ ํ ๋น์ ์์กดํฉ๋๋ค. ์ด๋ฌํ ๊ธฐ๋ฅ์ ๋ํ ์ค์ ์ ์ด๋ฌํ ๊ธฐ๋ฅ๋ค์ ๋ฉ๋ชจ๋ฆฌ ํ ๋น์ด ์๊ฒฉํ๊ฒ ์ ํ๋๋๋ก ๋ณด์ฅํฉ๋๋ค.
PUSH_PROMISE ํ๋ ์์ ์๋ ์ ์ฌํ ๋ฐฉ์์ผ๋ก ์ ์ฝ๋ฉ๋๋ค. ์๋ฒ ํธ์๋ฅผ ์๋ฝํ๋ ํด๋ผ์ด์ธํธ๋ ๋์์ ๋ฐํํ๋ push ID์ ์๋ฅผ ์ ํํ๋ ๊ฒ์ด ๊ถ์ฅ๋ฉ๋๋ค(SHOULD).
์ฒ๋ฆฌ ์ฉ๋์ ์ํ ์ฉ๋๋งํผ ํจ๊ณผ์ ์ผ๋ก ๋ณดํธํ ์ ์์ต๋๋ค.
ํผ์ด๊ฐ ๋ฌด์ํด์ผ ํ๋ ์ ์๋์ง ์์ ํ๋กํ ์ฝ ์์๋ฅผ ์ ์กํ ์ ์๋ ๋ฅ๋ ฅ์ ํผ์ด๊ฐ ์ถ๊ฐ ์ฒ๋ฆฌ ์๊ฐ์ ์๋นํ๊ฒ ํ๋๋ก ์ ์ฉ๋ ์ ์์ต๋๋ค. ์ด๋ ๋ค์์ ๋ฏธ์ ์ SETTINGS ๋งค๊ฐ๋ณ์, ์๋ ค์ง์ง ์์ ํ๋ ์ ์ ํ ๋๋ ์๋ ค์ง์ง ์์ ์คํธ๋ฆผ ์ ํ์ ์ค์ ํจ์ผ๋ก์จ ์ด๋ฃจ์ด์ง ์ ์์ต๋๋ค. ๋ค๋ง ์ผ๋ถ ์ฌ์ฉ์ ์์ ํ ์ ๋นํ ์ ์๋๋ฐ, ์๋ฅผ ๋ค์ด ์ต์ -์ดํด ํ์ฅ์ด๋ ํธ๋ํฝ ๋ถ์์ ๋ํ ์ ํญ์ ๋์ด๊ธฐ ์ํ ํจ๋ฉ ๋ฑ์ด ๊ทธ๋ ์ต๋๋ค.
ํ๋ ์น์ ์ ์์ถ ๋ํ ์ฒ๋ฆฌ ์์์ ๋ญ๋นํ ์ ์๋ ๊ธฐํ๋ฅผ ์ ๊ณตํฉ๋๋ค; ์ ์ฌ์ ์ ์ฉ์ ๊ดํ ์์ธํ ๋ด์ฉ์ RFC 9204 ์น์ 7์ [QPACK]๋ฅผ ์ฐธ์กฐํ์ญ์์ค.
์๋ฒ ํธ์, ๋ฏธ์ง์ ํ๋กํ ์ฝ ์์, ํ๋ ์์ถ ๋ฑ ์ด ๋ชจ๋ ๊ธฐ๋ฅ์ ์ ๋นํ ์ฌ์ฉ ์ฌ๋ก๊ฐ ์์ต๋๋ค. ์ด๋ฌํ ๊ธฐ๋ฅ๋ค์ ๋ถํ์ํ๊ฑฐ๋ ๊ณผ๋ํ๊ฒ ์ฌ์ฉ๋ ๋์๋ง ๋ถ๋ด์ด ๋ฉ๋๋ค.
์ด๋ฌํ ํํ๋ฅผ ๋ชจ๋ํฐ๋งํ์ง ์๋ ์๋ํฌ์ธํธ๋ ์๋น์ค ๊ฑฐ๋ถ ๊ณต๊ฒฉ์ ์ํ์ ๋ ธ์ถ๋ฉ๋๋ค. ๊ตฌํ์ฒด๋ ์ด๋ฌํ ๊ธฐ๋ฅ์ ์ฌ์ฉ์ ์ถ์ ํ๊ณ ์ฌ์ฉ์ ๋ํ ์ ํ์ ์ค์ ํด์ผ ํฉ๋๋ค(SHOULD). ์๋ํฌ์ธํธ๋ ์์ฌ์ค๋ฌ์ด ํ๋์ ์ฐ๊ฒฐ ์ค๋ฅ ์ ํ H3_EXCESSIVE_LOAD๋ก ์ฒ๋ฆฌํ MAY ์์ง๋ง, ์คํ์ ์ ์์ ์ธ ์ฐ๊ฒฐ๊ณผ ์์ฒญ์ ์ค๋จ์ํค๋ ๊ฒฐ๊ณผ๋ฅผ ์ด๋ํฉ๋๋ค.
10.5.1. ํ๋ ์น์ ํฌ๊ธฐ ์ ํ
ํฐ ํ๋ ์น์ (์น์ 4.1)์ ๊ตฌํ์ฒด๊ฐ ๋ง์ ์์ ์ํ๋ฅผ ํ ๋นํ๊ฒ ๋ง๋ค ์ ์์ต๋๋ค. ๋ผ์ฐํ ์ ์ค์ํ ํค๋ ํ๋๊ฐ ํค๋ ์น์ ๋๋ถ๋ถ์ ๋ํ๋ ์ ์์ด ํค๋ ์น์ ์ ์ต์ข ๋ชฉ์ ์ง๋ก ์คํธ๋ฆฌ๋ฐํ๋ ๊ฒ์ ๋ฐฉํดํ ์ ์์ต๋๋ค. ์ด๋ฌํ ์์์ ์บ์ ์ ํ์ฑ ๋ณด์ฅ๊ณผ ๊ฐ์ ๋ค๋ฅธ ์ด์ ๋ก ์ธํด ์๋ํฌ์ธํธ๋ ์ ์ฒด ํค๋ ์น์ ์ ๋ฒํผ๋งํด์ผ ํ ๊ฐ๋ฅ์ฑ์ด ํฝ๋๋ค. ํ๋ ์น์ ์ ํฌ๊ธฐ์ ๋ํ ํ๋ ์ ํ์ด ์์ผ๋ฏ๋ก ์ผ๋ถ ์๋ํฌ์ธํธ๋ ํค๋ ํ๋๋ฅผ ์ํด ์ฌ์ฉํ ์ ์๋ ๋ง์ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ํ ๋นํด์ผ ํ ์ ์์ต๋๋ค.
์๋ํฌ์ธํธ๋ SETTINGS_MAX_FIELD_SECTION_SIZE (์น์ 4.2.2) ์ค์ ์ ์ฌ์ฉํ์ฌ ํผ์ด์๊ฒ ํ๋ ์น์ ํฌ๊ธฐ์ ์ ์ฉ๋ ์ ์๋ ์ ํ์ ์๋ฆด ์ ์์ต๋๋ค. ์ด ์ค์ ์ ๊ถ๊ณ ์ ์ด๋ฏ๋ก ์๋ํฌ์ธํธ๋ ์ด ์ ํ์ ์ด๊ณผํ๋ ํ๋ ์น์ ์ ๋ณด๋ผ ์ ์์ผ๋ฉฐ, ๊ทธ ๊ฒฝ์ฐ ์์ฒญ ๋๋ ์๋ต์ด ํ์์ด ์๋ชป๋ ๊ฒ์ผ๋ก ์ฒ๋ฆฌ๋ ์ํ์ ๊ฐ์ํ ์ ์์ต๋๋ค. ์ด ์ค์ ์ HTTP/3 ์ฐ๊ฒฐ์ ํน์ ํ๋ฏ๋ก, ์ด๋ค ์์ฒญ์ด๋ ์๋ต์ด ๋ ๋ฎ์, ์๋ ค์ง์ง ์์ ์ ํ์ ๊ฐ์ง ํ์ ๋ง๋ ์ ์์ต๋๋ค. ์ค๊ฐ์๋ ์๋ก ๋ค๋ฅธ ํผ์ด๊ฐ ์ ์ํ ๊ฐ์ ์ ๋ฌํ์ฌ ์ด ๋ฌธ์ ๋ฅผ ํผํ๋ ค ํ ์ ์์ง๋ง, ๊ทธ๋ ๊ฒ ํ ์๋ฌด๋ ์์ต๋๋ค.
์๋ฒ๊ฐ ์์ ์ด ์ฒ๋ฆฌํ ์ ์๋ ๊ฒ๋ณด๋ค ํฐ ํ๋ ์น์ ์ ์์ ํ๋ฉด HTTP 431 (Request Header Fields Too Large) ์ํ ์ฝ๋๋ฅผ ๋ณด๋ผ ์ ์์ต๋๋ค([RFC6585]). ํด๋ผ์ด์ธํธ๋ ์ฒ๋ฆฌํ ์ ์๋ ์๋ต์ ํ๊ธฐํ ์ ์์ต๋๋ค.
10.5.2. CONNECT ๊ด๋ จ ๋ฌธ์
CONNECT ๋ฉ์๋๋ ํ๋ก์์์ ๋ถ๊ท ํํ ๋ถํ๋ฅผ ์์ฑํ ์ ์์ต๋๋ค. ์คํธ๋ฆผ ์์ฑ์ TCP ์ฐ๊ฒฐ ์์ฑ ๋ฐ ์ ์ง์ ๋นํด ์๋์ ์ผ๋ก ์ ๋ ดํ๊ธฐ ๋๋ฌธ์ ๋๋ค. ๋ฐ๋ผ์ CONNECT๋ฅผ ์ง์ํ๋ ํ๋ก์๋ ๋์ ์์ฒญ ์์ ๋ํด ๋ณด๋ค ๋ณด์์ ์ผ ์ ์์ต๋๋ค.
ํ๋ก์๋ ๋ํ CONNECT ์์ฒญ์ ์ด๋ฐํ ์คํธ๋ฆผ์ด ๋ซํ ์ดํ์๋ TCP ์ฐ๊ฒฐ์ ๋ํ ์ผ๋ถ ์์์ ์ ์งํ ์ ์์ต๋๋ค. ์ด๋ ๋ฐ์ TCP ์ฐ๊ฒฐ์ด TIME_WAIT ์ํ์ ๋จ์์๊ธฐ ๋๋ฌธ์ ๋๋ค. ์ด๋ฅผ ๊ณ ๋ คํ์ฌ ํ๋ก์๋ TCP ์ฐ๊ฒฐ์ด ์ข ๋ฃ๋ ์งํ QUIC ์คํธ๋ฆผ ํ๋๋ฅผ ์ฆ๊ฐ์ํค๋ ๊ฒ์ ์ง์ฐํ ์ ์์ต๋๋ค.
10.6. ์์ถ ์ฌ์ฉ
์์ถ์ ๊ณต๊ฒฉ์๊ฐ ๋์ผํ ์ปจํ ์คํธ์์ ๊ณต๊ฒฉ์๊ฐ ์ ์ดํ๋ ๋ฐ์ดํฐ์ ํจ๊ป ์์ถ๋ ๋น๋ฐ ๋ฐ์ดํฐ๋ฅผ ํ๋ณตํ๊ฒ ํ ์ ์์ต๋๋ค. HTTP/3๋ ํ๋์ ์์ถ์ ํ์ฉํฉ๋๋ค(์น์ 4.2); ๋ค์ ์ฐ๋ ค์ฌํญ์ HTTP ์์ถ๋ ์ฝํ ์ธ ์ธ์ฝ๋ฉ์ ์ฌ์ฉ์๋ ์ ์ฉ๋ฉ๋๋ค; ์์ธํ ๋ด์ฉ์ RFC 9110 ์น์ 8.4.1์ ์ฐธ์กฐํ์ญ์์ค.
์น์ ํน์ฑ์ ์ ์ฉํ๋ ์์ถ ๊ณต๊ฒฉ์ด ์ ์ฆ๋์ด ์์ต๋๋ค(์: [BREACH]). ๊ณต๊ฒฉ์๋ ๋ค์ํ ํ๋ฌธ์ ํฌํจํ๋ ์ฌ๋ฌ ์์ฒญ์ ์ ๋ํ๊ณ , ๊ทธ ๊ฒฐ๊ณผ ์ํธ๋ฌธ ๊ธธ์ด๋ฅผ ๊ด์ฐฐํ์ฌ ๋น๋ฐ์ ๋ํ ์ถ์ธก์ด ๋ง์ ๋ ๋ ์งง์ ๊ธธ์ด๋ฅผ ๋๋ฌ๋ด๋ ๋ฐฉ์์ผ๋ก ์ ๋ณด๋ฅผ ์ป์ต๋๋ค.
๋ณด์ ์ฑ๋์์ ํต์ ํ๋ ๊ตฌํ์ฒด๋ ๊ธฐ๋ฐ ๋ฐ์ดํฐ์ ๊ณต๊ฒฉ์๊ฐ ์ ์ดํ๋ ๋ฐ์ดํฐ๋ฅผ ๋์ผํ ์ปจํ ์คํธ์์ ํฌํจํ๋ ์ฝํ ์ธ ๋ฅผ ๋ณ๋์ ์์ถ ์ปจํ ์คํธ๋ฅผ ์ฌ์ฉํ์ง ์๋ ํ ์์ถํด์๋ ์ ๋ฉ๋๋ค(MUST NOT). ๋ฐ์ดํฐ์ ์ถ์ฒ๋ฅผ ์ ๋ขฐํ ์ ์์ผ๋ฉด ์์ถ์ ์ฌ์ฉํด์๋ ์ ๋ฉ๋๋ค(MUST NOT).
ํ๋ ์น์ ์ ์์ถ์ ๊ดํ ์ถ๊ฐ ๊ณ ๋ ค์ฌํญ์ [QPACK]์ ์ค๋ช ๋์ด ์์ต๋๋ค.
10.7. ํจ๋ฉ ๋ฐ ํธ๋ํฝ ๋ถ์
ํจ๋ฉ์ ํ๋ ์ ์ฝํ ์ธ ์ ์ ํํ ํฌ๊ธฐ๋ฅผ ํ๋ฆฌ๊ฒ ํ๋ ๋ฐ ์ฌ์ฉ๋ ์ ์์ผ๋ฉฐ, ์๋ฅผ ๋ค์ด ์์ถ๋ ์ฝํ ์ธ ์ ๊ณต๊ฒฉ์๊ฐ ์ ์ดํ๋ ํ๋ฌธ๊ณผ ๋น๋ฐ ๋ฐ์ดํฐ๊ฐ ๋ชจ๋ ํฌํจ๋ ๊ฒฝ์ฐ์ ๊ฐ์ ํน์ ๊ณต๊ฒฉ์ ์ํํ๊ธฐ ์ํด ์ ๊ณต๋ฉ๋๋ค(์: [BREACH]).
HTTP/2๊ฐ PADDING ํ๋ ์๊ณผ ๋ค๋ฅธ ํ๋ ์์ Padding ํ๋๋ฅผ ์ฌ์ฉํ์ฌ ํธ๋ํฝ ๋ถ์์ ๋ํ ์ ํญ์ฑ์ ๋์ด๋ ๊ฒ๊ณผ ๋ฌ๋ฆฌ, HTTP/3๋ ์ ์ก ๊ณ์ธต ํจ๋ฉ์ ์์กดํ๊ฑฐ๋ ์น์ 7.2.8 ๋ฐ ์น์ 6.2.3์์ ๋ ผ์๋ ์์ฝ๋ ํ๋ ์ ๋ฐ ์คํธ๋ฆผ ์ ํ์ ์ฌ์ฉํ ์ ์์ต๋๋ค. ์ด๋ฌํ ํจ๋ฉ ๋ฐฉ๋ฒ๋ค์ ํจ๋ฉ์ ์ธ๋ถ์ฑ, ๋ณดํธ๋๋ ์ ๋ณด์์ ๊ด๊ณ์์ ํจ๋ฉ์ด ์ด๋ป๊ฒ ๋ฐฐ์น๋๋์ง, ํจํท ์์ค์ ๊ฒฝ์ฐ์ ํจ๋ฉ์ด ์ ์ฉ๋๋์ง ์ฌ๋ถ, ๊ทธ๋ฆฌ๊ณ ๊ตฌํ์ฒด๊ฐ ํจ๋ฉ์ ์ด๋ป๊ฒ ์ ์ดํ ์ ์๋์ง์ ๋ฐ๋ผ ์๋ก ๋ค๋ฅธ ๊ฒฐ๊ณผ๋ฅผ ์์ฑํฉ๋๋ค.
์์ฝ๋ ์คํธ๋ฆผ ์ ํ์ ์ฐ๊ฒฐ์ด ์ ํด ์ํ์ผ ๋์๋ ํธ๋ํฝ์ ์ ์กํ๋ ๊ฒ์ฒ๋ผ ๋ณด์ด๊ฒ ํ๋ ๋ฐ ์ฌ์ฉ๋ ์ ์์ต๋๋ค. HTTP ํธ๋ํฝ์ ์ข ์ข ๋ฒ์คํธ๋ก ๋ฐ์ํ๋ฏ๋ก, ๊ฒ๋ณด๊ธฐ ํธ๋ํฝ์ ์ด๋ฌํ ๋ฒ์คํธ์ ํ์ด๋ฐ์ด๋ ์ง์ ์๊ฐ์ ํ๋ฆฌ๊ฒ ํ๋ ๋ฐ ์ฌ์ฉ๋ ์ ์์ผ๋ฉฐ, ์ฌ์ง์ด ์ผ์ ํ ๋ฐ์ดํฐ ์คํธ๋ฆผ์ ์ ์กํ๋ ๊ฒ์ฒ๋ผ ๋ณด์ด๊ฒ ํ ์๋ ์์ต๋๋ค. ๊ทธ๋ฌ๋ ์ด๋ฌํ ํธ๋ํฝ์ ์ฌ์ ํ ์์ ์์ ์ํด ํ๋ฆ ์ ์ด๋๋ฏ๋ก, ํด๋น ์คํธ๋ฆผ์ ์ ์ํ ๋น์ ์ถ๊ฐ ํ๋ฆ ์ ์ด ํฌ๋ ๋ง์ ์ ๊ณตํ์ง ๋ชปํ๋ฉด ๋ฐ์ ์์ ์ค์ ํธ๋ํฝ ์ ์ก ๋ฅ๋ ฅ์ด ์ ํ๋ ์ ์์ต๋๋ค.
์์ถ์ ์์กดํ๋ ๊ณต๊ฒฉ์ ์ํํ๊ธฐ ์ํด์๋ ํจ๋ฉ๋ณด๋ค ์์ถ์ ๋นํ์ฑํํ๊ฑฐ๋ ์ ํํ๋ ๊ฒ์ด ๋ฐ๋์งํ ์ ์์ต๋๋ค.
ํจ๋ฉ ์ฌ์ฉ์ ์ฆ์ ๋ช ๋ฐฑํด ๋ณด์ด๋ ๊ฒ๋ณด๋ค ๋ ํจ๊ณผ์ ์ผ ์ ์์ต๋๋ค. ์ค๋ณต๋ ํจ๋ฉ์ ์คํ๋ ค ์ญํจ๊ณผ๋ฅผ ๋ณ์ ์ ์์ต๋๋ค. ์ต์ ์ ๊ฒฝ์ฐ ํจ๋ฉ์ ๊ณต๊ฒฉ์๊ฐ ๊ด์ฐฐํด์ผ ํ๋ ํ๋ ์ ์๋ฅผ ๋๋ ค ๊ธธ์ด ์ ๋ณด๋ฅผ ์ถ๋ก ํ๊ธฐ ์ด๋ ต๊ฒ ๋ง๋ค ๋ฟ์ ๋๋ค. ์๋ชป ๊ตฌํ๋ ํจ๋ฉ ์คํด์ ์ฝ๊ฒ ๋ฌด๋ ฅํ๋ ์ ์์ต๋๋ค. ํนํ ์์ธก ๊ฐ๋ฅํ ๋ถํฌ๋ฅผ ๊ฐ์ง ๋ฌด์์ ํจ๋ฉ์ ๊ฑฐ์ ๋ณดํธ ํจ๊ณผ๋ฅผ ์ ๊ณตํ์ง ์์ผ๋ฉฐ, ๊ณ ์ ํฌ๊ธฐ๋ก ํ์ด๋ก๋๋ฅผ ํจ๋ฉํ๋ฉด ํ์ด๋ก๋ ํฌ๊ธฐ๊ฐ ๊ณ ์ ๊ฒฝ๊ณ๋ฅผ ๋์ ๋ ์ ๋ณด๋ฅผ ๋ ธ์ถํ ์ ์์ต๋๋ค. ์ด๋ ๊ณต๊ฒฉ์๊ฐ ํ๋ฌธ์ ์ ์ดํ ์ ์๋ ๊ฒฝ์ฐ ๊ฐ๋ฅํ ์ ์์ต๋๋ค.
10.8. ํ๋ ์ ํ์ฑ
์ฌ๋ฌ ํ๋กํ ์ฝ ์์๋ ์ผ๋ฐ์ ์ผ๋ก ๊ฐ๋ณ ๊ธธ์ด ์ ์๋ฅผ ํฌํจํ๋ ๋ช ์์ ๊ธธ์ด๋ฅผ ๊ฐ์ง ํ๋ ์ ํํ๋ก ์ค์ฒฉ๋ ๊ธธ์ด ์์๋ฅผ ํฌํจํฉ๋๋ค. ์ด๋ ๋ถ์ฃผ์ํ ๊ตฌํ์์๊ฒ ๋ณด์ ์ํ์ ์ด๋ํ ์ ์์ต๋๋ค. ๊ตฌํ์ฒด๋ ํ๋ ์์ ๊ธธ์ด๊ฐ ๊ทธ ์์ ํฌํจ๋ ํ๋๋ค์ ๊ธธ์ด์ ์ ํํ ์ผ์นํ๋์ง ํ์ธํด์ผ ํฉ๋๋ค(MUST).
10.9. ์กฐ๊ธฐ ๋ฐ์ดํฐ
HTTP/3์์ 0-RTT ์ฌ์ฉ์ ์ฌ์ ์ก(replay) ๊ณต๊ฒฉ์ ๋ ธ์ถ๋ ์ ์์ต๋๋ค. 0-RTT๋ฅผ ์ฌ์ฉํ ๋๋ [HTTP-REPLAY]์ ์ฌ์ ์ก ๋ฐฉ์ง ์ํ์ฑ ์ ์ ์ฉํด์ผ ํฉ๋๋ค(MUST). HTTP/3์ [HTTP-REPLAY]๋ฅผ ์ ์ฉํ ๋, TLS ๊ณ์ธต์ ๋ํ ์ฐธ์กฐ๋ QUIC ๋ด์์ ์ํ๋๋ ํธ๋์ ฐ์ดํฌ๋ฅผ ๊ฐ๋ฆฌํค๊ณ , ์ ํ๋ฆฌ์ผ์ด์ ๋ฐ์ดํฐ์ ๋ํ ๋ชจ๋ ์ฐธ์กฐ๋ ์คํธ๋ฆผ์ ๋ด์ฉ์ ๊ฐ๋ฆฌํต๋๋ค.
10.10. ๋ง์ด๊ทธ๋ ์ด์
์ผ๋ถ HTTP ๊ตฌํ์ฒด๋ ๋ก๊น ์ด๋ ์ ๊ทผ ์ ์ด ๋ชฉ์ ์ผ๋ก ํด๋ผ์ด์ธํธ ์ฃผ์๋ฅผ ์ฌ์ฉํฉ๋๋ค. QUIC ํด๋ผ์ด์ธํธ์ ์ฃผ์๋ ์ฐ๊ฒฐ ์ค์ ๋ณ๊ฒฝ๋ ์ ์์ผ๋ฏ๋ก(ํฅํ ๋ฒ์ ์์ ์ฌ๋ฌ ์ฃผ์์ ๋์ ์ฌ์ฉ์ ์ง์ํ ์ ์์), ์ด๋ฌํ ๊ตฌํ์ฒด๋ ๊ด๋ จ ์์ ์ ํด๋ผ์ด์ธํธ์ ํ์ฌ ์ฃผ์๋ฅผ ์ ๊ทน์ ์ผ๋ก ๊ฒ์ํ๊ฑฐ๋ ์๋ ์ฃผ์๊ฐ ๋ณ๊ฒฝ๋ ์ ์์์ ๋ช ์์ ์ผ๋ก ์์ฉํด์ผ ํฉ๋๋ค.
10.11. ํ๋ผ์ด๋ฒ์ ๊ณ ๋ ค์ฌํญ
HTTP/3์ ๋ช ๊ฐ์ง ํน์ฑ์ ๊ด์ฐฐ์์๊ฒ ์๊ฐ ๊ฒฝ๊ณผ์ ๋ฐ๋ฅธ ๋จ์ผ ํด๋ผ์ด์ธํธ ๋๋ ์๋ฒ์ ๋์์ ์ฐ๊ด์ํฌ ๊ธฐํ๋ฅผ ์ ๊ณตํฉ๋๋ค. ์ฌ๊ธฐ์๋ ์ค์ ๊ฐ, ์๊ทน์ ๋ํ ๋ฐ์์ ํ์ด๋ฐ, ์ค์ ์ผ๋ก ์ ์ด๋๋ ๊ธฐ๋ฅ์ ์ฒ๋ฆฌ ๋ฐฉ์ ๋ฑ์ด ํฌํจ๋ฉ๋๋ค.
์ด๋ฌํ ๊ฒ๋ค์ด ๋์์์ ๊ด์ฐฐ ๊ฐ๋ฅํ ์ฐจ์ด๋ฅผ ๋ง๋ค์ด๋ผ ๊ฒฝ์ฐ, ํน์ ํด๋ผ์ด์ธํธ๋ฅผ ์ง๋ฌธํ(fingerprinting)ํ๋ ๊ทผ๊ฑฐ๋ก ์ฌ์ฉ๋ ์ ์์ต๋๋ค.
HTTP/3๊ฐ ๋จ์ผ QUIC ์ฐ๊ฒฐ ์ฌ์ฉ์ ์ ํธํ๋ฉด ์ฌ์ดํธ์์ ์ฌ์ฉ์์ ํ๋์ ์ฐ๊ด์ํค๊ธฐ ์ฝ์ต๋๋ค. ์๋ก ๋ค๋ฅธ ์ค๋ฆฌ์ง์ ๋ํด ์ฐ๊ฒฐ์ ์ฌ์ฌ์ฉํ๋ฉด ๊ทธ ์ค๋ฆฌ์ง๋ค ๊ฐ์ ํ๋์ ์ฐ๊ด์ํฌ ์ ์์ต๋๋ค.
QUIC์ ๋ช๋ช ๊ธฐ๋ฅ์ ์ฆ๊ฐ์ ์ธ ์๋ต์ ์๊ตฌํ๋ฉฐ, ์๋ํฌ์ธํธ๊ฐ ํผ์ด์ ๋ํ ์ง์ฐ์ ์ธก์ ํ๋ ๋ฐ ์ฌ์ฉํ ์ ์์ต๋๋ค. ์ด๋ ํน์ ์๋๋ฆฌ์ค์์ ํ๋ผ์ด๋ฒ์์ ์ํฅ์ ๋ฏธ์น ์ ์์ต๋๋ค.
11. IANA ๊ณ ๋ ค์ฌํญ
์ด ๋ฌธ์๋ ์๋ก์ด ALPN ํ๋กํ ์ฝ ์๋ณ์ ๋ฑ๋ก(์น์ 11.1)์ ์ํํ๊ณ HTTP/3์์ ์ฝ๋ ํฌ์ธํธ ํ ๋น์ ๊ด๋ฆฌํ๋ ์๋ก์ด ๋ ์ง์คํธ๋ฆฌ๋ค์ ์์ฑํฉ๋๋ค.
11.1. HTTP/3 ์๋ณ ๋ฌธ์์ด ๋ฑ๋ก
์ด ๋ฌธ์๋ "TLS Application-Layer Protocol Negotiation (ALPN) Protocol IDs" ๋ ์ง์คํธ๋ฆฌ์ HTTP/3๋ฅผ ์๋ณํ๊ธฐ ์ํ ์๋ก์ด ๋ฑ๋ก์ ์์ฑํฉ๋๋ค. ์ด ๋ ์ง์คํธ๋ฆฌ๋ [RFC7301]์์ ํ๋ฆฝ๋์์ต๋๋ค.
"h3" ๋ฌธ์์ด์ด HTTP/3๋ฅผ ์๋ณํฉ๋๋ค:
- Protocol:
-
HTTP/3
- Identification Sequence:
-
0x68 0x33 ("h3")
- Specification:
-
์ด ๋ฌธ์
11.2. ์ ๋ ์ง์คํธ๋ฆฌ
์ด ๋ฌธ์์์ ์์ฑ๋ ์๋ก์ด ๋ ์ง์คํธ๋ฆฌ๋ค์ RFC 9000 ์น์ 22.1์ ๋ฌธ์ํ๋ QUIC ๋ฑ๋ก ์ ์ฑ ์ ๋ฐ๋ผ ์ด์๋ฉ๋๋ค. ์ด๋ฌํ ๋ ์ง์คํธ๋ฆฌ๋ ๋ชจ๋ RFC 9000 ์น์ 22.1.1์ ๋์ด๋ ๊ณตํต ํ๋ ์งํฉ์ ํฌํจํฉ๋๋ค. ์ด๋ค ๋ ์ง์คํธ๋ฆฌ๋ "Hypertext Transfer Protocol version 3 (HTTP/3)" ํญ๋ชฉ ์๋์ ์์ง๋ฉ๋๋ค.
์ด๋ค ๋ ์ง์คํธ๋ฆฌ์ ๋ํ ์ด๊ธฐ ํ ๋น์ ๋ชจ๋ ์๊ตฌ ์ํ๋ก ์ง์ ๋๋ฉฐ IETF๊ฐ ๋ณ๊ฒฝ ์ ์ด์(change controller)๋ก, HTTP ์์ ๊ทธ๋ฃน(ietf-http-wg@w3.org)์ด ์ฐ๋ฝ์ฒ๋ก ๊ธฐ์ฌ๋ฉ๋๋ค.
11.2.1. ํ๋ ์ ์ ํ
์ด ๋ฌธ์๋ HTTP/3 ํ๋ ์ ํ์ ์ฝ๋์ ๋ํ ๋ ์ง์คํธ๋ฆฌ๋ฅผ ์ค์ ํฉ๋๋ค. "HTTP/3 Frame Types" ๋ ์ง์คํธ๋ฆฌ๋ 62๋นํธ ๊ณต๊ฐ์ ๊ด๋ฆฌํฉ๋๋ค. ์ด ๋ ์ง์คํธ๋ฆฌ๋ QUIC ๋ ์ง์คํธ๋ฆฌ ์ ์ฑ ์ ๋ฐ๋ฆ ๋๋ค; ์์ธํ ๋ด์ฉ์ ์น์ 11.2๋ฅผ ์ฐธ์กฐํ์ญ์์ค. ์ด ๋ ์ง์คํธ๋ฆฌ์ ์๊ตฌ ๋ฑ๋ก์ Specification Required ์ ์ฑ ์ ๋ฐ๋ผ ํ ๋น๋ฉ๋๋ค([RFC8126]), ๋ค๋ง 16์ง์๋ก 0x00์์ 0x3f(ํฌํจ) ์ฌ์ด์ ๊ฐ์ ์น์ 4.9 ๋ฐ ์น์ 4.10์ ์ ์๋ ๋๋ก Standards Action ๋๋ IESG ์น์ธ์ผ๋ก ํ ๋น๋ฉ๋๋ค.
์ด ๋ ์ง์คํธ๋ฆฌ๋ [HTTP/2]์ ์ ์๋ "HTTP/2 Frame Type" ๋ ์ง์คํธ๋ฆฌ์๋ ๋ณ๊ฐ์ด์ง๋ง, ์ฝ๋ ๊ณต๊ฐ์ด ๊ฒน์น๋ ๊ฒฝ์ฐ ํ ๋น์ด ์๋ก ๋ณํ๋๋๋ก ํ๋ ๊ฒ์ด ๋ฐ๋์งํฉ๋๋ค. ํ ๋ ์ง์คํธ๋ฆฌ์ ํญ๋ชฉ์ด๋ง ์กด์ฌํ๋ ๊ฒฝ์ฐ, ๋์ ๊ฐ์ด ๊ด๋ จ ์๋ ๋์์ ํ ๋น๋์ง ์๋๋ก ๊ฐ๋ฅํ ๋ชจ๋ ๋ ธ๋ ฅ์ ๊ธฐ์ธ์ฌ์ผ ํฉ๋๋ค(SHOULD). ์ ๋ฌธ๊ฐ ๊ฒํ ์๋ ํด๋น ๊ฐ์ด ๋์ ๋ ์ง์คํธ๋ฆฌ์ ๋์ผ ๊ฐ๊ณผ ์ถฉ๋ํ๋ ๊ฒฝ์ฐ ๊ด๋ จ ์๋ ๋ฑ๋ก์ ๊ฑฐ๋ถํ ์ ์์ต๋๋ค(MAY).
์น์ 11.2์ ์ค๋ช ๋ ๊ณตํต ํ๋ ์ธ์๋, ์ด ๋ ์ง์คํธ๋ฆฌ์ ์๊ตฌ ๋ฑ๋ก์ ๋ค์ ํ๋๋ฅผ ๋ฐ๋์ ํฌํจํด์ผ ํฉ๋๋ค(MUST):
- Frame Type:
-
ํ๋ ์ ์ ํ์ ์ด๋ฆ ๋๋ ๋ ์ด๋ธ.
ํ๋ ์ ์ ํ์ ๋ช ์ธ๋ ํ๋ ์ ๋ ์ด์์๊ณผ ์๋ฏธ(์กฐ๊ฑด๋ถ๋ก ์กด์ฌํ๋ ํ๋ ์ ๋ถ๋ถ์ ํฌํจ)๋ฅผ ๋ฐ๋์ ํฌํจํด์ผ ํฉ๋๋ค(MUST).
ํ 2์ ํญ๋ชฉ๋ค์ ์ด ๋ฌธ์์ ์ํด ๋ฑ๋ก๋ฉ๋๋ค.
| ํ๋ ์ ์ ํ | ๊ฐ | ๋ช ์ธ |
|---|---|---|
| DATA | 0x00 | ์น์ 7.2.1 |
| HEADERS | 0x01 | ์น์ 7.2.2 |
| Reserved | 0x02 | ์ด ๋ฌธ์ |
| CANCEL_PUSH | 0x03 | ์น์ 7.2.3 |
| SETTINGS | 0x04 | ์น์ 7.2.4 |
| PUSH_PROMISE | 0x05 | ์น์ 7.2.5 |
| Reserved | 0x06 | ์ด ๋ฌธ์ |
| GOAWAY | 0x07 | ์น์ 7.2.6 |
| Reserved | 0x08 | ์ด ๋ฌธ์ |
| Reserved | 0x09 | ์ด ๋ฌธ์ |
| MAX_PUSH_ID | 0x0d | ์น์ 7.2.7 |
๋น์์ ์ ์ N์ ๋ํด ํ์ 0x1f * N + 0x21์ธ ๊ฐ ์ฝ๋๋(IANA์ ์ํด) ํ ๋น๋์ด์๋ ์ ๋๋ฉฐ(MUST NOT) ํ ๋น ๊ฐ ๋ชฉ๋ก์ ๋ํ๋์๋ ์ ๋ฉ๋๋ค.
11.2.2. ์ค์ ๋งค๊ฐ๋ณ์
์ด ๋ฌธ์๋ HTTP/3 ์ค์ ์ ์ํ ๋ ์ง์คํธ๋ฆฌ๋ฅผ ์ค์ ํฉ๋๋ค. "HTTP/3 Settings" ๋ ์ง์คํธ๋ฆฌ๋ 62๋นํธ ๊ณต๊ฐ์ ๊ด๋ฆฌํฉ๋๋ค. ์ด ๋ ์ง์คํธ๋ฆฌ๋ QUIC ๋ ์ง์คํธ๋ฆฌ ์ ์ฑ ์ ๋ฐ๋ฆ ๋๋ค; ์น์ 11.2๋ฅผ ์ฐธ์กฐํ์ญ์์ค. ์ด ๋ ์ง์คํธ๋ฆฌ์ ์๊ตฌ ๋ฑ๋ก์ Specification Required ์ ์ฑ ์ ๋ฐ๋ผ ํ ๋น๋ฉ๋๋ค([RFC8126]), ๋ค๋ง 16์ง์๋ก 0x00์์ 0x3f(ํฌํจ) ์ฌ์ด์ ๊ฐ์ Standards Action ๋๋ IESG ์น์ธ์ผ๋ก ํ ๋น๋ฉ๋๋ค.
์ด ๋ ์ง์คํธ๋ฆฌ๋ [HTTP/2]์ ์ ์๋ "HTTP/2 Settings" ๋ ์ง์คํธ๋ฆฌ์๋ ๋ณ๊ฐ์ด์ง๋ง, ๊ฐ๋ฅํ ๊ฒฝ์ฐ ํ ๋น์ด ์๋ก ๋ณํ๋๋๋ก ํ๋ ๊ฒ์ด ๋ฐ๋์งํฉ๋๋ค. ํ ๋ ์ง์คํธ๋ฆฌ์๋ง ํญ๋ชฉ์ด ์๋ ๊ฒฝ์ฐ์๋ ํด๋น ๊ฐ์ด ๊ด๋ จ ์๋ ๋์์ ํ ๋น๋์ง ์๋๋ก ๊ฐ๋ฅํ ๋ชจ๋ ๋ ธ๋ ฅ์ ๊ธฐ์ธ์ฌ์ผ ํฉ๋๋ค(SHOULD). ์ ๋ฌธ๊ฐ ๊ฒํ ์๋ ๋์ผ ๊ฐ๊ณผ ์ถฉ๋ํ๋ ๊ด๋ จ ์๋ ๋ฑ๋ก์ ๊ฑฐ๋ถํ ์ ์์ต๋๋ค(MAY).
์น์ 11.2์ ์ค๋ช ๋ ๊ณตํต ํ๋ ์ธ์๋, ์ด ๋ ์ง์คํธ๋ฆฌ์ ์๊ตฌ ๋ฑ๋ก์ ๋ค์ ํ๋๋ฅผ ๋ฐ๋์ ํฌํจํด์ผ ํฉ๋๋ค(MUST):
- Setting Name:
-
์ค์ ์ ์์ง์ ์ด๋ฆ. ์ค์ ์ด๋ฆ ์ง์ ์ ์ ํ ์ฌํญ์ ๋๋ค.
- Default:
-
๋ช ์๋์ง ์์ ๊ฒฝ์ฐ ์ค์ ์ ๊ฐ. ๊ธฐ๋ณธ๊ฐ์ ๊ฐ๋ฅํ ํ ๊ฐ์ฅ ์ ํ์ ์ธ ๊ฐ์ด์ด์ผ ํฉ๋๋ค(SHOULD).
ํ 3์ ํญ๋ชฉ๋ค์ ์ด ๋ฌธ์์ ์ํด ๋ฑ๋ก๋ฉ๋๋ค.
| ์ค์ ์ด๋ฆ | ๊ฐ | ๋ช ์ธ | ๊ธฐ๋ณธ๊ฐ |
|---|---|---|---|
| Reserved | 0x00 | ์ด ๋ฌธ์ | ํด๋น ์์ |
| Reserved | 0x02 | ์ด ๋ฌธ์ | ํด๋น ์์ |
| Reserved | 0x03 | ์ด ๋ฌธ์ | ํด๋น ์์ |
| Reserved | 0x04 | ์ด ๋ฌธ์ | ํด๋น ์์ |
| Reserved | 0x05 | ์ด ๋ฌธ์ | ํด๋น ์์ |
| MAX_FIELD_SECTION_SIZE | 0x06 | ์น์ 7.2.4.1 | ๋ฌด์ ํ |
ํ์์์ ์ด์ ๋ก, ์ค์ ์ด๋ฆ์ 'SETTINGS_' ์ ๋์ฌ๋ฅผ ์ ๊ฑฐํ์ฌ ์ค์ฌ ์ธ ์ ์์ต๋๋ค.
๋น์์ ์ ์ N์ ๋ํด ํ์ 0x1f * N + 0x21์ธ ๊ฐ ์ฝ๋๋ IANA์ ์ํด ํ ๋น๋์ด์๋ ์ ๋๋ฉฐ(MUST NOT) ํ ๋น ๊ฐ ๋ชฉ๋ก์ ๋ํ๋์๋ ์ ๋ฉ๋๋ค.
11.2.3. ์ค๋ฅ ์ฝ๋
์ด ๋ฌธ์๋ HTTP/3 ์ค๋ฅ ์ฝ๋์ ๋ํ ๋ ์ง์คํธ๋ฆฌ๋ฅผ ์ค์ ํฉ๋๋ค. "HTTP/3 Error Codes" ๋ ์ง์คํธ๋ฆฌ๋ 62๋นํธ ๊ณต๊ฐ์ ๊ด๋ฆฌํฉ๋๋ค. ์ด ๋ ์ง์คํธ๋ฆฌ๋ QUIC ๋ ์ง์คํธ๋ฆฌ ์ ์ฑ ์ ๋ฐ๋ฆ ๋๋ค; ์น์ 11.2๋ฅผ ์ฐธ์กฐํ์ญ์์ค. ์ด ๋ ์ง์คํธ๋ฆฌ์ ์๊ตฌ ๋ฑ๋ก์ Specification Required ์ ์ฑ ์ ๋ฐ๋ผ ํ ๋น๋ฉ๋๋ค([RFC8126]), ๋ค๋ง 16์ง์๋ก 0x00์์ 0x3f(ํฌํจ) ์ฌ์ด์ ๊ฐ์ Standards Action ๋๋ IESG ์น์ธ์ผ๋ก ํ ๋น๋ฉ๋๋ค.
์ค๋ฅ ์ฝ๋ ๋ฑ๋ก์ ์ค๋ฅ ์ฝ๋์ ์ค๋ช ์ ํฌํจํด์ผ ํฉ๋๋ค. ์ ๋ฌธ๊ฐ ๋ฆฌ๋ทฐ์ด๋ ์๋ก์ด ๋ฑ๋ก์ด ๊ธฐ์กด ์ค๋ฅ ์ฝ๋์ ์ค๋ณต๋์ง ์๋์ง ๊ฒํ ํ ๊ฒ์ ๊ถ๊ณ ๋ฐ์ต๋๋ค. ๊ธฐ์กด ๋ฑ๋ก์ ์ฌ์ฉ์ ๊ถ์ฅํ์ง๋ง ์๋ฌดํํ์ง๋ ์์ต๋๋ค. "HTTP/2 Error Code" ๋ ์ง์คํธ๋ฆฌ์ ๋ฑ๋ก๋ ๊ฐ์ ์ฌ์ฉํ๋ ๊ฒ์ ๊ถ์ฅ๋์ง ์์ผ๋ฉฐ, ์ ๋ฌธ๊ฐ ๋ฆฌ๋ทฐ์ด๋ ๊ทธ๋ฌํ ๋ฑ๋ก์ ๊ฑฐ๋ถํ ์ ์์ต๋๋ค(MAY).
์น์ 11.2์ ์ค๋ช ๋ ๊ณตํต ํ๋ ์ธ์๋, ์ด ๋ ์ง์คํธ๋ฆฌ๋ ๋ ๊ฐ์ ์ถ๊ฐ ํ๋๋ฅผ ํฌํจํฉ๋๋ค. ์ด ๋ ์ง์คํธ๋ฆฌ์ ์๊ตฌ ๋ฑ๋ก์ ๋ค์ ํ๋๋ฅผ ๋ฐ๋์ ํฌํจํด์ผ ํฉ๋๋ค(MUST):
- Name:
-
์ค๋ฅ ์ฝ๋์ ์ด๋ฆ.
- Description:
-
์ค๋ฅ ์ฝ๋ ์๋ฏธ์ ๋ํ ๊ฐ๋จํ ์ค๋ช .
ํ 4์ ํญ๋ชฉ๋ค์ ์ด ๋ฌธ์์ ์ํด ๋ฑ๋ก๋ฉ๋๋ค. ์ด ์ค๋ฅ ์ฝ๋๋ค์ HTTP/2 ์ค๋ฅ ์ฝ๋์์ ์ถฉ๋์ ํผํ๊ธฐ ์ํด Specification Required ์ ์ฑ ๋ฒ์์์ ์ ํ๋์์ต๋๋ค.
| ์ด๋ฆ | ๊ฐ | ์ค๋ช | ๋ช ์ธ |
|---|---|---|---|
| H3_NO_ERROR | 0x0100 | ์ค๋ฅ ์์ | ์น์ 8.1 |
| H3_GENERAL_PROTOCOL_ERROR | 0x0101 | ์ผ๋ฐ ํ๋กํ ์ฝ ์ค๋ฅ | ์น์ 8.1 |
| H3_INTERNAL_ERROR | 0x0102 | ๋ด๋ถ ์ค๋ฅ | ์น์ 8.1 |
| H3_STREAM_CREATION_ERROR | 0x0103 | ์คํธ๋ฆผ ์์ฑ ์ค๋ฅ | ์น์ 8.1 |
| H3_CLOSED_CRITICAL_STREAM | 0x0104 | ํ์ ์คํธ๋ฆผ์ด ๋ซํ | ์น์ 8.1 |
| H3_FRAME_UNEXPECTED | 0x0105 | ํ์ฌ ์ํ์์ ํ์ฉ๋์ง ์๋ ํ๋ ์ | ์น์ 8.1 |
| H3_FRAME_ERROR | 0x0106 | ํ๋ ์์ด ๋ ์ด์์ ๋๋ ํฌ๊ธฐ ๊ท์น์ ์๋ฐํจ | ์น์ 8.1 |
| H3_EXCESSIVE_LOAD | 0x0107 | ํผ์ด๊ฐ ๊ณผ๋ํ ๋ถํ๋ฅผ ๋ฐ์์ํด | ์น์ 8.1 |
| H3_ID_ERROR | 0x0108 | ์๋ณ์๊ฐ ์๋ชป ์ฌ์ฉ๋จ | ์น์ 8.1 |
| H3_SETTINGS_ERROR | 0x0109 | SETTINGS ํ๋ ์์ ์ ํจํ์ง ์์ ๊ฐ์ด ํฌํจ๋จ | ์น์ 8.1 |
| H3_MISSING_SETTINGS | 0x010a | SETTINGS ํ๋ ์์ด ์์ ๋์ง ์์ | ์น์ 8.1 |
| H3_REQUEST_REJECTED | 0x010b | ์์ฒญ์ด ์ฒ๋ฆฌ๋์ง ์์ | ์น์ 8.1 |
| H3_REQUEST_CANCELLED | 0x010c | ๋ฐ์ดํฐ๊ฐ ๋ ์ด์ ํ์ํ์ง ์์ | ์น์ 8.1 |
| H3_REQUEST_INCOMPLETE | 0x010d | ์คํธ๋ฆผ์ด ์กฐ๊ธฐ์ ์ข ๋ฃ๋จ | ์น์ 8.1 |
| H3_MESSAGE_ERROR | 0x010e | ํ์์ด ์๋ชป๋ ๋ฉ์์ง | ์น์ 8.1 |
| H3_CONNECT_ERROR | 0x010f | CONNECT ์์ฒญ์์์ TCP ๋ฆฌ์ ๋๋ ์ค๋ฅ | ์น์ 8.1 |
| H3_VERSION_FALLBACK | 0x0110 | HTTP/1.1๋ก ์ฌ์๋ | ์น์ 8.1 |
๋น์์ ์ ์ N์ ๋ํด ํ์ 0x1f * N + 0x21์ธ ๊ฐ ์ฝ๋๋ IANA์ ์ํด ํ ๋น๋์ด์๋ ์ ๋๋ฉฐ(MUST NOT) ํ ๋น ๊ฐ ๋ชฉ๋ก์ ๋ํ๋์๋ ์ ๋ฉ๋๋ค.
11.2.4. ์คํธ๋ฆผ ์ ํ
์ด ๋ฌธ์๋ HTTP/3 ๋จ๋ฐฉํฅ ์คํธ๋ฆผ ์ ํ์ ๋ํ ๋ ์ง์คํธ๋ฆฌ๋ฅผ ์ค์ ํฉ๋๋ค. "HTTP/3 Stream Types" ๋ ์ง์คํธ๋ฆฌ๋ 62๋นํธ ๊ณต๊ฐ์ ๊ด๋ฆฌํฉ๋๋ค. ์ด ๋ ์ง์คํธ๋ฆฌ๋ QUIC ๋ ์ง์คํธ๋ฆฌ ์ ์ฑ ์ ๋ฐ๋ฆ ๋๋ค; ์น์ 11.2๋ฅผ ์ฐธ์กฐํ์ญ์์ค. ์ด ๋ ์ง์คํธ๋ฆฌ์ ์๊ตฌ ๋ฑ๋ก์ Specification Required ์ ์ฑ ์ ๋ฐ๋ผ ํ ๋น๋ฉ๋๋ค([RFC8126]), ๋ค๋ง 16์ง์๋ก 0x00์์ 0x3f(ํฌํจ) ์ฌ์ด์ ๊ฐ์ Standards Action ๋๋ IESG ์น์ธ์ผ๋ก ํ ๋น๋ฉ๋๋ค.
์น์ 11.2์ ์ค๋ช ๋ ๊ณตํต ํ๋ ์ธ์๋, ์ด ๋ ์ง์คํธ๋ฆฌ์ ์๊ตฌ ๋ฑ๋ก์ ๋ค์ ํ๋๋ฅผ ๋ฐ๋์ ํฌํจํด์ผ ํฉ๋๋ค(MUST):
- Stream Type:
-
์คํธ๋ฆผ ์ ํ์ ์ด๋ฆ ๋๋ ๋ ์ด๋ธ.
- Sender:
-
์ด ์คํธ๋ฆผ ์ ํ์ ์์ํ ์ ์๋ HTTP/3 ์ฐ๊ฒฐ์์ ์๋ํฌ์ธํธ. ๊ฐ์ "Client", "Server", ๋๋ "Both".
์๊ตฌ ๋ฑ๋ก์ ๋ํ ๋ช ์ธ๋ ์คํธ๋ฆผ ์ ํ์ ์ค๋ช ๊ณผ ์คํธ๋ฆผ ๋ด์ฉ์ ๋ ์ด์์ ๋ฐ ์๋ฏธ๋ฅผ ํฌํจํด์ผ ํฉ๋๋ค(MUST).
ํ 5์ ํญ๋ชฉ๋ค์ ์ด ๋ฌธ์์ ์ํด ๋ฑ๋ก๋ฉ๋๋ค.
| ์คํธ๋ฆผ ์ ํ | ๊ฐ | ๋ช ์ธ | ๋ฐ์ ์ |
|---|---|---|---|
| Control Stream | 0x00 | ์น์ 6.2.1 | Both |
| Push Stream | 0x01 | ์น์ 4.6 | Server |
๋น์์ ์ ์ N์ ๋ํด ํ์ 0x1f * N + 0x21์ธ ๊ฐ ์ฝ๋๋ IANA์ ์ํด ํ ๋น๋์ด์๋ ์ ๋๋ฉฐ(MUST NOT) ํ ๋น ๊ฐ ๋ชฉ๋ก์ ๋ํ๋์๋ ์ ๋ฉ๋๋ค.
12. ์ฐธ๊ณ ๋ฌธํ
12.1. ๊ท๋ฒ ์ฐธ์กฐ
- [ALTSVC]
- Nottingham, M., McManus, P., and J. Reschke, โHTTP Alternative Servicesโ, RFC 7838, DOI 10.17487/RFC7838, 2016๋ 4์, <https://www.rfc-editor.org/info/rfc7838>.
- [COOKIES]
- Barth, A., โHTTP State Management Mechanismโ, RFC 6265, DOI 10.17487/RFC6265, 2011๋ 4์, <https://www.rfc-editor.org/info/rfc6265>.
- [HTTP-CACHING]
- Fielding, R., ํธ์ง., Nottingham, M., ํธ์ง., and J. Reschke, ํธ์ง., โHTTP Cachingโ, STD 98, RFC 9111, DOI 10.17487/RFC9111, 2022๋ 6์, <https://www.rfc-editor.org/info/rfc9111>.
- [HTTP-REPLAY]
- Thomson, M., Nottingham, M., and W. Tarreau, โUsing Early Data in HTTPโ, RFC 8470, DOI 10.17487/RFC8470, 2018๋ 9์, <https://www.rfc-editor.org/info/rfc8470>.
- [HTTP]
- Fielding, R., ํธ์ง., Nottingham, M., ํธ์ง., and J. Reschke, ํธ์ง., โHTTP Semanticsโ, STD 97, RFC 9110, DOI 10.17487/RFC9110, 2022๋ 6์, <https://www.rfc-editor.org/info/rfc9110>.
- [QPACK]
- Krasic, C., Bishop, M., and A. Frindell, ํธ์ง., โQPACK: Field Compression for HTTP/3โ, RFC 9204, DOI 10.17487/RFC9204, 2022๋ 6์, <https://www.rfc-editor.org/info/rfc9204>.
- [QUIC-TRANSPORT]
- Iyengar, J., ํธ์ง. ๋ฐ M. Thomson, ํธ์ง., โQUIC: A UDP-Based Multiplexed and Secure Transportโ, RFC 9000, DOI 10.17487/RFC9000, 2021๋ 5์, <https://www.rfc-editor.org/info/rfc9000>.
- [RFC0793]
- Postel, J., โTransmission Control Protocolโ, STD 7, RFC 793, DOI 10.17487/RFC0793, 1981๋ 9์, <https://www.rfc-editor.org/info/rfc793>.
- [RFC2119]
- Bradner, S., โKey words for use in RFCs to Indicate Requirement Levelsโ, BCP 14, RFC 2119, DOI 10.17487/RFC2119, 1997๋ 3์, <https://www.rfc-editor.org/info/rfc2119>.
- [RFC6066]
- Eastlake 3rd, D., โTransport Layer Security (TLS) Extensions: Extension Definitionsโ, RFC 6066, DOI 10.17487/RFC6066, 2011๋ 1์, <https://www.rfc-editor.org/info/rfc6066>.
- [RFC7301]
- Friedl, S., Popov, A., Langley, A., and E. Stephan, โTransport Layer Security (TLS) Application-Layer Protocol Negotiation Extensionโ, RFC 7301, DOI 10.17487/RFC7301, 2014๋ 7์, <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, 2017๋ 6์, <https://www.rfc-editor.org/info/rfc8126>.
- [RFC8174]
- Leiba, B., โAmbiguity of Uppercase vs Lowercase in RFC 2119 Key Wordsโ, BCP 14, RFC 8174, DOI 10.17487/RFC8174, 2017๋ 5์, <https://www.rfc-editor.org/info/rfc8174>.
- [URI]
- Berners-Lee, T., Fielding, R., and L. Masinter, โUniform Resource Identifier (URI): Generic Syntaxโ, STD 66, RFC 3986, DOI 10.17487/RFC3986, 2005๋ 1์, <https://www.rfc-editor.org/info/rfc3986>.
12.2. ์ ๋ณด ์ฐธ์กฐ
- [BREACH]
- Gluck, Y., Harris, N., and A. Prado, โBREACH: Reviving the CRIME Attackโ, 2013๋ 7์, <http://breachattack.com/resources/BREACH%20-%20SSL,%20gone%20in%2030%20seconds.pdf>.
- [DNS-TERMS]
- Hoffman, P., Sullivan, A., and K. Fujiwara, โDNS Terminologyโ, BCP 219, RFC 8499, DOI 10.17487/RFC8499, 2019๋ 1์, <https://www.rfc-editor.org/info/rfc8499>.
- [HPACK]
- Peon, R. and H. Ruellan, โHPACK: Header Compression for HTTP/2โ, RFC 7541, DOI 10.17487/RFC7541, 2015๋ 5์, <https://www.rfc-editor.org/info/rfc7541>.
- [HTTP/1.1]
- Fielding, R., ํธ์ง., Nottingham, M., ํธ์ง., and J. Reschke, ํธ์ง., โHTTP/1.1โ, STD 99, RFC 9112, DOI 10.17487/RFC9112, 2022๋ 6์, <https://www.rfc-editor.org/info/rfc9112>.
- [HTTP/2]
- Thomson, M., ํธ์ง. ๋ฐ C. Benfield, ํธ์ง., โHTTP/2โ, RFC 9113, DOI 10.17487/RFC9113, 2022๋ 6์, <https://www.rfc-editor.org/info/rfc9113>.
- [RFC6585]
- Nottingham, M. and R. Fielding, โAdditional HTTP Status Codesโ, RFC 6585, DOI 10.17487/RFC6585, 2012๋ 4์, <https://www.rfc-editor.org/info/rfc6585>.
- [RFC8164]
- Nottingham, M. and M. Thomson, โOpportunistic Security for HTTP/2โ, RFC 8164, DOI 10.17487/RFC8164, 2017๋ 5์, <https://www.rfc-editor.org/info/rfc8164>.
- [TFO]
- Cheng, Y., Chu, J., Radhakrishnan, S., and A. Jain, โTCP Fast Openโ, RFC 7413, DOI 10.17487/RFC7413, 2014๋ 12์, <https://www.rfc-editor.org/info/rfc7413>.
- [TLS]
- Rescorla, E., โThe Transport Layer Security (TLS) Protocol Version 1.3โ, RFC 8446, DOI 10.17487/RFC8446, 2018๋ 8์, <https://www.rfc-editor.org/info/rfc8446>.
๋ถ๋ก A. HTTP/2์์์ ์ ํ ๊ณ ๋ ค์ฌํญ
HTTP/3๋ HTTP/2์ ์ค๊ณ์์ ๋ง์ ์ํฅ์ ๋ฐ์์ผ๋ฉฐ ์ฌ๋ฌ ์ ์ฌ์ฑ์ ์ง๋๋๋ค. ์ด ์ ์์๋ HTTP/3 ์ค๊ณ์ ์ฌ์ฉ๋ ์ ๊ทผ ๋ฐฉ์์ ์ค๋ช ํ๊ณ , HTTP/2์์ ์ค์ํ ์ฐจ์ด์ ์ ์ง์ ํ๋ฉฐ, HTTP/2 ํ์ฅ์ HTTP/3๋ก ๋งคํํ๋ ๋ฐฉ๋ฒ์ ์ค๋ช ํฉ๋๋ค.
HTTP/3๋ HTTP/2์์ ์ ์ฌ์ฑ์ด ๋ฐ๋์งํ๋ค๋ ์ ์ ์์ ์ถ๋ฐํ์ง๋ง, ๋ฐ๋์ ์ถฉ์กฑํด์ผ ํ ์๊ฒฉํ ์๊ตฌ์ฌํญ์ ์๋๋๋ค. HTTP/3๋ QUIC์ด TCP์ ๋ค๋ฅธ ์ ์์ HTTP/2์ ๋ฌ๋ผ์ง๋๋ค. ์ด๋ QUIC ๊ธฐ๋ฅ(์: ์คํธ๋ฆผ)์ ํ์ฉํ๊ฑฐ๋ ์ ์ฒด ์์ ๋ณด์ฅ์ ๋ถ์ฌ์ ๊ฐ์ ์ค์ํ ๋จ์ ์ ๋ณด์ํ๊ธฐ ์ํ ๊ฒ์ ๋๋ค. ์์ฒญ๊ณผ ์๋ต์ด ์คํธ๋ฆผ๊ณผ ์ฐ๊ด๋๋ ๊ด๊ณ ๊ฐ์ ํต์ฌ ์ธก๋ฉด์์ HTTP/3๋ HTTP/2์ ์ ์ฌํ์ง๋ง, ์ค๊ณ ์ธ๋ถ์ฌํญ์ ์๋นํ ๋ค๋ฆ ๋๋ค.
์ด ์ ์์๋ ๋ช ๊ฐ์ง ์ค์ํ ์ฐจ์ด์ ์ ์ธ๊ธํฉ๋๋ค.
A.1. ์คํธ๋ฆผ
HTTP/3๋ HTTP/2๋ณด๋ค ๋ ๋ง์ ์์ ์คํธ๋ฆผ(262-1)์ ํ์ฉํฉ๋๋ค. ์คํธ๋ฆผ ์๋ณ์ ๊ณต๊ฐ์ ๊ณ ๊ฐ์ ๋ํ ๋์ผํ ๊ณ ๋ ค์ฌํญ์ด ์ ์ฉ๋์ง๋ง, ๊ณต๊ฐ์ด ํจ์ฌ ์ปค์ ์ฐ๊ฒฐ ํ๋ฆ ์ ์ด ์ฐฝ์ ์ ํ ๊ฐ์ QUIC์ ๋ค๋ฅธ ํ๊ณ์ ๋จผ์ ๋๋ฌํ ๊ฐ๋ฅ์ฑ์ด ํฝ๋๋ค.
HTTP/2์ ๋ฌ๋ฆฌ, HTTP/3์์์ ์คํธ๋ฆผ ๋์์ฑ์ QUIC์ ์ํด ๊ด๋ฆฌ๋ฉ๋๋ค. QUIC์ ๋ชจ๋ ๋ฐ์ดํฐ๊ฐ ์์ ๋๊ณ ์ก์ ๋ ๋ฐ์ดํฐ๊ฐ ํผ์ด์ ์ํด ํ์ธ๋๋ฉด ์คํธ๋ฆผ์ด ๋ซํ ๊ฒ์ผ๋ก ๊ฐ์ฃผํฉ๋๋ค. HTTP/2๋ END_STREAM ๋นํธ๋ฅผ ํฌํจํ๋ ํ๋ ์์ด ์ ์ก ๊ณ์ธต์ ๊ธฐ๋ก๋์์ ๋ ์คํธ๋ฆผ์ด ๋ซํ ๊ฒ์ผ๋ก ๊ฐ์ฃผํฉ๋๋ค. ๊ฒฐ๊ณผ์ ์ผ๋ก ๋๋ฑํ ๊ตํ์ ์คํธ๋ฆผ์ด ๋ ์ค๋ ๊ธฐ๊ฐ "ํ์ฑ" ์ํ๋ก ๋จ์ ์ ์์ต๋๋ค. HTTP/3 ์๋ฒ๋ ์์ ์ฌ์ฉ ํจํด์ ๋ฐ๋ผ HTTP/2์ ๋๋ฑํ ๋์์ฑ์ ๋ฌ์ฑํ๊ธฐ ์ํด ๋ ๋ง์ ์์ ํด๋ผ์ด์ธํธ ์์ ์๋ฐฉํฅ ์คํธ๋ฆผ์ ํ์ฉํ ์ ์์ต๋๋ค.
HTTP/2์์๋ ์์ฒญ ๋ฐ ์๋ต ๋ณธ๋ฌธ(์ฆ, DATA ํ๋ ์์ ํ์ด๋ก๋)๋ง ํ๋ฆ ์ ์ด์ ๋์์ ๋๋ค. ๋ชจ๋ HTTP/3 ํ๋ ์์ QUIC ์คํธ๋ฆผ์์ ์ ์ก๋๋ฏ๋ก HTTP/3์์๋ ๋ชจ๋ ์คํธ๋ฆผ์ ๋ชจ๋ ํ๋ ์์ด ํ๋ฆ ์ ์ด์ ๋์์ด ๋ฉ๋๋ค.
๋ค๋ฅธ ๋จ๋ฐฉํฅ ์คํธ๋ฆผ ์ ํ์ ์กด์ฌ๋ก ์ธํด, HTTP/3๋ ๋จ๋ฐฉํฅ ์คํธ๋ฆผ์ ๋์ ๊ฐ์๋ง์ผ๋ก ์ธํ๋ผ์ดํธ ํธ์์ ์๋ฅผ ์ ์ดํ์ง ์์ต๋๋ค. ๋์ HTTP/3 ํด๋ผ์ด์ธํธ๋ MAX_PUSH_ID ํ๋ ์์ ์ฌ์ฉํ์ฌ ์๋ฒ๊ฐ ์ ์กํ๋ ํธ์ ์๋ฅผ ์ ์ดํฉ๋๋ค.
A.2. HTTP ํ๋ ์ ์ ํ
QUIC์์๋ ์ ์ก ๊ณ์ธต์ด ์ฌ๋ฌ ํ๋ ์ด๋ฐ ๊ฐ๋ ์ ์ฒ๋ฆฌํ๋ฏ๋ก HTTP/2์ ๋ง์ ํ๋ ์ด๋ฐ ๊ฐ๋ ์ ์ ๊ฑฐํ ์ ์์ต๋๋ค. ํ๋ ์์ด ์ด๋ฏธ ์คํธ๋ฆผ ์์ ์์ผ๋ฏ๋ก ์คํธ๋ฆผ ๋ฒํธ๋ฅผ ์๋ตํ ์ ์์ต๋๋ค. QUIC์ ๋ค์คํ๋ ์ด ๊ณ์ธต ์๋์์ ๋ฐ์ํ๋ฏ๋ก ๊ฐ๋ณ ์ต๋ ๊ธธ์ด ํจํท ์ง์์ ์ ๊ฑฐํ ์ ์์ต๋๋ค. ์คํธ๋ฆผ ์ข ๋ฃ๋ QUIC์ด ์ฒ๋ฆฌํ๋ฏ๋ก END_STREAM ํ๋๊ทธ๊ฐ ํ์ ์์ต๋๋ค. ์ด๋ ์ผ๋ฐ ํ๋ ์ ๋ ์ด์์์์ Flags ํ๋๋ฅผ ์ ๊ฑฐํ ์ ์๊ฒ ํฉ๋๋ค.
ํ๋ ์ ํ์ด๋ก๋๋ ๋์ฒด๋ก [HTTP/2]์์ ๊ฐ์ ธ์์ต๋๋ค. ๊ทธ๋ฌ๋ QUIC์๋(์: ํ๋ฆ ์ ์ด) HTTP/2์๋ ์๋ ๋ง์ ๊ธฐ๋ฅ์ด ํฌํจ๋์ด ์์ต๋๋ค. ์ด๋ฐ ๊ฒฝ์ฐ HTTP ๋งคํ์ ์ด๋ฅผ ์ฌ๊ตฌํํ์ง ์์ต๋๋ค. ๊ทธ ๊ฒฐ๊ณผ ๋ช๋ช HTTP/2 ํ๋ ์ ์ ํ์ HTTP/3์์ ํ์ํ์ง ์์ต๋๋ค. HTTP/2์์ ์ ์๋ ํ๋ ์์ด ๋ ์ด์ ์ฌ์ฉ๋์ง ์๋ ๊ฒฝ์ฐ, HTTP/2์ HTTP/3 ๊ตฌํ ๊ฐ์ ์ด์์ฑ์ ๊ทน๋ํํ๊ธฐ ์ํด ํด๋น ํ๋ ์ ID๊ฐ ์์ฝ๋์์ต๋๋ค. ๋ค๋ง ์์ชฝ ๋งคํ์ ๋ชจ๋ ๋ฑ์ฅํ๋ ํ๋ ์ ์ ํ์ด๋ผ๋ ์๋ฏธ๊ฐ ์์ ํ ๋์ผํ์ง๋ ์์ต๋๋ค.
๋ง์ ์ฐจ์ด์ ์ HTTP/2๊ฐ ๋ชจ๋ ์คํธ๋ฆผ์ ๊ฑธ์น ํ๋ ์ ๊ฐ์ ์ ๋์ ์์๋ฅผ ์ ๊ณตํ๋ ๋ฐ๋ฉด QUIC์ ๊ฐ ์คํธ๋ฆผ์์๋ง ์ด ๋ณด์ฅ์ ์ ๊ณตํ๋ค๋ ์ฌ์ค์์ ๋ฐ์ํฉ๋๋ค. ๋ฐ๋ผ์ ํ๋ ์ ์ ํ์ด ๋ค๋ฅธ ์คํธ๋ฆผ์ ํ๋ ์๋ค์ด ์ ์ก๋ ์์๋๋ก ์์ ๋ ๊ฒ์ด๋ผ๋ ๊ฐ์ ์ ํ ๊ฒฝ์ฐ, HTTP/3์์๋ ๊ทธ๋ฌํ ๊ฐ์ ์ด ๊นจ์ง ์ ์์ต๋๋ค.
์๋์๋ ๊ธฐ๋ฅ ์ ์์ ๋ช ๊ฐ์ง ์์ HTTP/2 ํ์ฅ์ HTTP/3๋ก ๋ณํํ๋ ํ์ฅ ํ๋ ์ ๊ตฌํ์์ ๋ํ ์ผ๋ฐ ์ง์นจ์ด ์ค๋ช ๋์ด ์์ต๋๋ค.
A.2.1. ์ฐ์ ์์ ์ฐจ์ด
HTTP/2๋ PRIORITY ํ๋ ์ ๋ฐ(์ ํ์ ์ผ๋ก) HEADERS ํ๋ ์์์ ์ฐ์ ์์ ํ ๋น์ ์ง์ ํฉ๋๋ค. HTTP/3๋ ์ฐ์ ์์๋ฅผ ์ ํธํ๋ ์๋จ์ ์ ๊ณตํ์ง ์์ต๋๋ค.
๋ช ์์ ์ฐ์ ์์ ์ ํธ๊ฐ ์๋ค๊ณ ํด์ ์ฐ์ ์์๊ฐ ์ฑ๋ฅ ๋ฌ์ฑ์ ์ค์ํ์ง ์๋ค๋ ์๋ฏธ๋ ์๋๋๋ค.
A.2.2. ํ๋ ์์ถ ์ฐจ์ด
HPACK์ ์์๋๋ก ์ ๋ฌ๋๋ค๋ ๊ฐ์ ํ์ ์ค๊ณ๋์์ต๋๋ค. ์ธ์ฝ๋ฉ๋ ํ๋ ์น์ ์ ์ํ์ค๋ ์ธ์ฝ๋ฉ๋ ์์๋๋ก ๋์ฐฉ(๋ฐ ๋์ฝ๋)ํด์ผ ํฉ๋๋ค. ์ด๋ ๋์ ํ ์ด๋ธ์ ์ํ๊ฐ ์ ๋์ ์์ ๋๊ธฐํ๋ ์ํ๋ก ์ ์ง๋๋๋ก ๋ณด์ฅํฉ๋๋ค.
์ด๋ฐ ์ ์ฒด ์์ ๋ณด์ฅ์ด QUIC์ ์ํด ์ ๊ณต๋์ง ์๊ธฐ ๋๋ฌธ์, HTTP/3๋ HPACK์ ์์ ๋ ๋ฒ์ ์ธ QPACK์ ์ฌ์ฉํฉ๋๋ค. QPACK์ ๋์ ํ ์ด๋ธ์ ๋ํ ๋ชจ๋ ์์ ์ ๋จ์ผ ๋จ๋ฐฉํฅ ์คํธ๋ฆผ์์ ์ํํ์ฌ ์ ๋ฐ์ดํธ์ ์ ์ฒด ์์๋ฅผ ๋ณด์ฅํฉ๋๋ค. ์ธ์ฝ๋ฉ๋ ํ๋๋ฅผ ํฌํจํ๋ ๋ชจ๋ ํ๋ ์์ ํ ์ด๋ธ ์ํ๋ฅผ ์ฐธ์กฐ๋ง ํ ๋ฟ ์ด๋ฅผ ์์ ํ์ง ์์ต๋๋ค.
[QPACK]์์ ์ถ๊ฐ ์ธ๋ถ์ฌํญ์ ์ ๊ณตํฉ๋๋ค.
A.2.3. ํ๋ฆ ์ ์ด ์ฐจ์ด
HTTP/2๋ ์คํธ๋ฆผ ํ๋ฆ ์ ์ด ๋ฉ์ปค๋์ฆ์ ์ง์ ํฉ๋๋ค. ๋ชจ๋ HTTP/2 ํ๋ ์์ด ์คํธ๋ฆผ์์ ์ ๋ฌ๋์ง๋ง ์ค์ง DATA ํ๋ ์ ํ์ด๋ก๋๋ง ํ๋ฆ ์ ์ด์ ๋์์ ๋๋ค. QUIC์ ์คํธ๋ฆผ ๋ฐ์ดํฐ์ ๋ํ ํ๋ฆ ์ ์ด๋ฅผ ์ ๊ณตํ๋ฉฐ ์ด ๋ฌธ์์์ ์ ์๋ ๋ชจ๋ HTTP/3 ํ๋ ์ ์ ํ์ ์คํธ๋ฆผ์์ ์ ์ก๋ฉ๋๋ค. ๋ฐ๋ผ์ ๋ชจ๋ ํ๋ ์ ํค๋์ ํ์ด๋ก๋๊ฐ ํ๋ฆ ์ ์ด์ ๋์์ ๋๋ค.
A.2.4. ์ ํ๋ ์ ์ ํ ์ ์์ ๋ํ ์ง์นจ
HTTP/3์ ํ๋ ์ ์ ํ ์ ์๋ ์ข ์ข QUIC ๋ณ์ ๊ธธ์ด ์ ์ ์ธ์ฝ๋ฉ์ ์ฌ์ฉํฉ๋๋ค. ํนํ ์คํธ๋ฆผ ID๋ ์ด ์ธ์ฝ๋ฉ์ ์ฌ์ฉํ๋ฉฐ, ์ด๋ HTTP/2์์ ์ฌ์ฉํ ์ธ์ฝ๋ฉ๋ณด๋ค ๋ ๋์ ๋ฒ์์ ๊ฐ์ ํ์ฉํฉ๋๋ค. ์ผ๋ถ HTTP/3 ํ๋ ์์ ์คํธ๋ฆผ ID ์ด์ธ์ ์๋ณ์(์: push ID)๋ฅผ ์ฌ์ฉํฉ๋๋ค. ํ์ฅ ํ๋ ์ ์ ํ์ ์ธ์ฝ๋ฉ์ด ์คํธ๋ฆผ ID๋ฅผ ํฌํจํ๋ฉด ์ฌ์ ์๊ฐ ํ์ํ ์ ์์ต๋๋ค.
Flags ํ๋๊ฐ ์ผ๋ฐ HTTP/3 ํ๋ ์์ ์์ผ๋ฏ๋ก, ํ๋๊ทธ์ ์์กดํ๋ ํ๋ ์์ ํ์ด๋ก๋์ ์ผ๋ถ๋ก์ ํ๋๊ทธ ๊ณต๊ฐ์ ํ ๋นํด์ผ ํฉ๋๋ค.
์ด๋ฌํ ๋ฌธ์ ๋ฅผ ์ ์ธํ๋ฉด, HTTP/2์ ํ๋ ์ ์ ํ ํ์ฅ์ ์ผ๋ฐ์ ์ผ๋ก HTTP/2์ ์คํธ๋ฆผ 0์ HTTP/3์ control stream๋ก ๋ฐ๊พธ๋ ๊ฒ๋ง์ผ๋ก๋ ์ด์ ๊ฐ๋ฅํฉ๋๋ค. HTTP/3 ํ์ฅ์ ์์์ ์์กดํ์ง ์๊ฒ ์ง๋ง, ์์๊ฐ ์์ด๋ ํด๋ฅผ ์ ์ง๋ ์์ผ๋ฉฐ ๋ณดํต HTTP/2๋ก ์ด์ ๊ฐ๋ฅํ ๊ฒ์ผ๋ก ์์๋ฉ๋๋ค.
A.2.5. HTTP/2์ HTTP/3 ํ๋ ์ ์ ํ ๋น๊ต
- DATA (0x00) :
-
HTTP/3 ํ๋ ์์์๋ ํจ๋ฉ์ด ์ ์๋์ด ์์ง ์์ต๋๋ค. ์น์ 7.2.1 ์ฐธ์กฐ.
- HEADERS (0x01):
-
HEADERS์ PRIORITY ์์ญ์ HTTP/3 ํ๋ ์์์ ์ ์๋์ด ์์ง ์์ต๋๋ค. ํจ๋ฉ๋ ์ ์๋์ด ์์ง ์์ต๋๋ค. ์น์ 7.2.2 ์ฐธ์กฐ.
- PRIORITY (0x02):
-
๋ถ๋ก A.2.1์์ ์ค๋ช ํ ๊ฒ์ฒ๋ผ, HTTP/3๋ ์ฐ์ ์์๋ฅผ ์ ํธํ๋ ์๋จ์ ์ ๊ณตํ์ง ์์ต๋๋ค.
- RST_STREAM (0x03):
-
HTTP/3์๋ RST_STREAM ํ๋ ์์ด ์กด์ฌํ์ง ์์ผ๋ฉฐ, ์ด๋ QUIC์ด ์คํธ๋ฆผ ์๋ช ์ฃผ๊ธฐ ๊ด๋ฆฌ๋ฅผ ์ ๊ณตํ๊ธฐ ๋๋ฌธ์ ๋๋ค. ๋์ผํ ์ฝ๋ ํฌ์ธํธ๋ CANCEL_PUSH ํ๋ ์์ ์ฌ์ฉ๋ฉ๋๋ค(์น์ 7.2.3 ์ฐธ์กฐ).
- SETTINGS (0x04):
-
SETTINGS ํ๋ ์์ ์ฐ๊ฒฐ์ ์์ ์์๋ง ์ ์ก๋ฉ๋๋ค. ์น์ 7.2.4 ๋ฐ ๋ถ๋ก A.3 ์ฐธ์กฐ.
- PUSH_PROMISE (0x05):
-
PUSH_PROMISE ํ๋ ์์ ์คํธ๋ฆผ์ ์ฐธ์กฐํ์ง ์์ต๋๋ค. ๋์ push stream ์ด PUSH_PROMISE ํ๋ ์์ push ID๋ก ์ฐธ์กฐํฉ๋๋ค. ์น์ 7.2.5 ์ฐธ์กฐ.
- PING (0x06):
-
QUIC์ด ๋๋ฑํ ๊ธฐ๋ฅ์ ์ ๊ณตํ๋ฏ๋ก HTTP/3์๋ PING ํ๋ ์์ด ์์ต๋๋ค.
- GOAWAY (0x07):
-
GOAWAY๋ ์ค๋ฅ ์ฝ๋๋ฅผ ํฌํจํ์ง ์์ต๋๋ค. ํด๋ผ์ด์ธํธโ์๋ฒ ๋ฐฉํฅ์์๋ ์๋ฒ๊ฐ ์์ํ ์คํธ๋ฆผ ID ๋์ push ID๋ฅผ ํฌํจํฉ๋๋ค. ์น์ 7.2.6 ์ฐธ์กฐ.
- WINDOW_UPDATE (0x08):
-
QUIC์ด ํ๋ฆ ์ ์ด๋ฅผ ์ ๊ณตํ๋ฏ๋ก HTTP/3์๋ WINDOW_UPDATE ํ๋ ์์ด ์์ต๋๋ค.
- CONTINUATION (0x09):
-
HTTP/3์๋ CONTINUATION ํ๋ ์์ด ์กด์ฌํ์ง ์์ต๋๋ค. ๋์ HTTP/2๋ณด๋ค ๋ ํฐ HEADERS / PUSH_PROMISE ํ๋ ์์ด ํ์ฉ๋ฉ๋๋ค.
HTTP/2 ํ์ฅ์์ ์ ์๋ ํ๋ ์ ์ ํ์ ์ฌ์ ํ ์ ์ฉ ๊ฐ๋ฅํ๋ค๋ฉด HTTP/3์ฉ์ผ๋ก ๋ณ๋ ๋ฑ๋กํด์ผ ํฉ๋๋ค. [HTTP/2]์์ ์ ์๋ ํ๋ ์ ID๋ ๋จ์์ฑ์ ์ํด ์์ฝ๋์ด ์์ต๋๋ค. HTTP/3์ ํ๋ ์ ์ ํ ๊ณต๊ฐ์ ํจ์ฌ ํฌ๊ธฐ(62๋นํธ ๋ 8๋นํธ)์ด๋ฏ๋ก ๋ง์ HTTP/3 ํ๋ ์ ์ ํ์ด HTTP/2์ ๋์ ์ฝ๋ ํฌ์ธํธ๋ฅผ ๊ฐ์ง์ง ์์ต๋๋ค. ์น์ 11.2.1 ์ฐธ์กฐ.
A.3. HTTP/2 SETTINGS ๋งค๊ฐ๋ณ์
HTTP/2์์ ์ค์ํ ์ฐจ์ด์ ์ค ํ๋๋ ์ค์ ์ด control stream์ ์ฒซ ๋ฒ์งธ ํ๋ ์์ผ๋ก์ ํ ๋ฒ ์ ์ก๋๊ณ ์ดํ์๋ ๋ณ๊ฒฝ๋ ์ ์๋ค๋ ์ ์ ๋๋ค. ์ด๋ ๋ณ๊ฒฝ ๋๊ธฐํ์ ๊ดํ ๋ง์ ๋ชจ์๋ฆฌ ์ผ์ด์ค๋ฅผ ์ ๊ฑฐํฉ๋๋ค.
HTTP/2๊ฐ SETTINGS ํ๋ ์์ ํตํด ์ง์ ํ๋ ์ผ๋ถ ์ ์ก ๊ณ์ธต ์ต์ ์ HTTP/3์์๋ QUIC ์ ์ก ๋งค๊ฐ๋ณ์๋ก ๋์ฒด๋ฉ๋๋ค. HTTP/3์ ๋จ๊ฒจ์ง HTTP ์์ค์ ์ค์ ์ HTTP/2์ ๋์ผํ ๊ฐ์ ๊ฐ์ต๋๋ค. ๋์ฒด๋ ์ค์ ์ ์์ฝ๋๋ฉฐ, ์ด๋ค์ ์์ ์ ์ค๋ฅ์ ๋๋ค. ๋ณด์กด๋ ๊ฐ๊ณผ ์์ฝ๋ ๊ฐ์ ๋ํ ๋ ผ์๋ ์น์ 7.2.4.1์ ์ฐธ์กฐํ์ญ์์ค.
์๋๋ ๊ฐ HTTP/2 SETTINGS ๋งค๊ฐ๋ณ์๊ฐ ์ด๋ป๊ฒ ๋งคํ๋๋์ง์ ๋ชฉ๋ก์ ๋๋ค:
- SETTINGS_HEADER_TABLE_SIZE (0x01):
-
[QPACK] ์ฐธ์กฐ.
- SETTINGS_ENABLE_PUSH (0x02):
-
์ด๋ ๋ ์ธ๋ถํ๋ ์๋ฒ ํธ์ ์ ์ด๋ฅผ ์ ๊ณตํ๋ MAX_PUSH_ID ํ๋ ์์ผ๋ก ๋์ฒด๋์์ต๋๋ค. HTTP/3 SETTINGS ํ๋ ์์์ ์๋ณ์ 0x02(SETTINGS_ENABLE_PUSH์ ํด๋น)๋ฅผ ์ง์ ํ๋ ๊ฒ์ ์ค๋ฅ์ ๋๋ค.
- SETTINGS_MAX_CONCURRENT_STREAMS (0x03):
-
์ต๋ ์ด๋ฆฐ ์คํธ๋ฆผ ID๋ QUIC์ด ํ๋ฆ ์ ์ด ๋ก์ง์ ์ผ๋ถ๋ก ์ ์ดํฉ๋๋ค. HTTP/3 SETTINGS ํ๋ ์์์ ์๋ณ์ 0x03(SETTINGS_MAX_CONCURRENT_STREAMS์ ํด๋น)์ ์ง์ ํ๋ ๊ฒ์ ์ค๋ฅ์ ๋๋ค.
- SETTINGS_INITIAL_WINDOW_SIZE (0x04):
-
QUIC์ ์ด๊ธฐ ์ ์ก ํธ๋์ ฐ์ดํฌ์์ ์คํธ๋ฆผ ๋ฐ ์ฐ๊ฒฐ ํ๋ฆ ์ ์ด ์ฐฝ ํฌ๊ธฐ๋ฅผ ์ง์ ํ ๊ฒ์ ์๊ตฌํฉ๋๋ค. HTTP/3 SETTINGS ํ๋ ์์์ ์๋ณ์ 0x04(SETTINGS_INITIAL_WINDOW_SIZE์ ํด๋น)๋ฅผ ์ง์ ํ๋ ๊ฒ์ ์ค๋ฅ์ ๋๋ค.
- SETTINGS_MAX_FRAME_SIZE (0x05):
-
์ด ์ค์ ์ HTTP/3์ ์์ํ๋ ํญ๋ชฉ์ด ์์ต๋๋ค. HTTP/3 SETTINGS ํ๋ ์์์ ์๋ณ์ 0x05(SETTINGS_MAX_FRAME_SIZE์ ํด๋น)๋ฅผ ์ง์ ํ๋ ๊ฒ์ ์ค๋ฅ์ ๋๋ค.
- SETTINGS_MAX_HEADER_LIST_SIZE (0x06):
-
์ด ์ค์ ์๋ณ์๋ SETTINGS_MAX_FIELD_SECTION_SIZE๋ก ์ด๋ฆ์ด ๋ณ๊ฒฝ๋์์ต๋๋ค.
HTTP/3์์๋ ์ค์ ๊ฐ์ด ๊ฐ๋ณ ๊ธธ์ด ์ ์(6, 14, 30 ๋๋ 62๋นํธ)๋ก ์ธ์ฝ๋ฉ๋๋ฉฐ, HTTP/2์ ๊ณ ์ 32๋นํธ ํ๋๋ณด๋ค ์ข ์ข ๋ ์งง์ ์ธ์ฝ๋ฉ์ ์์ฑํ์ง๋ง ์ ์ฒด 32๋นํธ ๊ณต๊ฐ์ ์ฌ์ฉํ๋ ๊ฒฝ์ฐ ๋ ๊ธด ์ธ์ฝ๋ฉ์ด ๋ ์ ์์ต๋๋ค. HTTP/2์์ ์ด์๋ ์ค์ ์ ๋ ํจ์จ์ ์ธ ์ธ์ฝ๋ฉ์ ์ํด ๊ฐ์ 30๋นํธ๋ก ์ ํํ๊ฑฐ๋ 30๋นํธ๋ณด๋ค ๋ง์ ๋นํธ๊ฐ ํ์ํ ๊ฒฝ์ฐ 62๋นํธ ๊ณต๊ฐ์ ์ฌ์ฉํ๋๋ก ์ฌ์ ์ํ ์ ์์ต๋๋ค.
์ค์ ์ HTTP/2์ HTTP/3์ ๋ํด ๋ณ๋๋ก ์ ์๋์ด์ผ ํฉ๋๋ค. [HTTP/2]์์ ์ ์๋ ์ค์ ์๋ณ์๋ ๋จ์์ฑ์ ์ํด ์์ฝ๋์ด ์์ต๋๋ค. HTTP/3์ ์ค์ ์๋ณ์ ๊ณต๊ฐ์ ํจ์ฌ ๋์ผ๋ฏ๋ก(62๋นํธ ๋ 16๋นํธ) ๋ง์ HTTP/3 ์ค์ ์ HTTP/2์ ํด๋นํ๋ ์ฝ๋ ํฌ์ธํธ๊ฐ ์์ต๋๋ค. ์น์ 11.2.2 ์ฐธ์กฐ.
QUIC ์คํธ๋ฆผ์ด ๋์ฐฉ ์์๊ฐ ๋ค๋ฐ๋ ์ ์์ผ๋ฏ๋ก, ์๋ํฌ์ธํธ๋ ํผ์ด์ ์ค์ ์ด ๋์ฐฉํ ๋๊น์ง ๋ค๋ฅธ ์คํธ๋ฆผ์ ์๋ตํ๊ธฐ ์ํด ๊ธฐ๋ค๋ฆฌ์ง ์๋ ๊ฒ์ด ์ข์ต๋๋ค. ์น์ 7.2.4.2 ์ฐธ์กฐ.
A.4. HTTP/2 ์ค๋ฅ ์ฝ๋
QUIC์ HTTP/2๊ฐ ์ ๊ณตํ๋ ๊ฒ๊ณผ ๋์ผํ ๊ฐ๋ ์ "์คํธ๋ฆผ" ๋ฐ "์ฐ๊ฒฐ" ์ค๋ฅ๋ฅผ ๊ฐ์ง๋๋ค. ๋ค๋ง HTTP/2์ HTTP/3์ ์ฐจ์ด๋ก ์ธํด ์ค๋ฅ ์ฝ๋๋ ๋ฒ์ ๊ฐ์ ์ง์ ์ด์ ๊ฐ๋ฅํ์ง ์์ต๋๋ค.
Section 7์ ์ ์๋ HTTP/2 ์ค๋ฅ ์ฝ๋๋ ๋ ผ๋ฆฌ์ ์ผ๋ก ๋ค์๊ณผ ๊ฐ์ด HTTP/3 ์ค๋ฅ ์ฝ๋๋ก ๋งคํ๋ฉ๋๋ค:
- NO_ERROR (0x00):
- PROTOCOL_ERROR (0x01):
-
์ด๋ ๋ ๊ตฌ์ฒด์ ์ธ ์ค๋ฅ ์ฝ๋๊ฐ ์ ์๋ ๊ฒฝ์ฐ๋ฅผ ์ ์ธํ๊ณ H3_GENERAL_PROTOCOL_ERROR๋ก ๋งคํ๋ฉ๋๋ค. ๊ทธ๋ฐ ๊ฒฝ์ฐ๋ก๋ H3_FRAME_UNEXPECTED, H3_MESSAGE_ERROR, ๋ฐ H3_CLOSED_CRITICAL_STREAM ๋ฑ์ด ์์ต๋๋ค(๋ชจ๋ ์น์ 8.1์ ์ ์๋จ).
- INTERNAL_ERROR (0x02):
- FLOW_CONTROL_ERROR (0x03):
-
์ ์ฉ๋์ง ์์ โ QUIC์ด ํ๋ฆ ์ ์ด๋ฅผ ์ฒ๋ฆฌํฉ๋๋ค.
- SETTINGS_TIMEOUT (0x04):
-
์ ์ฉ๋์ง ์์ โ SETTINGS์ ๋ํ ํ์ธ(acknowledgment)์ด ์ ์๋์ด ์์ง ์์ต๋๋ค.
- STREAM_CLOSED (0x05):
-
์ ์ฉ๋์ง ์์ โ QUIC์ด ์คํธ๋ฆผ ๊ด๋ฆฌ๋ฅผ ์ฒ๋ฆฌํฉ๋๋ค.
- FRAME_SIZE_ERROR (0x06):
- REFUSED_STREAM (0x07):
-
์์ฒญ์ด ์ฒ๋ฆฌ๋์ง ์์์์ ๋ํ๋ด๊ธฐ ์ํด H3_REQUEST_REJECTED๋ฅผ ์ฌ์ฉํฉ๋๋ค(๊ด๋ จ ๋ด์ฉ์ ์น์ 8.1 ์ฐธ์กฐ). ๊ทธ ์ธ์๋ QUIC์ด ์คํธ๋ฆผ ๊ด๋ฆฌ๋ฅผ ์ฒ๋ฆฌํ๋ฏ๋ก ์ ์ฉ๋์ง ์์ต๋๋ค.
- CANCEL (0x08):
- COMPRESSION_ERROR (0x09):
-
์ฌ๋ฌ ์ค๋ฅ ์ฝ๋๊ฐ [QPACK]์ ์ ์๋์ด ์์ต๋๋ค.
- CONNECT_ERROR (0x0a):
- ENHANCE_YOUR_CALM (0x0b):
- INADEQUATE_SECURITY (0x0c):
-
์ ์ฉ๋์ง ์์ โ QUIC์ ๋ชจ๋ ์ฐ๊ฒฐ์์ ์ถฉ๋ถํ ๋ณด์์ ์ ๊ณตํ๋ค๊ณ ๊ฐ์ ๋ฉ๋๋ค.
- HTTP_1_1_REQUIRED (0x0d):
์ค๋ฅ ์ฝ๋๋ HTTP/2์ HTTP/3์ ๋ํด ๋ณ๋๋ก ์ ์๋์ด์ผ ํฉ๋๋ค. ์น์ 11.2.3 ์ฐธ์กฐ.
A.4.1. HTTP/2์ HTTP/3 ์ค๋ฅ ๊ฐ ๋งคํ
HTTP/2์ HTTP/3 ๊ฐ ๋ณํ์ ์ํํ๋ ์ค๊ฐ์๋ ์๋ฅ์์ ์ค๋ฅ ์กฐ๊ฑด์ ๋ง๋ ์ ์์ต๋๋ค. ๋ค์ด์คํธ๋ฆผ์ ์ค๋ฅ ๋ฐ์์ ์ ๋ฌํ๋ ๊ฒ์ ์ ์ฉํ์ง๋ง, ์ค๋ฅ ์ฝ๋๋ ๋๊ฐ ์ฐ๊ฒฐ-๋ก์ปฌ ๋ฌธ์ ๋ฅผ ๋ฐ์ํ๋ฏ๋ก ์ ํํ๋ ๊ฒ์ด ์ ์ ํ์ง ์์ ์ ์์ต๋๋ค.
์ค๊ฐ์๊ฐ ์๋ฅ ์ค๋ฆฌ์ง์์ ์ค๋ฅ๋ฅผ ๋ง๋ ๊ฒฝ์ฐ 502 (Bad Gateway)์ ๊ฐ์ HTTP ์ํ ์ฝ๋๋ฅผ ์ ์กํ์ฌ ์ค๋ฅ ๋ฐ์์ ํ์ํ ์ ์์ผ๋ฉฐ, ์ด๋ ๋์ ๋ฒ์์ ์ค๋ฅ์ ์ ํฉํฉ๋๋ค.
์ค๋ฅ๋ฅผ ์์ ์ธก์ ๋งคํํ์ฌ ์ ํํ๋ ๊ฒ์ด ์ ์ตํ ๋๋ฌธ ๊ฒฝ์ฐ๊ฐ ์์ต๋๋ค. ์๋ฅผ ๋ค์ด ์ค๊ฐ์๊ฐ ์๋ฅ์์ HTTP/2์ REFUSED_STREAM ์คํธ๋ฆผ ์ค๋ฅ๋ฅผ ๋ฐ์ผ๋ฉด ์์ฒญ์ด ์ฒ๋ฆฌ๋์ง ์์๊ณ ์์ ํ๊ฒ ์ฌ์๋ํ ์ ์๋ค๋ ๋ช ํํ ์ ํธ๋ฅผ ์ป๊ฒ ๋ฉ๋๋ค. ์ด ์ค๋ฅ ์ํ๋ฅผ HTTP/3์ ์คํธ๋ฆผ ์ค๋ฅ์ธ H3_REQUEST_REJECTED๋ก ํด๋ผ์ด์ธํธ์๊ฒ ์ ํํ๋ฉด ํด๋ผ์ด์ธํธ๊ฐ ์ ์ ํ ์กฐ์น๋ฅผ ์ทจํ ์ ์์ต๋๋ค. ๋ฐ๋ ๋ฐฉํฅ์์๋ ์ค๊ฐ์๊ฐ H3_REQUEST_CANCELLED๋ก ์คํธ๋ฆผ์ ์ข ๋ฃํ์ฌ ํ์๋ ํด๋ผ์ด์ธํธ ์์ฒญ ์ทจ์๋ฅผ ์ ๋ฌํ๋ ๊ฒ์ด ์ ์ตํ ์ ์์ต๋๋ค; ์น์ 4.1.1 ์ฐธ์กฐ.
์ค๋ฅ ๊ฐ ๋ณํ์ ๋ ผ๋ฆฌ์ ๋งคํ์ ์ค๋ช ๋์ด ์์ต๋๋ค. ์ค๋ฅ ์ฝ๋๋ ๋์ ๋ฒ์ ์์ ๋ถ์ ์ ํ๊ฑฐ๋ ์ ์ ์๋ ์ค๋ฅ ์ฝ๋ ์ฌ์ฉ์ผ๋ก ์ด์ด์ง๋ ์ฐ๋ฐ์ ๋ณํ์ ๋ฐฉ์งํ๊ธฐ ์ํด ๊ฒน์น์ง ์๋ ๊ณต๊ฐ์ ์ ์๋์ด ์์ต๋๋ค. ์ค๊ฐ์๋ ์คํธ๋ฆผ ์ค๋ฅ๋ฅผ ์ฐ๊ฒฐ ์ค๋ฅ๋ก ์น๊ฒฉํ ์ ์์ง๋ง, ์ด๋ ์ผ์์ ์ด๊ฑฐ๋ ๊ฐํ์ ์ธ ์ค๋ฅ์ ๋ํด HTTP/3 ์ฐ๊ฒฐ์ ๋ํ ๋น์ฉ์ ์๋ฐํ ์ ์์์ ์ธ์งํด์ผ ํฉ๋๋ค.
๊ฐ์ฌ์ ๊ธ
Robbie Shade์ Mike Warres๋ ์ด ๋ฌธ์์ ์ ์ ์ธ draft-shade-quic-http2-mapping์ ์ ์์์ต๋๋ค.
IETF QUIC ์์ ๊ทธ๋ฃน์ ๋ง์ ์ฌ๋๋ค๋ก๋ถํฐ ์์ฒญ๋ ์ง์์ ๋ฐ์์ต๋๋ค. ๊ทธ์ค์์๋ ๋ค์ ์ฌ๋๋ค์ ์ด ๋ฌธ์์ ์ค์ํ ๊ธฐ์ฌ๋ฅผ ํ์ต๋๋ค:
-
Bence Beky
-
Daan De Meyer
-
Martin Duke
-
Roy Fielding
-
Alan Frindell
-
Alessandro Ghedini
-
Nick Harper
-
Ryan Hamilton
-
Christian Huitema
-
Subodh Iyengar
-
Robin Marx
-
Patrick McManus
-
Luca Niccolini
-
ๅฅฅ ไธ็ฉ (Kazuho Oku)
-
Lucas Pardue
-
Roberto Peon
-
Julian Reschke
-
Eric Rescorla
-
Martin Seemann
-
Ben Schwartz
-
Ian Swett
-
Willy Taureau
-
Martin Thomson
-
Dmitri Tikhonov
-
Tatsuhiro Tsujikawa
Mike Bishop์ ์ผ๋ถ ๊ธฐ์ฌ๋ ๊ทธ๊ฐ Microsoft์ ์ฌ์ง ์ค์ผ ๋ Microsoft์ ์ง์์ ๋ฐ์์ต๋๋ค.
์์ธ
- C
- CANCEL_PUSH 2, 4.6, 4.6, 7, 7.2.3, 7.2.5, 7.2.7, 11.2.1, A.2.5
- connection error 2.2, 4.1, 4.1, 4.4, 4.4, 4.6, 5.2, 6.1, 6.2, 6.2.1, 6.2.1, 6.2.1, 6.2.2, 6.2.2, 7.1, 7.1, 7.2.1, 7.2.2, 7.2.3, 7.2.3, 7.2.3, 7.2.4, 7.2.4, 7.2.4, 7.2.4.1, 7.2.4.2, 7.2.4.2, 7.2.5, 7.2.5, 7.2.5, 7.2.5, 7.2.6, 7.2.6, 7.2.7, 7.2.7, 7.2.7, 7.2.8, 8, 10.5, A.4.1
- control stream 2, 3.2, 6.2, 6.2, 6.2, 6.2.1, 7, 7.2.1, 7.2.2, 7.2.3, 7.2.3, 7.2.4, 7.2.4, 7.2.4, 7.2.5, 7.2.6, 7.2.6, 7.2.7, 8.1, 9, A.2.4, A.3
- D
- G
- H
- H3_CLOSED_CRITICAL_STREAM 6.2.1, 8.1, 11.2.3, A.4
- H3_CONNECT_ERROR 4.4, 8.1, 11.2.3, A.4
- H3_EXCESSIVE_LOAD 8.1, 10.5, 11.2.3, A.4
- H3_FRAME_ERROR 7.1, 7.1, 8.1, 11.2.3, A.4
- H3_FRAME_UNEXPECTED 4.1, 4.1, 4.4, 7.2.1, 7.2.2, 7.2.3, 7.2.4, 7.2.4, 7.2.5, 7.2.5, 7.2.6, 7.2.7, 7.2.7, 7.2.8, 8.1, 11.2.3, A.4
- H3_GENERAL_PROTOCOL_ERROR 7.2.5, 8.1, 11.2.3, A.4
- H3_ID_ERROR 4.6, 5.2, 6.2.2, 7.2.3, 7.2.3, 7.2.5, 7.2.6, 7.2.7, 8.1, 11.2.3
- H3_INTERNAL_ERROR 8.1, 11.2.3, A.4
- H3_MESSAGE_ERROR 4.1.2, 8.1, 11.2.3, A.4
- H3_MISSING_SETTINGS 6.2.1, 8.1, 11.2.3
- H3_NO_ERROR 4.1, 5.2, 6.2.3, 8, 8.1, 8.1, 8.1, 11.2.3, A.4
- H3_REQUEST_CANCELLED 4.1.1, 4.1.1, 4.6, 7.2.3, 7.2.3, 8.1, 11.2.3, A.4, A.4.1
- H3_REQUEST_INCOMPLETE 4.1, 8.1, 11.2.3
- H3_REQUEST_REJECTED 4.1.1, 4.1.1, 4.1.1, 4.1.1, 8.1, 11.2.3, A.4, A.4.1
- H3_SETTINGS_ERROR 7.2.4, 7.2.4.1, 7.2.4.2, 7.2.4.2, 8.1, 11.2.3
- H3_STREAM_CREATION_ERROR 6.1, 6.2, 6.2.1, 6.2.2, 8.1, 11.2.3
- H3_VERSION_FALLBACK 8.1, 11.2.3, A.4
- HEADERS 2, 4.1, 4.1, 4.1, 4.1, 4.1, 4.1, 4.4, 4.6, 7, 7.2.2, 9, 11.2.1, A.2.1, A.2.5, A.2.5, A.2.5
- M
- P
- push ID 4.6, 5.2, 5.2, 5.2, 6.2.2, 6.2.2, 6.2.2, 7.2.3, 7.2.3, 7.2.3, 7.2.3, 7.2.3, 7.2.5, 7.2.5, 7.2.5, 7.2.5, 7.2.5, 7.2.5, 7.2.5, 7.2.5, 7.2.6, 7.2.7, 7.2.7, 7.2.7, 7.2.7, 7.2.7, 8.1, A.2.5, A.2.5
- push stream 4.1, 4.1, 4.6, 4.6, 4.6, 4.6, 4.6, 4.6, 6.2, 6.2.2, 7, 7.2.2, 7.2.3, 7.2.3, 7.2.3, 7.2.3, 7.2.3, 7.2.3, 7.2.3, 7.2.3, 7.2.3, 7.2.5, 7.2.7, A.2.5
- PUSH_PROMISE 2, 4.1, 4.1, 4.1, 4.1, 4.1, 4.6, 4.6, 4.6, 4.6, 4.6, 4.6, 4.6, 4.6, 4.6, 7, 7.2.3, 7.2.3, 7.2.5, 7.2.7, 10.4, 10.5, 11.2.1, A.2.5, A.2.5, A.2.5, A.2.5
- R
- S