์ธํ„ฐ๋„ท ์—”์ง€๋‹ˆ์–ด๋ง ํƒœ์Šคํฌ ํฌ์Šค (IETF) ํŽธ์ง‘์ž: M. Thomson
์š”์ฒญ ์˜๊ฒฌ: 9113 Mozilla
๋Œ€์ฒดํ•จ: 7540, 8740 ํŽธ์ง‘์ž: C. Benfield
๋ถ„๋ฅ˜: ํ‘œ์ค€ ํŠธ๋ž™ Apple Inc.
ISSN: 2070-1721 2022๋…„ 6์›”

HTTP/2


์ดˆ๋ก

์ด ๋ช…์„ธ์„œ๋Š” ํ•˜์ดํผํ…์ŠคํŠธ ์ „์†ก ํ”„๋กœํ† ์ฝœ(HTTP)์˜ ์˜๋ฏธ๋ก ์„ ์ตœ์ ํ™”ํ•˜์—ฌ ํ‘œํ˜„ํ•œ HTTP ๋ฒ„์ „ 2(HTTP/2)๋ฅผ ์„ค๋ช…ํ•œ๋‹ค. HTTP/2๋Š” ํ•„๋“œ ์••์ถ•์„ ๋„์ž…ํ•˜๊ณ  ๋™์ผํ•œ ์—ฐ๊ฒฐ์—์„œ ์—ฌ๋Ÿฌ ๋™์‹œ ๊ตํ™˜์„ ํ—ˆ์šฉํ•จ์œผ๋กœ์จ ๋„คํŠธ์›Œํฌ ์ž์›์„ ๋ณด๋‹ค ํšจ์œจ์ ์œผ๋กœ ์‚ฌ์šฉํ•˜๊ณ  ์ง€์—ฐ ์‹œ๊ฐ„์„ ์ค„์ผ ์ˆ˜ ์žˆ๊ฒŒ ํ•œ๋‹ค.

์ด ๋ฌธ์„œ๋Š” RFC 7540 ๋ฐ RFC 8740์„ ๋Œ€์ฒดํ•œ๋‹ค.

์ด ๋ฉ”๋ชจ์˜ ์ƒํƒœ

์ด ๋ฌธ์„œ๋Š” ์ธํ„ฐ๋„ท ํ‘œ์ค€ ํŠธ๋ž™ ๋ฌธ์„œ์ด๋‹ค.

์ด ๋ฌธ์„œ๋Š” ์ธํ„ฐ๋„ท ์—”์ง€๋‹ˆ์–ด๋ง ํƒœ์Šคํฌ ํฌ์Šค(IETF)์˜ ์‚ฐ๋ฌผ์ด๋‹ค. ์ด๋Š” IETF ์ปค๋ฎค๋‹ˆํ‹ฐ์˜ ํ•ฉ์˜๋ฅผ ๋ฐ˜์˜ํ•œ๋‹ค. ๊ณต๊ฐœ ๊ฒ€ํ† ๋ฅผ ๊ฑฐ์ณค๊ณ  ์ธํ„ฐ๋„ท ์—”์ง€๋‹ˆ์–ด๋ง ์šด์˜ ๊ทธ๋ฃน(IESG)์— ์˜ํ•ด ์ถœํŒ ์Šน์ธ์„ ๋ฐ›์•˜๋‹ค. ์ธํ„ฐ๋„ท ํ‘œ์ค€์— ๋Œ€ํ•œ ์ถ”๊ฐ€ ์ •๋ณด๋Š” RFC 7841์˜ ์„น์…˜ 2์—์„œ ํ™•์ธํ•  ์ˆ˜ ์žˆ๋‹ค.

์ด ๋ฌธ์„œ์˜ ํ˜„์žฌ ์ƒํƒœ, ์ •์˜คํ‘œ, ๋ฐ ์ด์— ๋Œ€ํ•œ ํ”ผ๋“œ๋ฐฑ ์ œ์ถœ ๋ฐฉ๋ฒ•์— ๊ด€ํ•œ ์ •๋ณด๋Š” https://www.rfc-editor.org/info/rfc9113์—์„œ ํ™•์ธํ•  ์ˆ˜ ์žˆ๋‹ค.

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. ์†Œ๊ฐœ

ํ•˜์ดํผํ…์ŠคํŠธ ์ „์†ก ํ”„๋กœํ† ์ฝœ(HTTP, [HTTP])์„ ์‚ฌ์šฉํ•˜๋Š” ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ์„ฑ๋Šฅ์€ ๊ฐ HTTP ๋ฒ„์ „์ด ๊ธฐ๋ณธ ์ „์†ก์„ ์–ด๋–ป๊ฒŒ ์‚ฌ์šฉํ•˜๋Š”์ง€์™€ ์ „์†ก์ด ๋™์ž‘ํ•˜๋Š” ์กฐ๊ฑด์— ์—ฐ๊ฒฐ๋˜์–ด ์žˆ๋‹ค.

์—ฌ๋Ÿฌ ๋™์‹œ ์š”์ฒญ์„ ๋งŒ๋“œ๋Š” ๊ฒƒ์€ ์ง€์—ฐ ์‹œ๊ฐ„์„ ์ค„์ด๊ณ  ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์„ฑ๋Šฅ์„ ํ–ฅ์ƒ์‹œํ‚ฌ ์ˆ˜ ์žˆ๋‹ค. HTTP/1.0์€ ์ฃผ์–ด์ง„ TCP [TCP] ์—ฐ๊ฒฐ์—์„œ ํ•œ ๋ฒˆ์— ํ•˜๋‚˜์˜ ์š”์ฒญ๋งŒ ์œ ํšจํ•  ์ˆ˜ ์žˆ๋„๋ก ํ—ˆ์šฉํ–ˆ๋‹ค. HTTP/1.1 [HTTP/1.1]์€ ์š”์ฒญ ํŒŒ์ดํ”„๋ผ์ด๋‹์„ ์ถ”๊ฐ€ํ–ˆ์ง€๋งŒ, ์ด๋Š” ์š”์ฒญ ๋™์‹œ์„ฑ ๋ฌธ์ œ๋ฅผ ๋ถ€๋ถ„์ ์œผ๋กœ๋งŒ ํ•ด๊ฒฐํ–ˆ๊ณ  ์—ฌ์ „ํžˆ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๊ณ„์ธต์˜ ํ—ค๋“œ-์˜ค๋ธŒ-๋ผ์ธ ๋ธ”๋กœํ‚น์— ์˜ํ–ฅ์„ ๋ฐ›๋Š”๋‹ค. ๋”ฐ๋ผ์„œ HTTP/1.0 ๋ฐ HTTP/1.1 ํด๋ผ์ด์–ธํŠธ๋Š” ๋™์‹œ ์š”์ฒญ์„ ์œ„ํ•ด ์„œ๋ฒ„์— ์—ฌ๋Ÿฌ ์—ฐ๊ฒฐ์„ ์‚ฌ์šฉํ•œ๋‹ค.

๊ฒŒ๋‹ค๊ฐ€ HTTP ํ•„๋“œ๋Š” ์ข…์ข… ๋ฐ˜๋ณต์ ์ด๊ณ  ์žฅํ™ฉํ•˜์—ฌ ๋ถˆํ•„์š”ํ•œ ๋„คํŠธ์›Œํฌ ํŠธ๋ž˜ํ”ฝ์„ ์œ ๋ฐœํ•˜๊ณ  ์ดˆ๊ธฐ TCP ํ˜ผ์žก ์ฐฝ์ด ๋น ๋ฅด๊ฒŒ ์ฑ„์›Œ์ง€๊ฒŒ ํ•œ๋‹ค. ์ด๋Š” ์ƒˆ๋กœ์šด TCP ์—ฐ๊ฒฐ์—์„œ ์—ฌ๋Ÿฌ ์š”์ฒญ์ด ์ด๋ฃจ์–ด์งˆ ๋•Œ ๊ณผ๋„ํ•œ ์ง€์—ฐ์œผ๋กœ ์ด์–ด์งˆ ์ˆ˜ ์žˆ๋‹ค.

HTTP/2๋Š” HTTP ์˜๋ฏธ๋ก ์„ ๊ธฐ๋ณธ ์—ฐ๊ฒฐ์— ์ตœ์ ํ™”ํ•˜์—ฌ ๋งคํ•‘ํ•จ์œผ๋กœ์จ ์ด๋Ÿฌํ•œ ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•œ๋‹ค. ๊ตฌ์ฒด์ ์œผ๋กœ, ๋™์ผํ•œ ์—ฐ๊ฒฐ์—์„œ ๋ฉ”์‹œ์ง€์˜ ๊ต์ฐจ ์ „์†ก์„ ํ—ˆ์šฉํ•˜๊ณ  HTTP ํ•„๋“œ์— ๋Œ€ํ•ด ํšจ์œจ์ ์ธ ์ธ์ฝ”๋”ฉ์„ ์‚ฌ์šฉํ•œ๋‹ค. ๋˜ํ•œ ์š”์ฒญ์˜ ์šฐ์„ ์ˆœ์œ„๋ฅผ ์ง€์ •ํ•  ์ˆ˜ ์žˆ์–ด ๋” ์ค‘์š”ํ•œ ์š”์ฒญ์ด ๋” ๋นจ๋ฆฌ ์™„๋ฃŒ๋˜๋„๋ก ํ•˜์—ฌ ์„ฑ๋Šฅ์„ ๋”์šฑ ํ–ฅ์ƒ์‹œํ‚จ๋‹ค.

๊ฒฐ๊ณผ ํ”„๋กœํ† ์ฝœ์€ HTTP/1.x์™€ ๋น„๊ตํ•ด ๋” ์ ์€ TCP ์—ฐ๊ฒฐ์„ ์‚ฌ์šฉํ•˜๋ฏ€๋กœ ๋„คํŠธ์›Œํฌ์— ๋” ์šฐํ˜ธ์ ์ด๋‹ค. ์ด๋Š” ๋‹ค๋ฅธ ํ”Œ๋กœ์šฐ์™€์˜ ๊ฒฝ์Ÿ์ด ์ค„๊ณ  ๋” ์žฅ๊ธฐ๊ฐ„ ์œ ์ง€๋˜๋Š” ์—ฐ๊ฒฐ๋กœ ์ด์–ด์ ธ ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•œ ๋„คํŠธ์›Œํฌ ์šฉ๋Ÿ‰์„ ๋” ์ž˜ ํ™œ์šฉํ•˜๊ฒŒ ํ•œ๋‹ค. ๋‹ค๋งŒ, ์ด ํ”„๋กœํ† ์ฝœ์€ TCP์˜ ํ—ค๋“œ-์˜ค๋ธŒ-๋ผ์ธ ๋ธ”๋กœํ‚น์„ ํ•ด๊ฒฐํ•˜์ง€๋Š” ์•Š๋Š”๋‹ค.

๋งˆ์ง€๋ง‰์œผ๋กœ, HTTP/2๋Š” ์ด์ง„ ๋ฉ”์‹œ์ง€ ํ”„๋ ˆ์ด๋ฐ์„ ์‚ฌ์šฉํ•˜์—ฌ ๋ฉ”์‹œ์ง€ ์ฒ˜๋ฆฌ๋ฅผ ๋ณด๋‹ค ํšจ์œจ์ ์œผ๋กœ ์ˆ˜ํ–‰ํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•œ๋‹ค.

์ด ๋ฌธ์„œ๋Š” RFC 7540 ๋ฐ 8740์„ ๋Œ€์ฒดํ•œ๋‹ค. ๋ถ€๋ก B์—๋Š” ์ฃผ๋ชฉํ•  ๋งŒํ•œ ๋ณ€๊ฒฝ ์‚ฌํ•ญ์ด ๋‚˜์—ด๋˜์–ด ์žˆ๋‹ค.


2. HTTP/2 ํ”„๋กœํ† ์ฝœ ๊ฐœ์š”

HTTP/2๋Š” HTTP ์˜๋ฏธ๋ก ์„ ์œ„ํ•œ ์ตœ์ ํ™”๋œ ์ „์†ก์„ ์ œ๊ณตํ•œ๋‹ค. HTTP/2๋Š” HTTP์˜ ๋ชจ๋“  ํ•ต์‹ฌ ๊ธฐ๋Šฅ์„ ์ง€์›ํ•˜์ง€๋งŒ HTTP/1.1๋ณด๋‹ค ๋” ํšจ์œจ์ ์ด๋„๋ก ์„ค๊ณ„๋˜์—ˆ๋‹ค.

HTTP/2๋Š” TCP ์—ฐ๊ฒฐ([TCP]) ์œ„์—์„œ ๋™์ž‘ํ•˜๋Š” ์—ฐ๊ฒฐ ์ง€ํ–ฅ์  ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๊ณ„์ธต ํ”„๋กœํ† ์ฝœ์ด๋‹ค. ํด๋ผ์ด์–ธํŠธ๊ฐ€ TCP ์—ฐ๊ฒฐ์„ ์‹œ์ž‘ํ•˜๋Š” ์ธก์ด๋‹ค.

HTTP/2์˜ ๊ธฐ๋ณธ ํ”„๋กœํ† ์ฝœ ๋‹จ์œ„๋Š” ํ”„๋ ˆ์ž„(์„น์…˜ 4.1)์ด๋‹ค. ๊ฐ ํ”„๋ ˆ์ž„ ์œ ํ˜•์€ ๋‹ค๋ฅธ ๋ชฉ์ ์„ ๊ฐ€์ง„๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด, HEADERS์™€ DATA ํ”„๋ ˆ์ž„์€ HTTP ์š”์ฒญ๊ณผ ์‘๋‹ต์˜ ๊ธฐ์ดˆ๋ฅผ ํ˜•์„ฑํ•œ๋‹ค(์„น์…˜ 8.1); SETTINGS, WINDOW_UPDATE, PUSH_PROMISE์™€ ๊ฐ™์€ ๋‹ค๋ฅธ ํ”„๋ ˆ์ž„ ์œ ํ˜•์€ HTTP/2์˜ ๋‹ค๋ฅธ ๊ธฐ๋Šฅ์„ ์ง€์›ํ•˜๋Š” ๋ฐ ์‚ฌ์šฉ๋œ๋‹ค.

์š”์ฒญ์˜ ๋‹ค์ค‘ํ™”๋Š” ๊ฐ HTTP ์š”์ฒญ/์‘๋‹ต ๊ตํ™˜์„ ๊ณ ์œ ํ•œ ์ŠคํŠธ๋ฆผ(์„น์…˜ 5)๊ณผ ์—ฐ๊ด€์‹œ์ผœ ์ด๋ฃจ์–ด์ง„๋‹ค. ์ŠคํŠธ๋ฆผ์€ ์„œ๋กœ ๋Œ€๋ถ€๋ถ„ ๋…๋ฆฝ์ ์ด๋ฏ€๋กœ, ํ•˜๋‚˜์˜ ์š”์ฒญ์ด๋‚˜ ์‘๋‹ต์ด ์ฐจ๋‹จ๋˜๊ฑฐ๋‚˜ ์ •์ฒด๋˜์–ด๋„ ๋‹ค๋ฅธ ์ŠคํŠธ๋ฆผ์˜ ์ง„ํ–‰์„ ๋ง‰์ง€ ์•Š๋Š”๋‹ค.

๋‹ค์ค‘ํ™”์˜ ํšจ๊ณผ์ ์ธ ์‚ฌ์šฉ์€ ํ๋ฆ„ ์ œ์–ด์™€ ์šฐ์„ ์ˆœ์œ„ ์ง€์ •์— ๋‹ฌ๋ ค ์žˆ๋‹ค. ํ๋ฆ„ ์ œ์–ด(์„น์…˜ 5.2)๋Š” ์ˆ˜์‹ ์ž๊ฐ€ ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์žˆ๋Š” ๋ฒ”์œ„๋กœ ์ „์†ก๋˜๋Š” ๋ฐ์ดํ„ฐ๋ฅผ ์ œํ•œํ•˜์—ฌ ๋‹ค์ค‘ํ™”๋œ ์ŠคํŠธ๋ฆผ์„ ํšจ์œจ์ ์œผ๋กœ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋„๋ก ๋ณด์žฅํ•œ๋‹ค. ์šฐ์„ ์ˆœ์œ„ ์ง€์ •(์„น์…˜ 5.3)์€ ์ œํ•œ๋œ ์ž์›์ด ๊ฐ€์žฅ ํšจ๊ณผ์ ์œผ๋กœ ์‚ฌ์šฉ๋˜๋„๋ก ๋ณด์žฅํ•œ๋‹ค. ์ด HTTP/2 ๊ฐœ์ •ํŒ์€ [RFC7540]์˜ ์šฐ์„ ์ˆœ์œ„ ์‹ ํ˜ธ ๋ฐฉ์‹์„ ๋” ์ด์ƒ ๊ถŒ์žฅํ•˜์ง€ ์•Š๋Š”๋‹ค.

์—ฐ๊ฒฐ์—์„œ ์‚ฌ์šฉ๋˜๋Š” HTTP ํ•„๋“œ์—๋Š” ์ค‘๋ณต ๋ฐ์ดํ„ฐ๊ฐ€ ๋งŽ์ด ํฌํ•จ๋  ์ˆ˜ ์žˆ์œผ๋ฏ€๋กœ, ๊ทธ๊ฒƒ๋“ค์„ ํฌํ•จํ•˜๋Š” ํ”„๋ ˆ์ž„์€ ์••์ถ•๋œ๋‹ค(์„น์…˜ 4.3). ์ด๋Š” ์ผ๋ฐ˜์ ์ธ ๊ฒฝ์šฐ ์š”์ฒญ ํฌ๊ธฐ์— ํŠนํžˆ ์œ ๋ฆฌํ•˜์—ฌ ์—ฌ๋Ÿฌ ์š”์ฒญ์„ ํ•˜๋‚˜์˜ ํŒจํ‚ท์œผ๋กœ ์••์ถ•ํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•œ๋‹ค.

๋งˆ์ง€๋ง‰์œผ๋กœ, HTTP/2๋Š” ์„œ๋ฒ„๊ฐ€ ํด๋ผ์ด์–ธํŠธ์— ์‘๋‹ต์„ ํ‘ธ์‹œํ•  ์ˆ˜ ์žˆ๋Š” ์„ ํƒ์  ์ƒํ˜ธ์ž‘์šฉ ๋ชจ๋“œ๋ฅผ ์ถ”๊ฐ€ํ•œ๋‹ค(์„น์…˜ 8.4). ์ด๋Š” ์„œ๋ฒ„๊ฐ€ ํด๋ผ์ด์–ธํŠธ๊ฐ€ ํ•„์š”๋กœ ํ•  ๊ฒƒ์œผ๋กœ ์˜ˆ์ƒ๋˜๋Š” ๋ฐ์ดํ„ฐ๋ฅผ ์ถ”์ธกํ•˜์—ฌ ๋ณด๋‚ด๋Š” ๊ฒƒ์œผ๋กœ, ์ž ์žฌ์  ์ง€์—ฐ ์ด๋“์„ ์œ„ํ•ด ์ผ๋ถ€ ๋„คํŠธ์›Œํฌ ์‚ฌ์šฉ์„ ๊ฑฐ๋ž˜ํ•˜๋Š” ๊ฒƒ์ด๋‹ค. ์„œ๋ฒ„๋Š” ์ด๋ฅผ ํ•ฉ์„ฑ๋œ ์š”์ฒญ์„ ์ƒ์„ฑํ•˜์—ฌ PUSH_PROMISE ํ”„๋ ˆ์ž„์œผ๋กœ ์ „์†กํ•จ์œผ๋กœ์จ ์ˆ˜ํ–‰ํ•œ๋‹ค. ๊ทธ๋Ÿฐ ๋‹ค์Œ ์„œ๋ฒ„๋Š” ๋ณ„๋„์˜ ์ŠคํŠธ๋ฆผ์—์„œ ํ•ฉ์„ฑ ์š”์ฒญ์— ๋Œ€ํ•œ ์‘๋‹ต์„ ๋ณด๋‚ผ ์ˆ˜ ์žˆ๋‹ค.

2.1. ๋ฌธ์„œ ๊ตฌ์„ฑ

HTTP/2 ๋ช…์„ธ์„œ๋Š” ๋„ค ๋ถ€๋ถ„์œผ๋กœ ๋‚˜๋‰œ๋‹ค:

  • Starting HTTP/2 (์„น์…˜ 3)๋Š” HTTP/2 ์—ฐ๊ฒฐ์ด ์–ด๋–ป๊ฒŒ ์‹œ์ž‘๋˜๋Š”์ง€๋ฅผ ๋‹ค๋ฃฌ๋‹ค.
  • ํ”„๋ ˆ์ž„(์„น์…˜ 4) ๋ฐ ์ŠคํŠธ๋ฆผ(์„น์…˜ 5) ๋ ˆ์ด์–ด๋Š” HTTP/2 ํ”„๋ ˆ์ž„์ด ์–ด๋–ป๊ฒŒ ๊ตฌ์กฐํ™”๋˜๊ณ  ๋‹ค์ค‘ํ™”๋œ ์ŠคํŠธ๋ฆผ์œผ๋กœ ํ˜•์„ฑ๋˜๋Š”์ง€๋ฅผ ์„ค๋ช…ํ•œ๋‹ค.
  • ํ”„๋ ˆ์ž„(์„น์…˜ 6) ๋ฐ ์˜ค๋ฅ˜(์„น์…˜ 7) ์ •์˜์—๋Š” HTTP/2์—์„œ ์‚ฌ์šฉ๋˜๋Š” ํ”„๋ ˆ์ž„ ๋ฐ ์˜ค๋ฅ˜ ์œ ํ˜•์˜ ์„ธ๋ถ€์‚ฌํ•ญ์ด ํฌํ•จ๋œ๋‹ค.
  • HTTP ๋งคํ•‘(์„น์…˜ 8)๊ณผ ์ถ”๊ฐ€ ์š”๊ตฌ์‚ฌํ•ญ(์„น์…˜ 9)์€ ํ”„๋ ˆ์ž„๊ณผ ์ŠคํŠธ๋ฆผ์„ ์‚ฌ์šฉํ•˜์—ฌ HTTP ์˜๋ฏธ๋ก ์ด ์–ด๋–ป๊ฒŒ ํ‘œํ˜„๋˜๋Š”์ง€๋ฅผ ์„ค๋ช…ํ•œ๋‹ค.

์ผ๋ถ€ ํ”„๋ ˆ์ž„ ๋ฐ ์ŠคํŠธ๋ฆผ ๊ณ„์ธต ๊ฐœ๋…์€ HTTP๋กœ๋ถ€ํ„ฐ ๋ถ„๋ฆฌ๋˜์–ด ์žˆ์ง€๋งŒ, ์ด ๋ช…์„ธ์„œ๋Š” ์™„์ „ํžˆ ์ผ๋ฐ˜์ ์ธ ํ”„๋ ˆ์ž„ ๊ณ„์ธต์„ ์ •์˜ํ•˜์ง€๋Š” ์•Š๋Š”๋‹ค. ํ”„๋ ˆ์ž„ ๋ฐ ์ŠคํŠธ๋ฆผ ๋ ˆ์ด์–ด๋Š” HTTP์˜ ํ•„์š”์— ๋งž๊ฒŒ ์กฐ์ •๋˜์–ด ์žˆ๋‹ค.

2.2. ๊ด€๋ก€ ๋ฐ ์šฉ์–ด

์ด ๋ฌธ์„œ์—์„œ์˜ ํ•ต์‹ฌ ๋‹จ์–ด "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", "SHOULD", "SHOULD NOT", "RECOMMENDED", "NOT RECOMMENDED", "MAY", ๋ฐ "OPTIONAL"์€ ๋ชจ๋‘ ๋Œ€๋ฌธ์ž๋กœ ๋‚˜ํƒ€๋‚  ๋•Œ์— ํ•œํ•ด BCP 14 [RFC2119] ๋ฐ [RFC8174]์— ์„ค๋ช…๋œ ๋Œ€๋กœ ํ•ด์„๋˜์–ด์•ผ ํ•œ๋‹ค.

๋ชจ๋“  ์ˆซ์ž ๊ฐ’์€ ๋„คํŠธ์›Œํฌ ๋ฐ”์ดํŠธ ์ˆœ์„œ์ด๋‹ค. ๊ฐ’์€ ๋ณ„๋„๋กœ ๋ช…์‹œ๋˜์ง€ ์•Š๋Š” ํ•œ ๋ถ€ํ˜ธ ์—†๋Š” ๊ฐ’์ด๋‹ค. ๋ฆฌํ„ฐ๋Ÿด ๊ฐ’์€ ์ ์ ˆํ•˜๊ฒŒ ์‹ญ์ง„์ˆ˜ ๋˜๋Š” 16์ง„์ˆ˜๋กœ ์ œ๊ณต๋œ๋‹ค. 16์ง„์ˆ˜ ๋ฆฌํ„ฐ๋Ÿด์€ ์‹ญ์ง„์ˆ˜ ๋ฆฌํ„ฐ๋Ÿด๊ณผ ๊ตฌ๋ณ„ํ•˜๊ธฐ ์œ„ํ•ด "0x"๋กœ ์ ‘๋‘๋œ๋‹ค.

์ด ๋ช…์„ธ์„œ๋Š” ์ด์ง„ ํ˜•์‹์„ ์„ค๋ช…ํ•  ๋•Œ RFC 9000์˜ ์„น์…˜ 1.3์— ์„ค๋ช…๋œ ๊ด€๋ก€๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค. ์ด ํ˜•์‹์€ ๋„คํŠธ์›Œํฌ ๋ฐ”์ดํŠธ ์ˆœ์„œ๋ฅผ ์‚ฌ์šฉํ•˜๋ฉฐ ๋†’์€ ๊ฐ’์˜ ๋น„ํŠธ๊ฐ€ ๋‚ฎ์€ ๊ฐ’์˜ ๋น„ํŠธ๋ณด๋‹ค ๋จผ์ € ํ‘œ๊ธฐ๋œ๋‹ค๋Š” ์ ์— ์œ ์˜ํ•˜๋ผ.

๋‹ค์Œ ์šฉ์–ด๋“ค์ด ์‚ฌ์šฉ๋œ๋‹ค:

client:
HTTP/2 ์—ฐ๊ฒฐ์„ ์‹œ์ž‘ํ•˜๋Š” ์—”๋“œํฌ์ธํŠธ. ํด๋ผ์ด์–ธํŠธ๋Š” HTTP ์š”์ฒญ์„ ๋ณด๋‚ด๊ณ  HTTP ์‘๋‹ต์„ ์ˆ˜์‹ ํ•œ๋‹ค.
connection:
๋‘ ์—”๋“œํฌ์ธํŠธ ๊ฐ„์˜ ์ „์†ก ๊ณ„์ธต ์—ฐ๊ฒฐ.
connection error:
์ „์ฒด HTTP/2 ์—ฐ๊ฒฐ์— ์˜ํ–ฅ์„ ๋ฏธ์น˜๋Š” ์˜ค๋ฅ˜.
endpoint:
์—ฐ๊ฒฐ์˜ ํด๋ผ์ด์–ธํŠธ ๋˜๋Š” ์„œ๋ฒ„ ์ค‘ ํ•˜๋‚˜.
frame:
ํ”„๋ ˆ์ž„ ์œ ํ˜•์— ๋”ฐ๋ผ ๊ตฌ์กฐํ™”๋œ ํ—ค๋”์™€ ๊ฐ€๋ณ€ ๊ธธ์ด ์˜ฅํ…Ÿ ์‹œํ€€์Šค๋กœ ๊ตฌ์„ฑ๋œ HTTP/2 ์—ฐ๊ฒฐ ๋‚ด์˜ ๊ฐ€์žฅ ์ž‘์€ ํ†ต์‹  ๋‹จ์œ„.
peer:
์—”๋“œํฌ์ธํŠธ. ํŠน์ • ์—”๋“œํฌ์ธํŠธ๋ฅผ ๋…ผํ•  ๋•Œ "peer"๋Š” ๋…ผ์˜์˜ ์ฃผ์ฒด์— ์›๊ฒฉ์ธ ์—”๋“œํฌ์ธํŠธ๋ฅผ ๊ฐ€๋ฆฌํ‚จ๋‹ค.
receiver:
ํ”„๋ ˆ์ž„์„ ์ˆ˜์‹ ํ•˜๋Š” ์—”๋“œํฌ์ธํŠธ.
sender:
ํ”„๋ ˆ์ž„์„ ์ „์†กํ•˜๋Š” ์—”๋“œํฌ์ธํŠธ.
server:
HTTP/2 ์—ฐ๊ฒฐ์„ ์ˆ˜๋ฝํ•˜๋Š” ์—”๋“œํฌ์ธํŠธ. ์„œ๋ฒ„๋Š” HTTP ์š”์ฒญ์„ ์ˆ˜์‹ ํ•˜๊ณ  HTTP ์‘๋‹ต์„ ์ „์†กํ•œ๋‹ค.
stream:
HTTP/2 ์—ฐ๊ฒฐ ๋‚ด์˜ ์–‘๋ฐฉํ–ฅ ํ”„๋ ˆ์ž„ ํ๋ฆ„.
stream error:
๊ฐœ๋ณ„ HTTP/2 ์ŠคํŠธ๋ฆผ์˜ ์˜ค๋ฅ˜.

๋งˆ์ง€๋ง‰์œผ๋กœ, "gateway", "intermediary", "proxy", ๋ฐ "tunnel" ์šฉ์–ด๋Š” RFC 9110์˜ ์„น์…˜ 3.7์— ์ •์˜๋˜์–ด ์žˆ๋‹ค. ์ค‘๊ฐœ์ž๋Š” ๋‹ค๋ฅธ ์‹œ์ ์— ํด๋ผ์ด์–ธํŠธ์ด์ž ์„œ๋ฒ„๋กœ ๋™์ž‘ํ•  ์ˆ˜ ์žˆ๋‹ค.

๋ฉ”์‹œ์ง€ ๋ณธ๋ฌธ์— ์ ์šฉ๋˜๋Š” "content" ์šฉ์–ด๋Š” RFC 9110์˜ ์„น์…˜ 6.4์— ์ •์˜๋˜์–ด ์žˆ๋‹ค.


3. HTTP/2 ์‹œ์ž‘

HTTP ์š”์ฒญ์„ ์ƒ์„ฑํ•˜๋Š” ๊ตฌํ˜„์€ ์„œ๋ฒ„๊ฐ€ HTTP/2๋ฅผ ์ง€์›ํ•˜๋Š”์ง€ ์—ฌ๋ถ€๋ฅผ ๋ฐœ๊ฒฌํ•ด์•ผ ํ•œ๋‹ค.

HTTP/2๋Š” http ๋ฐ https URI ์Šคํ‚ด์„ ์‚ฌ์šฉํ•˜๋ฉฐ, ์ด๋Š” RFC 9110์˜ ์„น์…˜ 4.2์— ์ •์˜๋˜์–ด ์žˆ๊ณ  HTTP/1.1๊ณผ ๋™์ผํ•œ ๊ธฐ๋ณธ ํฌํŠธ ๋ฒˆํ˜ธ๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค. ์ด๋Ÿฌํ•œ URI๋Š” ์—…์ŠคํŠธ๋ฆผ ์„œ๋ฒ„(ํด๋ผ์ด์–ธํŠธ๊ฐ€ ์—ฐ๊ฒฐ์„ ์„ค์ •ํ•˜๋ ค๋Š” ์ฆ‰๊ฐ์ ์ธ ํ”ผ์–ด)๊ฐ€ ์–ด๋–ค HTTP ๋ฒ„์ „์„ ์ง€์›ํ•˜๋Š”์ง€์— ๋Œ€ํ•œ ํ‘œ์‹œ๋Š” ํฌํ•จํ•˜์ง€ ์•Š๋Š”๋‹ค.

HTTP/2 ์ง€์›์„ ๊ฒฐ์ •ํ•˜๋Š” ์ˆ˜๋‹จ์€ http์™€ https URI์— ๋Œ€ํ•ด ๋‹ค๋ฅด๋‹ค. "https" URI์— ๋Œ€ํ•œ ๊ฒ€์ƒ‰ ๋ฐฉ๋ฒ•์€ ์„น์…˜ 3.2์— ์„ค๋ช…๋˜์–ด ์žˆ๋‹ค. "http" URI์— ๋Œ€ํ•œ HTTP/2 ์ง€์›์€ ๋Œ€์—ญ ์™ธ ์ˆ˜๋‹จ์œผ๋กœ๋งŒ ๋ฐœ๊ฒฌํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ ์‚ฌ์ „ ์ง€์‹์ด ํ•„์š”ํ•˜๋‹ค(์ž์„ธํ•œ ๋‚ด์šฉ์€ ์„น์…˜ 3.3 ์ฐธ์กฐ).

3.1. HTTP/2 ๋ฒ„์ „ ์‹๋ณ„

์ด ๋ฌธ์„œ์—์„œ ์ •์˜ํ•œ ํ”„๋กœํ† ์ฝœ์€ ๋‘ ๊ฐ€์ง€ ์‹๋ณ„์ž๋ฅผ ๊ฐ€์ง„๋‹ค. ์–ด๋А ํ•˜๋‚˜์— ๊ธฐ๋ฐ˜ํ•œ ์—ฐ๊ฒฐ์„ ์ƒ์„ฑํ•˜๋Š” ๊ฒƒ์€ ์ด ๋ฌธ์„œ์— ์„ค๋ช…๋œ ์ „์†ก, ํ”„๋ ˆ์ด๋ฐ ๋ฐ ๋ฉ”์‹œ์ง€ ์˜๋ฏธ๋ก ์˜ ์‚ฌ์šฉ์„ ์˜๋ฏธํ•œ๋‹ค.

  • ๋ฌธ์ž์—ด "h2"๋Š” HTTP/2๊ฐ€ ์ „์†ก ๊ณ„์ธต ๋ณด์•ˆ(TLS)์„ ์‚ฌ์šฉํ•  ๋•Œ์˜ ํ”„๋กœํ† ์ฝœ์„ ์‹๋ณ„ํ•œ๋‹ค; ์ž์„ธํ•œ ๋‚ด์šฉ์€ ์„น์…˜ 9.2๋ฅผ ๋ณด๋ผ. ์ด ์‹๋ณ„์ž๋Š” TLS ALPN ํ™•์žฅ(TLS Application-Layer Protocol Negotiation (ALPN) extension) ํ•„๋“œ์™€ TLS ์œ„์—์„œ์˜ HTTP/2๊ฐ€ ์‹๋ณ„๋˜๋Š” ๋ชจ๋“  ์žฅ์†Œ์—์„œ ์‚ฌ์šฉ๋œ๋‹ค.

    "h2" ๋ฌธ์ž์—ด์€ ALPN ํ”„๋กœํ† ์ฝœ ์‹๋ณ„์ž๋กœ ๋‘ ์˜ฅํ…Ÿ ์‹œํ€€์Šค 0x68, 0x32๋กœ ์ง๋ ฌํ™”๋œ๋‹ค.

  • ๋ฌธ์ž์—ด "h2c"๋Š” ์ด์ „์— HTTP ์—…๊ทธ๋ ˆ์ด๋“œ ๋ฉ”์ปค๋‹ˆ์ฆ˜์˜ Upgrade ํ—ค๋” ํ•„๋“œ์—์„œ ํ† ํฐ์œผ๋กœ ์‚ฌ์šฉ๋˜์—ˆ๋‹ค(์ž์„ธํ•œ ๋‚ด์šฉ์€ RFC 9110์˜ ์„น์…˜ 7.8 ์ฐธ์กฐ). ์ด ์‚ฌ์šฉ์€ ๋„๋ฆฌ ๋ฐฐํฌ๋˜์ง€ ์•Š์•˜๊ณ  ์ด ๋ฌธ์„œ์— ์˜ํ•ด ์‚ฌ์šฉ ์ค‘๋‹จ(deprecated)๋˜์—ˆ๋‹ค. "h2c"๋กœ์˜ ์—…๊ทธ๋ ˆ์ด๋“œ์— ์‚ฌ์šฉ๋˜์—ˆ๋˜ HTTP2-Settings ํ—ค๋” ํ•„๋“œ๋„ ๋™์ผํ•˜๊ฒŒ ์‚ฌ์šฉ ์ค‘๋‹จ๋œ๋‹ค.

3.2. "https" URI์—์„œ HTTP/2 ์‹œ์ž‘

"https" URI์— ์š”์ฒญ์„ ํ•˜๋Š” ํด๋ผ์ด์–ธํŠธ๋Š” TLS ([TLS13])์„ ALPN ํ™•์žฅ(ALPN extension)๊ณผ ํ•จ๊ป˜ ์‚ฌ์šฉํ•œ๋‹ค.

TLS ์œ„์˜ HTTP/2๋Š” "h2" ํ”„๋กœํ† ์ฝœ ์‹๋ณ„์ž๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค. "h2c" ํ”„๋กœํ† ์ฝœ ์‹๋ณ„์ž๋Š” ํด๋ผ์ด์–ธํŠธ๊ฐ€ ์ „์†กํ•ด์„œ๋Š” ์•ˆ ๋˜๋ฉฐ(MUST NOT) ์„œ๋ฒ„๊ฐ€ ์„ ํƒํ•ด์„œ๋Š” ์•ˆ ๋œ๋‹ค; "h2c" ์‹๋ณ„์ž๋Š” TLS๋ฅผ ์‚ฌ์šฉํ•˜์ง€ ์•Š๋Š” ํ”„๋กœํ† ์ฝœ์„ ์„ค๋ช…ํ•œ๋‹ค.

TLS ํ˜‘์ƒ์ด ์™„๋ฃŒ๋˜๋ฉด, ํด๋ผ์ด์–ธํŠธ์™€ ์„œ๋ฒ„๋Š” ๊ฐ๊ฐ ์—ฐ๊ฒฐ ํ”„๋ฆฌํŽ˜์ด์Šค(์„น์…˜ 3.4)๋ฅผ ์ „์†กํ•ด์•ผ ํ•œ๋‹ค(MUST).

3.3. ์‚ฌ์ „ ์ง€์‹์œผ๋กœ HTTP/2 ์‹œ์ž‘

ํด๋ผ์ด์–ธํŠธ๋Š” ๋‹ค๋ฅธ ์ˆ˜๋‹จ์œผ๋กœ ํŠน์ • ์„œ๋ฒ„๊ฐ€ HTTP/2๋ฅผ ์ง€์›ํ•œ๋‹ค๋Š” ๊ฒƒ์„ ์•Œ ์ˆ˜ ์žˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด, ํด๋ผ์ด์–ธํŠธ๋Š” ์„œ๋ฒ„๊ฐ€ HTTP/2๋ฅผ ์ง€์›ํ•œ๋‹ค๋Š” ์‚ฌ์ „ ๊ตฌ์„ฑ ์ •๋ณด๋ฅผ ๊ฐ€์งˆ ์ˆ˜ ์žˆ๋‹ค.

์„œ๋ฒ„๊ฐ€ HTTP/2๋ฅผ ์ง€์›ํ•œ๋‹ค๋Š” ๊ฒƒ์„ ์•„๋Š” ํด๋ผ์ด์–ธํŠธ๋Š” TCP ์—ฐ๊ฒฐ์„ ์„ค์ •ํ•˜๊ณ  ์—ฐ๊ฒฐ ํ”„๋ฆฌํŽ˜์ด์Šค(์„น์…˜ 3.4)๋ฅผ ๋ณด๋‚ธ ๋‹ค์Œ HTTP/2 ํ”„๋ ˆ์ž„์„ ์ „์†กํ•  ์ˆ˜ ์žˆ๋‹ค. ์„œ๋ฒ„๋Š” ์—ฐ๊ฒฐ ํ”„๋ฆฌํŽ˜์ด์Šค์˜ ์กด์žฌ๋กœ ์ด๋Ÿฌํ•œ ์—ฐ๊ฒฐ์„ ์‹๋ณ„ํ•  ์ˆ˜ ์žˆ๋‹ค. ์ด๋Š” ํ‰๋ฌธ TCP ์œ„์˜ HTTP/2 ์—ฐ๊ฒฐ ์ˆ˜๋ฆฝ์—๋งŒ ์ ์šฉ๋œ๋‹ค; TLS ์œ„์˜ HTTP/2 ์—ฐ๊ฒฐ์€ TLS์—์„œ์˜ ํ”„๋กœํ† ์ฝœ ํ˜‘์ƒ์„ ์‚ฌ์šฉํ•ด์•ผ ํ•œ๋‹ค(MUST).

๋งˆ์ฐฌ๊ฐ€์ง€๋กœ, ์„œ๋ฒ„๋Š” ์—ฐ๊ฒฐ ํ”„๋ฆฌํŽ˜์ด์Šค(์„น์…˜ 3.4)๋ฅผ ์ „์†กํ•ด์•ผ ํ•œ๋‹ค(MUST).

์ถ”๊ฐ€ ์ •๋ณด ์—†์ด ๊ณผ๊ฑฐ์— HTTP/2๋ฅผ ์ง€์›ํ–ˆ์—ˆ๋‹ค๋Š” ์‚ฌ์‹ค๋งŒ์œผ๋กœ๋Š” ํ–ฅํ›„ ์—ฐ๊ฒฐ์—์„œ ํ•ด๋‹น ์„œ๋ฒ„๊ฐ€ HTTP/2๋ฅผ ์ง€์›ํ•  ๊ฒƒ์ด๋ผ๋Š” ๊ฐ•ํ•œ ์‹ ํ˜ธ๊ฐ€ ๋˜์ง€ ์•Š๋Š”๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด ์„œ๋ฒ„ ๊ตฌ์„ฑ์€ ๋ณ€๊ฒฝ๋  ์ˆ˜ ์žˆ๊ณ , ํด๋Ÿฌ์Šคํ„ฐ๋œ ์„œ๋ฒ„ ์ธ์Šคํ„ด์Šค ๊ฐ„์— ๊ตฌ์„ฑ์ด ๋‹ค๋ฅผ ์ˆ˜ ์žˆ์œผ๋ฉฐ, ๋„คํŠธ์›Œํฌ ์กฐ๊ฑด์ด ๋ณ€๊ฒฝ๋  ์ˆ˜ ์žˆ๋‹ค.

3.4. HTTP/2 ์—ฐ๊ฒฐ ํ”„๋ฆฌํŽ˜์ด์Šค

HTTP/2์—์„œ ๊ฐ ์—”๋“œํฌ์ธํŠธ๋Š” ์‚ฌ์šฉ ์ค‘์ธ ํ”„๋กœํ† ์ฝœ์„ ์ตœ์ข… ํ™•์ธํ•˜๊ณ  HTTP/2 ์—ฐ๊ฒฐ์˜ ์ดˆ๊ธฐ ์„ค์ •์„ ํ™•๋ฆฝํ•˜๊ธฐ ์œ„ํ•ด ์—ฐ๊ฒฐ ํ”„๋ฆฌํŽ˜์ด์Šค๋ฅผ ์ „์†กํ•ด์•ผ ํ•œ๋‹ค. ํด๋ผ์ด์–ธํŠธ์™€ ์„œ๋ฒ„๋Š” ๊ฐ๊ฐ ๋‹ค๋ฅธ ์—ฐ๊ฒฐ ํ”„๋ฆฌํŽ˜์ด์Šค๋ฅผ ์ „์†กํ•œ๋‹ค.

ํด๋ผ์ด์–ธํŠธ ์—ฐ๊ฒฐ ํ”„๋ฆฌํŽ˜์ด์Šค๋Š” 24 ์˜ฅํ…Ÿ์˜ ์‹œํ€€์Šค๋กœ ์‹œ์ž‘ํ•˜๋ฉฐ, 16์ง„ ํ‘œ๊ธฐ๋ฒ•์œผ๋กœ๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™๋‹ค:

  0x505249202a20485454502f322e300d0a0d0a534d0d0a0d0a

์ฆ‰, ์—ฐ๊ฒฐ ํ”„๋ฆฌํŽ˜์ด์Šค๋Š” ๋ฌธ์ž์—ด "PRI * HTTP/2.0\r\n\r\nSM\r\n\r\n"์œผ๋กœ ์‹œ์ž‘ํ•œ๋‹ค. ์ด ์‹œํ€€์Šค๋Š” SETTINGS ํ”„๋ ˆ์ž„(์„น์…˜ 6.5)์ด ๋’ค๋”ฐ๋ผ์•ผ ํ•˜๋ฉฐ, ์ด ํ”„๋ ˆ์ž„์€ ๋น„์–ด ์žˆ์„ ์ˆ˜ ์žˆ๋‹ค(MAY). ํด๋ผ์ด์–ธํŠธ๋Š” ํด๋ผ์ด์–ธํŠธ ์—ฐ๊ฒฐ ํ”„๋ฆฌํŽ˜์ด์Šค๋ฅผ ์—ฐ๊ฒฐ์˜ ์ฒซ ๋ฒˆ์งธ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๋ฐ์ดํ„ฐ ์˜ฅํ…Ÿ์œผ๋กœ ์ „์†กํ•œ๋‹ค.

์„œ๋ฒ„ ์—ฐ๊ฒฐ ํ”„๋ฆฌํŽ˜์ด์Šค๋Š” ์ž ์žฌ์ ์œผ๋กœ ๋น„์–ด ์žˆ์„ ์ˆ˜ ์žˆ๋Š” SETTINGS ํ”„๋ ˆ์ž„(์„น์…˜ 6.5)์œผ๋กœ ๊ตฌ์„ฑ๋˜๋ฉฐ, ์„œ๋ฒ„๊ฐ€ HTTP/2 ์—ฐ๊ฒฐ์—์„œ ๋ณด๋‚ด๋Š” ์ฒซ ๋ฒˆ์งธ ํ”„๋ ˆ์ž„์ด์–ด์•ผ ํ•œ๋‹ค(MUST).

์—ฐ๊ฒฐ ํ”„๋ฆฌํŽ˜์ด์Šค์˜ ์ผ๋ถ€๋กœ ํ”ผ์–ด๋กœ๋ถ€ํ„ฐ ์ˆ˜์‹ ๋œ SETTINGS ํ”„๋ ˆ์ž„์€ ์—ฐ๊ฒฐ ํ”„๋ฆฌํŽ˜์ด์Šค ์ „์†ก ํ›„์— ํ™•์ธ๋˜์–ด์•ผ ํ•œ๋‹ค(ํ™•์ธ ๋ฐฉ๋ฒ•์€ ์„น์…˜ 6.5.3 ์ฐธ์กฐ).

๋ถˆํ•„์š”ํ•œ ์ง€์—ฐ์„ ํ”ผํ•˜๊ธฐ ์œ„ํ•ด, ํด๋ผ์ด์–ธํŠธ๋Š” ์„œ๋ฒ„ ์—ฐ๊ฒฐ ํ”„๋ฆฌํŽ˜์ด์Šค๋ฅผ ๊ธฐ๋‹ค๋ฆฌ์ง€ ์•Š๊ณ  ํด๋ผ์ด์–ธํŠธ ์—ฐ๊ฒฐ ํ”„๋ฆฌํŽ˜์ด์Šค๋ฅผ ๋ณด๋‚ธ ์งํ›„์— ์ถ”๊ฐ€ ํ”„๋ ˆ์ž„์„ ์„œ๋ฒ„๋กœ ์ „์†กํ•  ์ˆ˜ ์žˆ๋‹ค. ๋‹ค๋งŒ ์„œ๋ฒ„์˜ ์—ฐ๊ฒฐ ํ”„๋ฆฌํŽ˜์ด์Šค SETTINGS ํ”„๋ ˆ์ž„์— ํด๋ผ์ด์–ธํŠธ๊ฐ€ ์„œ๋ฒ„์™€ ํ†ต์‹ ํ•˜๋Š” ๋ฐฉ์‹์— ์˜ํ–ฅ์„ ์ฃผ๋Š” ์„ค์ •์ด ํฌํ•จ๋  ์ˆ˜ ์žˆ๋‹ค๋Š” ์ ์„ ์ธ์ง€ํ•˜๋Š” ๊ฒƒ์ด ์ค‘์š”ํ•˜๋‹ค. SETTINGS ํ”„๋ ˆ์ž„์„ ์ˆ˜์‹ ํ•˜๋ฉด ํด๋ผ์ด์–ธํŠธ๋Š” ์„ค์ •์„ ์กด์ค‘ํ•ด์•ผ ํ•œ๋‹ค. ์ผ๋ถ€ ๊ตฌ์„ฑ์—์„œ๋Š” ์„œ๋ฒ„๊ฐ€ ํด๋ผ์ด์–ธํŠธ๊ฐ€ ์ถ”๊ฐ€ ํ”„๋ ˆ์ž„์„ ๋ณด๋‚ด๊ธฐ ์ „์— SETTINGS๋ฅผ ์ „์†กํ•  ์ˆ˜ ์žˆ์–ด ์ด ๋ฌธ์ œ๋ฅผ ํ”ผํ•  ์ˆ˜ ์žˆ๋‹ค.

ํด๋ผ์ด์–ธํŠธ์™€ ์„œ๋ฒ„๋Š” ์œ ํšจํ•˜์ง€ ์•Š์€ ์—ฐ๊ฒฐ ํ”„๋ฆฌํŽ˜์ด์Šค๋ฅผ ์—ฐ๊ฒฐ ์˜ค๋ฅ˜(์„น์…˜ 5.4.1)๋กœ ์ฒ˜๋ฆฌํ•ด์•ผ ํ•œ๋‹ค(MUST). ์ด ๊ฒฝ์šฐ ํ”ผ์–ด๊ฐ€ HTTP/2๋ฅผ ์‚ฌ์šฉํ•˜์ง€ ์•Š์Œ์„ ๋‚˜ํƒ€๋‚ด๋ฏ€๋กœ GOAWAY ํ”„๋ ˆ์ž„(์„น์…˜ 6.8)์€ ์ƒ๋žต๋  ์ˆ˜ ์žˆ๋‹ค(MAY).


4. HTTP ํ”„๋ ˆ์ž„

HTTP/2 ์—ฐ๊ฒฐ์ด ์„ค์ •๋˜๋ฉด ์—”๋“œํฌ์ธํŠธ๋“ค์€ ํ”„๋ ˆ์ž„ ๊ตํ™˜์„ ์‹œ์ž‘ํ•  ์ˆ˜ ์žˆ๋‹ค.

4.1. ํ”„๋ ˆ์ž„ ํ˜•์‹

๋ชจ๋“  ํ”„๋ ˆ์ž„์€ ๊ณ ์ • ๊ธธ์ด 9์˜ฅํ…Ÿ ํ—ค๋”๋กœ ์‹œ์ž‘ํ•˜๊ณ  ์ด์–ด์„œ ๊ฐ€๋ณ€ ๊ธธ์ด์˜ ํ”„๋ ˆ์ž„ ํŽ˜์ด๋กœ๋“œ๊ฐ€ ์˜จ๋‹ค.

HTTP Frame {
  Length (24),
  Type (8),

  Flags (8),

  Reserved (1),
  Stream Identifier (31),

  Frame Payload (..),
}

๊ทธ๋ฆผ 1: ํ”„๋ ˆ์ž„ ๋ ˆ์ด์•„์›ƒ

ํ”„๋ ˆ์ž„ ํ—ค๋”์˜ ํ•„๋“œ๋“ค์€ ๋‹ค์Œ๊ณผ ๊ฐ™์ด ์ •์˜๋œ๋‹ค:

Length:
ํ”„๋ ˆ์ž„ ํŽ˜์ด๋กœ๋“œ์˜ ๊ธธ์ด๋กœ, ์˜ฅํ…Ÿ ๋‹จ์œ„์˜ ๋ถ€ํ˜ธ ์—†๋Š” 24๋น„ํŠธ ์ •์ˆ˜๋กœ ํ‘œํ˜„๋œ๋‹ค. ์ˆ˜์‹ ์ž๊ฐ€ SETTINGS_MAX_FRAME_SIZE์— ๋Œ€ํ•ด ๋” ํฐ ๊ฐ’์„ ์„ค์ •ํ•˜์ง€ ์•Š์€ ํ•œ 214(16,384)๋ณด๋‹ค ํฐ ๊ฐ’์€ ์ „์†กํ•ด์„œ๋Š” ์•ˆ ๋œ๋‹ค(MUST NOT).
ํ”„๋ ˆ์ž„ ํ—ค๋”์˜ 9 ์˜ฅํ…Ÿ์€ ์ด ๊ฐ’์— ํฌํ•จ๋˜์ง€ ์•Š๋Š”๋‹ค.
Type:
ํ”„๋ ˆ์ž„์˜ 8๋น„ํŠธ ์œ ํ˜•. ํ”„๋ ˆ์ž„ ์œ ํ˜•์€ ํ”„๋ ˆ์ž„์˜ ํ˜•์‹๊ณผ ์˜๋ฏธ๋ก ์„ ๊ฒฐ์ •ํ•œ๋‹ค. ๋ณธ ๋ฌธ์„œ์— ์ •์˜๋œ ํ”„๋ ˆ์ž„์€ ์„น์…˜ 6์— ์—ด๊ฑฐ๋˜์–ด ์žˆ๋‹ค. ๊ตฌํ˜„์ฒด๋Š” ์•Œ ์ˆ˜ ์—†๋Š” ์œ ํ˜•์˜ ํ”„๋ ˆ์ž„์„ ๋ฌด์‹œํ•˜๊ณ  ํ๊ธฐํ•ด์•ผ ํ•œ๋‹ค(MUST).
Flags:
ํ”„๋ ˆ์ž„ ์œ ํ˜•๋ณ„ ๋ถˆ๋ฆฌ์–ธ ํ”Œ๋ž˜๊ทธ๋ฅผ ์œ„ํ•ด ์˜ˆ์•ฝ๋œ 8๋น„ํŠธ ํ•„๋“œ.
ํ”Œ๋ž˜๊ทธ๋Š” ์ง€์ •๋œ ํ”„๋ ˆ์ž„ ์œ ํ˜•์— ๋Œ€ํ•ด ํŠน์ •ํ•œ ์˜๋ฏธ๋ฅผ ๊ฐ€์ง„๋‹ค. ์‚ฌ์šฉ๋˜์ง€ ์•Š๋Š” ํ”Œ๋ž˜๊ทธ๋Š” ํŠน์ • ํ”„๋ ˆ์ž„ ์œ ํ˜•์— ๋Œ€ํ•ด ์ •์˜๋œ ์˜๋ฏธ๊ฐ€ ์—†๋Š” ํ”Œ๋ž˜๊ทธ๋“ค์ด๋‹ค. ์‚ฌ์šฉ๋˜์ง€ ์•Š๋Š” ํ”Œ๋ž˜๊ทธ๋Š” ์ˆ˜์‹  ์‹œ ๋ฌด์‹œ๋˜์–ด์•ผ ํ•˜๊ณ (MUST), ์ „์†ก ์‹œ ์„ค์ •๋˜์ง€ ์•Š์€ ์ƒํƒœ(0x00)๋กœ ๋‚จ๊ฒจ์ ธ์•ผ ํ•œ๋‹ค(MUST).
Reserved:
์˜ˆ์•ฝ๋œ 1๋น„ํŠธ ํ•„๋“œ. ์ด ๋น„ํŠธ์˜ ์˜๋ฏธ๋ก ์€ ์ •์˜๋˜์–ด ์žˆ์ง€ ์•Š์œผ๋ฉฐ, ์ „์†ก ์‹œ์—๋Š” 0x00์œผ๋กœ ์„ค์ •๋˜์–ด ์žˆ์–ด์•ผ ํ•˜๊ณ (MUST), ์ˆ˜์‹  ์‹œ์—๋Š” ๋ฌด์‹œ๋˜์–ด์•ผ ํ•œ๋‹ค(MUST).
Stream Identifier:
์ŠคํŠธ๋ฆผ ์‹๋ณ„์ž(์ž์„ธํ•œ ๋‚ด์šฉ์€ ์„น์…˜ 5.1.1 ์ฐธ์กฐ)๋กœ, ๋ถ€ํ˜ธ ์—†๋Š” 31๋น„ํŠธ ์ •์ˆ˜๋กœ ํ‘œํ˜„๋œ๋‹ค. ๊ฐ’ 0x00์€ ๊ฐœ๋ณ„ ์ŠคํŠธ๋ฆผ์ด ์•„๋‹Œ ์ „์ฒด ์—ฐ๊ฒฐ๊ณผ ์—ฐ๊ด€๋œ ํ”„๋ ˆ์ž„์— ์˜ˆ์•ฝ๋˜์–ด ์žˆ๋‹ค.

ํ”„๋ ˆ์ž„ ํŽ˜์ด๋กœ๋“œ์˜ ๊ตฌ์กฐ์™€ ๋‚ด์šฉ์€ ์ „์ ์œผ๋กœ ํ”„๋ ˆ์ž„ ์œ ํ˜•์— ์˜์กดํ•œ๋‹ค.

4.2. ํ”„๋ ˆ์ž„ ํฌ๊ธฐ

ํ”„๋ ˆ์ž„ ํŽ˜์ด๋กœ๋“œ์˜ ํฌ๊ธฐ๋Š” ์ˆ˜์‹ ์ž๊ฐ€ SETTINGS_MAX_FRAME_SIZE ์„ค์ •์—์„œ ๊ด‘๊ณ ํ•œ ์ตœ๋Œ€ ํฌ๊ธฐ๋กœ ์ œํ•œ๋œ๋‹ค. ์ด ์„ค์ •์€ 214(16,384)์—์„œ 224-1(16,777,215) ์˜ฅํ…Ÿ ์‚ฌ์ด์˜ ์–ด๋–ค ๊ฐ’์ด๋“  ๊ฐ€์งˆ ์ˆ˜ ์žˆ๋‹ค.

๋ชจ๋“  ๊ตฌํ˜„์ฒด๋Š” 214 ์˜ฅํ…Ÿ ๊ธธ์ด์˜ ํ”„๋ ˆ์ž„(ํ”„๋ ˆ์ž„ ํ—ค๋” 9์˜ฅํ…Ÿ ์ œ์™ธ)์„ ์ˆ˜์‹ ํ•˜๊ณ  ์ตœ์†Œํ•œ ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์žˆ์–ด์•ผ ํ•œ๋‹ค(MUST). ํ”„๋ ˆ์ž„ ํฌ๊ธฐ๋ฅผ ์„ค๋ช…ํ•  ๋•Œ ํ”„๋ ˆ์ž„ ํ—ค๋”์˜ ํฌ๊ธฐ๋Š” ํฌํ•จ๋˜์ง€ ์•Š๋Š”๋‹ค.

ํ”„๋ ˆ์ž„์ด SETTINGS_MAX_FRAME_SIZE์— ์ •์˜๋œ ํฌ๊ธฐ๋ฅผ ์ดˆ๊ณผํ•˜๊ฑฐ๋‚˜ ํ”„๋ ˆ์ž„ ์œ ํ˜•์— ๋Œ€ํ•ด ์ •์˜๋œ ์–ด๋–ค ์ œํ•œ์„ ์ดˆ๊ณผํ•˜๊ฑฐ๋‚˜ ํ•„์ˆ˜ ํ”„๋ ˆ์ž„ ๋ฐ์ดํ„ฐ๋ฅผ ๋‹ด๊ธฐ์—๋Š” ๋„ˆ๋ฌด ์ž‘์œผ๋ฉด ์—”๋“œํฌ์ธํŠธ๋Š” FRAME_SIZE_ERROR ์˜ค๋ฅ˜ ์ฝ”๋“œ๋ฅผ ์ „์†กํ•ด์•ผ ํ•œ๋‹ค(MUST). ์ „์ฒด ์—ฐ๊ฒฐ์˜ ์ƒํƒœ๋ฅผ ๋ณ€๊ฒฝํ•  ์ˆ˜ ์žˆ๋Š” ํ”„๋ ˆ์ž„์—์„œ์˜ ํ”„๋ ˆ์ž„ ํฌ๊ธฐ ์˜ค๋ฅ˜๋Š” ์—ฐ๊ฒฐ ์˜ค๋ฅ˜(์„น์…˜ 5.4.1)๋กœ ์ฒ˜๋ฆฌ๋˜์–ด์•ผ ํ•œ๋‹ค(MUST); ์—ฌ๊ธฐ์—๋Š” ํ•„๋“œ ๋ธ”๋ก์„ ๋‹ด๋Š” ํ”„๋ ˆ์ž„(์„น์…˜ 4.3)(์ฆ‰, HEADERS, PUSH_PROMISE, ๋ฐ CONTINUATION), SETTINGS ํ”„๋ ˆ์ž„, ๋ฐ ์ŠคํŠธ๋ฆผ ์‹๋ณ„์ž๊ฐ€ 0์ธ ๋ชจ๋“  ํ”„๋ ˆ์ž„์ด ํฌํ•จ๋œ๋‹ค.

์—”๋“œํฌ์ธํŠธ๋Š” ํ”„๋ ˆ์ž„์—์„œ ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•œ ๋ชจ๋“  ๊ณต๊ฐ„์„ ๋ฐ˜๋“œ์‹œ ์‚ฌ์šฉํ•ด์•ผ ํ•˜๋Š” ๊ฒƒ์€ ์•„๋‹ˆ๋‹ค. ํ—ˆ์šฉ๋œ ์ตœ๋Œ€ ํฌ๊ธฐ๋ณด๋‹ค ์ž‘์€ ํ”„๋ ˆ์ž„์„ ์‚ฌ์šฉํ•˜๋ฉด ์‘๋‹ต์„ฑ์ด ํ–ฅ์ƒ๋  ์ˆ˜ ์žˆ๋‹ค. ํฐ ํ”„๋ ˆ์ž„์„ ์ „์†กํ•˜๋ฉด ์‹œ๊ธฐ ๋ฏผ๊ฐํ•œ ํ”„๋ ˆ์ž„(์˜ˆ: RST_STREAM, WINDOW_UPDATE, ๋˜๋Š” PRIORITY)์˜ ์ „์†ก์ด ์ง€์—ฐ๋  ์ˆ˜ ์žˆ์œผ๋ฉฐ, ํฐ ํ”„๋ ˆ์ž„์˜ ์ „์†ก์œผ๋กœ ์ฐจ๋‹จ๋˜๋ฉด ์„ฑ๋Šฅ์— ์˜ํ–ฅ์„ ์ค„ ์ˆ˜ ์žˆ๋‹ค.

4.3. ํ•„๋“œ ์„น์…˜ ์••์ถ• ๋ฐ ์••์ถ• ํ•ด์ œ

ํ•„๋“œ ์„น์…˜ ์••์ถ•์€ ํ•„๋“œ ๋ผ์ธ ์ง‘ํ•ฉ(RFC 9110 ์„น์…˜ 5.2 ์ฐธ์กฐ)์„ ์••์ถ•ํ•˜์—ฌ ํ•„๋“œ ๋ธ”๋ก์„ ํ˜•์„ฑํ•˜๋Š” ๊ณผ์ •์ด๋‹ค. ํ•„๋“œ ์„น์…˜ ์••์ถ• ํ•ด์ œ๋Š” ํ•„๋“œ ๋ธ”๋ก์„ ํ•„๋“œ ๋ผ์ธ ์ง‘ํ•ฉ์œผ๋กœ ๋””์ฝ”๋”ฉํ•˜๋Š” ๊ณผ์ •์ด๋‹ค. HTTP/2 ํ•„๋“œ ์„น์…˜์˜ ์••์ถ• ๋ฐ ์••์ถ• ํ•ด์ œ์— ๋Œ€ํ•œ ์„ธ๋ถ€์‚ฌํ•ญ์€ [COMPRESSION]์—์„œ ์ •์˜๋˜๋ฉฐ, ์—ญ์‚ฌ์  ์ด์œ ๋กœ ์ด ๊ณผ์ •๋“ค์„ ํ—ค๋” ์••์ถ• ๋ฐ ์••์ถ• ํ•ด์ œ๋ผ ๋ถ€๋ฅธ๋‹ค.

๊ฐ ํ•„๋“œ ๋ธ”๋ก์€ ๋‹จ์ผ ํ•„๋“œ ์„น์…˜์˜ ๋ชจ๋“  ์••์ถ•๋œ ํ•„๋“œ ๋ผ์ธ์„ ์šด๋ฐ˜ํ•œ๋‹ค. ํ—ค๋” ์„น์…˜์€ ์˜์‚ฌ-ํ—ค๋” ํ•„๋“œ ํ˜•ํƒœ์˜ ๋ฉ”์‹œ์ง€ ๊ด€๋ จ ์ œ์–ด ๋ฐ์ดํ„ฐ๋ฅผ ํฌํ•จํ•˜๋ฉฐ(์„น์…˜ 8.3), ์ด๋Š” ํ•„๋“œ ๋ผ์ธ๊ณผ ๋™์ผํ•œ ํ˜•์‹์„ ์‚ฌ์šฉํ•œ๋‹ค.

ํ•„๋“œ ๋ธ”๋ก์€ ์š”์ฒญ, ์‘๋‹ต, ์•ฝ์†๋œ ์š”์ฒญ ๋ฐ ํ‘ธ์‹œ๋œ ์‘๋‹ต์˜ ์ œ์–ด ๋ฐ์ดํ„ฐ์™€ ํ—ค๋” ์„น์…˜์„ ์šด๋ฐ˜ํ•œ๋‹ค(์ž์„ธํ•œ ๋‚ด์šฉ์€ ์„น์…˜ 8.4 ์ฐธ์กฐ). ์ž„์‹œ ์‘๋‹ต ๋ฐ PUSH_PROMISE(์„น์…˜ 6.6) ํ”„๋ ˆ์ž„์— ํฌํ•จ๋œ ์š”์ฒญ์„ ์ œ์™ธํ•œ ๋ชจ๋“  ์ด๋Ÿฌํ•œ ๋ฉ”์‹œ์ง€๋Š” ์„ ํƒ์ ์œผ๋กœ ํŠธ๋ ˆ์ผ๋Ÿฌ ์„น์…˜์„ ์šด๋ฐ˜ํ•˜๋Š” ํ•„๋“œ ๋ธ”๋ก์„ ํฌํ•จํ•  ์ˆ˜ ์žˆ๋‹ค.

ํ•„๋“œ ์„น์…˜์€ ํ•„๋“œ ๋ผ์ธ์˜ ๋ชจ์Œ์ด๋‹ค. ํ•„๋“œ ๋ธ”๋ก์˜ ๊ฐ ํ•„๋“œ ๋ผ์ธ์€ ๋‹จ์ผ ๊ฐ’์„ ์šด๋ฐ˜ํ•œ๋‹ค. ์ง๋ ฌํ™”๋œ ํ•„๋“œ ๋ธ”๋ก์€ ํ•„๋“œ ๋ธ”๋ก ์กฐ๊ฐ์ด๋ผ๊ณ  ๋ถˆ๋ฆฌ๋Š” ํ•˜๋‚˜ ์ด์ƒ์˜ ์˜ฅํ…Ÿ ์‹œํ€€์Šค๋กœ ๋‚˜๋‰˜์–ด์ง„๋‹ค. ์ฒซ ๋ฒˆ์งธ ํ•„๋“œ ๋ธ”๋ก ์กฐ๊ฐ์€ HEADERS(์„น์…˜ 6.2) ๋˜๋Š” PUSH_PROMISE(์„น์…˜ 6.6) ํ”„๋ ˆ์ž„์˜ ํ”„๋ ˆ์ž„ ํŽ˜์ด๋กœ๋“œ ๋‚ด์—์„œ ์ „์†ก๋˜๋ฉฐ, ์ดํ›„์˜ ํ•„๋“œ ๋ธ”๋ก ์กฐ๊ฐ์€ CONTINUATION(์„น์…˜ 6.10) ํ”„๋ ˆ์ž„๋“ค์— ์˜ํ•ด ์šด๋ฐ˜๋  ์ˆ˜ ์žˆ๋‹ค.

Cookie header field๋Š” HTTP ๋งคํ•‘์—์„œ ํŠน์ˆ˜ํ•˜๊ฒŒ ์ทจ๊ธ‰๋œ๋‹ค(์ž์„ธํ•œ ๋‚ด์šฉ์€ ์„น์…˜ 8.2.3 ์ฐธ์กฐ).

์ˆ˜์‹  ์—”๋“œํฌ์ธํŠธ๋Š” ์กฐ๊ฐ๋“ค์„ ์—ฐ๊ฒฐํ•˜์—ฌ ํ•„๋“œ ๋ธ”๋ก์„ ์žฌ์กฐ๋ฆฝํ•œ ๋‹ค์Œ ๋ธ”๋ก์„ ์••์ถ• ํ•ด์ œํ•˜์—ฌ ํ•„๋“œ ์„น์…˜์„ ์žฌ๊ตฌ์„ฑํ•œ๋‹ค.

์™„์ „ํ•œ ํ•„๋“œ ์„น์…˜์€ ๋‹ค์Œ ์ค‘ ํ•˜๋‚˜๋กœ ๊ตฌ์„ฑ๋œ๋‹ค:

  • END_HEADERS ํ”Œ๋ž˜๊ทธ๊ฐ€ ์„ค์ •๋œ ๋‹จ์ผ HEADERS ๋˜๋Š” PUSH_PROMISE ํ”„๋ ˆ์ž„, ๋˜๋Š”
  • END_HEADERS ํ”Œ๋ž˜๊ทธ๊ฐ€ ์„ค์ •๋˜์ง€ ์•Š์€ HEADERS ๋˜๋Š” PUSH_PROMISE ํ”„๋ ˆ์ž„๊ณผ ํ•˜๋‚˜ ์ด์ƒ์˜ CONTINUATION ํ”„๋ ˆ์ž„, ๋‹จ ๋งˆ์ง€๋ง‰ CONTINUATION ํ”„๋ ˆ์ž„์— END_HEADERS ํ”Œ๋ž˜๊ทธ๊ฐ€ ์„ค์ •๋˜์–ด ์žˆ๋Š” ๊ฒฝ์šฐ.

๊ฐ ํ•„๋“œ ๋ธ”๋ก์€ ๊ฐœ๋ณ„ ๋‹จ์œ„๋กœ ์ฒ˜๋ฆฌ๋œ๋‹ค. ํ•„๋“œ ๋ธ”๋ก์€ ๋‹ค๋ฅธ ์œ ํ˜•์˜ ํ”„๋ ˆ์ž„์ด๋‚˜ ๋‹ค๋ฅธ ์ŠคํŠธ๋ฆผ์˜ ํ”„๋ ˆ์ž„๊ณผ ๊ต์ฐจ๋˜์ง€ ์•Š๋Š” ์—ฐ์†์ ์ธ ํ”„๋ ˆ์ž„ ์‹œํ€€์Šค๋กœ ์ „์†ก๋˜์–ด์•ผ ํ•œ๋‹ค(MUST). HEADERS ๋˜๋Š” CONTINUATION ํ”„๋ ˆ์ž„ ์‹œํ€€์Šค์˜ ๋งˆ์ง€๋ง‰ ํ”„๋ ˆ์ž„์—๋Š” END_HEADERS ํ”Œ๋ž˜๊ทธ๊ฐ€ ์„ค์ •๋˜์–ด์•ผ ํ•œ๋‹ค. PUSH_PROMISE ๋˜๋Š” CONTINUATION ํ”„๋ ˆ์ž„ ์‹œํ€€์Šค์˜ ๋งˆ์ง€๋ง‰ ํ”„๋ ˆ์ž„์—๋„ END_HEADERS ํ”Œ๋ž˜๊ทธ๊ฐ€ ์„ค์ •๋˜์–ด์•ผ ํ•œ๋‹ค. ์ด๋Š” ํ•„๋“œ ๋ธ”๋ก์ด ๋…ผ๋ฆฌ์ ์œผ๋กœ ๋‹จ์ผ ํ”„๋ ˆ์ž„๊ณผ ๋™๋“ฑํ•˜๋„๋ก ํ•œ๋‹ค.

ํ•„๋“œ ๋ธ”๋ก ์กฐ๊ฐ์€ HEADERS, PUSH_PROMISE ๋˜๋Š” CONTINUATION ํ”„๋ ˆ์ž„์˜ ํ”„๋ ˆ์ž„ ํŽ˜์ด๋กœ๋“œ๋กœ๋งŒ ์ „์†ก๋  ์ˆ˜ ์žˆ๋‹ค. ์ด ํ”„๋ ˆ์ž„๋“ค์€ ์ˆ˜์‹ ์ž๊ฐ€ ์œ ์ง€ํ•˜๋Š” ์••์ถ• ์ปจํ…์ŠคํŠธ๋ฅผ ๋ณ€๊ฒฝํ•  ์ˆ˜ ์žˆ๋Š” ๋ฐ์ดํ„ฐ๋ฅผ ์šด๋ฐ˜ํ•˜๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค. HEADERS, PUSH_PROMISE ๋˜๋Š” CONTINUATION ํ”„๋ ˆ์ž„์„ ์ˆ˜์‹ ํ•˜๋Š” ์—”๋“œํฌ์ธํŠธ๋Š” ํ”„๋ ˆ์ž„์„ ํ๊ธฐํ•˜๋”๋ผ๋„ ํ•„๋“œ ๋ธ”๋ก์„ ์žฌ์กฐ๋ฆฝํ•˜๊ณ  ์••์ถ• ํ•ด์ œ๋ฅผ ์ˆ˜ํ–‰ํ•ด์•ผ ํ•œ๋‹ค. ์ˆ˜์‹ ์ž๊ฐ€ ํ•„๋“œ ๋ธ”๋ก์„ ์••์ถ• ํ•ด์ œํ•˜์ง€ ์•Š์œผ๋ฉด ์—ฐ๊ฒฐ ์˜ค๋ฅ˜(์„น์…˜ 5.4.1)์ธ COMPRESSION_ERROR๋กœ ์—ฐ๊ฒฐ์„ ์ข…๋ฃŒํ•ด์•ผ ํ•œ๋‹ค(MUST).

ํ•„๋“œ ๋ธ”๋ก์˜ ๋””์ฝ”๋”ฉ ์˜ค๋ฅ˜๋Š” ์—ฐ๊ฒฐ ์˜ค๋ฅ˜(์„น์…˜ 5.4.1)์ธ COMPRESSION_ERROR๋กœ ์ฒ˜๋ฆฌ๋˜์–ด์•ผ ํ•œ๋‹ค(MUST).

4.3.1. ์••์ถ• ์ƒํƒœ

ํ•„๋“œ ์••์ถ•์€ ์ƒํƒœ ๊ธฐ๋ฐ˜์ด๋‹ค. ๊ฐ ์—”๋“œํฌ์ธํŠธ๋Š” ์—ฐ๊ฒฐ์˜ ๋ชจ๋“  ํ•„๋“œ ๋ธ”๋ก์„ ์ธ์ฝ”๋”ฉํ•˜๊ณ  ๋””์ฝ”๋”ฉํ•˜๊ธฐ ์œ„ํ•ด HPACK ์ธ์ฝ”๋” ์ปจํ…์ŠคํŠธ์™€ HPACK ๋””์ฝ”๋” ์ปจํ…์ŠคํŠธ๋ฅผ ๊ฐ€์ง„๋‹ค. RFC 7541์˜ ์„น์…˜ 4๋Š” ๋™์  ํ…Œ์ด๋ธ”์„ ์ •์˜ํ•˜๋ฉฐ, ์ด๋Š” ๊ฐ ์ปจํ…์ŠคํŠธ์˜ ์ฃผ์š” ์ƒํƒœ์ด๋‹ค.

๋™์  ํ…Œ์ด๋ธ”์€ HPACK ๋””์ฝ”๋”๊ฐ€ ์„ค์ •ํ•˜๋Š” ์ตœ๋Œ€ ํฌ๊ธฐ๋ฅผ ๊ฐ€์ง„๋‹ค. ์—”๋“œํฌ์ธํŠธ๋Š” ์ž์‹ ์˜ HPACK ๋””์ฝ”๋” ์ปจํ…์ŠคํŠธ๊ฐ€ ์„ ํƒํ•œ ํฌ๊ธฐ๋ฅผ SETTINGS_HEADER_TABLE_SIZE ์„ค์ •์„ ์‚ฌ์šฉํ•˜์—ฌ ํ†ต์‹ ํ•œ๋‹ค(์ž์„ธํ•œ ๋‚ด์šฉ์€ ์„น์…˜ 6.5.2 ์ฐธ์กฐ). ์—ฐ๊ฒฐ์ด ์ˆ˜๋ฆฝ๋˜๋ฉด ์–‘์ชฝ ์—”๋“œํฌ์ธํŠธ์˜ HPACK ๋””์ฝ”๋”์™€ ์ธ์ฝ”๋”์˜ ๋™์  ํ…Œ์ด๋ธ” ํฌ๊ธฐ๋Š” SETTINGS_HEADER_TABLE_SIZE ์„ค์ •์˜ ์ดˆ๊ธฐ๊ฐ’์ธ 4,096 ๋ฐ”์ดํŠธ๋กœ ์‹œ์ž‘ํ•œ๋‹ค.

SETTINGS_HEADER_TABLE_SIZE๋ฅผ ์‚ฌ์šฉํ•ด ์„ค์ •๋œ ์ตœ๋Œ€๊ฐ’์˜ ๋ณ€๊ฒฝ์€ ์—”๋“œํฌ์ธํŠธ๊ฐ€ ์„ค์ •์„ ํ™•์ธํ•  ๋•Œ(์„น์…˜ 6.5.3) ํšจ๋ ฅ์ด ๋ฐœ์ƒํ•œ๋‹ค. ํ•ด๋‹น ์—”๋“œํฌ์ธํŠธ์˜ HPACK ์ธ์ฝ”๋”๋Š” ๋””์ฝ”๋”๊ฐ€ ์„ค์ •ํ•œ ์ตœ๋Œ€๊ฐ’๊นŒ์ง€ ์ž„์˜์˜ ํฌ๊ธฐ๋กœ ๋™์  ํ…Œ์ด๋ธ”์„ ์„ค์ •ํ•  ์ˆ˜ ์žˆ๋‹ค. HPACK ์ธ์ฝ”๋”๋Š” Dynamic Table Size Update ์ง€์‹œ์–ด(RFC 7541 ์„น์…˜ 6.3)๋กœ ๋™์  ํ…Œ์ด๋ธ”์˜ ํฌ๊ธฐ๋ฅผ ์„ ์–ธํ•œ๋‹ค.

์—”๋“œํฌ์ธํŠธ๊ฐ€ ๋™์  ํ…Œ์ด๋ธ”์˜ ์ตœ๋Œ€๊ฐ’์„ ์ค„์ด๋Š” SETTINGS_HEADER_TABLE_SIZE ๋ณ€๊ฒฝ์„ ํ™•์ธํ•œ ํ›„์—๋Š”, ๊ทธ ์—”๋“œํฌ์ธํŠธ์˜ HPACK ์ธ์ฝ”๋”๋Š” ๋‹ค์Œ ํ•„๋“œ ๋ธ”๋ก์„ ๋™์  ํ…Œ์ด๋ธ”์„ ์ค„์—ฌ์ง„ ์ตœ๋Œ€๊ฐ’ ์ดํ•˜์˜ ํฌ๊ธฐ๋กœ ์„ค์ •ํ•˜๋Š” Dynamic Table Size Update ์ง€์‹œ์–ด๋กœ ์‹œ์ž‘ํ•ด์•ผ ํ•œ๋‹ค(RFC 7541 ์„น์…˜ 4.2 ์ฐธ์กฐ). ์—”๋“œํฌ์ธํŠธ๋Š” ์ถ•์†Œ ํ™•์ธ ์ดํ›„์— ์˜ค๋Š” ํ•„๋“œ ๋ธ”๋ก์ด ์ ํ•ฉํ•œ Dynamic Table Size Update ์ง€์‹œ์–ด๋กœ ์‹œ์ž‘ํ•˜์ง€ ์•Š์œผ๋ฉด ์—ฐ๊ฒฐ ์˜ค๋ฅ˜(์„น์…˜ 5.4.1)์ธ COMPRESSION_ERROR๋กœ ์ฒ˜๋ฆฌํ•ด์•ผ ํ•œ๋‹ค(MUST).


5. ์ŠคํŠธ๋ฆผ๊ณผ ๋‹ค์ค‘ํ™”

"์ŠคํŠธ๋ฆผ"์€ HTTP/2 ์—ฐ๊ฒฐ ๋‚ด์—์„œ ํด๋ผ์ด์–ธํŠธ์™€ ์„œ๋ฒ„ ๊ฐ„์— ๊ตํ™˜๋˜๋Š” ๋…๋ฆฝ์ ์ธ ์–‘๋ฐฉํ–ฅ ํ”„๋ ˆ์ž„ ์—ฐ์†์ž…๋‹ˆ๋‹ค. ์ŠคํŠธ๋ฆผ์€ ๋‹ค์Œ๊ณผ ๊ฐ™์€ ๋ช‡ ๊ฐ€์ง€ ์ค‘์š”ํ•œ ํŠน์„ฑ์„ ๊ฐ€์ง‘๋‹ˆ๋‹ค:

  • ๋‹จ์ผ HTTP/2 ์—ฐ๊ฒฐ์€ ์—ฌ๋Ÿฌ ๊ฐœ์˜ ๋™์‹œ ์—ด๋ฆฐ ์ŠคํŠธ๋ฆผ์„ ํฌํ•จํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ, ์–ด๋А ํ•œ์ชฝ ์—”๋“œํฌ์ธํŠธ๊ฐ€ ์—ฌ๋Ÿฌ ์ŠคํŠธ๋ฆผ์˜ ํ”„๋ ˆ์ž„์„ ๊ต์ฐจ ์ „์†กํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  • ์ŠคํŠธ๋ฆผ์€ ์ผ๋ฐฉ์ ์œผ๋กœ ์„ค์ •๋˜์–ด ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๊ฑฐ๋‚˜ ์–ด๋А ์ชฝ ์—”๋“œํฌ์ธํŠธ์—์„œ๋„ ๊ณต์œ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  • ์ŠคํŠธ๋ฆผ์€ ์–ด๋А ์ชฝ ์—”๋“œํฌ์ธํŠธ๋ผ๋„ ๋‹ซ์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  • ํ”„๋ ˆ์ž„์ด ์ „์†ก๋˜๋Š” ์ˆœ์„œ๋Š” ์ค‘์š”ํ•ฉ๋‹ˆ๋‹ค. ์ˆ˜์‹ ์ž๋Š” ํ”„๋ ˆ์ž„์„ ์ˆ˜์‹ ๋œ ์ˆœ์„œ๋Œ€๋กœ ์ฒ˜๋ฆฌํ•ฉ๋‹ˆ๋‹ค. ํŠนํžˆ HEADERS ๋ฐ DATA ํ”„๋ ˆ์ž„์˜ ์ˆœ์„œ๋Š” ์˜๋ฏธ๋ก ์ ์œผ๋กœ ์ค‘์š”ํ•ฉ๋‹ˆ๋‹ค.
  • ์ŠคํŠธ๋ฆผ์€ ์ •์ˆ˜๋กœ ์‹๋ณ„๋ฉ๋‹ˆ๋‹ค. ์ŠคํŠธ๋ฆผ ์‹๋ณ„์ž๋Š” ์ŠคํŠธ๋ฆผ์„ ์‹œ์ž‘ํ•˜๋Š” ์—”๋“œํฌ์ธํŠธ๊ฐ€ ์ŠคํŠธ๋ฆผ์— ํ• ๋‹นํ•ฉ๋‹ˆ๋‹ค.

5.1. ์ŠคํŠธ๋ฆผ ์ƒํƒœ

์ŠคํŠธ๋ฆผ์˜ ์ˆ˜๋ช… ์ฃผ๊ธฐ๋Š” ๊ทธ๋ฆผ 2์— ๋‚˜์™€ ์žˆ์Šต๋‹ˆ๋‹ค.

send PP recv PP idle send H / reserved recv H reserved (local) (remote) recv ES send ES send H open recv H half- half- closed send R / closed (remote) recv R (local) send ES / recv ES / send R / send R / recv R recv R send R / send R / recv R closed recv R

๊ทธ๋ฆผ 2: ์ŠคํŠธ๋ฆผ ์ƒํƒœ

send:
ํ•ด๋‹น ์—”๋“œํฌ์ธํŠธ๊ฐ€ ์ด ํ”„๋ ˆ์ž„์„ ์ „์†กํ•จ
recv:
ํ•ด๋‹น ์—”๋“œํฌ์ธํŠธ๊ฐ€ ์ด ํ”„๋ ˆ์ž„์„ ์ˆ˜์‹ ํ•จ
H:
HEADERS ํ”„๋ ˆ์ž„ (์•”๋ฌต์ ์ธ CONTINUATION ํ”„๋ ˆ์ž„ ํฌํ•จ)
ES:
END_STREAM ํ”Œ๋ž˜๊ทธ
R:
RST_STREAM ํ”„๋ ˆ์ž„
PP:
PUSH_PROMISE ํ”„๋ ˆ์ž„ (์•”๋ฌต์ ์ธ CONTINUATION ํ”„๋ ˆ์ž„ ํฌํ•จ); ์ƒํƒœ ์ „์ด๋Š” ์•ฝ์†๋œ ์ŠคํŠธ๋ฆผ์— ๋Œ€ํ•ด ์ ์šฉ๋ฉ๋‹ˆ๋‹ค

์ด ๋‹ค์ด์–ด๊ทธ๋žจ์€ ์ŠคํŠธ๋ฆผ ์ƒํƒœ ์ „์ด์™€ ๊ทธ ์ „์ด์— ์˜ํ–ฅ์„ ์ฃผ๋Š” ํ”„๋ ˆ์ž„ ๋ฐ ํ”Œ๋ž˜๊ทธ๋งŒ์„ ๋ณด์—ฌ์ค๋‹ˆ๋‹ค. ์ด ์ ์—์„œ CONTINUATION ํ”„๋ ˆ์ž„์€ ์ƒํƒœ ์ „์ด๋ฅผ ์ผ์œผํ‚ค์ง€ ์•Š์œผ๋ฉฐ, ๊ทธ๊ฒƒ๋“ค์ด ๋’ค๋”ฐ๋ฅด๋Š” HEADERS ๋˜๋Š” PUSH_PROMISE์˜ ์ผ๋ถ€๋กœ ๊ฐ„์ฃผ๋ฉ๋‹ˆ๋‹ค. ์ƒํƒœ ์ „์ด๋ฅผ ์œ„ํ•ด END_STREAM ํ”Œ๋ž˜๊ทธ๋Š” ๊ทธ๊ฒƒ์„ ํฌํ•จํ•˜๋Š” ํ”„๋ ˆ์ž„๊ณผ ๋ณ„๊ฐœ์˜ ์ด๋ฒคํŠธ๋กœ ์ฒ˜๋ฆฌ๋ฉ๋‹ˆ๋‹ค; END_STREAM ํ”Œ๋ž˜๊ทธ๊ฐ€ ์„ค์ •๋œ HEADERS ํ”„๋ ˆ์ž„์€ ๋‘ ๋ฒˆ์˜ ์ƒํƒœ ์ „์ด๋ฅผ ์ผ์œผํ‚ฌ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์–‘์ชฝ ์—”๋“œํฌ์ธํŠธ๋Š” ์ŠคํŠธ๋ฆผ ์ƒํƒœ์— ๋Œ€ํ•ด ์ฃผ๊ด€์ ์ธ ๊ด€์ ์„ ๊ฐ€์ง€๋ฉฐ, ํ”„๋ ˆ์ž„์ด ์ „์†ก ์ค‘์ผ ๋•Œ ์ƒํƒœ๊ฐ€ ๋‹ค๋ฅผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์—”๋“œํฌ์ธํŠธ๋Š” ์ŠคํŠธ๋ฆผ์˜ ์ƒ์„ฑ์— ๋Œ€ํ•ด ์กฐ์œจํ•˜์ง€ ์•Š์œผ๋ฉฐ; ์ŠคํŠธ๋ฆผ์€ ์–ด๋А ์ชฝ ์—”๋“œํฌ์ธํŠธ์— ์˜ํ•ด์„œ๋“  ์ผ๋ฐฉ์ ์œผ๋กœ ์ƒ์„ฑ๋ฉ๋‹ˆ๋‹ค. ์ƒํƒœ ๋ถˆ์ผ์น˜์˜ ๋ถ€์ •์  ๊ฒฐ๊ณผ๋Š” RST_STREAM ์ „์†ก ์ดํ›„์˜ "closed" ์ƒํƒœ๋กœ ์ œํ•œ๋˜๋ฉฐ, ์ด ๊ฒฝ์šฐ ์ŠคํŠธ๋ฆผ์„ ๋‹ซ์€ ํ›„์—๋„ ์ž ์‹œ ๋™์•ˆ ํ”„๋ ˆ์ž„์ด ์ˆ˜์‹ ๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์ŠคํŠธ๋ฆผ์€ ๋‹ค์Œ ์ƒํƒœ๋ฅผ ๊ฐ€์ง‘๋‹ˆ๋‹ค:

idle:
๋ชจ๋“  ์ŠคํŠธ๋ฆผ์€ "idle" ์ƒํƒœ์—์„œ ์‹œ์ž‘ํ•ฉ๋‹ˆ๋‹ค.
์ด ์ƒํƒœ์—์„œ ๋‹ค์Œ ์ „์ด๋“ค์ด ์œ ํšจํ•ฉ๋‹ˆ๋‹ค:
  • ํด๋ผ์ด์–ธํŠธ๋กœ์„œ HEADERS ํ”„๋ ˆ์ž„์„ ์ „์†กํ•˜๊ฑฐ๋‚˜ ์„œ๋ฒ„๋กœ์„œ HEADERS ํ”„๋ ˆ์ž„์„ ์ˆ˜์‹ ํ•˜๋ฉด ์ŠคํŠธ๋ฆผ์€ "open"์ด ๋ฉ๋‹ˆ๋‹ค. ์ŠคํŠธ๋ฆผ ์‹๋ณ„์ž๋Š” ์„น์…˜ 5.1.1์—์„œ ์„ค๋ช…ํ•œ ๋Œ€๋กœ ์„ ํƒ๋ฉ๋‹ˆ๋‹ค. ๋™์ผํ•œ HEADERS ํ”„๋ ˆ์ž„์€ ์ŠคํŠธ๋ฆผ์„ ์ฆ‰์‹œ "half-closed"๋กœ ๋งŒ๋“ค ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค.
  • ๋‹ค๋ฅธ ์ŠคํŠธ๋ฆผ์—์„œ PUSH_PROMISE ํ”„๋ ˆ์ž„์„ ์ „์†กํ•˜๋ฉด ๋‚˜์ค‘์— ์‚ฌ์šฉํ•  ์‹๋ณ„์ž๊ฐ€ ์žˆ๋Š” idle ์ŠคํŠธ๋ฆผ์„ ์˜ˆ์•ฝํ•ฉ๋‹ˆ๋‹ค. ์˜ˆ์•ฝ๋œ ์ŠคํŠธ๋ฆผ์˜ ์ƒํƒœ๋Š” "reserved (local)"๋กœ ์ „์ด๋ฉ๋‹ˆ๋‹ค. ์˜ค์ง ์„œ๋ฒ„๋งŒ PUSH_PROMISE ํ”„๋ ˆ์ž„์„ ์ „์†กํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  • ๋‹ค๋ฅธ ์ŠคํŠธ๋ฆผ์—์„œ PUSH_PROMISE ํ”„๋ ˆ์ž„์„ ์ˆ˜์‹ ํ•˜๋ฉด ๋‚˜์ค‘์— ์‚ฌ์šฉํ•  ์‹๋ณ„์ž๊ฐ€ ์žˆ๋Š” idle ์ŠคํŠธ๋ฆผ์ด ์˜ˆ์•ฝ๋ฉ๋‹ˆ๋‹ค. ์˜ˆ์•ฝ๋œ ์ŠคํŠธ๋ฆผ์˜ ์ƒํƒœ๋Š” "reserved (remote)"๋กœ ์ „์ด๋ฉ๋‹ˆ๋‹ค. ์˜ค์ง ํด๋ผ์ด์–ธํŠธ๋งŒ PUSH_PROMISE ํ”„๋ ˆ์ž„์„ ์ˆ˜์‹ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  • PUSH_PROMISE ํ”„๋ ˆ์ž„์€ idle ์ŠคํŠธ๋ฆผ์—์„œ ์ „์†ก๋˜๋Š” ๊ฒƒ์ด ์•„๋‹ˆ๋ผ Promised Stream ID ํ•„๋“œ์—์„œ ์ƒˆ๋กœ ์˜ˆ์•ฝ๋œ ์ŠคํŠธ๋ฆผ์„ ์ฐธ์กฐํ•œ๋‹ค๋Š” ์ ์— ์œ ์˜ํ•˜์„ธ์š”.
  • ๋” ํฐ ๊ฐ’์˜ ์ŠคํŠธ๋ฆผ ์‹๋ณ„์ž๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์ŠคํŠธ๋ฆผ์„ ์—ด๋ฉด ํ•ด๋‹น ์ŠคํŠธ๋ฆผ์€ ์ฆ‰์‹œ "closed" ์ƒํƒœ๋กœ ์ „์ด๋ฉ๋‹ˆ๋‹ค; ์ด ์ „์ด๋Š” ๋‹ค์ด์–ด๊ทธ๋žจ์— ํ‘œ์‹œ๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.
HEADERS ๋˜๋Š” PRIORITY ์ด์™ธ์˜ ๋ชจ๋“  ํ”„๋ ˆ์ž„์„ ์ด ์ƒํƒœ์˜ ์ŠคํŠธ๋ฆผ์—์„œ ์ˆ˜์‹ ํ•˜๋Š” ๊ฒƒ์€ ์—ฐ๊ฒฐ ์˜ค๋ฅ˜(์„น์…˜ 5.4.1)๋กœ ์ฒ˜๋ฆฌ๋˜์–ด์•ผ ํ•˜๋ฉฐ, ์˜ค๋ฅ˜ ์œ ํ˜•์€ PROTOCOL_ERROR์ž…๋‹ˆ๋‹ค. ์ด ์ŠคํŠธ๋ฆผ์ด ์„œ๋ฒ„์— ์˜ํ•ด ์‹œ์ž‘๋œ ๊ฒฝ์šฐ(์„น์…˜ 5.1.1 ์ฐธ์กฐ), HEADERS ํ”„๋ ˆ์ž„์„ ์ˆ˜์‹ ํ•˜๋Š” ๊ฒƒ๋„ ์—ฐ๊ฒฐ ์˜ค๋ฅ˜(PROTOCOL_ERROR)๋กœ ์ฒ˜๋ฆฌ๋˜์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.
reserved (local):
"reserved (local)" ์ƒํƒœ์˜ ์ŠคํŠธ๋ฆผ์€ PUSH_PROMISE ํ”„๋ ˆ์ž„์„ ์ „์†กํ•˜์—ฌ ์•ฝ์†๋œ ์ŠคํŠธ๋ฆผ์ž…๋‹ˆ๋‹ค. PUSH_PROMISE ํ”„๋ ˆ์ž„์€ ์›๊ฒฉ ํ”ผ์–ด๊ฐ€ ์‹œ์ž‘ํ•œ ์—ด๋ฆฐ ์ŠคํŠธ๋ฆผ๊ณผ ์—ฐ๊ด€์‹œ์ผœ idle ์ŠคํŠธ๋ฆผ์„ ์˜ˆ์•ฝํ•ฉ๋‹ˆ๋‹ค(์ž์„ธํ•œ ๋‚ด์šฉ์€ ์„น์…˜ 8.4 ์ฐธ์กฐ).
์ด ์ƒํƒœ์—์„œ๋Š” ๋‹ค์Œ ์ „์ด๋งŒ ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค:
  • ์—”๋“œํฌ์ธํŠธ๋Š” HEADERS ํ”„๋ ˆ์ž„์„ ์ „์†กํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด๋Š” ์ŠคํŠธ๋ฆผ์„ "half-closed (remote)" ์ƒํƒœ๋กœ ์—ฝ๋‹ˆ๋‹ค.
  • ์–ด๋А ์ชฝ ์—”๋“œํฌ์ธํŠธ๋„ RST_STREAM ํ”„๋ ˆ์ž„์„ ์ „์†กํ•˜์—ฌ ์ŠคํŠธ๋ฆผ์„ "closed"๋กœ ๋งŒ๋“ค ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด๋Š” ์ŠคํŠธ๋ฆผ ์˜ˆ์•ฝ์„ ํ•ด์ œํ•ฉ๋‹ˆ๋‹ค.
์ด ์ƒํƒœ์—์„œ ์—”๋“œํฌ์ธํŠธ๋Š” HEADERS, RST_STREAM, ๋˜๋Š” PRIORITY ์ด์™ธ์˜ ์–ด๋–ค ์ข…๋ฅ˜์˜ ํ”„๋ ˆ์ž„๋„ ์ „์†กํ•ด์„œ๋Š” ์•ˆ ๋ฉ๋‹ˆ๋‹ค(MUST NOT).
PRIORITY ๋˜๋Š” WINDOW_UPDATE ํ”„๋ ˆ์ž„์€ ์ด ์ƒํƒœ์—์„œ MAY ์ˆ˜์‹ ๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด ์ƒํƒœ์˜ ์ŠคํŠธ๋ฆผ์—์„œ RST_STREAM, PRIORITY, ๋˜๋Š” WINDOW_UPDATE ์ด์™ธ์˜ ์–ด๋–ค ํ”„๋ ˆ์ž„์„ ์ˆ˜์‹ ํ•˜๋ฉด ์—ฐ๊ฒฐ ์˜ค๋ฅ˜(์„น์…˜ 5.4.1)๋กœ ์ฒ˜๋ฆฌ๋˜์–ด์•ผ ํ•˜๋ฉฐ, ์˜ค๋ฅ˜ ์œ ํ˜•์€ PROTOCOL_ERROR์ž…๋‹ˆ๋‹ค.
reserved (remote):
"reserved (remote)" ์ƒํƒœ์˜ ์ŠคํŠธ๋ฆผ์€ ์›๊ฒฉ ํ”ผ์–ด์— ์˜ํ•ด ์˜ˆ์•ฝ๋œ ์ŠคํŠธ๋ฆผ์ž…๋‹ˆ๋‹ค.
์ด ์ƒํƒœ์—์„œ๋Š” ๋‹ค์Œ ์ „์ด๋งŒ ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค:
  • HEADERS ํ”„๋ ˆ์ž„์„ ์ˆ˜์‹ ํ•˜๋ฉด ์ŠคํŠธ๋ฆผ์€ "half-closed (local)"๋กœ ์ „์ด๋ฉ๋‹ˆ๋‹ค.
  • ์–ด๋А ์ชฝ ์—”๋“œํฌ์ธํŠธ๋„ RST_STREAM ํ”„๋ ˆ์ž„์„ ์ „์†กํ•˜์—ฌ ์ŠคํŠธ๋ฆผ์„ "closed"๋กœ ๋งŒ๋“ค ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด๋Š” ์ŠคํŠธ๋ฆผ ์˜ˆ์•ฝ์„ ํ•ด์ œํ•ฉ๋‹ˆ๋‹ค.
์ด ์ƒํƒœ์—์„œ๋Š” RST_STREAM, WINDOW_UPDATE, ๋˜๋Š” PRIORITY ์ด์™ธ์˜ ํ”„๋ ˆ์ž„์„ ์ „์†กํ•ด์„œ๋Š” ์•ˆ ๋ฉ๋‹ˆ๋‹ค(MUST NOT).
์ด ์ƒํƒœ์˜ ์ŠคํŠธ๋ฆผ์—์„œ HEADERS, RST_STREAM, ๋˜๋Š” PRIORITY ์ด์™ธ์˜ ์–ด๋–ค ํ”„๋ ˆ์ž„์„ ์ˆ˜์‹ ํ•˜๋ฉด ์—ฐ๊ฒฐ ์˜ค๋ฅ˜(์„น์…˜ 5.4.1)๋กœ ์ฒ˜๋ฆฌ๋˜์–ด์•ผ ํ•˜๋ฉฐ, ์˜ค๋ฅ˜ ์œ ํ˜•์€ PROTOCOL_ERROR์ž…๋‹ˆ๋‹ค.
open:
"open" ์ƒํƒœ์˜ ์ŠคํŠธ๋ฆผ์€ ์–‘์ชฝ ํ”ผ์–ด๊ฐ€ ๋ชจ๋“  ์œ ํ˜•์˜ ํ”„๋ ˆ์ž„์„ ์ „์†กํ•˜๋Š” ๋ฐ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด ์ƒํƒœ์—์„œ ์ „์†กํ•˜๋Š” ์ชฝ์€ ๊ด‘๊ณ ๋œ ์ŠคํŠธ๋ฆผ ์ˆ˜์ค€ ํ๋ฆ„ ์ œ์–ด ํ•œ๋„๋ฅผ ์ค€์ˆ˜ํ•ฉ๋‹ˆ๋‹ค(์„น์…˜ 5.2).
์ด ์ƒํƒœ์—์„œ ์–ด๋А ์ชฝ ์—”๋“œํฌ์ธํŠธ๋„ END_STREAM ํ”Œ๋ž˜๊ทธ๊ฐ€ ์„ค์ •๋œ ํ”„๋ ˆ์ž„์„ ์ „์†กํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ, ์ด๋Š” ์ŠคํŠธ๋ฆผ์„ "half-closed" ์ƒํƒœ ์ค‘ ํ•˜๋‚˜๋กœ ์ „์ด์‹œํ‚ต๋‹ˆ๋‹ค. END_STREAM ํ”Œ๋ž˜๊ทธ๋ฅผ ์ „์†กํ•œ ์ชฝ์€ ์ŠคํŠธ๋ฆผ ์ƒํƒœ๊ฐ€ "half-closed (local)"๊ฐ€ ๋˜๊ณ , END_STREAM ํ”Œ๋ž˜๊ทธ๋ฅผ ์ˆ˜์‹ ํ•œ ์ชฝ์€ ์ŠคํŠธ๋ฆผ ์ƒํƒœ๊ฐ€ "half-closed (remote)"๊ฐ€ ๋ฉ๋‹ˆ๋‹ค.
์–ด๋А ์ชฝ ์—”๋“œํฌ์ธํŠธ๋„ ์ด ์ƒํƒœ์—์„œ RST_STREAM ํ”„๋ ˆ์ž„์„ ์ „์†กํ•˜์—ฌ ์ฆ‰์‹œ "closed"๋กœ ์ „์ด์‹œํ‚ฌ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
half-closed (local):
"half-closed (local)" ์ƒํƒœ์˜ ์ŠคํŠธ๋ฆผ์€ WINDOW_UPDATE, PRIORITY, ๋ฐ RST_STREAM์„ ์ œ์™ธํ•œ ํ”„๋ ˆ์ž„์„ ์ „์†กํ•˜๋Š” ๋ฐ ์‚ฌ์šฉํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.
์ด ์ƒํƒœ๋Š” END_STREAM ํ”Œ๋ž˜๊ทธ๊ฐ€ ์„ค์ •๋œ ํ”„๋ ˆ์ž„์„ ์ˆ˜์‹ ํ•˜๊ฑฐ๋‚˜ ์–ด๋А ์ชฝ ํ”ผ์–ด๊ฐ€ RST_STREAM ํ”„๋ ˆ์ž„์„ ์ „์†กํ•˜๋ฉด "closed"๋กœ ์ „์ด๋ฉ๋‹ˆ๋‹ค.
์ด ์ƒํƒœ์—์„œ๋Š” ์–ด๋–ค ์œ ํ˜•์˜ ํ”„๋ ˆ์ž„๋„ ์ˆ˜์‹ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ˆ˜์‹ ๋œ ํ๋ฆ„ ์ œ์–ด ํ”„๋ ˆ์ž„์˜ ์ฒ˜๋ฆฌ๋ฅผ ๊ณ„์†ํ•˜๋ ค๋ฉด WINDOW_UPDATE ํ”„๋ ˆ์ž„์„ ์‚ฌ์šฉํ•˜์—ฌ ํ๋ฆ„ ์ œ์–ด ํฌ๋ ˆ๋”ง์„ ์ œ๊ณตํ•˜๋Š” ๊ฒƒ์ด ํ•„์š”ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด ์ƒํƒœ์—์„œ๋Š” END_STREAM ํ”Œ๋ž˜๊ทธ๊ฐ€ ์„ค์ •๋œ ํ”„๋ ˆ์ž„์ด ์ „์†ก๋œ ํ›„์—๋„ ์ž ์‹œ ๋™์•ˆ WINDOW_UPDATE ํ”„๋ ˆ์ž„์ด ๋„์ฐฉํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ ์ด๋ฅผ ๋ฌด์‹œํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
PRIORITY ํ”„๋ ˆ์ž„์€ ์ด ์ƒํƒœ์—์„œ ์ˆ˜์‹ ๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
half-closed (remote):
"half-closed (remote)" ์ƒํƒœ์˜ ์ŠคํŠธ๋ฆผ์€ ์›๊ฒฉ ํ”ผ์–ด๊ฐ€ ๋” ์ด์ƒ ํ”„๋ ˆ์ž„ ์ „์†ก์— ์‚ฌ์šฉํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ์ด ์ƒํƒœ์—์„œ ์—”๋“œํฌ์ธํŠธ๋Š” ์ˆ˜์‹ ์ž ํ๋ฆ„ ์ œ์–ด ์ฐฝ์„ ์œ ์ง€ํ•  ์˜๋ฌด๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค.
์ด ์ƒํƒœ์˜ ์ŠคํŠธ๋ฆผ์—์„œ WINDOW_UPDATE, PRIORITY, ๋˜๋Š” RST_STREAM ์ด์™ธ์˜ ์ถ”๊ฐ€ ํ”„๋ ˆ์ž„์„ ์ˆ˜์‹ ํ•˜๋ฉด ์ŠคํŠธ๋ฆผ ์˜ค๋ฅ˜(์„น์…˜ 5.4.2)๋กœ STREAM_CLOSED ์œ ํ˜•์˜ ์‘๋‹ต์„ ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค(MUST).
"half-closed (remote)" ์ƒํƒœ์˜ ์ŠคํŠธ๋ฆผ์€ ์—”๋“œํฌ์ธํŠธ๊ฐ€ ๋ชจ๋“  ์œ ํ˜•์˜ ํ”„๋ ˆ์ž„์„ ์ „์†กํ•˜๋Š” ๋ฐ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด ์ƒํƒœ์—์„œ ์—”๋“œํฌ์ธํŠธ๋Š” ๊ณ„์†ํ•ด์„œ ๊ด‘๊ณ ๋œ ์ŠคํŠธ๋ฆผ ์ˆ˜์ค€ ํ๋ฆ„ ์ œ์–ด ํ•œ๋„๋ฅผ ์ค€์ˆ˜ํ•ฉ๋‹ˆ๋‹ค(์„น์…˜ 5.2).
์ด ์ƒํƒœ์˜ ์ŠคํŠธ๋ฆผ์€ END_STREAM ํ”Œ๋ž˜๊ทธ๊ฐ€ ์„ค์ •๋œ ํ”„๋ ˆ์ž„์„ ์ „์†กํ•˜๊ฑฐ๋‚˜ ์–ด๋А ์ชฝ ํ”ผ์–ด๊ฐ€ RST_STREAM ํ”„๋ ˆ์ž„์„ ์ „์†กํ•˜๋ฉด "closed"๋กœ ์ „์ด๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
closed:
"closed" ์ƒํƒœ๋Š” ์ข…๋ฃŒ ์ƒํƒœ์ž…๋‹ˆ๋‹ค.
์ŠคํŠธ๋ฆผ์€ ์—”๋“œํฌ์ธํŠธ๊ฐ€ END_STREAM ํ”Œ๋ž˜๊ทธ๊ฐ€ ์„ค์ •๋œ ํ”„๋ ˆ์ž„์„ ์ „์†กํ•˜๊ณ  ์ˆ˜์‹ ํ•œ ํ›„ "closed" ์ƒํƒœ์— ๋“ค์–ด๊ฐ‘๋‹ˆ๋‹ค. ๋˜ํ•œ ์—”๋“œํฌ์ธํŠธ๊ฐ€ RST_STREAM ํ”„๋ ˆ์ž„์„ ์ „์†กํ•˜๊ฑฐ๋‚˜ ์ˆ˜์‹ ํ•œ ํ›„์—๋„ "closed" ์ƒํƒœ๊ฐ€ ๋ฉ๋‹ˆ๋‹ค.
์—”๋“œํฌ์ธํŠธ๋Š” ๋‹ซํžŒ ์ŠคํŠธ๋ฆผ์—์„œ PRIORITY ์ด์™ธ์˜ ํ”„๋ ˆ์ž„์„ ์ „์†กํ•ด์„œ๋Š” ์•ˆ ๋ฉ๋‹ˆ๋‹ค(MUST NOT). ์—”๋“œํฌ์ธํŠธ๋Š” ๋‹ซํžŒ ์ŠคํŠธ๋ฆผ์—์„œ ๋‹ค๋ฅธ ์œ ํ˜•์˜ ํ”„๋ ˆ์ž„์„ ์ˆ˜์‹ ํ•˜๋Š” ๊ฒƒ์„ ์—ฐ๊ฒฐ ์˜ค๋ฅ˜(์„น์…˜ 5.4.1)์ธ STREAM_CLOSED๋กœ ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค(MAY), ์•„๋ž˜์— ์–ธ๊ธ‰๋œ ์˜ˆ์™ธ๋ฅผ ์ œ์™ธํ•˜๊ณ ๋Š”.
์—”๋“œํฌ์ธํŠธ๊ฐ€ END_STREAM ํ”Œ๋ž˜๊ทธ๊ฐ€ ์„ค์ •๋œ ํ”„๋ ˆ์ž„ ๋˜๋Š” RST_STREAM ํ”„๋ ˆ์ž„์„ ์ „์†กํ•˜๋ฉด, ํ”ผ์–ด๊ฐ€ ์ŠคํŠธ๋ฆผ์„ ๋‹ซ๋Š” ํ”„๋ ˆ์ž„์„ ์ˆ˜์‹ ํ•˜๊ณ  ์ฒ˜๋ฆฌํ•˜๊ธฐ ์ „์— WINDOW_UPDATE ๋˜๋Š” RST_STREAM ํ”„๋ ˆ์ž„์„ ๋ฐ›์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
์—”๋“œํฌ์ธํŠธ๊ฐ€ "open" ๋˜๋Š” "half-closed (local)" ์ƒํƒœ์˜ ์ŠคํŠธ๋ฆผ์—์„œ RST_STREAM ํ”„๋ ˆ์ž„์„ ์ „์†กํ•˜๋ฉด, ํ•ด๋‹น ์—”๋“œํฌ์ธํŠธ๋Š” ์›๊ฒฉ ํ”ผ์–ด๊ฐ€ ์ „์†กํ–ˆ๊ฑฐ๋‚˜ ์ „์†ก ๋Œ€๊ธฐ์—ด์— ๋„ฃ์€ ์–ด๋–ค ์œ ํ˜•์˜ ํ”„๋ ˆ์ž„๋„ ์ˆ˜์‹ ํ•  ์ค€๋น„๊ฐ€ ๋˜์–ด ์žˆ์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์ด๋Ÿฌํ•œ ํ”„๋ ˆ์ž„์€ ๋ฌด์‹œํ•  ์ˆ˜ ์žˆ์ง€๋งŒ, ํ•„๋“œ ์„น์…˜ ์••์ถ•(์„น์…˜ 4.3) ๋˜๋Š” ํ๋ฆ„ ์ œ์–ด์™€ ๊ฐ™์€ ์—ฐ๊ฒฐ ์ƒํƒœ๋ฅผ ์ˆ˜์ •ํ•˜๋Š” ๊ฒฝ์šฐ์—๋Š” ์ตœ์†Œํ•œ ์ฒ˜๋ฆฌํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.
์—”๋“œํฌ์ธํŠธ๋Š” "closed" ์ƒํƒœ์— ์žˆ๋Š” ๋ชจ๋“  ์ŠคํŠธ๋ฆผ์— ๋Œ€ํ•ด ์ด๋Ÿฌํ•œ ์ตœ์†Œํ•œ์˜ ์ฒ˜๋ฆฌ๋ฅผ ์ˆ˜ํ–‰ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์—”๋“œํฌ์ธํŠธ๋Š” ํ”ผ์–ด๊ฐ€ ์ŠคํŠธ๋ฆผ์„ "closed"๋กœ ๋งŒ๋“ค๊ฒŒ ํ•œ ํ”„๋ ˆ์ž„์„ ์ˆ˜์‹ ํ–ˆ์Œ์„ ๊ฐ์ง€ํ•˜๊ธฐ ์œ„ํ•ด ๋‹ค๋ฅธ ์‹ ํ˜ธ๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ, ๊ทธ ๊ฒฝ์šฐ PRIORITY ์ด์™ธ์˜ ํ”„๋ ˆ์ž„ ์ˆ˜์‹ ์„ ์—ฐ๊ฒฐ ์˜ค๋ฅ˜(์„น์…˜ 5.4.1)์ธ PROTOCOL_ERROR๋กœ ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์—”๋“œํฌ์ธํŠธ๋Š” ์„ค์ •์— ๋Œ€ํ•œ ํ™•์ธ์„ ๋ฐ›์€ ํ›„ ์ŠคํŠธ๋ฆผ์„ ๋‹ซ์€ ๋’ค์— ๋„์ฐฉํ•œ DATA ํ”„๋ ˆ์ž„์„ ์˜ค๋ฅ˜๋กœ ์ฒ˜๋ฆฌํ•˜๋Š” ๋“ฑ, ํ”ผ์–ด๊ฐ€ ๋‹ซ์Œ ์‹ ํ˜ธ๋ฅผ ์ˆ˜์‹ ํ–ˆ์Œ์„ ๋‚˜ํƒ€๋‚ด๋Š” ํ”„๋ ˆ์ž„์„ ์‚ฌ์šฉํ•˜์—ฌ ์ด๋ฅผ ํŒ๋ณ„ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด ๋ชฉ์ ์„ ์œ„ํ•ด ํƒ€์ด๋จธ๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์€ ๊ถŒ์žฅ๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค(SHOULD NOT). ์˜ˆ๋กœ๋Š” ๋‹ซ์€ ๋’ค์— SETTINGS ํ”„๋ ˆ์ž„์„ ์ „์†กํ•˜๊ณ  ํ•ด๋‹น ์„ค์ • ํ™•์ธ์„ ๋ฐ›์€ ํ›„์— ์˜ค๋Š” DATA ํ”„๋ ˆ์ž„์„ ์˜ค๋ฅ˜๋กœ ์ฒ˜๋ฆฌํ•˜๋Š” ๊ฒƒ์ด ์žˆ์Šต๋‹ˆ๋‹ค. ๋‹ค๋ฅธ ์‹ ํ˜ธ๋กœ๋Š” PING ํ”„๋ ˆ์ž„, ๋‹ซ์€ ์ดํ›„ ์ƒ์„ฑ๋œ ์ŠคํŠธ๋ฆผ์—์„œ ์˜ค๋Š” ๋ฐ์ดํ„ฐ ์ˆ˜์‹ , ๋˜๋Š” ๋‹ซ์€ ์ดํ›„ ์ƒ์„ฑ๋œ ์š”์ฒญ์— ๋Œ€ํ•œ ์‘๋‹ต ๋“ฑ์ด ์žˆ์Šต๋‹ˆ๋‹ค.

๋” ๊ตฌ์ฒด์ ์ธ ๊ทœ์น™์ด ์—†๋Š” ํ•œ, ๊ตฌํ˜„์ฒด๋Š” ์ƒํƒœ ์„ค๋ช…์—์„œ ๋ช…์‹œ์ ์œผ๋กœ ํ—ˆ์šฉ๋˜์ง€ ์•Š์€ ํ”„๋ ˆ์ž„์„ ์ˆ˜์‹ ํ•˜๋ฉด ์—ฐ๊ฒฐ ์˜ค๋ฅ˜(์„น์…˜ 5.4.1)์ธ PROTOCOL_ERROR๋กœ ์ฒ˜๋ฆฌํ•˜๋Š” ๊ฒƒ์ด ์ข‹์Šต๋‹ˆ๋‹ค(SHOULD). PRIORITY๋Š” ์–ด๋–ค ์ŠคํŠธ๋ฆผ ์ƒํƒœ์—์„œ๋„ ์ „์†ก ๋ฐ ์ˆ˜์‹ ๋  ์ˆ˜ ์žˆ๋‹ค๋Š” ์ ์„ ์œ ์˜ํ•˜์„ธ์š”.

์ด ์„น์…˜์˜ ๊ทœ์น™์€ ์ด ๋ฌธ์„œ์—์„œ ์ •์˜๋œ ํ”„๋ ˆ์ž„์—๋งŒ ์ ์šฉ๋ฉ๋‹ˆ๋‹ค. ์˜๋ฏธ๊ฐ€ ์•Œ๋ ค์ ธ ์žˆ์ง€ ์•Š์€ ํ”„๋ ˆ์ž„์˜ ์ˆ˜์‹ ์€ ์˜ค๋ฅ˜๋กœ ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค. ์ด๋Ÿฌํ•œ ํ”„๋ ˆ์ž„์„ ์ „์†กํ•˜๊ฑฐ๋‚˜ ์ˆ˜์‹ ํ•˜๋Š” ์กฐ๊ฑด ์—ญ์‹œ ์•Œ๋ ค์ ธ ์žˆ์ง€ ์•Š๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค; ํ™•์žฅ์„ฑ์— ๋Œ€ํ•ด์„œ๋Š” ์„น์…˜ 5.5๋ฅผ ์ฐธ์กฐํ•˜์„ธ์š”.

HTTP ์š”์ฒญ/์‘๋‹ต ๊ตํ™˜์˜ ์ƒํƒœ ์ „์ด ์˜ˆ์‹œ๋Š” ์„น์…˜ 8.8์—์„œ ์ฐพ์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์„œ๋ฒ„ ํ‘ธ์‹œ์˜ ์ƒํƒœ ์ „์ด ์˜ˆ์‹œ๋Š” 8.4.1 ๋ฐ 8.4.2 ์„น์…˜์—์„œ ์ฐพ์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

5.1.1. ์ŠคํŠธ๋ฆผ ์‹๋ณ„์ž

์ŠคํŠธ๋ฆผ์€ ๋ถ€ํ˜ธ ์—†๋Š” 31๋น„ํŠธ ์ •์ˆ˜๋กœ ์‹๋ณ„๋ฉ๋‹ˆ๋‹ค. ํด๋ผ์ด์–ธํŠธ๊ฐ€ ์‹œ์ž‘ํ•œ ์ŠคํŠธ๋ฆผ์€ ํ™€์ˆ˜ ๋ฒˆํ˜ธ์˜ ์ŠคํŠธ๋ฆผ ์‹๋ณ„์ž๋ฅผ ์‚ฌ์šฉํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค(MUST); ์„œ๋ฒ„๊ฐ€ ์‹œ์ž‘ํ•œ ์ŠคํŠธ๋ฆผ์€ ์ง์ˆ˜ ๋ฒˆํ˜ธ๋ฅผ ์‚ฌ์šฉํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค(MUST). ์ŠคํŠธ๋ฆผ ์‹๋ณ„์ž 0(0x00)์€ ์—ฐ๊ฒฐ ์ œ์–ด ๋ฉ”์‹œ์ง€์— ์‚ฌ์šฉ๋˜๋ฉฐ, ์ƒˆ ์ŠคํŠธ๋ฆผ์„ ์ƒ์„ฑํ•˜๋Š” ๋ฐ๋Š” ์‚ฌ์šฉํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.

์ƒˆ๋กœ ์ƒ์„ฑ๋œ ์ŠคํŠธ๋ฆผ์˜ ์‹๋ณ„์ž๋Š” ๊ทธ ์ŠคํŠธ๋ฆผ์„ ์‹œ์ž‘ํ•œ ์—”๋“œํฌ์ธํŠธ๊ฐ€ ์—ด๊ฑฐ๋‚˜ ์˜ˆ์•ฝํ•œ ๋ชจ๋“  ์ŠคํŠธ๋ฆผ๋ณด๋‹ค ์ˆ˜์น˜์ ์œผ๋กœ ์ปค์•ผ ํ•ฉ๋‹ˆ๋‹ค(MUST). ์ด๋Š” HEADERS ํ”„๋ ˆ์ž„์œผ๋กœ ์—ด๋ฆฌ๋Š” ์ŠคํŠธ๋ฆผ๊ณผ PUSH_PROMISE๋กœ ์˜ˆ์•ฝ๋˜๋Š” ์ŠคํŠธ๋ฆผ์— ์ ์šฉ๋ฉ๋‹ˆ๋‹ค. ์˜ˆ์ƒ์น˜ ๋ชปํ•œ ์ŠคํŠธ๋ฆผ ์‹๋ณ„์ž๋ฅผ ์ˆ˜์‹ ํ•œ ์—”๋“œํฌ์ธํŠธ๋Š” ์—ฐ๊ฒฐ ์˜ค๋ฅ˜(์„น์…˜ 5.4.1)์ธ PROTOCOL_ERROR๋กœ ์‘๋‹ตํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

HEADERS ํ”„๋ ˆ์ž„์€ ํ”„๋ ˆ์ž„ ํ—ค๋”์˜ ์ŠคํŠธ๋ฆผ ์‹๋ณ„์ž๋กœ ํ‘œ์‹œ๋œ ํด๋ผ์ด์–ธํŠธ-์‹œ์ž‘ ์ŠคํŠธ๋ฆผ์„ "idle"์—์„œ "open"์œผ๋กœ ์ „์ด์‹œํ‚ต๋‹ˆ๋‹ค. PUSH_PROMISE ํ”„๋ ˆ์ž„์€ ํ”„๋ ˆ์ž„ ํŽ˜์ด๋กœ๋“œ์˜ Promised Stream ID ํ•„๋“œ๋กœ ํ‘œ์‹œ๋œ ์„œ๋ฒ„-์‹œ์ž‘ ์ŠคํŠธ๋ฆผ์„ "idle"์—์„œ "reserved (local)" ๋˜๋Š” "reserved (remote)"๋กœ ์ „์ด์‹œํ‚ต๋‹ˆ๋‹ค. ์ŠคํŠธ๋ฆผ์ด "idle" ์ƒํƒœ์—์„œ ์ „์ด๋  ๋•Œ, ํ”ผ์–ด๊ฐ€ ๋” ๋‚ฎ์€ ๊ฐ’์˜ ์ŠคํŠธ๋ฆผ ์‹๋ณ„์ž๋กœ ์—ด์—ˆ์„ ์ˆ˜๋„ ์žˆ๋Š” ๋ชจ๋“  idle ์ŠคํŠธ๋ฆผ์€ ์ฆ‰์‹œ "closed"๋กœ ์ „์ด๋ฉ๋‹ˆ๋‹ค. ์ฆ‰, ์—”๋“œํฌ์ธํŠธ๋Š” ์ŠคํŠธ๋ฆผ ์‹๋ณ„์ž๋ฅผ ๊ฑด๋„ˆ๋›ธ ์ˆ˜ ์žˆ์œผ๋ฉฐ, ๊ทธ ๊ฒฐ๊ณผ๋กœ ๊ฑด๋„ˆ๋›ด ์ŠคํŠธ๋ฆผ์€ ์ฆ‰์‹œ ๋‹ซํž™๋‹ˆ๋‹ค.

์ŠคํŠธ๋ฆผ ์‹๋ณ„์ž๋Š” ์žฌ์‚ฌ์šฉํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค. ์žฅ๊ธฐ๊ฐ„ ์—ฐ๊ฒฐ์€ ์—”๋“œํฌ์ธํŠธ๊ฐ€ ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•œ ์ŠคํŠธ๋ฆผ ์‹๋ณ„์ž ๋ฒ”์œ„๋ฅผ ์†Œ์ง„ํ•˜๊ฒŒ ๋งŒ๋“ค ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ƒˆ ์ŠคํŠธ๋ฆผ ์‹๋ณ„์ž๋ฅผ ์ƒ์„ฑํ•  ์ˆ˜ ์—†๋Š” ํด๋ผ์ด์–ธํŠธ๋Š” ์ƒˆ ์ŠคํŠธ๋ฆผ์„ ์œ„ํ•ด ์ƒˆ ์—ฐ๊ฒฐ์„ ์„ค์ •ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ƒˆ ์ŠคํŠธ๋ฆผ ์‹๋ณ„์ž๋ฅผ ์ƒ์„ฑํ•  ์ˆ˜ ์—†๋Š” ์„œ๋ฒ„๋Š” ํด๋ผ์ด์–ธํŠธ๊ฐ€ ์ƒˆ ์ŠคํŠธ๋ฆผ์„ ์œ„ํ•ด ์ƒˆ ์—ฐ๊ฒฐ์„ ์—ด๋„๋ก ๊ฐ•์ œํ•˜๊ธฐ ์œ„ํ•ด GOAWAY ํ”„๋ ˆ์ž„์„ ๋ณด๋‚ผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

5.1.2. ์ŠคํŠธ๋ฆผ ๋™์‹œ์„ฑ

ํ”ผ์–ด๋Š” SETTINGS_MAX_CONCURRENT_STREAMS ๋งค๊ฐœ๋ณ€์ˆ˜๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋™์‹œ ํ™œ์„ฑ ์ŠคํŠธ๋ฆผ ์ˆ˜๋ฅผ ์ œํ•œํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค(์ž์„ธํ•œ ๋‚ด์šฉ์€ ์„น์…˜ 6.5.2 ์ฐธ์กฐ). ์ตœ๋Œ€ ๋™์‹œ ์ŠคํŠธ๋ฆผ ์„ค์ •์€ ๊ฐ ์—”๋“œํฌ์ธํŠธ์— ํŠน์ •ํ•˜๋ฉฐ ์„ค์ •์„ ์ˆ˜์‹ ํ•˜๋Š” ํ”ผ์–ด์—๋งŒ ์ ์šฉ๋ฉ๋‹ˆ๋‹ค. ์ฆ‰, ํด๋ผ์ด์–ธํŠธ๋Š” ์„œ๋ฒ„๊ฐ€ ์‹œ์ž‘ํ•  ์ˆ˜ ์žˆ๋Š” ๋™์‹œ ์ŠคํŠธ๋ฆผ์˜ ์ตœ๋Œ€ ์ˆ˜๋ฅผ ์ง€์ •ํ•˜๊ณ , ์„œ๋ฒ„๋Š” ํด๋ผ์ด์–ธํŠธ๊ฐ€ ์‹œ์ž‘ํ•  ์ˆ˜ ์žˆ๋Š” ๋™์‹œ ์ŠคํŠธ๋ฆผ์˜ ์ตœ๋Œ€ ์ˆ˜๋ฅผ ์ง€์ •ํ•ฉ๋‹ˆ๋‹ค.

"open" ์ƒํƒœ ๋˜๋Š” ๋‘ "half-closed" ์ƒํƒœ์— ์žˆ๋Š” ์ŠคํŠธ๋ฆผ์€ ์—”๋“œํฌ์ธํŠธ๊ฐ€ ์—ด ์ˆ˜ ์žˆ๋Š” ์ตœ๋Œ€ ์ŠคํŠธ๋ฆผ ์ˆ˜์— ํฌํ•จ๋ฉ๋‹ˆ๋‹ค. ์ด ์„ธ ์ƒํƒœ ์ค‘ ์–ด๋А ํ•˜๋‚˜์— ์žˆ๋Š” ์ŠคํŠธ๋ฆผ์€ SETTINGS_MAX_CONCURRENT_STREAMS ์„ค์ •์— ๊ด‘๊ณ ๋œ ํ•œ๋„์— ํฌํ•จ๋ฉ๋‹ˆ๋‹ค. "reserved" ์ƒํƒœ๋“ค์— ์žˆ๋Š” ์ŠคํŠธ๋ฆผ์€ ์ŠคํŠธ๋ฆผ ํ•œ๋„์— ํฌํ•จ๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

์—”๋“œํฌ์ธํŠธ๋Š” ํ”ผ์–ด๊ฐ€ ์„ค์ •ํ•œ ํ•œ๋„๋ฅผ ์ดˆ๊ณผํ•ด์„œ๋Š” ์•ˆ ๋ฉ๋‹ˆ๋‹ค(MUST NOT). ๊ด‘๊ณ ๋œ ๋™์‹œ ์ŠคํŠธ๋ฆผ ํ•œ๋„๋ฅผ ์ดˆ๊ณผํ•˜๊ฒŒ ํ•˜๋Š” HEADERS ํ”„๋ ˆ์ž„์„ ์ˆ˜์‹ ํ•œ ์—”๋“œํฌ์ธํŠธ๋Š” ์ด๋ฅผ ์ŠคํŠธ๋ฆผ ์˜ค๋ฅ˜(์„น์…˜ 5.4.2)์ธ PROTOCOL_ERROR ๋˜๋Š” REFUSED_STREAM๋กœ ์ฒ˜๋ฆฌํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค(MUST). ์–ด๋–ค ์˜ค๋ฅ˜ ์ฝ”๋“œ๋ฅผ ์„ ํƒํ•˜๋А๋ƒ์— ๋”ฐ๋ผ ์—”๋“œํฌ์ธํŠธ๊ฐ€ ์ž๋™ ์žฌ์‹œ๋„๋ฅผ ํ—ˆ์šฉํ• ์ง€ ์—ฌ๋ถ€๊ฐ€ ๊ฒฐ์ •๋ฉ๋‹ˆ๋‹ค(์ž์„ธํ•œ ๋‚ด์šฉ์€ ์„น์…˜ 8.7 ์ฐธ์กฐ).

SETTINGS_MAX_CONCURRENT_STREAMS ๊ฐ’์„ ํ˜„์žฌ ์—ด๋ฆฐ ์ŠคํŠธ๋ฆผ ์ˆ˜๋ณด๋‹ค ๋” ๋‚ฎ๊ฒŒ ์ค„์ด๋ ค๋Š” ์—”๋“œํฌ์ธํŠธ๋Š” ์ดˆ๊ณผํ•˜๋Š” ์ŠคํŠธ๋ฆผ์„ ๋‹ซ๊ฑฐ๋‚˜ ์ŠคํŠธ๋ฆผ์ด ์™„๋ฃŒ๋  ๋•Œ๊นŒ์ง€ ํ—ˆ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

5.2. ํ๋ฆ„ ์ œ์–ด

์ŠคํŠธ๋ฆผ์„ ์‚ฌ์šฉํ•œ ๋‹ค์ค‘ํ™”๋Š” TCP ์—ฐ๊ฒฐ ์‚ฌ์šฉ์— ๋Œ€ํ•œ ๊ฒฝ์Ÿ์„ ์ดˆ๋ž˜ํ•˜์—ฌ ์ŠคํŠธ๋ฆผ์ด ๋ธ”๋ก๋˜๋Š” ์ƒํ™ฉ์„ ๋งŒ๋“ญ๋‹ˆ๋‹ค. ํ๋ฆ„ ์ œ์–ด ๋ฐฉ์‹์€ ๋™์ผ ์—ฐ๊ฒฐ์˜ ์ŠคํŠธ๋ฆผ๋“ค์ด ์„œ๋กœ ํŒŒ๊ดด์ ์œผ๋กœ ๊ฐ„์„ญํ•˜์ง€ ์•Š๋„๋ก ๋ณด์žฅํ•ฉ๋‹ˆ๋‹ค. ํ๋ฆ„ ์ œ์–ด๋Š” ๊ฐœ๋ณ„ ์ŠคํŠธ๋ฆผ๊ณผ ์—ฐ๊ฒฐ ์ „์ฒด์— ๋Œ€ํ•ด ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค.

HTTP/2๋Š” WINDOW_UPDATE ํ”„๋ ˆ์ž„(์„น์…˜ 6.9)์„ ์‚ฌ์šฉํ•˜์—ฌ ํ๋ฆ„ ์ œ์–ด๋ฅผ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค.

5.2.1. ํ๋ฆ„ ์ œ์–ด ์›์น™

HTTP/2 ์ŠคํŠธ๋ฆผ ํ๋ฆ„ ์ œ์–ด๋Š” ํ”„๋กœํ† ์ฝœ ๋ณ€๊ฒฝ ์—†์ด ๋‹ค์–‘ํ•œ ํ๋ฆ„ ์ œ์–ด ์•Œ๊ณ ๋ฆฌ์ฆ˜์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋„๋ก ์„ค๊ณ„๋˜์—ˆ์Šต๋‹ˆ๋‹ค. HTTP/2 ํ๋ฆ„ ์ œ์–ด๋Š” ๋‹ค์Œ ํŠน์„ฑ์„ ๊ฐ€์ง‘๋‹ˆ๋‹ค:

  1. ํ๋ฆ„ ์ œ์–ด๋Š” ์—ฐ๊ฒฐ์— ํŠนํ™”๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค. HTTP/2 ํ๋ฆ„ ์ œ์–ด๋Š” ๋‹จ์ผ ํ™‰์˜ ์—”๋“œํฌ์ธํŠธ๋“ค ๊ฐ„์—์„œ ์ž‘๋™ํ•˜๋ฉฐ ์ „์ฒด ์ข…๋‹จ๊ฐ„ ๊ฒฝ๋กœ์— ๊ฑธ์น˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.
  2. ํ๋ฆ„ ์ œ์–ด๋Š” WINDOW_UPDATE ํ”„๋ ˆ์ž„์— ๊ธฐ๋ฐ˜ํ•ฉ๋‹ˆ๋‹ค. ์ˆ˜์‹ ์ž๋Š” ์ŠคํŠธ๋ฆผ๋ณ„ ๋ฐ ์ „์ฒด ์—ฐ๊ฒฐ์— ๋Œ€ํ•ด ์ˆ˜์‹ ํ•  ์ค€๋น„๊ฐ€ ๋œ ์˜ฅํ…Ÿ ์ˆ˜๋ฅผ ๊ด‘๊ณ ํ•ฉ๋‹ˆ๋‹ค. ์ด ๋ฐฉ์‹์€ ํฌ๋ ˆ๋”ง ๊ธฐ๋ฐ˜ ์Šคํ‚ด์ž…๋‹ˆ๋‹ค.
  3. ํ๋ฆ„ ์ œ์–ด๋Š” ๋ฐฉํ–ฅ์„ฑ์ด ์žˆ์œผ๋ฉฐ ์ „์ฒด ์ œ์–ด๋Š” ์ˆ˜์‹ ์ž๊ฐ€ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค. ์ˆ˜์‹ ์ž๋Š” ๊ฐ ์ŠคํŠธ๋ฆผ๊ณผ ์ „์ฒด ์—ฐ๊ฒฐ์— ๋Œ€ํ•ด ์›ํ•˜๋Š” ์–ด๋–ค ์ฐฝ ํฌ๊ธฐ๋“  ์„ ํƒํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค(MAY). ์ „์†ก์ž๋Š” ์ˆ˜์‹ ์ž๊ฐ€ ์„ค์ •ํ•œ ํ๋ฆ„ ์ œ์–ด ํ•œ๋„๋ฅผ ์กด์ค‘ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค(MUST). ํด๋ผ์ด์–ธํŠธ, ์„œ๋ฒ„ ๋ฐ ์ค‘๊ฐœ์ž๋Š” ๋ชจ๋‘ ์ˆ˜์‹ ์ž ์—ญํ• ์—์„œ ์ž์‹ ๋“ค์˜ ํ๋ฆ„ ์ œ์–ด ์ฐฝ์„ ๊ด‘๊ณ ํ•˜๊ณ  ์ „์†ก ์‹œ ํ”ผ์–ด๊ฐ€ ์„ค์ •ํ•œ ํ•œ๋„๋ฅผ ์ค€์ˆ˜ํ•ฉ๋‹ˆ๋‹ค.
  4. ์ดˆ๊ธฐ ํ๋ฆ„ ์ œ์–ด ์ฐฝ ๊ฐ’์€ ์ƒˆ ์ŠคํŠธ๋ฆผ๊ณผ ์ „์ฒด ์—ฐ๊ฒฐ ๋ชจ๋‘์— ๋Œ€ํ•ด 65,535 ์˜ฅํ…Ÿ์ž…๋‹ˆ๋‹ค.
  5. ํ”„๋ ˆ์ž„ ์œ ํ˜•์€ ํ๋ฆ„ ์ œ์–ด๊ฐ€ ํ”„๋ ˆ์ž„์— ์ ์šฉ๋˜๋Š”์ง€ ์—ฌ๋ถ€๋ฅผ ๊ฒฐ์ •ํ•ฉ๋‹ˆ๋‹ค. ์ด ๋ฌธ์„œ์—์„œ ์ง€์ •๋œ ํ”„๋ ˆ์ž„ ์ค‘ ์˜ค์ง DATA ํ”„๋ ˆ์ž„๋งŒ ํ๋ฆ„ ์ œ์–ด์˜ ๋Œ€์ƒ์ด๋ฉฐ, ๋‹ค๋ฅธ ๋ชจ๋“  ํ”„๋ ˆ์ž„ ์œ ํ˜•์€ ๊ด‘๊ณ ๋œ ํ๋ฆ„ ์ œ์–ด ์ฐฝ์˜ ๊ณต๊ฐ„์„ ์†Œ๋น„ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ์ด๋Š” ์ค‘์š”ํ•œ ์ œ์–ด ํ”„๋ ˆ์ž„์ด ํ๋ฆ„ ์ œ์–ด ๋•Œ๋ฌธ์— ์ฐจ๋‹จ๋˜์ง€ ์•Š๋„๋ก ๋ณด์žฅํ•ฉ๋‹ˆ๋‹ค.
  6. ์—”๋“œํฌ์ธํŠธ๋Š” ์ž์‹ ์˜ ํ๋ฆ„ ์ œ์–ด๋ฅผ ๋น„ํ™œ์„ฑํ™”ํ•˜๋„๋ก ์„ ํƒํ•  ์ˆ˜ ์žˆ์ง€๋งŒ, ์—”๋“œํฌ์ธํŠธ๋Š” ํ”ผ์–ด์˜ ํ๋ฆ„ ์ œ์–ด ์‹ ํ˜ธ๋ฅผ ๋ฌด์‹œํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.
  7. HTTP/2๋Š” WINDOW_UPDATE ํ”„๋ ˆ์ž„์˜ ํ˜•์‹๊ณผ ์˜๋ฏธ๋งŒ ์ •์˜ํ•ฉ๋‹ˆ๋‹ค(์„น์…˜ 6.9). ์ˆ˜์‹ ์ž๊ฐ€ ์–ธ์ œ ์ด ํ”„๋ ˆ์ž„์„ ๋ณด๋‚ผ์ง€ ๋˜๋Š” ์–ด๋–ค ๊ฐ’์„ ๋ณด๋‚ผ์ง€๋ฅผ ๊ฒฐ์ •ํ•˜๋Š” ๋ฐฉ๋ฒ•, ๋˜๋Š” ์ „์†ก์ž๊ฐ€ ์–ธ์ œ ํŒจํ‚ท์„ ์ „์†กํ• ์ง€๋ฅผ ์„ ํƒํ•˜๋Š” ๋ฐฉ๋ฒ•์€ ์ด ๋ฌธ์„œ์—์„œ ๊ทœ์ •ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ๊ตฌํ˜„์ฒด๋Š” ์ž์‹ ๋“ค์˜ ํ•„์š”์— ๋งž๋Š” ์•Œ๊ณ ๋ฆฌ์ฆ˜์„ ์„ ํƒํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๊ตฌํ˜„์ฒด๋Š” ๋˜ํ•œ ์š”์ฒญ ๋ฐ ์‘๋‹ต ์ „์†ก์˜ ์šฐ์„ ์ˆœ์œ„๋ฅผ ์ •ํ•˜๊ณ , ์š”์ฒญ์˜ ํ—ค๋“œ-์˜ค๋ธŒ-๋ผ์ธ ๋ธ”๋กœํ‚น์„ ํ”ผํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ์„ ํƒํ•˜๋ฉฐ, ์ƒˆ ์ŠคํŠธ๋ฆผ ์ƒ์„ฑ ๊ด€๋ฆฌ๋ฅผ ์ฑ…์ž„์ง‘๋‹ˆ๋‹ค. ์ด๋Ÿฌํ•œ ์•Œ๊ณ ๋ฆฌ์ฆ˜ ์„ ํƒ์€ ์–ด๋–ค ํ๋ฆ„ ์ œ์–ด ์•Œ๊ณ ๋ฆฌ์ฆ˜๊ณผ ์ƒํ˜ธ์ž‘์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

5.2.2. ํ๋ฆ„ ์ œ์–ด์˜ ์ ์ ˆํ•œ ์‚ฌ์šฉ

ํ๋ฆ„ ์ œ์–ด๋Š” ์ž์› ์ œ์•ฝ ํ•˜์— ์šด์˜๋˜๋Š” ์—”๋“œํฌ์ธํŠธ๋ฅผ ๋ณดํ˜ธํ•˜๊ธฐ ์œ„ํ•ด ์ •์˜๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด, ํ”„๋ก์‹œ๋Š” ๋งŽ์€ ์—ฐ๊ฒฐ ๊ฐ„์— ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ๊ณต์œ ํ•ด์•ผ ํ•˜๊ณ  ์—…์ŠคํŠธ๋ฆผ ์—ฐ๊ฒฐ์€ ๋А๋ฆฌ๊ณ  ๋‹ค์šด์ŠคํŠธ๋ฆผ์€ ๋น ๋ฅผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ํ๋ฆ„ ์ œ์–ด๋Š” ์ˆ˜์‹ ์ž๊ฐ€ ์–ด๋–ค ์ŠคํŠธ๋ฆผ์˜ ๋ฐ์ดํ„ฐ๋ฅผ ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์—†์ง€๋งŒ ๋™์ผ ์—ฐ๊ฒฐ์˜ ๋‹ค๋ฅธ ์ŠคํŠธ๋ฆผ ์ฒ˜๋ฆฌ๋Š” ๊ณ„์†ํ•˜๊ณ ์ž ํ•˜๋Š” ๊ฒฝ์šฐ๋ฅผ ๋‹ค๋ฃน๋‹ˆ๋‹ค.

์ด ๊ธฐ๋Šฅ์ด ํ•„์š”ํ•˜์ง€ ์•Š์€ ๋ฐฐํฌํ™˜๊ฒฝ์€ ์ตœ๋Œ€ ํฌ๊ธฐ(231-1)์˜ ํ๋ฆ„ ์ œ์–ด ์ฐฝ์„ ๊ด‘๊ณ ํ•˜๊ณ , ์–ด๋–ค ๋ฐ์ดํ„ฐ๊ฐ€ ์ˆ˜์‹ ๋  ๋•Œ๋งˆ๋‹ค WINDOW_UPDATE ํ”„๋ ˆ์ž„์„ ๋ณด๋‚ด์–ด ์ด ์ฐฝ์„ ์œ ์ง€ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด๋Š” ์‚ฌ์‹ค์ƒ ๊ทธ ์ˆ˜์‹ ์ž์— ๋Œ€ํ•ด ํ๋ฆ„ ์ œ์–ด๋ฅผ ๋น„ํ™œ์„ฑํ™”ํ•ฉ๋‹ˆ๋‹ค. ๋ฐ˜๋Œ€๋กœ ์ „์†ก์ž๋Š” ํ•ญ์ƒ ์ˆ˜์‹ ์ž๊ฐ€ ๊ด‘๊ณ ํ•œ ํ๋ฆ„ ์ œ์–ด ์ฐฝ์˜ ์˜ํ–ฅ์„ ๋ฐ›์Šต๋‹ˆ๋‹ค.

์ œํ•œ๋œ ์ž์›(์˜ˆ: ๋ฉ”๋ชจ๋ฆฌ)์„ ๊ฐ€์ง„ ๋ฐฐํฌ ํ™˜๊ฒฝ์€ ํ”ผ์–ด๊ฐ€ ์†Œ๋น„ํ•  ์ˆ˜ ์žˆ๋Š” ๋ฉ”๋ชจ๋ฆฌ ์–‘์„ ์ œํ•œํ•˜๊ธฐ ์œ„ํ•ด ํ๋ฆ„ ์ œ์–ด๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋‹ค๋งŒ, ํ๋ฆ„ ์ œ์–ด๊ฐ€ ๋Œ€์—ญํญ * ์ง€์—ฐ ๊ณฑ์„ ๋ชจ๋ฅธ ์ฑ„ ํ™œ์„ฑํ™”๋˜๋ฉด ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•œ ๋„คํŠธ์›Œํฌ ์ž์›์„ ๋น„์ตœ์ ์œผ๋กœ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Œ์„ ์œ ์˜ํ•˜์„ธ์š”(์ž์„ธํ•œ ๋‚ด์šฉ์€ [RFC7323] ์ฐธ์กฐ).

๋Œ€์—ญํญ * ์ง€์—ฐ ๊ณฑ์„ ์™„์ „ํžˆ ์ธ์ง€ํ•˜๊ณ  ์žˆ๋”๋ผ๋„ ํ๋ฆ„ ์ œ์–ด ๊ตฌํ˜„์€ ์–ด๋ ค์šธ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์—”๋“œํฌ์ธํŠธ๋Š” ๋ฐ์ดํ„ฐ๊ฐ€ ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•ด์ง€๋Š” ์ฆ‰์‹œ TCP ์ˆ˜์‹  ๋ฒ„ํผ์—์„œ HTTP/2 ํ”„๋ ˆ์ž„์„ ์ฝ๊ณ  ์ฒ˜๋ฆฌํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค(MUST). ์ ์‹œ์— ์ฝ์ง€ ๋ชปํ•˜๋ฉด WINDOW_UPDATE์™€ ๊ฐ™์€ ์ค‘์š”ํ•œ ํ”„๋ ˆ์ž„์ด ์ฝํžˆ๊ณ  ์ฒ˜๋ฆฌ๋˜์ง€ ์•Š์•„ ๊ต์ฐฉ ์ƒํƒœ๊ฐ€ ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ํ”„๋ ˆ์ž„์„ ์‹ ์†ํžˆ ์ฝ๋Š” ๊ฒƒ์€ HTTP/2 ํ๋ฆ„ ์ œ์–ด๊ฐ€ ์ž์› ์•ฝํƒˆ ๊ณต๊ฒฉ์œผ๋กœ๋ถ€ํ„ฐ ์—”๋“œํฌ์ธํŠธ๋ฅผ ๋…ธ์ถœ์‹œํ‚ค์ง€ ์•Š์œผ๋ฏ€๋กœ ์ž์› ์†Œ์ง„ ๊ณต๊ฒฉ์— ์ทจ์•ฝํ•˜๊ฒŒ ๋งŒ๋“ค์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

5.2.3. ํ๋ฆ„ ์ œ์–ด ์„ฑ๋Šฅ

์—”๋“œํฌ์ธํŠธ๊ฐ€ ํ”ผ์–ด๊ฐ€ ์ด ์—ฐ๊ฒฐ์—์„œ ํ•ญ์ƒ ํ”ผ์–ด์˜ ๋Œ€์—ญํญ * ์ง€์—ฐ ๊ณฑ๋ณด๋‹ค ํฐ ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•œ ํ๋ฆ„ ์ œ์–ด ์ฐฝ ๊ณต๊ฐ„์„ ๊ฐ€์ง€๋„๋ก ๋ณด์žฅํ•  ์ˆ˜ ์—†๋‹ค๋ฉด, ๊ทธ ์ˆ˜์‹  ์ฒ˜๋ฆฌ๋Ÿ‰์€ HTTP/2 ํ๋ฆ„ ์ œ์–ด์— ์˜ํ•ด ์ œํ•œ๋ฉ๋‹ˆ๋‹ค. ์ด๋Š” ์„ฑ๋Šฅ ์ €ํ•˜๋กœ ์ด์–ด์ง‘๋‹ˆ๋‹ค.

์ ์‹œ์— WINDOW_UPDATE ํ”„๋ ˆ์ž„์„ ์ „์†กํ•˜๋ฉด ์„ฑ๋Šฅ์„ ํ–ฅ์ƒ์‹œํ‚ฌ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์—”๋“œํฌ์ธํŠธ๋Š” ์ˆ˜์‹  ์ฒ˜๋ฆฌ๋Ÿ‰ ๊ฐœ์„ ์˜ ํ•„์š”์„ฑ๊ณผ ์ž์› ์†Œ์ง„ ์œ„ํ—˜ ๊ด€๋ฆฌ๋ฅผ ๊ท ํ˜• ์žˆ๊ฒŒ ํ•ด์•ผ ํ•˜๋ฉฐ, ์ฐฝ ํฌ๊ธฐ๋ฅผ ๊ด€๋ฆฌํ•˜๋Š” ์ „๋žต์„ ์ •์˜ํ•  ๋•Œ ์„น์…˜ 10.5๋ฅผ ์ฃผ์˜ ๊นŠ๊ฒŒ ๊ณ ๋ คํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

5.3. ์šฐ์„ ์ˆœ์œ„ ์ง€์ •

HTTP/2์™€ ๊ฐ™์€ ๋‹ค์ค‘ํ™”๋œ ํ”„๋กœํ† ์ฝœ์—์„œ๋Š” ์ŠคํŠธ๋ฆผ์— ๋Œ€์—ญํญ๊ณผ ๊ณ„์‚ฐ ์ž์›์„ ์šฐ์„  ๋ฐฐ๋ถ„ํ•˜๋Š” ๊ฒƒ์ด ์„ฑ๋Šฅ ํ–ฅ์ƒ์— ๊ฒฐ์ •์ ์ผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ž˜๋ชป๋œ ์šฐ์„ ์ˆœ์œ„ ์ง€์ • ๋ฐฉ์‹์€ HTTP/2๊ฐ€ ์„ฑ๋Šฅ์ด ๋‚ฎ์•„์ง€๊ฒŒ ๋งŒ๋“ค ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. TCP ๊ณ„์ธต์— ๋ณ‘๋ ฌ์„ฑ์ด ์ „ํ˜€ ์—†๋‹ค๋ฉด, ์„ฑ๋Šฅ์€ HTTP/1.1๋ณด๋‹ค ์ƒ๋‹นํžˆ ๋‚˜์  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์ข‹์€ ์šฐ์„ ์ˆœ์œ„ ์ง€์ • ๋ฐฉ์‹์€ ๋ฆฌ์†Œ์Šค์˜ ๋‚ด์šฉ, ๋ฆฌ์†Œ์Šค ๊ฐ„์˜ ๊ด€๊ณ„, ํ”ผ์–ด๊ฐ€ ํ•ด๋‹น ๋ฆฌ์†Œ์Šค๋ฅผ ์–ด๋–ป๊ฒŒ ์‚ฌ์šฉํ• ์ง€์™€ ๊ฐ™์€ ๋ฌธ๋งฅ์  ์ง€์‹์„ ์ ์šฉํ•˜๋ฉด ์ด์ ์„ ์–ป์Šต๋‹ˆ๋‹ค. ํŠนํžˆ ํด๋ผ์ด์–ธํŠธ๋Š” ์„œ๋ฒ„ ์šฐ์„ ์ˆœ์œ„ ์ง€์ •์— ๊ด€๋ จ๋œ ์š”์ฒญ ์šฐ์„ ์ˆœ์œ„์— ๊ด€ํ•œ ์ง€์‹์„ ๊ฐ€์งˆ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด๋Ÿฐ ๊ฒฝ์šฐ ํด๋ผ์ด์–ธํŠธ๊ฐ€ ์šฐ์„ ์ˆœ์œ„ ์ •๋ณด๋ฅผ ์ œ๊ณตํ•˜๋Š” ๊ฒƒ์ด ์„ฑ๋Šฅ์„ ํ–ฅ์ƒ์‹œํ‚ฌ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

5.3.1. RFC 7540์˜ ์šฐ์„ ์ˆœ์œ„ ๋ฐฐ๊ฒฝ

RFC 7540๋Š” ์š”์ฒญ ์šฐ์„ ์ˆœ์œ„๋ฅผ ์‹ ํ˜ธํ•˜๋Š” ํ’๋ถ€ํ•œ ์‹œ์Šคํ…œ์„ ์ •์˜ํ–ˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ์ด ์‹œ์Šคํ…œ์€ ๋ณต์žกํ•˜๊ฒŒ ํŒ๋ช…๋˜์—ˆ๊ณ , ์ผ๊ด€๋˜๊ฒŒ ๊ตฌํ˜„๋˜์ง€ ์•Š์•˜์Šต๋‹ˆ๋‹ค.

์œ ์—ฐํ•œ ์Šคํ‚ด์€ ํด๋ผ์ด์–ธํŠธ๊ฐ€ ๋งค์šฐ ๋‹ค์–‘ํ•œ ๋ฐฉ์‹์œผ๋กœ ์šฐ์„ ์ˆœ์œ„๋ฅผ ํ‘œํ˜„ํ•˜๊ฒŒ ํ–ˆ๊ณ , ์ฑ„ํƒ๋œ ์ ‘๊ทผ ๋ฐฉ์‹ ์‚ฌ์ด์— ์ผ๊ด€์„ฑ์ด ๊ฑฐ์˜ ์—†์—ˆ์Šต๋‹ˆ๋‹ค. ์„œ๋ฒ„์—๊ฒŒ๋Š” ์ด ์Šคํ‚ด์— ๋Œ€ํ•œ ์ผ๋ฐ˜์  ์ง€์›์„ ๊ตฌํ˜„ํ•˜๋Š” ๊ฒƒ์ด ๋ณต์žกํ–ˆ์Šต๋‹ˆ๋‹ค. ํด๋ผ์ด์–ธํŠธ์™€ ์„œ๋ฒ„ ๋ชจ๋‘์—์„œ ์šฐ์„ ์ˆœ์œ„์˜ ๊ตฌํ˜„์€ ๊ณ ๋ฅด์ง€ ์•Š์•˜์Šต๋‹ˆ๋‹ค. ๋งŽ์€ ์„œ๋ฒ„ ๋ฐฐํฌ๋Š” ์š”์ฒญ ์ฒ˜๋ฆฌ์—์„œ ํด๋ผ์ด์–ธํŠธ ์‹ ํ˜ธ๋ฅผ ๋ฌด์‹œํ–ˆ์Šต๋‹ˆ๋‹ค.

์š”์•ฝํ•˜๋ฉด, RFC 7540์˜ ์šฐ์„ ์ˆœ์œ„ ์‹ ํ˜ธ๋Š” ์„ฑ๊ณต์ ์ด์ง€ ๋ชปํ–ˆ์Šต๋‹ˆ๋‹ค.

5.3.2. ์ด ๋ฌธ์„œ์—์„œ์˜ ์šฐ์„ ์ˆœ์œ„ ์‹ ํ˜ธ

์ด HTTP/2 ์—…๋ฐ์ดํŠธ๋Š” RFC 7540์— ์ •์˜๋œ ์šฐ์„ ์ˆœ์œ„ ์‹ ํ˜ธ๋ฅผ ์‚ฌ์šฉ ์ค‘๋‹จ(deprecate)ํ•ฉ๋‹ˆ๋‹ค. ์šฐ์„ ์ˆœ์œ„ ์‹ ํ˜ธ์™€ ๊ด€๋ จ๋œ ๋ณธ๋ฌธ์˜ ๋Œ€๋ถ€๋ถ„์€ ์ด ๋ฌธ์„œ์— ํฌํ•จ๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ํ•˜์ง€๋งŒ ์ด ๋ฌธ์„œ์˜ ๊ตฌํ˜„์ฒด๊ฐ€ RFC 7540์—์„œ ์„ค๋ช…๋œ ์šฐ์„ ์ˆœ์œ„ ์‹ ํ˜ธ๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ตฌํ˜„์ฒด์™€ ์ƒํ˜ธ์šด์šฉ์„ฑ์„ ์œ ์ง€ํ•  ์ˆ˜ ์žˆ๋„๋ก ์ผ๋ถ€ ํ”„๋ ˆ์ž„ ํ•„๋“œ ์„ค๋ช…๊ณผ ํ•„์ˆ˜ ์ฒ˜๋ฆฌ ์‚ฌํ•ญ์€ ์œ ์ง€๋ฉ๋‹ˆ๋‹ค.

RFC 7540 ์šฐ์„ ์ˆœ์œ„ ์Šคํ‚ด์— ๋Œ€ํ•œ ์ž์„ธํ•œ ์„ค๋ช…์€ RFC 7540์˜ ์„น์…˜ 5.3์— ๋‚จ์•„ ์žˆ์Šต๋‹ˆ๋‹ค.

์šฐ์„ ์ˆœ์œ„ ์ •๋ณด๋ฅผ ์‹ ํ˜ธํ•˜๋Š” ๊ฒƒ์€ ๋งŽ์€ ๊ฒฝ์šฐ์— ์ข‹์€ ์„ฑ๋Šฅ์„ ์–ป๊ธฐ ์œ„ํ•ด ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค. ์šฐ์„ ์ˆœ์œ„ ์‹ ํ˜ธ๊ฐ€ ์ค‘์š”ํ•œ ๊ฒฝ์šฐ, ์—”๋“œํฌ์ธํŠธ๋Š” [HTTP-PRIORITY]์— ์„ค๋ช…๋œ ๊ฒƒ๊ณผ ๊ฐ™์€ ๋Œ€์ฒด ์Šคํ‚ด ์‚ฌ์šฉ์„ ๊ถŒ์žฅํ•ฉ๋‹ˆ๋‹ค.

๋น„๋ก RFC 7540์˜ ์šฐ์„ ์ˆœ์œ„ ์‹ ํ˜ธ๊ฐ€ ๋„๋ฆฌ ์ฑ„ํƒ๋˜์ง€๋Š” ์•Š์•˜์ง€๋งŒ, ๊ทธ๊ฒƒ์ด ์ œ๊ณตํ•˜๋Š” ์ •๋ณด๋Š” ๋” ๋‚˜์€ ๋Œ€์•ˆ์ด ์—†๋Š” ์ƒํ™ฉ์—์„œ๋Š” ์—ฌ์ „ํžˆ ์œ ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. HEADERS๋‚˜ PRIORITY ํ”„๋ ˆ์ž„์—์„œ ์šฐ์„ ์ˆœ์œ„ ์‹ ํ˜ธ๋ฅผ ์ˆ˜์‹ ํ•˜๋Š” ์—”๋“œํฌ์ธํŠธ๋Š” ๊ทธ ์ •๋ณด๋ฅผ ์ ์šฉํ•จ์œผ๋กœ์จ ์ด์ต์„ ์–ป์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ํŠนํžˆ ์ด๋Ÿฌํ•œ ์‹ ํ˜ธ๋ฅผ ์†Œ๋น„ํ•˜๋Š” ๊ตฌํ˜„์ฒด๋Š” ๋Œ€์•ˆ์ด ์—†์„ ๋•Œ ์ด ์šฐ์„ ์ˆœ์œ„ ์‹ ํ˜ธ๋ฅผ ๋ฒ„๋ฆฌ๋Š” ๊ฒƒ์—์„œ ์ด์ต์„ ์–ป์ง€ ๋ชปํ•  ๊ฒƒ์ž…๋‹ˆ๋‹ค.

์„œ๋ฒ„๋Š” ์šฐ์„ ์ˆœ์œ„ ์‹ ํ˜ธ๊ฐ€ ์ „ํ˜€ ์—†๋Š” ๊ฒฝ์šฐ ์š”์ฒญ ์šฐ์„ ์ˆœ์œ„๋ฅผ ๊ฒฐ์ •ํ•  ๋•Œ ๋‹ค๋ฅธ ๋ฌธ๋งฅ ์ •๋ณด๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ด ์ข‹์Šต๋‹ˆ๋‹ค(SHOULD). ์„œ๋ฒ„๋Š” ์‹ ํ˜ธ๊ฐ€ ์ „ํ˜€ ์—†๋Š” ๊ฒƒ์„ ํด๋ผ์ด์–ธํŠธ๊ฐ€ ํ•ด๋‹น ๊ธฐ๋Šฅ์„ ๊ตฌํ˜„ํ•˜์ง€ ์•Š์•˜๋‹ค๋Š” ํ‘œ์‹œ๋กœ ํ•ด์„ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค(MAY). RFC 7540์˜ ์„น์…˜ 5.3.5์— ์„ค๋ช…๋œ ๊ธฐ๋ณธ๊ฐ’์€ ๋Œ€๋ถ€๋ถ„์˜ ์กฐ๊ฑด์—์„œ ์„ฑ๋Šฅ์ด ์ข‹์ง€ ์•Š์€ ๊ฒƒ์œผ๋กœ ์•Œ๋ ค์ ธ ์žˆ์œผ๋ฉฐ, ์ด๋ฅผ ์˜๋„์ ์œผ๋กœ ์‚ฌ์šฉํ•˜๋Š” ๊ฒฝ์šฐ๋Š” ๋“œ๋ญ…๋‹ˆ๋‹ค.

5.4. ์˜ค๋ฅ˜ ์ฒ˜๋ฆฌ

HTTP/2 ํ”„๋ ˆ์ด๋ฐ์€ ๋‘ ๊ฐ€์ง€ ๋ฒ”์ฃผ์˜ ์˜ค๋ฅ˜๋ฅผ ํ—ˆ์šฉํ•ฉ๋‹ˆ๋‹ค:

  • ์ „์ฒด ์—ฐ๊ฒฐ์„ ์‚ฌ์šฉ ๋ถˆ๊ฐ€๋Šฅํ•˜๊ฒŒ ๋งŒ๋“œ๋Š” ์˜ค๋ฅ˜ ์กฐ๊ฑด์€ ์—ฐ๊ฒฐ ์˜ค๋ฅ˜์ž…๋‹ˆ๋‹ค.
  • ๊ฐœ๋ณ„ ์ŠคํŠธ๋ฆผ์˜ ์˜ค๋ฅ˜๋Š” ์ŠคํŠธ๋ฆผ ์˜ค๋ฅ˜์ž…๋‹ˆ๋‹ค.

์˜ค๋ฅ˜ ์ฝ”๋“œ ๋ชฉ๋ก์€ ์„น์…˜ 7์— ํฌํ•จ๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค.

์—”๋“œํฌ์ธํŠธ๊ฐ€ ์ฒ˜๋ฆฌ ์ค‘์— ์—ฌ๋Ÿฌ ์˜ค๋ฅ˜๋ฅผ ๋ฐœ๊ฒฌํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๊ตฌํ˜„์ฒด๋Š” ์ฒ˜๋ฆฌ ์ค‘ ์—ฌ๋Ÿฌ ์˜ค๋ฅ˜๋ฅผ ๋ฐœ๊ฒฌํ•  ์ˆ˜ ์žˆ์ง€๋งŒ(MAY) ๊ฒฐ๊ณผ๋กœ ๋ณด๊ณ ํ•˜๋Š” ๊ฒƒ์€ ์ŠคํŠธ๋ฆผ ์˜ค๋ฅ˜ ํ•˜๋‚˜์™€ ์—ฐ๊ฒฐ ์˜ค๋ฅ˜ ํ•˜๋‚˜๋กœ ์ œํ•œํ•˜๋Š” ๊ฒƒ์ด ์ข‹์Šต๋‹ˆ๋‹ค(SHOULD).

์ฃผ์–ด์ง„ ์ŠคํŠธ๋ฆผ์— ๋Œ€ํ•ด ๋ณด๊ณ ๋œ ์ฒซ ๋ฒˆ์งธ ์ŠคํŠธ๋ฆผ ์˜ค๋ฅ˜๋Š” ๊ทธ ์ŠคํŠธ๋ฆผ์—์„œ ๋‹ค๋ฅธ ์˜ค๋ฅ˜๋“ค์ด ๋ณด๊ณ ๋˜๋Š” ๊ฒƒ์„ ๋ฐฉ์ง€ํ•ฉ๋‹ˆ๋‹ค. ๋น„๊ต์  ํ”„๋กœํ† ์ฝœ์€ ์—ฌ๋Ÿฌ ๊ฐœ์˜ GOAWAY ํ”„๋ ˆ์ž„์„ ํ—ˆ์šฉํ•˜์ง€๋งŒ, ์—”๋“œํฌ์ธํŠธ๋Š” ์šฐ์•„ํ•œ ์ข…๋ฃŒ ์ค‘์— ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ•˜์ง€ ์•Š๋Š” ํ•œ ๋ณดํ†ต ํ•œ ์ข…๋ฅ˜์˜ ์—ฐ๊ฒฐ ์˜ค๋ฅ˜๋งŒ ๋ณด๊ณ ํ•˜๋Š” ๊ฒƒ์ด ์ข‹์Šต๋‹ˆ๋‹ค(SHOULD). ๋งŒ์•ฝ ์ข…๋ฃŒ ์ค‘์— ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ•˜๋ฉด, ์—”๋“œํฌ์ธํŠธ๋Š” ์ด์ „์— NO_ERROR๋ฅผ ํฌํ•จํ•œ GOAWAY์™€ ๋”๋ถˆ์–ด ์ƒˆ๋กœ์šด ์˜ค๋ฅ˜ ์ฝ”๋“œ๋ฅผ ๊ฐ€์ง„ ์ถ”๊ฐ€ GOAWAY ํ”„๋ ˆ์ž„์„ ๋ณด๋‚ผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค(MAY).

์—”๋“œํฌ์ธํŠธ๊ฐ€ ์—ฌ๋Ÿฌ ๋‹ค๋ฅธ ์˜ค๋ฅ˜๋ฅผ ๊ฐ์ง€ํ•˜๋ฉด ๊ทธ ์ค‘ ํ•˜๋‚˜๋ฅผ ์„ ํƒํ•˜์—ฌ ๋ณด๊ณ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค(MAY). ๋งŒ์•ฝ ํ”„๋ ˆ์ž„์ด ์—ฐ๊ฒฐ ์˜ค๋ฅ˜๋ฅผ ์œ ๋ฐœํ•˜๋ฉด ๊ทธ ์˜ค๋ฅ˜๋Š” ๋ฐ˜๋“œ์‹œ ๋ณด๊ณ ๋˜์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค(MUST). ์ถ”๊ฐ€๋กœ, ์—”๋“œํฌ์ธํŠธ๋Š” ์˜ค๋ฅ˜ ์กฐ๊ฑด์„ ๊ฐ์ง€ํ•  ๋•Œ ์ ์šฉ ๊ฐ€๋Šฅํ•œ ์–ด๋–ค ์˜ค๋ฅ˜ ์ฝ”๋“œ๋„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค; ์ผ๋ฐ˜ ์˜ค๋ฅ˜ ์ฝ”๋“œ(์˜ˆ: PROTOCOL_ERROR ๋˜๋Š” INTERNAL_ERROR)๋Š” ๋” ๊ตฌ์ฒด์ ์ธ ์˜ค๋ฅ˜ ์ฝ”๋“œ ๋Œ€์‹  ํ•ญ์ƒ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

5.4.1. ์—ฐ๊ฒฐ ์˜ค๋ฅ˜ ์ฒ˜๋ฆฌ

์—ฐ๊ฒฐ ์˜ค๋ฅ˜๋Š” ํ”„๋ ˆ์ž„ ๊ณ„์ธต์˜ ์ถ”๊ฐ€ ์ฒ˜๋ฆฌ๋ฅผ ๋ฐฉํ•ดํ•˜๊ฑฐ๋‚˜ ์–ด๋–ค ์—ฐ๊ฒฐ ์ƒํƒœ๋ฅผ ์†์ƒ์‹œํ‚ค๋Š” ๋ชจ๋“  ์˜ค๋ฅ˜์ž…๋‹ˆ๋‹ค.

์—ฐ๊ฒฐ ์˜ค๋ฅ˜๋ฅผ ๋งŒ๋‚œ ์—”๋“œํฌ์ธํŠธ๋Š” ๋จผ์ € ํ”ผ์–ด๋กœ๋ถ€ํ„ฐ ๋งˆ์ง€๋ง‰์œผ๋กœ ์„ฑ๊ณต์ ์œผ๋กœ ์ˆ˜์‹ ํ•œ ์ŠคํŠธ๋ฆผ ์‹๋ณ„์ž๋ฅผ ํฌํ•จํ•œ GOAWAY ํ”„๋ ˆ์ž„์„ ๋ณด๋‚ด๋Š” ๊ฒƒ์ด ์ข‹์Šต๋‹ˆ๋‹ค(SHOULD). GOAWAY ํ”„๋ ˆ์ž„์€ ์—ฐ๊ฒฐ์ด ์ข…๋ฃŒ๋˜๋Š” ์ด์œ ๋ฅผ ๋‚˜ํƒ€๋‚ด๋Š” ์˜ค๋ฅ˜ ์ฝ”๋“œ(์„น์…˜ 7)๋ฅผ ํฌํ•จํ•ฉ๋‹ˆ๋‹ค. ์˜ค๋ฅ˜ ์กฐ๊ฑด์— ๋Œ€ํ•ด GOAWAY ํ”„๋ ˆ์ž„์„ ์ „์†กํ•œ ํ›„์—๋Š” ์—”๋“œํฌ์ธํŠธ๊ฐ€ TCP ์—ฐ๊ฒฐ์„ ๋‹ซ์•„์•ผ ํ•ฉ๋‹ˆ๋‹ค(MUST).

GOAWAY๊ฐ€ ์ˆ˜์‹  ์—”๋“œํฌ์ธํŠธ์— ์‹ ๋ขฐ์„ฑ ์žˆ๊ฒŒ ๋„๋‹ฌํ•˜์ง€ ์•Š์„ ์ˆ˜ ์žˆ๋‹ค๋Š” ์ ์— ์œ ์˜ํ•˜์„ธ์š”. ์—ฐ๊ฒฐ ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ•œ ๊ฒฝ์šฐ GOAWAY๋Š” ํ”ผ์–ด์—๊ฒŒ ์—ฐ๊ฒฐ์ด ์ข…๋ฃŒ๋˜๋Š” ์ด์œ ๋ฅผ ์•Œ๋ฆฌ๋ ค๋Š” ์ตœ์„ ์˜ ์‹œ๋„์ผ ๋ฟ์ž…๋‹ˆ๋‹ค.

์—”๋“œํฌ์ธํŠธ๋Š” ์–ธ์ œ๋“ ์ง€ ์—ฐ๊ฒฐ์„ ์ข…๋ฃŒํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ํŠนํžˆ, ์—”๋“œํฌ์ธํŠธ๋Š” ์ŠคํŠธ๋ฆผ ์˜ค๋ฅ˜๋ฅผ ์—ฐ๊ฒฐ ์˜ค๋ฅ˜๋กœ ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค(MAY). ์—”๋“œํฌ์ธํŠธ๋Š” ์ƒํ™ฉ์ด ํ—ˆ๋ฝํ•œ๋‹ค๋ฉด ์—ฐ๊ฒฐ์„ ๋๋‚ผ ๋•Œ GOAWAY ํ”„๋ ˆ์ž„์„ ๋ณด๋‚ด๋Š” ๊ฒƒ์ด ์ข‹์Šต๋‹ˆ๋‹ค(SHOULD).

5.4.2. ์ŠคํŠธ๋ฆผ ์˜ค๋ฅ˜ ์ฒ˜๋ฆฌ

์ŠคํŠธ๋ฆผ ์˜ค๋ฅ˜๋Š” ๋‹ค๋ฅธ ์ŠคํŠธ๋ฆผ์˜ ์ฒ˜๋ฆฌ๋ฅผ ๋ฐฉํ•ดํ•˜์ง€ ์•Š๋Š” ํŠน์ • ์ŠคํŠธ๋ฆผ๊ณผ ๊ด€๋ จ๋œ ์˜ค๋ฅ˜์ž…๋‹ˆ๋‹ค.

์ŠคํŠธ๋ฆผ ์˜ค๋ฅ˜๋ฅผ ๊ฐ์ง€ํ•œ ์—”๋“œํฌ์ธํŠธ๋Š” ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ•œ ์ŠคํŠธ๋ฆผ์˜ ์‹๋ณ„์ž๋ฅผ ํฌํ•จํ•˜๋Š” RST_STREAM ํ”„๋ ˆ์ž„์„ ์ „์†กํ•ฉ๋‹ˆ๋‹ค(์„น์…˜ 6.4). RST_STREAM ํ”„๋ ˆ์ž„์€ ์˜ค๋ฅ˜ ์œ ํ˜•์„ ๋‚˜ํƒ€๋‚ด๋Š” ์˜ค๋ฅ˜ ์ฝ”๋“œ๋ฅผ ํฌํ•จํ•ฉ๋‹ˆ๋‹ค.

RST_STREAM์€ ์—”๋“œํฌ์ธํŠธ๊ฐ€ ์ŠคํŠธ๋ฆผ์—์„œ ๋ณด๋‚ผ ์ˆ˜ ์žˆ๋Š” ๋งˆ์ง€๋ง‰ ํ”„๋ ˆ์ž„์ž…๋‹ˆ๋‹ค. RST_STREAM ํ”„๋ ˆ์ž„์„ ์ „์†กํ•œ ํ”ผ์–ด๋Š” ์›๊ฒฉ ํ”ผ์–ด๊ฐ€ ์ „์†กํ–ˆ๊ฑฐ๋‚˜ ์ „์†ก ๋Œ€๊ธฐ์—ด์— ์˜ฌ๋ ค๋‘” ํ”„๋ ˆ์ž„๋“ค์„ ์ˆ˜์‹ ํ•  ์ค€๋น„๊ฐ€ ๋˜์–ด ์žˆ์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์ด๋Ÿฌํ•œ ํ”„๋ ˆ์ž„์€ ๋ฌด์‹œํ•  ์ˆ˜ ์žˆ์ง€๋งŒ, ํ•„๋“œ ์„น์…˜ ์••์ถ• ์ƒํƒœ(์„น์…˜ 4.3)๋‚˜ ํ๋ฆ„ ์ œ์–ด์™€ ๊ฐ™์ด ์—ฐ๊ฒฐ ์ƒํƒœ๋ฅผ ๋ณ€๊ฒฝํ•˜๋Š” ๊ฒฝ์šฐ์—๋Š” ์˜ˆ์™ธ์ž…๋‹ˆ๋‹ค.

๋ณดํ†ต ์—”๋“œํฌ์ธํŠธ๋Š” ์–ด๋–ค ์ŠคํŠธ๋ฆผ์— ๋Œ€ํ•ด์„œ๋„ RST_STREAM ํ”„๋ ˆ์ž„์„ ๋‘ ๋ฒˆ ์ด์ƒ ์ „์†กํ•ด์„œ๋Š” ์•ˆ ๋ฉ๋‹ˆ๋‹ค(SHOULD NOT). ๊ทธ๋Ÿฌ๋‚˜ ์—”๋“œํฌ์ธํŠธ๋Š” ๋‹ซํžŒ ์ŠคํŠธ๋ฆผ์—์„œ ํ”„๋ ˆ์ž„์„ ๋ผ์šด๋“œ ํŠธ๋ฆฝ ์‹œ๊ฐ„ ์ด์ƒ ์ˆ˜์‹ ํ•˜๋ฉด ์ถ”๊ฐ€ RST_STREAM ํ”„๋ ˆ์ž„์„ ๋ณด๋‚ผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค(MAY). ์ด ๋™์ž‘์€ ์ž˜๋ชป ๋™์ž‘ํ•˜๋Š” ๊ตฌํ˜„์ฒด๋ฅผ ๋‹ค๋ฃจ๊ธฐ ์œ„ํ•ด ํ—ˆ์šฉ๋ฉ๋‹ˆ๋‹ค.

๋ฃจํ”„๋ฅผ ํ”ผํ•˜๊ธฐ ์œ„ํ•ด ์—”๋“œํฌ์ธํŠธ๋Š” RST_STREAM์— ๋Œ€ํ•œ ์‘๋‹ต์œผ๋กœ ๋‹ค์‹œ RST_STREAM์„ ๋ณด๋‚ด์„œ๋Š” ์•ˆ ๋ฉ๋‹ˆ๋‹ค(MUST NOT).

5.4.3. ์—ฐ๊ฒฐ ์ข…๋ฃŒ

์ŠคํŠธ๋ฆผ์ด "open" ๋˜๋Š” "half-closed" ์ƒํƒœ๋กœ ๋‚จ์•„ ์žˆ๋Š” ๋™์•ˆ TCP ์—ฐ๊ฒฐ์ด ๋‹ซํžˆ๊ฑฐ๋‚˜ ๋ฆฌ์…‹๋˜๋ฉด, ์˜ํ–ฅ์„ ๋ฐ›์€ ์ŠคํŠธ๋ฆผ์€ ์ž๋™์œผ๋กœ ์žฌ์‹œ๋„ํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค(์ž์„ธํ•œ ๋‚ด์šฉ์€ ์„น์…˜ 8.7 ์ฐธ์กฐ).

5.5. HTTP/2 ํ™•์žฅ

HTTP/2๋Š” ํ”„๋กœํ† ์ฝœ์˜ ํ™•์žฅ์„ ํ—ˆ์šฉํ•ฉ๋‹ˆ๋‹ค. ์ด ์„น์…˜์— ์„ค๋ช…๋œ ์ œํ•œ ๋‚ด์—์„œ ํ”„๋กœํ† ์ฝœ ํ™•์žฅ์€ ์ถ”๊ฐ€ ์„œ๋น„์Šค๋ฅผ ์ œ๊ณตํ•˜๊ฑฐ๋‚˜ ํ”„๋กœํ† ์ฝœ์˜ ์–ด๋–ค ์ธก๋ฉด์ด๋ผ๋„ ๋ณ€๊ฒฝํ•˜๋Š” ๋ฐ ์‚ฌ์šฉ๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ํ™•์žฅ์€ ๋‹จ์ผ HTTP/2 ์—ฐ๊ฒฐ์˜ ๋ฒ”์œ„ ๋‚ด์—์„œ๋งŒ ์œ ํšจํ•ฉ๋‹ˆ๋‹ค.

์ด๊ฒƒ์€ ์ด ๋ฌธ์„œ์— ์ •์˜๋œ ํ”„๋กœํ† ์ฝœ ์š”์†Œ์— ์ ์šฉ๋ฉ๋‹ˆ๋‹ค. ์ด๋Š” ์ƒˆ๋กœ์šด ๋ฉ”์„œ๋“œ, ์ƒํƒœ ์ฝ”๋“œ ๋˜๋Š” ํ•„๋“œ ์ •์˜์™€ ๊ฐ™์€ ๊ธฐ์กด์˜ HTTP ํ™•์žฅ ์˜ต์…˜์—๋Š” ์˜ํ–ฅ์„ ์ฃผ์ง€ ์•Š์Šต๋‹ˆ๋‹ค(์ž์„ธํ•œ ๋‚ด์šฉ์€ RFC 9110์˜ ์„น์…˜ 16 ์ฐธ์กฐ).

ํ™•์žฅ์€ ์ƒˆ๋กœ์šด ํ”„๋ ˆ์ž„ ์œ ํ˜•(์„น์…˜ 4.1), ์ƒˆ๋กœ์šด ์„ค์ •(์„น์…˜ 6.5), ๋˜๋Š” ์ƒˆ๋กœ์šด ์˜ค๋ฅ˜ ์ฝ”๋“œ(์„น์…˜ 7)๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด๋Ÿฌํ•œ ํ™•์žฅ ์ง€์  ๊ด€๋ฆฌ๋ฅผ ์œ„ํ•œ ๋ ˆ์ง€์ŠคํŠธ๋ฆฌ๋Š” RFC 7540์˜ ์„น์…˜ 11์— ์ •์˜๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค.

๊ตฌํ˜„์ฒด๋Š” ํ™•์žฅ ๊ฐ€๋Šฅํ•œ ํ”„๋กœํ† ์ฝœ ์š”์†Œ์˜ ์•Œ๋ ค์ง€์ง€ ์•Š์•˜๊ฑฐ๋‚˜ ์ง€์›๋˜์ง€ ์•Š๋Š” ๊ฐ’์„ ๋ฌด์‹œํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค(MUST). ๊ตฌํ˜„์ฒด๋Š” ์•Œ๋ ค์ง€์ง€ ์•Š์•˜๊ฑฐ๋‚˜ ์ง€์›๋˜์ง€ ์•Š๋Š” ์œ ํ˜•์˜ ํ”„๋ ˆ์ž„์„ ํ๊ธฐํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค(MUST). ์ด๋Š” ์ด๋Ÿฌํ•œ ํ™•์žฅ ์ง€์ ๋“ค์ด ์‚ฌ์ „ ํ•ฉ์˜๋‚˜ ํ˜‘์ƒ ์—†์ด ํ™•์žฅ์— ์˜ํ•ด ์•ˆ์ „ํ•˜๊ฒŒ ์‚ฌ์šฉ๋  ์ˆ˜ ์žˆ์Œ์„ ์˜๋ฏธํ•ฉ๋‹ˆ๋‹ค. ๋‹ค๋งŒ, ํ•„๋“œ ๋ธ”๋ก(์„น์…˜ 4.3)์˜ ์ค‘๊ฐ„์— ๋‚˜ํƒ€๋‚˜๋Š” ํ™•์žฅ ํ”„๋ ˆ์ž„์€ ํ—ˆ์šฉ๋˜์ง€ ์•Š์œผ๋ฉฐ; ์ด๋Ÿฌํ•œ ๊ฒฝ์šฐ ์—ฐ๊ฒฐ ์˜ค๋ฅ˜(์„น์…˜ 5.4.1)์ธ PROTOCOL_ERROR๋กœ ์ฒ˜๋ฆฌ๋˜์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค(MUST).

ํ™•์žฅ์€ ์ด ๋ฌธ์„œ์— ์ •์˜๋œ ํ”„๋กœํ† ์ฝœ ์š”์†Œ ๋˜๋Š” ํ™•์žฅ ๋ฉ”์ปค๋‹ˆ์ฆ˜์ด ์ •์˜๋˜์ง€ ์•Š์€ ์š”์†Œ๋ฅผ ๋ณ€๊ฒฝํ•˜๋Š” ๊ฒƒ์„ ํ”ผํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค(SHOULD). ์—ฌ๊ธฐ์—๋Š” ํ”„๋ ˆ์ž„ ๋ ˆ์ด์•„์›ƒ ๋ณ€๊ฒฝ, ํ”„๋ ˆ์ž„์ด HTTP ๋ฉ”์‹œ์ง€๋กœ ๊ตฌ์„ฑ๋˜๋Š” ๋ฐฉ์‹์˜ ์ถ”๊ฐ€ ๋˜๋Š” ๋ณ€๊ฒฝ(์„น์…˜ 8.1), ์˜์‚ฌ-ํ—ค๋” ํ•„๋“œ ์ •์˜ ๋ณ€๊ฒฝ, ๋˜๋Š” ํ˜ธํ™˜ ์—”๋“œํฌ์ธํŠธ๊ฐ€ ์—ฐ๊ฒฐ ์˜ค๋ฅ˜๋กœ ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์žˆ๋Š” ์–ด๋–ค ํ”„๋กœํ† ์ฝœ ์š”์†Œ์˜ ๋ณ€๊ฒฝ์ด ํฌํ•จ๋ฉ๋‹ˆ๋‹ค.

๊ธฐ์กด ํ”„๋กœํ† ์ฝœ ์š”์†Œ๋‚˜ ์ƒํƒœ๋ฅผ ๋ณ€๊ฒฝํ•˜๋Š” ํ™•์žฅ์€ ์‚ฌ์šฉ๋˜๊ธฐ ์ „์— ํ˜‘์ƒ๋˜์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค(MUST). ์˜ˆ๋ฅผ ๋“ค์–ด, HEADERS ํ”„๋ ˆ์ž„์˜ ๋ ˆ์ด์•„์›ƒ์„ ๋ณ€๊ฒฝํ•˜๋Š” ํ™•์žฅ์€ ํ”ผ์–ด๊ฐ€ ์ด๋ฅผ ํ—ˆ์šฉํ•œ๋‹ค๋Š” ๊ธ์ •์  ์‹ ํ˜ธ๋ฅผ ์ค„ ๋•Œ๊นŒ์ง€ ์‚ฌ์šฉํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค. ์ด ๊ฒฝ์šฐ ์ˆ˜์ •๋œ ๋ ˆ์ด์•„์›ƒ์ด ์–ธ์ œ ํšจ๋ ฅ์„ ๋ฐœ์ƒํ•˜๋Š”์ง€ ์กฐ์œจํ•  ํ•„์š”๊ฐ€ ์žˆ์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์˜ˆ๋กœ, DATA ํ”„๋ ˆ์ž„ ์ด์™ธ์˜ ํ”„๋ ˆ์ž„์„ ํ๋ฆ„ ์ œ์–ด ๋Œ€์ƒ์œผ๋กœ ์ทจ๊ธ‰ํ•˜๋ ค๋ฉด ์–‘์ชฝ ์—”๋“œํฌ์ธํŠธ๊ฐ€ ์ดํ•ดํ•ด์•ผ ํ•˜๋Š” ์˜๋ฏธ ๋ณ€๊ฒฝ์ด ํ•„์š”ํ•˜๋ฏ€๋กœ, ์ด๋Š” ํ˜‘์ƒ์„ ํ†ตํ•ด์„œ๋งŒ ๊ฐ€๋Šฅํ•  ๊ฒƒ์ž…๋‹ˆ๋‹ค.

์ด ๋ฌธ์„œ๋Š” ํ™•์žฅ ์‚ฌ์šฉ์„ ํ˜‘์ƒํ•˜๋Š” ํŠน์ • ๋ฐฉ๋ฒ•์„ ๊ฐ•์ œํ•˜์ง€ ์•Š์ง€๋งŒ, ์„ค์ •(์„น์…˜ 6.5.2)์ด ๊ทธ ๋ชฉ์ ์— ์‚ฌ์šฉ๋  ์ˆ˜ ์žˆ์Œ์„ ์ง€์ ํ•ฉ๋‹ˆ๋‹ค. ์–‘์ชฝ ํ”ผ์–ด๊ฐ€ ํ™•์žฅ ์‚ฌ์šฉ ์˜์‚ฌ๋ฅผ ๋‚˜ํƒ€๋‚ด๋Š” ๊ฐ’์„ ์„ค์ •ํ•˜๋ฉด ํ™•์žฅ์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์„ค์ •์ด ํ™•์žฅ ํ˜‘์ƒ์— ์‚ฌ์šฉ๋˜๋Š” ๊ฒฝ์šฐ ์ดˆ๊ธฐ ๊ฐ’์€ ํ™•์žฅ์ด ์ดˆ๊ธฐ์—๋Š” ๋น„ํ™œ์„ฑํ™”๋˜๋„๋ก ์ •์˜๋˜์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค(MUST).


6. ํ”„๋ ˆ์ž„ ์ •์˜

์ด ๋ช…์„ธ์„œ๋Š” ๊ณ ์œ ํ•œ 8๋น„ํŠธ ํƒ€์ž… ์ฝ”๋“œ๋กœ ์‹๋ณ„๋˜๋Š” ์—ฌ๋Ÿฌ ํ”„๋ ˆ์ž„ ์œ ํ˜•์„ ์ •์˜ํ•œ๋‹ค. ๊ฐ ํ”„๋ ˆ์ž„ ์œ ํ˜•์€ ์—ฐ๊ฒฐ ์ „์ฒด๋‚˜ ๊ฐœ๋ณ„ ์ŠคํŠธ๋ฆผ์˜ ์„ค์ • ๋ฐ ๊ด€๋ฆฌ์—์„œ ๊ฐ๊ฐ ๋‹ค๋ฅธ ๋ชฉ์ ์„ ์ˆ˜ํ–‰ํ•œ๋‹ค.

ํŠน์ • ํ”„๋ ˆ์ž„ ์œ ํ˜•์˜ ์ „์†ก์€ ์—ฐ๊ฒฐ ์ƒํƒœ๋ฅผ ๋ณ€๊ฒฝํ•  ์ˆ˜ ์žˆ๋‹ค. ์—”๋“œํฌ์ธํŠธ๊ฐ€ ์—ฐ๊ฒฐ ์ƒํƒœ์— ๋Œ€ํ•ด ๋™๊ธฐํ™”๋œ ๊ด€์ ์„ ์œ ์ง€ํ•˜์ง€ ๋ชปํ•˜๋ฉด ์—ฐ๊ฒฐ ๋‚ด์—์„œ์˜ ์„ฑ๊ณต์ ์ธ ํ†ต์‹ ์ด ๋” ์ด์ƒ ๋ถˆ๊ฐ€๋Šฅํ•ด์ง„๋‹ค. ๋”ฐ๋ผ์„œ ์—”๋“œํฌ์ธํŠธ๊ฐ€ ์–ด๋–ค ํ”„๋ ˆ์ž„์˜ ์‚ฌ์šฉ์ด ์ƒํƒœ์— ์–ด๋–ค ์˜ํ–ฅ์„ ๋ฏธ์น˜๋Š”์ง€์— ๋Œ€ํ•ด ๊ณต๋™์œผ๋กœ ์ดํ•ดํ•˜๋Š” ๊ฒƒ์ด ์ค‘์š”ํ•˜๋‹ค.

6.1. DATA

DATA ํ”„๋ ˆ์ž„(type=0x00)์€ ์ŠคํŠธ๋ฆผ๊ณผ ์—ฐ๊ด€๋œ ์ž„์˜์˜ ๊ฐ€๋ณ€ ๊ธธ์ด ์˜ฅํ…Ÿ ์‹œํ€€์Šค๋ฅผ ์ „๋‹ฌํ•œ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด ํ•˜๋‚˜ ์ด์ƒ์˜ DATA ํ”„๋ ˆ์ž„์€ HTTP ์š”์ฒญ ๋˜๋Š” ์‘๋‹ต ๋ฉ”์‹œ์ง€์˜ ๋ณธ๋ฌธ์„ ์šด๋ฐ˜ํ•˜๋Š” ๋ฐ ์‚ฌ์šฉ๋œ๋‹ค.

DATA ํ”„๋ ˆ์ž„์€ ํŒจ๋”ฉ์„ ํฌํ•จํ•  MAY ์žˆ๋‹ค. ํŒจ๋”ฉ์€ ๋ฉ”์‹œ์ง€ ํฌ๊ธฐ๋ฅผ ์ˆจ๊ธฐ๊ธฐ ์œ„ํ•ด DATA ํ”„๋ ˆ์ž„์— ์ถ”๊ฐ€๋  ์ˆ˜ ์žˆ๋‹ค. ํŒจ๋”ฉ์€ ๋ณด์•ˆ ๊ธฐ๋Šฅ์ด๋‹ค; ์ž์„ธํ•œ ๋‚ด์šฉ์€ ์„น์…˜ 10.7์„ ์ฐธ์กฐํ•˜๋ผ.

DATA Frame {
  Length (24),
  Type (8) = 0x00,

  Unused Flags (4),
  PADDED Flag (1),
  Unused Flags (2),
  END_STREAM Flag (1),

  Reserved (1),
  Stream Identifier (31),

  [Pad Length (8)],
  Data (..),
  Padding (..2040),
}

๊ทธ๋ฆผ 3: DATA ํ”„๋ ˆ์ž„ ํ˜•์‹

Length, Type, Unused Flag(s), Reserved ๋ฐ Stream Identifier ํ•„๋“œ๋Š” ์„น์…˜ 4์— ์„ค๋ช…๋˜์–ด ์žˆ๋‹ค. DATA ํ”„๋ ˆ์ž„์€ ๋‹ค์Œ์˜ ์ถ”๊ฐ€ ํ•„๋“œ๋ฅผ ํฌํ•จํ•œ๋‹ค:

Pad Length:
ํ”„๋ ˆ์ž„ ํŒจ๋”ฉ์˜ ๊ธธ์ด๋ฅผ ์˜ฅํ…Ÿ ๋‹จ์œ„๋กœ ๋‹ด๋Š” 8๋น„ํŠธ ํ•„๋“œ์ด๋‹ค. ์ด ํ•„๋“œ๋Š” PADDED ํ”Œ๋ž˜๊ทธ๊ฐ€ ์„ค์ •๋œ ๊ฒฝ์šฐ์—๋งŒ ์กด์žฌํ•œ๋‹ค.
Data:
์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๋ฐ์ดํ„ฐ. ๋ฐ์ดํ„ฐ์˜ ์–‘์€ ์กด์žฌํ•˜๋Š” ๋‹ค๋ฅธ ํ•„๋“œ๋“ค์˜ ๊ธธ์ด๋ฅผ ์ œ์™ธํ•œ ํ”„๋ ˆ์ž„ ํŽ˜์ด๋กœ๋“œ์˜ ๋‚˜๋จธ์ง€์ด๋‹ค.
Padding:
์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์˜๋ฏธ๋ฅผ ๊ฐ€์ง€์ง€ ์•Š๋Š” ํŒจ๋”ฉ ์˜ฅํ…Ÿ๋“ค. ์ „์†ก ์‹œ ํŒจ๋”ฉ ์˜ฅํ…Ÿ์€ MUST 0์œผ๋กœ ์„ค์ •๋˜์–ด์•ผ ํ•œ๋‹ค. ์ˆ˜์‹ ์ž๋Š” ํŒจ๋”ฉ์„ ๊ฒ€์ฆํ•  ์˜๋ฌด๋Š” ์—†์ง€๋งŒ, ๋น„์˜(้ž้›ถ) ํŒจ๋”ฉ์„ ์„น์…˜ 5.4.1์— ๊ทœ์ •๋œ PROTOCOL_ERROR ์œ ํ˜•์˜ ์—ฐ๊ฒฐ ์˜ค๋ฅ˜๋กœ ์ฒ˜๋ฆฌํ•  MAY ์žˆ๋‹ค.

DATA ํ”„๋ ˆ์ž„์€ ๋‹ค์Œ๊ณผ ๊ฐ™์€ ํ”Œ๋ž˜๊ทธ๋ฅผ ์ •์˜ํ•œ๋‹ค:

PADDED (0x08):
์„ค์ •๋˜๋ฉด PADDED ํ”Œ๋ž˜๊ทธ๋Š” Pad Length ํ•„๋“œ์™€ ๊ทธ๊ฐ€ ์„ค๋ช…ํ•˜๋Š” ํŒจ๋”ฉ์ด ์กด์žฌํ•จ์„ ๋‚˜ํƒ€๋‚ธ๋‹ค.
END_STREAM (0x01):
์„ค์ •๋˜๋ฉด END_STREAM ํ”Œ๋ž˜๊ทธ๋Š” ์ด ํ”„๋ ˆ์ž„์ด ์‹๋ณ„๋œ ์ŠคํŠธ๋ฆผ์— ๋Œ€ํ•ด ์—”๋“œํฌ์ธํŠธ๊ฐ€ ์ „์†กํ•  ๋งˆ์ง€๋ง‰ ํ”„๋ ˆ์ž„์ž„์„ ๋‚˜ํƒ€๋‚ธ๋‹ค. ์ด ํ”Œ๋ž˜๊ทธ๋ฅผ ์„ค์ •ํ•˜๋ฉด ์ŠคํŠธ๋ฆผ์€ "half-closed" ์ƒํƒœ ์ค‘ ํ•˜๋‚˜ ๋˜๋Š” "closed" ์ƒํƒœ๋กœ ์ „์ด๋œ๋‹ค(์„น์…˜ 5.1).

DATA ํ”„๋ ˆ์ž„์€ ๋ฐ˜๋“œ์‹œ ์ŠคํŠธ๋ฆผ๊ณผ ์—ฐ๊ด€๋˜์–ด์•ผ ํ•œ๋‹ค. Stream Identifier ํ•„๋“œ๊ฐ€ 0x00์ธ DATA ํ”„๋ ˆ์ž„์„ ์ˆ˜์‹ ํ•˜๋ฉด ์ˆ˜์‹ ์ž๋Š” ์„น์…˜ 5.4.1์— ๊ทœ์ •๋œ PROTOCOL_ERROR ์œ ํ˜•์˜ ์—ฐ๊ฒฐ ์˜ค๋ฅ˜๋กœ ์‘๋‹ตํ•ด์•ผ ํ•œ๋‹ค(MUST).

DATA ํ”„๋ ˆ์ž„์€ ํ๋ฆ„ ์ œ์–ด์˜ ๋Œ€์ƒ์ด๋ฉฐ ์ŠคํŠธ๋ฆผ์ด "open" ๋˜๋Š” "half-closed (remote)" ์ƒํƒœ์ผ ๋•Œ๋งŒ ์ „์†ก๋  ์ˆ˜ ์žˆ๋‹ค. ์ „์ฒด DATA ํ”„๋ ˆ์ž„ ํŽ˜์ด๋กœ๋“œ๋Š” Pad Length ๋ฐ Padding ํ•„๋“œ๊ฐ€ ์กด์žฌํ•˜๋Š” ๊ฒฝ์šฐ ์ด๋ฅผ ํฌํ•จํ•˜์—ฌ ํ๋ฆ„ ์ œ์–ด์— ํฌํ•จ๋œ๋‹ค. ์ŠคํŠธ๋ฆผ์ด "open" ๋˜๋Š” "half-closed (local)" ์ƒํƒœ๊ฐ€ ์•„๋‹Œ ์ŠคํŠธ๋ฆผ์˜ DATA ํ”„๋ ˆ์ž„์„ ์ˆ˜์‹ ํ•˜๋ฉด ์ˆ˜์‹ ์ž๋Š” ์„น์…˜ 5.4.2์— ๊ทœ์ •๋œ STREAM_CLOSED ์œ ํ˜•์˜ ์ŠคํŠธ๋ฆผ ์˜ค๋ฅ˜๋กœ ์‘๋‹ตํ•ด์•ผ ํ•œ๋‹ค(MUST).

ํŒจ๋”ฉ ์˜ฅํ…Ÿ์˜ ์ด ์ˆ˜๋Š” Pad Length ํ•„๋“œ์˜ ๊ฐ’์œผ๋กœ ๊ฒฐ์ •๋œ๋‹ค. ํŒจ๋”ฉ์˜ ๊ธธ์ด๊ฐ€ ํ”„๋ ˆ์ž„ ํŽ˜์ด๋กœ๋“œ์˜ ๊ธธ์ด ์ด์ƒ์ธ ๊ฒฝ์šฐ ์ˆ˜์‹ ์ž๋Š” ์ด๋ฅผ ์„น์…˜ 5.4.1์— ๊ทœ์ •๋œ PROTOCOL_ERROR ์œ ํ˜•์˜ ์—ฐ๊ฒฐ ์˜ค๋ฅ˜๋กœ ์ฒ˜๋ฆฌํ•ด์•ผ ํ•œ๋‹ค(MUST).

6.2. HEADERS

HEADERS ํ”„๋ ˆ์ž„(type=0x01)์€ ์ŠคํŠธ๋ฆผ์„ ์—ด๊ธฐ ์œ„ํ•ด ์‚ฌ์šฉ๋˜๋ฉฐ(์„น์…˜ 5.1) ํ•„๋“œ ๋ธ”๋ก ์กฐ๊ฐ์„ ํ•จ๊ป˜ ์šด๋ฐ˜ํ•œ๋‹ค. ์ด๋ฆ„๊ณผ ๋‹ฌ๋ฆฌ HEADERS ํ”„๋ ˆ์ž„์€ ํ—ค๋” ์„น์…˜ ๋˜๋Š” ํŠธ๋ ˆ์ผ๋Ÿฌ ์„น์…˜์„ ์šด๋ฐ˜ํ•  ์ˆ˜ ์žˆ๋‹ค. HEADERS ํ”„๋ ˆ์ž„์€ ์ŠคํŠธ๋ฆผ์ด "idle", "reserved (local)", "open" ๋˜๋Š” "half-closed (remote)" ์ƒํƒœ์ผ ๋•Œ ์ „์†ก๋  ์ˆ˜ ์žˆ๋‹ค.

HEADERS Frame {
  Length (24),
  Type (8) = 0x01,

  Unused Flags (2),
  PRIORITY Flag (1),
  Unused Flag (1),
  PADDED Flag (1),
  END_HEADERS Flag (1),
  Unused Flag (1),
  END_STREAM Flag (1),

  Reserved (1),
  Stream Identifier (31),

  [Pad Length (8)],
  [Exclusive (1)],
  [Stream Dependency (31)],
  [Weight (8)],
  Field Block Fragment (..),
  Padding (..2040),
}

๊ทธ๋ฆผ 4: HEADERS ํ”„๋ ˆ์ž„ ํ˜•์‹

Length, Type, Unused Flag(s), Reserved ๋ฐ Stream Identifier ํ•„๋“œ๋Š” ์„น์…˜ 4์— ์„ค๋ช…๋˜์–ด ์žˆ๋‹ค. HEADERS ํ”„๋ ˆ์ž„ ํŽ˜์ด๋กœ๋“œ์—๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์€ ์ถ”๊ฐ€ ํ•„๋“œ๊ฐ€ ์žˆ๋‹ค:

Pad Length:
ํ”„๋ ˆ์ž„ ํŒจ๋”ฉ์˜ ๊ธธ์ด๋ฅผ ์˜ฅํ…Ÿ ๋‹จ์œ„๋กœ ๋‹ด๋Š” 8๋น„ํŠธ ํ•„๋“œ์ด๋‹ค. ์ด ํ•„๋“œ๋Š” PADDED ํ”Œ๋ž˜๊ทธ๊ฐ€ ์„ค์ •๋œ ๊ฒฝ์šฐ์—๋งŒ ์กด์žฌํ•œ๋‹ค.
Exclusive:
๋‹จ์ผ ๋น„ํŠธ ํ”Œ๋ž˜๊ทธ. ์ด ํ•„๋“œ๋Š” PRIORITY ํ”Œ๋ž˜๊ทธ๊ฐ€ ์„ค์ •๋œ ๊ฒฝ์šฐ์—๋งŒ ์กด์žฌํ•œ๋‹ค. HEADERS ํ”„๋ ˆ์ž„์˜ ์šฐ์„ ์ˆœ์œ„ ์‹ ํ˜ธ๋Š” ์‚ฌ์šฉ ์ค‘๋‹จ๋˜์—ˆ๋‹ค; ์ž์„ธํ•œ ๋‚ด์šฉ์€ ์„น์…˜ 5.3.2๋ฅผ ๋ณด๋ผ.
Stream Dependency:
31๋น„ํŠธ ์ŠคํŠธ๋ฆผ ์‹๋ณ„์ž. ์ด ํ•„๋“œ๋Š” PRIORITY ํ”Œ๋ž˜๊ทธ๊ฐ€ ์„ค์ •๋œ ๊ฒฝ์šฐ์—๋งŒ ์กด์žฌํ•œ๋‹ค.
Weight:
๋ถ€ํ˜ธ ์—†๋Š” 8๋น„ํŠธ ์ •์ˆ˜. ์ด ํ•„๋“œ๋Š” PRIORITY ํ”Œ๋ž˜๊ทธ๊ฐ€ ์„ค์ •๋œ ๊ฒฝ์šฐ์—๋งŒ ์กด์žฌํ•œ๋‹ค.
Field Block Fragment:
ํ•„๋“œ ๋ธ”๋ก ์กฐ๊ฐ(์„น์…˜ 4.3).
Padding:
์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์˜๋ฏธ๋ฅผ ๊ฐ€์ง€์ง€ ์•Š๋Š” ํŒจ๋”ฉ ์˜ฅํ…Ÿ๋“ค. ์ „์†ก ์‹œ ํŒจ๋”ฉ ์˜ฅํ…Ÿ์€ MUST 0์œผ๋กœ ์„ค์ •๋˜์–ด์•ผ ํ•œ๋‹ค. ์ˆ˜์‹ ์ž๋Š” ํŒจ๋”ฉ์„ ๊ฒ€์ฆํ•  ์˜๋ฌด๋Š” ์—†์ง€๋งŒ, ๋น„์˜(้ž้›ถ) ํŒจ๋”ฉ์„ ์„น์…˜ 5.4.1์— ๊ทœ์ •๋œ PROTOCOL_ERROR ์œ ํ˜•์˜ ์—ฐ๊ฒฐ ์˜ค๋ฅ˜๋กœ ์ฒ˜๋ฆฌํ•  MAY ์žˆ๋‹ค.

HEADERS ํ”„๋ ˆ์ž„์€ ๋‹ค์Œ๊ณผ ๊ฐ™์€ ํ”Œ๋ž˜๊ทธ๋ฅผ ์ •์˜ํ•œ๋‹ค:

PRIORITY (0x20):
์„ค์ •๋˜๋ฉด PRIORITY ํ”Œ๋ž˜๊ทธ๋Š” Exclusive, Stream Dependency ๋ฐ Weight ํ•„๋“œ๊ฐ€ ์กด์žฌํ•จ์„ ๋‚˜ํƒ€๋‚ธ๋‹ค.
PADDED (0x08):
์„ค์ •๋˜๋ฉด PADDED ํ”Œ๋ž˜๊ทธ๋Š” Pad Length ํ•„๋“œ์™€ ๊ทธ๊ฐ€ ์„ค๋ช…ํ•˜๋Š” ํŒจ๋”ฉ์ด ์กด์žฌํ•จ์„ ๋‚˜ํƒ€๋‚ธ๋‹ค.
END_HEADERS (0x04):
์„ค์ •๋˜๋ฉด END_HEADERS ํ”Œ๋ž˜๊ทธ๋Š” ์ด ํ”„๋ ˆ์ž„์ด ์ „์ฒด ํ•„๋“œ ๋ธ”๋ก(์„น์…˜ 4.3)์„ ํฌํ•จํ•˜๋ฉฐ ๋’ค๋”ฐ๋ฅด๋Š” CONTINUATION ํ”„๋ ˆ์ž„์ด ์—†์Œ์„ ๋‚˜ํƒ€๋‚ธ๋‹ค.
END_HEADERS ํ”Œ๋ž˜๊ทธ๊ฐ€ ์„ค์ •๋˜์ง€ ์•Š์€ HEADERS ํ”„๋ ˆ์ž„์€ ๋™์ผํ•œ ์ŠคํŠธ๋ฆผ์— ๋Œ€ํ•œ CONTINUATION ํ”„๋ ˆ์ž„์œผ๋กœ ๋’ค๋”ฐ๋ผ์•ผ ํ•œ๋‹ค. ์ˆ˜์‹ ์ž๋Š” ๋‹ค๋ฅธ ์œ ํ˜•์˜ ํ”„๋ ˆ์ž„์ด๋‚˜ ๋‹ค๋ฅธ ์ŠคํŠธ๋ฆผ์˜ ํ”„๋ ˆ์ž„์„ ์ˆ˜์‹ ํ•˜๋ฉด ์ด๋ฅผ ์„น์…˜ 5.4.1์— ๊ทœ์ •๋œ PROTOCOL_ERROR ์œ ํ˜•์˜ ์—ฐ๊ฒฐ ์˜ค๋ฅ˜๋กœ ์ฒ˜๋ฆฌํ•ด์•ผ ํ•œ๋‹ค(MUST).
END_STREAM (0x01):
์„ค์ •๋˜๋ฉด END_STREAM ํ”Œ๋ž˜๊ทธ๋Š” ์ด ํ•„๋“œ ๋ธ”๋ก(์„น์…˜ 4.3)์ด ์‹๋ณ„๋œ ์ŠคํŠธ๋ฆผ์— ๋Œ€ํ•ด ์—”๋“œํฌ์ธํŠธ๊ฐ€ ์ „์†กํ•  ๋งˆ์ง€๋ง‰ ๊ฒƒ์ž„์„ ๋‚˜ํƒ€๋‚ธ๋‹ค.
END_STREAM ํ”Œ๋ž˜๊ทธ๊ฐ€ ์„ค์ •๋œ HEADERS ํ”„๋ ˆ์ž„์€ ์ŠคํŠธ๋ฆผ์˜ ์ข…๋ฃŒ๋ฅผ ์‹ ํ˜ธํ•œ๋‹ค. ๋‹ค๋งŒ END_STREAM ํ”Œ๋ž˜๊ทธ๊ฐ€ ์„ค์ •๋œ HEADERS ํ”„๋ ˆ์ž„์— ์ด์–ด ๋™์ผํ•œ ์ŠคํŠธ๋ฆผ์— ๋Œ€ํ•ด CONTINUATION ํ”„๋ ˆ์ž„์ด ์˜ฌ ์ˆ˜ ์žˆ๋‹ค. ๋…ผ๋ฆฌ์ ์œผ๋กœ๋Š” CONTINUATION ํ”„๋ ˆ์ž„์€ HEADERS ํ”„๋ ˆ์ž„์˜ ์ผ๋ถ€์ด๋‹ค.

HEADERS ํ”„๋ ˆ์ž„์˜ ํ”„๋ ˆ์ž„ ํŽ˜์ด๋กœ๋“œ๋Š” ํ•„๋“œ ๋ธ”๋ก ์กฐ๊ฐ(์„น์…˜ 4.3)์„ ํฌํ•จํ•œ๋‹ค. HEADERS ํ”„๋ ˆ์ž„์— ๋งž์ง€ ์•Š๋Š” ํ•„๋“œ ๋ธ”๋ก์€ CONTINUATION ํ”„๋ ˆ์ž„(์„น์…˜ 6.10)์—์„œ ๊ณ„์†๋œ๋‹ค.

HEADERS ํ”„๋ ˆ์ž„์€ ๋ฐ˜๋“œ์‹œ ์ŠคํŠธ๋ฆผ๊ณผ ์—ฐ๊ด€๋˜์–ด์•ผ ํ•œ๋‹ค. Stream Identifier ํ•„๋“œ๊ฐ€ 0x00์ธ HEADERS ํ”„๋ ˆ์ž„์„ ์ˆ˜์‹ ํ•˜๋ฉด ์ˆ˜์‹ ์ž๋Š” ์„น์…˜ 5.4.1์— ๊ทœ์ •๋œ PROTOCOL_ERROR ์œ ํ˜•์˜ ์—ฐ๊ฒฐ ์˜ค๋ฅ˜๋กœ ์‘๋‹ตํ•ด์•ผ ํ•œ๋‹ค(MUST).

HEADERS ํ”„๋ ˆ์ž„์€ ์„น์…˜ 4.3์— ์„ค๋ช…๋œ ๋Œ€๋กœ ์—ฐ๊ฒฐ ์ƒํƒœ๋ฅผ ๋ณ€๊ฒฝํ•œ๋‹ค.

ํŒจ๋”ฉ ์˜ฅํ…Ÿ์˜ ์ด ์ˆ˜๋Š” Pad Length ํ•„๋“œ์˜ ๊ฐ’์œผ๋กœ ๊ฒฐ์ •๋œ๋‹ค. ํŒจ๋”ฉ์˜ ๊ธธ์ด๊ฐ€ ํ”„๋ ˆ์ž„ ํŽ˜์ด๋กœ๋“œ์˜ ๊ธธ์ด ์ด์ƒ์ธ ๊ฒฝ์šฐ ์ˆ˜์‹ ์ž๋Š” ์ด๋ฅผ ์„น์…˜ 5.4.1์— ๊ทœ์ •๋œ PROTOCOL_ERROR ์œ ํ˜•์˜ ์—ฐ๊ฒฐ ์˜ค๋ฅ˜๋กœ ์ฒ˜๋ฆฌํ•ด์•ผ ํ•œ๋‹ค(MUST).

6.3. PRIORITY

PRIORITY ํ”„๋ ˆ์ž„(type=0x02)์€ ์‚ฌ์šฉ ์ค‘๋‹จ(deprecated)๋˜์—ˆ๋‹ค; ์ž์„ธํ•œ ๋‚ด์šฉ์€ ์„น์…˜ 5.3.2๋ฅผ ๋ณด๋ผ. PRIORITY ํ”„๋ ˆ์ž„์€ idle ๋˜๋Š” closed ์ŠคํŠธ๋ฆผ์„ ํฌํ•จํ•˜์—ฌ ์–ด๋–ค ์ŠคํŠธ๋ฆผ ์ƒํƒœ์—์„œ๋„ ์ „์†ก๋  ์ˆ˜ ์žˆ๋‹ค.

PRIORITY Frame {
  Length (24) = 0x05,
  Type (8) = 0x02,

  Unused Flags (8),

  Reserved (1),
  Stream Identifier (31),

  Exclusive (1),
  Stream Dependency (31),
  Weight (8),
}

๊ทธ๋ฆผ 5: PRIORITY ํ”„๋ ˆ์ž„ ํ˜•์‹

Length, Type, Unused Flag(s), Reserved ๋ฐ Stream Identifier ํ•„๋“œ๋Š” ์„น์…˜ 4์— ์„ค๋ช…๋˜์–ด ์žˆ๋‹ค. PRIORITY ํ”„๋ ˆ์ž„์˜ ํŽ˜์ด๋กœ๋“œ๋Š” ๋‹ค์Œ์˜ ์ถ”๊ฐ€ ํ•„๋“œ๋ฅผ ํฌํ•จํ•œ๋‹ค:

Exclusive:
๋‹จ์ผ ๋น„ํŠธ ํ”Œ๋ž˜๊ทธ.
Stream Dependency:
31๋น„ํŠธ ์ŠคํŠธ๋ฆผ ์‹๋ณ„์ž.
Weight:
๋ถ€ํ˜ธ ์—†๋Š” 8๋น„ํŠธ ์ •์ˆ˜.

PRIORITY ํ”„๋ ˆ์ž„์€ ์–ด๋–ค ํ”Œ๋ž˜๊ทธ๋„ ์ •์˜ํ•˜์ง€ ์•Š๋Š”๋‹ค.

PRIORITY ํ”„๋ ˆ์ž„์€ ํ•ญ์ƒ ์ŠคํŠธ๋ฆผ์„ ์‹๋ณ„ํ•œ๋‹ค. Stream Identifier๊ฐ€ 0x00์ธ PRIORITY ํ”„๋ ˆ์ž„์„ ์ˆ˜์‹ ํ•˜๋ฉด ์ˆ˜์‹ ์ž๋Š” ์„น์…˜ 5.4.1์— ๊ทœ์ •๋œ PROTOCOL_ERROR ์œ ํ˜•์˜ ์—ฐ๊ฒฐ ์˜ค๋ฅ˜๋กœ ์‘๋‹ตํ•ด์•ผ ํ•œ๋‹ค(MUST).

PRIORITY ํ”„๋ ˆ์ž„์˜ ์ „์†ก ๋˜๋Š” ์ˆ˜์‹ ์€ ์–ด๋–ค ์ŠคํŠธ๋ฆผ์˜ ์ƒํƒœ์—๋„ ์˜ํ–ฅ์„ ๋ฏธ์น˜์ง€ ์•Š๋Š”๋‹ค(์„น์…˜ 5.1). PRIORITY ํ”„๋ ˆ์ž„์€ "idle" ๋˜๋Š” "closed"๋ฅผ ํฌํ•จํ•œ ์–ด๋–ค ์ƒํƒœ์˜ ์ŠคํŠธ๋ฆผ์—์„œ๋„ ์ „์†ก๋  ์ˆ˜ ์žˆ๋‹ค. PRIORITY ํ”„๋ ˆ์ž„์€ ๋‹จ์ผ ํ•„๋“œ ๋ธ”๋ก์„ ๊ตฌ์„ฑํ•˜๋Š” ์—ฐ์†๋œ ํ”„๋ ˆ์ž„๋“ค ์‚ฌ์ด์— ์ „์†ก๋˜์–ด์„œ๋Š” ์•ˆ ๋œ๋‹ค(์„น์…˜ 4.3).

๊ธธ์ด๊ฐ€ 5 ์˜ฅํ…Ÿ์ด ์•„๋‹Œ PRIORITY ํ”„๋ ˆ์ž„์€ ์„น์…˜ 5.4.2์— ๊ทœ์ •๋œ FRAME_SIZE_ERROR ์œ ํ˜•์˜ ์ŠคํŠธ๋ฆผ ์˜ค๋ฅ˜๋กœ ์ฒ˜๋ฆฌ๋˜์–ด์•ผ ํ•œ๋‹ค(MUST).

6.4. RST_STREAM

RST_STREAM ํ”„๋ ˆ์ž„(type=0x03)์€ ์ŠคํŠธ๋ฆผ์„ ์ฆ‰์‹œ ์ข…๋ฃŒํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•ด ์ค€๋‹ค. RST_STREAM์€ ์ŠคํŠธ๋ฆผ ์ทจ์†Œ๋ฅผ ์š”์ฒญํ•˜๊ฑฐ๋‚˜ ์˜ค๋ฅ˜ ์กฐ๊ฑด์ด ๋ฐœ์ƒํ–ˆ์Œ์„ ์•Œ๋ฆฌ๊ธฐ ์œ„ํ•ด ์ „์†ก๋œ๋‹ค.

RST_STREAM Frame {
  Length (24) = 0x04,
  Type (8) = 0x03,

  Unused Flags (8),

  Reserved (1),
  Stream Identifier (31),

  Error Code (32),
}

๊ทธ๋ฆผ 6: RST_STREAM ํ”„๋ ˆ์ž„ ํ˜•์‹

Length, Type, Unused Flag(s), Reserved ๋ฐ Stream Identifier ํ•„๋“œ๋Š” ์„น์…˜ 4์— ์„ค๋ช…๋˜์–ด ์žˆ๋‹ค. ์ถ”๊ฐ€๋กœ RST_STREAM ํ”„๋ ˆ์ž„์€ ์˜ค๋ฅ˜ ์ฝ”๋“œ๋ฅผ ์‹๋ณ„ํ•˜๋Š” ๋ถ€ํ˜ธ ์—†๋Š” 32๋น„ํŠธ ์ •์ˆ˜ ํ•˜๋‚˜๋ฅผ ํฌํ•จํ•œ๋‹ค(์„น์…˜ 7). ์˜ค๋ฅ˜ ์ฝ”๋“œ๋Š” ์ŠคํŠธ๋ฆผ์ด ์ข…๋ฃŒ๋˜๋Š” ์ด์œ ๋ฅผ ๋‚˜ํƒ€๋‚ธ๋‹ค.

RST_STREAM ํ”„๋ ˆ์ž„์€ ์–ด๋–ค ํ”Œ๋ž˜๊ทธ๋„ ์ •์˜ํ•˜์ง€ ์•Š๋Š”๋‹ค.

RST_STREAM ํ”„๋ ˆ์ž„์€ ์ฐธ์กฐ๋œ ์ŠคํŠธ๋ฆผ์„ ์™„์ „ํžˆ ์ข…๋ฃŒ์‹œํ‚ค๊ณ  ํ•ด๋‹น ์ŠคํŠธ๋ฆผ์„ "closed" ์ƒํƒœ๋กœ ๋งŒ๋“ ๋‹ค. ์ŠคํŠธ๋ฆผ์—์„œ RST_STREAM์„ ์ˆ˜์‹ ํ•œ ํ›„ ์ˆ˜์‹ ์ž๋Š” ํ•ด๋‹น ์ŠคํŠธ๋ฆผ์— ๋Œ€ํ•ด ์ถ”๊ฐ€ ํ”„๋ ˆ์ž„์„ ์ „์†กํ•ด์„œ๋Š” ์•ˆ ๋œ๋‹ค(MUST NOT), ๋‹จ PRIORITY๋Š” ์˜ˆ์™ธ์ด๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ RST_STREAM์„ ์ „์†กํ•œ ํ›„ ์ „์†กํ•œ ์—”๋“œํฌ์ธํŠธ๋Š” RST_STREAM ๋„์ฐฉ ์ „์— ํ”ผ์–ด๊ฐ€ ์ „์†กํ–ˆ๊ฑฐ๋‚˜ ์ „์†ก ๋Œ€๊ธฐ์—ด์— ์˜ฌ๋ ค๋‘” ์ถ”๊ฐ€ ํ”„๋ ˆ์ž„์„ ์ˆ˜์‹ ํ•˜๊ณ  ์ฒ˜๋ฆฌํ•  ์ค€๋น„๋ฅผ MUST ํ•ด์•ผ ํ•œ๋‹ค.

RST_STREAM ํ”„๋ ˆ์ž„์€ ๋ฐ˜๋“œ์‹œ ์ŠคํŠธ๋ฆผ๊ณผ ์—ฐ๊ด€๋˜์–ด์•ผ ํ•œ๋‹ค. Stream Identifier๊ฐ€ 0x00์ธ RST_STREAM ํ”„๋ ˆ์ž„์„ ์ˆ˜์‹ ํ•˜๋ฉด ์ˆ˜์‹ ์ž๋Š” ์„น์…˜ 5.4.1์— ๊ทœ์ •๋œ PROTOCOL_ERROR ์œ ํ˜•์˜ ์—ฐ๊ฒฐ ์˜ค๋ฅ˜๋กœ ์ฒ˜๋ฆฌํ•ด์•ผ ํ•œ๋‹ค(MUST).

RST_STREAM ํ”„๋ ˆ์ž„์€ "idle" ์ƒํƒœ์˜ ์ŠคํŠธ๋ฆผ์— ๋Œ€ํ•ด ์ „์†กํ•ด์„œ๋Š” MUST NOT ํ•œ๋‹ค. "idle" ์ŠคํŠธ๋ฆผ์„ ์‹๋ณ„ํ•˜๋Š” RST_STREAM ํ”„๋ ˆ์ž„์„ ์ˆ˜์‹ ํ•˜๋ฉด ์ˆ˜์‹ ์ž๋Š” ์ด๋ฅผ ์„น์…˜ 5.4.1์— ๊ทœ์ •๋œ PROTOCOL_ERROR ์œ ํ˜•์˜ ์—ฐ๊ฒฐ ์˜ค๋ฅ˜๋กœ ์ฒ˜๋ฆฌํ•ด์•ผ ํ•œ๋‹ค(MUST).

๊ธธ์ด๊ฐ€ 4 ์˜ฅํ…Ÿ์ด ์•„๋‹Œ RST_STREAM ํ”„๋ ˆ์ž„์€ ์„น์…˜ 5.4.1์— ๊ทœ์ •๋œ FRAME_SIZE_ERROR ์œ ํ˜•์˜ ์—ฐ๊ฒฐ ์˜ค๋ฅ˜๋กœ ์ฒ˜๋ฆฌ๋˜์–ด์•ผ ํ•œ๋‹ค(MUST).

6.5. SETTINGS

SETTINGS ํ”„๋ ˆ์ž„(type=0x04)์€ ํ”ผ์–ด ๋™์ž‘์˜ ์„ ํ˜ธ๋„ ๋ฐ ์ œ์•ฝ๊ณผ ๊ฐ™์ด ์—”๋“œํฌ์ธํŠธ ๊ฐ„ ํ†ต์‹  ๋ฐฉ์‹์— ์˜ํ–ฅ์„ ๋ฏธ์น˜๋Š” ๊ตฌ์„ฑ ๋งค๊ฐœ๋ณ€์ˆ˜๋ฅผ ์ „๋‹ฌํ•œ๋‹ค. ๋˜ํ•œ SETTINGS ํ”„๋ ˆ์ž„์€ ์ด๋Ÿฌํ•œ ์„ค์ •์˜ ์ˆ˜์‹ ์„ ํ™•์ธํ•˜๋Š” ๋ฐ ์‚ฌ์šฉ๋œ๋‹ค. SETTINGS ํ”„๋ ˆ์ž„์˜ ๊ฐœ๋ณ„ ๊ตฌ์„ฑ ๋งค๊ฐœ๋ณ€์ˆ˜๋Š” "setting"์ด๋ผ๊ณ  ๋ถˆ๋ฆฐ๋‹ค.

์„ค์ •์€ ํ˜‘์ƒ๋˜๋Š” ๊ฒƒ์ด ์•„๋‹ˆ๋ผ ์ „์†ก์ž ํ”ผ์–ด์˜ ํŠน์„ฑ์„ ์„ค๋ช…ํ•˜๋ฉฐ ์ˆ˜์‹  ํ”ผ์–ด๊ฐ€ ์‚ฌ์šฉํ•œ๋‹ค. ๋™์ผํ•œ ์„ค์ •์— ๋Œ€ํ•ด ์„œ๋กœ ๋‹ค๋ฅธ ๊ฐ’์„ ๊ฐ ํ”ผ์–ด๊ฐ€ ๊ด‘๊ณ ํ•  ์ˆ˜ ์žˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด, ํด๋ผ์ด์–ธํŠธ๋Š” ๋†’์€ ์ดˆ๊ธฐ ํ๋ฆ„ ์ œ์–ด ์ฐฝ์„ ์„ค์ •ํ•  ์ˆ˜ ์žˆ๊ณ , ์„œ๋ฒ„๋Š” ์ž์› ๋ณด์กด์„ ์œ„ํ•ด ๋” ๋‚ฎ์€ ๊ฐ’์„ ์„ค์ •ํ•  ์ˆ˜ ์žˆ๋‹ค.

SETTINGS ํ”„๋ ˆ์ž„์€ ์—ฐ๊ฒฐ ์‹œ์ž‘ ์‹œ ์–‘์ชฝ ์—”๋“œํฌ์ธํŠธ๊ฐ€ MUST ์ „์†กํ•ด์•ผ ํ•˜๋ฉฐ, ์—ฐ๊ฒฐ ์ƒ์• ์ฃผ๊ธฐ ์ค‘ ๋‹ค๋ฅธ ์‹œ์ ์— ์–ด๋А ์ชฝ ์—”๋“œํฌ์ธํŠธ๋“  ์ „์†กํ•  ์ˆ˜ ์žˆ๋‹ค(MAY). ๊ตฌํ˜„์ฒด๋Š” ์ด ๋ช…์„ธ์„œ์—์„œ ์ •์˜ํ•œ ๋ชจ๋“  ์„ค์ •์„ ์ง€์›ํ•ด์•ผ ํ•œ๋‹ค(MUST).

SETTINGS ํ”„๋ ˆ์ž„์˜ ๊ฐ ๋งค๊ฐœ๋ณ€์ˆ˜๋Š” ํ•ด๋‹น ๋งค๊ฐœ๋ณ€์ˆ˜์˜ ๊ธฐ์กด ๊ฐ’์„ ๋Œ€์ฒดํ•œ๋‹ค. ์„ค์ •์€ ํ‘œ์‹œ๋˜๋Š” ์ˆœ์„œ๋Œ€๋กœ ์ฒ˜๋ฆฌ๋˜๋ฉฐ, SETTINGS ํ”„๋ ˆ์ž„์˜ ์ˆ˜์‹ ์ž๋Š” ๊ฐ ์„ค์ •์˜ ํ˜„์žฌ ๊ฐ’ ์™ธ์—๋Š” ์–ด๋–ค ์ƒํƒœ๋„ ์œ ์ง€ํ•  ํ•„์š”๊ฐ€ ์—†๋‹ค. ๋”ฐ๋ผ์„œ SETTINGS ๋งค๊ฐœ๋ณ€์ˆ˜์˜ ๊ฐ’์€ ์ˆ˜์‹ ์ž๊ฐ€ ๋งˆ์ง€๋ง‰์œผ๋กœ ๋ณธ ๊ฐ’์ด๋‹ค.

SETTINGS ํ”„๋ ˆ์ž„์€ ์ˆ˜์‹  ํ”ผ์–ด์— ์˜ํ•ด ํ™•์ธ๋œ๋‹ค. ์ด๋ฅผ ์œ„ํ•ด SETTINGS ํ”„๋ ˆ์ž„์€ ACK ํ”Œ๋ž˜๊ทธ๋ฅผ ์ •์˜ํ•œ๋‹ค:

ACK (0x01):
์„ค์ •๋˜๋ฉด ACK ํ”Œ๋ž˜๊ทธ๋Š” ์ด ํ”„๋ ˆ์ž„์ด ํ”ผ์–ด์˜ SETTINGS ํ”„๋ ˆ์ž„ ์ˆ˜์‹  ๋ฐ ์ ์šฉ์„ ํ™•์ธํ•จ์„ ๋‚˜ํƒ€๋‚ธ๋‹ค. ์ด ๋น„ํŠธ๊ฐ€ ์„ค์ •๋˜๋ฉด SETTINGS ํ”„๋ ˆ์ž„์˜ ํŽ˜์ด๋กœ๋“œ๋Š” MUST ๋น„์–ด ์žˆ์–ด์•ผ ํ•œ๋‹ค. ACK ํ”Œ๋ž˜๊ทธ๊ฐ€ ์„ค์ •๋œ SETTINGS ํ”„๋ ˆ์ž„์„ ๊ธธ์ด ํ•„๋“œ ๊ฐ’์ด 0์ด ์•„๋‹Œ ์ƒํƒœ๋กœ ์ˆ˜์‹ ํ•˜๋ฉด ์ˆ˜์‹ ์ž๋Š” ์„น์…˜ 5.4.1์— ๊ทœ์ •๋œ FRAME_SIZE_ERROR ์œ ํ˜•์˜ ์—ฐ๊ฒฐ ์˜ค๋ฅ˜๋กœ ์ฒ˜๋ฆฌํ•ด์•ผ ํ•œ๋‹ค. ์ž์„ธํ•œ ๋‚ด์šฉ์€ ์„น์…˜ 6.5.3("Settings Synchronization")์„ ๋ณด๋ผ.

SETTINGS ํ”„๋ ˆ์ž„์€ ํ•ญ์ƒ ์—ฐ๊ฒฐ์— ์ ์šฉ๋˜๋ฉฐ, ๋‹จ์ผ ์ŠคํŠธ๋ฆผ์—๋Š” ์ ์šฉ๋˜์ง€ ์•Š๋Š”๋‹ค. SETTINGS ํ”„๋ ˆ์ž„์˜ Stream Identifier ํ•„๋“œ๋Š” 0(0x00)์ด์–ด์•ผ ํ•œ๋‹ค(MUST). Stream Identifier ํ•„๋“œ๊ฐ€ 0x00์ด ์•„๋‹Œ SETTINGS ํ”„๋ ˆ์ž„์„ ์ˆ˜์‹ ํ•˜๋ฉด ์ˆ˜์‹ ์ž๋Š” ์„น์…˜ 5.4.1์— ๊ทœ์ •๋œ PROTOCOL_ERROR ์œ ํ˜•์˜ ์—ฐ๊ฒฐ ์˜ค๋ฅ˜๋กœ ์‘๋‹ตํ•ด์•ผ ํ•œ๋‹ค(MUST).

SETTINGS ํ”„๋ ˆ์ž„์€ ์—ฐ๊ฒฐ ์ƒํƒœ์— ์˜ํ–ฅ์„ ์ค€๋‹ค. ์ž˜๋ชป ํ˜•์„ฑ๋˜์—ˆ๊ฑฐ๋‚˜ ๋ถˆ์™„์ „ํ•œ SETTINGS ํ”„๋ ˆ์ž„์€ ์„น์…˜ 5.4.1์— ๊ทœ์ •๋œ PROTOCOL_ERROR ์œ ํ˜•์˜ ์—ฐ๊ฒฐ ์˜ค๋ฅ˜๋กœ ์ฒ˜๋ฆฌ๋˜์–ด์•ผ ํ•œ๋‹ค(MUST).

๊ธธ์ด๊ฐ€ 6 ์˜ฅํ…Ÿ์˜ ๋ฐฐ์ˆ˜๊ฐ€ ์•„๋‹Œ SETTINGS ํ”„๋ ˆ์ž„์€ ์„น์…˜ 5.4.1์— ๊ทœ์ •๋œ FRAME_SIZE_ERROR ์œ ํ˜•์˜ ์—ฐ๊ฒฐ ์˜ค๋ฅ˜๋กœ ์ฒ˜๋ฆฌ๋˜์–ด์•ผ ํ•œ๋‹ค(MUST).

6.5.1. SETTINGS ํ˜•์‹

SETTINGS ํ”„๋ ˆ์ž„์˜ ํŽ˜์ด๋กœ๋“œ๋Š” 16๋น„ํŠธ ์„ค์ • ์‹๋ณ„์ž์™€ 32๋น„ํŠธ ๊ฐ’์œผ๋กœ ๊ตฌ์„ฑ๋œ 0๊ฐœ ์ด์ƒ์˜ ์„ค์ •๋“ค๋กœ ์ด๋ฃจ์–ด์ง„๋‹ค.

SETTINGS Frame {
  Length (24),
  Type (8) = 0x04,

  Unused Flags (7),
  ACK Flag (1),

  Reserved (1),
  Stream Identifier (31) = 0,

  Setting (48) ...,
}

Setting {
  Identifier (16),
  Value (32),
}

๊ทธ๋ฆผ 7: SETTINGS ํ”„๋ ˆ์ž„ ํ˜•์‹

Length, Type, Unused Flag(s), Reserved ๋ฐ Stream Identifier ํ•„๋“œ๋Š” ์„น์…˜ 4์— ์„ค๋ช…๋˜์–ด ์žˆ๋‹ค. SETTINGS ํ”„๋ ˆ์ž„์˜ ํŽ˜์ด๋กœ๋“œ๋Š” ์ž„์˜ ๊ฐœ์ˆ˜์˜ Setting ํ•„๋“œ๋ฅผ ํฌํ•จํ•˜๋ฉฐ, ๊ฐ Setting ํ•„๋“œ๋Š” ๋‹ค์Œ์œผ๋กœ ๊ตฌ์„ฑ๋œ๋‹ค:

Identifier:
16๋น„ํŠธ ์„ค์ • ์‹๋ณ„์ž; ์„น์…˜ 6.5.2 ์ฐธ์กฐ.
Value:
์„ค์ •์— ๋Œ€ํ•œ 32๋น„ํŠธ ๊ฐ’.

6.5.2. ์ •์˜๋œ ์„ค์ •

๋‹ค์Œ์˜ ์„ค์ •๋“ค์ด ์ •์˜๋˜์–ด ์žˆ๋‹ค:

SETTINGS_HEADER_TABLE_SIZE (0x01):
์ด ์„ค์ •์€ ์†ก์‹ ์ž๊ฐ€ ํ•„๋“œ ๋ธ”๋ก์„ ๋””์ฝ”๋”ฉํ•˜๋Š” ๋ฐ ์‚ฌ์šฉํ•˜๋Š” ์••์ถ• ํ…Œ์ด๋ธ”์˜ ์ตœ๋Œ€ ํฌ๊ธฐ๋ฅผ ์˜ฅํ…Ÿ ๋‹จ์œ„๋กœ ์›๊ฒฉ ์—”๋“œํฌ์ธํŠธ์— ์•Œ๋ฆด ์ˆ˜ ์žˆ๊ฒŒ ํ•œ๋‹ค. ์ธ์ฝ”๋”๋Š” ์ด ๊ฐ’ ์ดํ•˜์˜ ์ž„์˜ ํฌ๊ธฐ๋ฅผ ์••์ถ• ํ˜•์‹ ๋‚ด๋ถ€์˜ ์‹ ํ˜ธ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์„ ํƒํ•  ์ˆ˜ ์žˆ๋‹ค(์ž์„ธํ•œ ๋‚ด์šฉ์€ [COMPRESSION] ์ฐธ์กฐ). ์ดˆ๊ธฐ ๊ฐ’์€ 4,096 ์˜ฅํ…Ÿ์ด๋‹ค.
SETTINGS_ENABLE_PUSH (0x02):
์ด ์„ค์ •์€ ์„œ๋ฒ„ ํ‘ธ์‹œ๋ฅผ ํ™œ์„ฑํ™”ํ•˜๊ฑฐ๋‚˜ ๋น„ํ™œ์„ฑํ™”ํ•˜๋Š” ๋ฐ ์‚ฌ์šฉ๋  ์ˆ˜ ์žˆ๋‹ค. ์„œ๋ฒ„๋Š” ์ด ํŒŒ๋ผ๋ฏธํ„ฐ๊ฐ€ 0์œผ๋กœ ์„ค์ •๋œ ๊ฒฝ์šฐ PUSH_PROMISE ํ”„๋ ˆ์ž„์„ ์ „์†กํ•ด์„œ๋Š” ์•ˆ ๋œ๋‹ค(MUST NOT); ์ž์„ธํ•œ ๋‚ด์šฉ์€ ์„น์…˜ 8.4๋ฅผ ๋ณด๋ผ. ํด๋ผ์ด์–ธํŠธ๊ฐ€ ์ด ํŒŒ๋ผ๋ฏธํ„ฐ๋ฅผ 0์œผ๋กœ ์„ค์ •ํ•˜๊ณ  ์ด๋ฅผ ํ™•์ธ๋ฐ›์•˜๋‹ค๋ฉด, PUSH_PROMISE ํ”„๋ ˆ์ž„์„ ์ˆ˜์‹ ํ•˜๋Š” ๊ฒƒ์„ ์„น์…˜ 5.4.1์— ๊ทœ์ •๋œ PROTOCOL_ERROR ์œ ํ˜•์˜ ์—ฐ๊ฒฐ ์˜ค๋ฅ˜๋กœ ์ฒ˜๋ฆฌํ•ด์•ผ ํ•œ๋‹ค(MUST).
SETTINGS_ENABLE_PUSH์˜ ์ดˆ๊ธฐ ๊ฐ’์€ 1์ด๋‹ค. ํด๋ผ์ด์–ธํŠธ์—๊ฒŒ ์ด ๊ฐ’์€ PUSH_PROMISE ํ”„๋ ˆ์ž„์„ ์ˆ˜์‹ ํ•˜๊ธธ ์›ํ•จ์„ ๋‚˜ํƒ€๋‚ธ๋‹ค. ์„œ๋ฒ„์— ๋Œ€ํ•ด์„œ๋Š” ์ด ์ดˆ๊ธฐ ๊ฐ’์€ ํšจ๊ณผ๊ฐ€ ์—†์œผ๋ฉฐ ๊ฐ’ 0๊ณผ ๋™๋“ฑํ•˜๋‹ค. 0 ๋˜๋Š” 1 ์ด์™ธ์˜ ๊ฐ’์€ ์„น์…˜ 5.4.1์— ๊ทœ์ •๋œ PROTOCOL_ERROR ์œ ํ˜•์˜ ์—ฐ๊ฒฐ ์˜ค๋ฅ˜๋กœ ์ฒ˜๋ฆฌํ•ด์•ผ ํ•œ๋‹ค(MUST).
์„œ๋ฒ„๋Š” ์ด ๊ฐ’์„ ๋ช…์‹œ์ ์œผ๋กœ 1๋กœ ์„ค์ •ํ•ด์„œ๋Š” ์•ˆ ๋œ๋‹ค(MUST NOT). ์„œ๋ฒ„๋Š” SETTINGS ํ”„๋ ˆ์ž„์„ ๋ณด๋‚ผ ๋•Œ ์ด ์„ค์ •์„ ์ƒ๋žตํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ, ํฌํ•จํ•œ๋‹ค๋ฉด ๊ทธ ๊ฐ’์€ MUST 0์ด์–ด์•ผ ํ•œ๋‹ค. ํด๋ผ์ด์–ธํŠธ๋Š” SETTINGS_ENABLE_PUSH๊ฐ€ 1๋กœ ์„ค์ •๋œ SETTINGS ํ”„๋ ˆ์ž„์„ ์ˆ˜์‹ ํ•˜๋ฉด ์„น์…˜ 5.4.1์— ๊ทœ์ •๋œ PROTOCOL_ERROR ์œ ํ˜•์˜ ์—ฐ๊ฒฐ ์˜ค๋ฅ˜๋กœ ์ฒ˜๋ฆฌํ•ด์•ผ ํ•œ๋‹ค(MUST).
SETTINGS_MAX_CONCURRENT_STREAMS (0x03):
์ด ์„ค์ •์€ ์†ก์‹ ์ž๊ฐ€ ํ—ˆ์šฉํ•  ์ตœ๋Œ€ ๋™์‹œ ์ŠคํŠธ๋ฆผ ์ˆ˜๋ฅผ ๋‚˜ํƒ€๋‚ธ๋‹ค. ์ด ์ œํ•œ์€ ๋ฐฉํ–ฅ์„ฑ์ ์ด๋ฉฐ, ์†ก์‹ ์ž๊ฐ€ ์ˆ˜์‹ ์ž๊ฐ€ ์ƒ์„ฑํ•  ์ˆ˜ ์žˆ๋„๋ก ํ—ˆ์šฉํ•˜๋Š” ์ŠคํŠธ๋ฆผ ์ˆ˜์— ์ ์šฉ๋œ๋‹ค. ์ดˆ๊ธฐ์—๋Š” ์ด ๊ฐ’์— ์ œํ•œ์ด ์—†๋‹ค. ๋ณ‘๋ ฌ์„ฑ์„ ๋ถˆํ•„์š”ํ•˜๊ฒŒ ์ œํ•œํ•˜์ง€ ์•Š๊ธฐ ์œ„ํ•ด ์ด ๊ฐ’์„ 100๋ณด๋‹ค ์ž‘๊ฒŒ ์„ค์ •ํ•˜์ง€ ์•Š๋Š” ๊ฒƒ์ด ๊ถŒ์žฅ๋œ๋‹ค.
SETTINGS_MAX_CONCURRENT_STREAMS์˜ ๊ฐ’์ด 0์ธ ๊ฒฝ์šฐ ์—”๋“œํฌ์ธํŠธ๋Š” ์ด๋ฅผ ํŠน๋ณ„ํ•˜๊ฒŒ ์ฒ˜๋ฆฌํ•ด์„œ๋Š” ์•ˆ ๋œ๋‹ค(SHOULD NOT). 0 ๊ฐ’์€ ์ƒˆ๋กœ์šด ์ŠคํŠธ๋ฆผ ์ƒ์„ฑ ์ž์ฒด๋ฅผ ๋ฐฉ์ง€ํ•˜๊ธด ํ•˜์ง€๋งŒ, ํ™œ์„ฑ ์ŠคํŠธ๋ฆผ์œผ๋กœ ์†Œ์ง„๋˜๋Š” ๋‹ค๋ฅธ ์–ด๋–ค ์ œํ•œ์—์„œ๋„ ๋™์ผํ•œ ํ˜„์ƒ์ด ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ๋‹ค. ์„œ๋ฒ„๋Š” ์งง์€ ๊ธฐ๊ฐ„ ๋™์•ˆ๋งŒ 0์„ ์„ค์ •ํ•ด์•ผ ํ•œ๋‹ค(SHOULD); ๋งŒ์•ฝ ์„œ๋ฒ„๊ฐ€ ์š”์ฒญ์„ ์ˆ˜๋ฝํ•˜๊ณ  ์‹ถ์ง€ ์•Š๋‹ค๋ฉด ์—ฐ๊ฒฐ์„ ๋‹ซ๋Š” ๊ฒƒ์ด ๋” ์ ์ ˆํ•˜๋‹ค.
SETTINGS_INITIAL_WINDOW_SIZE (0x04):
์ด ์„ค์ •์€ ์ŠคํŠธ๋ฆผ ์ˆ˜์ค€ ํ๋ฆ„ ์ œ์–ด๋ฅผ ์œ„ํ•œ ์†ก์‹ ์ž์˜ ์ดˆ๊ธฐ ์ฐฝ ํฌ๊ธฐ(์˜ฅํ…Ÿ ๋‹จ์œ„)๋ฅผ ๋‚˜ํƒ€๋‚ธ๋‹ค. ์ดˆ๊ธฐ ๊ฐ’์€ 216-1(65,535) ์˜ฅํ…Ÿ์ด๋‹ค.
์ด ์„ค์ •์€ ๋ชจ๋“  ์ŠคํŠธ๋ฆผ์˜ ์ฐฝ ํฌ๊ธฐ์— ์˜ํ–ฅ์„ ์ค€๋‹ค(์ž์„ธํ•œ ๋‚ด์šฉ์€ ์„น์…˜ 6.9.2 ์ฐธ์กฐ).
231-1์„ ์ดˆ๊ณผํ•˜๋Š” ๊ฐ’์€ ์„น์…˜ 5.4.1์— ๊ทœ์ •๋œ FLOW_CONTROL_ERROR ์œ ํ˜•์˜ ์—ฐ๊ฒฐ ์˜ค๋ฅ˜๋กœ ์ฒ˜๋ฆฌ๋˜์–ด์•ผ ํ•œ๋‹ค(MUST).
SETTINGS_MAX_FRAME_SIZE (0x05):
์ด ์„ค์ •์€ ์†ก์‹ ์ž๊ฐ€ ์ˆ˜์‹ ํ•  ์˜ํ–ฅ์ด ์žˆ๋Š” ์ตœ๋Œ€ ํ”„๋ ˆ์ž„ ํŽ˜์ด๋กœ๋“œ ํฌ๊ธฐ๋ฅผ ์˜ฅํ…Ÿ ๋‹จ์œ„๋กœ ๋‚˜ํƒ€๋‚ธ๋‹ค.
์ดˆ๊ธฐ ๊ฐ’์€ 214(16,384) ์˜ฅํ…Ÿ์ด๋‹ค. ์—”๋“œํฌ์ธํŠธ๊ฐ€ ๊ด‘๊ณ ํ•˜๋Š” ๊ฐ’์€ ์ดˆ๊ธฐ ๊ฐ’๊ณผ ํ—ˆ์šฉ๋˜๋Š” ์ตœ๋Œ€ ํ”„๋ ˆ์ž„ ํฌ๊ธฐ(224-1 ๋˜๋Š” 16,777,215 ์˜ฅํ…Ÿ) ์‚ฌ์ด์—ฌ์•ผ ํ•˜๋ฉฐ ํฌํ•จ๋œ๋‹ค. ์ด ๋ฒ”์œ„๋ฅผ ๋ฒ—์–ด๋‚œ ๊ฐ’์€ ์„น์…˜ 5.4.1์— ๊ทœ์ •๋œ PROTOCOL_ERROR ์œ ํ˜•์˜ ์—ฐ๊ฒฐ ์˜ค๋ฅ˜๋กœ ์ฒ˜๋ฆฌ๋˜์–ด์•ผ ํ•œ๋‹ค(MUST).
SETTINGS_MAX_HEADER_LIST_SIZE (0x06):
์ด ๊ถŒ๊ณ  ์„ค์ •์€ ์†ก์‹ ์ž๊ฐ€ ์ˆ˜์‹ ํ•  ์ค€๋น„๊ฐ€ ๋œ ์ตœ๋Œ€ ํ•„๋“œ ์„น์…˜ ํฌ๊ธฐ๋ฅผ ์˜ฅํ…Ÿ ๋‹จ์œ„๋กœ ํ”ผ์–ด์—๊ฒŒ ์•Œ๋ฆฐ๋‹ค. ๊ฐ’์€ ํ•„๋“œ ๋ผ์ธ์˜ ๋น„์••์ถ• ํฌ๊ธฐ๋ฅผ ๊ธฐ์ค€์œผ๋กœ ํ•˜๋ฉฐ, ์ด๋ฆ„๊ณผ ๊ฐ’์˜ ๊ธธ์ด(์˜ฅํ…Ÿ ๋‹จ์œ„)์™€ ๊ฐ ํ•„๋“œ ๋ผ์ธ์— ๋Œ€ํ•ด 32 ์˜ฅํ…Ÿ์˜ ์˜ค๋ฒ„ํ—ค๋“œ๋ฅผ ๋”ํ•œ ๊ฒƒ์ด๋‹ค.
ํŠน์ • ์š”์ฒญ์— ๋Œ€ํ•ด ๊ด‘๊ณ ๋œ ๊ฐ’๋ณด๋‹ค ๋” ๋‚ฎ์€ ํ•œ๋„๋ฅผ ๊ฐ•์ œํ•  MAY ์žˆ๋‹ค. ์ด ์„ค์ •์˜ ์ดˆ๊ธฐ ๊ฐ’์€ ๋ฌด์ œํ•œ์ด๋‹ค.

์•Œ๋ ค์ง€์ง€ ์•Š์•˜๊ฑฐ๋‚˜ ์ง€์›๋˜์ง€ ์•Š๋Š” ์‹๋ณ„์ž๋ฅผ ๊ฐ€์ง„ SETTINGS ํ”„๋ ˆ์ž„์„ ์ˆ˜์‹ ํ•œ ์—”๋“œํฌ์ธํŠธ๋Š” ํ•ด๋‹น ์„ค์ •์„ ๋ฌด์‹œํ•ด์•ผ ํ•œ๋‹ค(MUST).

6.5.3. ์„ค์ • ๋™๊ธฐํ™”

๋Œ€๋ถ€๋ถ„์˜ SETTINGS ๊ฐ’์€ ํ”ผ์–ด๊ฐ€ ๋ณ€๊ฒฝ๋œ ๋งค๊ฐœ๋ณ€์ˆ˜ ๊ฐ’์„ ์ˆ˜์‹ ํ•˜๊ณ  ์ ์šฉํ–ˆ์„ ๋•Œ๋ฅผ ์ดํ•ดํ•˜๋Š” ๊ฒƒ์ด ์œ ์ตํ•˜๊ฑฐ๋‚˜ ํ•„์š”ํ•˜๋‹ค. ์ด๋Ÿฌํ•œ ๋™๊ธฐํ™” ์‹œ์ ์„ ์ œ๊ณตํ•˜๊ธฐ ์œ„ํ•ด, ACK ํ”Œ๋ž˜๊ทธ๊ฐ€ ์„ค์ •๋˜์ง€ ์•Š์€ SETTINGS ํ”„๋ ˆ์ž„์˜ ์ˆ˜์‹ ์ž๋Š” ๊ฐ€๋Šฅํ•œ ํ•œ ๋นจ๋ฆฌ ์—…๋ฐ์ดํŠธ๋œ ์„ค์ •์„ ์ ์šฉํ•ด์•ผ ํ•œ๋‹ค(MUST). SETTINGS ํ”„๋ ˆ์ž„์€ ์ˆ˜์‹ ๋œ ์ˆœ์„œ๋Œ€๋กœ ํ™•์ธ๋œ๋‹ค.

SETTINGS ํ”„๋ ˆ์ž„์˜ ๊ฐ’๋“ค์€ ๋‹ค๋ฅธ ๊ฐ’ ์ฒ˜๋ฆฌ๊ฐ€ ๊ฐœ์ž…๋˜์ง€ ์•Š์€ ์ฑ„ ํ‘œ์‹œ๋œ ์ˆœ์„œ๋Œ€๋กœ ์ฒ˜๋ฆฌ๋˜์–ด์•ผ ํ•œ๋‹ค(MUST). ์ง€์›๋˜์ง€ ์•Š๋Š” ์„ค์ •์€ ๋ฌด์‹œ๋˜์–ด์•ผ ํ•œ๋‹ค(MUST). ๋ชจ๋“  ๊ฐ’์ด ์ฒ˜๋ฆฌ๋œ ํ›„ ์ˆ˜์‹ ์ž๋Š” ์ฆ‰์‹œ ACK ํ”Œ๋ž˜๊ทธ๊ฐ€ ์„ค์ •๋œ SETTINGS ํ”„๋ ˆ์ž„์„ ์ „์†กํ•ด์•ผ ํ•œ๋‹ค(MUST). ACK ํ”Œ๋ž˜๊ทธ๊ฐ€ ์„ค์ •๋œ SETTINGS ํ”„๋ ˆ์ž„์„ ์ˆ˜์‹ ํ•˜๋ฉด ๋ณ€๊ฒฝ๋œ ์„ค์ •์„ ์ „์†กํ•œ ์ชฝ์€ ๊ฐ€์žฅ ์˜ค๋ž˜๋œ ๋ฏธํ™•์ธ SETTINGS ํ”„๋ ˆ์ž„์˜ ๊ฐ’์ด ์ ์šฉ๋˜์—ˆ์Œ์„ ์‹ ๋ขฐํ•  ์ˆ˜ ์žˆ๋‹ค.

๋ฐœ์‹ ์ž๊ฐ€ ํ•ฉ๋ฆฌ์ ์ธ ์‹œ๊ฐ„ ๋‚ด์— ํ™•์ธ์„ ๋ฐ›์ง€ ๋ชปํ•˜๋ฉด ์„น์…˜ 5.4.1์— ๊ทœ์ •๋œ SETTINGS_TIMEOUT ์œ ํ˜•์˜ ์—ฐ๊ฒฐ ์˜ค๋ฅ˜๋ฅผ ๋ฐœ์ƒ์‹œํ‚ฌ MAY ์žˆ๋‹ค. ํƒ€์ž„์•„์›ƒ์„ ์„ค์ •ํ•  ๋•Œ ํ”ผ์–ด์˜ ์ฒ˜๋ฆฌ ์ง€์—ฐ์„ ๊ณ ๋ คํ•ด์•ผ ํ•œ๋‹ค; ๋‹จ์ง€ ์—”๋“œํฌ์ธํŠธ ๊ฐ„ ์™•๋ณต ์‹œ๊ฐ„๋งŒ์„ ๊ทผ๊ฑฐ๋กœ ํ•œ ํƒ€์ž„์•„์›ƒ์€ ์ž˜๋ชป๋œ ์˜ค๋ฅ˜๋ฅผ ์ดˆ๋ž˜ํ•  ์ˆ˜ ์žˆ๋‹ค.

6.6. PUSH_PROMISE

PUSH_PROMISE ํ”„๋ ˆ์ž„(type=0x05)์€ ์†ก์‹ ์ž๊ฐ€ ์‹œ์ž‘ํ•  ์˜๋„๊ฐ€ ์žˆ๋Š” ์ŠคํŠธ๋ฆผ์„ ๋ฏธ๋ฆฌ ํ”ผ์–ด์—๊ฒŒ ์•Œ๋ฆฌ๊ธฐ ์œ„ํ•ด ์‚ฌ์šฉ๋œ๋‹ค. PUSH_PROMISE ํ”„๋ ˆ์ž„์€ ์—”๋“œํฌ์ธํŠธ๊ฐ€ ์ƒ์„ฑํ•  ๊ณ„ํš์ธ ์ŠคํŠธ๋ฆผ์˜ ๋ถ€ํ˜ธ ์—†๋Š” 31๋น„ํŠธ ์‹๋ณ„์ž์™€ ํ•ด๋‹น ์ŠคํŠธ๋ฆผ์— ๋Œ€ํ•œ ์ถ”๊ฐ€ ๋ฌธ๋งฅ์„ ์ œ๊ณตํ•˜๋Š” ํ•„๋“œ ์„น์…˜์„ ํฌํ•จํ•œ๋‹ค. PUSH_PROMISE ํ”„๋ ˆ์ž„์˜ ์‚ฌ์šฉ์— ๋Œ€ํ•œ ์ž์„ธํ•œ ์„ค๋ช…์€ ์„น์…˜ 8.4์— ์žˆ๋‹ค.

PUSH_PROMISE Frame {
  Length (24),
  Type (8) = 0x05,

  Unused Flags (4),
  PADDED Flag (1),
  END_HEADERS Flag (1),
  Unused Flags (2),

  Reserved (1),
  Stream Identifier (31),

  [Pad Length (8)],
  Reserved (1),
  Promised Stream ID (31),
  Field Block Fragment (..),
  Padding (..2040),
}

๊ทธ๋ฆผ 8: PUSH_PROMISE ํ”„๋ ˆ์ž„ ํ˜•์‹

Length, Type, Unused Flag(s), Reserved ๋ฐ Stream Identifier ํ•„๋“œ๋Š” ์„น์…˜ 4์— ์„ค๋ช…๋˜์–ด ์žˆ๋‹ค. PUSH_PROMISE ํ”„๋ ˆ์ž„ ํŽ˜์ด๋กœ๋“œ์—๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์€ ์ถ”๊ฐ€ ํ•„๋“œ๊ฐ€ ์žˆ๋‹ค:

Pad Length:
ํ”„๋ ˆ์ž„ ํŒจ๋”ฉ์˜ ๊ธธ์ด๋ฅผ ์˜ฅํ…Ÿ ๋‹จ์œ„๋กœ ๋‹ด๋Š” 8๋น„ํŠธ ํ•„๋“œ์ด๋‹ค. ์ด ํ•„๋“œ๋Š” PADDED ํ”Œ๋ž˜๊ทธ๊ฐ€ ์„ค์ •๋œ ๊ฒฝ์šฐ์—๋งŒ ์กด์žฌํ•œ๋‹ค.
Promised Stream ID:
PUSH_PROMISE์— ์˜ํ•ด ์˜ˆ์•ฝ๋œ ์ŠคํŠธ๋ฆผ์„ ์‹๋ณ„ํ•˜๋Š” ๋ถ€ํ˜ธ ์—†๋Š” 31๋น„ํŠธ ์ •์ˆ˜์ด๋‹ค. ์•ฝ์†๋œ ์ŠคํŠธ๋ฆผ ์‹๋ณ„์ž๋Š” ์†ก์‹ ์ž๊ฐ€ ๋‹ค์Œ์— ์ „์†กํ•  ์ƒˆ ์ŠคํŠธ๋ฆผ์— ๋Œ€ํ•œ ์œ ํšจํ•œ ์„ ํƒ์ด์–ด์•ผ ํ•œ๋‹ค(์„น์…˜ 5.1.1์˜ "new stream identifier" ์ฐธ์กฐ)(MUST).
Field Block Fragment:
์š”์ฒญ ์ œ์–ด ๋ฐ์ดํ„ฐ์™€ ํ—ค๋” ์„น์…˜์„ ํฌํ•จํ•˜๋Š” ํ•„๋“œ ๋ธ”๋ก ์กฐ๊ฐ(์„น์…˜ 4.3).
Padding:
์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์˜๋ฏธ๋ฅผ ๊ฐ€์ง€์ง€ ์•Š๋Š” ํŒจ๋”ฉ ์˜ฅํ…Ÿ๋“ค. ์ „์†ก ์‹œ ํŒจ๋”ฉ ์˜ฅํ…Ÿ์€ MUST 0์œผ๋กœ ์„ค์ •๋˜์–ด์•ผ ํ•œ๋‹ค. ์ˆ˜์‹ ์ž๋Š” ํŒจ๋”ฉ์„ ๊ฒ€์ฆํ•  ์˜๋ฌด๋Š” ์—†์ง€๋งŒ, ๋น„์˜(้ž้›ถ) ํŒจ๋”ฉ์„ ์„น์…˜ 5.4.1์— ๊ทœ์ •๋œ PROTOCOL_ERROR ์œ ํ˜•์˜ ์—ฐ๊ฒฐ ์˜ค๋ฅ˜๋กœ ์ฒ˜๋ฆฌํ•  MAY ์žˆ๋‹ค.

PUSH_PROMISE ํ”„๋ ˆ์ž„์€ ๋‹ค์Œ๊ณผ ๊ฐ™์€ ํ”Œ๋ž˜๊ทธ๋ฅผ ์ •์˜ํ•œ๋‹ค:

PADDED (0x08):
์„ค์ •๋˜๋ฉด PADDED ํ”Œ๋ž˜๊ทธ๋Š” Pad Length ํ•„๋“œ์™€ ๊ทธ๊ฐ€ ์„ค๋ช…ํ•˜๋Š” ํŒจ๋”ฉ์ด ์กด์žฌํ•จ์„ ๋‚˜ํƒ€๋‚ธ๋‹ค.
END_HEADERS (0x04):
์„ค์ •๋˜๋ฉด END_HEADERS ํ”Œ๋ž˜๊ทธ๋Š” ์ด ํ”„๋ ˆ์ž„์ด ์ „์ฒด ํ•„๋“œ ๋ธ”๋ก(์„น์…˜ 4.3)์„ ํฌํ•จํ•˜๋ฉฐ ๋’ค๋”ฐ๋ฅด๋Š” CONTINUATION ํ”„๋ ˆ์ž„์ด ์—†์Œ์„ ๋‚˜ํƒ€๋‚ธ๋‹ค.
END_HEADERS ํ”Œ๋ž˜๊ทธ๊ฐ€ ์„ค์ •๋˜์ง€ ์•Š์€ PUSH_PROMISE ํ”„๋ ˆ์ž„์€ ๋™์ผํ•œ ์ŠคํŠธ๋ฆผ์— ๋Œ€ํ•œ CONTINUATION ํ”„๋ ˆ์ž„์œผ๋กœ ๋’ค๋”ฐ๋ผ์•ผ ํ•œ๋‹ค(MUST). ์ˆ˜์‹ ์ž๋Š” ๋‹ค๋ฅธ ์œ ํ˜•์˜ ํ”„๋ ˆ์ž„์ด๋‚˜ ๋‹ค๋ฅธ ์ŠคํŠธ๋ฆผ์˜ ํ”„๋ ˆ์ž„์„ ์ˆ˜์‹ ํ•˜๋ฉด ์ด๋ฅผ ์„น์…˜ 5.4.1์— ๊ทœ์ •๋œ PROTOCOL_ERROR ์œ ํ˜•์˜ ์—ฐ๊ฒฐ ์˜ค๋ฅ˜๋กœ ์ฒ˜๋ฆฌํ•ด์•ผ ํ•œ๋‹ค.

PUSH_PROMISE ํ”„๋ ˆ์ž„์€ ๋ฐ˜๋“œ์‹œ ํ”ผ์–ด๊ฐ€ ์‹œ์ž‘ํ•œ ์ŠคํŠธ๋ฆผ์—์„œ๋งŒ ์ „์†ก๋˜์–ด์•ผ ํ•˜๋ฉฐ ํ•ด๋‹น ์ŠคํŠธ๋ฆผ์€ "open" ๋˜๋Š” "half-closed (remote)" ์ƒํƒœ์—ฌ์•ผ ํ•œ๋‹ค(MUST). PUSH_PROMISE์˜ Stream Identifier ํ•„๋“œ๋Š” ๊ทธ๊ฒƒ์ด ์—ฐ๊ด€๋œ ์ŠคํŠธ๋ฆผ์„ ๋‚˜ํƒ€๋‚ธ๋‹ค. Stream Identifier ํ•„๋“œ๊ฐ€ 0x00์„ ์ง€์ •ํ•˜๋ฉด ์ˆ˜์‹ ์ž๋Š” ์„น์…˜ 5.4.1์— ๊ทœ์ •๋œ PROTOCOL_ERROR ์œ ํ˜•์˜ ์—ฐ๊ฒฐ ์˜ค๋ฅ˜๋กœ ์‘๋‹ตํ•ด์•ผ ํ•œ๋‹ค(MUST).

์•ฝ์†๋œ ์ŠคํŠธ๋ฆผ์€ ์•ฝ์†๋œ ์ˆœ์„œ๋Œ€๋กœ ์‚ฌ์šฉ๋  ํ•„์š”๊ฐ€ ์—†๋‹ค. PUSH_PROMISE๋Š” ๋‹จ์ง€ ๋‚˜์ค‘์— ์‚ฌ์šฉํ•  ์ŠคํŠธ๋ฆผ ์‹๋ณ„์ž๋ฅผ ์˜ˆ์•ฝํ•  ๋ฟ์ด๋‹ค.

SETTINGS ํ”„๋ ˆ์ž„์˜ ์ƒ๋Œ€ ํ”ผ์–ด์˜ SETTINGS_ENABLE_PUSH ์„ค์ •์ด 0์œผ๋กœ ์„ค์ •๋œ ๊ฒฝ์šฐ PUSH_PROMISE๋Š” ์ „์†ก๋˜์–ด์„œ๋Š” ์•ˆ ๋œ๋‹ค(MUST NOT). ์ด ์„ค์ •์„ 0์œผ๋กœ ์„ค์ •ํ•˜๊ณ  ํ™•์ธ์„ ๋ฐ›์€ ์—”๋“œํฌ์ธํŠธ๋Š” PUSH_PROMISE ํ”„๋ ˆ์ž„์„ ์ˆ˜์‹ ํ•˜๋ฉด ์„น์…˜ 5.4.1์— ๊ทœ์ •๋œ PROTOCOL_ERROR ์œ ํ˜•์˜ ์—ฐ๊ฒฐ ์˜ค๋ฅ˜๋กœ ์ฒ˜๋ฆฌํ•ด์•ผ ํ•œ๋‹ค(MUST).

PUSH_PROMISE ํ”„๋ ˆ์ž„์˜ ์ˆ˜์‹ ์ž๋Š” ์•ฝ์†๋œ ์ŠคํŠธ๋ฆผ์„ ๊ฑฐ๋ถ€ํ•˜๊ธฐ ์œ„ํ•ด ํ•ด๋‹น ์•ฝ์†๋œ ์ŠคํŠธ๋ฆผ ์‹๋ณ„์ž๋ฅผ ์ฐธ์กฐํ•˜๋Š” RST_STREAM์„ ์ „์†กํ•  ์ˆ˜ ์žˆ๋‹ค.

PUSH_PROMISE ํ”„๋ ˆ์ž„์€ ์—ฐ๊ฒฐ ์ƒํƒœ๋ฅผ ๋‘ ๊ฐ€์ง€ ๋ฐฉ์‹์œผ๋กœ ๋ณ€๊ฒฝํ•œ๋‹ค. ์ฒซ์งธ, ํ•„๋“œ ๋ธ”๋ก์˜ ํฌํ•จ(์„น์…˜ 4.3)์€ ํ•„๋“œ ์„น์…˜ ์••์ถ•์„ ์œ„ํ•ด ์œ ์ง€๋˜๋Š” ์ƒํƒœ๋ฅผ ๋ณ€๊ฒฝํ•  ์ˆ˜ ์žˆ๋‹ค. ๋‘˜์งธ, PUSH_PROMISE๋Š” ๋‚˜์ค‘์— ์‚ฌ์šฉํ•˜๊ธฐ ์œ„ํ•ด ์ŠคํŠธ๋ฆผ์„ ์˜ˆ์•ฝํ•˜์—ฌ ์•ฝ์†๋œ ์ŠคํŠธ๋ฆผ์„ "reserved (local)" ๋˜๋Š” "reserved (remote)" ์ƒํƒœ๋กœ ๋งŒ๋“ ๋‹ค. ์†ก์‹ ์ž๋Š” ํ•ด๋‹น ์ŠคํŠธ๋ฆผ์ด "open" ๋˜๋Š” "half-closed (remote)" ์ƒํƒœ์ธ ๊ฒฝ์šฐ์—๋งŒ PUSH_PROMISE๋ฅผ ์ „์†กํ•ด์•ผ ํ•˜๋ฉฐ(MUST NOT), ์•ฝ์†๋œ ์ŠคํŠธ๋ฆผ์ด ์ƒˆ ์ŠคํŠธ๋ฆผ ์‹๋ณ„์ž์— ๋Œ€ํ•œ ์œ ํšจํ•œ ์„ ํƒ์ธ์ง€ ๋ณด์žฅํ•ด์•ผ ํ•œ๋‹ค(์„น์…˜ 5.1.1)(์ฆ‰, ์•ฝ์†๋œ ์ŠคํŠธ๋ฆผ์€ "idle" ์ƒํƒœ์—ฌ์•ผ ํ•œ๋‹ค)(MUST).

PUSH_PROMISE๋Š” ์ŠคํŠธ๋ฆผ์„ ์˜ˆ์•ฝํ•˜๋ฏ€๋กœ PUSH_PROMISE ํ”„๋ ˆ์ž„์„ ๋ฌด์‹œํ•˜๋ฉด ์ŠคํŠธ๋ฆผ ์ƒํƒœ๊ฐ€ ๋ถˆํ™•์ • ์ƒํƒœ๊ฐ€ ๋œ๋‹ค. ์ˆ˜์‹ ์ž๋Š” ์—ฐ๊ด€๋œ ์ŠคํŠธ๋ฆผ์ด "open"๋„ ์•„๋‹ˆ๊ณ  "half-closed (local)"๋„ ์•„๋‹Œ ์ŠคํŠธ๋ฆผ์—์„œ PUSH_PROMISE๋ฅผ ์ˆ˜์‹ ํ•˜๋ฉด ์ด๋ฅผ ์„น์…˜ 5.4.1์— ๊ทœ์ •๋œ PROTOCOL_ERROR ์œ ํ˜•์˜ ์—ฐ๊ฒฐ ์˜ค๋ฅ˜๋กœ ์ฒ˜๋ฆฌํ•ด์•ผ ํ•œ๋‹ค(MUST). ๋‹ค๋งŒ ์—ฐ๊ด€๋œ ์ŠคํŠธ๋ฆผ์—์„œ RST_STREAM์„ ์ „์†กํ•œ ์—”๋“œํฌ์ธํŠธ๋Š” ํ•ด๋‹น RST_STREAM ํ”„๋ ˆ์ž„์ด ์ˆ˜์‹ ๋˜๊ณ  ์ฒ˜๋ฆฌ๋˜๊ธฐ ์ „์— ์ƒ์„ฑ๋˜์—ˆ์„ ์ˆ˜ ์žˆ๋Š” PUSH_PROMISE ํ”„๋ ˆ์ž„์„ ์ฒ˜๋ฆฌํ•ด์•ผ ํ•œ๋‹ค.

์•ฝ์†๋œ ์ŠคํŠธ๋ฆผ ์‹๋ณ„์ž๊ฐ€ ๋ถˆ๋ฒ•์ ์ธ ๊ฒฝ์šฐ(์„น์…˜ 5.1.1), ์ˆ˜์‹ ์ž๋Š” ์ด๋ฅผ ์„น์…˜ 5.4.1์— ๊ทœ์ •๋œ PROTOCOL_ERROR ์œ ํ˜•์˜ ์—ฐ๊ฒฐ ์˜ค๋ฅ˜๋กœ ์ฒ˜๋ฆฌํ•ด์•ผ ํ•œ๋‹ค(MUST). ๋ถˆ๋ฒ•์ ์ธ ์ŠคํŠธ๋ฆผ ์‹๋ณ„์ž๋Š” ํ˜„์žฌ "idle" ์ƒํƒœ๊ฐ€ ์•„๋‹Œ ์ŠคํŠธ๋ฆผ์˜ ์‹๋ณ„์ž์ด๋‹ค.

ํŒจ๋”ฉ ์˜ฅํ…Ÿ์˜ ์ด ์ˆ˜๋Š” Pad Length ํ•„๋“œ์˜ ๊ฐ’์œผ๋กœ ๊ฒฐ์ •๋œ๋‹ค. ํŒจ๋”ฉ์˜ ๊ธธ์ด๊ฐ€ ํ”„๋ ˆ์ž„ ํŽ˜์ด๋กœ๋“œ์˜ ๊ธธ์ด ์ด์ƒ์ธ ๊ฒฝ์šฐ ์ˆ˜์‹ ์ž๋Š” ์ด๋ฅผ ์„น์…˜ 5.4.1์— ๊ทœ์ •๋œ PROTOCOL_ERROR ์œ ํ˜•์˜ ์—ฐ๊ฒฐ ์˜ค๋ฅ˜๋กœ ์ฒ˜๋ฆฌํ•ด์•ผ ํ•œ๋‹ค(MUST).

6.7. PING

PING ํ”„๋ ˆ์ž„(type=0x06)์€ ์†ก์‹ ์ž๋กœ๋ถ€ํ„ฐ ์ตœ์†Œ ์™•๋ณต ์‹œ๊ฐ„์„ ์ธก์ •ํ•˜๊ณ  ์œ ํœด ์—ฐ๊ฒฐ์ด ์—ฌ์ „ํžˆ ์ž‘๋™ํ•˜๋Š”์ง€ ํ™•์ธํ•˜๊ธฐ ์œ„ํ•œ ๋ฉ”์ปค๋‹ˆ์ฆ˜์ด๋‹ค. PING ํ”„๋ ˆ์ž„์€ ์–ด๋А ์—”๋“œํฌ์ธํŠธ์—์„œ๋‚˜ ๋ณด๋‚ผ ์ˆ˜ ์žˆ๋‹ค.

PING Frame {
  Length (24) = 0x08,
  Type (8) = 0x06,

  Unused Flags (7),
  ACK Flag (1),

  Reserved (1),
  Stream Identifier (31) = 0,

  Opaque Data (64),
}

๊ทธ๋ฆผ 9: PING ํ”„๋ ˆ์ž„ ํ˜•์‹

Length, Type, Unused Flag(s), Reserved ๋ฐ Stream Identifier ํ•„๋“œ๋Š” ์„น์…˜ 4์— ์„ค๋ช…๋˜์–ด ์žˆ๋‹ค.

ํ”„๋ ˆ์ž„ ํ—ค๋” ์™ธ์—๋„ PING ํ”„๋ ˆ์ž„์€ ํŽ˜์ด๋กœ๋“œ์— 8 ์˜ฅํ…Ÿ์˜ ๋ถˆํˆฌ๋ช… ๋ฐ์ดํ„ฐ๋ฅผ ํฌํ•จํ•ด์•ผ ํ•œ๋‹ค(MUST). ์†ก์‹ ์ž๋Š” ์ž„์˜์˜ ๊ฐ’์„ ํฌํ•จํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ ๊ทธ ์˜ฅํ…Ÿ๋“ค์„ ์–ด๋–ค ๋ฐฉ์‹์œผ๋กœ๋“  ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค.

ACK ํ”Œ๋ž˜๊ทธ๊ฐ€ ์„ค์ •๋˜์ง€ ์•Š์€ PING ํ”„๋ ˆ์ž„์„ ์ˆ˜์‹ ํ•œ ์ˆ˜์‹ ์ž๋Š” ๋™์ผํ•œ ํ”„๋ ˆ์ž„ ํŽ˜์ด๋กœ๋“œ๋กœ ACK ํ”Œ๋ž˜๊ทธ๊ฐ€ ์„ค์ •๋œ PING ํ”„๋ ˆ์ž„์„ ์‘๋‹ต์œผ๋กœ ์ „์†กํ•ด์•ผ ํ•œ๋‹ค(MUST). PING ์‘๋‹ต์€ ๋‹ค๋ฅธ ์–ด๋–ค ํ”„๋ ˆ์ž„๋ณด๋‹ค ๋†’์€ ์šฐ์„ ์ˆœ์œ„๋กœ ์ฒ˜๋ฆฌ๋˜๋Š” ๊ฒƒ์ด ๋ฐ”๋žŒ์งํ•˜๋‹ค(SHOULD).

PING ํ”„๋ ˆ์ž„์€ ๋‹ค์Œ๊ณผ ๊ฐ™์€ ํ”Œ๋ž˜๊ทธ๋ฅผ ์ •์˜ํ•œ๋‹ค:

ACK (0x01):
์„ค์ •๋˜๋ฉด ์ด PING ํ”„๋ ˆ์ž„์ด PING ์‘๋‹ต์ž„์„ ๋‚˜ํƒ€๋‚ธ๋‹ค. ์—”๋“œํฌ์ธํŠธ๋Š” PING ์‘๋‹ต์—์„œ ์ด ํ”Œ๋ž˜๊ทธ๋ฅผ MUST ์„ค์ •ํ•ด์•ผ ํ•œ๋‹ค. ๋˜ํ•œ ์ด ํ”Œ๋ž˜๊ทธ๊ฐ€ ์„ค์ •๋œ PING ํ”„๋ ˆ์ž„์— ์‘๋‹ตํ•ด์„œ๋Š” ์•ˆ ๋œ๋‹ค(MUST NOT).

PING ํ”„๋ ˆ์ž„์€ ์–ด๋–ค ๊ฐœ๋ณ„ ์ŠคํŠธ๋ฆผ๊ณผ๋„ ์—ฐ๊ด€๋˜์ง€ ์•Š๋Š”๋‹ค. Stream Identifier ํ•„๋“œ ๊ฐ’์ด 0x00์ด ์•„๋‹Œ PING ํ”„๋ ˆ์ž„์„ ์ˆ˜์‹ ํ•˜๋ฉด ์ˆ˜์‹ ์ž๋Š” ์„น์…˜ 5.4.1์— ๊ทœ์ •๋œ PROTOCOL_ERROR ์œ ํ˜•์˜ ์—ฐ๊ฒฐ ์˜ค๋ฅ˜๋กœ ์‘๋‹ตํ•ด์•ผ ํ•œ๋‹ค(MUST).

๊ธธ์ด๊ฐ€ 8์ด ์•„๋‹Œ PING ํ”„๋ ˆ์ž„์„ ์ˆ˜์‹ ํ•˜๋ฉด ์ˆ˜์‹ ์ž๋Š” ์ด๋ฅผ ์„น์…˜ 5.4.1์— ๊ทœ์ •๋œ FRAME_SIZE_ERROR ์œ ํ˜•์˜ ์—ฐ๊ฒฐ ์˜ค๋ฅ˜๋กœ ์ฒ˜๋ฆฌํ•ด์•ผ ํ•œ๋‹ค(MUST).

6.8. GOAWAY

GOAWAY ํ”„๋ ˆ์ž„(type=0x07)์€ ์—ฐ๊ฒฐ ์ข…๋ฃŒ๋ฅผ ์‹œ์ž‘ํ•˜๊ฑฐ๋‚˜ ์‹ฌ๊ฐํ•œ ์˜ค๋ฅ˜ ์ƒํƒœ๋ฅผ ์•Œ๋ฆฌ๋Š” ๋ฐ ์‚ฌ์šฉ๋œ๋‹ค. GOAWAY๋Š” ์—”๋“œํฌ์ธํŠธ๊ฐ€ ์ƒˆ ์ŠคํŠธ๋ฆผ ์ˆ˜๋ฝ์„ ์ ์ฐจ ์ค‘๋‹จํ•˜๋ฉด์„œ ์ด์ „์— ์„ค์ •๋œ ์ŠคํŠธ๋ฆผ์˜ ์ฒ˜๋ฆฌ๋Š” ์™„๋ฃŒํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•œ๋‹ค. ์ด๋Š” ์„œ๋ฒ„ ์œ ์ง€๋ณด์ˆ˜์™€ ๊ฐ™์€ ๊ด€๋ฆฌ ์ž‘์—…์„ ๊ฐ€๋Šฅํ•˜๊ฒŒ ํ•œ๋‹ค.

์—”๋“œํฌ์ธํŠธ๊ฐ€ ์ƒˆ ์ŠคํŠธ๋ฆผ์„ ์‹œ์ž‘ํ•˜๋Š” ๊ฒƒ๊ณผ ์›๊ฒฉ ํ”ผ์–ด๊ฐ€ GOAWAY๋ฅผ ๋ณด๋‚ด๋Š” ๊ฒƒ ์‚ฌ์ด์—๋Š” ๋ณธ์งˆ์ ์ธ ๊ฒฝ์Ÿ ์กฐ๊ฑด์ด ์žˆ๋‹ค. ์ด๋ฅผ ๋‹ค๋ฃจ๊ธฐ ์œ„ํ•ด GOAWAY๋Š” ์ด ์—ฐ๊ฒฐ์—์„œ ์†ก์‹ ์ž๊ฐ€ ์ฒ˜๋ฆฌํ–ˆ๊ฑฐ๋‚˜ ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์žˆ์—ˆ๋˜ ๋งˆ์ง€๋ง‰ ํ”ผ์–ด-์‹œ์ž‘ ์ŠคํŠธ๋ฆผ์˜ ์ŠคํŠธ๋ฆผ ์‹๋ณ„์ž๋ฅผ ํฌํ•จํ•œ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด ์„œ๋ฒ„๊ฐ€ GOAWAY๋ฅผ ๋ณด๋‚ผ ๊ฒฝ์šฐ ์‹๋ณ„๋œ ์ŠคํŠธ๋ฆผ์€ ํด๋ผ์ด์–ธํŠธ๊ฐ€ ์‹œ์ž‘ํ•œ ๊ฐ€์žฅ ๋†’์€ ๋ฒˆํ˜ธ์˜ ์ŠคํŠธ๋ฆผ์ด๋‹ค.

GOAWAY๋ฅผ ๋ณด๋‚ธ ์ดํ›„ ์†ก์‹ ์ž๋Š” ํฌํ•จ๋œ ๋งˆ์ง€๋ง‰ ์ŠคํŠธ๋ฆผ ์‹๋ณ„์ž๋ณด๋‹ค ๋†’์€ ์‹๋ณ„์ž๋ฅผ ๊ฐ€์ง„ ์ˆ˜์‹ ์ž๊ฐ€ ์‹œ์ž‘ํ•œ ์ŠคํŠธ๋ฆผ์— ๋Œ€ํ•ด ์ „์†ก๋œ ํ”„๋ ˆ์ž„์„ ๋ฌด์‹œํ•  ๊ฒƒ์ด๋‹ค. GOAWAY ํ”„๋ ˆ์ž„์˜ ์ˆ˜์‹ ์ž๋Š” ์—ฐ๊ฒฐ์—์„œ ์ถ”๊ฐ€ ์ŠคํŠธ๋ฆผ์„ ์—ด์–ด์„œ๋Š” ์•ˆ ๋œ๋‹ค(MUST NOT), ๋‹ค๋งŒ ์ƒˆ ์ŠคํŠธ๋ฆผ์„ ์œ„ํ•ด ์ƒˆ ์—ฐ๊ฒฐ์„ ์„ค์ •ํ•  ์ˆ˜๋Š” ์žˆ๋‹ค.

GOAWAY ์ˆ˜์‹ ์ž๊ฐ€ GOAWAY์— ํ‘œ์‹œ๋œ ๊ฒƒ๋ณด๋‹ค ๋” ๋†’์€ ์ŠคํŠธ๋ฆผ ์‹๋ณ„์ž์— ๋Œ€ํ•ด ๋ฐ์ดํ„ฐ๋ฅผ ์ „์†กํ•œ ๊ฒฝ์šฐ, ํ•ด๋‹น ์ŠคํŠธ๋ฆผ๋“ค์€ ์ฒ˜๋ฆฌ๋˜์ง€ ์•Š์•˜๊ฑฐ๋‚˜ ์ฒ˜๋ฆฌ๋˜์ง€ ์•Š์„ ๊ฒƒ์ด๋‹ค. GOAWAY ํ”„๋ ˆ์ž„์˜ ์ˆ˜์‹ ์ž๋Š” ํ•ด๋‹น ์ŠคํŠธ๋ฆผ๋“ค์„ ๋งˆ์น˜ ์ „ํ˜€ ์ƒ์„ฑ๋˜์ง€ ์•Š์•˜๋˜ ๊ฒƒ์ฒ˜๋Ÿผ ์ทจ๊ธ‰ํ•˜๊ณ  ๋‚˜์ค‘์— ์ƒˆ ์—ฐ๊ฒฐ์—์„œ ์žฌ์‹œ๋„ํ•  ์ˆ˜ ์žˆ๋‹ค.

์—”๋“œํฌ์ธํŠธ๋Š” ์—ฐ๊ฒฐ์„ ๋‹ซ๊ธฐ ์ „์— ํ•ญ์ƒ GOAWAY ํ”„๋ ˆ์ž„์„ ๋ณด๋‚ด์–ด ์›๊ฒฉ ํ”ผ์–ด๊ฐ€ ์ŠคํŠธ๋ฆผ์ด ์ผ๋ถ€๋งŒ ์ฒ˜๋ฆฌ๋˜์—ˆ๋Š”์ง€ ์—ฌ๋ถ€๋ฅผ ์•Œ ์ˆ˜ ์žˆ๊ฒŒ ํ•˜๋Š” ๊ฒƒ์ด ๋ฐ”๋žŒ์งํ•˜๋‹ค(SHOULD). ์˜ˆ๋ฅผ ๋“ค์–ด HTTP ํด๋ผ์ด์–ธํŠธ๊ฐ€ POST๋ฅผ ์ „์†กํ•œ ๋™์‹œ์— ์„œ๋ฒ„๊ฐ€ ์—ฐ๊ฒฐ์„ ๋‹ซ์œผ๋ฉด ์„œ๋ฒ„๊ฐ€ ์–ด๋–ค ์ŠคํŠธ๋ฆผ์— ๋Œ€ํ•ด ์ž‘์—…์„ ์‹œ์ž‘ํ–ˆ๋Š”์ง€ ์•Œ๋ ค์ฃผ๋Š” GOAWAY๋ฅผ ๋ณด๋‚ด์ง€ ์•Š์œผ๋ฉด ํด๋ผ์ด์–ธํŠธ๋Š” ๊ทธ POST ์š”์ฒญ์ด ์ฒ˜๋ฆฌ๋˜์—ˆ๋Š”์ง€ ์•Œ ์ˆ˜ ์—†๋‹ค.

์—”๋“œํฌ์ธํŠธ๋Š” ๋ถˆ๋Ÿ‰ ํ”ผ์–ด์— ๋Œ€ํ•ด GOAWAY๋ฅผ ๋ณด๋‚ด์ง€ ์•Š๊ณ  ์—ฐ๊ฒฐ์„ ๋‹ซ๊ธฐ๋กœ ์„ ํƒํ•  ์ˆ˜ ์žˆ๋‹ค.

GOAWAY ํ”„๋ ˆ์ž„์€ ํ•ญ์ƒ ์—ฐ๊ฒฐ์„ ๋‹ซ๊ธฐ ์ง์ „์— ์ „์†ก๋  ํ•„์š”๋Š” ์—†๋‹ค; GOAWAY๋ฅผ ์ˆ˜์‹ ํ•œ ์ชฝ์ด ์—ฐ๊ฒฐ์„ ๋” ์ด์ƒ ํ•„์š”๋กœ ํ•˜์ง€ ์•Š๋Š” ๊ฒฝ์šฐ์—๋„ ์—ฐ๊ฒฐ์„ ์ข…๋ฃŒํ•˜๊ธฐ ์ „์— GOAWAY๋ฅผ ๋ณด๋‚ด๋Š” ๊ฒƒ์ด ๋ฐ”๋žŒ์งํ•˜๋‹ค(SHOULD).

GOAWAY Frame {
  Length (24),
  Type (8) = 0x07,

  Unused Flags (8),

  Reserved (1),
  Stream Identifier (31) = 0,

  Reserved (1),
  Last-Stream-ID (31),
  Error Code (32),
  Additional Debug Data (..),
}

๊ทธ๋ฆผ 10: GOAWAY ํ”„๋ ˆ์ž„ ํ˜•์‹

Length, Type, Unused Flag(s), Reserved ๋ฐ Stream Identifier ํ•„๋“œ๋Š” ์„น์…˜ 4์— ์„ค๋ช…๋˜์–ด ์žˆ๋‹ค.

GOAWAY ํ”„๋ ˆ์ž„์€ ์–ด๋–ค ํ”Œ๋ž˜๊ทธ๋„ ์ •์˜ํ•˜์ง€ ์•Š๋Š”๋‹ค.

GOAWAY ํ”„๋ ˆ์ž„์€ ํŠน์ • ์ŠคํŠธ๋ฆผ์ด ์•„๋‹ˆ๋ผ ์—ฐ๊ฒฐ์— ์ ์šฉ๋œ๋‹ค. Stream Identifier๊ฐ€ 0x00์ด ์•„๋‹Œ GOAWAY ํ”„๋ ˆ์ž„์„ ์ˆ˜์‹ ํ•œ ์—”๋“œํฌ์ธํŠธ๋Š” ์ด๋ฅผ ์„น์…˜ 5.4.1์— ๊ทœ์ •๋œ PROTOCOL_ERROR ์œ ํ˜•์˜ ์—ฐ๊ฒฐ ์˜ค๋ฅ˜๋กœ ์ฒ˜๋ฆฌํ•ด์•ผ ํ•œ๋‹ค(MUST).

GOAWAY ํ”„๋ ˆ์ž„์˜ ๋งˆ์ง€๋ง‰ ์ŠคํŠธ๋ฆผ ์‹๋ณ„์ž๋Š” ์†ก์‹ ์ž๊ฐ€ ์–ด๋–ค ์ŠคํŠธ๋ฆผ์— ๋Œ€ํ•ด ์–ด๋–ค ์กฐ์น˜๋ฅผ ์ทจํ–ˆ๊ฑฐ๋‚˜ ์•„์ง ์กฐ์น˜๋ฅผ ์ทจํ•  ์ˆ˜ ์žˆ๋Š” ๊ฐ€์žฅ ๋†’์€ ๋ฒˆํ˜ธ์˜ ์ŠคํŠธ๋ฆผ ์‹๋ณ„์ž๋ฅผ ํฌํ•จํ•œ๋‹ค. ์‹๋ณ„๋œ ์ŠคํŠธ๋ฆผ๊นŒ์ง€์˜ ๋ชจ๋“  ์ŠคํŠธ๋ฆผ์€ ์–ด๋–ค ๋ฐฉ์‹์œผ๋กœ๋“  ์ฒ˜๋ฆฌ๋˜์—ˆ์„ ์ˆ˜ ์žˆ๋‹ค. ์ฒ˜๋ฆฌ๋œ ์ŠคํŠธ๋ฆผ์ด ์—†๋‹ค๋ฉด ๋งˆ์ง€๋ง‰ ์ŠคํŠธ๋ฆผ ์‹๋ณ„์ž๋Š” 0์œผ๋กœ ์„ค์ •๋  ์ˆ˜ ์žˆ๋‹ค.

์—ฐ๊ฒฐ์ด GOAWAY ์—†์ด ์ข…๋ฃŒ๋˜๋ฉด ๋งˆ์ง€๋ง‰ ์ŠคํŠธ๋ฆผ ์‹๋ณ„์ž๋Š” ์‚ฌ์‹ค์ƒ ๊ฐ€๋Šฅํ•œ ๊ฐ€์žฅ ๋†’์€ ์ŠคํŠธ๋ฆผ ์‹๋ณ„์ž๊ฐ€ ๋œ๋‹ค.

๋งˆ์ง€๋ง‰ ์ŠคํŠธ๋ฆผ ์‹๋ณ„์ž๋ณด๋‹ค ์ž‘๊ฑฐ๋‚˜ ๊ฐ™์€ ๋ฒˆํ˜ธ์˜ ์ŠคํŠธ๋ฆผ์—์„œ ์™„์ „ํžˆ ๋‹ซํžˆ์ง€ ์•Š์€ ์ž‘์—…์€ ์žฌ์‹œ๋„ํ•  ์ˆ˜ ์—†๋Š” ๊ฒฝ์šฐ๊ฐ€ ๋งŽ๋‹ค(์˜ˆ: ๋น„๋ฉฑ๋“ฑ ์ž‘์—… ์ œ์™ธ). ๊ทธ๋Ÿฌ๋‚˜ ๋” ๋†’์€ ๋ฒˆํ˜ธ์˜ ์ŠคํŠธ๋ฆผ์—์„œ์˜ ํ”„๋กœํ† ์ฝœ ํ™œ๋™์€ ์ƒˆ ์—ฐ๊ฒฐ์—์„œ ์•ˆ์ „ํ•˜๊ฒŒ ์žฌ์‹œ๋„ํ•  ์ˆ˜ ์žˆ๋‹ค.

๋งˆ์ง€๋ง‰ ์ŠคํŠธ๋ฆผ ์‹๋ณ„์ž๋ณด๋‹ค ์ž‘์€ ๋ฒˆํ˜ธ์˜ ์ŠคํŠธ๋ฆผ์—์„œ์˜ ํ™œ๋™์€ ์—ฌ์ „ํžˆ ์„ฑ๊ณต์ ์œผ๋กœ ์™„๋ฃŒ๋  ์ˆ˜ ์žˆ๋‹ค. GOAWAY๋ฅผ ๋ณด๋‚ธ ์ธก์€ GOAWAY๋ฅผ ์ „์†กํ•œ ํ›„ ์ง„ํ–‰ ์ค‘์ธ ๋ชจ๋“  ์ŠคํŠธ๋ฆผ์ด ์™„๋ฃŒ๋  ๋•Œ๊นŒ์ง€ ์—ฐ๊ฒฐ์„ "open" ์ƒํƒœ๋กœ ์œ ์ง€ํ•˜์—ฌ ์šฐ์•„ํ•˜๊ฒŒ ์ข…๋ฃŒํ•  ์ˆ˜ ์žˆ๋‹ค.

์—”๋“œํฌ์ธํŠธ๋Š” ์ƒํ™ฉ ๋ณ€ํ™” ์‹œ ์—ฌ๋Ÿฌ GOAWAY ํ”„๋ ˆ์ž„์„ ๋ณด๋‚ผ MAY ์žˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด, ์šฐ์•„ํ•œ ์ข…๋ฃŒ ์ค‘ NO_ERROR์™€ ํ•จ๊ป˜ GOAWAY๋ฅผ ๋ณด๋ƒˆ๋˜ ์—”๋“œํฌ์ธํŠธ๊ฐ€ ์ดํ›„ ์ฆ‰์‹œ ์—ฐ๊ฒฐ์„ ์ข…๋ฃŒํ•ด์•ผ ํ•˜๋Š” ์กฐ๊ฑด์„ ๋งŒ๋‚  ์ˆ˜ ์žˆ๋‹ค. ๋งˆ์ง€๋ง‰์œผ๋กœ ์ˆ˜์‹ ๋œ GOAWAY์˜ ๋งˆ์ง€๋ง‰ ์ŠคํŠธ๋ฆผ ์‹๋ณ„์ž๋Š” ์–ด๋–ค ์ŠคํŠธ๋ฆผ์ด ์ฒ˜๋ฆฌ๋˜์—ˆ์„ ์ˆ˜ ์žˆ๋Š”์ง€๋ฅผ ๋‚˜ํƒ€๋‚ธ๋‹ค. ์—”๋“œํฌ์ธํŠธ๋Š” ์ด๋ฏธ ๋ณด๋‚ธ ๋งˆ์ง€๋ง‰ ์ŠคํŠธ๋ฆผ ์‹๋ณ„์ž์˜ ๊ฐ’์„ ์ฆ๊ฐ€์‹œ์ผœ์„œ๋Š” ์•ˆ ๋œ๋‹ค(MUST NOT), ์™œ๋ƒํ•˜๋ฉด ํ”ผ์–ด๊ฐ€ ์ด๋ฏธ ์ฒ˜๋ฆฌ๋˜์ง€ ์•Š์€ ์š”์ฒญ์„ ๋‹ค๋ฅธ ์—ฐ๊ฒฐ์—์„œ ์žฌ์‹œ๋„ํ–ˆ์„ ์ˆ˜ ์žˆ๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค.

ํด๋ผ์ด์–ธํŠธ๊ฐ€ ์žฌ์‹œ๋„ํ•  ์ˆ˜ ์—†์„ ๊ฒฝ์šฐ ์„œ๋ฒ„๊ฐ€ ์—ฐ๊ฒฐ์„ ๋‹ซ์„ ๋•Œ ์ „์†ก ์ค‘์ธ ๋ชจ๋“  ์š”์ฒญ์„ ์žƒ๊ฒŒ ๋œ๋‹ค. ์ด๋Š” ์ค‘๊ฐœ์ž๊ฐ€ HTTP/2๊ฐ€ ์•„๋‹Œ ํด๋ผ์ด์–ธํŠธ์— ์„œ๋น„์Šค๋ฅผ ์ œ๊ณตํ•  ๋•Œ ํŠนํžˆ ํ•ด๋‹น๋œ๋‹ค. ์„œ๋ฒ„๊ฐ€ ์šฐ์•„ํ•˜๊ฒŒ ์—ฐ๊ฒฐ์„ ์ข…๋ฃŒํ•˜๋ ค ํ•˜๋ฉด ์ดˆ๊ธฐ GOAWAY ํ”„๋ ˆ์ž„์„ ๋งˆ์ง€๋ง‰ ์ŠคํŠธ๋ฆผ ์‹๋ณ„์ž๋ฅผ 231-1๋กœ ์„ค์ •ํ•˜๊ณ  NO_ERROR ์ฝ”๋“œ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์ „์†กํ•˜๋Š” ๊ฒƒ์ด ๋ฐ”๋žŒ์งํ•˜๋‹ค(SHOULD). ์ด๋Š” ํด๋ผ์ด์–ธํŠธ์—๊ฒŒ ์ข…๋ฃŒ๊ฐ€ ์ž„๋ฐ•ํ–ˆ์œผ๋ฏ€๋กœ ์ถ”๊ฐ€ ์š”์ฒญ์„ ์‹œ์ž‘ํ•ด์„œ๋Š” ์•ˆ ๋จ์„ ์‹ ํ˜ธํ•œ๋‹ค. ์ธํ”Œ๋ผ์ดํŠธ ์ŠคํŠธ๋ฆผ ์ƒ์„ฑ์— ์‹œ๊ฐ„์ด ํ—ˆ์šฉ๋œ ํ›„(์ตœ์†Œ ํ•œ ์™•๋ณต ์‹œ๊ฐ„) ์„œ๋ฒ„๋Š” ์—…๋ฐ์ดํŠธ๋œ ๋งˆ์ง€๋ง‰ ์ŠคํŠธ๋ฆผ ์‹๋ณ„์ž๋ฅผ ๊ฐ€์ง„ ๋˜ ๋‹ค๋ฅธ GOAWAY ํ”„๋ ˆ์ž„์„ ์ „์†กํ•  ์ˆ˜ ์žˆ๋‹ค. ์ด๋Š” ์š”์ฒญ์„ ์žƒ์ง€ ์•Š์œผ๋ฉด์„œ ๊นจ๋—ํ•˜๊ฒŒ ์—ฐ๊ฒฐ์„ ์ข…๋ฃŒํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•œ๋‹ค.

GOAWAY๋ฅผ ๋ณด๋‚ธ ํ›„ ์†ก์‹ ์ž๋Š” ํฌํ•จ๋œ ๋งˆ์ง€๋ง‰ ์ŠคํŠธ๋ฆผ ์‹๋ณ„์ž๋ณด๋‹ค ๋†’์€ ์‹๋ณ„์ž๋ฅผ ๊ฐ€์ง„ ์ˆ˜์‹ ์ž์— ์˜ํ•ด ์‹œ์ž‘๋œ ์ŠคํŠธ๋ฆผ์— ๋Œ€ํ•œ ํ”„๋ ˆ์ž„์„ ํ๊ธฐํ•  ์ˆ˜ ์žˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ์—ฐ๊ฒฐ ์ƒํƒœ๋ฅผ ๋ณ€๊ฒฝํ•˜๋Š” ํ”„๋ ˆ์ž„์€ ์™„์ „ํžˆ ๋ฌด์‹œ๋  ์ˆ˜ ์—†๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด HEADERS, PUSH_PROMISE, ๋ฐ CONTINUATION ํ”„๋ ˆ์ž„์€ ํ•„๋“œ ์„น์…˜ ์••์ถ•์„ ์œ„ํ•œ ์ƒํƒœ๊ฐ€ ์ผ๊ด€๋˜๋„๋ก ์ตœ์†Œํ•œ ์ฒ˜๋ฆฌ๋˜์–ด์•ผ ํ•œ๋‹ค(์ž์„ธํ•œ ๋‚ด์šฉ์€ ์„น์…˜ 4.3 ์ฐธ์กฐ); ๋งˆ์ฐฌ๊ฐ€์ง€๋กœ DATA ํ”„๋ ˆ์ž„์€ ์—ฐ๊ฒฐ ํ๋ฆ„ ์ œ์–ด ์ฐฝ์— ๋ฐ˜์˜๋˜์–ด์•ผ ํ•œ๋‹ค. ์ด๋Ÿฌํ•œ ํ”„๋ ˆ์ž„์„ ์ฒ˜๋ฆฌํ•˜์ง€ ์•Š์œผ๋ฉด ํ๋ฆ„ ์ œ์–ด๋‚˜ ํ•„๋“œ ์„น์…˜ ์••์ถ• ์ƒํƒœ๊ฐ€ ๋น„๋™๊ธฐํ™”๋  ์ˆ˜ ์žˆ๋‹ค.

GOAWAY ํ”„๋ ˆ์ž„์€ ๋˜ํ•œ ์—ฐ๊ฒฐ ์ข…๋ฃŒ ์ด์œ ๋ฅผ ๋‹ด์€ 32๋น„ํŠธ ์˜ค๋ฅ˜ ์ฝ”๋“œ(์„น์…˜ 7)๋ฅผ ํฌํ•จํ•œ๋‹ค.

์—”๋“œํฌ์ธํŠธ๋Š” ์–ด๋–ค GOAWAY ํ”„๋ ˆ์ž„์˜ ํŽ˜์ด๋กœ๋“œ์— ๋ถˆํˆฌ๋ช… ๋ฐ์ดํ„ฐ๋ฅผ ์ถ”๊ฐ€ํ•  MAY ์žˆ๋‹ค. ์ถ”๊ฐ€ ๋””๋ฒ„๊ทธ ๋ฐ์ดํ„ฐ๋Š” ์ง„๋‹จ ๋ชฉ์ ์œผ๋กœ๋งŒ ์˜๋„๋˜๋ฉฐ ์˜๋ฏธ๋ก ์  ๊ฐ€์น˜๋Š” ๊ฐ–์ง€ ์•Š๋Š”๋‹ค. ๋””๋ฒ„๊ทธ ์ •๋ณด์—๋Š” ๋ณด์•ˆ ๋˜๋Š” ๊ฐœ์ธ์ •๋ณด ๋ฏผ๊ฐ ๋ฐ์ดํ„ฐ๊ฐ€ ํฌํ•จ๋  ์ˆ˜ ์žˆ๋‹ค. ๊ธฐ๋ก๋˜๊ฑฐ๋‚˜ ์ง€์†์ ์œผ๋กœ ์ €์žฅ๋˜๋Š” ๋””๋ฒ„๊ทธ ๋ฐ์ดํ„ฐ๋Š” ๋ฌด๋‹จ ์ ‘๊ทผ์„ ๋ฐฉ์ง€ํ•˜๊ธฐ ์œ„ํ•œ ์ ์ ˆํ•œ ๋ณดํ˜ธ ์กฐ์น˜๋ฅผ ๊ฐ€์ ธ์•ผ ํ•œ๋‹ค(MUST).

6.9. WINDOW_UPDATE

WINDOW_UPDATE ํ”„๋ ˆ์ž„(type=0x08)์€ ํ๋ฆ„ ์ œ์–ด๋ฅผ ๊ตฌํ˜„ํ•˜๋Š” ๋ฐ ์‚ฌ์šฉ๋œ๋‹ค; ๊ฐœ์š”๋Š” ์„น์…˜ 5.2๋ฅผ ๋ณด๋ผ.

ํ๋ฆ„ ์ œ์–ด๋Š” ๋‘ ์ˆ˜์ค€์—์„œ ์ž‘๋™ํ•œ๋‹ค: ๊ฐœ๋ณ„ ์ŠคํŠธ๋ฆผ๋ณ„๊ณผ ์ „์ฒด ์—ฐ๊ฒฐ์— ๋Œ€ํ•ด.

๋‘ ์œ ํ˜•์˜ ํ๋ฆ„ ์ œ์–ด๋Š” ํ™‰ ๋‹จ์œ„์ด๋ฉฐ, ์ฆ‰ ์–‘ ์—”๋“œํฌ์ธํŠธ ๊ฐ„์—์„œ๋งŒ ์ž‘๋™ํ•œ๋‹ค. ์ค‘๊ฐœ์ž๋Š” ์ข…์†๋œ ์—ฐ๊ฒฐ๋“ค ์‚ฌ์ด์—์„œ WINDOW_UPDATE ํ”„๋ ˆ์ž„์„ ์ „๋‹ฌํ•˜์ง€ ์•Š๋Š”๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ์–ด๋–ค ์ˆ˜์‹ ์ž์— ์˜ํ•œ ๋ฐ์ดํ„ฐ ์ „์†ก ์ œํ•œ์€ ์›๋ž˜ ์†ก์‹ ์ž ์ชฝ์œผ๋กœ ํ๋ฆ„ ์ œ์–ด ์ •๋ณด์˜ ์ „ํŒŒ๋ฅผ ๊ฐ„์ ‘์ ์œผ๋กœ ์ดˆ๋ž˜ํ•  ์ˆ˜ ์žˆ๋‹ค.

ํ๋ฆ„ ์ œ์–ด๋Š” ํ๋ฆ„ ์ œ์–ด์˜ ๋Œ€์ƒ์ด ๋˜๋Š” ํ”„๋ ˆ์ž„์—๋งŒ ์ ์šฉ๋œ๋‹ค. ์ด ๋ฌธ์„œ์—์„œ ์ •์˜๋œ ํ”„๋ ˆ์ž„ ์ค‘์—์„œ๋Š” ์˜ค์ง DATA ํ”„๋ ˆ์ž„๋งŒ ํ๋ฆ„ ์ œ์–ด์˜ ๋Œ€์ƒ์ด๋‹ค. ํ๋ฆ„ ์ œ์–ด์—์„œ ๋ฉด์ œ๋œ ํ”„๋ ˆ์ž„์€ ์ˆ˜์‹  ๊ฐ€๋Šฅํ•˜๊ณ  ์ฒ˜๋ฆฌ๋˜์–ด์•ผ ํ•˜๋ฉฐ(MUST), ์ˆ˜์‹ ์ž๊ฐ€ ํ•ด๋‹น ํ”„๋ ˆ์ž„์„ ์ฒ˜๋ฆฌํ•  ์ž์›์„ ํ• ๋‹นํ•  ์ˆ˜ ์—†์œผ๋ฉด ์ˆ˜์‹ ์ž๋Š” ์„น์…˜ 5.4.2 ๋˜๋Š” ์„น์…˜ 5.4.1์— ๊ทœ์ •๋œ FLOW_CONTROL_ERROR ์œ ํ˜•์˜ ์ŠคํŠธ๋ฆผ ์˜ค๋ฅ˜๋‚˜ ์—ฐ๊ฒฐ ์˜ค๋ฅ˜๋กœ ์‘๋‹ตํ•  MAY ์žˆ๋‹ค.

WINDOW_UPDATE Frame {
  Length (24) = 0x04,
  Type (8) = 0x08,

  Unused Flags (8),

  Reserved (1),
  Stream Identifier (31),

  Reserved (1),
  Window Size Increment (31),
}

๊ทธ๋ฆผ 11: WINDOW_UPDATE ํ”„๋ ˆ์ž„ ํ˜•์‹

Length, Type, Unused Flag(s), Reserved ๋ฐ Stream Identifier ํ•„๋“œ๋Š” ์„น์…˜ 4์— ์„ค๋ช…๋˜์–ด ์žˆ๋‹ค. WINDOW_UPDATE ํ”„๋ ˆ์ž„์˜ ํŽ˜์ด๋กœ๋“œ๋Š” ํ•˜๋‚˜์˜ ์˜ˆ์•ฝ ๋น„ํŠธ์™€ ์†ก์‹ ์ž๊ฐ€ ๊ธฐ์กด ํ๋ฆ„ ์ œ์–ด ์ฐฝ์— ์ถ”๊ฐ€๋กœ ์ „์†กํ•  ์ˆ˜ ์žˆ๋Š” ์˜ฅํ…Ÿ ์ˆ˜๋ฅผ ๋‚˜ํƒ€๋‚ด๋Š” ๋ถ€ํ˜ธ ์—†๋Š” 31๋น„ํŠธ ์ •์ˆ˜๋กœ ์ด๋ฃจ์–ด์ ธ ์žˆ๋‹ค. ํ๋ฆ„ ์ œ์–ด ์ฐฝ์˜ ์ฆ๊ฐ€๋Ÿ‰์— ๋Œ€ํ•œ ํ•ฉ๋ฒ•์  ๋ฒ”์œ„๋Š” 1๋ถ€ํ„ฐ 231-1(2,147,483,647) ์˜ฅํ…Ÿ์ด๋‹ค.

WINDOW_UPDATE ํ”„๋ ˆ์ž„์€ ์–ด๋–ค ํ”Œ๋ž˜๊ทธ๋„ ์ •์˜ํ•˜์ง€ ์•Š๋Š”๋‹ค.

WINDOW_UPDATE ํ”„๋ ˆ์ž„์€ ํŠน์ • ์ŠคํŠธ๋ฆผ์— ์ ์šฉ๋  ์ˆ˜๋„ ์žˆ๊ณ  ์ „์ฒด ์—ฐ๊ฒฐ์— ์ ์šฉ๋  ์ˆ˜๋„ ์žˆ๋‹ค. ์ „์ž์˜ ๊ฒฝ์šฐ ํ”„๋ ˆ์ž„์˜ Stream Identifier๊ฐ€ ์˜ํ–ฅ์„ ๋ฐ›๋Š” ์ŠคํŠธ๋ฆผ์„ ๋‚˜ํƒ€๋‚ด๋ฉฐ, ํ›„์ž์˜ ๊ฒฝ์šฐ ๊ฐ’ "0"์ด ์ „์ฒด ์—ฐ๊ฒฐ์„ ์ฃผ์ œ๋กœ ํ•จ์„ ๋‚˜ํƒ€๋‚ธ๋‹ค.

์ˆ˜์‹ ์ž๋Š” ํ๋ฆ„ ์ œ์–ด ์ฐฝ ์ฆ๊ฐ€๋Ÿ‰์ด 0์ธ WINDOW_UPDATE ํ”„๋ ˆ์ž„์„ ์ˆ˜์‹ ํ•˜๋ฉด ์ด๋ฅผ ์„น์…˜ 5.4.2์— ๊ทœ์ •๋œ PROTOCOL_ERROR ์œ ํ˜•์˜ ์ŠคํŠธ๋ฆผ ์˜ค๋ฅ˜๋กœ ์ฒ˜๋ฆฌํ•ด์•ผ ํ•œ๋‹ค(MUST); ์—ฐ๊ฒฐ ํ๋ฆ„ ์ œ์–ด ์ฐฝ์— ๋Œ€ํ•œ ์˜ค๋ฅ˜๋Š” ์—ฐ๊ฒฐ ์˜ค๋ฅ˜๋กœ ์ฒ˜๋ฆฌ๋˜์–ด์•ผ ํ•œ๋‹ค(์„น์…˜ 5.4.1)(MUST).

WINDOW_UPDATE๋Š” END_STREAM ํ”Œ๋ž˜๊ทธ๊ฐ€ ์„ค์ •๋œ ํ”„๋ ˆ์ž„์„ ์ „์†กํ•œ ํ”ผ์–ด๊ฐ€ ๋ณด๋‚ผ ์ˆ˜ ์žˆ๋‹ค. ์ด๋Š” ์ˆ˜์‹ ์ž๊ฐ€ "half-closed (remote)" ๋˜๋Š” "closed" ์ƒํƒœ์˜ ์ŠคํŠธ๋ฆผ์—์„œ WINDOW_UPDATE ํ”„๋ ˆ์ž„์„ ๋ฐ›์„ ์ˆ˜ ์žˆ์Œ์„ ์˜๋ฏธํ•œ๋‹ค. ์ˆ˜์‹ ์ž๋Š” ์ด๋ฅผ ์˜ค๋ฅ˜๋กœ ์ฒ˜๋ฆฌํ•ด์„œ๋Š” ์•ˆ ๋œ๋‹ค(์ž์„ธํ•œ ๋‚ด์šฉ์€ ์„น์…˜ 5.1 ์ฐธ์กฐ).

์ˆ˜์‹ ์ž๊ฐ€ ํ๋ฆ„ ์ œ์–ด ๋Œ€์ƒ ํ”„๋ ˆ์ž„์„ ์ˆ˜์‹ ํ•˜๋ฉด, ์ˆ˜์‹ ์ž๋Š” ์ด๋ฅผ ์—ฐ๊ฒฐ ํ๋ฆ„ ์ œ์–ด ์ฐฝ์— ๋Œ€ํ•ด ํ•ญ์ƒ ๋ฐ˜์˜ํ•˜์—ฌ ๊ณ„์‚ฐํ•ด์•ผ ํ•œ๋‹ค. ์ด๋Š” ํ”„๋ ˆ์ž„์ด ์˜ค๋ฅ˜์ธ ๊ฒฝ์šฐ์—๋„ ํ•„์š”ํ•˜๋‹ค. ์†ก์‹ ์ž๊ฐ€ ํ”„๋ ˆ์ž„์„ ํ๋ฆ„ ์ œ์–ด ์ฐฝ์— ํฌํ•จํ•˜์—ฌ ๊ณ„์‚ฐํ•˜์ง€๋งŒ ์ˆ˜์‹ ์ž๊ฐ€ ์ด๋ฅผ ๋ฐ˜์˜ํ•˜์ง€ ์•Š์œผ๋ฉด ์†ก์‹ ์ž์™€ ์ˆ˜์‹ ์ž์˜ ํ๋ฆ„ ์ œ์–ด ์ฐฝ์ด ๋‹ฌ๋ผ์งˆ ์ˆ˜ ์žˆ๋‹ค.

๊ธธ์ด๊ฐ€ 4 ์˜ฅํ…Ÿ์ด ์•„๋‹Œ WINDOW_UPDATE ํ”„๋ ˆ์ž„์€ ์„น์…˜ 5.4.1์— ๊ทœ์ •๋œ FRAME_SIZE_ERROR ์œ ํ˜•์˜ ์—ฐ๊ฒฐ ์˜ค๋ฅ˜๋กœ ์ฒ˜๋ฆฌ๋˜์–ด์•ผ ํ•œ๋‹ค(MUST).

6.9.1. ํ๋ฆ„ ์ œ์–ด ์ฐฝ

HTTP/2์˜ ํ๋ฆ„ ์ œ์–ด๋Š” ๊ฐ ์†ก์‹ ์ž๊ฐ€ ๋ชจ๋“  ์ŠคํŠธ๋ฆผ์— ๋Œ€ํ•ด ์œ ์ง€ํ•˜๋Š” ์ฐฝ์„ ์‚ฌ์šฉํ•˜์—ฌ ๊ตฌํ˜„๋œ๋‹ค. ํ๋ฆ„ ์ œ์–ด ์ฐฝ์€ ์†ก์‹ ์ž๊ฐ€ ์ „์†กํ•  ์ˆ˜ ์žˆ๋Š” ์˜ฅํ…Ÿ ์ˆ˜๋ฅผ ๋‚˜ํƒ€๋‚ด๋Š” ์ •์ˆ˜ ๊ฐ’์œผ๋กœ, ๊ทธ ํฌ๊ธฐ๋Š” ์ˆ˜์‹ ์ž์˜ ๋ฒ„ํผ๋ง ์šฉ๋Ÿ‰์„ ์ธก์ •ํ•œ๋‹ค.

์ ์šฉ๋˜๋Š” ํ๋ฆ„ ์ œ์–ด ์ฐฝ์€ ์ŠคํŠธ๋ฆผ ํ๋ฆ„ ์ œ์–ด ์ฐฝ๊ณผ ์—ฐ๊ฒฐ ํ๋ฆ„ ์ œ์–ด ์ฐฝ์˜ ๋‘ ๊ฐ€์ง€๊ฐ€ ์žˆ๋‹ค. ์†ก์‹ ์ž๋Š” ์ˆ˜์‹ ์ž๊ฐ€ ๊ด‘๊ณ ํ•œ ์–ด๋А ํ•œ ํ๋ฆ„ ์ œ์–ด ์ฐฝ์˜ ์—ฌ์œ  ๊ณต๊ฐ„์„ ์ดˆ๊ณผํ•˜๋Š” ๊ธธ์ด์˜ ํ๋ฆ„ ์ œ์–ด ๋Œ€์ƒ ํ”„๋ ˆ์ž„์„ ์ „์†กํ•ด์„œ๋Š” ์•ˆ ๋œ๋‹ค(MUST NOT). END_STREAM ํ”Œ๋ž˜๊ทธ๊ฐ€ ์„ค์ •๋œ ๊ธธ์ด 0 ํ”„๋ ˆ์ž„(์˜ˆ: ๋นˆ DATA ํ”„๋ ˆ์ž„)์€ ๋‘ ํ๋ฆ„ ์ œ์–ด ์ฐฝ ์ค‘ ์–ด๋А ์ชฝ์— ์—ฌ์œ  ๊ณต๊ฐ„์ด ์—†๋”๋ผ๋„ ์ „์†กํ•  ์ˆ˜ ์žˆ๋‹ค(MAY).

ํ๋ฆ„ ์ œ์–ด ๊ณ„์‚ฐ์—์„œ๋Š” 9 ์˜ฅํ…Ÿ์˜ ํ”„๋ ˆ์ž„ ํ—ค๋”๋Š” ํฌํ•จ๋˜์ง€ ์•Š๋Š”๋‹ค.

์†ก์‹ ์ž๋Š” ํ๋ฆ„ ์ œ์–ด ๋Œ€์ƒ ํ”„๋ ˆ์ž„์„ ์ „์†กํ•œ ํ›„ ์ „์†กํ•œ ํ”„๋ ˆ์ž„์˜ ๊ธธ์ด๋งŒํผ ๋‘ ์ฐฝ์—์„œ ์ด์šฉ ๊ฐ€๋Šฅํ•œ ๊ณต๊ฐ„์„ ๊ฐ์†Œ์‹œํ‚จ๋‹ค.

ํ”„๋ ˆ์ž„์˜ ์ˆ˜์‹ ์ž๋Š” ๋ฐ์ดํ„ฐ๋ฅผ ์†Œ๋น„ํ•˜๊ณ  ํ๋ฆ„ ์ œ์–ด ์ฐฝ์˜ ๊ณต๊ฐ„์„ ํ™•๋ณดํ•จ์— ๋”ฐ๋ผ WINDOW_UPDATE ํ”„๋ ˆ์ž„์„ ๋ณด๋‚ธ๋‹ค. ์ŠคํŠธ๋ฆผ ๋ฐ ์—ฐ๊ฒฐ ์ˆ˜์ค€์˜ ํ๋ฆ„ ์ œ์–ด ์ฐฝ์— ๋Œ€ํ•ด ๋ณ„๋„์˜ WINDOW_UPDATE ํ”„๋ ˆ์ž„์ด ์ „์†ก๋œ๋‹ค. ์ˆ˜์‹ ์ž๋Š” ๋งค์šฐ ์ž‘์€ ์ฆ๊ฐ€๋Ÿ‰์˜ WINDOW_UPDATE๋ฅผ ๋ณด๋‚ด๋Š” ๊ฒƒ์„ ํ”ผํ•˜๊ธฐ ์œ„ํ•œ ๋ฉ”์ปค๋‹ˆ์ฆ˜์„ ๋งˆ๋ จํ•˜๋Š” ๊ฒƒ์ด ๊ถŒ์žฅ๋œ๋‹ค(์ž์„ธํ•œ ๋‚ด์šฉ์€ RFC 1122 ์„น์…˜ 4.2.3.3 ์ฐธ์กฐ).

์†ก์‹ ์ž๋Š” WINDOW_UPDATE ํ”„๋ ˆ์ž„์„ ์ˆ˜์‹ ํ•˜๋ฉด ํ•ด๋‹น ์ฐฝ์„ ํ”„๋ ˆ์ž„์— ์ง€์ •๋œ ์–‘๋งŒํผ ์—…๋ฐ์ดํŠธํ•œ๋‹ค.

์†ก์‹ ์ž๋Š” ํ๋ฆ„ ์ œ์–ด ์ฐฝ์ด 231-1 ์˜ฅํ…Ÿ์„ ์ดˆ๊ณผํ•˜๋„๋ก ํ—ˆ์šฉํ•ด์„œ๋Š” ์•ˆ ๋œ๋‹ค(MUST NOT). ์†ก์‹ ์ž๊ฐ€ WINDOW_UPDATE๋ฅผ ์ˆ˜์‹ ํ•˜์—ฌ ํ๋ฆ„ ์ œ์–ด ์ฐฝ์ด ์ด ์ตœ๋Œ€๋ฅผ ์ดˆ๊ณผํ•˜๊ฒŒ ๋˜๋ฉด ์†ก์‹ ์ž๋Š” ์ ์ ˆํžˆ ์ŠคํŠธ๋ฆผ์ด๋‚˜ ์—ฐ๊ฒฐ์„ ์ข…๋ฃŒํ•ด์•ผ ํ•˜๋ฉฐ, ์ŠคํŠธ๋ฆผ์˜ ๊ฒฝ์šฐ RST_STREAM์„ FLOW_CONTROL_ERROR ์˜ค๋ฅ˜ ์ฝ”๋“œ์™€ ํ•จ๊ป˜ ์ „์†กํ•˜๊ณ , ์—ฐ๊ฒฐ์˜ ๊ฒฝ์šฐ GOAWAY๋ฅผ FLOW_CONTROL_ERROR ์˜ค๋ฅ˜ ์ฝ”๋“œ์™€ ํ•จ๊ป˜ ์ „์†กํ•ด์•ผ ํ•œ๋‹ค(MUST).

์†ก์‹ ์ž์˜ ํ๋ฆ„ ์ œ์–ด ๋Œ€์ƒ ํ”„๋ ˆ์ž„๊ณผ ์ˆ˜์‹ ์ž์˜ WINDOW_UPDATE ํ”„๋ ˆ์ž„์€ ์„œ๋กœ ์™„์ „ํžˆ ๋น„๋™๊ธฐ์ ์ด๋‹ค. ์ด ํŠน์„ฑ์€ ์ˆ˜์‹ ์ž๊ฐ€ ์†ก์‹ ์ž์˜ ์ฐฝ ํฌ๊ธฐ๋ฅผ ๊ณต๊ฒฉ์ ์œผ๋กœ ์—…๋ฐ์ดํŠธํ•˜์—ฌ ์ŠคํŠธ๋ฆผ์ด ์ •์ฒด๋˜๋Š” ๊ฒƒ์„ ๋ฐฉ์ง€ํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•œ๋‹ค.

6.9.2. ์ดˆ๊ธฐ ํ๋ฆ„ ์ œ์–ด ์ฐฝ ํฌ๊ธฐ

HTTP/2 ์—ฐ๊ฒฐ์ด ์ฒ˜์Œ ์„ค์ •๋  ๋•Œ ์ƒˆ ์ŠคํŠธ๋ฆผ์€ ์ดˆ๊ธฐ ํ๋ฆ„ ์ œ์–ด ์ฐฝ ํฌ๊ธฐ 65,535 ์˜ฅํ…Ÿ์„ ๊ฐ–๋Š”๋‹ค. ์—ฐ๊ฒฐ ํ๋ฆ„ ์ œ์–ด ์ฐฝ๋„ 65,535 ์˜ฅํ…Ÿ์ด๋‹ค. ์–‘์ชฝ ์—”๋“œํฌ์ธํŠธ๋Š” SETTINGS_INITIAL_WINDOW_SIZE์— ๊ฐ’์„ ํฌํ•จํ•˜์—ฌ ์ƒˆ ์ŠคํŠธ๋ฆผ์˜ ์ดˆ๊ธฐ ์ฐฝ ํฌ๊ธฐ๋ฅผ ์กฐ์ •ํ•  ์ˆ˜ ์žˆ๋‹ค. ์—ฐ๊ฒฐ ํ๋ฆ„ ์ œ์–ด ์ฐฝ์€ WINDOW_UPDATE ํ”„๋ ˆ์ž„์„ ์‚ฌ์šฉํ•ด์„œ๋งŒ ๋ณ€๊ฒฝํ•  ์ˆ˜ ์žˆ๋‹ค.

SETTINGS ํ”„๋ ˆ์ž„์„ ์ˆ˜์‹ ํ•˜์—ฌ SETTINGS_INITIAL_WINDOW_SIZE ๊ฐ’์„ ์„ค์ •๋ฐ›๊ธฐ ์ „๊นŒ์ง€ ์—”๋“œํฌ์ธํŠธ๋Š” ์ „์†ก ์‹œ ๊ธฐ๋ณธ ์ดˆ๊ธฐ ์ฐฝ ํฌ๊ธฐ๋งŒ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค. ์œ ์‚ฌํ•˜๊ฒŒ, ์—ฐ๊ฒฐ ํ๋ฆ„ ์ œ์–ด ์ฐฝ์€ WINDOW_UPDATE ํ”„๋ ˆ์ž„์„ ๋ฐ›์„ ๋•Œ๊นŒ์ง€ ๊ธฐ๋ณธ ์ดˆ๊ธฐ ์ฐฝ ํฌ๊ธฐ์— ๋”ฐ๋ผ ์„ค์ •๋œ๋‹ค.

ACTIVATED๋˜์ง€ ์•Š์€ ์ŠคํŠธ๋ฆผ๋“ค ๋ฟ๋งŒ ์•„๋‹ˆ๋ผ ํ™œ์„ฑํ™”๋œ ํ๋ฆ„ ์ œ์–ด ์ฐฝ์„ ๊ฐ€์ง„ ์ŠคํŠธ๋ฆผ๋“ค(์ฆ‰ "open" ๋˜๋Š” "half-closed (remote)" ์ƒํƒœ)์— ๋Œ€ํ•ด์„œ๋„ SETTINGS ํ”„๋ ˆ์ž„์€ ์ดˆ๊ธฐ ํ๋ฆ„ ์ œ์–ด ์ฐฝ ํฌ๊ธฐ๋ฅผ ๋ณ€๊ฒฝํ•  ์ˆ˜ ์žˆ๋‹ค. SETTINGS_INITIAL_WINDOW_SIZE ๊ฐ’์ด ๋ณ€๊ฒฝ๋˜๋ฉด ์ˆ˜์‹ ์ž๋Š” ์œ ์ง€ํ•˜๋Š” ๋ชจ๋“  ์ŠคํŠธ๋ฆผ ํ๋ฆ„ ์ œ์–ด ์ฐฝ์˜ ํฌ๊ธฐ๋ฅผ ์ƒˆ ๊ฐ’๊ณผ ์ด์ „ ๊ฐ’์˜ ์ฐจ์ด๋งŒํผ ์กฐ์ •ํ•ด์•ผ ํ•œ๋‹ค(MUST).

SETTINGS_INITIAL_WINDOW_SIZE์˜ ๋ณ€๊ฒฝ์€ ํ๋ฆ„ ์ œ์–ด ์ฐฝ์˜ ์ด์šฉ ๊ฐ€๋Šฅ ๊ณต๊ฐ„์„ ์Œ์ˆ˜๋กœ ๋งŒ๋“ค ์ˆ˜ ์žˆ๋‹ค. ์†ก์‹ ์ž๋Š” ์Œ์ˆ˜์˜ ํ๋ฆ„ ์ œ์–ด ์ฐฝ์„ ์ถ”์ ํ•ด์•ผ ํ•˜๋ฉฐ, WINDOW_UPDATE๊ฐ€ ์ฐฝ์„ ์–‘์ˆ˜๋กœ ๋งŒ๋“ค ๋•Œ๊นŒ์ง€ ์ƒˆ๋กœ์šด ํ๋ฆ„ ์ œ์–ด ๋Œ€์ƒ ํ”„๋ ˆ์ž„์„ ์ „์†กํ•ด์„œ๋Š” ์•ˆ ๋œ๋‹ค(MUST NOT).

์˜ˆ๋ฅผ ๋“ค์–ด, ํด๋ผ์ด์–ธํŠธ๊ฐ€ ์—ฐ๊ฒฐ ์ˆ˜๋ฆฝ ์งํ›„ 60KB๋ฅผ ์ „์†กํ–ˆ๊ณ  ์„œ๋ฒ„๊ฐ€ ์ดˆ๊ธฐ ์ฐฝ ํฌ๊ธฐ๋ฅผ 16KB๋กœ ์„ค์ •ํ•˜๋ฉด, ํด๋ผ์ด์–ธํŠธ๋Š” SETTINGS ํ”„๋ ˆ์ž„ ์ˆ˜์‹  ์‹œ ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•œ ํ๋ฆ„ ์ œ์–ด ์ฐฝ์„ -44KB๋กœ ์žฌ๊ณ„์‚ฐํ•œ๋‹ค. ํด๋ผ์ด์–ธํŠธ๋Š” WINDOW_UPDATE ํ”„๋ ˆ์ž„์ด ์ฐฝ์„ ์–‘์ˆ˜๋กœ ๋ณต์›ํ•  ๋•Œ๊นŒ์ง€ ์Œ์ˆ˜ ์ฐฝ์„ ์œ ์ง€ํ•˜๊ณ  ์ดํ›„์— ์ „์†ก์„ ์žฌ๊ฐœํ•  ์ˆ˜ ์žˆ๋‹ค.

SETTINGS ํ”„๋ ˆ์ž„์€ ์—ฐ๊ฒฐ ํ๋ฆ„ ์ œ์–ด ์ฐฝ์„ ๋ณ€๊ฒฝํ•  ์ˆ˜ ์—†๋‹ค.

SETTINGS_INITIAL_WINDOW_SIZE ๋ณ€๊ฒฝ์œผ๋กœ ์ธํ•ด ์–ด๋–ค ํ๋ฆ„ ์ œ์–ด ์ฐฝ์ด๋ผ๋„ ์ตœ๋Œ€ ํฌ๊ธฐ๋ฅผ ์ดˆ๊ณผํ•˜๊ฒŒ ๋˜๋ฉด ์ˆ˜์‹ ์ž๋Š” ์ด๋ฅผ ์„น์…˜ 5.4.1์— ๊ทœ์ •๋œ FLOW_CONTROL_ERROR ์œ ํ˜•์˜ ์—ฐ๊ฒฐ ์˜ค๋ฅ˜๋กœ ์ฒ˜๋ฆฌํ•ด์•ผ ํ•œ๋‹ค(MUST).

6.9.3. ์ŠคํŠธ๋ฆผ ์ฐฝ ํฌ๊ธฐ ์ถ•์†Œ

์ˆ˜์‹ ์ž๊ฐ€ ํ˜„์žฌ ํฌ๊ธฐ๋ณด๋‹ค ์ž‘์€ ํ๋ฆ„ ์ œ์–ด ์ฐฝ์„ ์‚ฌ์šฉํ•˜๋ ค๋ฉด ์ƒˆ๋กœ์šด SETTINGS ํ”„๋ ˆ์ž„์„ ๋ณด๋‚ผ ์ˆ˜ ์žˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ์ˆ˜์‹ ์ž๋Š” ์†ก์‹ ์ž๊ฐ€ SETTINGS ํ”„๋ ˆ์ž„์„ ์ฒ˜๋ฆฌํ•˜๊ธฐ ์ „์— ๊ทธ๋ณด๋‹ค ํฐ ๋ฐ์ดํ„ฐ๋ฅผ ๋ณด๋‚ผ ์ˆ˜ ์žˆ์œผ๋ฏ€๋กœ ์ด๋Ÿฌํ•œ ๊ฒฝ์šฐ์—๋„ ์ดˆ๊ณผํ•˜๋Š” ๋ฐ์ดํ„ฐ๋ฅผ ์ˆ˜์‹ ํ•  ์ค€๋น„๊ฐ€ ๋˜์–ด ์žˆ์–ด์•ผ ํ•œ๋‹ค(MUST).

์ดˆ๊ธฐ ํ๋ฆ„ ์ œ์–ด ์ฐฝ ํฌ๊ธฐ๋ฅผ ์ถ•์†Œํ•˜๋Š” SETTINGS ํ”„๋ ˆ์ž„์„ ์ „์†กํ•œ ํ›„ ์ˆ˜์‹ ์ž๋Š” ๊ทธ๋ณด๋‹ค ํฐ ์ŠคํŠธ๋ฆผ๋“ค์„ ๊ณ„์† ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์žˆ๋‹ค(MAY). ์ŠคํŠธ๋ฆผ์„ ๊ณ„์† ํ—ˆ์šฉํ•˜๋ฉด ํ๋ฆ„ ์ œ์–ด ์ฐฝ์„ ์ฆ‰์‹œ ์ค„์—ฌ์„œ ํ™•๋ณดํ•œ ๊ณต๊ฐ„์„ ๊ฐ์†Œ์‹œํ‚ค๋Š” ๊ฒƒ์„ ํ—ˆ์šฉํ•˜์ง€ ์•Š๋Š”๋‹ค. ์ด๋Ÿฌํ•œ ์ŠคํŠธ๋ฆผ๋“ค์˜ ์ง„ํ–‰์€ WINDOW_UPDATE ํ”„๋ ˆ์ž„์ด ํ•„์š”ํ•˜๋ฏ€๋กœ ์ •์ฒด๋  ์ˆ˜ ์žˆ๋‹ค. ์ˆ˜์‹ ์ž๋Š” ๋Œ€์‹  ์˜ํ–ฅ์„ ๋ฐ›๋Š” ์ŠคํŠธ๋ฆผ๋“ค์— ๋Œ€ํ•ด RST_STREAM์„ FLOW_CONTROL_ERROR ์˜ค๋ฅ˜ ์ฝ”๋“œ์™€ ํ•จ๊ป˜ ์ „์†กํ•  ์ˆ˜ ์žˆ๋‹ค(MAY).

6.10. CONTINUATION

CONTINUATION ํ”„๋ ˆ์ž„(type=0x09)์€ ํ•„๋“œ ๋ธ”๋ก ์กฐ๊ฐ๋“ค์˜ ์—ฐ์†์„ ๊ณ„์†ํ•˜๊ธฐ ์œ„ํ•ด ์‚ฌ์šฉ๋œ๋‹ค(์„น์…˜ 4.3). ์ด์ „ ํ”„๋ ˆ์ž„์ด ๋™์ผํ•œ ์ŠคํŠธ๋ฆผ์— ์žˆ๊ณ  END_HEADERS ํ”Œ๋ž˜๊ทธ๊ฐ€ ์„ค์ •๋˜์ง€ ์•Š์€ HEADERS, PUSH_PROMISE ๋˜๋Š” CONTINUATION ํ”„๋ ˆ์ž„์ธ ํ•œ ์ž„์˜์˜ ์ˆ˜์˜ CONTINUATION ํ”„๋ ˆ์ž„์„ ์ „์†กํ•  ์ˆ˜ ์žˆ๋‹ค.

CONTINUATION Frame {
  Length (24),
  Type (8) = 0x09,

  Unused Flags (5),
  END_HEADERS Flag (1),
  Unused Flags (2),

  Reserved (1),
  Stream Identifier (31),

  Field Block Fragment (..),
}

๊ทธ๋ฆผ 12: CONTINUATION ํ”„๋ ˆ์ž„ ํ˜•์‹

Length, Type, Unused Flag(s), Reserved ๋ฐ Stream Identifier ํ•„๋“œ๋Š” ์„น์…˜ 4์— ์„ค๋ช…๋˜์–ด ์žˆ๋‹ค. CONTINUATION ํ”„๋ ˆ์ž„ ํŽ˜์ด๋กœ๋“œ๋Š” ํ•„๋“œ ๋ธ”๋ก ์กฐ๊ฐ(์„น์…˜ 4.3)์„ ํฌํ•จํ•œ๋‹ค.

CONTINUATION ํ”„๋ ˆ์ž„์€ ๋‹ค์Œ๊ณผ ๊ฐ™์€ ํ”Œ๋ž˜๊ทธ๋ฅผ ์ •์˜ํ•œ๋‹ค:

END_HEADERS (0x04):
์„ค์ •๋˜๋ฉด END_HEADERS ํ”Œ๋ž˜๊ทธ๋Š” ์ด ํ”„๋ ˆ์ž„์ด ํ•„๋“œ ๋ธ”๋ก(์„น์…˜ 4.3)์„ ์ข…๋ฃŒํ•จ์„ ๋‚˜ํƒ€๋‚ธ๋‹ค.
END_HEADERS ํ”Œ๋ž˜๊ทธ๊ฐ€ ์„ค์ •๋˜์ง€ ์•Š์œผ๋ฉด ์ด ํ”„๋ ˆ์ž„์€ MUST ๋‹ค๋ฅธ CONTINUATION ํ”„๋ ˆ์ž„์œผ๋กœ ์ด์–ด์ ธ์•ผ ํ•œ๋‹ค. ์ˆ˜์‹ ์ž๋Š” ๋‹ค๋ฅธ ์œ ํ˜•์˜ ํ”„๋ ˆ์ž„์ด๋‚˜ ๋‹ค๋ฅธ ์ŠคํŠธ๋ฆผ์˜ ํ”„๋ ˆ์ž„์„ ์ˆ˜์‹ ํ•˜๋ฉด ์ด๋ฅผ ์„น์…˜ 5.4.1์— ๊ทœ์ •๋œ PROTOCOL_ERROR ์œ ํ˜•์˜ ์—ฐ๊ฒฐ ์˜ค๋ฅ˜๋กœ ์ฒ˜๋ฆฌํ•ด์•ผ ํ•œ๋‹ค(MUST).

CONTINUATION ํ”„๋ ˆ์ž„์€ ์„น์…˜ 4.3์— ์ •์˜๋œ ๋ฐ”์™€ ๊ฐ™์ด ์—ฐ๊ฒฐ ์ƒํƒœ๋ฅผ ๋ณ€๊ฒฝํ•œ๋‹ค.

CONTINUATION ํ”„๋ ˆ์ž„์€ ๋ฐ˜๋“œ์‹œ ์ŠคํŠธ๋ฆผ๊ณผ ์—ฐ๊ด€๋˜์–ด์•ผ ํ•œ๋‹ค. Stream Identifier ํ•„๋“œ๊ฐ€ 0x00์ธ CONTINUATION ํ”„๋ ˆ์ž„์„ ์ˆ˜์‹ ํ•˜๋ฉด ์ˆ˜์‹ ์ž๋Š” ์„น์…˜ 5.4.1์— ๊ทœ์ •๋œ PROTOCOL_ERROR ์œ ํ˜•์˜ ์—ฐ๊ฒฐ ์˜ค๋ฅ˜๋กœ ์‘๋‹ตํ•ด์•ผ ํ•œ๋‹ค(MUST).

CONTINUATION ํ”„๋ ˆ์ž„์€ END_HEADERS ํ”Œ๋ž˜๊ทธ๊ฐ€ ์„ค์ •๋˜์ง€ ์•Š์€ HEADERS, PUSH_PROMISE ๋˜๋Š” CONTINUATION ํ”„๋ ˆ์ž„์— ์˜ํ•ด ์„ ํ–‰๋˜์–ด์•ผ ํ•œ๋‹ค. ์ด ๊ทœ์น™ ์œ„๋ฐ˜์„ ๊ด€์ฐฐํ•œ ์ˆ˜์‹ ์ž๋Š” ์ด๋ฅผ ์„น์…˜ 5.4.1์— ๊ทœ์ •๋œ PROTOCOL_ERROR ์œ ํ˜•์˜ ์—ฐ๊ฒฐ ์˜ค๋ฅ˜๋กœ ์‘๋‹ตํ•ด์•ผ ํ•œ๋‹ค(MUST).


7. ์˜ค๋ฅ˜ ์ฝ”๋“œ

์˜ค๋ฅ˜ ์ฝ”๋“œ๋Š” ์ŠคํŠธ๋ฆผ ๋˜๋Š” ์—ฐ๊ฒฐ ์˜ค๋ฅ˜์˜ ์ด์œ ๋ฅผ ์ „๋‹ฌํ•˜๊ธฐ ์œ„ํ•ด RST_STREAM ๋ฐ GOAWAY ํ”„๋ ˆ์ž„์—์„œ ์‚ฌ์šฉ๋˜๋Š” 32๋น„ํŠธ ํ•„๋“œ์ž…๋‹ˆ๋‹ค.

์˜ค๋ฅ˜ ์ฝ”๋“œ๋Š” ๊ณตํ†ต ์ฝ”๋“œ ๊ณต๊ฐ„์„ ๊ณต์œ ํ•ฉ๋‹ˆ๋‹ค. ์ผ๋ถ€ ์˜ค๋ฅ˜ ์ฝ”๋“œ๋Š” ์ŠคํŠธ๋ฆผ์—๋งŒ ์ ์šฉ๋˜๊ฑฐ๋‚˜ ์—ฐ๊ฒฐ ์ „์ฒด์—๋งŒ ์ ์šฉ๋˜๋ฉฐ, ๋‹ค๋ฅธ ๋ฌธ๋งฅ์—์„œ๋Š” ์ •์˜๋œ ์˜๋ฏธ๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค.

๋‹ค์Œ์˜ ์˜ค๋ฅ˜ ์ฝ”๋“œ๋“ค์ด ์ •์˜๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค:

NO_ERROR (0x00):
๊ด€๋ จ๋œ ์ƒํƒœ๊ฐ€ ์˜ค๋ฅ˜์˜ ๊ฒฐ๊ณผ๊ฐ€ ์•„๋‹˜์„ ๋‚˜ํƒ€๋ƒ…๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด, GOAWAY๋Š” ์—ฐ๊ฒฐ์˜ ์ •์ƒ ์ข…๋ฃŒ๋ฅผ ๋‚˜ํƒ€๋‚ด๊ธฐ ์œ„ํ•ด ์ด ์ฝ”๋“œ๋ฅผ ํฌํ•จํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
PROTOCOL_ERROR (0x01):
์—”๋“œํฌ์ธํŠธ๊ฐ€ ํŠน์ •ํ•˜์ง€ ์•Š์€ ํ”„๋กœํ† ์ฝœ ์˜ค๋ฅ˜๋ฅผ ๊ฐ์ง€ํ–ˆ์Œ์„ ๋‚˜ํƒ€๋ƒ…๋‹ˆ๋‹ค. ๋” ๊ตฌ์ฒด์ ์ธ ์˜ค๋ฅ˜ ์ฝ”๋“œ๊ฐ€ ์—†์„ ๋•Œ ์‚ฌ์šฉํ•˜๋Š” ์ฝ”๋“œ์ž…๋‹ˆ๋‹ค.
INTERNAL_ERROR (0x02):
์—”๋“œํฌ์ธํŠธ๊ฐ€ ์˜ˆ๊ธฐ์น˜ ์•Š์€ ๋‚ด๋ถ€ ์˜ค๋ฅ˜๋ฅผ ๋งŒ๋‚ฌ์Œ์„ ๋‚˜ํƒ€๋ƒ…๋‹ˆ๋‹ค.
FLOW_CONTROL_ERROR (0x03):
ํ”ผ์–ด๊ฐ€ ํ๋ฆ„ ์ œ์–ด ํ”„๋กœํ† ์ฝœ์„ ์œ„๋ฐ˜ํ–ˆ์Œ์„ ์—”๋“œํฌ์ธํŠธ๊ฐ€ ๊ฐ์ง€ํ–ˆ์Œ์„ ๋‚˜ํƒ€๋ƒ…๋‹ˆ๋‹ค.
SETTINGS_TIMEOUT (0x04):
์—”๋“œํฌ์ธํŠธ๊ฐ€ SETTINGS ํ”„๋ ˆ์ž„์„ ๋ณด๋ƒˆ์œผ๋‚˜ ์ ์‹œ์— ์‘๋‹ต์„ ๋ฐ›์ง€ ๋ชปํ–ˆ์Œ์„ ๋‚˜ํƒ€๋ƒ…๋‹ˆ๋‹ค. ์ž์„ธํ•œ ๋‚ด์šฉ์€ ์„น์…˜ 6.5.3("Settings Synchronization")์„ ๋ณด์‹ญ์‹œ์˜ค.
STREAM_CLOSED (0x05):
์ŠคํŠธ๋ฆผ์ด ๋ฐ˜๋‹ซํž˜(half-closed) ์ƒํƒœ์ธ ํ›„์— ํ”„๋ ˆ์ž„์„ ์ˆ˜์‹ ํ–ˆ์Œ์„ ๋‚˜ํƒ€๋ƒ…๋‹ˆ๋‹ค.
FRAME_SIZE_ERROR (0x06):
์œ ํšจํ•˜์ง€ ์•Š์€ ํฌ๊ธฐ์˜ ํ”„๋ ˆ์ž„์„ ์ˆ˜์‹ ํ–ˆ์Œ์„ ๋‚˜ํƒ€๋ƒ…๋‹ˆ๋‹ค.
REFUSED_STREAM (0x07):
์—”๋“œํฌ์ธํŠธ๊ฐ€ ์–ด๋–ค ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์ฒ˜๋ฆฌ๋„ ์ˆ˜ํ–‰ํ•˜๊ธฐ ์ „์— ์ŠคํŠธ๋ฆผ์„ ๊ฑฐ๋ถ€ํ–ˆ์Œ์„ ๋‚˜ํƒ€๋ƒ…๋‹ˆ๋‹ค(์ž์„ธํ•œ ๋‚ด์šฉ์€ ์„น์…˜ 8.7 ์ฐธ์กฐ).
CANCEL (0x08):
์ŠคํŠธ๋ฆผ์ด ๋” ์ด์ƒ ํ•„์š”ํ•˜์ง€ ์•Š์Œ์„ ๋‚˜ํƒ€๋‚ด๊ธฐ ์œ„ํ•ด ์—”๋“œํฌ์ธํŠธ๊ฐ€ ์‚ฌ์šฉํ•˜๋Š” ์˜ค๋ฅ˜ ์ฝ”๋“œ์ž…๋‹ˆ๋‹ค.
COMPRESSION_ERROR (0x09):
์—ฐ๊ฒฐ์— ๋Œ€ํ•œ ํ•„๋“œ ์„น์…˜ ์••์ถ• ์ปจํ…์ŠคํŠธ๋ฅผ ์œ ์ง€ํ•  ์ˆ˜ ์—†์Œ์„ ์—”๋“œํฌ์ธํŠธ๊ฐ€ ๋‚˜ํƒ€๋ƒ…๋‹ˆ๋‹ค.
CONNECT_ERROR (0x0a):
CONNECT ์š”์ฒญ(์„น์…˜ 8.5)์— ๋Œ€ํ•œ ์‘๋‹ต์œผ๋กœ ์„ค์ •๋œ ์—ฐ๊ฒฐ์ด ์žฌ์„ค์ •๋˜์—ˆ๊ฑฐ๋‚˜ ๋น„์ •์ƒ์ ์œผ๋กœ ๋‹ซํ˜”์Œ์„ ๋‚˜ํƒ€๋ƒ…๋‹ˆ๋‹ค.
ENHANCE_YOUR_CALM (0x0b):
ํ”ผ์–ด๊ฐ€ ๊ณผ๋„ํ•œ ๋ถ€ํ•˜๋ฅผ ์œ ๋ฐœํ•  ์ˆ˜ ์žˆ๋Š” ํ–‰๋™์„ ๋ณด์ด๊ณ  ์žˆ์Œ์„ ์—”๋“œํฌ์ธํŠธ๊ฐ€ ๊ฐ์ง€ํ–ˆ์Œ์„ ๋‚˜ํƒ€๋ƒ…๋‹ˆ๋‹ค.
INADEQUATE_SECURITY (0x0c):
๊ธฐ์ € ์ „์†ก ๊ณ„์ธต์ด ์ตœ์†Œ ๋ณด์•ˆ ์š”๊ตฌ์‚ฌํ•ญ์„ ์ถฉ์กฑํ•˜์ง€ ์•Š์Œ์„ ๋‚˜ํƒ€๋ƒ…๋‹ˆ๋‹ค(์ž์„ธํ•œ ๋‚ด์šฉ์€ ์„น์…˜ 9.2 ์ฐธ์กฐ).
HTTP_1_1_REQUIRED (0x0d):
์—”๋“œํฌ์ธํŠธ๊ฐ€ HTTP/2 ๋Œ€์‹  HTTP/1.1 ์‚ฌ์šฉ์„ ์š”๊ตฌํ•จ์„ ๋‚˜ํƒ€๋ƒ…๋‹ˆ๋‹ค.

์•Œ๋ ค์ง€์ง€ ์•Š์•˜๊ฑฐ๋‚˜ ์ง€์›๋˜์ง€ ์•Š๋Š” ์˜ค๋ฅ˜ ์ฝ”๋“œ๋Š” ์–ด๋–ค ํŠน๋ณ„ํ•œ ๋™์ž‘์„ ์œ ๋ฐœํ•ด์„œ๋Š” MUST NOT ํ•ฉ๋‹ˆ๋‹ค. ์ด๋Ÿฌํ•œ ์ฝ”๋“œ๋“ค์€ ๊ตฌํ˜„์ฒด์—์„œ INTERNAL_ERROR์™€ ๋™๋“ฑํ•˜๊ฒŒ ์ฒ˜๋ฆฌ๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค(MAY).


8. HTTP/2์—์„œ์˜ HTTP ์˜๋ฏธ ํ‘œํ˜„

HTTP/2๋Š” HTTP ๋ฉ”์‹œ์ง€ ์ถ”์ƒํ™”์˜ ํ•œ ๊ตฌ์ฒดํ™”์ž…๋‹ˆ๋‹ค(RFC 9110 ์„น์…˜ 6 ์ฐธ์กฐ).

8.1. HTTP ๋ฉ”์‹œ์ง€ ํ”„๋ ˆ์ด๋ฐ

ํด๋ผ์ด์–ธํŠธ๋Š” ์ƒˆ ์ŠคํŠธ๋ฆผ์—์„œ ์ด์ „์— ์‚ฌ์šฉ๋˜์ง€ ์•Š์€ ์ŠคํŠธ๋ฆผ ์‹๋ณ„์ž๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ HTTP ์š”์ฒญ์„ ์ „์†กํ•ฉ๋‹ˆ๋‹ค(์„น์…˜ 5.1.1 ์ฐธ์กฐ). ์„œ๋ฒ„๋Š” ๋™์ผํ•œ ์ŠคํŠธ๋ฆผ์—์„œ ํ•ด๋‹น ์š”์ฒญ์— ๋Œ€ํ•œ HTTP ์‘๋‹ต์„ ์ „์†กํ•ฉ๋‹ˆ๋‹ค.

HTTP ๋ฉ”์‹œ์ง€(์š”์ฒญ ๋˜๋Š” ์‘๋‹ต)๋Š” ๋‹ค์Œ์œผ๋กœ ๊ตฌ์„ฑ๋ฉ๋‹ˆ๋‹ค:

  1. ํ—ค๋” ์„น์…˜์„ ํฌํ•จํ•˜๋Š” ํ•˜๋‚˜์˜ HEADERS ํ”„๋ ˆ์ž„(๊ทธ ๋’ค์— 0๊ฐœ ์ด์ƒ์˜ CONTINUATION ํ”„๋ ˆ์ž„์ด ์˜ฌ ์ˆ˜ ์žˆ์Œ; ์ž์„ธํ•œ ๋‚ด์šฉ์€ RFC 9110 ์„น์…˜ 6.3 ์ฐธ์กฐ),
  2. ๋ฉ”์‹œ์ง€ ๋ณธ๋ฌธ์„ ํฌํ•จํ•˜๋Š” 0๊ฐœ ์ด์ƒ์˜ DATA ํ”„๋ ˆ์ž„(์ž์„ธํ•œ ๋‚ด์šฉ์€ RFC 9110 ์„น์…˜ 6.4 ์ฐธ์กฐ),
  3. ์„ ํƒ์ ์œผ๋กœ, ํŠธ๋ ˆ์ผ๋Ÿฌ ์„น์…˜์ด ์žˆ๋Š” ๊ฒฝ์šฐ ํ•˜๋‚˜์˜ HEADERS ํ”„๋ ˆ์ž„(๊ทธ ๋’ค์— 0๊ฐœ ์ด์ƒ์˜ CONTINUATION ํ”„๋ ˆ์ž„์ด ์˜ฌ ์ˆ˜ ์žˆ์Œ).

์‘๋‹ต์˜ ๊ฒฝ์šฐ์— ํ•œํ•ด, ์„œ๋ฒ„๋Š” ์ตœ์ข… ์‘๋‹ต์„ ๋‹ด์€ HEADERS ํ”„๋ ˆ์ž„ ์ „์— ์ž„์˜์˜ ์ˆ˜์˜ ์ค‘๊ฐ„ ์‘๋‹ต(interim responses)์„ ๋ณด๋‚ผ MAY ์žˆ์Šต๋‹ˆ๋‹ค. ์ค‘๊ฐ„ ์‘๋‹ต์€ ์ž„์‹œ(1xx) HTTP ์‘๋‹ต์˜ ์ œ์–ด ๋ฐ์ดํ„ฐ์™€ ํ—ค๋” ์„น์…˜์„ ํฌํ•จํ•˜๋Š” HEADERS ํ”„๋ ˆ์ž„(๊ทธ ๋’ค์— 0๊ฐœ ์ด์ƒ์˜ CONTINUATION ํ”„๋ ˆ์ž„์ด ์˜ฌ ์ˆ˜ ์žˆ์Œ)์œผ๋กœ ๊ตฌ์„ฑ๋ฉ๋‹ˆ๋‹ค. ์ƒํƒœ ์ฝ”๋“œ๊ฐ€ ์ •๋ณด ์ฝ”๋“œ(1xx)์ธ HEADERS ํ”„๋ ˆ์ž„์— END_STREAM ํ”Œ๋ž˜๊ทธ๊ฐ€ ์„ค์ •๋œ ๊ฒฝ์šฐ ์ด๋Š” ์ž˜๋ชป๋œ ํ˜•์‹์ž…๋‹ˆ๋‹ค(์„น์…˜ 8.1.1 ์ฐธ์กฐ).

์‹œํ€€์Šค์˜ ๋งˆ์ง€๋ง‰ ํ”„๋ ˆ์ž„์€ END_STREAM ํ”Œ๋ž˜๊ทธ๋ฅผ ๊ฐ€์ง€๋ฉฐ, END_STREAM ํ”Œ๋ž˜๊ทธ๊ฐ€ ์„ค์ •๋œ HEADERS ํ”„๋ ˆ์ž„์€ ๋‚จ์•„ ์žˆ๋Š” ํ•„๋“œ ๋ธ”๋ก ์กฐ๊ฐ๋“ค์„ ์ „์†กํ•˜๋Š” CONTINUATION ํ”„๋ ˆ์ž„๋“ค๋กœ ๋’ค๋”ฐ๋ฅผ ์ˆ˜ ์žˆ์Œ์„ ๋‚˜ํƒ€๋ƒ…๋‹ˆ๋‹ค.

๋‹ค๋ฅธ ์ŠคํŠธ๋ฆผ์˜ ํ”„๋ ˆ์ž„(์–ด๋–ค ์ŠคํŠธ๋ฆผ์—์„œ๋“ )์€ HEADERS ํ”„๋ ˆ์ž„๊ณผ ๊ทธ์— ๋’ค๋”ฐ๋ฅด๋Š” CONTINUATION ํ”„๋ ˆ์ž„๋“ค ์‚ฌ์ด์—๋Š” ๋ฐœ์ƒํ•ด์„œ๋Š” ์•ˆ ๋ฉ๋‹ˆ๋‹ค(MUST NOT).

HTTP/2๋Š” ๋ฉ”์‹œ์ง€ ๋ณธ๋ฌธ์„ ์ „์†กํ•˜๊ธฐ ์œ„ํ•ด DATA ํ”„๋ ˆ์ž„์„ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. chunked ์ „์†ก ์ธ์ฝ”๋”ฉ(HTTP/1.1์˜ ์„น์…˜ 7.1)์€ HTTP/2์—์„œ ์‚ฌ์šฉํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค; ๊ด€๋ จ ๋‚ด์šฉ์€ ์„น์…˜ 8.2.2๋ฅผ ๋ณด์‹ญ์‹œ์˜ค.

ํŠธ๋ ˆ์ผ๋Ÿฌ ํ•„๋“œ๋Š” ์ŠคํŠธ๋ฆผ์„ ์ข…๋ฃŒ์‹œํ‚ค๋Š” ํ•„๋“œ ๋ธ”๋ก์œผ๋กœ ์šด๋ฐ˜๋ฉ๋‹ˆ๋‹ค. ์ฆ‰, ํŠธ๋ ˆ์ผ๋Ÿฌ๋Š” END_STREAM ํ”Œ๋ž˜๊ทธ๊ฐ€ ์„ค์ •๋œ HEADERS ํ”„๋ ˆ์ž„์œผ๋กœ ์‹œ์ž‘ํ•˜๊ณ  0๊ฐœ ์ด์ƒ์˜ CONTINUATION ํ”„๋ ˆ์ž„์„ ๋”ฐ๋ฅด๋ฉฐ, ํ•ด๋‹น HEADERS ํ”„๋ ˆ์ž„์— END_STREAM ํ”Œ๋ž˜๊ทธ๊ฐ€ ์„ค์ •๋˜์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ํŠธ๋ ˆ์ผ๋Ÿฌ์—๋Š” ์˜์‚ฌ-ํ—ค๋” ํ•„๋“œ๋“ค์ด ํฌํ•จ๋˜์–ด์„œ๋Š” ์•ˆ ๋ฉ๋‹ˆ๋‹ค(์„น์…˜ 8.3). ํŠธ๋ ˆ์ผ๋Ÿฌ์—์„œ ์˜์‚ฌ-ํ—ค๋” ํ•„๋“œ๊ฐ€ ์ˆ˜์‹ ๋˜๋ฉด ํ•ด๋‹น ์š”์ฒญ ๋˜๋Š” ์‘๋‹ต์€ ์ž˜๋ชป๋œ ํ˜•์‹์œผ๋กœ ์ฒ˜๋ฆฌ๋˜์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค(์„น์…˜ 8.1.1).

์š”์ฒญ์„ ์—ฌ๋Š” HEADERS ํ”„๋ ˆ์ž„์„ ๋ฐ›์€ ํ›„์— END_STREAM ํ”Œ๋ž˜๊ทธ๊ฐ€ ์„ค์ •๋˜์ง€ ์•Š์€ ๋‹ค๋ฅธ HEADERS ํ”„๋ ˆ์ž„์„ ์ˆ˜์‹ ํ•˜๋ฉด ํ•ด๋‹น ์š”์ฒญ ๋˜๋Š” ์‘๋‹ต์€ ์ž˜๋ชป๋œ ํ˜•์‹์œผ๋กœ ๊ฐ„์ฃผ๋˜์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค(์„น์…˜ 8.1.1).

HTTP ์š”์ฒญ/์‘๋‹ต ๊ตํ™˜์€ ๋‹จ์ผ ์ŠคํŠธ๋ฆผ์„ ์™„์ „ํžˆ ์†Œ๋น„ํ•ฉ๋‹ˆ๋‹ค. ์š”์ฒญ์€ ์ŠคํŠธ๋ฆผ์„ "open" ์ƒํƒœ๋กœ ๋งŒ๋“œ๋Š” HEADERS ํ”„๋ ˆ์ž„์œผ๋กœ ์‹œ์ž‘ํ•ฉ๋‹ˆ๋‹ค. ์š”์ฒญ์€ END_STREAM ํ”Œ๋ž˜๊ทธ๊ฐ€ ์„ค์ •๋œ ํ”„๋ ˆ์ž„์œผ๋กœ ๋๋‚˜๋ฉฐ, ์ด๋Š” ํด๋ผ์ด์–ธํŠธ์— ๋Œ€ํ•ด ์ŠคํŠธ๋ฆผ์„ "half-closed (local)"๋กœ, ์„œ๋ฒ„์— ๋Œ€ํ•ด "half-closed (remote)"๋กœ ๋งŒ๋“ญ๋‹ˆ๋‹ค. ์‘๋‹ต ์ŠคํŠธ๋ฆผ์€ 0๊ฐœ ์ด์ƒ์˜ ์ค‘๊ฐ„ ์‘๋‹ต(HEADERS ํ”„๋ ˆ์ž„)์œผ๋กœ ์‹œ์ž‘ํ•œ ๋’ค ์ตœ์ข… ์ƒํƒœ ์ฝ”๋“œ๋ฅผ ํฌํ•จํ•˜๋Š” HEADERS ํ”„๋ ˆ์ž„์œผ๋กœ ๋๋‚ฉ๋‹ˆ๋‹ค.

์„œ๋ฒ„๊ฐ€ END_STREAM ํ”Œ๋ž˜๊ทธ๊ฐ€ ์„ค์ •๋œ ํ”„๋ ˆ์ž„์„ ์ „์†กํ•˜๊ฑฐ๋‚˜ ํด๋ผ์ด์–ธํŠธ๊ฐ€ ์ด๋ฅผ ์ˆ˜์‹ ํ•˜๋ฉด ์‘๋‹ต์ด ์™„๋ฃŒ๋ฉ๋‹ˆ๋‹ค(ํ•„์š”ํ•œ CONTINUATION ํ”„๋ ˆ์ž„ ํฌํ•จ). ์„œ๋ฒ„๋Š” ์š”์ฒญ์˜ ์•„์ง ์ „์†ก๋˜์ง€ ์•Š์€ ์ผ๋ถ€์— ์˜์กดํ•˜์ง€ ์•Š๋Š” ๊ฒฝ์šฐ ์ „์ฒด ์‘๋‹ต์„ ํด๋ผ์ด์–ธํŠธ๊ฐ€ ์ „์ฒด ์š”์ฒญ์„ ๋ณด๋‚ด๊ธฐ ์ „์— ์ „์†กํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด ๊ฒฝ์šฐ ์„œ๋ฒ„๋Š” ์™„์ „ํ•œ ์‘๋‹ต์„ ์ „์†กํ•œ ํ›„ ์š”์ฒญ์˜ ์ „์†ก์„ ์˜ค๋ฅ˜ ์—†์ด ์ค‘๋‹จํ•˜๋„๋ก ํด๋ผ์ด์–ธํŠธ์— ์š”์ฒญํ•˜๊ธฐ ์œ„ํ•ด RST_STREAM์„ NO_ERROR ์˜ค๋ฅ˜ ์ฝ”๋“œ๋กœ ๋ณด๋‚ผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ํด๋ผ์ด์–ธํŠธ๋Š” ์ด๋Ÿฌํ•œ RST_STREAM์„ ์ˆ˜์‹ ํ–ˆ๋‹ค๊ณ  ํ•ด์„œ ์‘๋‹ต์„ ํ๊ธฐํ•ด์„œ๋Š” ์•ˆ ๋˜์ง€๋งŒ, ๋‹ค๋ฅธ ์ด์œ ๋กœ ์‘๋‹ต์„ ํ๊ธฐํ•  ์ˆ˜๋Š” ์žˆ์Šต๋‹ˆ๋‹ค.

8.1.1. ์ž˜๋ชป๋œ ํ˜•์‹์˜ ๋ฉ”์‹œ์ง€

์ž˜๋ชป๋œ ์š”์ฒญ ๋˜๋Š” ์‘๋‹ต์ด๋ž€ HTTP/2 ํ”„๋ ˆ์ž„๋“ค์˜ ์œ ํšจํ•œ ์—ฐ์†์ด์ง€๋งŒ ๋ถˆํ•„์š”ํ•œ ํ”„๋ ˆ์ž„, ๊ธˆ์ง€๋œ ํ•„๋“œ ๋˜๋Š” ์˜์‚ฌ-ํ—ค๋” ํ•„๋“œ์˜ ์กด์žฌ, ํ•„์ˆ˜ ์˜์‚ฌ-ํ—ค๋” ํ•„๋“œ์˜ ๋ถ€์žฌ, ๋Œ€๋ฌธ์ž ํ•„๋“œ ์ด๋ฆ„์˜ ํฌํ•จ, ๋˜๋Š” ํŠน์ • ์ƒํ™ฉ์—์„œ ํ—ˆ์šฉ๋˜์ง€ ์•Š๋Š” ํ•„๋“œ ์ด๋ฆ„/๊ฐ’ ๋“ฑ์œผ๋กœ ์ธํ•ด ๋ฌดํšจ๊ฐ€ ๋˜๋Š” ๊ฒฝ์šฐ๋ฅผ ๋งํ•ฉ๋‹ˆ๋‹ค(์ž์„ธํ•œ ๋‚ด์šฉ์€ ์„น์…˜ 8.2 ์ฐธ์กฐ).

๋ฉ”์‹œ์ง€ ๋ณธ๋ฌธ์„ ํฌํ•จํ•˜๋Š” ์š”์ฒญ ๋˜๋Š” ์‘๋‹ต์€ content-length ํ—ค๋” ํ•„๋“œ๋ฅผ ๊ฐ€์งˆ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋งŒ์•ฝ content-length ํ—ค๋”์˜ ๊ฐ’์ด ์‹ค์ œ๋กœ ์ „์†ก๋œ DATA ํ”„๋ ˆ์ž„ ํŽ˜์ด๋กœ๋“œ์˜ ํ•ฉ๊ณ„์™€ ์ผ์น˜ํ•˜์ง€ ์•Š์œผ๋ฉด(๋ฉ”์‹œ์ง€๊ฐ€ ๋ณธ๋ฌธ์ด ์—†๋„๋ก ์ •์˜๋˜์ง€ ์•Š์€ ๊ฒฝ์šฐ) ๊ทธ ์š”์ฒญ ๋˜๋Š” ์‘๋‹ต์€ ์ž˜๋ชป๋œ ํ˜•์‹์ž…๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด 204 ๋˜๋Š” 304 ์‘๋‹ต๊ณผ HEAD ์š”์ฒญ์˜ ์‘๋‹ต์€ ๋ณธ๋ฌธ์„ ํฌํ•จํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ๋ณธ๋ฌธ์ด ์—†๋„๋ก ์ •์˜๋œ ์‘๋‹ต์€ DATA ํ”„๋ ˆ์ž„์— ๋‚ด์šฉ์ด ํฌํ•จ๋˜์ง€ ์•Š๋”๋ผ๋„ ๋น„์˜(้ž้›ถ) content-length ํ—ค๋”๋ฅผ ๊ฐ€์งˆ MAY ์žˆ์Šต๋‹ˆ๋‹ค.

HTTP ์š”์ฒญ ๋˜๋Š” ์‘๋‹ต์„ ์ฒ˜๋ฆฌํ•˜๋Š” ์ค‘๊ฐœ์ž(ํ„ฐ๋„๋กœ ๋™์ž‘ํ•˜์ง€ ์•Š๋Š” ์ค‘๊ฐœ์ž)๋Š” ์ž˜๋ชป๋œ ํ˜•์‹์˜ ์š”์ฒญ์ด๋‚˜ ์‘๋‹ต์„ ์ „๋‹ฌํ•ด์„œ๋Š” MUST NOT ํ•ฉ๋‹ˆ๋‹ค. ๊ฐ์ง€๋œ ์ž˜๋ชป๋œ ์š”์ฒญ ๋˜๋Š” ์‘๋‹ต์€ ์ŠคํŠธ๋ฆผ ์˜ค๋ฅ˜(์„น์…˜ 5.4.2)๋กœ ์ฒ˜๋ฆฌ๋˜์–ด์•ผ ํ•˜๋ฉฐ, ์˜ค๋ฅ˜ ์œ ํ˜•์€ PROTOCOL_ERROR์ž…๋‹ˆ๋‹ค(MUST).

์ž˜๋ชป๋œ ํ˜•์‹์˜ ์š”์ฒญ์— ๋Œ€ํ•ด ์„œ๋ฒ„๋Š” ์ŠคํŠธ๋ฆผ์„ ๋‹ซ๊ฑฐ๋‚˜ ๋ฆฌ์…‹ํ•˜๊ธฐ ์ „์— ์‘๋‹ต์„ ๋ณด๋‚ผ MAY ์žˆ์Šต๋‹ˆ๋‹ค. ํด๋ผ์ด์–ธํŠธ๋Š” ์ž˜๋ชป๋œ ํ˜•์‹์˜ ์‘๋‹ต์„ ์ˆ˜๋ฝํ•ด์„œ๋Š” MUST NOT ํ•ฉ๋‹ˆ๋‹ค.

๋ฉ”์‹œ์ง€๋ฅผ ์ ์ง„์ ์œผ๋กœ ์ฒ˜๋ฆฌํ•˜๋Š” ์—”๋“œํฌ์ธํŠธ๋Š” ์ž˜๋ชป๋œ ํ˜•์‹์œผ๋กœ ์‹๋ณ„ํ•˜๊ธฐ ์ „์— ์ผ๋ถ€ ์ฒ˜๋ฆฌ๋ฅผ ์ˆ˜ํ–‰ํ–ˆ์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด, ์ „์ฒด ์š”์ฒญ์„ ๋ฐ›๊ธฐ ์ „์— ์ •๋ณด ์‘๋‹ต์ด๋‚˜ 404 ์ƒํƒœ ์ฝ”๋“œ๋ฅผ ์ƒ์„ฑํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์œ ์‚ฌํ•˜๊ฒŒ, ์ค‘๊ฐœ์ž๋Š” ์˜ค๋ฅ˜๋ฅผ ๊ฐ์ง€ํ•˜๊ธฐ ์ „์— ๋ถˆ์™„์ „ํ•œ ๋ฉ”์‹œ์ง€๋ฅผ ์ „๋‹ฌํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์„œ๋ฒ„๋Š” ์š”์ฒญ์˜ ๋‚˜๋จธ์ง€ ๋ถ€๋ถ„์ด ์ •ํ™•ํ•  ํ•„์š”๊ฐ€ ์—†๋Š” ๊ฒฝ์šฐ ์ „์ฒด ์š”์ฒญ์„ ์ˆ˜์‹ ํ•˜๊ธฐ ์ „์— ์ตœ์ข… ์‘๋‹ต์„ ์ƒ์„ฑํ•  MAY ์žˆ์Šต๋‹ˆ๋‹ค.

์ด๋Ÿฌํ•œ ์š”๊ตฌ์‚ฌํ•ญ์€ HTTP์— ๋Œ€ํ•œ ๋ช‡ ๊ฐ€์ง€ ์ผ๋ฐ˜์ ์ธ ๊ณต๊ฒฉ์œผ๋กœ๋ถ€ํ„ฐ ๋ณดํ˜ธํ•˜๊ธฐ ์œ„ํ•œ ๊ฒƒ์ด๋ฉฐ, ๊ด€๋Œ€ํ•˜๊ฒŒ ์ฒ˜๋ฆฌํ•˜๋ฉด ์ทจ์•ฝ์ ์„ ๋…ธ์ถœํ•  ์ˆ˜ ์žˆ์œผ๋ฏ€๋กœ ์—„๊ฒฉํ•˜๊ฒŒ ๊ทœ์ •๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค.

8.2. HTTP ํ•„๋“œ

HTTP ํ•„๋“œ(RFC 9110 ์„น์…˜ 5)๋Š” HEADERS, CONTINUATION, PUSH_PROMISE ํ”„๋ ˆ์ž„์—์„œ HPACK(HPACK)์œผ๋กœ ์••์ถ•๋˜์–ด ์ „์†ก๋ฉ๋‹ˆ๋‹ค.

ํ•„๋“œ ์ด๋ฆ„์€ HTTP/2 ๋ฉ”์‹œ์ง€๋ฅผ ๊ตฌ์„ฑํ•  ๋•Œ ์†Œ๋ฌธ์ž๋กœ ๋ณ€ํ™˜๋˜์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค(MUST).

8.2.1. ํ•„๋“œ ์œ ํšจ์„ฑ

HPACK์ด ์ „๋‹ฌํ•  ์ˆ˜ ์žˆ๋Š” ๋ฌธ์ž๋ฅผ HTTP์˜ ํ•„๋“œ ์ด๋ฆ„๊ณผ ๊ฐ’ ์ •์˜๊ฐ€ ๊ธˆ์ง€ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. HTTP/2 ๊ตฌํ˜„์ฒด๋Š” RFC 9110์˜ ํ•ด๋‹น ์„น์…˜(5.1 ๋ฐ 5.5)์— ๋”ฐ๋ผ ํ•„๋“œ ์ด๋ฆ„๊ณผ ๊ฐ’์„ ๊ฒ€์ฆํ•˜๋Š” ๊ฒƒ์ด ๊ถŒ์žฅ๋ฉ๋‹ˆ๋‹ค. ๊ธˆ์ง€๋œ ๋ฌธ์ž๊ฐ€ ํฌํ•จ๋œ ๋ฉ”์‹œ์ง€๋Š” ์ž˜๋ชป๋œ ํ˜•์‹์œผ๋กœ ์ฒ˜๋ฆฌ๋˜์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค(์„น์…˜ 8.1.1).

ํ•„๋“œ๋ฅผ ๊ฒ€์ฆํ•˜์ง€ ์•Š์œผ๋ฉด ์š”์ฒญ ์Šค๋จธ๊ธ€๋ง(request smuggling) ๊ณต๊ฒฉ์— ์•…์šฉ๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ํŠนํžˆ, ๊ฒ€์ฆ๋˜์ง€ ์•Š์€ ํ•„๋“œ๋Š” HTTP/1.1๋กœ ์ „๋‹ฌ๋  ๋•Œ ๊ตฌ๋ถ„์ž(CR, LF, COLON ๋“ฑ)๋ฅผ ์•…์šฉํ•˜๋Š” ๊ณต๊ฒฉ์„ ๊ฐ€๋Šฅํ•˜๊ฒŒ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๊ตฌํ˜„์ฒด๋Š” ์ตœ์†Œํ•œ ๋‹ค์Œ๊ณผ ๊ฐ™์€ ํ•„๋“œ ์ด๋ฆ„ ๋ฐ ๊ฐ’์— ๋Œ€ํ•œ ๊ฒ€์ฆ์„ ์ˆ˜ํ–‰ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค:

  • ํ•„๋“œ ์ด๋ฆ„์€ 0x00-0x20, 0x41-0x5a, ๋˜๋Š” 0x7f-0xff ๋ฒ”์œ„์˜ ๋ฌธ์ž๋ฅผ ํฌํ•จํ•ด์„œ๋Š” MUST NOT ํ•ฉ๋‹ˆ๋‹ค(๋ชจ๋“  ๋ฒ”์œ„ ํฌํ•จ). ์ด๋Š” ๋ชจ๋“  ๋น„๊ฐ€์‹œ ASCII ๋ฌธ์ž, ASCII ๊ณต๋ฐฑ(SP, 0x20), ๋ฐ ๋Œ€๋ฌธ์ž('A'~'Z', 0x41~0x5a)๋ฅผ ์ œ์™ธํ•ฉ๋‹ˆ๋‹ค.
  • ์˜์‚ฌ-ํ—ค๋” ํ•„๋“œ(์„น์…˜ 8.3)๋ฅผ ์ œ์™ธํ•˜๊ณ , ํ•„๋“œ ์ด๋ฆ„์— ์ฝœ๋ก (ASCII COLON, 0x3a)์„ ํฌํ•จํ•ด์„œ๋Š” MUST NOT ํ•ฉ๋‹ˆ๋‹ค.
  • ํ•„๋“œ ๊ฐ’์€ ์–ด๋–ค ์œ„์น˜์—๋„ ๋„ ๋ฌธ์ž(ASCII NUL, 0x00), ๋ผ์ธ ํ”ผ๋“œ(ASCII LF, 0x0a), ๋˜๋Š” ์บ๋ฆฌ์ง€ ๋ฆฌํ„ด(ASCII CR, 0x0d)์„ ํฌํ•จํ•ด์„œ๋Š” MUST NOT ํ•ฉ๋‹ˆ๋‹ค.
  • ํ•„๋“œ ๊ฐ’์€ ASCII ๊ณต๋ฐฑ ๋ฌธ์ž(ASCII SP ๋˜๋Š” HTAB, 0x20 ๋˜๋Š” 0x09)๋กœ ์‹œ์ž‘ํ•˜๊ฑฐ๋‚˜ ๋๋‚˜์„œ๋Š” MUST NOT ํ•ฉ๋‹ˆ๋‹ค.

์œ„ ์กฐ๊ฑด์„ ์œ„๋ฐ˜ํ•˜๋Š” ํ•„๋“œ๋ฅผ ํฌํ•จํ•˜๋Š” ์š”์ฒญ ๋˜๋Š” ์‘๋‹ต์€ ์ž˜๋ชป๋œ ํ˜•์‹์œผ๋กœ ๊ฐ„์ฃผ๋˜์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค(์„น์…˜ 8.1.1). ํŠนํžˆ, ํ•„๋“œ๋ฅผ ์ฒ˜๋ฆฌํ•˜์ง€ ์•Š๋Š” ์ค‘๊ฐœ์ž๋Š” ์œ„์—์„œ ๊ธˆ์ง€๋œ ๊ฐ’์„ ํฌํ•จํ•˜๋Š” ํ•„๋“œ๋ฅผ ์ „๋‹ฌํ•ด์„œ๋Š” MUST NOT ํ•ฉ๋‹ˆ๋‹ค.

์š”์ฒญ ๋ฉ”์‹œ์ง€๊ฐ€ ์ด๋Ÿฌํ•œ ์š”๊ตฌ์‚ฌํ•ญ์„ ์œ„๋ฐ˜ํ•  ๊ฒฝ์šฐ ๊ตฌํ˜„์ฒด๋Š” ์ ์ ˆํ•œ ๊ฒฝ์šฐ 400(Bad Request) ์ƒํƒœ ์ฝ”๋“œ๋ฅผ ์ƒ์„ฑํ•˜๋Š” ๊ฒƒ์ด ๊ถŒ์žฅ๋ฉ๋‹ˆ๋‹ค(RFC 9110 ์„น์…˜ 15.5.1 ์ฐธ์กฐ), ๋‹จ ๋” ์ ์ ˆํ•œ ์ƒํƒœ ์ฝ”๋“œ๊ฐ€ ์ •์˜๋˜์–ด ์žˆ๊ฑฐ๋‚˜ ์ƒํƒœ ์ฝ”๋“œ๋ฅผ ๋ณด๋‚ผ ์ˆ˜ ์—†๋Š” ๊ฒฝ์šฐ(์˜ˆ: ์˜ค๋ฅ˜๊ฐ€ ํŠธ๋ ˆ์ผ๋Ÿฌ ํ•„๋“œ์—์„œ ๋ฐœ์ƒํ•œ ๊ฒฝ์šฐ)์—๋Š” ์˜ˆ์™ธ์ž…๋‹ˆ๋‹ค.

8.2.2. ์—ฐ๊ฒฐ-ํŠน์ • ํ—ค๋” ํ•„๋“œ

HTTP/2๋Š” ์—ฐ๊ฒฐ-ํŠน์ • ํ—ค๋” ํ•„๋“œ๋ฅผ ๋‚˜ํƒ€๋‚ด๊ธฐ ์œ„ํ•ด Connection ํ—ค๋” ํ•„๋“œ๋ฅผ ์‚ฌ์šฉํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค(RFC 9110 ์„น์…˜ 7.6.1 ์ฐธ์กฐ). ์ด ํ”„๋กœํ† ์ฝœ์—์„œ๋Š” ์—ฐ๊ฒฐ-ํŠน์ • ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ๊ฐ€ ๋‹ค๋ฅธ ์ˆ˜๋‹จ์œผ๋กœ ์ „๋‹ฌ๋ฉ๋‹ˆ๋‹ค. ์—”๋“œํฌ์ธํŠธ๋Š” ์—ฐ๊ฒฐ-ํŠน์ • ํ—ค๋” ํ•„๋“œ๋ฅผ ํฌํ•จํ•˜๋Š” HTTP/2 ๋ฉ”์‹œ์ง€๋ฅผ ์ƒ์„ฑํ•ด์„œ๋Š” MUST NOT ํ•ฉ๋‹ˆ๋‹ค. ์—ฌ๊ธฐ์—๋Š” Connection ํ—ค๋” ํ•„๋“œ์™€ RFC 9110 ์„น์…˜ 7.6.1์— ๋‚˜์—ด๋œ ์—ฐ๊ฒฐ-ํŠน์ • ์˜๋ฏธ๋ฅผ ๊ฐ€์ง„ ํ•„๋“œ๋“ค(์˜ˆ: Proxy-Connection, Keep-Alive, Transfer-Encoding, Upgrade)์ด ํฌํ•จ๋ฉ๋‹ˆ๋‹ค. ์—ฐ๊ฒฐ-ํŠน์ • ํ—ค๋” ํ•„๋“œ๋ฅผ ํฌํ•จํ•˜๋Š” ๋ชจ๋“  ๋ฉ”์‹œ์ง€๋Š” ์ž˜๋ชป๋œ ํ˜•์‹์œผ๋กœ ์ฒ˜๋ฆฌ๋˜์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค(์„น์…˜ 8.1.1).

์˜ˆ์™ธ๋Š” TE ํ—ค๋” ํ•„๋“œ๋ฟ์ด๋ฉฐ, ์ด๋Š” HTTP/2 ์š”์ฒญ์— ํฌํ•จ๋  ์ˆ˜ MAY ์žˆ๊ณ  ํฌํ•จ๋˜๋Š” ๊ฒฝ์šฐ "trailers" ์ด์™ธ์˜ ๊ฐ’์„ ํฌํ•จํ•ด์„œ๋Š” MUST NOT ํ•ฉ๋‹ˆ๋‹ค.

HTTP/1.x ๋ฉ”์‹œ์ง€๋ฅผ HTTP/2๋กœ ๋ณ€ํ™˜ํ•˜๋Š” ์ค‘๊ฐœ์ž๋Š” ์—ฐ๊ฒฐ-ํŠน์ • ํ—ค๋” ํ•„๋“œ๋ฅผ ์ œ๊ฑฐํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค(RFC 9110 ์„น์…˜ 7.6.1 ์ฐธ์กฐ), ๊ทธ๋ ‡์ง€ ์•Š์œผ๋ฉด ํ•ด๋‹น ๋ฉ”์‹œ์ง€๋Š” ๋‹ค๋ฅธ HTTP/2 ์—”๋“œํฌ์ธํŠธ์—์„œ ์ž˜๋ชป๋œ ํ˜•์‹์œผ๋กœ ์ฒ˜๋ฆฌ๋  ๊ฒƒ์ž…๋‹ˆ๋‹ค(์„น์…˜ 8.1.1).

8.2.3. Cookie ํ—ค๋” ํ•„๋“œ์˜ ์••์ถ•

Cookie header field๋Š” ์„ธ๋ฏธ์ฝœ๋ก (" ; ")์œผ๋กœ ์ฟ ํ‚ค-ํŽ˜์–ด(๋˜๋Š” "crumbs")๋ฅผ ๊ตฌ๋ถ„ํ•ฉ๋‹ˆ๋‹ค. ์ด ํ—ค๋” ํ•„๋“œ๋Š” ์—ฌ๋Ÿฌ ๊ฐ’์„ ํฌํ•จํ•˜์ง€๋งŒ COMMA(",")๋ฅผ ๊ตฌ๋ถ„์ž๋กœ ์‚ฌ์šฉํ•˜์ง€ ์•Š์œผ๋ฏ€๋กœ ์ฟ ํ‚ค-ํŽ˜์–ด๋“ค์ด ์—ฌ๋Ÿฌ ํ•„๋“œ ๋ผ์ธ์œผ๋กœ ๋ถ„ํ• ๋˜์–ด ์ „์†ก๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ์ด๋กœ ์ธํ•ด ๊ฐœ๋ณ„ ์ฟ ํ‚ค-ํŽ˜์–ด์˜ ์—…๋ฐ์ดํŠธ๊ฐ€ HPACK ํ…Œ์ด๋ธ”์— ์ €์žฅ๋œ ํ•„๋“œ ๋ผ์ธ์„ ๋ฌดํšจํ™”ํ•˜์—ฌ ์••์ถ• ํšจ์œจ์ด ํฌ๊ฒŒ ๊ฐ์†Œํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์••์ถ• ํšจ์œจ์„ ๊ฐœ์„ ํ•˜๊ธฐ ์œ„ํ•ด Cookie ํ—ค๋” ํ•„๋“œ๋Š” 1๊ฐœ ์ด์ƒ์˜ ์ฟ ํ‚ค-ํŽ˜์–ด๋ฅผ ํฌํ•จํ•˜๋Š” ๋ณ„๋„์˜ ํ—ค๋” ํ•„๋“œ๋“ค๋กœ ๋ถ„ํ• ๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค(MAY). ๋งŒ์•ฝ ๋ณต์› ํ›„์— ์—ฌ๋Ÿฌ ๊ฐœ์˜ Cookie ํ—ค๋” ํ•„๋“œ๊ฐ€ ์กด์žฌํ•˜๋ฉด, ์ด๋ฅผ HTTP/1.1 ์—ฐ๊ฒฐ๊ณผ ๊ฐ™์€ ๋น„-HTTP/2 ์ปจํ…์ŠคํŠธ๋กœ ์ „๋‹ฌํ•˜๊ธฐ ์ „์— 0x3b, 0x20(ASCII ๋ฌธ์ž์—ด "; ")์˜ ๋‘ ์˜ฅํ…Ÿ ๊ตฌ๋ถ„์ž๋กœ ๋‹จ์ผ ์˜ฅํ…Ÿ ๋ฌธ์ž์—ด๋กœ ์—ฐ๊ฒฐํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค(MUST).

๋”ฐ๋ผ์„œ ๋‹ค์Œ ๋‘ ๊ฐ€์ง€ Cookie ํ—ค๋” ๋ชฉ๋ก์€ ์˜๋ฏธ์ƒ ๋™๋“ฑํ•ฉ๋‹ˆ๋‹ค.

cookie: a=b; c=d; e=f

cookie: a=b
cookie: c=d
cookie: e=f

8.3. ์˜์‚ฌ-ํ—ค๋” ํ•„๋“œ(HTTP ์ œ์–ด ๋ฐ์ดํ„ฐ)

HTTP/2๋Š” ๋ฉ”์‹œ์ง€ ์ œ์–ด ๋ฐ์ดํ„ฐ๋ฅผ ์ „๋‹ฌํ•˜๊ธฐ ์œ„ํ•ด ':' ๋ฌธ์ž(ASCII 0x3a)๋กœ ์‹œ์ž‘ํ•˜๋Š” ํŠน์ˆ˜ํ•œ ์˜์‚ฌ-ํ—ค๋” ํ•„๋“œ๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค(์ž์„ธํ•œ ๋‚ด์šฉ์€ RFC 9110 ์„น์…˜ 6.2 ์ฐธ์กฐ).

์˜์‚ฌ-ํ—ค๋” ํ•„๋“œ๋Š” HTTP ํ—ค๋” ํ•„๋“œ๊ฐ€ ์•„๋‹™๋‹ˆ๋‹ค. ์—”๋“œํฌ์ธํŠธ๋Š” ์ด ๋ฌธ์„œ์— ์ •์˜๋œ ๊ฒƒ ์ด์™ธ์˜ ์˜์‚ฌ-ํ—ค๋” ํ•„๋“œ๋ฅผ ์ƒ์„ฑํ•ด์„œ๋Š” MUST NOT ํ•ฉ๋‹ˆ๋‹ค. ํ™•์žฅ์ด ์ถ”๊ฐ€ ์˜์‚ฌ-ํ—ค๋” ํ•„๋“œ ์‚ฌ์šฉ์„ ํ˜‘์ƒํ•  ์ˆ˜ ์žˆ๋‹ค๋Š” ์ ์— ์œ ์˜ํ•˜์„ธ์š”(์„น์…˜ 5.5).

์˜์‚ฌ-ํ—ค๋” ํ•„๋“œ๋Š” ์ •์˜๋œ ๋ฌธ๋งฅ์—์„œ๋งŒ ์œ ํšจํ•ฉ๋‹ˆ๋‹ค. ์š”์ฒญ์— ๋Œ€ํ•ด ์ •์˜๋œ ์˜์‚ฌ-ํ—ค๋”๋Š” ์‘๋‹ต์— ๋‚˜ํƒ€๋‚˜์„œ๋Š” MUST NOT ํ•˜๋ฉฐ, ์‘๋‹ต์— ๋Œ€ํ•ด ์ •์˜๋œ ์˜์‚ฌ-ํ—ค๋”๋Š” ์š”์ฒญ์— ๋‚˜ํƒ€๋‚˜์„œ๋Š” MUST NOT ํ•ฉ๋‹ˆ๋‹ค. ์˜์‚ฌ-ํ—ค๋”๋Š” ํŠธ๋ ˆ์ผ๋Ÿฌ ์„น์…˜์— ๋‚˜ํƒ€๋‚˜์„œ๋Š” MUST NOT ํ•ฉ๋‹ˆ๋‹ค. ์ •์˜๋˜์ง€ ์•Š์•˜๊ฑฐ๋‚˜ ์œ ํšจํ•˜์ง€ ์•Š์€ ์˜์‚ฌ-ํ—ค๋” ํ•„๋“œ๋ฅผ ํฌํ•จํ•˜๋Š” ์š”์ฒญ ๋˜๋Š” ์‘๋‹ต์€ ์ž˜๋ชป๋œ ํ˜•์‹์œผ๋กœ ์ฒ˜๋ฆฌ๋˜์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค(์„น์…˜ 8.1.1).

๋ชจ๋“  ์˜์‚ฌ-ํ—ค๋” ํ•„๋“œ๋Š” ์ผ๋ฐ˜ ํ•„๋“œ ๋ผ์ธ๋ณด๋‹ค ๋จผ์ € ํ•„๋“œ ๋ธ”๋ก์— ๋‚˜ํƒ€๋‚˜์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์ผ๋ฐ˜ ํ•„๋“œ ๋ผ์ธ ์ดํ›„์— ์˜์‚ฌ-ํ—ค๋”๊ฐ€ ๋‚˜ํƒ€๋‚˜๋Š” ์š”์ฒญ ๋˜๋Š” ์‘๋‹ต์€ ์ž˜๋ชป๋œ ํ˜•์‹์œผ๋กœ ๊ฐ„์ฃผ๋˜์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค(์„น์…˜ 8.1.1).

๋™์ผํ•œ ์˜์‚ฌ-ํ—ค๋” ํ•„๋“œ ์ด๋ฆ„์ด ํ•˜๋‚˜์˜ ํ•„๋“œ ๋ธ”๋ก์— ๋‘ ๋ฒˆ ์ด์ƒ ๋‚˜ํƒ€๋‚˜์„œ๋Š” MUST NOT ํ•ฉ๋‹ˆ๋‹ค. ์š”์ฒญ ๋˜๋Š” ์‘๋‹ต์˜ ํ•„๋“œ ๋ธ”๋ก์— ์ค‘๋ณต๋œ ์˜์‚ฌ-ํ—ค๋” ํ•„๋“œ ์ด๋ฆ„์ด ํฌํ•จ๋˜๋ฉด ํ•ด๋‹น ๋ฉ”์‹œ์ง€๋Š” ์ž˜๋ชป๋œ ํ˜•์‹์œผ๋กœ ์ฒ˜๋ฆฌ๋˜์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค(์„น์…˜ 8.1.1).

8.3.1. ์š”์ฒญ ์˜์‚ฌ-ํ—ค๋” ํ•„๋“œ

HTTP/2 ์š”์ฒญ์— ๋Œ€ํ•ด ๋‹ค์Œ์˜ ์˜์‚ฌ-ํ—ค๋” ํ•„๋“œ๋“ค์ด ์ •์˜๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค:

  • ":method" ์˜์‚ฌ-ํ—ค๋” ํ•„๋“œ๋Š” HTTP ๋ฉ”์„œ๋“œ๋ฅผ ํฌํ•จํ•ฉ๋‹ˆ๋‹ค(RFC 9110 ์„น์…˜ 9 ์ฐธ์กฐ).

  • ":scheme" ์˜์‚ฌ-ํ—ค๋” ํ•„๋“œ๋Š” ์š”์ฒญ ๋Œ€์ƒ์˜ ์Šคํ‚ด ๋ถ€๋ถ„์„ ํฌํ•จํ•ฉ๋‹ˆ๋‹ค. ์Šคํ‚ด์€ ์š”์ฒญ์„ ์ง์ ‘ ์ƒ์„ฑํ•  ๋•Œ ๋Œ€์ƒ URI์—์„œ ๊ฐ€์ ธ์˜ค๊ฑฐ๋‚˜(์˜ˆ: RFC 3986 ์„น์…˜ 3.1) ๋ณ€ํ™˜๋œ ์š”์ฒญ์˜ ์Šคํ‚ด์—์„œ ๊ฐ€์ ธ์˜ต๋‹ˆ๋‹ค. CONNECT ์š”์ฒญ์˜ ๊ฒฝ์šฐ ":scheme"๋Š” ์ƒ๋žต๋ฉ๋‹ˆ๋‹ค(์„น์…˜ 8.5).

    ":scheme"์€ "http" ๋ฐ "https"์—๋งŒ ๊ตญํ•œ๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ํ”„๋ก์‹œ๋‚˜ ๊ฒŒ์ดํŠธ์›จ์ด๋Š” ๋น„-HTTP ์Šคํ‚ด์— ๋Œ€ํ•œ ์š”์ฒญ์„ ๋ณ€ํ™˜ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

  • ":authority" ์˜์‚ฌ-ํ—ค๋” ํ•„๋“œ๋Š” ๋Œ€์ƒ URI์˜ ๊ถŒํ•œ(authority) ๋ถ€๋ถ„์„ ์ „ํ•ฉ๋‹ˆ๋‹ค. HTTP/2 ์š”์ฒญ์˜ ์ˆ˜์‹ ์ž๋Š” ":authority"๊ฐ€ ์กด์žฌํ•˜๋Š” ๊ฒฝ์šฐ Host ํ—ค๋” ํ•„๋“œ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋Œ€์ƒ URI๋ฅผ ๊ฒฐ์ •ํ•ด์„œ๋Š” MUST NOT ํ•ฉ๋‹ˆ๋‹ค.

    ์ง์ ‘ HTTP/2 ์š”์ฒญ์„ ์ƒ์„ฑํ•˜๋Š” ํด๋ผ์ด์–ธํŠธ๋Š” ๊ถŒํ•œ ์ •๋ณด๋ฅผ ์ „๋‹ฌํ•˜๊ธฐ ์œ„ํ•ด ":authority"๋ฅผ ์‚ฌ์šฉํ•ด์•ผ ํ•˜๋ฉฐ(๊ถŒํ•œ ์ •๋ณด๊ฐ€ ์—†๋Š” ๊ฒฝ์šฐ์—๋Š” ์ƒ์„ฑํ•ด์„œ๋Š” ์•ˆ ๋ฉ๋‹ˆ๋‹ค).

    ํด๋ผ์ด์–ธํŠธ๋Š” ":authority"์™€ ๋‹ค๋ฅธ ๊ฐ’์„ ๊ฐ€์ง„ Host ํ•„๋“œ๋ฅผ ์ƒ์„ฑํ•ด์„œ๋Š” MUST NOT ํ•ฉ๋‹ˆ๋‹ค. ์„œ๋ฒ„๋Š” ":authority"์™€ ๋‹ค๋ฅธ Host ํ•„๋“œ๋ฅผ ํฌํ•จํ•œ ์š”์ฒญ์„ ์ž˜๋ชป๋œ ํ˜•์‹์œผ๋กœ ์ฒ˜๋ฆฌํ•˜๋Š” ๊ฒƒ์ด ๊ถŒ์žฅ๋ฉ๋‹ˆ๋‹ค. ๋น„๊ต๋ฅผ ์œ„ํ•ด ๊ฐ’๋“ค์€ ์ •๊ทœํ™”๋˜์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค(์ •๊ทœํ™” ๋ฐฉ๋ฒ• ์ฐธ์กฐ: RFC 3986 ์„น์…˜ 6.2).

    HTTP/2๋กœ ์š”์ฒญ์„ ์ „๋‹ฌํ•˜๋Š” ์ค‘๊ฐœ์ž๋Š” ์›๋ž˜ ์š”์ฒญ์˜ ์ œ์–ด ๋ฐ์ดํ„ฐ์—์„œ ๊ถŒํ•œ ์ •๋ณด๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ":authority"๋ฅผ ๊ตฌ์„ฑํ•ด์•ผ ํ•˜๋ฉฐ(์›๋ž˜ ์š”์ฒญ์— ๊ถŒํ•œ ์ •๋ณด๊ฐ€ ์—†๋Š” ๊ฒฝ์šฐ์—๋Š” ":authority"๋ฅผ ์ƒ์„ฑํ•ด์„œ๋Š” ์•ˆ ๋ฉ๋‹ˆ๋‹ค).

    ์ค‘๊ฐœ์ž๊ฐ€ HTTP/1.1 ์š”์ฒญ์„ ๊ตฌ์„ฑํ•˜๊ธฐ ์œ„ํ•ด Host ํ—ค๋” ํ•„๋“œ๋ฅผ ์ƒ์„ฑํ•ด์•ผ ํ•˜๋Š” ๊ฒฝ์šฐ, ์ค‘๊ฐœ์ž๋Š” ":authority"์˜ ๊ฐ’์„ Host ํ•„๋“œ ๊ฐ’์œผ๋กœ ์‚ฌ์šฉํ•ด์•ผ ํ•˜๋ฉฐ(์š”์ฒญ ๋Œ€์ƒ์ด ๋ณ€๊ฒฝ๋˜์ง€ ์•Š๋Š” ํ•œ) ๊ธฐ์กด Host ํ•„๋“œ๋ฅผ ๋Œ€์ฒดํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

    ์ค‘๊ฐœ์ž๋Š” HTTP/2๋กœ ์š”์ฒญ์„ ์ „๋‹ฌํ•˜๋ฉด์„œ ๊ธฐ์กด Host ํ—ค๋” ํ•„๋“œ๋ฅผ ์œ ์ง€ํ•  ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค(MAY).

    CONNECT ๋˜๋Š” ๋ณ„ํ‘œ(asterisk) ํ˜•ํƒœ์˜ OPTIONS ์š”์ฒญ์˜ ์š”์ฒญ ๋Œ€์ƒ์—๋Š” ๊ถŒํ•œ ์ •๋ณด๊ฐ€ ํฌํ•จ๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

    ":authority"๋Š” "http" ๋˜๋Š” "https" ์Šคํ‚ด์— ๋Œ€ํ•ด ๋” ์ด์ƒ ๊ถŒ์žฅ๋˜์ง€ ์•Š๋Š” userinfo ํ•˜์œ„ ๊ตฌ์„ฑ์š”์†Œ๋ฅผ ํฌํ•จํ•ด์„œ๋Š” MUST NOT ํ•ฉ๋‹ˆ๋‹ค.

  • ":path" ์˜์‚ฌ-ํ—ค๋” ํ•„๋“œ๋Š” ๋Œ€์ƒ URI์˜ ๊ฒฝ๋กœ ๋ฐ ์ฟผ๋ฆฌ ๋ถ€๋ถ„์„ ํฌํ•จํ•ฉ๋‹ˆ๋‹ค(absolute-path ๋ฐ ์„ ํƒ์  '?'์™€ query). asterisk ํ˜•ํƒœ์˜ OPTIONS ์š”์ฒญ์€ ":path"์— '*' ๊ฐ’์„ ํฌํ•จํ•ฉ๋‹ˆ๋‹ค.

    ์ด ์˜์‚ฌ-ํ—ค๋”๋Š” "http" ๋˜๋Š” "https" URI์— ๋Œ€ํ•ด ๋น„์–ด ์žˆ์–ด์„œ๋Š” MUST NOT ํ•˜๋ฉฐ, ๊ฒฝ๋กœ ๊ตฌ์„ฑ์š”์†Œ๊ฐ€ ์—†๋Š” ๊ฒฝ์šฐ์—๋Š” '/'๋ฅผ ํฌํ•จํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์˜ˆ์™ธ๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค:

    • ๊ฒฝ๋กœ ๊ตฌ์„ฑ์š”์†Œ๊ฐ€ ์—†๋Š” "http" ๋˜๋Š” "https" URI์— ๋Œ€ํ•œ OPTIONS ์š”์ฒญ์€ ":path"์— '*' ๊ฐ’์„ ํฌํ•จํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.
    • CONNECT ์š”์ฒญ์˜ ๊ฒฝ์šฐ ":path" ์˜์‚ฌ-ํ—ค๋”๋Š” ์ƒ๋žต๋˜์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

๋ชจ๋“  HTTP/2 ์š”์ฒญ์€ ":method", ":scheme", ๋ฐ ":path" ์˜์‚ฌ-ํ—ค๋” ํ•„๋“œ๋ฅผ ์ •ํ™•ํžˆ ํ•˜๋‚˜์”ฉ ํฌํ•จํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค(๋‹จ CONNECT ์š”์ฒญ์€ ์˜ˆ์™ธ). ์ด๋Ÿฌํ•œ ํ•„๋“œ๋ฅผ ์ƒ๋žตํ•œ ์š”์ฒญ์€ ์ž˜๋ชป๋œ ํ˜•์‹์ž…๋‹ˆ๋‹ค(์„น์…˜ 8.1.1).

๊ฐœ๋ณ„ HTTP/2 ์š”์ฒญ์€ ๋ช…์‹œ์ ์ธ ํ”„๋กœํ† ์ฝœ ๋ฒ„์ „ ํ‘œ์‹œ๋ฅผ ํฌํ•จํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ๋ชจ๋“  HTTP/2 ์š”์ฒญ์€ ์•”๋ฌต์ ์œผ๋กœ ํ”„๋กœํ† ์ฝœ ๋ฒ„์ „ "2.0"์„ ๊ฐ–์Šต๋‹ˆ๋‹ค.

8.3.2. ์‘๋‹ต ์˜์‚ฌ-ํ—ค๋” ํ•„๋“œ

HTTP/2 ์‘๋‹ต์— ๋Œ€ํ•ด์„œ๋Š” ํ•˜๋‚˜์˜ ":status" ์˜์‚ฌ-ํ—ค๋” ํ•„๋“œ๊ฐ€ ์ •์˜๋˜์–ด ์žˆ์œผ๋ฉฐ, ์ด๋Š” HTTP ์ƒํƒœ ์ฝ”๋“œ ํ•„๋“œ๋ฅผ ๋‹ด์Šต๋‹ˆ๋‹ค. ์ด ์˜์‚ฌ-ํ—ค๋”๋Š” ์ค‘๊ฐ„ ์‘๋‹ต์„ ํฌํ•จํ•œ ๋ชจ๋“  ์‘๋‹ต์— ํฌํ•จ๋˜์–ด์•ผ ํ•˜๋ฉฐ, ๊ทธ๋ ‡์ง€ ์•Š์œผ๋ฉด ์‘๋‹ต์€ ์ž˜๋ชป๋œ ํ˜•์‹์ž…๋‹ˆ๋‹ค(์„น์…˜ 8.1.1).

HTTP/2 ์‘๋‹ต์€ ์•”๋ฌต์ ์œผ๋กœ ํ”„๋กœํ† ์ฝœ ๋ฒ„์ „ "2.0"์„ ๊ฐ€์ง‘๋‹ˆ๋‹ค.

8.4. ์„œ๋ฒ„ ํ‘ธ์‹œ

HTTP/2๋Š” ์„œ๋ฒ„๊ฐ€ ์ด์ „์˜ ํด๋ผ์ด์–ธํŠธ-์‹œ์ž‘ ์š”์ฒญ๊ณผ ๊ด€๋ จํ•˜์—ฌ ํด๋ผ์ด์–ธํŠธ์— ๋Œ€ํ•ด ์‘๋‹ต(๋ฐ ํ•ด๋‹น "์•ฝ์†๋œ" ์š”์ฒญ)์„ ์‚ฌ์ „ ์ „์†ก(๋˜๋Š” "ํ‘ธ์‹œ")ํ•  ์ˆ˜ ์žˆ๋„๋ก ํ—ˆ์šฉํ•ฉ๋‹ˆ๋‹ค.

์„œ๋ฒ„ ํ‘ธ์‹œ๋Š” ์„œ๋ฒ„๊ฐ€ ์ˆ˜์‹ ํ•œ ์š”์ฒญ ์ดํ›„์— ๋”ฐ๋ผ์˜ฌ ์š”์ฒญ์„ ์˜ˆ์ธกํ•˜์—ฌ ํด๋ผ์ด์–ธํŠธ๊ฐ€ ๋А๋ผ๋Š” ์„ฑ๋Šฅ์„ ๊ฐœ์„ ํ•˜๋„๋ก ์„ค๊ณ„๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด HTML ์š”์ฒญ์€ ์ข…์ข… ํ•ด๋‹น ํŽ˜์ด์ง€์— ์ฐธ์กฐ๋œ ์Šคํƒ€์ผ์‹œํŠธ๋‚˜ ์Šคํฌ๋ฆฝํŠธ ์š”์ฒญ์„ ๋™๋ฐ˜ํ•ฉ๋‹ˆ๋‹ค. ์ด๋Ÿฌํ•œ ์š”์ฒญ๋“ค์„ ํ‘ธ์‹œํ•˜๋ฉด ํด๋ผ์ด์–ธํŠธ๋Š” HTML์—์„œ ์ฐธ์กฐ๋ฅผ ๋ฐ›์„ ๋•Œ๊นŒ์ง€ ๊ธฐ๋‹ค๋ฆด ํ•„์š”๊ฐ€ ์—†์–ด ๊ฐœ๋ณ„ ์š”์ฒญ์— ๋Œ€ํ•œ ์™•๋ณต ์‹œ๊ฐ„์„ ์ œ๊ฑฐํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์‹ค๋ฌด์—์„œ๋Š” ์„œ๋ฒ„๊ฐ€ ํด๋ผ์ด์–ธํŠธ์˜ ์บ์‹ฑ ์ƒํƒœ, ์ฝ˜ํ…์ธ  ํ˜‘์ƒ ๋ฐ ์‚ฌ์šฉ์ž ๋™์ž‘๊ณผ ๊ฐ™์€ ์š”์†Œ๋ฅผ ๊ณ ๋ คํ•˜์—ฌ ํด๋ผ์ด์–ธํŠธ๊ฐ€ ์ถ”๊ฐ€๋กœ ์š”์ฒญํ•  ์ •ํ™•ํ•œ ํ•ญ๋ชฉ์„ ์˜ˆ์ธกํ•ด์•ผ ํ•˜๋ฏ€๋กœ ์„œ๋ฒ„ ํ‘ธ์‹œ๋Š” ํšจ๊ณผ์ ์œผ๋กœ ์‚ฌ์šฉํ•˜๊ธฐ ์–ด๋ ต์Šต๋‹ˆ๋‹ค. ์˜ˆ์ธก ์‹คํŒจ๋Š” ์ถ”๊ฐ€ ๋ฐ์ดํ„ฐ ์ „์†ก์œผ๋กœ ์ธํ•œ ๊ธฐํšŒ๋น„์šฉ ๋•Œ๋ฌธ์— ์„ฑ๋Šฅ ์ €ํ•˜๋กœ ์ด์–ด์งˆ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ํŠนํžˆ ์ƒ๋‹นํ•œ ์–‘์˜ ๋ฐ์ดํ„ฐ๋ฅผ ํ‘ธ์‹œํ•˜๋ฉด ๋” ์ค‘์š”ํ•œ ์‘๋‹ต๋“ค๊ณผ ์ž์› ๊ฒฝ์Ÿ์„ ์ดˆ๋ž˜ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

ํด๋ผ์ด์–ธํŠธ๋Š” ์„œ๋ฒ„ ํ‘ธ์‹œ๋ฅผ ๋น„ํ™œ์„ฑํ™”ํ•˜๋„๋ก ์š”์ฒญํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ, ์ด๋Š” ํ™‰(hop)๋งˆ๋‹ค ๋…๋ฆฝ์ ์œผ๋กœ ํ˜‘์ƒ๋ฉ๋‹ˆ๋‹ค. SETTINGS_ENABLE_PUSH ์„ค์ •์„ 0์œผ๋กœ ์„ค์ •ํ•˜๋ฉด ์„œ๋ฒ„ ํ‘ธ์‹œ๊ฐ€ ๋น„ํ™œ์„ฑํ™”๋˜์—ˆ์Œ์„ ๋‚˜ํƒ€๋ƒ…๋‹ˆ๋‹ค.

์•ฝ์†๋œ ์š”์ฒญ์€ ์•ˆ์ „(safe)ํ•˜๊ณ  ์บ์‹œ ๊ฐ€๋Šฅ(cacheable)ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค(๊ด€๋ จ RFC ์„น์…˜ ์ฐธ์กฐ). ์•ฝ์†๋œ ์š”์ฒญ์€ ๋ณธ๋ฌธ์ด๋‚˜ ํŠธ๋ ˆ์ผ๋Ÿฌ ์„น์…˜์„ ํฌํ•จํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค. ํด๋ผ์ด์–ธํŠธ๊ฐ€ ์บ์‹œ ๊ฐ€๋Šฅํ•˜์ง€ ์•Š๊ฑฐ๋‚˜ ์•ˆ์ „ํ•˜์ง€ ์•Š๊ฑฐ๋‚˜ ์š”์ฒญ ๋ณธ๋ฌธ์ด ์žˆ์Œ์„ ๋‚˜ํƒ€๋‚ด๋Š” ์•ฝ์†๋œ ์š”์ฒญ์„ ์ˆ˜์‹ ํ•˜๋ฉด ํ•ด๋‹น ์•ฝ์†๋œ ์ŠคํŠธ๋ฆผ์„ ์„น์…˜ 5.4.2์— ๋”ฐ๋ผ RST_STREAM์œผ๋กœ ์žฌ์„ค์ •ํ•˜๊ณ  ์˜ค๋ฅ˜ ์œ ํ˜•์œผ๋กœ PROTOCOL_ERROR๋ฅผ ์‚ฌ์šฉํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

์บ์‹œ ๊ฐ€๋Šฅํ•œ ํ‘ธ์‹œ๋œ ์‘๋‹ต์€ ํด๋ผ์ด์–ธํŠธ๊ฐ€ HTTP ์บ์‹œ๋ฅผ ๊ตฌํ˜„ํ•œ ๊ฒฝ์šฐ ์ €์žฅ๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ํ‘ธ์‹œ๋œ ์‘๋‹ต์€ ์•ฝ์†๋œ ์ŠคํŠธ๋ฆผ ์‹๋ณ„์ž์— ์˜ํ•ด ์‹๋ณ„๋˜๋Š” ์ŠคํŠธ๋ฆผ์ด ์•„์ง ์—ด๋ ค ์žˆ๋Š” ๋™์•ˆ ์›๋ณธ ์„œ๋ฒ„์—์„œ ์„ฑ๊ณต์ ์œผ๋กœ ๊ฒ€์ฆ๋œ ๊ฒƒ์œผ๋กœ ๊ฐ„์ฃผ๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์บ์‹œํ•  ์ˆ˜ ์—†๋Š” ํ‘ธ์‹œ๋œ ์‘๋‹ต์€ ์–ด๋–ค HTTP ์บ์‹œ์—๋„ ์ €์žฅ๋˜์–ด์„œ๋Š” MUST NOT ํ•ฉ๋‹ˆ๋‹ค. ๋‹ค๋งŒ, ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์— ๋ณ„๋„๋กœ ์ œ๊ณต๋  MAY ์žˆ์Šต๋‹ˆ๋‹ค.

์„œ๋ฒ„๋Š” ":authority" ์˜์‚ฌ-ํ—ค๋” ํ•„๋“œ์— ์„œ๋ฒ„๊ฐ€ ๊ถŒํ•œ์„ ๊ฐ€์ง„ ๊ฐ’์„ ํฌํ•จํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค(์„น์…˜ 10.1 ์ฐธ์กฐ). ํด๋ผ์ด์–ธํŠธ๋Š” ์„œ๋ฒ„๊ฐ€ ๊ถŒํ•œ์ด ์—†๋Š” ๋Œ€์ƒ์— ๋Œ€ํ•ด PUSH_PROMISE๋ฅผ ๋ณด๋‚ธ ๊ฒฝ์šฐ ์ด๋ฅผ ์ŠคํŠธ๋ฆผ ์˜ค๋ฅ˜๋กœ ์ฒ˜๋ฆฌํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค(์„น์…˜ 5.4.2), ์˜ค๋ฅ˜ ์œ ํ˜•์€ PROTOCOL_ERROR์ž…๋‹ˆ๋‹ค.

์ค‘๊ฐœ์ž๋Š” ์„œ๋ฒ„๋กœ๋ถ€ํ„ฐ ํ‘ธ์‹œ๋ฅผ ์ˆ˜์‹ ํ•˜๊ณ  ์ด๋ฅผ ํด๋ผ์ด์–ธํŠธ์— ์ „๋‹ฌํ•˜์ง€ ์•Š๊ธฐ๋กœ ์„ ํƒํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ฆ‰, ํ‘ธ์‹œ๋œ ์ •๋ณด๋ฅผ ์–ด๋–ป๊ฒŒ ํ™œ์šฉํ• ์ง€๋Š” ์ค‘๊ฐœ์ž์˜ ์„ ํƒ์‚ฌํ•ญ์ž…๋‹ˆ๋‹ค. ๋˜ํ•œ ์ค‘๊ฐœ์ž๋Š” ์„œ๋ฒ„์˜ ์ถ”๊ฐ€ ๋™์ž‘ ์—†์ด ํด๋ผ์ด์–ธํŠธ์— ์ถ”๊ฐ€ ํ‘ธ์‹œ๋ฅผ ๋งŒ๋“ค ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค.

ํด๋ผ์ด์–ธํŠธ๋Š” ํ‘ธ์‹œ๋ฅผ ํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ ์„œ๋ฒ„๋Š” PUSH_PROMISE ํ”„๋ ˆ์ž„์„ ์ˆ˜์‹ ํ•˜๋Š” ๊ฒƒ์„ ์—ฐ๊ฒฐ ์˜ค๋ฅ˜(์„น์…˜ 5.4.1)๋กœ ์ฒ˜๋ฆฌํ•ด์•ผ ํ•˜๋ฉฐ, ์˜ค๋ฅ˜ ์œ ํ˜•์€ PROTOCOL_ERROR์ž…๋‹ˆ๋‹ค. ๋˜ํ•œ ์„œ๋ฒ„๋Š” SETTINGS_ENABLE_PUSH ์„ค์ •์„ 0 ์ด์™ธ์˜ ๊ฐ’์œผ๋กœ ์„ค์ •ํ•ด์„œ๋Š” ์•ˆ ๋ฉ๋‹ˆ๋‹ค.

8.4.1. ํ‘ธ์‹œ ์š”์ฒญ

์„œ๋ฒ„ ํ‘ธ์‹œ๋Š” ์˜๋ฏธ์ƒ ์„œ๋ฒ„๊ฐ€ ์š”์ฒญ์— ์‘๋‹ตํ•˜๋Š” ๊ฒƒ๊ณผ ๋™๋“ฑํ•˜์ง€๋งŒ, ์ด ๊ฒฝ์šฐ ๊ทธ ์š”์ฒญ์ด ์„œ๋ฒ„์— ์˜ํ•ด PUSH_PROMISE ํ”„๋ ˆ์ž„์œผ๋กœ ์ „์†ก๋œ๋‹ค๋Š” ์ ์ด ๋‹ค๋ฆ…๋‹ˆ๋‹ค.

PUSH_PROMISE ํ”„๋ ˆ์ž„์€ ์„œ๋ฒ„๊ฐ€ ํ•ด๋‹น ์š”์ฒญ์— ๊ท€์†์‹œํ‚ค๋Š” ์ œ์–ด ๋ฐ์ดํ„ฐ์™€ ์™„์ „ํ•œ ์š”์ฒญ ํ—ค๋” ํ•„๋“œ ์ง‘ํ•ฉ์„ ํฌํ•จํ•˜๋Š” ํ•„๋“œ ๋ธ”๋ก์„ ํฌํ•จํ•ฉ๋‹ˆ๋‹ค. ๋ฉ”์‹œ์ง€ ๋ณธ๋ฌธ์„ ํฌํ•จํ•˜๋Š” ์š”์ฒญ์œผ๋กœ๋Š” ์‘๋‹ต์„ ํ‘ธ์‹œํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.

์•ฝ์†๋œ ์š”์ฒญ์€ ํ•ญ์ƒ ํด๋ผ์ด์–ธํŠธ์˜ ๋ช…์‹œ์  ์š”์ฒญ๊ณผ ์—ฐ๊ด€๋ฉ๋‹ˆ๋‹ค. ์„œ๋ฒ„๊ฐ€ ์ „์†กํ•˜๋Š” PUSH_PROMISE ํ”„๋ ˆ์ž„๋“ค์€ ํ•ด๋‹น ๋ช…์‹œ์  ์š”์ฒญ์˜ ์ŠคํŠธ๋ฆผ์—์„œ ์ „์†ก๋ฉ๋‹ˆ๋‹ค. ๋˜ํ•œ ์•ฝ์†๋œ ์ŠคํŠธ๋ฆผ ์‹๋ณ„์ž๋ฅผ ํฌํ•จํ•˜๋ฉฐ, ์ด๋Š” ์„œ๋ฒ„๊ฐ€ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ์ŠคํŠธ๋ฆผ ์‹๋ณ„์ž ์ค‘์—์„œ ์„ ํƒ๋ฉ๋‹ˆ๋‹ค(์„น์…˜ 5.1.1 ์ฐธ์กฐ).

PUSH_PROMISE ๋ฐ ์ดํ›„์˜ CONTINUATION ํ”„๋ ˆ์ž„์˜ ํ—ค๋” ํ•„๋“œ๋“ค์€ ์™„์ „ํ•˜๊ณ  ์œ ํšจํ•œ ์š”์ฒญ ํ—ค๋” ํ•„๋“œ ์ง‘ํ•ฉ์ด์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค(์„น์…˜ 8.3.1). ์„œ๋ฒ„๋Š” ":method" ์˜์‚ฌ-ํ—ค๋”์— ์•ˆ์ „ํ•˜๊ณ  ์บ์‹œ ๊ฐ€๋Šฅํ•œ ๋ฉ”์„œ๋“œ๋ฅผ ํฌํ•จํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ํด๋ผ์ด์–ธํŠธ๊ฐ€ ์œ ํšจํ•œ ํ—ค๋” ์ง‘ํ•ฉ์„ ํฌํ•จํ•˜์ง€ ์•Š๊ฑฐ๋‚˜ ์•ˆ์ „ํ•˜์ง€ ์•Š์€ ๋ฉ”์„œ๋“œ๋ฅผ ์‹๋ณ„ํ•˜๋Š” PUSH_PROMISE๋ฅผ ์ˆ˜์‹ ํ•˜๋ฉด, ํ•ด๋‹น ์•ฝ์†๋œ ์ŠคํŠธ๋ฆผ์—์„œ ์„น์…˜ 5.4.2์— ๋”ฐ๋ผ RST_STREAM์„ PROTOCOL_ERROR๋กœ ์ „์†กํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

์„œ๋ฒ„๋Š” ์•ฝ์†๋œ ์‘๋‹ต์„ ์ฐธ์กฐํ•˜๋Š” ์–ด๋–ค ํ”„๋ ˆ์ž„์„ ๋ณด๋‚ด๊ธฐ ์ „์— ๊ฐ€๋Šฅํ•˜๋ฉด PUSH_PROMISE ํ”„๋ ˆ์ž„์„ ๋จผ์ € ๋ณด๋‚ด๋Š” ๊ฒƒ์ด ๊ถŒ์žฅ๋ฉ๋‹ˆ๋‹ค. ์ด๋Š” ํด๋ผ์ด์–ธํŠธ๊ฐ€ PUSH_PROMISE ํ”„๋ ˆ์ž„์„ ๋ฐ›๊ธฐ ์ „์— ๋ฆฌ์†Œ์Šค๋ฅผ ์š”์ฒญํ•˜๋Š” ๊ฒฝํ•ฉ์„ ํ”ผํ•˜๋Š” ๋ฐ ๋„์›€์ด ๋ฉ๋‹ˆ๋‹ค.

์˜ˆ๋ฅผ ๋“ค์–ด, ์„œ๋ฒ„๊ฐ€ ์—ฌ๋Ÿฌ ์ด๋ฏธ์ง€ ํŒŒ์ผ์— ๋Œ€ํ•œ ๋งํฌ๋ฅผ ํฌํ•จํ•˜๋Š” ๋ฌธ์„œ ์š”์ฒญ์„ ๋ฐ›์•˜๊ณ  ํ•ด๋‹น ์ด๋ฏธ์ง€๋ฅผ ํ‘ธ์‹œํ•˜๊ธฐ๋กœ ์„ ํƒํ•œ ๊ฒฝ์šฐ, ์ด๋ฏธ์ง€ ๋งํฌ๋ฅผ ํฌํ•จํ•˜๋Š” DATA ํ”„๋ ˆ์ž„์„ ๋ณด๋‚ด๊ธฐ ์ „์— PUSH_PROMISE๋ฅผ ๋ณด๋‚ด๋ฉด ํด๋ผ์ด์–ธํŠธ๋Š” ๋ฆฌ์†Œ์Šค๊ฐ€ ํ‘ธ์‹œ๋  ๊ฒƒ์ž„์„ ๋ฐœ๊ฒฌํ•˜๊ธฐ ์ „์— ํ•ด๋‹น ๋ฆฌ์†Œ์Šค๋ฅผ ์š”์ฒญํ•˜์ง€ ์•Š๊ฒŒ ๋ฉ๋‹ˆ๋‹ค.

PUSH_PROMISE ํ”„๋ ˆ์ž„์€ ํด๋ผ์ด์–ธํŠธ๊ฐ€ ์ „์†กํ•ด์„œ๋Š” MUST NOT ํ•ฉ๋‹ˆ๋‹ค.

PUSH_PROMISE ํ”„๋ ˆ์ž„์€ ์„œ๋ฒ„๊ฐ€ ์–ด๋–ค ํด๋ผ์ด์–ธํŠธ-์‹œ์ž‘ ์ŠคํŠธ๋ฆผ์—์„œ๋“  ๋ณด๋‚ผ ์ˆ˜ ์žˆ์ง€๋งŒ, ํ•ด๋‹น ์ŠคํŠธ๋ฆผ์€ ์„œ๋ฒ„ ๊ด€์ ์—์„œ "open" ๋˜๋Š” "half-closed (remote)" ์ƒํƒœ์—ฌ์•ผ ํ•ฉ๋‹ˆ๋‹ค. ๋˜ํ•œ PUSH_PROMISE๋Š” ํ•˜๋‚˜์˜ ํ•„๋“œ ๋ธ”๋ก์„ ๊ตฌ์„ฑํ•˜๋Š” HEADERS ๋ฐ CONTINUATION ํ”„๋ ˆ์ž„ ์‚ฌ์ด์— ๋ผ์–ด๋“ค ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.

PUSH_PROMISE๋ฅผ ์ „์†กํ•˜๋ฉด ์ƒˆ๋กœ์šด ์ŠคํŠธ๋ฆผ์ด ์ƒ์„ฑ๋˜๊ณ  ์„œ๋ฒ„์—๊ฒŒ๋Š” "reserved (local)", ํด๋ผ์ด์–ธํŠธ์—๊ฒŒ๋Š” "reserved (remote)" ์ƒํƒœ๋กœ ์„ค์ •๋ฉ๋‹ˆ๋‹ค.

8.4.2. ํ‘ธ์‹œ ์‘๋‹ต

PUSH_PROMISE ํ”„๋ ˆ์ž„์„ ๋ณด๋‚ธ ํ›„, ์„œ๋ฒ„๋Š” ์•ฝ์†๋œ ์ŠคํŠธ๋ฆผ ์‹๋ณ„์ž๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ์„œ๋ฒ„-์‹œ์ž‘ ์ŠคํŠธ๋ฆผ์—์„œ ํ‘ธ์‹œ๋œ ์‘๋‹ต์„ ์ „์†กํ•˜๊ธฐ ์‹œ์ž‘ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์„œ๋ฒ„๋Š” ์ด ์ŠคํŠธ๋ฆผ์—์„œ ์„น์…˜ 8.1์— ์ •์˜๋œ ๊ฒƒ๊ณผ ๋™์ผํ•œ ์ˆœ์„œ์˜ ํ”„๋ ˆ์ž„์„ ์‚ฌ์šฉํ•˜์—ฌ HTTP ์‘๋‹ต์„ ์ „์†กํ•ฉ๋‹ˆ๋‹ค. ์ด ์ŠคํŠธ๋ฆผ์€ ์ดˆ๊ธฐ HEADERS ํ”„๋ ˆ์ž„์ด ์ „์†ก๋œ ํ›„ ํด๋ผ์ด์–ธํŠธ์— ๋Œ€ํ•ด "half-closed (local)" ์ƒํƒœ๊ฐ€ ๋ฉ๋‹ˆ๋‹ค.

ํด๋ผ์ด์–ธํŠธ๊ฐ€ PUSH_PROMISE๋ฅผ ์ˆ˜์‹ ํ•˜๊ณ  ํ‘ธ์‹œ ์‘๋‹ต์„ ์ˆ˜๋ฝํ•˜๊ธฐ๋กœ ๊ฒฐ์ •ํ•˜๋ฉด, ์•ฝ์†๋œ ์ŠคํŠธ๋ฆผ์ด ๋‹ซํž ๋•Œ๊นŒ์ง€ ํ•ด๋‹น ์‘๋‹ต์— ๋Œ€ํ•œ ์š”์ฒญ์„ ๋ฐœํ–‰ํ•ด์„œ๋Š” SHOULD NOT ํ•ฉ๋‹ˆ๋‹ค.

ํด๋ผ์ด์–ธํŠธ๊ฐ€ ์–ด๋–ค ์ด์œ ๋กœ ํ‘ธ์‹œ๋œ ์‘๋‹ต์„ ์›ํ•˜์ง€ ์•Š๊ฑฐ๋‚˜ ์„œ๋ฒ„๊ฐ€ ์•ฝ์†๋œ ์‘๋‹ต์„ ๋ณด๋‚ด๊ธฐ ์‹œ์ž‘ํ•˜๋Š” ๋ฐ ๋„ˆ๋ฌด ์˜ค๋ž˜ ๊ฑธ๋ฆฌ๋Š” ๊ฒฝ์šฐ, ํด๋ผ์ด์–ธํŠธ๋Š” RST_STREAM ํ”„๋ ˆ์ž„์„ ๋ณด๋‚ด ํ‘ธ์‹œ๋œ ์ŠคํŠธ๋ฆผ์„ ์ทจ์†Œํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ, ์ด๋•Œ CANCEL ๋˜๋Š” REFUSED_STREAM ์ฝ”๋“œ๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

ํด๋ผ์ด์–ธํŠธ๋Š” SETTINGS_MAX_CONCURRENT_STREAMS ์„ค์ •์„ ์‚ฌ์šฉํ•˜์—ฌ ์„œ๋ฒ„๊ฐ€ ๋™์‹œ์— ํ‘ธ์‹œํ•  ์ˆ˜ ์žˆ๋Š” ์‘๋‹ต ์ˆ˜๋ฅผ ์ œํ•œํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๊ฐ’์ด 0์ด๋ฉด ์„œ๋ฒ„๊ฐ€ ์‘๋‹ต์„ ํ‘ธ์‹œํ•˜๋Š” ๋ฐ ํ•„์š”ํ•œ ์ŠคํŠธ๋ฆผ์„ ์—ด ์ˆ˜ ์—†๊ฒŒ ๋ฉ๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ์˜ˆ์•ฝ๋œ ์ŠคํŠธ๋ฆผ์€ ๋™์‹œ ์ŠคํŠธ๋ฆผ ํ•œ๋„์— ํฌํ•จ๋˜์ง€ ์•Š์œผ๋ฏ€๋กœ PUSH_PROMISE๋กœ ์ŠคํŠธ๋ฆผ์„ ์˜ˆ์•ฝํ•˜๋Š” ๊ฒƒ์„ ๋ฐฉ์ง€ํ•˜์ง€๋Š” ๋ชปํ•ฉ๋‹ˆ๋‹ค. ํ‘ธ์‹œ๋œ ๋ฆฌ์†Œ์Šค๋ฅผ ์›ํ•˜์ง€ ์•Š๋Š” ํด๋ผ์ด์–ธํŠธ๋Š” ์›ํ•˜์ง€ ์•Š๋Š” ์˜ˆ์•ฝ๋œ ์ŠคํŠธ๋ฆผ์„ ๋ฆฌ์…‹ํ•˜๊ฑฐ๋‚˜ SETTINGS_ENABLE_PUSH๋ฅผ 0์œผ๋กœ ์„ค์ •ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

ํ‘ธ์‹œ๋œ ์‘๋‹ต์„ ๋ฐ›๋Š” ํด๋ผ์ด์–ธํŠธ๋Š” ์„œ๋ฒ„๊ฐ€ ๊ถŒํ•œ์ด ์žˆ๋Š”์ง€(์„น์…˜ 10.1 ์ฐธ์กฐ) ๋˜๋Š” ํ‘ธ์‹œ๋œ ์‘๋‹ต์„ ์ œ๊ณตํ•œ ํ”„๋ก์‹œ๊ฐ€ ํ•ด๋‹น ์š”์ฒญ์— ๋Œ€ํ•ด ๊ตฌ์„ฑ๋˜์–ด ์žˆ๋Š”์ง€ ๊ฒ€์ฆํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด, ํŠน์ • ์ธ์ฆ์„œ๊ฐ€ example.com์—๋งŒ ์œ ํšจํ•œ ๊ฒฝ์šฐ์—๋Š” https://www.example.org/doc์— ๋Œ€ํ•œ ์‘๋‹ต์„ ํ‘ธ์‹œํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.

PUSH_PROMISE ์ŠคํŠธ๋ฆผ์— ๋Œ€ํ•œ ์‘๋‹ต์€ HEADERS ํ”„๋ ˆ์ž„์œผ๋กœ ์‹œ์ž‘ํ•˜์—ฌ(์ด๋กœ์จ ์„œ๋ฒ„ ์ธก์—์„œ ์ŠคํŠธ๋ฆผ์ด "half-closed (remote)"๊ฐ€ ๋˜๊ณ  ํด๋ผ์ด์–ธํŠธ ์ธก์€ "half-closed (local)"๊ฐ€ ๋จ) END_STREAM ํ”Œ๋ž˜๊ทธ๊ฐ€ ์„ค์ •๋œ ํ”„๋ ˆ์ž„์œผ๋กœ ๋๋‚˜๋ฉด ์ŠคํŠธ๋ฆผ์€ "closed" ์ƒํƒœ๊ฐ€ ๋ฉ๋‹ˆ๋‹ค.

8.5. CONNECT ๋ฉ”์„œ๋“œ

CONNECT ๋ฉ”์„œ๋“œ(RFC 9110 ์„น์…˜ 9.3.6 ์ฐธ์กฐ)๋Š” HTTP ์—ฐ๊ฒฐ์„ ์›๊ฒฉ ํ˜ธ์ŠคํŠธ๋กœ์˜ ํ„ฐ๋„๋กœ ์ „ํ™˜ํ•˜๋Š” ๋ฐ ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค. CONNECT๋Š” ์ฃผ๋กœ ํ”„๋ก์‹œ์™€ ํ•จ๊ป˜ ์‚ฌ์šฉ๋˜์–ด ์›๋ณธ ์„œ๋ฒ„์™€ TLS ์„ธ์…˜์„ ์„ค์ •ํ•˜๊ณ  "https" ๋ฆฌ์†Œ์Šค์™€ ์ƒํ˜ธ์ž‘์šฉํ•˜๋Š” ๋ฐ ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค.

HTTP/2์—์„œ๋Š” CONNECT ๋ฉ”์„œ๋“œ๊ฐ€ ์ „์ฒด ์—ฐ๊ฒฐ์„ ํ„ฐ๋„๋กœ ์ „ํ™˜ํ•˜๋Š” ๋Œ€์‹  ๋‹จ์ผ HTTP/2 ์ŠคํŠธ๋ฆผ์„ ํ†ตํ•ด ์›๊ฒฉ ํ˜ธ์ŠคํŠธ๋กœ์˜ ํ„ฐ๋„์„ ์„ค์ •ํ•ฉ๋‹ˆ๋‹ค. CONNECT ํ—ค๋” ์„น์…˜์€ ์„น์…˜ 8.3.1์— ์ •์˜๋œ ๋ฐฉ์‹์œผ๋กœ ๊ตฌ์„ฑ๋˜๋‚˜ ๋ช‡ ๊ฐ€์ง€ ์ฐจ์ด๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. ๊ตฌ์ฒด์ ์œผ๋กœ:

  • ":method" ์˜์‚ฌ-ํ—ค๋” ํ•„๋“œ๋Š” CONNECT๋กœ ์„ค์ •๋ฉ๋‹ˆ๋‹ค.
  • ":scheme" ๋ฐ ":path" ์˜์‚ฌ-ํ—ค๋” ํ•„๋“œ๋Š” MUST ์ƒ๋žต๋˜์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.
  • ":authority" ์˜์‚ฌ-ํ—ค๋” ํ•„๋“œ๋Š” ์—ฐ๊ฒฐํ•  ํ˜ธ์ŠคํŠธ์™€ ํฌํŠธ๋ฅผ ํฌํ•จํ•ฉ๋‹ˆ๋‹ค(์ด๋Š” CONNECT ์š”์ฒญ์˜ authority-form๊ณผ ๋™๋“ฑํ•ฉ๋‹ˆ๋‹ค).

์ด ์ œํ•œ์„ ์ค€์ˆ˜ํ•˜์ง€ ์•Š๋Š” CONNECT ์š”์ฒญ์€ ์ž˜๋ชป๋œ ํ˜•์‹์œผ๋กœ ๊ฐ„์ฃผ๋ฉ๋‹ˆ๋‹ค(์„น์…˜ 8.1.1).

CONNECT๋ฅผ ์ง€์›ํ•˜๋Š” ํ”„๋ก์‹œ๋Š” ":authority" ์˜์‚ฌ-ํ—ค๋” ํ•„๋“œ์— ์ง€์ •๋œ ํ˜ธ์ŠคํŠธ์™€ ํฌํŠธ์— ๋Œ€ํ•ด TCP ์—ฐ๊ฒฐ์„ ์„ค์ •ํ•ฉ๋‹ˆ๋‹ค. ์—ฐ๊ฒฐ์ด ์„ฑ๊ณต์ ์œผ๋กœ ์„ค์ •๋˜๋ฉด ํ”„๋ก์‹œ๋Š” ํด๋ผ์ด์–ธํŠธ์— 2xx ๊ณ„์—ด ์ƒํƒœ ์ฝ”๋“œ๋ฅผ ํฌํ•จํ•˜๋Š” HEADERS ํ”„๋ ˆ์ž„์„ ๋ณด๋ƒ…๋‹ˆ๋‹ค.

๊ฐ ํ”ผ์–ด๊ฐ€ ๋ณด๋‚ธ ์ดˆ๊ธฐ HEADERS ํ”„๋ ˆ์ž„ ์ดํ›„์˜ ๋ชจ๋“  ํ›„์† DATA ํ”„๋ ˆ์ž„์€ TCP ์—ฐ๊ฒฐ์—์„œ ์ „์†ก๋˜๋Š” ๋ฐ์ดํ„ฐ์— ํ•ด๋‹นํ•ฉ๋‹ˆ๋‹ค. ํด๋ผ์ด์–ธํŠธ๊ฐ€ ๋ณด๋‚ธ DATA ํ”„๋ ˆ์ž„์˜ ํŽ˜์ด๋กœ๋“œ๋Š” ํ”„๋ก์‹œ๊ฐ€ TCP ์„œ๋ฒ„๋กœ ์ „์†กํ•˜๊ณ , TCP ์„œ๋ฒ„๋กœ๋ถ€ํ„ฐ ์ˆ˜์‹ ๋œ ๋ฐ์ดํ„ฐ๋Š” ํ”„๋ก์‹œ๊ฐ€ DATA ํ”„๋ ˆ์ž„์œผ๋กœ ์กฐ๋ฆฝํ•˜์—ฌ ์ „์†กํ•ฉ๋‹ˆ๋‹ค. ์—ฐ๊ฒฐ๋œ ์ŠคํŠธ๋ฆผ์—์„œ DATA ์ด์™ธ์˜ ํ”„๋ ˆ์ž„ ์œ ํ˜•์ด๋‚˜ ์ŠคํŠธ๋ฆผ ๊ด€๋ฆฌ ํ”„๋ ˆ์ž„(RST_STREAM, WINDOW_UPDATE, PRIORITY) ์ด์™ธ์˜ ํ”„๋ ˆ์ž„์€ ์ „์†กํ•ด์„œ๋Š” ์•ˆ ๋˜๋ฉฐ ์ˆ˜์‹  ์‹œ ์ŠคํŠธ๋ฆผ ์˜ค๋ฅ˜๋กœ ์ฒ˜๋ฆฌ๋˜์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

TCP ์—ฐ๊ฒฐ์€ ์–ด๋А ์ชฝ ํ”ผ์–ด์— ์˜ํ•ด๋“  ๋‹ซํž ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. DATA ํ”„๋ ˆ์ž„์˜ END_STREAM ํ”Œ๋ž˜๊ทธ๋Š” TCP FIN ๋น„ํŠธ์™€ ๋™๋“ฑํ•˜๊ฒŒ ์ฒ˜๋ฆฌ๋ฉ๋‹ˆ๋‹ค. ํด๋ผ์ด์–ธํŠธ๋Š” END_STREAM ํ”Œ๋ž˜๊ทธ๊ฐ€ ์„ค์ •๋œ DATA ํ”„๋ ˆ์ž„์„ ์ˆ˜์‹ ํ•œ ํ›„ END_STREAM ํ”Œ๋ž˜๊ทธ๊ฐ€ ์„ค์ •๋œ DATA ํ”„๋ ˆ์ž„์„ ์ „์†กํ•  ๊ฒƒ์œผ๋กœ ๊ธฐ๋Œ€๋ฉ๋‹ˆ๋‹ค. ํ”„๋ก์‹œ๋Š” END_STREAM ํ”Œ๋ž˜๊ทธ๊ฐ€ ์„ค์ •๋œ DATA ํ”„๋ ˆ์ž„์„ ๋ฐ›์œผ๋ฉด ๋งˆ์ง€๋ง‰ TCP ์„ธ๊ทธ๋จผํŠธ์— FIN ๋น„ํŠธ๋ฅผ ์„ค์ •ํ•˜์—ฌ ๋ฐ์ดํ„ฐ๋ฅผ ์ „์†กํ•˜๊ณ , FIN ๋น„ํŠธ๋ฅผ ๊ฐ€์ง„ TCP ์„ธ๊ทธ๋จผํŠธ๋ฅผ ์ˆ˜์‹ ํ•˜๋ฉด END_STREAM ํ”Œ๋ž˜๊ทธ๊ฐ€ ์„ค์ •๋œ DATA ํ”„๋ ˆ์ž„์„ ์ „์†กํ•ฉ๋‹ˆ๋‹ค. ๋งˆ์ง€๋ง‰ TCP ์„ธ๊ทธ๋จผํŠธ๋‚˜ DATA ํ”„๋ ˆ์ž„์€ ๋น„์–ด์žˆ์„ ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค.

TCP ์—ฐ๊ฒฐ ์˜ค๋ฅ˜๋Š” RST_STREAM์œผ๋กœ ์‹ ํ˜ธ๋ฉ๋‹ˆ๋‹ค. ํ”„๋ก์‹œ๋Š” TCP ์—ฐ๊ฒฐ์—์„œ์˜ ๋ชจ๋“  ์˜ค๋ฅ˜(์˜ˆ: RST ๋น„ํŠธ๊ฐ€ ์„ค์ •๋œ TCP ์„ธ๊ทธ๋จผํŠธ ์ˆ˜์‹ )๋ฅผ ์„น์…˜ 5.4.2์— ๋”ฐ๋ผ CONNECT_ERROR ์œ ํ˜•์˜ ์ŠคํŠธ๋ฆผ ์˜ค๋ฅ˜๋กœ ์ฒ˜๋ฆฌํ•ด์•ผ ํ•˜๋ฉฐ, ๋ฐ˜๋Œ€๋กœ ์ŠคํŠธ๋ฆผ ๋˜๋Š” HTTP/2 ์—ฐ๊ฒฐ์—์„œ ์˜ค๋ฅ˜๋ฅผ ๊ฐ์ง€ํ•˜๋ฉด TCP RST ๋น„ํŠธ๋ฅผ ์„ค์ •ํ•œ ์„ธ๊ทธ๋จผํŠธ๋ฅผ ๋ณด๋‚ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

8.6. ์ •๋ณด ์ƒํƒœ ์‘๋‹ต(Upgrade ํ—ค๋” ํ•„๋“œ)

HTTP/2๋Š” 101 (Switching Protocols) ์ •๋ณด ์ƒํƒœ ์ฝ”๋“œ๋ฅผ ์ง€์›ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค(RFC 9110 ์„น์…˜ 15.2.2 ์ฐธ์กฐ).

101์˜ ์˜๋ฏธ๋Š” ๋‹ค์ค‘ํ™”๋œ ํ”„๋กœํ† ์ฝœ์—๋Š” ์ ์šฉ๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ์œ ์‚ฌํ•œ ๊ธฐ๋Šฅ์€ ํ™•์žฅ๋œ CONNECT(RFC8441)๋ฅผ ํ†ตํ•ด ์ œ๊ณต๋  ์ˆ˜ ์žˆ์œผ๋ฉฐ, ๋‹ค๋ฅธ ํ”„๋กœํ† ์ฝœ๋“ค๋„ HTTP/2๊ฐ€ ์‚ฌ์šฉํ•˜๋Š” ๋™์ผํ•œ ๋ฉ”์ปค๋‹ˆ์ฆ˜์„ ์‚ฌ์šฉํ•˜์—ฌ ์‚ฌ์šฉ ํ˜‘์ƒ์„ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค(์‹œ์ž‘ ๋ฐฉ๋ฒ•์€ ์„น์…˜ 3 ์ฐธ์กฐ).

8.7. ์š”์ฒญ ์‹ ๋ขฐ์„ฑ

์ผ๋ฐ˜์ ์œผ๋กœ, HTTP ํด๋ผ์ด์–ธํŠธ๋Š” ์˜ค๋ฅ˜ ๋ฐœ์ƒ ์‹œ ๋น„๋ฉฑ๋“ฑ(non-idempotent) ์š”์ฒญ์„ ์žฌ์‹œ๋„ํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค. ์ด๋Š” ์˜ค๋ฅ˜์˜ ์„ฑ๊ฒฉ์„ ๊ฒฐ์ •ํ•  ์ˆ˜ ์žˆ๋Š” ์ˆ˜๋‹จ์ด ์—†๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค. ์˜ค๋ฅ˜ ์ด์ „์— ์ผ๋ถ€ ์„œ๋ฒ„ ์ฒ˜๋ฆฌ๊ฐ€ ์ด๋ฃจ์–ด์กŒ์„ ์ˆ˜ ์žˆ์œผ๋ฏ€๋กœ ์žฌ์‹œ๋„ ์‹œ ์›์น˜ ์•Š๋Š” ๋ถ€์ž‘์šฉ์ด ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

HTTP/2๋Š” ํด๋ผ์ด์–ธํŠธ์—๊ฒŒ ์š”์ฒญ์ด ์ฒ˜๋ฆฌ๋˜์ง€ ์•Š์•˜์Œ์„ ๋ณด์žฅํ•˜๊ธฐ ์œ„ํ•œ ๋‘ ๊ฐ€์ง€ ๋ฉ”์ปค๋‹ˆ์ฆ˜์„ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค:

  • GOAWAY ํ”„๋ ˆ์ž„์€ ์ฒ˜๋ฆฌ๋˜์—ˆ์„ ์ˆ˜ ์žˆ๋Š” ์ตœ๋Œ€ ์ŠคํŠธ๋ฆผ ๋ฒˆํ˜ธ๋ฅผ ๋‚˜ํƒ€๋ƒ…๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ ๋” ๋†’์€ ๋ฒˆํ˜ธ์˜ ์ŠคํŠธ๋ฆผ์— ๋Œ€ํ•œ ์š”์ฒญ์€ ์•ˆ์ „ํ•˜๊ฒŒ ์žฌ์‹œ๋„ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  • REFUSED_STREAM ์˜ค๋ฅ˜ ์ฝ”๋“œ๋Š” RST_STREAM ํ”„๋ ˆ์ž„์— ํฌํ•จ๋˜์–ด ์ŠคํŠธ๋ฆผ์ด ์–ด๋–ค ์ฒ˜๋ฆฌ๋„ ์ด๋ฃจ์–ด์ง€๊ธฐ ์ „์— ๋‹ซํ˜”์Œ์„ ๋‚˜ํƒ€๋‚ผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋ฆฌ์…‹๋œ ์ŠคํŠธ๋ฆผ์—์„œ ์ „์†ก๋œ ์š”์ฒญ์€ ์•ˆ์ „ํ•˜๊ฒŒ ์žฌ์‹œ๋„ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์ฒ˜๋ฆฌ๋˜์ง€ ์•Š์€ ์š”์ฒญ์€ ์‹คํŒจํ•œ ๊ฒƒ์ด ์•„๋‹ˆ๋ฏ€๋กœ, ํด๋ผ์ด์–ธํŠธ๋Š” ์ด๋Ÿฌํ•œ ์š”์ฒญ์„ ์ž๋™์œผ๋กœ ์žฌ์‹œ๋„ํ•  MAY ์žˆ์Šต๋‹ˆ๋‹ค(๋น„๋ฉฑ๋“ฑ ๋ฉ”์„œ๋“œ๋„ ํฌํ•จ).

์„œ๋ฒ„๋Š” ์ŠคํŠธ๋ฆผ์ด ์ฒ˜๋ฆฌ๋˜์ง€ ์•Š์•˜์Œ์„ ๋ณด์žฅํ•  ์ˆ˜ ์—†๋Š” ๊ฒฝ์šฐ ํ•ด๋‹น ์ŠคํŠธ๋ฆผ์— ๋Œ€ํ•ด ๊ทธ๋Ÿฌํ•œ ํ‘œ์‹œ๋ฅผ ํ•ด์„œ๋Š” MUST NOT ํ•ฉ๋‹ˆ๋‹ค. ๋งŒ์•ฝ ์–ด๋–ค ์ŠคํŠธ๋ฆผ์— ๋Œ€ํ•ด ํ”„๋ ˆ์ž„๋“ค์ด ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๋ ˆ์ด์–ด๋กœ ์ „๋‹ฌ๋˜์—ˆ๋‹ค๋ฉด, ๊ทธ ์ŠคํŠธ๋ฆผ์— ๋Œ€ํ•ด REFUSED_STREAM์„ ์‚ฌ์šฉํ•ด์„œ๋Š” ์•ˆ ๋˜๋ฉฐ, ๋Œ€์‹  GOAWAY ํ”„๋ ˆ์ž„์€ ํ•ด๋‹น ์ŠคํŠธ๋ฆผ ์‹๋ณ„์ž๋ณด๋‹ค ํฌ๊ฑฐ๋‚˜ ๊ฐ™์€ ๊ฐ’์„ ํฌํ•จํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

์ด ๋ฉ”์ปค๋‹ˆ์ฆ˜๋“ค ์™ธ์—๋„ PING ํ”„๋ ˆ์ž„์€ ํด๋ผ์ด์–ธํŠธ๊ฐ€ ์—ฐ๊ฒฐ์„ ์‰ฝ๊ฒŒ ํ…Œ์ŠคํŠธํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•ฉ๋‹ˆ๋‹ค. ์œ ํœด ์ƒํƒœ์˜ ์—ฐ๊ฒฐ์€ ์ผ๋ถ€ ์ค‘๊ฐ„ ์žฅ์น˜(์˜ˆ: NAT ๋˜๋Š” ๋กœ๋“œ ๋ฐธ๋Ÿฐ์„œ)๊ฐ€ ์—ฐ๊ฒฐ ๋ฐ”์ธ๋”ฉ์„ ์กฐ์šฉํžˆ ์ œ๊ฑฐํ•  ์ˆ˜ ์žˆ์–ด ๋Š์–ด์งˆ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. PING ํ”„๋ ˆ์ž„์€ ์š”์ฒญ์„ ๋ณด๋‚ด์ง€ ์•Š๊ณ  ์—ฐ๊ฒฐ์ด ์—ฌ์ „ํžˆ ํ™œ์„ฑ ์ƒํƒœ์ธ์ง€ ์•ˆ์ „ํ•˜๊ฒŒ ๊ฒ€์‚ฌํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•ด์ค๋‹ˆ๋‹ค.

8.8. ์˜ˆ์‹œ

์ด ์ ˆ์—์„œ๋Š” ๋™๋“ฑํ•œ HTTP/2 ์š”์ฒญ ๋ฐ ์‘๋‹ต์„ ๋ณด์—ฌ์ฃผ๊ธฐ ์œ„ํ•ด HTTP/1.1 ์š”์ฒญ๊ณผ ์‘๋‹ต์„ ์˜ˆ์‹œ๋กœ ์ œ์‹œํ•ฉ๋‹ˆ๋‹ค.

8.8.1. ๋‹จ์ˆœ ์š”์ฒญ

HTTP GET ์š”์ฒญ์€ ์ œ์–ด ๋ฐ์ดํ„ฐ์™€ ๋ฉ”์‹œ์ง€ ๋ณธ๋ฌธ์ด ์—†๋Š” ์š”์ฒญ ํ—ค๋”๋ฅผ ํฌํ•จํ•˜๋ฏ€๋กœ ๋‹จ์ผ HEADERS ํ”„๋ ˆ์ž„์œผ๋กœ ์ „์†ก๋˜๋ฉฐ, ์ง๋ ฌํ™”๋œ ์š”์ฒญ ํ—ค๋” ๋ธ”๋ก์„ ํฌํ•จํ•˜๋Š” 0๊ฐœ ์ด์ƒ์˜ CONTINUATION ํ”„๋ ˆ์ž„์ด ๋’ค๋”ฐ๋ฅผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์•„๋ž˜์˜ HEADERS ํ”„๋ ˆ์ž„์€ END_HEADERS ๋ฐ END_STREAM ํ”Œ๋ž˜๊ทธ๊ฐ€ ๋ชจ๋‘ ์„ค์ •๋˜์–ด ์žˆ์œผ๋ฏ€๋กœ CONTINUATION ํ”„๋ ˆ์ž„์€ ์ „์†ก๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

  GET /resource HTTP/1.1           HEADERS
  Host: example.org          ==>     + END_STREAM
  Accept: image/jpeg                 + END_HEADERS
                                       :method = GET
                                       :scheme = https
                                       :authority = example.org
                                       :path = /resource
                                       host = example.org
                                       accept = image/jpeg

8.8.2. ๋‹จ์ˆœ ์‘๋‹ต

๋™์ผํ•˜๊ฒŒ, ์ œ์–ด ๋ฐ์ดํ„ฐ์™€ ์‘๋‹ต ํ—ค๋”๋งŒ ํฌํ•จํ•˜๋Š” ์‘๋‹ต์€ ์ง๋ ฌํ™”๋œ ์‘๋‹ต ํ—ค๋” ๋ธ”๋ก์„ ํฌํ•จํ•˜๋Š” HEADERS ํ”„๋ ˆ์ž„(๋’ค์— 0๊ฐœ ์ด์ƒ์˜ CONTINUATION ํ”„๋ ˆ์ž„ ๊ฐ€๋Šฅ)์œผ๋กœ ์ „์†ก๋ฉ๋‹ˆ๋‹ค.

  HTTP/1.1 304 Not Modified        HEADERS
  ETag: "xyzzy"              ==>     + END_STREAM
  Expires: Thu, 23 Jan ...           + END_HEADERS
                                       :status = 304
                                       etag = "xyzzy"
                                       expires = Thu, 23 Jan ...

8.8.3. ๋ณตํ•ฉ ์š”์ฒญ

๋ฉ”์‹œ์ง€ ๋ณธ๋ฌธ์„ ํฌํ•จํ•˜๋Š” HTTP POST ์š”์ฒญ์€ ํ•˜๋‚˜์˜ HEADERS ํ”„๋ ˆ์ž„, ๊ทธ ๋’ค๋ฅผ ๋”ฐ๋ฅด๋Š” 0๊ฐœ ์ด์ƒ์˜ CONTINUATION ํ”„๋ ˆ์ž„(์š”์ฒญ ํ—ค๋”), ๊ทธ๋ฆฌ๊ณ  ํ•˜๋‚˜ ์ด์ƒ์˜ DATA ํ”„๋ ˆ์ž„์œผ๋กœ ์ „์†ก๋ฉ๋‹ˆ๋‹ค. ๋งˆ์ง€๋ง‰ CONTINUATION(๋˜๋Š” HEADERS) ํ”„๋ ˆ์ž„์—๋Š” END_HEADERS ํ”Œ๋ž˜๊ทธ๊ฐ€ ์„ค์ •๋˜๊ณ  ๋งˆ์ง€๋ง‰ DATA ํ”„๋ ˆ์ž„์—๋Š” END_STREAM ํ”Œ๋ž˜๊ทธ๊ฐ€ ์„ค์ •๋ฉ๋‹ˆ๋‹ค.

  POST /resource HTTP/1.1          HEADERS
  Host: example.org          ==>     - END_STREAM
  Content-Type: image/jpeg           - END_HEADERS
  Content-Length: 123                  :method = POST
                                       :authority = example.org
                                       :path = /resource
  {binary data}                        :scheme = https

                                   CONTINUATION
                                     + END_HEADERS
                                       content-type = image/jpeg
                                       host = example.org
                                       content-length = 123

                                   DATA
                                     + END_STREAM
                                   {binary data}

์–ด๋–ค ํ•„๋“œ ๋ผ์ธ์— ๊ธฐ์—ฌํ•˜๋Š” ๋ฐ์ดํ„ฐ๋Š” ํ•„๋“œ ๋ธ”๋ก ์กฐ๊ฐ๋“ค ์‚ฌ์ด์— ๋ถ„์‚ฐ๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด ์˜ˆ์—์„œ ํ•„๋“œ ๋ผ์ธ์„ ํ”„๋ ˆ์ž„์— ํ• ๋‹นํ•œ ๋ฐฉ์‹์€ ๋‹จ์ง€ ์˜ˆ์‹œ์ž…๋‹ˆ๋‹ค.

8.8.4. ๋ณธ๋ฌธ์„ ํฌํ•จํ•œ ์‘๋‹ต

๋ฉ”์‹œ์ง€ ๋ณธ๋ฌธ์„ ํฌํ•จํ•˜๋Š” ์‘๋‹ต์€ HEADERS ํ”„๋ ˆ์ž„(๋ฐ 0๊ฐœ ์ด์ƒ์˜ CONTINUATION ํ”„๋ ˆ์ž„)์œผ๋กœ ์‹œ์ž‘ํ•˜๊ณ , ํ•˜๋‚˜ ์ด์ƒ์˜ DATA ํ”„๋ ˆ์ž„์ด ๋’ค๋”ฐ๋ฅด๋ฉฐ, ์‹œํ€€์Šค์˜ ๋งˆ์ง€๋ง‰ DATA ํ”„๋ ˆ์ž„์— END_STREAM ํ”Œ๋ž˜๊ทธ๊ฐ€ ์„ค์ •๋ฉ๋‹ˆ๋‹ค.

  HTTP/1.1 200 OK                  HEADERS
  Content-Type: image/jpeg   ==>     - END_STREAM
  Content-Length: 123                + END_HEADERS
                                       :status = 200
  {binary data}                        content-type = image/jpeg
                                       content-length = 123

                                   DATA
                                     + END_STREAM
                                   {binary data}

8.8.5. ์ •๋ณด ์‘๋‹ต

101์„ ์ œ์™ธํ•œ 1xx ์ƒํƒœ ์ฝ”๋“œ๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ์ •๋ณด ์‘๋‹ต์€ HEADERS ํ”„๋ ˆ์ž„์œผ๋กœ ์ „์†ก๋˜๋ฉฐ ๋’ค์— 0๊ฐœ ์ด์ƒ์˜ CONTINUATION ํ”„๋ ˆ์ž„์ด ์˜ฌ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

ํŠธ๋ ˆ์ผ๋Ÿฌ ์„น์…˜์€ ์š”์ฒญ ๋˜๋Š” ์‘๋‹ต ํ•„๋“œ ๋ธ”๋ก๊ณผ ๋ชจ๋“  DATA ํ”„๋ ˆ์ž„์ด ์ „์†ก๋œ ํ›„์— ํ•„๋“œ ๋ธ”๋ก์œผ๋กœ ์ „์†ก๋ฉ๋‹ˆ๋‹ค. ํŠธ๋ ˆ์ผ๋Ÿฌ ์„น์…˜์„ ์‹œ์ž‘ํ•˜๋Š” HEADERS ํ”„๋ ˆ์ž„์€ END_STREAM ํ”Œ๋ž˜๊ทธ๊ฐ€ ์„ค์ •๋˜์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

๋‹ค์Œ ์˜ˆ์‹œ๋Š” Expect ํ—ค๋” ํ•„๋“œ์— "100-continue" ํ† ํฐ์ด ํฌํ•จ๋œ ์š”์ฒญ์— ๋Œ€ํ•œ 100 (Continue) ์ƒํƒœ ์ฝ”๋“œ์™€ ํŠธ๋ ˆ์ผ๋Ÿฌ ์„น์…˜์„ ๋ชจ๋‘ ํฌํ•จํ•ฉ๋‹ˆ๋‹ค:

  HTTP/1.1 100 Continue            HEADERS
  Extension-Field: bar       ==>     - END_STREAM
                                     + END_HEADERS
                                       :status = 100
                                       extension-field = bar

  HTTP/1.1 200 OK                  HEADERS
  Content-Type: image/jpeg   ==>     - END_STREAM
  Transfer-Encoding: chunked         + END_HEADERS
  Trailer: Foo                         :status = 200
                                       content-type = image/jpeg
  123                                  trailer = Foo
  {binary data}
  0                                DATA
  Foo: bar                           - END_STREAM
                                   {binary data}

                                   HEADERS
                                     + END_STREAM
                                     + END_HEADERS
                                       foo = bar

9. HTTP/2 ์—ฐ๊ฒฐ

์ด ์„น์…˜์€ ์ƒํ˜ธ์šด์šฉ์„ฑ์„ ํ–ฅ์ƒ์‹œํ‚ค๊ณ , ์•Œ๋ ค์ง„ ๋ณด์•ˆ ์ทจ์•ฝ์ ์— ๋Œ€ํ•œ ๋…ธ์ถœ์„ ์ค„์ด๋ฉฐ, ๊ตฌํ˜„ ์ฐจ์ด๋ฅผ ์ค„์ด๊ธฐ ์œ„ํ•œ HTTP์˜ ํŠน์„ฑ๋“ค์„ ๊ฐœ๊ด„ํ•ฉ๋‹ˆ๋‹ค.

9.1. ์—ฐ๊ฒฐ ๊ด€๋ฆฌ

HTTP/2 ์—ฐ๊ฒฐ์€ ์ง€์†์ ์ž…๋‹ˆ๋‹ค. ์ตœ์ ์˜ ์„ฑ๋Šฅ์„ ์œ„ํ•ด ํด๋ผ์ด์–ธํŠธ๋Š” ์„œ๋ฒ„์™€์˜ ์ถ”๊ฐ€ ํ†ต์‹ ์ด ๋ถˆํ•„์š”ํ•˜๋‹ค๊ณ  ํŒ๋‹จ๋˜๊ฑฐ๋‚˜(์˜ˆ: ์‚ฌ์šฉ์ž๊ฐ€ ํŠน์ • ์›น ํŽ˜์ด์ง€์—์„œ ์ด๋™ํ•œ ๊ฒฝ์šฐ) ์„œ๋ฒ„๊ฐ€ ์—ฐ๊ฒฐ์„ ๋‹ซ์„ ๋•Œ๊นŒ์ง€ ์—ฐ๊ฒฐ์„ ๋‹ซ์ง€ ์•Š๋Š” ๊ฒƒ์ด ๊ธฐ๋Œ€๋ฉ๋‹ˆ๋‹ค.

ํด๋ผ์ด์–ธํŠธ๋Š” URI๋กœ๋ถ€ํ„ฐ ํŒŒ์ƒ๋œ ํ˜ธ์ŠคํŠธ, ์„ ํƒ๋œ alternative service ๋˜๋Š” ๊ตฌ์„ฑ๋œ ํ”„๋ก์‹œ์— ๋Œ€ํ•ด ์ฃผ์–ด์ง„ ํ˜ธ์ŠคํŠธ-ํฌํŠธ ์Œ์œผ๋กœ ํ•˜๋‚˜ ์ด์ƒ์˜ HTTP/2 ์—ฐ๊ฒฐ์„ ์—ด์–ด์„œ๋Š” ์•ˆ ๋ฉ๋‹ˆ๋‹ค(SHOULD NOT).

ํด๋ผ์ด์–ธํŠธ๋Š” ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•œ ์ŠคํŠธ๋ฆผ ์‹๋ณ„์ž ๊ณต๊ฐ„์ด ๊ฑฐ์˜ ์†Œ์ง„๋˜์–ด ๋Œ€์ฒด ์—ฐ๊ฒฐ์„ ๋งŒ๋“ค๊ฑฐ๋‚˜(์„น์…˜ 5.1.1), TLS ์—ฐ๊ฒฐ์˜ ํ‚ค ์žฌ๋ฃŒ๋ฅผ ๊ฐฑ์‹ ํ•˜๊ฑฐ๋‚˜, ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ•œ ์—ฐ๊ฒฐ์„ ๋Œ€์ฒดํ•˜๊ธฐ ์œ„ํ•ด ์ถ”๊ฐ€ ์—ฐ๊ฒฐ์„ ์ƒ์„ฑํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค(์„น์…˜ 5.4.1).

ํด๋ผ์ด์–ธํŠธ๋Š” ์„œ๋กœ ๋‹ค๋ฅธ Server Name Indication ๊ฐ’์ด๋‚˜ ์„œ๋กœ ๋‹ค๋ฅธ TLS ํด๋ผ์ด์–ธํŠธ ์ธ์ฆ์„œ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋™์ผํ•œ IP ์ฃผ์†Œ์™€ TCP ํฌํŠธ์— ๋Œ€ํ•ด ์—ฌ๋Ÿฌ ์—ฐ๊ฒฐ์„ ์—ด ์ˆ˜ ์žˆ์œผ๋‚˜(MAY), ๋™์ผํ•œ ๊ตฌ์„ฑ์œผ๋กœ ์—ฌ๋Ÿฌ ์—ฐ๊ฒฐ์„ ์ƒ์„ฑํ•˜๋Š” ๊ฒƒ์€ ํ”ผํ•˜๋Š” ๊ฒƒ์ด ์ข‹์Šต๋‹ˆ๋‹ค(SHOULD).

์„œ๋ฒ„๋Š” ๊ฐ€๋Šฅํ•œ ํ•œ ์˜ค๋žซ๋™์•ˆ ์—ด๋ฆฐ ์—ฐ๊ฒฐ์„ ์œ ์ง€ํ•˜๋Š” ๊ฒƒ์ด ๊ถŒ์žฅ๋˜์ง€๋งŒ, ํ•„์š”ํ•˜๋ฉด ์œ ํœด ์—ฐ๊ฒฐ์„ ์ข…๋ฃŒํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์–ด๋А ์ชฝ ์—”๋“œํฌ์ธํŠธ๋“  ์ „์†ก ๊ณ„์ธต์˜ TCP ์—ฐ๊ฒฐ์„ ๋‹ซ๊ธฐ๋กœ ์„ ํƒํ•  ๋•Œ ์ข…๋ฃŒํ•˜๋Š” ์—”๋“œํฌ์ธํŠธ๋Š” ๋จผ์ € GOAWAY ํ”„๋ ˆ์ž„(์„น์…˜ 6.8)์„ ๋ณด๋‚ด์–ด ์–‘์ชฝ ์—”๋“œํฌ์ธํŠธ๊ฐ€ ์ด์ „์— ์ „์†ก๋œ ํ”„๋ ˆ์ž„์ด ์ฒ˜๋ฆฌ๋˜์—ˆ๋Š”์ง€ ์‹ ๋ขฐ์„ฑ ์žˆ๊ฒŒ ํŒ๋‹จํ•˜๊ณ  ํ•„์š”ํ•œ ์ž”์—ฌ ์ž‘์—…์„ ์šฐ์•„ํ•˜๊ฒŒ ์™„๋ฃŒํ•˜๊ฑฐ๋‚˜ ์ข…๋ฃŒํ•  ์ˆ˜ ์žˆ๋„๋ก ํ•˜๋Š” ๊ฒƒ์ด ๋ฐ”๋žŒ์งํ•ฉ๋‹ˆ๋‹ค(SHOULD).

9.1.1. ์—ฐ๊ฒฐ ์žฌ์‚ฌ์šฉ

CONNECT ๋ฉ”์„œ๋“œ(์„น์…˜ 8.5)๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์ง์ ‘ ๋˜๋Š” ํ„ฐ๋„์„ ํ†ตํ•ด ์ƒ์„ฑ๋œ ์›๋ณธ ์„œ๋ฒ„์— ๋Œ€ํ•œ ์—ฐ๊ฒฐ์€ ์„œ๋กœ ๋‹ค๋ฅธ URI authority ๊ตฌ์„ฑ์š”์†Œ๋ฅผ ๊ฐ€์ง„ ์š”์ฒญ๋“ค์— ๋Œ€ํ•ด ์žฌ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค(MAY). ์›๋ณธ ์„œ๋ฒ„๊ฐ€ ๊ถŒํ•œ์„ ๊ฐ€์ง€๊ณ  ์žˆ๋Š” ํ•œ ์—ฐ๊ฒฐ์€ ์žฌ์‚ฌ์šฉ๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค(์„น์…˜ 10.1). TLS๊ฐ€ ์—†๋Š” TCP ์—ฐ๊ฒฐ์˜ ๊ฒฝ์šฐ์—๋Š” ํ˜ธ์ŠคํŠธ๊ฐ€ ๋™์ผํ•œ IP ์ฃผ์†Œ๋กœ ํ•ด๊ฒฐ(resolved)๋˜๋Š”์ง€์— ๋”ฐ๋ผ ๋‹ฌ๋ผ์ง‘๋‹ˆ๋‹ค.

"https" ์ž์›์— ๋Œ€ํ•ด์„œ๋Š” ์—ฐ๊ฒฐ ์žฌ์‚ฌ์šฉ์ด URI์˜ ํ˜ธ์ŠคํŠธ์— ๋Œ€ํ•ด ์œ ํšจํ•œ ์ธ์ฆ์„œ๋ฅผ ๊ฐ–๊ณ  ์žˆ๋Š”์ง€์—๋„ ์˜์กดํ•ฉ๋‹ˆ๋‹ค. ์„œ๋ฒ„๊ฐ€ ์ œ์‹œํ•œ ์ธ์ฆ์„œ๋Š” ํด๋ผ์ด์–ธํŠธ๊ฐ€ ํ•ด๋‹น ํ˜ธ์ŠคํŠธ์— ๋Œ€ํ•ด ์ƒˆ TLS ์—ฐ๊ฒฐ์„ ํ˜•์„ฑํ•  ๋•Œ ์ˆ˜ํ–‰ํ•˜๋Š” ๋ชจ๋“  ๊ฒ€์‚ฌ๋ฅผ ์ถฉ์กฑํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค(MUST). ๋‹จ์ผ ์ธ์ฆ์„œ๋Š” ์—ฌ๋Ÿฌ ์˜ค๋ฆฌ์ง„์— ๋Œ€ํ•œ ๊ถŒํ•œ์„ ํ™•๋ฆฝํ•˜๋Š” ๋ฐ ์‚ฌ์šฉ๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ƒ์„ธํ•œ ๊ถŒํ•œ ํŒ๋‹จ ๋ฐฉ๋ฒ•์€ RFC 9110 ์„น์…˜ 4.3์— ์„ค๋ช…๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค.

์ผ๋ถ€ ๋ฐฐํฌ ํ™˜๊ฒฝ์—์„œ๋Š” ์—ฌ๋Ÿฌ ์˜ค๋ฆฌ์ง„์— ๋Œ€ํ•ด ๋™์ผํ•œ ์—ฐ๊ฒฐ์„ ์žฌ์‚ฌ์šฉํ•˜๋ฉด ์š”์ฒญ์ด ์ž˜๋ชป๋œ ์›๋ณธ ์„œ๋ฒ„๋กœ ํ–ฅํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด, TLS ์ข…๋‹จ ์ฒ˜๋ฆฌ๋ฅผ ์ˆ˜ํ–‰ํ•˜๋Š” ๋ฏธ๋“ค๋ฐ•์Šค๊ฐ€ TLS์˜ Server Name Indication ํ™•์žฅ์„ ์‚ฌ์šฉํ•ด ์˜ค๋ฆฌ์ง„ ์„œ๋ฒ„๋ฅผ ์„ ํƒํ•˜๋Š” ๊ฒฝ์šฐ๊ฐ€ ๊ทธ๋ ‡์Šต๋‹ˆ๋‹ค. ์ด๋กœ ์ธํ•ด ํด๋ผ์ด์–ธํŠธ๊ฐ€ ์˜๋„ํ•œ ๋Œ€์ƒ์ด ์•„๋‹Œ ์„œ๋ฒ„๋กœ ์š”์ฒญ์„ ๋ณด๋‚ผ ๊ฐ€๋Šฅ์„ฑ์ด ์ƒ๊ธธ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค(๊ทธ๋Ÿผ์—๋„ ์„œ๋ฒ„๋Š” ๋‹ค๋ฅธ ๋ฉด์—์„œ ๊ถŒํ•œ์ด ์žˆ์„ ์ˆ˜ ์žˆ์Œ).

์„œ๋ฒ„๊ฐ€ ํด๋ผ์ด์–ธํŠธ๊ฐ€ ์—ฐ๊ฒฐ์„ ์žฌ์‚ฌ์šฉํ•˜๊ธฐ๋ฅผ ์›ํ•˜์ง€ ์•Š๋Š” ๊ฒฝ์šฐ, ํ•ด๋‹น ์š”์ฒญ์— ๋Œ€ํ•ด ์ž์‹ ์ด ๊ถŒํ•œ์„ ๊ฐ€์ง€์ง€ ์•Š์Œ์„ ๋‚˜ํƒ€๋‚ด๊ธฐ ์œ„ํ•ด 421 (Misdirected Request) ์ƒํƒœ ์ฝ”๋“œ๋ฅผ ์‘๋‹ต์œผ๋กœ ๋ณด๋‚ผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค(์ž์„ธํ•œ ๋‚ด์šฉ์€ RFC 9110 ์„น์…˜ 15.5.20 ์ฐธ์กฐ).

ํ”„๋ก์‹œ ์‚ฌ์šฉ์„ ์œ„ํ•ด ๊ตฌ์„ฑ๋œ ํด๋ผ์ด์–ธํŠธ๋Š” ํ•ด๋‹น ํ”„๋ก์‹œ๋กœ์˜ ์š”์ฒญ์„ ๋‹จ์ผ ์—ฐ๊ฒฐ์„ ํ†ตํ•ด ๋ณด๋ƒ…๋‹ˆ๋‹ค. ์ฆ‰, ํ”„๋ก์‹œ๋ฅผ ํ†ตํ•ด ์ „์†ก๋˜๋Š” ๋ชจ๋“  ์š”์ฒญ์€ ํ”„๋ก์‹œ๋กœ์˜ ์—ฐ๊ฒฐ์„ ์žฌ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.

9.2. TLS ๊ธฐ๋Šฅ์˜ ์‚ฌ์šฉ

HTTP/2 ๊ตฌํ˜„์ฒด๋Š” TLS ์œ„์—์„œ์˜ HTTP/2์— ๋Œ€ํ•ด TLS version 1.2 ์ด์ƒ์„ ์‚ฌ์šฉํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค(MUST). TLS ์ผ๋ฐ˜ ์‚ฌ์šฉ ์ง€์นจ([TLSBCP])์„ ๋”ฐ๋ฅด๋Š” ๊ฒƒ์ด ๊ถŒ์žฅ๋˜๋ฉฐ, HTTP/2์— ํŠนํ™”๋œ ๋ช‡ ๊ฐ€์ง€ ์ถ”๊ฐ€ ์ œํ•œ์ด ์žˆ์Šต๋‹ˆ๋‹ค(SHOULD).

TLS ๊ตฌํ˜„์ฒด๋Š” TLS ํ™•์žฅ์˜ Server Name Indication (SNI)๋ฅผ ์ง€์›ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค(MUST). ์„œ๋ฒ„๊ฐ€ ๋„๋ฉ”์ธ ์ด๋ฆ„์œผ๋กœ ์‹๋ณ„๋˜๋Š” ๊ฒฝ์šฐ(domain name) ํด๋ผ์ด์–ธํŠธ๋Š” ๋Œ€์ƒ ํ˜ธ์ŠคํŠธ๋ฅผ ๋‚˜ํƒ€๋‚ด๋Š” ๋Œ€์ฒด ๋ฉ”์ปค๋‹ˆ์ฆ˜์„ ์‚ฌ์šฉํ•˜์ง€ ์•Š๋Š” ํ•œ server_name TLS ํ™•์žฅ์„ ๋ฐ˜๋“œ์‹œ ์ „์†กํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค(MUST).

TLS 1.3์„ ํ˜‘์ƒํ•˜๋Š” HTTP/2 ๋ฐฐํฌ์— ๋Œ€ํ•œ ์š”๊ตฌ์‚ฌํ•ญ์€ ์„น์…˜ 9.2.3์— ํฌํ•จ๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค. TLS 1.2 ๋ฐฐํฌ๋Š” 9.2.1 ๋ฐ 9.2.2์˜ ์š”๊ตฌ์‚ฌํ•ญ์„ ๋”ฐ๋ฆ…๋‹ˆ๋‹ค. ๊ตฌํ˜„์ฒด๋Š” ์ค€์ˆ˜๋ฅผ ๋งŒ์กฑํ•˜๋Š” ๊ธฐ๋ณธ๊ฐ’์„ ์ œ๊ณตํ•˜๋Š” ๊ฒƒ์ด ๊ถŒ์žฅ๋˜์ง€๋งŒ, ์ตœ์ข…์ ์œผ๋กœ ๋ฐฐํฌ ํ™˜๊ฒฝ์ด ์ค€์ˆ˜ ์ฑ…์ž„์„ ์ง‘๋‹ˆ๋‹ค.

9.2.1. TLS 1.2 ๊ธฐ๋Šฅ

์ด ์ ˆ์€ HTTP/2์™€ ํ•จ๊ป˜ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” TLS 1.2 ๊ธฐ๋Šฅ ์ง‘ํ•ฉ์— ๋Œ€ํ•œ ์ œํ•œ์„ ์„ค๋ช…ํ•ฉ๋‹ˆ๋‹ค. ๋ฐฐํฌ ์ œ์•ฝ์œผ๋กœ ์ธํ•ด ์ด๋Ÿฌํ•œ ์ œํ•œ์ด ์ถฉ์กฑ๋˜์ง€ ์•Š์„ ๋•Œ TLS ํ˜‘์ƒ์„ ์‹คํŒจ์‹œํ‚ค์ง€ ๋ชปํ•  ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค. ์š”๊ตฌ์‚ฌํ•ญ์„ ์ถฉ์กฑํ•˜์ง€ ์•Š๋Š” HTTP/2 ์—ฐ๊ฒฐ์— ๋Œ€ํ•ด ์—”๋“œํฌ์ธํŠธ๋Š” ์ฆ‰์‹œ ์—ฐ๊ฒฐ์„ ์ข…๋ฃŒํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ(MAY) ์ด ๊ฒฝ์šฐ ์—ฐ๊ฒฐ ์˜ค๋ฅ˜(์„น์…˜ 5.4.1) ์œ ํ˜•์œผ๋กœ INADEQUATE_SECURITY๋ฅผ ๋ณด๋‚ผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

TLS 1.2 ์œ„์˜ HTTP/2 ๋ฐฐํฌ๋Š” ์••์ถ•์„ ๋น„ํ™œ์„ฑํ™”ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค(MUST). TLS ์••์ถ•์€ ๋…ธ์ถœ๋  ์ˆ˜ ์žˆ๋Š” ์ •๋ณด๋ฅผ ์œ ๋ฐœํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค([RFC3749]). ์ผ๋ฐ˜์ ์ธ ์••์ถ•์€ HTTP/2๊ฐ€ ์ œ๊ณตํ•˜๋Š” ๋ฌธ๋งฅ ์ธ์ง€ ์••์ถ• ๊ธฐ๋Šฅ์— ๋น„ํ•ด ๋ถˆํ•„์š”ํ•˜๋ฏ€๋กœ ์‚ฌ์šฉํ•˜์ง€ ์•Š์•„์•ผ ํ•ฉ๋‹ˆ๋‹ค.

TLS 1.2 ์œ„์˜ HTTP/2 ๋ฐฐํฌ๋Š” ์žฌํ˜‘์ƒ(renegotiation)์„ ๋น„ํ™œ์„ฑํ™”ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค(MUST). ์—”๋“œํฌ์ธํŠธ๋Š” TLS ์žฌํ˜‘์ƒ์„ ํ”„๋กœํ† ์ฝœ ์˜ค๋ฅ˜(PROTOCOL_ERROR) ์œ ํ˜•์˜ ์—ฐ๊ฒฐ ์˜ค๋ฅ˜๋กœ ์ฒ˜๋ฆฌํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค(MUST). ๋‹จ, ์žฌํ˜‘์ƒ ๋น„ํ™œ์„ฑํ™”๋กœ ์ธํ•ด ์žฅ๊ธฐ ์—ฐ๊ฒฐ์ด ์•”ํ˜ธํ™”๋œ ๋ฉ”์‹œ์ง€ ์ˆ˜์˜ ํ•œ๊ณ„๋กœ ์ธํ•ด ์‚ฌ์šฉํ•  ์ˆ˜ ์—†๊ฒŒ ๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์—”๋“œํฌ์ธํŠธ๋Š” ํด๋ผ์ด์–ธํŠธ ์ž๊ฒฉ์ฆ๋ช… ๋ณดํ˜ธ๋ฅผ ์œ„ํ•ด ์žฌํ˜‘์ƒ์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์œผ๋‚˜(MAY), ๋ชจ๋“  ์žฌํ˜‘์ƒ์€ ์—ฐ๊ฒฐ ์‚ฌ์ „(preface)์„ ๋ณด๋‚ด๊ธฐ ์ „์— ๋ฐœ์ƒํ•ด์•ผ ํ•˜๋ฉฐ(MUST) ์„œ๋ฒ„๋Š” ์—ฐ๊ฒฐ ์งํ›„ ์žฌํ˜‘์ƒ ์š”์ฒญ์ด ๋ณด์ด๋ฉด ํด๋ผ์ด์–ธํŠธ ์ธ์ฆ์„œ๋ฅผ ์š”์ฒญํ•˜๋Š” ๊ฒƒ์ด ๋ฐ”๋žŒ์งํ•ฉ๋‹ˆ๋‹ค(SHOULD).

์ด๋Š” ํŠน์ • ๋ณดํ˜ธ๋œ ์ž์›์— ๋Œ€ํ•œ ์š”์ฒญ์— ์‘๋‹ตํ•˜์—ฌ ์žฌํ˜‘์ƒ์„ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์„ ์‚ฌ์‹ค์ƒ ๋ฐฉ์ง€ํ•ฉ๋‹ˆ๋‹ค. ํ–ฅํ›„ ๋ช…์„ธ๋Š” ์ด ์‚ฌ์šฉ ์‚ฌ๋ก€๋ฅผ ์ง€์›ํ•  ๋ฐฉ๋ฒ•์„ ์ œ๊ณตํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋˜๋Š” ์„œ๋ฒ„๋Š” ํด๋ผ์ด์–ธํŠธ์—๊ฒŒ ์žฌํ˜‘์ƒ์„ ์ง€์›ํ•˜๋Š” ํ”„๋กœํ† ์ฝœ ์‚ฌ์šฉ์„ ์š”์ฒญํ•˜๊ธฐ ์œ„ํ•ด HTTP_1_1_REQUIRED ์œ ํ˜•์˜ ์˜ค๋ฅ˜๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๊ตฌํ˜„์ฒด๋Š” ์ž„์‹œ ํ‚ค ๊ตํ™˜(ephemeral key exchange)์— ๋Œ€ํ•ด DHE(์œ ํ•œ์ฒด Diffie-Hellman)๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ์•”ํ˜ธ ์ œํ’ˆ๊ตฐ์˜ ๊ฒฝ์šฐ ์ตœ์†Œ 2048๋น„ํŠธ, ECDHE(ํƒ€์›๊ณก์„  Diffie-Hellman)๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ์•”ํ˜ธ ์ œํ’ˆ๊ตฐ์˜ ๊ฒฝ์šฐ ์ตœ์†Œ 224๋น„ํŠธ์˜ ํ‚ค ๊ตํ™˜ ํฌ๊ธฐ๋ฅผ ์ง€์›ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค(MUST). ํด๋ผ์ด์–ธํŠธ๋Š” ์ตœ๋Œ€ 4096๋น„ํŠธ์˜ DHE ํฌ๊ธฐ๋ฅผ ๋ฐ›์•„๋“ค์—ฌ์•ผ ํ•ฉ๋‹ˆ๋‹ค(MUST). ์—”๋“œํฌ์ธํŠธ๋Š” ํ•˜ํ•œ๋ณด๋‹ค ์ž‘์€ ํ‚ค ํฌ๊ธฐ ํ˜‘์ƒ์„ INADEQUATE_SECURITY ์œ ํ˜•์˜ ์—ฐ๊ฒฐ ์˜ค๋ฅ˜๋กœ ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค(MAY).

9.2.2. TLS 1.2 ์•”ํ˜ธ ์ œํ’ˆ๊ตฐ

TLS 1.2 ์œ„์˜ HTTP/2 ๋ฐฐํฌ๋Š” ๋ถ€๋ก A(Prohibited TLS 1.2 Cipher Suites)์— ๋‚˜์—ด๋œ ๊ธˆ์ง€๋œ ์•”ํ˜ธ ์ œํ’ˆ๊ตฐ์„ ์‚ฌ์šฉํ•ด์„œ๋Š” SHOULD NOT ํ•ฉ๋‹ˆ๋‹ค.

์—”๋“œํฌ์ธํŠธ๋Š” ๊ธˆ์ง€๋œ ์•”ํ˜ธ ์ œํ’ˆ๊ตฐ์ด ํ˜‘์ƒ๋œ ๊ฒฝ์šฐ INADEQUATE_SECURITY ์œ ํ˜•์˜ ์—ฐ๊ฒฐ ์˜ค๋ฅ˜๋ฅผ ์ƒ์„ฑํ•˜๊ธฐ๋กœ ์„ ํƒํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค(MAY). ๊ธˆ์ง€๋œ ์•”ํ˜ธ ์ œํ’ˆ๊ตฐ์„ ์‚ฌ์šฉํ•˜๊ธฐ๋กœ ์„ ํƒํ•œ ๋ฐฐํฌ๋Š” ํ•ด๋‹น ์•”ํ˜ธ ์ œํ’ˆ๊ตฐ์„ ์ˆ˜๋ฝํ•  ๊ฒƒ์œผ๋กœ ์•Œ๋ ค์ง„ ํ”ผ์–ด ์ง‘ํ•ฉ๊ณผ๋งŒ ์ƒํ˜ธ์ž‘์šฉํ•  ๊ฒฝ์šฐ์—๋งŒ ์—ฐ๊ฒฐ ์˜ค๋ฅ˜๋ฅผ ํ”ผํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๊ตฌํ˜„์ฒด๋Š” ๊ธˆ์ง€๋˜์ง€ ์•Š์€ ์•”ํ˜ธ ์ œํ’ˆ๊ตฐ์˜ ํ˜‘์ƒ์— ๋Œ€ํ•ด ์ด ์˜ค๋ฅ˜๋ฅผ ๋ฐœ์ƒ์‹œ์ผœ์„œ๋Š” ์•ˆ ๋ฉ๋‹ˆ๋‹ค(MUST NOT). ๋”ฐ๋ผ์„œ ํด๋ผ์ด์–ธํŠธ๊ฐ€ ๊ธˆ์ง€๋˜์ง€ ์•Š์€ ์•”ํ˜ธ ์ œํ’ˆ๊ตฐ์„ ์ œ์•ˆํ•˜๋ฉด, HTTP/2์—์„œ ํ•ด๋‹น ์•”ํ˜ธ ์ œํ’ˆ๊ตฐ์„ ์‚ฌ์šฉํ•  ์ค€๋น„๊ฐ€ ๋˜์–ด ์žˆ์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

๊ธˆ์ง€๋œ ์•”ํ˜ธ ์ œํ’ˆ๊ตฐ ๋ชฉ๋ก์—๋Š” TLS 1.2๊ฐ€ ํ•„์ˆ˜๋กœ ์š”๊ตฌํ•˜๋Š” ์•”ํ˜ธ ์ œํ’ˆ๊ตฐ๋„ ํฌํ•จ๋˜์–ด ์žˆ์–ด, TLS 1.2 ๋ฐฐํฌ๊ฐ€ ํ—ˆ์šฉ๋˜๋Š” ์•”ํ˜ธ ์ œํ’ˆ๊ตฐ ์ง‘ํ•ฉ์ด ์„œ๋กœ ๊ต์ง‘ํ•ฉ์ด ์—†์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด ๋ฌธ์ œ๋ฅผ ํ”ผํ•˜๊ธฐ ์œ„ํ•ด, TLS 1.2๋ฅผ ์‚ฌ์šฉํ•˜๋Š” HTTP/2 ๋ฐฐํฌ๋Š” TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256์„ P-256 ํƒ€์›๊ณก์„ ๊ณผ ํ•จ๊ป˜ ๋ฐ˜๋“œ์‹œ ์ง€์›ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค(MUST).

ํด๋ผ์ด์–ธํŠธ๋Š” HTTP/2๋ฅผ ์ง€์›ํ•˜์ง€ ์•Š๋Š” ์„œ๋ฒ„์™€์˜ ์—ฐ๊ฒฐ์„ ํ—ˆ์šฉํ•˜๊ธฐ ์œ„ํ•ด ๊ธˆ์ง€๋œ ์•”ํ˜ธ ์ œํ’ˆ๊ตฐ์„ ๊ด‘๊ณ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด๋Š” ์„œ๋ฒ„๊ฐ€ HTTP/1.1์„ ์„ ํƒํ•˜๋„๋ก ํ•จ์œผ๋กœ์จ ์—ฐ๊ฒฐ์„ ํ—ˆ์šฉํ•˜์ง€๋งŒ, ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ํ”„๋กœํ† ์ฝœ๊ณผ ์•”ํ˜ธ ์ œํ’ˆ๊ตฐ์ด ๋…๋ฆฝ์ ์œผ๋กœ ์„ ํƒ๋  ๊ฒฝ์šฐ ๊ธˆ์ง€๋œ ์•”ํ˜ธ ์ œํ’ˆ๊ตฐ์œผ๋กœ HTTP/2๊ฐ€ ํ˜‘์ƒ๋  ์œ„ํ—˜์ด ์žˆ์Šต๋‹ˆ๋‹ค.

9.2.3. TLS 1.3 ๊ธฐ๋Šฅ

TLS 1.3์—๋Š” ์ด์ „ ๋ฒ„์ „์—์„œ ์‚ฌ์šฉํ•  ์ˆ˜ ์—†์—ˆ๋˜ ์—ฌ๋Ÿฌ ๊ธฐ๋Šฅ์ด ํฌํ•จ๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค. ์ด ์ ˆ์€ ์ด๋Ÿฌํ•œ ๊ธฐ๋Šฅ๋“ค์˜ ์‚ฌ์šฉ์— ๋Œ€ํ•ด ๋…ผ์˜ํ•ฉ๋‹ˆ๋‹ค.

HTTP/2 ์„œ๋ฒ„๋Š” ํ•ธ๋“œ์…ฐ์ดํฌ ์ดํ›„์˜ TLS 1.3 CertificateRequest ๋ฉ”์‹œ์ง€๋ฅผ ์ „์†กํ•ด์„œ๋Š” ์•ˆ ๋ฉ๋‹ˆ๋‹ค(MUST NOT). HTTP/2 ํด๋ผ์ด์–ธํŠธ๋Š” TLS ํ•ธ๋“œ์…ฐ์ดํฌ ์ดํ›„์˜ CertificateRequest ๋ฉ”์‹œ์ง€๋ฅผ PROTOCOL_ERROR ์œ ํ˜•์˜ ์—ฐ๊ฒฐ ์˜ค๋ฅ˜๋กœ ์ฒ˜๋ฆฌํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค(MUST).

ํ•ธ๋“œ์…ฐ์ดํฌ ์ดํ›„ ์ธ์ฆ(post-handshake authentication)์— ๋Œ€ํ•œ ๊ธˆ์ง€๋Š” ํด๋ผ์ด์–ธํŠธ๊ฐ€ "post_handshake_auth" TLS ํ™•์žฅ์„ ์ œ๊ณตํ–ˆ๋”๋ผ๋„ ์ ์šฉ๋ฉ๋‹ˆ๋‹ค. ์ด ๊ธฐ๋Šฅ์€ ๋‹ค๋ฅธ ํ”„๋กœํ† ์ฝœ์—์„œ ์‚ฌ์šฉ๋  ์ˆ˜ ์žˆ๋„๋ก ๋…๋ฆฝ์ ์œผ๋กœ ๊ด‘๊ณ ๋  ์ˆ˜ ์žˆ์œผ๋‚˜, ํ™•์žฅ์˜ ํฌํ•จ์ด HTTP/2 ๋‚ด์—์„œ์˜ ์ง€์›์„ ์˜๋ฏธํ•˜์ง€๋Š” ์•Š์Šต๋‹ˆ๋‹ค.

[TLS13]๋Š” NewSessionTicket ๋ฐ KeyUpdate์™€ ๊ฐ™์€ ๋‹ค๋ฅธ ํ•ธ๋“œ์…ฐ์ดํฌ ์ดํ›„ ๋ฉ”์‹œ์ง€๋ฅผ ์ •์˜ํ•˜๋ฉฐ, ์ด๋“ค์€ HTTP/2์™€ ์ง์ ‘ ์ƒํ˜ธ์ž‘์šฉํ•˜์ง€ ์•Š์œผ๋ฏ€๋กœ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. TLS ๋ฉ”์‹œ์ง€ ์œ ํ˜•์˜ ์‚ฌ์šฉ์ด ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜-๋ ˆ์ด์–ด ํ”„๋กœํ† ์ฝœ๊ณผ์˜ ์ƒํ˜ธ์ž‘์šฉ์— ์˜์กดํ•˜์ง€ ์•Š๋Š” ํ•œ, ํ•ด๋‹น TLS ๋ฉ”์‹œ์ง€๋Š” ํ•ธ๋“œ์…ฐ์ดํฌ ์™„๋ฃŒ ํ›„ ์ „์†ก๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

TLS early data๋Š” [RFC8470]์˜ ์ง€์นจ์„ ์ค€์ˆ˜ํ•˜๋Š” ํ•œ ์š”์ฒญ ์ „์†ก์— ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค(MAY). ํด๋ผ์ด์–ธํŠธ๋Š” ์ดˆ๊ธฐ ์„œ๋ฒ„ ์„ค์ • ๊ฐ’์„ ๊ฐ€์ •ํ•˜์—ฌ early data์—์„œ ์š”์ฒญ์„ ์ „์†กํ•ฉ๋‹ˆ๋‹ค.


10. ๋ณด์•ˆ ๊ณ ๋ ค์‚ฌํ•ญ

TLS์˜ ์‚ฌ์šฉ์€ ์ด ํ”„๋กœํ† ์ฝœ์˜ ๋งŽ์€ ๋ณด์•ˆ ์†์„ฑ์„ ์ œ๊ณตํ•˜๋Š” ๋ฐ ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค. ์ด ์„น์…˜์˜ ๋งŽ์€ ์ฃผ์žฅ๋“ค์€ Section 9.2์— ์„ค๋ช…๋œ ๋Œ€๋กœ TLS๊ฐ€ ์‚ฌ์šฉ๋˜์ง€ ์•Š์œผ๋ฉด ์„ฑ๋ฆฝํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

10.1. ์„œ๋ฒ„ ๊ถŒํ•œ

HTTP/2๋Š” ํŠน์ • ์‘๋‹ต์„ ์ œ๊ณตํ•˜๋Š” ์„œ๋ฒ„๊ฐ€ ๊ถŒํ•œ์ด ์žˆ๋Š”์ง€ ํŒ๋‹จํ•˜๊ธฐ ์œ„ํ•ด HTTP์˜ ๊ถŒํ•œ(authority) ์ •์˜์— ์˜์กดํ•ฉ๋‹ˆ๋‹ค(์ž์„ธํ•œ ๋‚ด์šฉ์€ RFC 9110 ์„น์…˜ 4.3 ์ฐธ์กฐ). ์ด๋Š” "http" URI ์Šคํ‚ด์— ๋Œ€ํ•ด ๋กœ์ปฌ ์ด๋ฆ„ ํ•ด์„ ๋ฐ "https" ์Šคํ‚ด์— ๋Œ€ํ•ด ์ธ์ฆ๋œ ์„œ๋ฒ„ ์‹ ์›์— ์˜์กดํ•ฉ๋‹ˆ๋‹ค.

10.2. ๊ต์ฐจ-ํ”„๋กœํ† ์ฝœ ๊ณต๊ฒฉ

๊ต์ฐจ-ํ”„๋กœํ† ์ฝœ ๊ณต๊ฒฉ์—์„œ ๊ณต๊ฒฉ์ž๋Š” ํด๋ผ์ด์–ธํŠธ๋ฅผ ๋‹ค๋ฅธ ํ”„๋กœํ† ์ฝœ์„ ์ดํ•ดํ•˜๋Š” ์„œ๋ฒ„๋กœ ํŠธ๋žœ์žญ์…˜์„ ์‹œ์ž‘ํ•˜๊ฒŒ ๋งŒ๋“ญ๋‹ˆ๋‹ค. ๊ณต๊ฒฉ์ž๋Š” ํ•ด๋‹น ํŠธ๋žœ์žญ์…˜์ด ๋‘ ๋ฒˆ์งธ ํ”„๋กœํ† ์ฝœ์—์„œ ์œ ํšจํ•œ ํŠธ๋žœ์žญ์…˜์œผ๋กœ ๋ณด์ด๋„๋ก ๋งŒ๋“ค ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์›น ๋ฌธ๋งฅ์˜ ๊ธฐ๋Šฅ๊ณผ ๊ฒฐํ•ฉ๋˜๋ฉด, ์ด๋Š” ์‚ฌ์„ค ๋„คํŠธ์›Œํฌ์˜ ์ ์ ˆํžˆ ๋ณดํ˜ธ๋˜์ง€ ์•Š์€ ์„œ๋ฒ„์™€ ์ƒํ˜ธ์ž‘์šฉํ•˜๊ธฐ ์œ„ํ•ด ์•…์šฉ๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

ALPN ์‹๋ณ„์ž๋ฅผ ์‚ฌ์šฉํ•œ TLS ํ•ธ๋“œ์…ฐ์ดํฌ ์™„๋ฃŒ๋Š” ๊ต์ฐจ-ํ”„๋กœํ† ์ฝœ ๊ณต๊ฒฉ์— ๋Œ€ํ•œ ์ถฉ๋ถ„ํ•œ ๋ณดํ˜ธ๋กœ ๊ฐ„์ฃผ๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ALPN์€ ์„œ๋ฒ„๊ฐ€ HTTP/2 ์ง„ํ–‰์— ๋™์˜ํ•จ์„ ๊ธ์ •์ ์œผ๋กœ ํ‘œ์‹œํ•˜์—ฌ ๋‹ค๋ฅธ TLS ๊ธฐ๋ฐ˜ ํ”„๋กœํ† ์ฝœ์— ๋Œ€ํ•œ ๊ณต๊ฒฉ์„ ๋ฐฉ์ง€ํ•ฉ๋‹ˆ๋‹ค.

TLS์˜ ์•”ํ˜ธํ™”๋Š” ๊ณต๊ฒฉ์ž๊ฐ€ ํ‰๋ฌธ ํ”„๋กœํ† ์ฝœ์— ๋Œ€ํ•œ ๊ต์ฐจ-ํ”„๋กœํ† ์ฝœ ๊ณต๊ฒฉ์— ์‚ฌ์šฉํ•  ๋ฐ์ดํ„ฐ๋ฅผ ์ œ์–ดํ•˜๊ธฐ ์–ด๋ ต๊ฒŒ ๋งŒ๋“ญ๋‹ˆ๋‹ค.

ํ‰๋ฌธ ๋ฒ„์ „์˜ HTTP/2๋Š” ๊ต์ฐจ-ํ”„๋กœํ† ์ฝœ ๊ณต๊ฒฉ์— ๋Œ€ํ•ด ์ตœ์†Œํ•œ์˜ ๋ณดํ˜ธ๋งŒ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค. ์—ฐ๊ฒฐ ํ”„๋ฆฌํŽ˜์ด์Šค(์„น์…˜ 3.4)์—๋Š” HTTP/1.1 ์„œ๋ฒ„๋ฅผ ํ˜ผ๋ž€์‹œํ‚ค๋„๋ก ์„ค๊ณ„๋œ ๋ฌธ์ž์—ด์ด ํฌํ•จ๋˜์–ด ์žˆ์ง€๋งŒ, ๋‹ค๋ฅธ ํ”„๋กœํ† ์ฝœ์— ๋Œ€ํ•œ ํŠน๋ณ„ํ•œ ๋ณดํ˜ธ๋Š” ์ œ๊ณต๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

10.3. ์ค‘๊ฐœ์ž ์บก์Аํ™” ๊ณต๊ฒฉ

HPACK์€ ๋‹ค๋ฅธ HTTP ๋ฒ„์ „์—์„œ ๊ตฌ๋ถ„์ž๋กœ ์ฒ˜๋ฆฌ๋  ์ˆ˜ ์žˆ๋Š” ํ•„๋“œ ์ด๋ฆ„๊ณผ ๊ฐ’์„ ์ธ์ฝ”๋”ฉํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ—ˆ์šฉํ•ฉ๋‹ˆ๋‹ค. HTTP/2 ์š”์ฒญ ๋˜๋Š” ์‘๋‹ต์„ ๋ณ€ํ™˜ํ•˜๋Š” ์ค‘๊ฐœ์ž๋Š” ๋ฉ”์‹œ์ง€๋ฅผ ๋‹ค๋ฅธ HTTP ๋ฒ„์ „์œผ๋กœ ๋ณ€ํ™˜ํ•˜๊ธฐ ์ „์— ์„น์…˜ 8.2์˜ ๊ทœ์น™์— ๋”ฐ๋ผ ํ•„๋“œ๋ฅผ ๊ฒ€์ฆํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค(MUST). ์ž˜๋ชป๋œ ๊ตฌ๋ถ„์ž๋ฅผ ํฌํ•จํ•œ ํ•„๋“œ๋ฅผ ๋ณ€ํ™˜ํ•˜๋ฉด ์ˆ˜์‹ ์ž๊ฐ€ ๋ฉ”์‹œ์ง€๋ฅผ ์ž˜๋ชป ํ•ด์„ํ•˜๋„๋ก ๋งŒ๋“ค ์ˆ˜ ์žˆ์œผ๋ฉฐ, ์ด๋Š” ๊ณต๊ฒฉ์ž์—๊ฒŒ ์•…์šฉ๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์„น์…˜ 8.2๋Š” ์˜์‚ฌ-ํ—ค๋” ํ•„๋“œ์˜ ๊ฒ€์ฆ์— ๋Œ€ํ•œ ๊ตฌ์ฒด์  ๊ทœ์น™์„ ํฌํ•จํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ์ด๋Ÿฌํ•œ ํ•„๋“œ ๊ฐ’์ด ์‚ฌ์šฉ๋˜๋Š” ๊ฒฝ์šฐ ์ถ”๊ฐ€ ๊ฒ€์ฆ์ด ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค. ํŠนํžˆ ":scheme", ":authority" ๋ฐ ":path"๊ฐ€ ํ•˜๋‚˜์˜ URI ๋ฌธ์ž์—ด๋กœ ๊ฒฐํ•ฉ๋  ๋•Œ ์ถ”๊ฐ€ ๊ฒ€์ฆ์ด ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค([RFC3986]). ์œ ์‚ฌํ•œ ๋ฌธ์ œ๋Š” ํ•ด๋‹น URI ๋˜๋Š” ":path"๊ฐ€ ":method"์™€ ๊ฒฐํ•ฉ๋˜์–ด ์š”์ฒญ ๋ผ์ธ์„ ๊ตฌ์„ฑํ•  ๋•Œ๋„ ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋‹จ์ˆœ ์—ฐ๊ฒฐ์€ ์ž…๋ ฅ ๊ฐ’์ด ์™„์ „ํžˆ ๊ฒ€์ฆ๋˜์ง€ ์•Š๋Š” ํ•œ ์•ˆ์ „ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

์ค‘๊ฐœ์ž๋Š” ํ•„๋“œ ์ด๋ฆ„์ด๋‚˜ ๊ฐ’์ด ์œ ํšจํ•˜์ง€ ์•Š์€ ํ•„๋“œ๋ฅผ ๋‹ค๋ฅธ ์ด์œ ๋กœ ๊ฑฐ๋ถ€ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค โ€” ํŠนํžˆ RFC 9110์˜ ์„น์…˜ 5์— ์ •์˜๋œ HTTP ABNF ๋ฌธ๋ฒ•์— ๋ถ€ํ•ฉํ•˜์ง€ ์•Š๋Š” ํ•„๋“œ๋“ค์ž…๋‹ˆ๋‹ค. ์ตœ์†Œํ•œ์˜ ๊ฒ€์ฆ(์„น์…˜ 8.2)์ด ์ˆ˜ํ–‰๋˜์ง€ ์•Š๋Š” ์ค‘๊ฐœ์ž๋Š” ์œ ํšจํ•˜์ง€ ์•Š์€ ํ•„๋“œ ์ด๋ฆ„ ๋˜๋Š” ๊ฐ’์„ ํฌํ•จํ•œ ๋ฉ”์‹œ์ง€๋ฅผ ์ „๋‹ฌํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์ค‘๊ฐœ์ž๋Š” ์ „๋‹ฌ ์ „์— ์ œ๊ฑฐํ•ด์•ผ ํ•˜๋Š” ํ•„๋“œ๋ฅผ ์ˆ˜์‹ ํ•˜๋ฉด(์˜ˆ: RFC 9110 ์„น์…˜ 7.6.1 ์ฐธ์กฐ) ํ•ด๋‹น ํ—ค๋” ํ•„๋“œ๋ฅผ ์ œ๊ฑฐํ•˜๊ฑฐ๋‚˜ ๋Œ€์ฒดํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค(MUST). ๋˜ํ•œ ์ค‘๊ฐœ์ž๋Š” Content-Length ํ•„๋“œ๋ฅผ ํฌํ•จํ•œ ๋ฉ”์‹œ์ง€๋ฅผ ์ „๋‹ฌํ•  ๋•Œ ๋ฉ”์‹œ์ง€๊ฐ€ ์˜ฌ๋ฐ”๋ฅด๊ฒŒ ํ˜•์„ฑ๋˜์—ˆ๋Š”์ง€ ์ฃผ์˜ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค(์„น์…˜ 8.1.1). ์ด๋Š” ๋ฉ”์‹œ์ง€๊ฐ€ ์ดํ›„ HTTP/1.1๋กœ ๋ณ€ํ™˜๋˜๋”๋ผ๋„ ํ”„๋ ˆ์ด๋ฐ์ด ์˜ฌ๋ฐ”๋ฅด๊ฒŒ ์œ ์ง€๋˜๋„๋ก ๋ณด์žฅํ•ฉ๋‹ˆ๋‹ค.

10.4. ํ‘ธ์‹œ๋œ ์‘๋‹ต์˜ ์บ์‹œ ๊ฐ€๋Šฅ์„ฑ

ํ‘ธ์‹œ๋œ ์‘๋‹ต์€ ํด๋ผ์ด์–ธํŠธ์˜ ๋ช…์‹œ์  ์š”์ฒญ์„ ๊ฐ€์ง€๊ณ  ์žˆ์ง€ ์•Š์Šต๋‹ˆ๋‹ค; ์š”์ฒญ์€ ์„œ๋ฒ„๊ฐ€ PUSH_PROMISE ํ”„๋ ˆ์ž„์—์„œ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค.

ํ‘ธ์‹œ๋œ ์‘๋‹ต์„ ์บ์‹ฑํ•˜๋Š” ๊ฒƒ์€ ์›๋ณธ ์„œ๋ฒ„๊ฐ€ Cache-Control ํ—ค๋” ํ•„๋“œ๋กœ ์ œ๊ณตํ•˜๋Š” ์ง€์นจ์— ๋”ฐ๋ผ ๊ฐ€๋Šฅํ•˜์ง€๋งŒ, ๋‹จ์ผ ์„œ๋ฒ„๊ฐ€ ์—ฌ๋Ÿฌ ํ…Œ๋„ŒํŠธ๋ฅผ ํ˜ธ์ŠคํŒ…ํ•˜๋Š” ๊ฒฝ์šฐ ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด ์„œ๋ฒ„๋Š” ์—ฌ๋Ÿฌ ์‚ฌ์šฉ์ž์—๊ฒŒ URI ๊ณต๊ฐ„์˜ ์ž‘์€ ๋ถ€๋ถ„์„ ๊ฐ๊ฐ ์ œ๊ณตํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์—ฌ๋Ÿฌ ํ…Œ๋„ŒํŠธ๊ฐ€ ๋™์ผ ์„œ๋ฒ„์˜ ๊ณต๊ฐ„์„ ๊ณต์œ ํ•˜๋Š” ๊ฒฝ์šฐ, ํ•ด๋‹น ์„œ๋ฒ„๋Š” ํ…Œ๋„ŒํŠธ๊ฐ€ ์ž์‹ ์—๊ฒŒ ๊ถŒํ•œ์ด ์—†๋Š” ๋ฆฌ์†Œ์Šค์˜ ํ‘œํ˜„์„ ํ‘ธ์‹œํ•˜์ง€ ๋ชปํ•˜๋„๋ก ๋ณด์žฅํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค(MUST). ์ด๋ฅผ ๊ฐ•์ œํ•˜์ง€ ๋ชปํ•˜๋ฉด ํ…Œ๋„ŒํŠธ๊ฐ€ ๊ถŒํ•œ ์žˆ๋Š” ํ…Œ๋„ŒํŠธ๊ฐ€ ์ œ๊ณตํ•˜๋Š” ์‹ค์ œ ํ‘œํ˜„์„ ์บ์‹œ์—์„œ ๋ฎ์–ด์“ธ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์›๋ณธ ์„œ๋ฒ„๊ฐ€ ๊ถŒํ•œ์„ ๊ฐ–์ง€ ์•Š์€ ํ‘ธ์‹œ๋œ ์‘๋‹ต์€ ์‚ฌ์šฉ๋˜๊ฑฐ๋‚˜ ์บ์‹œ๋˜์–ด์„œ๋Š” ์•ˆ ๋ฉ๋‹ˆ๋‹ค(MUST NOT).

10.5. ์„œ๋น„์Šค ๊ฑฐ๋ถ€ ๊ณ ๋ ค์‚ฌํ•ญ

HTTP/2 ์—ฐ๊ฒฐ์€ HTTP/1.1 ์—ฐ๊ฒฐ๋ณด๋‹ค ๋” ๋งŽ์€ ์ž์› ํ• ๋‹น์„ ์š”๊ตฌํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ํ•„๋“œ ์„น์…˜ ์••์ถ•๊ณผ ํ๋ฆ„ ์ œ์–ด๋Š” ๋” ๋งŽ์€ ์ƒํƒœ๋ฅผ ์œ ์ง€ํ•ด์•ผ ํ•˜๋ฉฐ, ์ด๋Ÿฌํ•œ ๊ธฐ๋Šฅ์˜ ์„ค์ •์€ ๋ฉ”๋ชจ๋ฆฌ ์•ฝ์†์„ ์—„๊ฒฉํžˆ ์ œํ•œํ•˜๋„๋ก ๋ณด์žฅํ•ฉ๋‹ˆ๋‹ค.

PUSH_PROMISE ํ”„๋ ˆ์ž„์˜ ์ˆ˜๋Š” ๋™์ผํ•œ ๋ฐฉ์‹์œผ๋กœ ์ œ์•ฝ๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ์„œ๋ฒ„ ํ‘ธ์‹œ๋ฅผ ์ˆ˜์šฉํ•˜๋Š” ํด๋ผ์ด์–ธํŠธ๋Š” "reserved (remote)" ์ƒํƒœ๋กœ ํ—ˆ์šฉ๋˜๋Š” ์ŠคํŠธ๋ฆผ ์ˆ˜๋ฅผ ์ œํ•œํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค(SHOULD). ๊ณผ๋„ํ•œ ์ˆ˜์˜ ์„œ๋ฒ„ ํ‘ธ์‹œ ์ŠคํŠธ๋ฆผ์€ ์„น์…˜ 5.4.2์˜ ENHANCE_YOUR_CALM ์œ ํ˜•์˜ ์ŠคํŠธ๋ฆผ ์˜ค๋ฅ˜๋กœ ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์—ฌ๋Ÿฌ HTTP/2 ๊ตฌํ˜„์ด ์„œ๋น„์Šค ๊ฑฐ๋ถ€ ์ทจ์•ฝ์ ์ด ์žˆ์Œ์ด ๋ฐœ๊ฒฌ๋˜์—ˆ์Šต๋‹ˆ๋‹ค([NFLX-2019-002]). ์•„๋ž˜๋Š” ๊ตฌํ˜„์ฒด๊ฐ€ ์„œ๋น„์Šค ๊ฑฐ๋ถ€ ๊ณต๊ฒฉ์— ์ทจ์•ฝํ•ด์งˆ ์ˆ˜ ์žˆ๋Š” ์•Œ๋ ค์ง„ ๋ฐฉ์‹๋“ค์˜ ๋ชฉ๋ก์ž…๋‹ˆ๋‹ค:

  • ์•„์›ƒ๋ฐ”์šด๋“œ ๋Œ€๊ธฐ ํ”„๋ ˆ์ž„์„ ๋น„ํšจ์œจ์ ์œผ๋กœ ์ถ”์ ํ•˜๋ฉด ๊ณต๊ฒฉ์ž๊ฐ€ ๋Œ€๋Ÿ‰์˜ ํ”„๋ ˆ์ž„์„ ์†ก์‹  ๋Œ€๊ธฐ์—ด์— ์Œ“์ด๊ฒŒ ํ•˜์—ฌ ๊ณผ๋ถ€ํ•˜๋ฅผ ์ผ์œผํ‚ฌ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ํ”ผ์–ด๋Š” ์—ฌ๋Ÿฌ ๊ธฐ๋ฒ•์œผ๋กœ ๋Œ€๋Ÿ‰์˜ ํ”„๋ ˆ์ž„ ์ƒ์„ฑ์„ ์œ ๋ฐœํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค:

    • WINDOW_UPDATE ํ”„๋ ˆ์ž„์— ์ž‘์€ ์ฆ๊ฐ€๋Ÿ‰์„ ์ œ๊ณตํ•˜๋ฉด ์†ก์‹ ์ž๊ฐ€ ๋งŽ์€ ์ˆ˜์˜ DATA ํ”„๋ ˆ์ž„์„ ์ƒ์„ฑํ•˜๊ฒŒ ๋งŒ๋“ค ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
    • ์—”๋“œํฌ์ธํŠธ๋Š” PING ํ”„๋ ˆ์ž„์— ์‘๋‹ตํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.
    • ๊ฐ SETTINGS ํ”„๋ ˆ์ž„์€ ํ™•์ธ ์‘๋‹ต์„ ํ•„์š”๋กœ ํ•ฉ๋‹ˆ๋‹ค.
    • ์ž˜๋ชป๋œ ์š”์ฒญ(๋˜๋Š” ์„œ๋ฒ„ ํ‘ธ์‹œ)์€ ํ”ผ์–ด๊ฐ€ RST_STREAM ํ”„๋ ˆ์ž„์„ ์‘๋‹ต์œผ๋กœ ๋ณด๋‚ด๊ฒŒ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  • ๊ณต๊ฒฉ์ž๊ฐ€ HTTP/2 ๊ณ„์ธต์—์„œ ๋งŽ์€ ์–‘์˜ ํ๋ฆ„ ์ œ์–ด ํฌ๋ ˆ๋”ง์„ ์ œ๊ณตํ•˜์ง€๋งŒ TCP ๊ณ„์ธต์—์„œ๋Š” ํฌ๋ ˆ๋”ง์„ ๋ณด๋ฅ˜ํ•จ์œผ๋กœ์จ ํ”„๋ ˆ์ž„ ์ „์†ก์„ ๋ง‰์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. TCP ํ•œ๊ณ„๋ฅผ ๊ณ ๋ คํ•˜์ง€ ์•Š๊ณ  ํ”„๋ ˆ์ž„์„ ์ƒ์„ฑํ•˜๊ณ  ๋ณด๊ด€ํ•˜๋Š” ์—”๋“œํฌ์ธํŠธ๋Š” ์ž์› ์†Œ์ง„์— ์ทจ์•ฝํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  • ์ž‘๊ฑฐ๋‚˜ ๋น„์–ด ์žˆ๋Š” ๋งŽ์€ ์ˆ˜์˜ ํ”„๋ ˆ์ž„์€ ํ”ผ์–ด๊ฐ€ ํ”„๋ ˆ์ž„ ํ—ค๋” ์ฒ˜๋ฆฌ์— ๋งŽ์€ ์‹œ๊ฐ„์„ ์†Œ๋น„ํ•˜๊ฒŒ ๋งŒ๋“ค ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋‹ค๋งŒ ์ŠคํŠธ๋ฆผ ์ข…๋ฃŒ ์‹œ ๋ณด๋‚ผ ์ˆ˜ ์žˆ๋Š” ๋นˆ DATA ๋˜๋Š” CONTINUATION ํ”„๋ ˆ์ž„๊ณผ ๊ฐ™์ด ์ž‘์€ ํ”„๋ ˆ์ž„์˜ ์ผ๋ถ€ ์‚ฌ์šฉ์€ ์ •๋‹นํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  • SETTINGS ํ”„๋ ˆ์ž„์€ ํ”ผ์–ด๊ฐ€ ์ถ”๊ฐ€ ์ฒ˜๋ฆฌ ์‹œ๊ฐ„์„ ์†Œ๋น„ํ•˜๋„๋ก ์•…์šฉ๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด๋Š” ์„ค์ •์„ ์“ธ๋ฐ์—†์ด ๋ณ€๊ฒฝํ•˜๊ฑฐ๋‚˜ ์—ฌ๋Ÿฌ ์ •์˜๋˜์ง€ ์•Š์€ ์„ค์ •์„ ๋ณด๋‚ด๊ฑฐ๋‚˜ ๋™์ผํ•œ ์„ค์ •์„ ํ•œ ํ”„๋ ˆ์ž„ ๋‚ด์—์„œ ์—ฌ๋Ÿฌ ๋ฒˆ ๋ณ€๊ฒฝํ•จ์œผ๋กœ์จ ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  • PRIORITY ํ”„๋ ˆ์ž„์œผ๋กœ ์žฌ์šฐ์„ ์ˆœ์œ„ ์ฒ˜๋ฆฌ๋ฅผ ํ•˜๋Š” ๊ฒƒ์€ ์ƒ๋‹นํ•œ ์ฒ˜๋ฆฌ ์‹œ๊ฐ„์„ ํ•„์š”๋กœ ํ•˜๋ฉฐ ๋งŽ์€ PRIORITY ํ”„๋ ˆ์ž„์ด ์ „์†ก๋˜๋ฉด ๊ณผ๋ถ€ํ•˜๋กœ ์ด์–ด์งˆ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  • ํ•„๋“œ ์„น์…˜ ์••์ถ•์€ ๊ณต๊ฒฉ์ž๊ฐ€ ์ฒ˜๋ฆฌ ์ž์›์„ ๋‚ญ๋น„ํ•˜๋„๋ก ํ•˜๋Š” ๊ธฐํšŒ๋ฅผ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค; ์ž ์žฌ์  ๋‚จ์šฉ์— ๋Œ€ํ•œ ์ž์„ธํ•œ ๋‚ด์šฉ์€ HPACK ๋ช…์„ธ([COMPRESSION])๋ฅผ ์ฐธ์กฐํ•˜์‹ญ์‹œ์˜ค.
  • SETTINGS์—์„œ์˜ ์ œํ•œ์€ ์ฆ‰์‹œ ์ค„์ผ ์ˆ˜ ์—†์œผ๋ฏ€๋กœ ์—”๋“œํฌ์ธํŠธ๋Š” ํ”ผ์–ด์˜ ๋™์ž‘์œผ๋กœ ์ธํ•ด ์ƒˆ ์ œํ•œ์„ ์ดˆ๊ณผํ•  ์œ„ํ—˜์— ๋…ธ์ถœ๋ฉ๋‹ˆ๋‹ค. ํŠนํžˆ ์—ฐ๊ฒฐ์„ ์„ค์ •ํ•œ ์งํ›„์—๋Š” ์„œ๋ฒ„๊ฐ€ ์„ค์ •ํ•œ ์ œํ•œ์„ ํด๋ผ์ด์–ธํŠธ๊ฐ€ ์•Œ ์ˆ˜ ์—†์–ด ์‰ฝ๊ฒŒ ์ดˆ๊ณผ๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์„œ๋น„์Šค ๊ฑฐ๋ถ€์— ์•…์šฉ๋  ์ˆ˜ ์žˆ๋Š” ๋Œ€๋ถ€๋ถ„์˜ ๊ธฐ๋Šฅ โ€” ์˜ˆ๋ฅผ ๋“ค์–ด SETTINGS ๋ณ€๊ฒฝ, ์ž‘์€ ํ”„๋ ˆ์ž„, ํ•„๋“œ ์„น์…˜ ์••์ถ• โ€” ์€ ์ •๋‹นํ•œ ์‚ฌ์šฉ ์‚ฌ๋ก€๋„ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด๋Ÿฌํ•œ ๊ธฐ๋Šฅ๋“ค์€ ๋ถˆํ•„์š”ํ•˜๊ฑฐ๋‚˜ ๊ณผ๋„ํ•˜๊ฒŒ ์‚ฌ์šฉ๋  ๋•Œ๋งŒ ๋ถ€๋‹ด์ด ๋ฉ๋‹ˆ๋‹ค.

์ด๋Ÿฌํ•œ ๊ธฐ๋Šฅ์˜ ์‚ฌ์šฉ์„ ๋ชจ๋‹ˆํ„ฐ๋งํ•˜์ง€ ์•Š๋Š” ์—”๋“œํฌ์ธํŠธ๋Š” ์„œ๋น„์Šค ๊ฑฐ๋ถ€ ์œ„ํ—˜์— ๋…ธ์ถœ๋ฉ๋‹ˆ๋‹ค. ๊ตฌํ˜„์ฒด๋Š” ์ด๋Ÿฌํ•œ ๊ธฐ๋Šฅ ์‚ฌ์šฉ์„ ์ถ”์ ํ•˜๊ณ  ์‚ฌ์šฉ ํ•œ๋„๋ฅผ ์„ค์ •ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค(SHOULD). ์˜์‹ฌ์Šค๋Ÿฌ์šด ํ™œ๋™์€ ENHANCE_YOUR_CALM ์œ ํ˜•์˜ ์—ฐ๊ฒฐ ์˜ค๋ฅ˜๋กœ ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค(MAY).

10.5.1. ํ•„๋“œ ๋ธ”๋ก ํฌ๊ธฐ ์ œํ•œ

ํฐ ํ•„๋“œ ๋ธ”๋ก(์„น์…˜ 4.3)์€ ๊ตฌํ˜„์ฒด๊ฐ€ ๋งŽ์€ ์–‘์˜ ์ƒํƒœ๋ฅผ ํ• ๋‹นํ•˜๊ฒŒ ๋งŒ๋“ค ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋ผ์šฐํŒ…์— ์ค‘์š”ํ•œ ํ•„๋“œ ๋ผ์ธ์€ ํ•„๋“œ ๋ธ”๋ก์˜ ๋์— ๋‚˜ํƒ€๋‚  ์ˆ˜ ์žˆ์–ด ํ•„๋“œ๋ฅผ ์ตœ์ข… ๋ชฉ์ ์ง€๋กœ ์ŠคํŠธ๋ฆฌ๋ฐํ•˜๋Š” ๊ฒƒ์„ ๋ฐฉํ•ดํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด๋Ÿฌํ•œ ์ˆœ์„œ์™€ ์บ์‹œ ์ •ํ•ฉ์„ฑ ๋ณด์žฅ ๋“ฑ์˜ ์ด์œ ๋กœ ์—”๋“œํฌ์ธํŠธ๋Š” ์ „์ฒด ํ•„๋“œ ๋ธ”๋ก์„ ๋ฒ„ํผ๋งํ•  ํ•„์š”๊ฐ€ ์žˆ์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ํ•„๋“œ ๋ธ”๋ก์˜ ํฌ๊ธฐ์— ๋Œ€ํ•œ ํ•˜๋“œํ•œ ํ•œ๊ณ„๊ฐ€ ์—†์œผ๋ฏ€๋กœ ์ผ๋ถ€ ์—”๋“œํฌ์ธํŠธ๋Š” ํฐ ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ํ•„๋“œ ๋ธ”๋ก์— ํ• ๋‹นํ•ด์•ผ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์—”๋“œํฌ์ธํŠธ๋Š” SETTINGS_MAX_HEADER_LIST_SIZE๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ํ”ผ์–ด์—๊ฒŒ ๋น„์••์ถ• ํ•„๋“œ ๋ธ”๋ก ํฌ๊ธฐ์— ์ ์šฉ๋  ์ˆ˜ ์žˆ๋Š” ํ•œ๋„๋ฅผ ์•Œ๋ฆด ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด ์„ค์ •์€ ๊ถŒ๊ณ ์ (advisory)์ด๋ฏ€๋กœ ์—”๋“œํฌ์ธํŠธ๋Š” ์ด ํ•œ๋„๋ฅผ ์ดˆ๊ณผํ•˜๋Š” ํ•„๋“œ ๋ธ”๋ก์„ ๋ณด๋‚ผ ์ˆ˜ ์žˆ์œผ๋ฉฐ, ๊ทธ ๊ฒฐ๊ณผ ์š”์ฒญ ๋˜๋Š” ์‘๋‹ต์ด ์ž˜๋ชป๋œ ํ˜•์‹์œผ๋กœ ์ฒ˜๋ฆฌ๋  ์œ„ํ—˜์„ ๊ฐ์ˆ˜ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด ์„ค์ •์€ ์—ฐ๊ฒฐ๋ณ„์ด๋ฏ€๋กœ ์–ด๋–ค ์š”์ฒญ์ด๋‚˜ ์‘๋‹ต์ด ๋” ๋‚ฎ์€ ์•Œ ์ˆ˜ ์—†๋Š” ํ•œ๋„๋ฅผ ๊ฐ€์ง„ ํ™‰์„ ๋งŒ๋‚  ๊ฐ€๋Šฅ์„ฑ์ด ์žˆ์Šต๋‹ˆ๋‹ค. ์ค‘๊ฐœ์ž๋Š” ์„œ๋กœ ๋‹ค๋ฅธ ํ”ผ์–ด๊ฐ€ ์ œ์‹œํ•œ ๊ฐ’์„ ์ „๋‹ฌํ•˜์—ฌ ์ด ๋ฌธ์ œ๋ฅผ ํšŒํ”ผํ•˜๋ ค ์‹œ๋„ํ•  ์ˆ˜ ์žˆ์ง€๋งŒ, ๊ทธ๋ ‡๊ฒŒ ํ•  ์˜๋ฌด๋Š” ์—†์Šต๋‹ˆ๋‹ค.

์„œ๋ฒ„๊ฐ€ ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์žˆ๋Š” ๊ฒƒ๋ณด๋‹ค ํฐ ํ•„๋“œ ๋ธ”๋ก์„ ์ˆ˜์‹ ํ•˜๋ฉด HTTP 431(ํ—ค๋” ํ•„๋“œ๊ฐ€ ๋„ˆ๋ฌด ํผ) ์ƒํƒœ ์ฝ”๋“œ๋ฅผ ๋ณด๋‚ผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค([RFC6585]). ํด๋ผ์ด์–ธํŠธ๋Š” ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์—†๋Š” ์‘๋‹ต์„ ํ๊ธฐํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ํ•„๋“œ ๋ธ”๋ก์€ ์—ฐ๊ฒฐ ์ƒํƒœ๋ฅผ ์ผ๊ด€๋˜๊ฒŒ ์œ ์ง€ํ•˜๊ธฐ ์œ„ํ•ด ์ฒ˜๋ฆฌ๋˜์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค(MUST), ๋‹จ ์—ฐ๊ฒฐ์ด ๋‹ซํžˆ๋Š” ๊ฒฝ์šฐ๋Š” ์ œ์™ธ์ž…๋‹ˆ๋‹ค.

10.5.2. CONNECT ๊ด€๋ จ ๋ฌธ์ œ

CONNECT ๋ฉ”์„œ๋“œ๋Š” ํ”„๋ก์‹œ์— ๋ถˆ๊ท ํ˜•์ ์ธ ๋ถ€ํ•˜๋ฅผ ์ƒ์„ฑํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ŠคํŠธ๋ฆผ ์ƒ์„ฑ์€ TCP ์—ฐ๊ฒฐ์˜ ์ƒ์„ฑ ๋ฐ ์œ ์ง€์— ๋น„ํ•ด ์ƒ๋Œ€์ ์œผ๋กœ ๋น„์šฉ์ด ์ ๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค. ๋˜ํ•œ ํ”„๋ก์‹œ๋Š” CONNECT ์š”์ฒญ์„ ์šด๋ฐ˜ํ•œ ์ŠคํŠธ๋ฆผ์ด ๋‹ซํžŒ ์ดํ›„์—๋„ ์•„์›ƒ๊ณ ์ž‰ TCP ์—ฐ๊ฒฐ์„ ์œ„ํ•ด ์ž์›์„ ์œ ์ง€ํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ, ์ด๋Š” ํ•ด๋‹น ์—ฐ๊ฒฐ์ด TIME_WAIT ์ƒํƒœ์— ์žˆ๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ ํ”„๋ก์‹œ๋Š” SETTINGS_MAX_CONCURRENT_STREAMS๋งŒ์œผ๋กœ CONNECT ์š”์ฒญ์ด ์†Œ๋น„ํ•˜๋Š” ์ž์›์„ ์ œํ•œํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.

10.6. ์••์ถ• ์‚ฌ์šฉ

์••์ถ•์€ ๊ณต๊ฒฉ์ž๊ฐ€ ๋™์ผํ•œ ๋ฌธ๋งฅ์—์„œ ๊ณต๊ฒฉ์ž๊ฐ€ ์ œ์–ดํ•˜๋Š” ๋ฐ์ดํ„ฐ์™€ ๋น„๋ฐ€ ๋ฐ์ดํ„ฐ๋ฅผ ํ•จ๊ป˜ ์••์ถ•ํ•  ๋•Œ ๋น„๋ฐ€ ๋ฐ์ดํ„ฐ๋ฅผ ๋ณต๊ตฌํ•˜๋„๋ก ํ—ˆ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. HTTP/2๋Š” ํ•„๋“œ ๋ผ์ธ(์„น์…˜ 4.3)์˜ ์••์ถ•์„ ๊ฐ€๋Šฅํ•˜๊ฒŒ ํ•˜๋ฉฐ, ๋‹ค์Œ์˜ ์šฐ๋ ค์‚ฌํ•ญ์€ HTTP ์••์ถ•๋œ ์ฝ˜ํ…์ธ  ์ธ์ฝ”๋”ฉ์˜ ์‚ฌ์šฉ์—๋„ ์ ์šฉ๋ฉ๋‹ˆ๋‹ค.

์›น์˜ ํŠน์„ฑ์„ ์•…์šฉํ•˜๋Š” ์••์ถ• ๊ณต๊ฒฉ(์˜ˆ: [BREACH])์ด ์ž…์ฆ๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค. ๊ณต๊ฒฉ์ž๋Š” ๋‹ค์–‘ํ•œ ํ‰๋ฌธ์„ ํฌํ•จํ•˜๋Š” ์—ฌ๋Ÿฌ ์š”์ฒญ์„ ์œ ๋„ํ•˜๊ณ  ๊ฒฐ๊ณผ ์•”ํ˜ธ๋ฌธ ๊ธธ์ด๋ฅผ ๊ด€์ฐฐํ•˜์—ฌ, ๋น„๋ฐ€์— ๋Œ€ํ•œ ์ถ”์ธก์ด ๋งž์„ ๋•Œ ๊ธธ์ด๊ฐ€ ์งง์•„์ง€๋Š” ๊ฒƒ์„ ์ด์šฉํ•ฉ๋‹ˆ๋‹ค.

๋ณด์•ˆ ์ฑ„๋„๋กœ ํ†ต์‹ ํ•˜๋Š” ๊ตฌํ˜„์ฒด๋Š” ๊ธฐ๋ฐ€ ๋ฐ์ดํ„ฐ์™€ ๊ณต๊ฒฉ์ž๊ฐ€ ์ œ์–ดํ•˜๋Š” ๋ฐ์ดํ„ฐ๋ฅผ ๋™์ผํ•œ ์••์ถ• ์ปจํ…์ŠคํŠธ์—์„œ ์••์ถ•ํ•˜์ง€ ์•Š์•„์•ผ ํ•ฉ๋‹ˆ๋‹ค(MUST NOT), ๋˜๋Š” ๊ฐ ๋ฐ์ดํ„ฐ ์›์ฒœ์— ๋Œ€ํ•ด ๋ณ„๋„์˜ ์••์ถ• ์‚ฌ์ „(dictionary)์„ ์‚ฌ์šฉํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ๋ฐ์ดํ„ฐ์˜ ์ถœ์ฒ˜๋ฅผ ์‹ ๋ขฐ์„ฑ ์žˆ๊ฒŒ ํŒ๋‹จํ•  ์ˆ˜ ์—†๋Š” ๊ฒฝ์šฐ ์••์ถ•์„ ์‚ฌ์šฉํ•ด์„œ๋Š” ์•ˆ ๋ฉ๋‹ˆ๋‹ค. TLS๊ฐ€ ์ œ๊ณตํ•˜๋Š” ์ผ๋ฐ˜์ ์ธ ์ŠคํŠธ๋ฆผ ์••์ถ•์€ HTTP/2์—์„œ ์‚ฌ์šฉํ•ด์„œ๋Š” ์•ˆ ๋ฉ๋‹ˆ๋‹ค (์„น์…˜ 9.2 ์ฐธ์กฐ).

ํ—ค๋” ํ•„๋“œ ์••์ถ•์— ๋Œ€ํ•œ ์ถ”๊ฐ€ ๊ณ ๋ ค์‚ฌํ•ญ์€ HPACK ๋ช…์„ธ([COMPRESSION])์— ์„ค๋ช…๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค.

10.7. ํŒจ๋”ฉ ์‚ฌ์šฉ

HTTP/2 ๋‚ด์˜ ํŒจ๋”ฉ์€ TLS์™€ ๊ฐ™์€ ์ผ๋ฐ˜ ๋ชฉ์  ํŒจ๋”ฉ์„ ๋Œ€์ฒดํ•˜๊ธฐ ์œ„ํ•œ ๊ฒƒ์ด ์•„๋‹™๋‹ˆ๋‹ค([TLS13]). ์ค‘๋ณต๋œ ํŒจ๋”ฉ์€ ์˜คํžˆ๋ ค ์—ญํšจ๊ณผ๋ฅผ ๋‚ผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์˜ฌ๋ฐ”๋ฅธ ์ ์šฉ์€ ํŒจ๋”ฉ๋˜๋Š” ๋ฐ์ดํ„ฐ์— ๋Œ€ํ•œ ๊ตฌ์ฒด์  ์ง€์‹์„ ํ•„์š”๋กœ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์••์ถ•์— ์˜์กดํ•˜๋Š” ๊ณต๊ฒฉ์„ ์™„ํ™”ํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” ํŒจ๋”ฉ๋ณด๋‹ค ์••์ถ•์„ ๋น„ํ™œ์„ฑํ™”ํ•˜๊ฑฐ๋‚˜ ์ œํ•œํ•˜๋Š” ๊ฒƒ์ด ๋” ๋ฐ”๋žŒ์งํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

ํŒจ๋”ฉ์€ ํ”„๋ ˆ์ž„ ๋‚ด์šฉ์˜ ์ •ํ™•ํ•œ ํฌ๊ธฐ๋ฅผ ํ๋ฆฌ๊ฒŒ ํ•˜์—ฌ HTTP ๋‚ด์˜ ํŠน์ • ๊ณต๊ฒฉ(์˜ˆ: ๊ณต๊ฒฉ์ž๊ฐ€ ์ œ์–ดํ•˜๋Š” ํ‰๋ฌธ๊ณผ ๋น„๋ฐ€ ๋ฐ์ดํ„ฐ๋ฅผ ๋ชจ๋‘ ํฌํ•จํ•˜๋Š” ์••์ถ•๋œ ์ฝ˜ํ…์ธ ์— ๋Œ€ํ•œ ๊ณต๊ฒฉ)์„ ์™„ํ™”ํ•˜๋Š” ๋ฐ ์‚ฌ์šฉ๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

ํŒจ๋”ฉ์˜ ์‚ฌ์šฉ์€ ์ฆ‰์‹œ ๋ช…ํ™•ํ•˜๊ฒŒ ๋ณด์ด๋Š” ๋งŒํผ์˜ ๋ณดํ˜ธ๋ฅผ ์ œ๊ณตํ•˜์ง€ ์•Š์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ตœ์„ ์˜ ๊ฒฝ์šฐ ํŒจ๋”ฉ์€ ๊ณต๊ฒฉ์ž๊ฐ€ ๊ด€์ฐฐํ•ด์•ผ ํ•˜๋Š” ํ”„๋ ˆ์ž„ ์ˆ˜๋ฅผ ์ฆ๊ฐ€์‹œ์ผœ ๊ธธ์ด ์ •๋ณด๋ฅผ ์ถ”๋ก ํ•˜๊ธฐ ์–ด๋ ต๊ฒŒ ๋งŒ๋“ค ๋ฟ์ž…๋‹ˆ๋‹ค. ์ž˜๋ชป ๊ตฌํ˜„๋œ ํŒจ๋”ฉ ์Šคํ‚ด์€ ์‰ฝ๊ฒŒ ์šฐํšŒ๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด ์˜ˆ์ธก ๊ฐ€๋Šฅํ•œ ๋ถ„ํฌ๋ฅผ ๊ฐ€์ง„ ๋ฌด์ž‘์œ„ ํŒจ๋”ฉ์€ ๊ฑฐ์˜ ๋ณดํ˜ธ๋ฅผ ์ œ๊ณตํ•˜์ง€ ์•Š์œผ๋ฉฐ, ํ”„๋ ˆ์ž„ ํŽ˜์ด๋กœ๋“œ๋ฅผ ๊ณ ์ • ํฌ๊ธฐ๋กœ ํŒจ๋”ฉํ•˜๋ฉด ํฌ๊ธฐ๊ฐ€ ๊ณ ์ • ๊ฒฝ๊ณ„๋ฅผ ๋„˜์„ ๋•Œ ์ •๋ณด๊ฐ€ ๋…ธ์ถœ๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์ค‘๊ฐœ์ž๋Š” DATA ํ”„๋ ˆ์ž„์˜ ํŒจ๋”ฉ์„ ์œ ์ง€ํ•˜๋Š” ๊ฒƒ์ด ๊ถŒ์žฅ๋˜์ง€๋งŒ(SHOULD), HEADERS ๋ฐ PUSH_PROMISE ํ”„๋ ˆ์ž„์˜ ํŒจ๋”ฉ์€ ์ œ๊ฑฐํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค(MAY). ์ค‘๊ฐœ์ž๊ฐ€ ํ”„๋ ˆ์ž„์˜ ํŒจ๋”ฉ ์–‘์„ ๋ณ€๊ฒฝํ•˜๋Š” ํ•ฉ๋‹นํ•œ ์ด์œ ๋Š” ํŒจ๋”ฉ์ด ์ œ๊ณตํ•˜๋Š” ๋ณดํ˜ธ๋ฅผ ๊ฐœ์„ ํ•˜๊ธฐ ์œ„ํ•จ์ผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

10.8. ๊ฐœ์ธ์ •๋ณด ๋ณดํ˜ธ ๊ณ ๋ ค์‚ฌํ•ญ

HTTP/2์˜ ์—ฌ๋Ÿฌ ํŠน์„ฑ์€ ๊ด€์ฐฐ์ž์—๊ฒŒ ๋‹จ์ผ ํด๋ผ์ด์–ธํŠธ๋‚˜ ์„œ๋ฒ„์˜ ๋™์ž‘์„ ์‹œ๊ฐ„์— ๋”ฐ๋ผ ์ƒ๊ด€๊ด€๊ณ„๋กœ ์—ฐ๊ฒฐํ•  ๊ธฐํšŒ๋ฅผ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค. ์—ฌ๊ธฐ์—๋Š” ์„ค์ • ๊ฐ’, ํ๋ฆ„ ์ œ์–ด ์ฐฝ ๊ด€๋ฆฌ ๋ฐฉ์‹, ์ŠคํŠธ๋ฆผ์— ๋Œ€ํ•œ ์šฐ์„ ์ˆœ์œ„ ํ• ๋‹น ๋ฐฉ์‹, ์ž๊ทน์— ๋Œ€ํ•œ ๋ฐ˜์‘์˜ ํƒ€์ด๋ฐ, ์„ค์ •์œผ๋กœ ์ œ์–ด๋˜๋Š” ๊ธฐ๋Šฅ์˜ ์ฒ˜๋ฆฌ ๋ฐฉ์‹ ๋“ฑ์ด ํฌํ•จ๋ฉ๋‹ˆ๋‹ค.

์ด๋Ÿฌํ•œ ํŠน์„ฑ๋“ค์ด ํ–‰๋™์—์„œ ๊ด€์ฐฐ ๊ฐ€๋Šฅํ•œ ์ฐจ์ด๋ฅผ ๋งŒ๋“ค๋ฉด, ์ด๋Š” ํŠน์ • ํด๋ผ์ด์–ธํŠธ๋ฅผ ์‹๋ณ„ํ•˜๊ธฐ ์œ„ํ•œ ์ง€๋ฌธ(fingerprinting)์˜ ๊ทผ๊ฑฐ๋กœ ์‚ฌ์šฉ๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค(RFC 6973 ์„น์…˜ 3.2 ์ฐธ์กฐ).

HTTP/2๊ฐ€ ๋‹จ์ผ TCP ์—ฐ๊ฒฐ ์‚ฌ์šฉ์„ ์„ ํ˜ธํ•˜๋Š” ๊ฒƒ์€ ์‚ฌ์ดํŠธ์—์„œ ์‚ฌ์šฉ์ž์˜ ํ™œ๋™์„ ์—ฐ๊ด€์‹œํ‚ค๋Š” ๊ฒƒ์„ ๊ฐ€๋Šฅํ•˜๊ฒŒ ํ•ฉ๋‹ˆ๋‹ค. ์„œ๋กœ ๋‹ค๋ฅธ ์˜ค๋ฆฌ์ง„์— ๋Œ€ํ•ด ์—ฐ๊ฒฐ์„ ์žฌ์‚ฌ์šฉํ•˜๋ฉด ์˜ค๋ฆฌ์ง„ ๊ฐ„ ์ถ”์ ์ด ๊ฐ€๋Šฅํ•ด์ง‘๋‹ˆ๋‹ค.

PING ๋ฐ SETTINGS ํ”„๋ ˆ์ž„์€ ์ฆ‰๊ฐ์ ์ธ ์‘๋‹ต์„ ์š”๊ตฌํ•˜๋ฏ€๋กœ, ์ด๋“ค์€ ์—”๋“œํฌ์ธํŠธ๊ฐ€ ํ”ผ์–ด์— ๋Œ€ํ•œ ์ง€์—ฐ(latency)์„ ์ธก์ •ํ•˜๋Š” ๋ฐ ์‚ฌ์šฉ๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด๋Š” ํŠน์ • ์‹œ๋‚˜๋ฆฌ์˜ค์—์„œ ํ”„๋ผ์ด๋ฒ„์‹œ์— ์˜ํ–ฅ์„ ๋ฏธ์น  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

10.9. ์›๊ฒฉ ํƒ€์ด๋ฐ ๊ณต๊ฒฉ

์›๊ฒฉ ํƒ€์ด๋ฐ ๊ณต๊ฒฉ์€ ์„œ๋ฒ„๊ฐ€ ๋น„๋ฐ€์„ ์‚ฌ์šฉํ•˜์—ฌ ์š”์ฒญ์„ ์ฒ˜๋ฆฌํ•  ๋•Œ ์†Œ์š” ์‹œ๊ฐ„์˜ ๋ณ€๋™์„ ๊ด€์ฐฐํ•˜์—ฌ ๋น„๋ฐ€์„ ์ถ”์ถœํ•ฉ๋‹ˆ๋‹ค. HTTP/2๋Š” ๋™์‹œ ์š”์ฒญ ์ƒ์„ฑ ๋ฐ ์ฒ˜๋ฆฌ๋ฅผ ๊ฐ€๋Šฅํ•˜๊ฒŒ ํ•˜์—ฌ ๊ณต๊ฒฉ์ž๊ฐ€ ์š”์ฒญ ์ฒ˜๋ฆฌ ์‹œ์ž‘ ์‹œ์ ์„ ๋” ์ž˜ ์ œ์–ดํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•ฉ๋‹ˆ๋‹ค. ์—ฌ๋Ÿฌ HTTP/2 ์š”์ฒญ์€ ๋™์ผํ•œ IP ํŒจํ‚ท์ด๋‚˜ TLS ๋ ˆ์ฝ”๋“œ์— ํฌํ•จ๋  ์ˆ˜ ์žˆ์œผ๋ฏ€๋กœ, HTTP/2๋Š” ์š”์ฒญ ์ „๋‹ฌ์˜ ๋ณ€๋™์„ฑ์„ ์ œ๊ฑฐํ•˜์—ฌ ์›๊ฒฉ ํƒ€์ด๋ฐ ๊ณต๊ฒฉ์„ ๋” ํšจ์œจ์ ์œผ๋กœ ๋งŒ๋“ค ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

ํƒ€์ด๋ฐ ๊ณต๊ฒฉ์— ๋Œ€ํ•œ ์ตœ์„ ์˜ ๋ฐฉ์–ด๋Š” ์ฒ˜๋ฆฌ ์‹œ๊ฐ„์ด ๋น„๋ฐ€ ๊ฐ’์— ์˜์กดํ•˜์ง€ ์•Š๋„๋ก ํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.


11. IANA ๊ณ ๋ ค์‚ฌํ•ญ

์ด HTTP/2 ๊ฐœ์ •ํŒ์€ HTTP2-Settings ํ—ค๋” ํ•„๋“œ์™€ h2c ์—…๊ทธ๋ ˆ์ด๋“œ ํ† ํฐ(๋‘˜ ๋‹ค [RFC7540]์—์„œ ์ •์˜๋จ)์„ ๋” ์ด์ƒ ์‚ฌ์šฉ๋˜์ง€ ์•Š์Œ์œผ๋กœ ์ง€์ •ํ•ฉ๋‹ˆ๋‹ค.

์„น์…˜ 11์€ [RFC7540]์—์„œ PRI HTTP ๋ฉ”์„œ๋“œ์™€ ํ•จ๊ป˜ h2 ๋ฐ h2c ALPN ์‹๋ณ„์ž๋ฅผ ๋“ฑ๋กํ–ˆ์Šต๋‹ˆ๋‹ค. RFC 7540๋Š” ๋˜ํ•œ ํ”„๋ ˆ์ž„ ์œ ํ˜•, ์„ค์ • ๋ฐ ์˜ค๋ฅ˜ ์ฝ”๋“œ์— ๋Œ€ํ•œ ๋ ˆ์ง€์ŠคํŠธ๋ฆฌ๋ฅผ ํ™•๋ฆฝํ–ˆ์Šต๋‹ˆ๋‹ค. ์ด๋Ÿฌํ•œ ๋“ฑ๋ก ๋ฐ ๋ ˆ์ง€์ŠคํŠธ๋ฆฌ๋Š” HTTP/2์— ์ ์šฉ๋˜๋ฉฐ, ์ด ๋ฌธ์„œ์—์„œ ์žฌ์ •์˜๋˜์ง€๋Š” ์•Š์Šต๋‹ˆ๋‹ค.

IANA๋Š” ๋‹ค์Œ ๋ ˆ์ง€์ŠคํŠธ๋ฆฌ๋“ค์—์„œ RFC 7540์— ๋Œ€ํ•œ ์ฐธ์กฐ๋ฅผ ์ด ๋ฌธ์„œ๋ฅผ ๊ฐ€๋ฆฌํ‚ค๋„๋ก ์—…๋ฐ์ดํŠธํ–ˆ์Šต๋‹ˆ๋‹ค: "TLS Application-Layer Protocol Negotiation (ALPN) Protocol IDs", "HTTP/2 Frame Type", "HTTP/2 Settings", "HTTP/2 Error Code", ๋ฐ "HTTP Method Registry". PRI ๋ฉ”์„œ๋“œ์˜ ๋“ฑ๋ก์€ ์„น์…˜ 3.4๋ฅผ ๊ฐ€๋ฆฌํ‚ค๋„๋ก ์—…๋ฐ์ดํŠธ๋˜์—ˆ์œผ๋ฉฐ; ๋‹ค๋ฅธ ๋ชจ๋“  ์„น์…˜ ๋ฒˆํ˜ธ๋Š” ๋ณ€๊ฒฝ๋˜์ง€ ์•Š์•˜์Šต๋‹ˆ๋‹ค.

IANA๋Š” RFC 7540์—์„œ ์‹คํ—˜์  ์‚ฌ์šฉ(Experimental Use)์œผ๋กœ ์˜ˆ์•ฝ๋˜์—ˆ๋˜ "HTTP/2 Frame Type" ๋ฐ "HTTP/2 Settings" ๋ ˆ์ง€์ŠคํŠธ๋ฆฌ์˜ ํ•ด๋‹น ๋ถ€๋ถ„์— ๋Œ€ํ•œ ์ •์ฑ…์„ ๋ณ€๊ฒฝํ–ˆ์Šต๋‹ˆ๋‹ค. ์ด๋“ค ๋ ˆ์ง€์ŠคํŠธ๋ฆฌ ๋ถ€๋ถ„์€ ๊ฐ ๋ ˆ์ง€์ŠคํŠธ๋ฆฌ์˜ ๋‚˜๋จธ์ง€ ๋ถ€๋ถ„๊ณผ ๋™์ผํ•œ ์ •์ฑ…์œผ๋กœ ์šด์˜๋ฉ๋‹ˆ๋‹ค.

11.1. HTTP2-Settings ํ—ค๋” ํ•„๋“œ ๋“ฑ๋ก

์ด ์„น์…˜์€ ์„น์…˜ 11.5์—์„œ [RFC7540]์— ์˜ํ•ด "Hypertext Transfer Protocol (HTTP) Field Name Registry"์— ๋“ฑ๋ก๋œ HTTP2-Settings ํ—ค๋” ํ•„๋“œ๋ฅผ ๋” ์ด์ƒ ์‚ฌ์šฉ๋˜์ง€ ์•Š์Œ์œผ๋กœ ํ‘œ์‹œํ•ฉ๋‹ˆ๋‹ค. ์ด ๊ธฐ๋Šฅ์€ ์ œ๊ฑฐ๋˜์—ˆ์Šต๋‹ˆ๋‹ค: ์„น์…˜ 3.1์„ ์ฐธ์กฐํ•˜์„ธ์š”. ๋“ฑ๋ก์€ RFC 9110 ์„น์…˜ 18.4์—์„œ ์š”๊ตฌํ•˜๋Š” ์„ธ๋ถ€์‚ฌํ•ญ์„ ํฌํ•จํ•˜๋„๋ก ๋‹ค์Œ๊ณผ ๊ฐ™์ด ์—…๋ฐ์ดํŠธ๋ฉ๋‹ˆ๋‹ค:

ํ•„๋“œ ์ด๋ฆ„:
HTTP2-Settings
์ƒํƒœ:
์‚ฌ์šฉ ์ค‘๋‹จ๋จ
์ฐธ์กฐ:
์„น์…˜ 3.2.1 of [RFC7540] 
์ฃผ์„:
๋” ์ด์ƒ ์‚ฌ์šฉ๋˜์ง€ ์•Š์Œ; ์ด ๋ฌธ์„œ์˜ ์„น์…˜ 11.1์„ ์ฐธ์กฐํ•˜์„ธ์š”.

11.2. h2c ์—…๊ทธ๋ ˆ์ด๋“œ ํ† ํฐ

์ด ์„น์…˜์€ ์„น์…˜ 11.8์—์„œ [RFC7540]์— ์˜ํ•ด "Hypertext Transfer Protocol (HTTP) Upgrade Token Registry"์— ๋“ฑ๋ก๋œ h2c ์—…๊ทธ๋ ˆ์ด๋“œ ํ† ํฐ์„ ๋” ์ด์ƒ ์‚ฌ์šฉ๋˜์ง€ ์•Š์Œ์œผ๋กœ ๊ธฐ๋กํ•ฉ๋‹ˆ๋‹ค. ์ด ๊ธฐ๋Šฅ์€ ์ œ๊ฑฐ๋˜์—ˆ์Šต๋‹ˆ๋‹ค: ์„น์…˜ 3.1์„ ์ฐธ์กฐํ•˜์„ธ์š”. ๋“ฑ๋ก์€ ๋‹ค์Œ๊ณผ ๊ฐ™์ด ์—…๋ฐ์ดํŠธ๋ฉ๋‹ˆ๋‹ค:

๊ฐ’:
h2c
์„ค๋ช…:
(๋” ์ด์ƒ ์‚ฌ์šฉ๋˜์ง€ ์•Š์Œ) Hypertext Transfer Protocol version 2 (HTTP/2)
์˜ˆ์ƒ ๋ฒ„์ „ ํ† ํฐ:
์—†์Œ
์ฐธ์กฐ:
์„น์…˜ 3.1 of this document

12. ์ฐธ๊ณ ๋ฌธํ—Œ

12.1. ๊ทœ๋ฒ”์  ์ฐธ์กฐ

[CACHING]
Fielding, R., Ed., Nottingham, M., Ed., and J. Reschke, Ed., โ€œHTTP Cachingโ€, STD 98, RFC 9111, DOI 10.17487/RFC9111, June 2022, <https://www.rfc-editor.org/info/rfc9111>.
[COMPRESSION]
Peon, R. and H. Ruellan, โ€œHPACK: Header Compression for HTTP/2โ€, RFC 7541, DOI 10.17487/RFC7541, May 2015, <https://www.rfc-editor.org/info/rfc7541>.
[COOKIE]
Barth, A., โ€œHTTP State Management Mechanismโ€, RFC 6265, DOI 10.17487/RFC6265, April 2011, <https://www.rfc-editor.org/info/rfc6265>.
[HTTP]
Fielding, R., Ed., Nottingham, M., Ed., and J. Reschke, Ed., โ€œHTTP Semanticsโ€, STD 97, RFC 9110, DOI 10.17487/RFC9110, June 2022, <https://www.rfc-editor.org/info/rfc9110>.
[QUIC]
Iyengar, J., Ed. and M. Thomson, Ed., โ€œQUIC: A UDP-Based Multiplexed and Secure Transportโ€, RFC 9000, DOI 10.17487/RFC9000, May 2021, <https://www.rfc-editor.org/info/rfc9000>.
[RFC2119]
Bradner, S., โ€œKey words for use in RFCs to Indicate Requirement Levelsโ€, BCP 14, RFC 2119, DOI 10.17487/RFC2119, March 1997, <https://www.rfc-editor.org/info/rfc2119>.
[RFC3986]
Berners-Lee, T., Fielding, R., and L. Masinter, โ€œUniform Resource Identifier (URI): Generic Syntaxโ€, STD 66, RFC 3986, DOI 10.17487/RFC3986, January 2005, <https://www.rfc-editor.org/info/rfc3986>.
[RFC8174]
Leiba, B., โ€œAmbiguity of Uppercase vs Lowercase in RFC 2119 Key Wordsโ€, BCP 14, RFC 8174, DOI 10.17487/RFC8174, May 2017, <https://www.rfc-editor.org/info/rfc8174>.
[RFC8422]
Nir, Y., Josefsson, S., and M. Pegourie-Gonnard, โ€œElliptic Curve Cryptography (ECC) Cipher Suites for Transport Layer Security (TLS) Versions 1.2 and Earlierโ€, RFC 8422, DOI 10.17487/RFC8422, August 2018, <https://www.rfc-editor.org/info/rfc8422>.
[RFC8470]
Thomson, M., Nottingham, M., and W. Tarreau, โ€œUsing Early Data in HTTPโ€, RFC 8470, DOI 10.17487/RFC8470, September 2018, <https://www.rfc-editor.org/info/rfc8470>.
[TCP]
Postel, J., โ€œTransmission Control Protocolโ€, STD 7, RFC 793, DOI 10.17487/RFC0793, September 1981, <https://www.rfc-editor.org/info/rfc793>.
[TLS-ALPN]
Friedl, S., Popov, A., Langley, A., and E. Stephan, โ€œTransport Layer Security (TLS) Application-Layer Protocol Negotiation Extensionโ€, RFC 7301, DOI 10.17487/RFC7301, July 2014, <https://www.rfc-editor.org/info/rfc7301>.
[TLS-ECDHE]
Rescorla, E., โ€œTLS Elliptic Curve Cipher Suites with SHA-256/384 and AES Galois Counter Mode (GCM)โ€, RFC 5289, DOI 10.17487/RFC5289, August 2008, <https://www.rfc-editor.org/info/rfc5289>.
[TLS-EXT]
Eastlake 3rd, D., โ€œTransport Layer Security (TLS) Extensions: Extension Definitionsโ€, RFC 6066, DOI 10.17487/RFC6066, January 2011, <https://www.rfc-editor.org/info/rfc6066>.
[TLS12]
Dierks, T. and E. Rescorla, โ€œThe Transport Layer Security (TLS) Protocol Version 1.2โ€, RFC 5246, DOI 10.17487/RFC5246, August 2008, <https://www.rfc-editor.org/info/rfc5246>.
[TLS13]
Rescorla, E., โ€œThe Transport Layer Security (TLS) Protocol Version 1.3โ€, RFC 8446, DOI 10.17487/RFC8446, August 2018, <https://www.rfc-editor.org/info/rfc8446>.
[TLSBCP]
Sheffer, Y., Holz, R., and P. Saint-Andre, โ€œRecommendations for Secure Use of Transport Layer Security (TLS) and Datagram Transport Layer Security (DTLS)โ€, BCP 195, RFC 7525, DOI 10.17487/RFC7525, May 2015, <https://www.rfc-editor.org/info/rfc7525>.

12.2. ์ฐธ๊ณ ์ž๋ฃŒ

[ALT-SVC]
Nottingham, M., McManus, P., and J. Reschke, โ€œHTTP Alternative Servicesโ€, RFC 7838, DOI 10.17487/RFC7838, April 2016, <https://www.rfc-editor.org/info/rfc7838>.
[BREACH]
Gluck, Y., Harris, N., and A. Prado, โ€œBREACH: Reviving the CRIME Attackโ€, July 2013, <https://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, January 2019, <https://www.rfc-editor.org/info/rfc8499>.
[HTTP-PRIORITY]
Oku, K. and L. Pardue, โ€œExtensible Prioritization Scheme for HTTPโ€, RFC 9218, DOI 10.17487/RFC9218, June 2022, <https://www.rfc-editor.org/info/rfc9218>.
[HTTP/1.1]
Fielding, R., Ed., Nottingham, M., Ed., and J. Reschke, Ed., โ€œHTTP/1.1โ€, STD 99, RFC 9112, DOI 10.17487/RFC9112, June 2022, <https://www.rfc-editor.org/info/rfc9112>.
[NFLX-2019-002]
Netflix, โ€œHTTP/2 Denial of Service Advisoryโ€, August 2019, <https://github.com/Netflix/security-bulletins/blob/master/advisories/third-party/2019-002.md>.
[PRIVACY]
Cooper, A., Tschofenig, H., Aboba, B., Peterson, J., Morris, J., Hansen, M., and R. Smith, โ€œPrivacy Considerations for Internet Protocolsโ€, RFC 6973, DOI 10.17487/RFC6973, July 2013, <https://www.rfc-editor.org/info/rfc6973>.
[RFC1122]
Braden, R., Ed., โ€œRequirements for Internet Hosts - Communication Layersโ€, STD 3, RFC 1122, DOI 10.17487/RFC1122, October 1989, <https://www.rfc-editor.org/info/rfc1122>.
[RFC3749]
Hollenbeck, S., โ€œTransport Layer Security Protocol Compression Methodsโ€, RFC 3749, DOI 10.17487/RFC3749, May 2004, <https://www.rfc-editor.org/info/rfc3749>.
[RFC6125]
Saint-Andre, P. and J. Hodges, โ€œRepresentation and Verification of Domain-Based Application Service Identity within Internet Public Key Infrastructure Using X.509 (PKIX) Certificates in the Context of Transport Layer Security (TLS)โ€, RFC 6125, DOI 10.17487/RFC6125, March 2011, <https://www.rfc-editor.org/info/rfc6125>.
[RFC6585]
Nottingham, M. and R. Fielding, โ€œAdditional HTTP Status Codesโ€, RFC 6585, DOI 10.17487/RFC6585, April 2012, <https://www.rfc-editor.org/info/rfc6585>.
[RFC7323]
Borman, D., Braden, B., Jacobson, V., and R. Scheffenegger, Ed., โ€œTCP Extensions for High Performanceโ€, RFC 7323, DOI 10.17487/RFC7323, September 2014, <https://www.rfc-editor.org/info/rfc7323>.
[RFC7540]
Belshe, M., Peon, R., and M. Thomson, Ed., โ€œHypertext Transfer Protocol Version 2 (HTTP/2)โ€, RFC 7540, DOI 10.17487/RFC7540, May 2015, <https://www.rfc-editor.org/info/rfc7540>.
[RFC8441]
McManus, P., โ€œBootstrapping WebSockets with HTTP/2โ€, RFC 8441, DOI 10.17487/RFC8441, September 2018, <https://www.rfc-editor.org/info/rfc8441>.
[RFC8740]
Benjamin, D., โ€œUsing TLS 1.3 with HTTP/2โ€, RFC 8740, DOI 10.17487/RFC8740, February 2020, <https://www.rfc-editor.org/info/rfc8740>.
[TALKING]
Huang, L., Chen, E., Barth, A., Rescorla, E., and C. Jackson, โ€œTalking to Yourself for Fun and Profitโ€, 2011, <https://www.adambarth.com/papers/2011/huang-chen-barth-rescorla-jackson.pdf>.

๋ถ€๋ก A. ๊ธˆ์ง€๋œ TLS 1.2 Cipher Suites

HTTP/2 ๊ตฌํ˜„์€ MAY ๋‹ค์Œ์˜ ์•”ํ˜ธ ๋ชจ์Œ๋“ค ์ค‘ ์–ด๋А ํ•˜๋‚˜๊ฐ€ TLS 1.2๋กœ ํ˜‘์ƒ๋˜๋Š” ๊ฒƒ์„ ์—ฐ๊ฒฐ ์˜ค๋ฅ˜(์„น์…˜ 5.4.1)์˜ ์œ ํ˜• INADEQUATE_SECURITY๋กœ ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค:

  • TLS_NULL_WITH_NULL_NULL
  • TLS_RSA_WITH_NULL_MD5
  • TLS_RSA_WITH_NULL_SHA
  • TLS_RSA_EXPORT_WITH_RC4_40_MD5
  • TLS_RSA_WITH_RC4_128_MD5
  • TLS_RSA_WITH_RC4_128_SHA
  • TLS_RSA_EXPORT_WITH_RC2_CBC_40_MD5
  • TLS_RSA_WITH_IDEA_CBC_SHA
  • TLS_RSA_EXPORT_WITH_DES40_CBC_SHA
  • TLS_RSA_WITH_DES_CBC_SHA
  • TLS_RSA_WITH_3DES_EDE_CBC_SHA
  • TLS_DH_DSS_EXPORT_WITH_DES40_CBC_SHA
  • TLS_DH_DSS_WITH_DES_CBC_SHA
  • TLS_DH_DSS_WITH_3DES_EDE_CBC_SHA
  • TLS_DH_RSA_EXPORT_WITH_DES40_CBC_SHA
  • TLS_DH_RSA_WITH_DES_CBC_SHA
  • TLS_DH_RSA_WITH_3DES_EDE_CBC_SHA
  • TLS_DHE_DSS_EXPORT_WITH_DES40_CBC_SHA
  • TLS_DHE_DSS_WITH_DES_CBC_SHA
  • TLS_DHE_DSS_WITH_3DES_EDE_CBC_SHA
  • TLS_DHE_RSA_EXPORT_WITH_DES40_CBC_SHA
  • TLS_DHE_RSA_WITH_DES_CBC_SHA
  • TLS_DHE_RSA_WITH_3DES_EDE_CBC_SHA
  • TLS_DH_anon_EXPORT_WITH_RC4_40_MD5
  • TLS_DH_anon_WITH_RC4_128_MD5
  • TLS_DH_anon_EXPORT_WITH_DES40_CBC_SHA
  • TLS_DH_anon_WITH_DES_CBC_SHA
  • TLS_DH_anon_WITH_3DES_EDE_CBC_SHA
  • TLS_KRB5_WITH_DES_CBC_SHA
  • TLS_KRB5_WITH_3DES_EDE_CBC_SHA
  • TLS_KRB5_WITH_RC4_128_SHA
  • TLS_KRB5_WITH_IDEA_CBC_SHA
  • TLS_KRB5_WITH_DES_CBC_MD5
  • TLS_KRB5_WITH_3DES_EDE_CBC_MD5
  • TLS_KRB5_WITH_RC4_128_MD5
  • TLS_KRB5_WITH_IDEA_CBC_MD5
  • TLS_KRB5_EXPORT_WITH_DES_CBC_40_SHA
  • TLS_KRB5_EXPORT_WITH_RC2_CBC_40_SHA
  • TLS_KRB5_EXPORT_WITH_RC4_40_SHA
  • TLS_KRB5_EXPORT_WITH_DES_CBC_40_MD5
  • TLS_KRB5_EXPORT_WITH_RC2_CBC_40_MD5
  • TLS_KRB5_EXPORT_WITH_RC4_40_MD5
  • TLS_PSK_WITH_NULL_SHA
  • TLS_DHE_PSK_WITH_NULL_SHA
  • TLS_RSA_PSK_WITH_NULL_SHA
  • TLS_RSA_WITH_AES_128_CBC_SHA
  • TLS_DH_DSS_WITH_AES_128_CBC_SHA
  • TLS_DH_RSA_WITH_AES_128_CBC_SHA
  • TLS_DHE_DSS_WITH_AES_128_CBC_SHA
  • TLS_DHE_RSA_WITH_AES_128_CBC_SHA
  • TLS_DH_anon_WITH_AES_128_CBC_SHA
  • TLS_RSA_WITH_AES_256_CBC_SHA
  • TLS_DH_DSS_WITH_AES_256_CBC_SHA
  • TLS_DH_RSA_WITH_AES_256_CBC_SHA
  • TLS_DHE_DSS_WITH_AES_256_CBC_SHA
  • TLS_DHE_RSA_WITH_AES_256_CBC_SHA
  • TLS_DH_anon_WITH_AES_256_CBC_SHA
  • TLS_RSA_WITH_NULL_SHA256
  • TLS_RSA_WITH_AES_128_CBC_SHA256
  • TLS_RSA_WITH_AES_256_CBC_SHA256
  • TLS_DH_DSS_WITH_AES_128_CBC_SHA256
  • TLS_DH_RSA_WITH_AES_128_CBC_SHA256
  • TLS_DHE_DSS_WITH_AES_128_CBC_SHA256
  • TLS_RSA_WITH_CAMELLIA_128_CBC_SHA
  • TLS_DH_DSS_WITH_CAMELLIA_128_CBC_SHA
  • TLS_DH_RSA_WITH_CAMELLIA_128_CBC_SHA
  • TLS_DHE_DSS_WITH_CAMELLIA_128_CBC_SHA
  • TLS_DHE_RSA_WITH_CAMELLIA_128_CBC_SHA
  • TLS_DH_anon_WITH_CAMELLIA_128_CBC_SHA
  • TLS_DHE_RSA_WITH_AES_128_CBC_SHA256
  • TLS_DH_DSS_WITH_AES_256_CBC_SHA256
  • TLS_DH_RSA_WITH_AES_256_CBC_SHA256
  • TLS_DHE_DSS_WITH_AES_256_CBC_SHA256
  • TLS_DHE_RSA_WITH_AES_256_CBC_SHA256
  • TLS_DH_anon_WITH_AES_128_CBC_SHA256
  • TLS_DH_anon_WITH_AES_256_CBC_SHA256
  • TLS_RSA_WITH_CAMELLIA_256_CBC_SHA
  • TLS_DH_DSS_WITH_CAMELLIA_256_CBC_SHA
  • TLS_DH_RSA_WITH_CAMELLIA_256_CBC_SHA
  • TLS_DHE_DSS_WITH_CAMELLIA_256_CBC_SHA
  • TLS_DHE_RSA_WITH_CAMELLIA_256_CBC_SHA
  • TLS_DH_anon_WITH_CAMELLIA_256_CBC_SHA
  • TLS_PSK_WITH_RC4_128_SHA
  • TLS_PSK_WITH_3DES_EDE_CBC_SHA
  • TLS_PSK_WITH_AES_128_CBC_SHA
  • TLS_PSK_WITH_AES_256_CBC_SHA
  • TLS_DHE_PSK_WITH_RC4_128_SHA
  • TLS_DHE_PSK_WITH_3DES_EDE_CBC_SHA
  • TLS_DHE_PSK_WITH_AES_128_CBC_SHA
  • TLS_DHE_PSK_WITH_AES_256_CBC_SHA
  • TLS_RSA_PSK_WITH_RC4_128_SHA
  • TLS_RSA_PSK_WITH_3DES_EDE_CBC_SHA
  • TLS_RSA_PSK_WITH_AES_128_CBC_SHA
  • TLS_RSA_PSK_WITH_AES_256_CBC_SHA
  • TLS_RSA_WITH_SEED_CBC_SHA
  • TLS_DH_DSS_WITH_SEED_CBC_SHA
  • TLS_DH_RSA_WITH_SEED_CBC_SHA
  • TLS_DHE_DSS_WITH_SEED_CBC_SHA
  • TLS_DHE_RSA_WITH_SEED_CBC_SHA
  • TLS_DH_anon_WITH_SEED_CBC_SHA
  • TLS_RSA_WITH_AES_128_GCM_SHA256
  • TLS_RSA_WITH_AES_256_GCM_SHA384
  • TLS_DH_RSA_WITH_AES_128_GCM_SHA256
  • TLS_DH_RSA_WITH_AES_256_GCM_SHA384
  • TLS_DH_DSS_WITH_AES_128_GCM_SHA256
  • TLS_DH_DSS_WITH_AES_256_GCM_SHA384
  • TLS_DH_anon_WITH_AES_128_GCM_SHA256
  • TLS_DH_anon_WITH_AES_256_GCM_SHA384
  • TLS_PSK_WITH_AES_128_GCM_SHA256
  • TLS_PSK_WITH_AES_256_GCM_SHA384
  • TLS_RSA_PSK_WITH_AES_128_GCM_SHA256
  • TLS_RSA_PSK_WITH_AES_256_GCM_SHA384
  • TLS_PSK_WITH_AES_128_CBC_SHA256
  • TLS_PSK_WITH_AES_256_CBC_SHA384
  • TLS_PSK_WITH_NULL_SHA256
  • TLS_PSK_WITH_NULL_SHA384
  • TLS_DHE_PSK_WITH_AES_128_CBC_SHA256
  • TLS_DHE_PSK_WITH_AES_256_CBC_SHA384
  • TLS_DHE_PSK_WITH_NULL_SHA256
  • TLS_DHE_PSK_WITH_NULL_SHA384
  • TLS_RSA_PSK_WITH_AES_128_CBC_SHA256
  • TLS_RSA_PSK_WITH_AES_256_CBC_SHA384
  • TLS_RSA_PSK_WITH_NULL_SHA256
  • TLS_RSA_PSK_WITH_NULL_SHA384
  • TLS_RSA_WITH_CAMELLIA_128_CBC_SHA256
  • TLS_DH_DSS_WITH_CAMELLIA_128_CBC_SHA256
  • TLS_DH_RSA_WITH_CAMELLIA_128_CBC_SHA256
  • TLS_DHE_DSS_WITH_CAMELLIA_128_CBC_SHA256
  • TLS_DHE_RSA_WITH_CAMELLIA_128_CBC_SHA256
  • TLS_DH_anon_WITH_CAMELLIA_128_CBC_SHA256
  • TLS_RSA_WITH_CAMELLIA_256_CBC_SHA256
  • TLS_DH_DSS_WITH_CAMELLIA_256_CBC_SHA256
  • TLS_DH_RSA_WITH_CAMELLIA_256_CBC_SHA256
  • TLS_DHE_DSS_WITH_CAMELLIA_256_CBC_SHA256
  • TLS_DHE_RSA_WITH_CAMELLIA_256_CBC_SHA256
  • TLS_DH_anon_WITH_CAMELLIA_256_CBC_SHA256
  • TLS_EMPTY_RENEGOTIATION_INFO_SCSV
  • TLS_ECDH_ECDSA_WITH_NULL_SHA
  • TLS_ECDH_ECDSA_WITH_RC4_128_SHA
  • TLS_ECDH_ECDSA_WITH_3DES_EDE_CBC_SHA
  • TLS_ECDH_ECDSA_WITH_AES_128_CBC_SHA
  • TLS_ECDH_ECDSA_WITH_AES_256_CBC_SHA
  • TLS_ECDHE_ECDSA_WITH_NULL_SHA
  • TLS_ECDHE_ECDSA_WITH_RC4_128_SHA
  • TLS_ECDHE_ECDSA_WITH_3DES_EDE_CBC_SHA
  • TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA
  • TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA
  • TLS_ECDH_RSA_WITH_NULL_SHA
  • TLS_ECDH_RSA_WITH_RC4_128_SHA
  • TLS_ECDH_RSA_WITH_3DES_EDE_CBC_SHA
  • TLS_ECDH_RSA_WITH_AES_128_CBC_SHA
  • TLS_ECDH_RSA_WITH_AES_256_CBC_SHA
  • TLS_ECDHE_RSA_WITH_NULL_SHA
  • TLS_ECDHE_RSA_WITH_RC4_128_SHA
  • TLS_ECDHE_RSA_WITH_3DES_EDE_CBC_SHA
  • TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA
  • TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA
  • TLS_ECDH_anon_WITH_NULL_SHA
  • TLS_ECDH_anon_WITH_RC4_128_SHA
  • TLS_ECDH_anon_WITH_3DES_EDE_CBC_SHA
  • TLS_ECDH_anon_WITH_AES_128_CBC_SHA
  • TLS_ECDH_anon_WITH_AES_256_CBC_SHA
  • TLS_SRP_SHA_WITH_3DES_EDE_CBC_SHA
  • TLS_SRP_SHA_RSA_WITH_3DES_EDE_CBC_SHA
  • TLS_SRP_SHA_DSS_WITH_3DES_EDE_CBC_SHA
  • TLS_SRP_SHA_WITH_AES_128_CBC_SHA
  • TLS_SRP_SHA_RSA_WITH_AES_128_CBC_SHA
  • TLS_SRP_SHA_DSS_WITH_AES_128_CBC_SHA
  • TLS_SRP_SHA_WITH_AES_256_CBC_SHA
  • TLS_SRP_SHA_RSA_WITH_AES_256_CBC_SHA
  • TLS_SRP_SHA_DSS_WITH_AES_256_CBC_SHA
  • TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA256
  • TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA384
  • TLS_ECDH_ECDSA_WITH_AES_128_CBC_SHA256
  • TLS_ECDH_ECDSA_WITH_AES_256_CBC_SHA384
  • TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256
  • TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384
  • TLS_ECDH_RSA_WITH_AES_128_CBC_SHA256
  • TLS_ECDH_RSA_WITH_AES_256_CBC_SHA384
  • TLS_ECDH_ECDSA_WITH_AES_128_GCM_SHA256
  • TLS_ECDH_ECDSA_WITH_AES_256_GCM_SHA384
  • TLS_ECDH_RSA_WITH_AES_128_GCM_SHA256
  • TLS_ECDH_RSA_WITH_AES_256_GCM_SHA384
  • TLS_ECDHE_PSK_WITH_RC4_128_SHA
  • TLS_ECDHE_PSK_WITH_3DES_EDE_CBC_SHA
  • TLS_ECDHE_PSK_WITH_AES_128_CBC_SHA
  • TLS_ECDHE_PSK_WITH_AES_256_CBC_SHA
  • TLS_ECDHE_PSK_WITH_AES_128_CBC_SHA256
  • TLS_ECDHE_PSK_WITH_AES_256_CBC_SHA384
  • TLS_ECDHE_PSK_WITH_NULL_SHA
  • TLS_ECDHE_PSK_WITH_NULL_SHA256
  • TLS_ECDHE_PSK_WITH_NULL_SHA384
  • TLS_RSA_WITH_ARIA_128_CBC_SHA256
  • TLS_RSA_WITH_ARIA_256_CBC_SHA384
  • TLS_DH_DSS_WITH_ARIA_128_CBC_SHA256
  • TLS_DH_DSS_WITH_ARIA_256_CBC_SHA384
  • TLS_DH_RSA_WITH_ARIA_128_CBC_SHA256
  • TLS_DH_RSA_WITH_ARIA_256_CBC_SHA384
  • TLS_DHE_DSS_WITH_ARIA_128_CBC_SHA256
  • TLS_DHE_DSS_WITH_ARIA_256_CBC_SHA384
  • TLS_DHE_RSA_WITH_ARIA_128_CBC_SHA256
  • TLS_DHE_RSA_WITH_ARIA_256_CBC_SHA384
  • TLS_DH_anon_WITH_ARIA_128_CBC_SHA256
  • TLS_DH_anon_WITH_ARIA_256_CBC_SHA384
  • TLS_ECDHE_ECDSA_WITH_ARIA_128_CBC_SHA256
  • TLS_ECDHE_ECDSA_WITH_ARIA_256_CBC_SHA384
  • TLS_ECDH_ECDSA_WITH_ARIA_128_CBC_SHA256
  • TLS_ECDH_ECDSA_WITH_ARIA_256_CBC_SHA384
  • TLS_ECDHE_RSA_WITH_ARIA_128_CBC_SHA256
  • TLS_ECDHE_RSA_WITH_ARIA_256_CBC_SHA384
  • TLS_ECDH_RSA_WITH_ARIA_128_CBC_SHA256
  • TLS_ECDH_RSA_WITH_ARIA_256_CBC_SHA384
  • TLS_RSA_WITH_ARIA_128_GCM_SHA256
  • TLS_RSA_WITH_ARIA_256_GCM_SHA384
  • TLS_DH_RSA_WITH_ARIA_128_GCM_SHA256
  • TLS_DH_RSA_WITH_ARIA_256_GCM_SHA384
  • TLS_DH_DSS_WITH_ARIA_128_GCM_SHA256
  • TLS_DH_DSS_WITH_ARIA_256_GCM_SHA384
  • TLS_DH_anon_WITH_ARIA_128_GCM_SHA256
  • TLS_DH_anon_WITH_ARIA_256_GCM_SHA384
  • TLS_ECDH_ECDSA_WITH_ARIA_128_GCM_SHA256
  • TLS_ECDH_ECDSA_WITH_ARIA_256_GCM_SHA384
  • TLS_ECDH_RSA_WITH_ARIA_128_GCM_SHA256
  • TLS_ECDH_RSA_WITH_ARIA_256_GCM_SHA384
  • TLS_PSK_WITH_ARIA_128_CBC_SHA256
  • TLS_PSK_WITH_ARIA_256_CBC_SHA384
  • TLS_DHE_PSK_WITH_ARIA_128_CBC_SHA256
  • TLS_DHE_PSK_WITH_ARIA_256_CBC_SHA384
  • TLS_RSA_PSK_WITH_ARIA_128_CBC_SHA256
  • TLS_RSA_PSK_WITH_ARIA_256_CBC_SHA384
  • TLS_PSK_WITH_ARIA_128_GCM_SHA256
  • TLS_PSK_WITH_ARIA_256_GCM_SHA384
  • TLS_RSA_PSK_WITH_ARIA_128_GCM_SHA256
  • TLS_RSA_PSK_WITH_ARIA_256_GCM_SHA384
  • TLS_ECDHE_PSK_WITH_ARIA_128_CBC_SHA256
  • TLS_ECDHE_PSK_WITH_ARIA_256_CBC_SHA384
  • TLS_ECDHE_ECDSA_WITH_CAMELLIA_128_CBC_SHA256
  • TLS_ECDHE_ECDSA_WITH_CAMELLIA_256_CBC_SHA384
  • TLS_ECDH_ECDSA_WITH_CAMELLIA_128_CBC_SHA256
  • TLS_ECDH_ECDSA_WITH_CAMELLIA_256_CBC_SHA384
  • TLS_ECDHE_RSA_WITH_CAMELLIA_128_CBC_SHA256
  • TLS_ECDHE_RSA_WITH_CAMELLIA_256_CBC_SHA384
  • TLS_ECDH_RSA_WITH_CAMELLIA_128_CBC_SHA256
  • TLS_ECDH_RSA_WITH_CAMELLIA_256_CBC_SHA384
  • TLS_RSA_WITH_CAMELLIA_128_GCM_SHA256
  • TLS_RSA_WITH_CAMELLIA_256_GCM_SHA384
  • TLS_DH_RSA_WITH_CAMELLIA_128_GCM_SHA256
  • TLS_DH_RSA_WITH_CAMELLIA_256_GCM_SHA384
  • TLS_DH_DSS_WITH_CAMELLIA_128_GCM_SHA256
  • TLS_DH_DSS_WITH_CAMELLIA_256_GCM_SHA384
  • TLS_DH_anon_WITH_CAMELLIA_128_GCM_SHA256
  • TLS_DH_anon_WITH_CAMELLIA_256_GCM_SHA384
  • TLS_ECDH_ECDSA_WITH_CAMELLIA_128_GCM_SHA256
  • TLS_ECDH_ECDSA_WITH_CAMELLIA_256_GCM_SHA384
  • TLS_ECDH_RSA_WITH_CAMELLIA_128_GCM_SHA256
  • TLS_ECDH_RSA_WITH_CAMELLIA_256_GCM_SHA384
  • TLS_PSK_WITH_CAMELLIA_128_GCM_SHA256
  • TLS_PSK_WITH_CAMELLIA_256_GCM_SHA384
  • TLS_RSA_PSK_WITH_CAMELLIA_128_GCM_SHA256
  • TLS_RSA_PSK_WITH_CAMELLIA_256_GCM_SHA384
  • TLS_PSK_WITH_CAMELLIA_128_CBC_SHA256
  • TLS_PSK_WITH_CAMELLIA_256_CBC_SHA384
  • TLS_DHE_PSK_WITH_CAMELLIA_128_CBC_SHA256
  • TLS_DHE_PSK_WITH_CAMELLIA_256_CBC_SHA384
  • TLS_RSA_PSK_WITH_CAMELLIA_128_CBC_SHA256
  • TLS_RSA_PSK_WITH_CAMELLIA_256_CBC_SHA384
  • TLS_ECDHE_PSK_WITH_CAMELLIA_128_CBC_SHA256
  • TLS_ECDHE_PSK_WITH_CAMELLIA_256_CBC_SHA384
  • TLS_RSA_WITH_AES_128_CCM
  • TLS_RSA_WITH_AES_256_CCM
  • TLS_RSA_WITH_AES_128_CCM_8
  • TLS_RSA_WITH_AES_256_CCM_8
  • TLS_PSK_WITH_AES_128_CCM
  • TLS_PSK_WITH_AES_256_CCM
  • TLS_PSK_WITH_AES_128_CCM_8
  • TLS_PSK_WITH_AES_256_CCM_8

์ž์„ธํ•œ ๋‚ด์šฉ์€ ์„น์…˜ 9.2.2๋ฅผ ์ฐธ์กฐํ•˜์„ธ์š”.


๋ถ€๋ก B. RFC 7540๋กœ๋ถ€ํ„ฐ์˜ ๋ณ€๊ฒฝ ์‚ฌํ•ญ

์ด ๊ฐœ์ •ํŒ์—๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์€ ์‹ค์งˆ์ ์ธ ๋ณ€๊ฒฝ์‚ฌํ•ญ์ด ํฌํ•จ๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค:

  • TLS 1.3์˜ ์‚ฌ์šฉ์€ [RFC8740]์— ๋”ฐ๋ผ ์ •์˜๋˜์—ˆ์œผ๋ฉฐ, ์ด ๋ฌธ์„œ๋Š” ํ•ด๋‹น ๋ฌธ์„œ๋ฅผ ๋Œ€์ฒดํ•ฉ๋‹ˆ๋‹ค.
  • RFC 7540์—์„œ ์ •์˜ํ•œ ์šฐ์„ ์ˆœ์œ„(priority) ์ฒด๊ณ„๋Š” ๋” ์ด์ƒ ๊ถŒ์žฅ๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. PRIORITY ํ”„๋ ˆ์ž„์˜ ํ˜•์‹๊ณผ HEADERS ํ”„๋ ˆ์ž„์˜ ์šฐ์„ ์ˆœ์œ„ ํ•„๋“œ์— ๋Œ€ํ•œ ์ •์˜๋Š” ์œ ์ง€๋˜์—ˆ๊ณ , PRIORITY ํ”„๋ ˆ์ž„์„ ์†ก์ˆ˜์‹ ํ•  ์ˆ˜ ์žˆ๋Š” ์‹œ์ ์— ๋Œ€ํ•œ ๊ทœ์น™๋„ ์œ ์ง€๋˜์—ˆ์ง€๋งŒ, ์ด๋Ÿฌํ•œ ํ•„๋“œ์˜ ์˜๋ฏธ๋ก (semantics)์€ RFC 7540์—๋งŒ ๊ธฐ์ˆ ๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค. RFC 7540์˜ ์šฐ์„ ์ˆœ์œ„ ์‹ ํ˜ธ ๋ฐฉ์‹์€ ์„ฑ๊ณต์ ์ด์ง€ ๋ชปํ–ˆ์Šต๋‹ˆ๋‹ค. ๋Œ€์‹  [HTTP-PRIORITY]์˜ ๋‹จ์ˆœํ™”๋œ ์‹ ํ˜ธ ๋ฐฉ์‹์„ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ด ๊ถŒ์žฅ๋ฉ๋‹ˆ๋‹ค.
  • HTTP/1.1์˜ Upgrade ๋ฉ”์ปค๋‹ˆ์ฆ˜์€ ๊ถŒ๊ณ ๋˜์ง€ ์•Š์œผ๋ฉฐ ์ด ๋ฌธ์„œ์—์„œ ๋” ์ด์ƒ ๋ช…์„ธ๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ์ด๋Š” ๋„๋ฆฌ ๋ฐฐํฌ๋˜์ง€ ์•Š์•˜๊ณ , ํ‰๋ฌธ HTTP/2 ์‚ฌ์šฉ์ž๋Š” ๋Œ€์‹  prior-knowledge ๊ตฌํ˜„์„ ์‚ฌ์šฉํ•˜๋Š” ์ชฝ์„ ์„ ํƒํ–ˆ์Šต๋‹ˆ๋‹ค.
  • ํ•„๋“œ ์ด๋ฆ„๊ณผ ๊ฐ’์— ๋Œ€ํ•œ ๊ฒ€์ฆ์ด ์ขํ˜€์กŒ์Šต๋‹ˆ๋‹ค. ์ค‘๊ฐœ์ž(intermediaries)์— ๋Œ€ํ•ด ํ•„์ˆ˜์ ์ธ ๊ฒ€์ฆ์ด ์ •ํ™•ํ•˜๊ฒŒ ์ •์˜๋˜์—ˆ๊ณ , ์š”์ฒญ์— ๋Œ€ํ•œ ์˜ค๋ฅ˜ ๋ณด๊ณ ๋Š” 400๋ฒˆ๋Œ€ ์ƒํƒœ ์ฝ”๋“œ๋ฅผ ์ „์†กํ•˜๋„๋ก ๊ถŒ์žฅ๋˜๋„๋ก ์ˆ˜์ •๋˜์—ˆ์Šต๋‹ˆ๋‹ค.
  • ์‹คํ—˜์šฉ(Experimental Use)์œผ๋กœ ์˜ˆ์•ฝ๋˜์—ˆ๋˜ ์„ค์ • ๋ฐ ํ”„๋ ˆ์ž„ ์œ ํ˜•์˜ ์ฝ”๋“œํฌ์ธํŠธ ๋ฒ”์œ„๊ฐ€ ์ด์ œ ์ผ๋ฐ˜ ์‚ฌ์šฉ์„ ์œ„ํ•ด ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•˜๊ฒŒ ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.
  • ๊ธˆ์ง€๋œ ์—ฐ๊ฒฐ ์ „์šฉ ํ—ค๋” ํ•„๋“œ(connection-specific header fields)๊ฐ€ ๋ณด๋‹ค ์ •ํ™•ํ•˜๊ณ  ํฌ๊ด„์ ์œผ๋กœ ์‹๋ณ„๋˜์—ˆ์Šต๋‹ˆ๋‹ค.
  • Host์™€ ":authority"๊ฐ€ ์„œ๋กœ ๋‹ค๋ฅผ ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.
  • ์„ค์ • ๋ณ€๊ฒฝ ์ดํ›„ ๋™์  ํ…Œ์ด๋ธ” ํฌ๊ธฐ ์—…๋ฐ์ดํŠธ(Dynamic Table Size Update) ์ง€์‹œ๋ฅผ ์ „์†กํ•˜๋Š” ๊ทœ์น™์ด ์„น์…˜ 4.3.1์—์„œ ๋ช…ํ™•ํ•ด์กŒ์Šต๋‹ˆ๋‹ค.

ํŽธ์ง‘์ƒ์˜ ๋ณ€๊ฒฝ๋„ ํฌํ•จ๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค. ํŠนํžˆ, ์šฉ์–ด์™€ ๋ฌธ์„œ ๊ตฌ์กฐ์˜ ๋ณ€๊ฒฝ์€ ํ•ต์‹ฌ HTTP ์˜๋ฏธ๋ก ([HTTP])์˜ ์—…๋ฐ์ดํŠธ์— ๋Œ€ํ•œ ์‘๋‹ต์œผ๋กœ ์ด๋ฃจ์–ด์กŒ์Šต๋‹ˆ๋‹ค. ์ด๋“ค ๋ฌธ์„œ๋Š” ์ด์ œ RFC 7540์—์„œ ์ฒ˜์Œ ์ •์˜๋œ ์ผ๋ถ€ ๊ฐœ๋…๋“ค(์˜ˆ: 421 ์ƒํƒœ ์ฝ”๋“œ ๋˜๋Š” ์—ฐ๊ฒฐ ๋ณ‘ํ•ฉ(connection coalescing))์„ ํฌํ•จํ•ฉ๋‹ˆ๋‹ค.


๊ฐ์‚ฌ์˜ ๊ธ€

์ด ๋ฌธ์„œ์— ๋น„ํ‰๋ฒ”ํ•œ ๊ธฐ์—ฌ๋ฅผ ํ•œ ๋งŽ์€ ์‚ฌ๋žŒ๋“ค์—๊ฒŒ ๊ฐ์‚ฌ๋ฅผ ํ‘œํ•ฉ๋‹ˆ๋‹ค. [RFC7540]์—๋Š” ๊ธฐ์—ฌ์ž ๋ชฉ๋ก์ด ๋” ๊ด‘๋ฒ”์œ„ํ•˜๊ฒŒ ์ˆ˜๋ก๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค.


๊ธฐ์—ฌ์ž

Mike Belshe์™€ Roberto Peon์ด ์ด ๋ฌธ์„œ์˜ ๊ธฐ๋ฐ˜์ด ๋œ ํ…์ŠคํŠธ๋ฅผ ์ €์ˆ ํ–ˆ์Šต๋‹ˆ๋‹ค.


์ €์ž ์ฃผ์†Œ

Martin Thomson (editor)
Mozilla
Australia
EMail: mt@lowentropy.net
Cory Benfield (editor)
Apple Inc.
EMail: cbenfield@apple.com