์ธํ„ฐ๋„ท ์—”์ง€๋‹ˆ์–ด๋ง ํƒœ์Šคํฌ ํฌ์Šค (IETF) R. Fielding, Editor
์š”์ฒญ ์˜๊ฒฌ(Request for Comments): 9112 Adobe
๋Œ€์ฒด ๋Œ€์ƒ: 7230 M. Nottingham, Editor
STD: 99 Fastly
๋ถ„๋ฅ˜: ํ‘œ์ค€ ํŠธ๋ž™ J. Reschke, Editor
ISSN: 2070-1721 greenbytes
2022๋…„ 6์›”

HTTP/1.1


์š”์•ฝ

ํ•˜์ดํผํ…์ŠคํŠธ ์ „์†ก ํ”„๋กœํ† ์ฝœ(HTTP)์€ ๋ถ„์‚ฐํ˜•, ํ˜‘์—…์‹ ํ•˜์ดํผํ…์ŠคํŠธ ์ •๋ณด ์‹œ์Šคํ…œ์„ ์œ„ํ•œ ๋ฌด์ƒํƒœ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๊ณ„์ธต ํ”„๋กœํ† ์ฝœ์ด๋‹ค. ์ด ๋ฌธ์„œ๋Š” HTTP/1.1 ๋ฉ”์‹œ์ง€ ๊ตฌ๋ฌธ, ๋ฉ”์‹œ์ง€ ๊ตฌ๋ฌธ ๋ถ„์„, ์—ฐ๊ฒฐ ๊ด€๋ฆฌ ๋ฐ ๊ด€๋ จ ๋ณด์•ˆ ๋ฌธ์ œ๋ฅผ ๋ช…์„ธํ•œ๋‹ค.

์ด ๋ฌธ์„œ๋Š” RFC 7230์˜ ์ผ๋ถ€๋ฅผ ๋Œ€์ฒดํ•œ๋‹ค.

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

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

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

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

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.

This document may contain material from IETF Documents or IETF Contributions published or made publicly available before November 10, 2008. The person(s) controlling the copyright in some of this material may not have granted the IETF Trust the right to allow modifications of such material outside the IETF Standards Process. Without obtaining an adequate license from the person(s) controlling the copyright in such materials, this document may not be modified outside the IETF Standards Process, and derivative works of it may not be created outside the IETF Standards Process, except to format it for publication as an RFC or to translate it into languages other than English.

1. ์†Œ๊ฐœ

ํ•˜์ดํผํ…์ŠคํŠธ ์ „์†ก ํ”„๋กœํ† ์ฝœ(HTTP)์€ ๋„คํŠธ์›Œํฌ ๊ธฐ๋ฐ˜ ํ•˜์ดํผํ…์ŠคํŠธ ์ •๋ณด ์‹œ์Šคํ…œ๊ณผ์˜ ์œ ์—ฐํ•œ ์ƒํ˜ธ์ž‘์šฉ์„ ์œ„ํ•ด ํ™•์žฅ ๊ฐ€๋Šฅํ•œ ์˜๋ฏธ ์ฒด๊ณ„์™€ ์ž๊ธฐ ์„ค๋ช…์ ์ธ ๋ฉ”์‹œ์ง€๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๋ฌด์ƒํƒœ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๊ณ„์ธต ์š”์ฒญ/์‘๋‹ต ํ”„๋กœํ† ์ฝœ์ด๋‹ค. HTTP/1.1์€ ๋‹ค์Œ์— ์˜ํ•ด ์ •์˜๋œ๋‹ค:

  • ์ด ๋ฌธ์„œ
  • "HTTP Semantics" [HTTP]
  • "HTTP Caching" [CACHING]

์ด ๋ฌธ์„œ๋Š” HTTP ์˜๋ฏธ๊ฐ€ HTTP/1.1 ๋ฉ”์‹œ์ง€ ๊ตฌ๋ฌธ, ํ”„๋ ˆ์ด๋ฐ ๋ฐ ์—ฐ๊ฒฐ ๊ด€๋ฆฌ ๋ฉ”์ปค๋‹ˆ์ฆ˜์„ ์‚ฌ์šฉํ•˜์—ฌ ์–ด๋–ป๊ฒŒ ์ „๋‹ฌ๋˜๋Š”์ง€๋ฅผ ๋ช…์‹œํ•œ๋‹ค. ๋ชฉํ‘œ๋Š” HTTP/1.1 ๋ฉ”์‹œ์ง€ ํŒŒ์„œ์™€ ๋ฉ”์‹œ์ง€ ์ „๋‹ฌ ์ค‘๊ณ„์ž์˜ ์š”๊ตฌ์‚ฌํ•ญ ์ „์ฒด ์ง‘ํ•ฉ์„ ์ •์˜ํ•˜๋Š” ๊ฒƒ์ด๋‹ค.

์ด ๋ฌธ์„œ๋Š” HTTP/1.1 ๋ฉ”์‹œ์ง• ๋ฐ ์—ฐ๊ฒฐ ๊ด€๋ฆฌ์™€ ๊ด€๋ จ๋œ RFC 7230์˜ ํ•ด๋‹น ๋ถ€๋ถ„์„ ํ๊ธฐํ•˜๋ฉฐ, ๊ทธ ๋ณ€๊ฒฝ ์‚ฌํ•ญ์€ ๋ถ€๋ก C.3์— ์š”์•ฝ๋˜์–ด ์žˆ๋‹ค. RFC 7230์˜ ๋‹ค๋ฅธ ๋ถ€๋ถ„๋“ค์€ "HTTP Semantics" [HTTP]์— ์˜ํ•ด ํ๊ธฐ๋œ๋‹ค.

1.1. ์š”๊ตฌ์‚ฌํ•ญ ํ‘œ๊ธฐ

์ด ๋ฌธ์„œ์—์„œ ๋‹จ์–ด "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", "SHOULD", "SHOULD NOT", "RECOMMENDED", "NOT RECOMMENDED", "MAY", ๋ฐ "OPTIONAL"๋Š” ๋ชจ๋‘ ๋Œ€๋ฌธ์ž๋กœ ํ‘œ์‹œ๋œ ๊ฒฝ์šฐ์—๋งŒ BCP 14 [RFC2119] ๋ฐ [RFC8174]์— ์„ค๋ช…๋œ ๋Œ€๋กœ ํ•ด์„๋œ๋‹ค.

์ ํ•ฉ์„ฑ ๊ธฐ์ค€ ๋ฐ ์˜ค๋ฅ˜ ์ฒ˜๋ฆฌ์— ๊ด€ํ•œ ๊ณ ๋ ค์‚ฌํ•ญ์€ Section 2 of [HTTP]์— ์ •์˜๋˜์–ด ์žˆ๋‹ค.

1.2. ๊ตฌ๋ฌธ ํ‘œ๊ธฐ

์ด ๋ช…์„ธ์„œ๋Š” [RFC5234]์˜ ํ™•์žฅ๋œ Backus-Naur ํ˜•์‹(ABNF)์„ ์‚ฌ์šฉํ•˜๋ฉฐ, ๋Œ€์†Œ๋ฌธ์ž ๊ตฌ๋ถ„ ๋ฌธ์ž์—ด ํ‘œ๊ธฐ๋ฅผ ์œ„ํ•ด [RFC7405]์— ์ •์˜๋œ ํ‘œ๊ธฐ๋ฒ•์„ ํ™•์žฅํ•˜์—ฌ ์‚ฌ์šฉํ•œ๋‹ค.

๋˜ํ•œ Section 5.6.1 of [HTTP]์— ์ •์˜๋œ ๋ชฉ๋ก ํ™•์žฅ๋„ ์‚ฌ์šฉํ•˜์—ฌ "#" ์—ฐ์‚ฐ์ž๋ฅผ ํ†ตํ•ด ์‰ผํ‘œ๋กœ ๊ตฌ๋ถ„๋œ ๋ชฉ๋ก์„ ๊ฐ„๊ฒฐํ•˜๊ฒŒ ์ •์˜ํ•  ์ˆ˜ ์žˆ๋‹ค(์ด๋Š” "*" ์—ฐ์‚ฐ์ž๊ฐ€ ๋ฐ˜๋ณต์„ ๋‚˜ํƒ€๋‚ด๋Š” ๋ฐฉ์‹๊ณผ ์œ ์‚ฌํ•˜๋‹ค). ๋ถ€๋ก A์—๋Š” ๋ชจ๋“  ๋ชฉ๋ก ์—ฐ์‚ฐ์ž๊ฐ€ ํ‘œ์ค€ ABNF ํ‘œ๊ธฐ๋ฒ•์œผ๋กœ ํ™•์žฅ๋œ ์ˆ˜์ง‘๋œ ๋ฌธ๋ฒ•์ด ํ‘œ์‹œ๋˜์–ด ์žˆ๋‹ค.

๊ด€๋ก€์ƒ, "obs-"๋กœ ์ ‘๋‘์–ด๊ฐ€ ๋ถ™์€ ABNF ๊ทœ์น™ ์ด๋ฆ„์€ ์—ญ์‚ฌ์  ์ด์œ ๋กœ ๋‚จ์•„ ์žˆ๋Š” ๊ตฌ์‹ ๋ฌธ๋ฒ• ๊ทœ์น™์„ ๋‚˜ํƒ€๋‚ธ๋‹ค.

๋‹ค์Œ์˜ ํ•ต์‹ฌ ๊ทœ์น™๋“ค์€ [RFC5234] ๋ฐ ํ•ด๋‹น ๋ถ€๋ก์— ์ •์˜๋œ ์ฐธ์กฐ๋กœ ํฌํ•จ๋œ๋‹ค: ALPHA (๋ฌธ์ž), CR (์บ๋ฆฌ์ง€ ๋ฆฌํ„ด), CRLF (CR LF), CTL (์ œ์–ด ๋ฌธ์ž), DIGIT (10์ง„์ˆ˜ 0-9), DQUOTE (๋”ฐ์˜ดํ‘œ), HEXDIG (16์ง„์ˆ˜ 0-9/A-F/a-f), HTAB (์ˆ˜ํ‰ ํƒญ), LF (๋ผ์ธ ํ”ผ๋“œ), OCTET (์ž„์˜์˜ 8๋น„ํŠธ ๋ฐ์ดํ„ฐ), SP (๊ณต๋ฐฑ), ๋ฐ VCHAR (ํ‘œ์‹œ ๊ฐ€๋Šฅํ•œ [USASCII] ๋ฌธ์ž).

์•„๋ž˜์˜ ๊ทœ์น™๋“ค์€ [HTTP]์— ์ •์˜๋˜์–ด ์žˆ๋‹ค:

  BWS           = <BWS, see [HTTP], Section 5.6.3>
  OWS           = <OWS, see [HTTP], Section 5.6.3>
  RWS           = <RWS, see [HTTP], Section 5.6.3>
  absolute-path = <absolute-path, see [HTTP], Section 4.1>
  field-name    = <field-name, see [HTTP], Section 5.1>
  field-value   = <field-value, see [HTTP], Section 5.5>
  obs-text      = <obs-text, see [HTTP], Section 5.6.4>
  quoted-string = <quoted-string, see [HTTP], Section 5.6.4>
  token         = <token, see [HTTP], Section 5.6.2>
  transfer-coding =
                  <transfer-coding, see [HTTP], Section 10.1.4>

์•„๋ž˜์˜ ๊ทœ์น™๋“ค์€ [URI]์— ์ •์˜๋˜์–ด ์žˆ๋‹ค:

  absolute-URI  = <absolute-URI, see [URI], Section 4.3>
  authority     = <authority, see [URI], Section 3.2>
  uri-host      = <host, see [URI], Section 3.2.2>
  port          = <port, see [URI], Section 3.2.3>
  query         = <query, see [URI], Section 3.4>

2. ๋ฉ”์‹œ์ง€

HTTP/1.1 ํด๋ผ์ด์–ธํŠธ์™€ ์„œ๋ฒ„๋Š” ๋ฉ”์‹œ์ง€๋ฅผ ์ „์†กํ•จ์œผ๋กœ์จ ํ†ต์‹ ํ•œ๋‹ค. ์ผ๋ฐ˜ ์šฉ์–ด์™€ ํ•ต์‹ฌ ๊ฐœ๋…์€ Section 3 of [HTTP]๋ฅผ ์ฐธ์กฐํ•˜๋ผ.

2.1. ๋ฉ”์‹œ์ง€ ํ˜•์‹

HTTP/1.1 ๋ฉ”์‹œ์ง€๋Š” start-line ๋‹ค์Œ์— CRLF๊ฐ€ ์˜ค๊ณ  ๊ทธ ๋’ค์— ์ธํ„ฐ๋„ท ๋ฉ”์‹œ์ง€ ํ˜•์‹๊ณผ ์œ ์‚ฌํ•œ ํ˜•ํƒœ์˜ ์˜ฅํ…Ÿ ์‹œํ€€์Šค๋กœ ๊ตฌ์„ฑ๋œ๋‹ค: 0๊ฐœ ์ด์ƒ์˜ ํ—ค๋” ํ•„๋“œ ํ–‰(ํ†ต์นญํ•˜์—ฌ "ํ—ค๋”" ๋˜๋Š” "ํ—ค๋” ์„น์…˜"), ํ—ค๋” ์„น์…˜์˜ ๋์„ ๋‚˜ํƒ€๋‚ด๋Š” ๋นˆ ์ค„, ๊ทธ๋ฆฌ๊ณ  ์„ ํƒ์ ์ธ ๋ฉ”์‹œ์ง€ ๋ณธ๋ฌธ.

๋ฉ”์‹œ์ง€๋Š” ํด๋ผ์ด์–ธํŠธ์—์„œ ์„œ๋ฒ„๋กœ์˜ ์š”์ฒญ์ด๊ฑฐ๋‚˜ ์„œ๋ฒ„์—์„œ ํด๋ผ์ด์–ธํŠธ๋กœ์˜ ์‘๋‹ต์ผ ์ˆ˜ ์žˆ๋‹ค. ๋ฌธ๋ฒ•์ ์œผ๋กœ ๋‘ ์ข…๋ฅ˜์˜ ๋ฉ”์‹œ์ง€๋Š” ์˜ค์ง start-line์—์„œ๋งŒ ์ฐจ์ด๊ฐ€ ๋‚˜๋ฉฐ, ์ด๋Š” ์š”์ฒญ์˜ ๊ฒฝ์šฐ request-line์ด๊ณ  ์‘๋‹ต์˜ ๊ฒฝ์šฐ status-line์ด๋ฉฐ, ๋ฉ”์‹œ์ง€ ๋ณธ๋ฌธ์˜ ๊ธธ์ด๋ฅผ ๊ฒฐ์ •ํ•˜๋Š” ์•Œ๊ณ ๋ฆฌ์ฆ˜(Section 6)๋„ ๋‹ค๋ฅด๋‹ค.

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

HTTP์€ MIME(๋‹ค๋ชฉ์  ์ธํ„ฐ๋„ท ์šฐํŽธ ํ™•์žฅ)์˜ ์ผ๋ถ€ ํ”„๋กœํ† ์ฝœ ์š”์†Œ๋ฅผ ํ™œ์šฉํ•œ๋‹ค. HTTP์™€ MIME ๋ฉ”์‹œ์ง€์˜ ์ฐจ์ด์ ์€ ๋ถ€๋ก B๋ฅผ ์ฐธ์กฐํ•˜๋ผ.

2.2. ๋ฉ”์‹œ์ง€ ๊ตฌ๋ฌธ ๋ถ„์„

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

์ˆ˜์‹ ์ž๋Š” MUST US-ASCII์˜ ์ƒ์œ„ ์ง‘ํ•ฉ์ธ ์ธ์ฝ”๋”ฉ์œผ๋กœ ํ‘œํ˜„๋œ ์˜ฅํ…Ÿ ์‹œํ€€์Šค๋กœ HTTP ๋ฉ”์‹œ์ง€๋ฅผ ๊ตฌ๋ฌธ ๋ถ„์„ํ•ด์•ผ ํ•œ๋‹ค. ํŠน์ • ์ธ์ฝ”๋”ฉ์„ ๊ณ ๋ คํ•˜์ง€ ์•Š๊ณ  ์œ ๋‹ˆ์ฝ”๋“œ ๋ฌธ์ž ์ŠคํŠธ๋ฆผ์œผ๋กœ HTTP ๋ฉ”์‹œ์ง€๋ฅผ ๊ตฌ๋ฌธ ๋ถ„์„ํ•˜๋ฉด LF (%x0A)๋ฅผ ํฌํ•จํ•œ ์ž˜๋ชป๋œ ๋‹ค๋ฐ”์ดํŠธ ๋ฌธ์ž ์‹œํ€€์Šค๋ฅผ ๋ฌธ์ž์—ด ์ฒ˜๋ฆฌ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๊ฐ€ ๋‹ค๋ฅด๊ฒŒ ์ฒ˜๋ฆฌํ•˜๋Š” ๋ฐฉ์‹์œผ๋กœ ์ธํ•ด ๋ณด์•ˆ ์ทจ์•ฝ์ ์ด ๋ฐœ์ƒํ•œ๋‹ค. ๋ฌธ์ž์—ด ๊ธฐ๋ฐ˜ ํŒŒ์„œ๋Š” ๋ฉ”์‹œ์ง€์—์„œ ์š”์†Œ๋ฅผ ์ถ”์ถœํ•œ ์ดํ›„์—๋งŒ ์•ˆ์ „ํ•˜๊ฒŒ ์‚ฌ์šฉ๋  ์ˆ˜ ์žˆ๋‹ค(์˜ˆ: ๋ฉ”์‹œ์ง€ ๊ตฌ๋ฌธ ๋ถ„์„์ด ๊ฐœ๋ณ„ ํ•„๋“œ ํ–‰์„ ๊ตฌ๋ถ„ํ•œ ํ›„ ํ—ค๋” ํ•„๋“œ ๊ฐ’ ๋‚ด๋ถ€์—์„œ ์‚ฌ์šฉ).

start-line๊ณผ ํ•„๋“œ์˜ ํ–‰ ์ข…๊ฒฐ์ž๋Š” CRLF ์‹œํ€€์Šค์ด์ง€๋งŒ, ์ˆ˜์‹ ์ž๋Š” ๋‹จ์ผ LF๋ฅผ ํ–‰ ์ข…๊ฒฐ์ž๋กœ ์ธ์‹ํ•˜๊ณ  ์•ž์„  CR์„ ๋ฌด์‹œํ•  ์ˆ˜ ์žˆ๋‹ค.

์†ก์‹ ์ž๋Š” ์ฝ˜ํ…์ธ  ์ด์™ธ์˜ ํ”„๋กœํ† ์ฝœ ์š”์†Œ ๋‚ด์—์„œ LF ๋ฐ”๋กœ ์•ž์— ์˜ค์ง€ ์•Š๋Š” ๋‹จ๋… CR(์ฆ‰, LF ์—†์ด ์˜ค๋Š” CR)์„ ์ƒ์„ฑํ•ด์„œ๋Š” ์•ˆ ๋œ๋‹ค. ๊ทธ๋Ÿฌํ•œ ๋‹จ๋… CR์„ ๋ฐ›์€ ์ˆ˜์‹ ์ž๋Š” ํ•ด๋‹น ์š”์†Œ๋ฅผ ๋ฌดํšจ๋กœ ๊ฐ„์ฃผํ•˜๊ฑฐ๋‚˜ ๊ฐ ๋‹จ๋… CR์„ SP๋กœ ๋Œ€์ฒดํ•œ ํ›„ ์š”์†Œ๋ฅผ ์ฒ˜๋ฆฌํ•˜๊ฑฐ๋‚˜ ๋ฉ”์‹œ์ง€๋ฅผ ์ „๋‹ฌํ•ด์•ผ ํ•œ๋‹ค.

์ดˆ๊ธฐ HTTP/1.0 ์‚ฌ์šฉ์ž ์—์ด์ „ํŠธ ๊ตฌํ˜„์ฒด๋Š” ์ผ๋ถ€ ์ดˆ๊ธฐ ์„œ๋ฒ„ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์ด ๋ผ์ธ ์ข…๋ฃŒ๋กœ ๋๋‚˜์ง€ ์•Š๋Š” ๋ฉ”์‹œ์ง€ ๋ณธ๋ฌธ์„ ์ฝ์ง€ ๋ชปํ•˜๋Š” ๋ฌธ์ œ๋ฅผ ์šฐํšŒํ•˜๊ธฐ ์œ„ํ•ด POST ์š”์ฒญ ํ›„ ์ถ”๊ฐ€ CRLF๋ฅผ ๋ณด๋‚ผ ์ˆ˜ ์žˆ์—ˆ๋‹ค. HTTP/1.1 ์‚ฌ์šฉ์ž ์—์ด์ „ํŠธ๋Š” ์š”์ฒญ ์•ž๋’ค์— ์ถ”๊ฐ€ CRLF๋ฅผ ๋‘์–ด์„œ๋Š” ์•ˆ ๋œ๋‹ค. ์š”์ฒญ ๋ฉ”์‹œ์ง€ ๋ณธ๋ฌธ์„ ๋ผ์ธ ์ข…๋ฃŒ๋กœ ๋๋‚ด๋ ค๋ฉด, ์‚ฌ์šฉ์ž ์—์ด์ „ํŠธ๋Š” ์ข…๋ฃŒ CRLF ์˜ฅํ…Ÿ์„ ๋ฉ”์‹œ์ง€ ๋ณธ๋ฌธ ๊ธธ์ด์˜ ์ผ๋ถ€๋กœ ๊ณ„์‚ฐํ•ด์•ผ ํ•œ๋‹ค.

๊ฒฌ๊ณ ์„ฑ์„ ์œ„ํ•ด ์š”์ฒญ ํ–‰์„ ์ˆ˜์‹ ํ•˜๊ณ  ๊ตฌ๋ฌธ ๋ถ„์„ํ•  ๊ฒƒ์œผ๋กœ ์˜ˆ์ƒ๋˜๋Š” ์„œ๋ฒ„๋Š” ์š”์ฒญ ํ–‰ ์ „์— ์ˆ˜์‹ ๋œ ์ ์–ด๋„ ํ•˜๋‚˜์˜ ๋นˆ ํ–‰(CRLF)์„ ๋ฌด์‹œํ•˜๋Š” ๊ฒƒ์ด ๋ฐ”๋žŒ์งํ•˜๋‹ค.

์†ก์‹ ์ž๋Š” start-line๊ณผ ์ฒซ ๋ฒˆ์งธ ํ—ค๋” ํ•„๋“œ ์‚ฌ์ด์— ๊ณต๋ฐฑ์„ ๋ณด๋‚ด์„œ๋Š” ์•ˆ ๋œ๋‹ค.

start-line๊ณผ ์ฒซ ๋ฒˆ์งธ ํ—ค๋” ํ•„๋“œ ์‚ฌ์ด์— ๊ณต๋ฐฑ์ด ํฌํ•จ๋œ ์ˆ˜์‹ ์ž๋Š” ๋ฉ”์‹œ์ง€๋ฅผ ๋ฌดํšจ๋กœ ๊ฑฐ๋ถ€ํ•˜๊ฑฐ๋‚˜ ๊ณต๋ฐฑ์œผ๋กœ ์‹œ์ž‘ํ•˜๋Š” ๊ฐ ํ–‰์„ ์ถ”๊ฐ€ ์ฒ˜๋ฆฌ ์—†์ด ์†Œ๋น„ํ•ด์•ผ ํ•œ๋‹ค(์ฆ‰, ์ ์ ˆํ•œ ํ˜•์‹์˜ ํ—ค๋” ํ•„๋“œ๊ฐ€ ์ˆ˜์‹ ๋˜๊ฑฐ๋‚˜ ํ—ค๋” ์„น์…˜์ด ์ข…๋ฃŒ๋  ๋•Œ๊นŒ์ง€ ๊ณต๋ฐฑ์œผ๋กœ ์‹œ์ž‘ํ•˜๋Š” ํ–‰๊ณผ ๊ทธ ๋’ค๋ฅผ ๋”ฐ๋ฅด๋Š” ๋ชจ๋“  ํ–‰์„ ๋ฌด์‹œ). ๋ฌดํšจํ•œ ๊ณต๋ฐฑ ์„ ํ–‰ ํ–‰์„ ๊ฑฐ๋ถ€ํ•˜๊ฑฐ๋‚˜ ์ œ๊ฑฐํ•˜๋Š” ๊ฒƒ์€ ์ดํ›„ ์ˆ˜์‹ ์ž๊ฐ€ ์š”์ฒญ ์Šค๋จธ๊ธ€๋ง(Section 11.2) ๋˜๋Š” ์‘๋‹ต ๋ถ„ํ• (Section 11.1) ๊ณต๊ฒฉ์— ์ทจ์•ฝํ•  ์ˆ˜ ์žˆ๋Š” ๋‹ค์šด์ŠคํŠธ๋ฆผ ์ˆ˜์‹ ์ž์— ์˜ํ•ด ์ž˜๋ชป ํ•ด์„๋˜๋Š” ๊ฒƒ์„ ๋ฐฉ์ง€ํ•˜๊ธฐ ์œ„ํ•ด ํ•„์š”ํ•˜๋‹ค.

์˜ค์ง HTTP ์š”์ฒญ ๋ฉ”์‹œ์ง€๋งŒ์„ ์ˆ˜์‹ ํ•˜๋„๋ก ๋Œ€๊ธฐํ•˜๊ฑฐ๋‚˜ start-line ์ƒ์œผ๋กœ HTTP ์š”์ฒญ ๋ฉ”์‹œ์ง€๋กœ ๋ณด์ด๋Š” ๊ฒƒ์„ ์ฒ˜๋ฆฌํ•˜๋Š” ์„œ๋ฒ„๊ฐ€, ์œ„์—์„œ ์–ธ๊ธ‰ํ•œ ๊ฒฌ๊ณ ์„ฑ ์˜ˆ์™ธ๋ฅผ ์ œ์™ธํ•˜๊ณ  HTTP-๋ฉ”์‹œ์ง€ ๋ฌธ๋ฒ•๊ณผ ์ผ์น˜ํ•˜์ง€ ์•Š๋Š” ์˜ฅํ…Ÿ ์‹œํ€€์Šค๋ฅผ ์ˆ˜์‹ ํ•˜๋ฉด, ์„œ๋ฒ„๋Š” 400 (Bad Request) ์‘๋‹ต์„ ๋ณด๋‚ด๊ณ  ์—ฐ๊ฒฐ์„ ๋‹ซ๋Š” ๊ฒƒ์ด ๋ฐ”๋žŒ์งํ•˜๋‹ค.

2.3. HTTP ๋ฒ„์ „

HTTP์€ "<major>.<minor>" ํ‘œ๊ธฐ๋ฒ•์„ ์‚ฌ์šฉํ•˜์—ฌ ํ”„๋กœํ† ์ฝœ ๋ฒ„์ „์„ ํ‘œ์‹œํ•œ๋‹ค. ์ด ๋ช…์„ธ์„œ๋Š” ๋ฒ„์ „ "1.1"์„ ์ •์˜ํ•œ๋‹ค. Section 2.5 of [HTTP]๋Š” HTTP ๋ฒ„์ „ ๋ฒˆํ˜ธ์˜ ์˜๋ฏธ๋ฅผ ์ง€์ •ํ•œ๋‹ค.

HTTP/1.x ๋ฉ”์‹œ์ง€์˜ ๋ฒ„์ „์€ start-line์˜ HTTP-version ํ•„๋“œ๋กœ ํ‘œ์‹œ๋œ๋‹ค. HTTP-version์€ ๋Œ€์†Œ๋ฌธ์ž๋ฅผ ๊ตฌ๋ถ„ํ•œ๋‹ค.

  HTTP-version  = HTTP-name "/" DIGIT "." DIGIT
  HTTP-name     = %s"HTTP"

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

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

์„œ๋ฒ„๋Š” ํด๋ผ์ด์–ธํŠธ๊ฐ€ ์‚ฌ์–‘์„ ์ž˜๋ชป ๊ตฌํ˜„ํ•˜์—ฌ ์ดํ›„ ๋ฒ„์ „์˜ ์‘๋‹ต์„ ์˜ฌ๋ฐ”๋ฅด๊ฒŒ ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์—†๋‹ค๊ณ  ์•Œ๋ ค์ ธ ์žˆ๊ฑฐ๋‚˜ ์˜์‹ฌ๋˜๋Š” ๊ฒฝ์šฐ, HTTP/1.1 ์š”์ฒญ์— ๋Œ€ํ•ด HTTP/1.0 ์‘๋‹ต์„ ๋ณด๋‚ผ ์ˆ˜ ์žˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด ํด๋ผ์ด์–ธํŠธ๊ฐ€ ๋ฒ„์ „ ๋ฒˆํ˜ธ๋ฅผ ์˜ฌ๋ฐ”๋ฅด๊ฒŒ ๊ตฌ๋ฌธ ๋ถ„์„ํ•˜์ง€ ๋ชปํ•˜๊ฑฐ๋‚˜ ์ค‘๊ณ„์ž๊ฐ€ ์ฃผ์–ด์ง„ ๋งˆ์ด๋„ˆ ๋ฒ„์ „๊ณผ ์ผ์น˜ํ•˜์ง€ ์•Š๋”๋ผ๋„ HTTP-version์„ ๋ฌด์ž‘์ • ์ „๋‹ฌํ•˜๋Š” ๊ฒƒ์œผ๋กœ ์•Œ๋ ค์ง„ ๊ฒฝ์šฐ์ด๋‹ค. ์ด๋Ÿฌํ•œ ํ”„๋กœํ† ์ฝœ ๋‹ค์šด๊ทธ๋ ˆ์ด๋“œ๋Š” ํŠน์ • ํด๋ผ์ด์–ธํŠธ ์†์„ฑ(์˜ˆ: User-Agent์™€ ๊ฐ™์ด ์ž˜๋ชป๋œ ํด๋ผ์ด์–ธํŠธ๊ฐ€ ๋ณด๋‚ด๋Š” ๊ฐ’๊ณผ ๊ณ ์œ ํ•˜๊ฒŒ ์ผ์น˜ํ•˜๋Š” ์š”์ฒญ ํ—ค๋” ํ•„๋“œ)์ด ํŠธ๋ฆฌ๊ฑฐ๋˜์ง€ ์•Š๋Š” ํ•œ ์ˆ˜ํ–‰ํ•ด์„œ๋Š” ์•ˆ ๋œ๋‹ค.

3. ์š”์ฒญ ํ–‰

request-line์€ method ํ† ํฐ์œผ๋กœ ์‹œ์ž‘ํ•˜๋ฉฐ, ๊ทธ ๋’ค์— ๋‹จ์ผ ๊ณต๋ฐฑ(SP), request-target, ๋˜ ๋‹ค๋ฅธ ๋‹จ์ผ ๊ณต๋ฐฑ(SP)์ด ์˜ค๊ณ  ํ”„๋กœํ† ์ฝœ ๋ฒ„์ „์œผ๋กœ ๋๋‚œ๋‹ค.

์š”์ฒญ ํ–‰ ๋ฌธ๋ฒ• ๊ทœ์น™์€ ๊ฐ ๊ตฌ์„ฑ ์š”์†Œ๊ฐ€ ๋‹จ์ผ SP ์˜ฅํ…Ÿ์œผ๋กœ ๊ตฌ๋ถ„๋˜์–ด์•ผ ํ•จ์„ ์š”๊ตฌํ•˜์ง€๋งŒ, ์ˆ˜์‹ ์ž๋Š” ๋Œ€์‹  ๊ณต๋ฐฑ์œผ๋กœ ๊ตฌ๋ถ„๋œ ๋‹จ์–ด ๊ฒฝ๊ณ„๋กœ ๊ตฌ๋ฌธ ๋ถ„์„ํ•  MAY ์žˆ์œผ๋ฉฐ, CRLF ์ข…๊ฒฐ์ž๋ฅผ ์ œ์™ธํ•˜๊ณ  ์•ž์ด๋‚˜ ๋’ค์˜ ๊ณต๋ฐฑ์„ ๋ฌด์‹œํ•˜๋ฉด์„œ ๋ชจ๋“  ํ˜•ํƒœ์˜ ๊ณต๋ฐฑ์„ SP ๊ตฌ๋ถ„์ž๋กœ ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์žˆ๋‹ค. ๊ทธ๋Ÿฌํ•œ ๊ณต๋ฐฑ์—๋Š” ํ•˜๋‚˜ ์ด์ƒ์˜ ๋‹ค์Œ ์˜ฅํ…Ÿ์ด ํฌํ•จ๋œ๋‹ค: SP, HTAB, VT (%x0B), FF (%x0C), ๋˜๋Š” bare CR. ๊ทธ๋Ÿฌ๋‚˜ ๊ด€๋Œ€ํ•œ(lenient) ๊ตฌ๋ฌธ ๋ถ„์„์€ ๋ฉ”์‹œ์ง€์˜ ์ˆ˜์‹ ์ž๊ฐ€ ์—ฌ๋Ÿฌ ๋ช…์ด๊ณ  ๊ฐ ์ˆ˜์‹ ์ž๊ฐ€ ์ž์ฒด์ ์œผ๋กœ ๋‹ค๋ฅธ ๊ฒฌ๊ณ ์„ฑ ํ•ด์„์„ ๊ฐ€์งˆ ๊ฒฝ์šฐ ์š”์ฒญ ์Šค๋จธ๊ธ€๋ง ๋ณด์•ˆ ์ทจ์•ฝ์ ์„ ์ดˆ๋ž˜ํ•  ์ˆ˜ ์žˆ๋‹ค(์ž์„ธํ•œ ๋‚ด์šฉ์€ Section 11.2 ์ฐธ์กฐ).

HTTP๋Š” ์š”์ฒญ ํ–‰ ๊ธธ์ด์— ๋Œ€ํ•ด ์‚ฌ์ „ ์ •์˜๋œ ์ œํ•œ์„ ๋‘์ง€ ์•Š๋Š”๋‹ค(์ž์„ธํ•œ ๋‚ด์šฉ์€ Section 2.3 of [HTTP] ์ฐธ์กฐ). ์„œ๋ฒ„๊ฐ€ ์ž์‹ ์ด ๊ตฌํ˜„ํ•œ ๊ฒƒ๋ณด๋‹ค ๋” ๊ธด method๋ฅผ ์ˆ˜์‹ ํ•˜๋ฉด ์„œ๋ฒ„๋Š” SHOULD 501 (Not Implemented) ์ƒํƒœ ์ฝ”๋“œ๋ฅผ ์‘๋‹ตํ•ด์•ผ ํ•œ๋‹ค. ์„œ๋ฒ„๊ฐ€ ์ž์‹ ์ด ํŒŒ์‹ฑํ•˜๋ ค ํ•˜์ง€ ์•Š๋Š” ์–ด๋–ค URI๋ณด๋‹ค ๋” ๊ธด request-target์„ ์ˆ˜์‹ ํ•˜๋ฉด ์„œ๋ฒ„๋Š” MUST 414 (URI Too Long) ์ƒํƒœ ์ฝ”๋“œ๋ฅผ ์‘๋‹ตํ•ด์•ผ ํ•œ๋‹ค(์ž์„ธํ•œ ๋‚ด์šฉ์€ Section 15.5.15 of [HTTP] ์ฐธ์กฐ).

์‹ค๋ฌด์—์„œ๋Š” ์š”์ฒญ ํ–‰ ๊ธธ์ด์— ๋Œ€ํ•œ ๋‹ค์–‘ํ•œ ์ž„์˜์˜ ์ œํ•œ์ด ์กด์žฌํ•œ๋‹ค. ๋ชจ๋“  HTTP ๋ฐœ์‹ ์ž์™€ ์ˆ˜์‹ ์ž๊ฐ€ ์ตœ์†Œํ•œ 8000 ์˜ฅํ…Ÿ์˜ request-line ๊ธธ์ด๋ฅผ ์ง€์›ํ•˜๋Š” ๊ฒƒ์ด RECOMMENDED๋œ๋‹ค.

3.1. ๋ฉ”์„œ๋“œ

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

์ด ๋ช…์„ธ์„œ์—์„œ ์ •์˜ํ•œ ์š”์ฒญ ๋ฉ”์„œ๋“œ๋Š” Section 9 of [HTTP]์—์„œ ์ฐพ์„ ์ˆ˜ ์žˆ์œผ๋ฉฐ, HTTP ๋ฉ”์„œ๋“œ ๋ ˆ์ง€์ŠคํŠธ๋ฆฌ ๋ฐ ์ƒˆ๋กœ์šด ๋ฉ”์„œ๋“œ ์ •์˜์— ๋Œ€ํ•œ ๊ณ ๋ ค์‚ฌํ•ญ๋„ ๊ทธ๊ณณ์— ์„ค๋ช…๋˜์–ด ์žˆ๋‹ค.

3.2. ์š”์ฒญ ๋Œ€์ƒ

request-target์€ ์š”์ฒญ์„ ์ ์šฉํ•  ๋Œ€์ƒ ๋ฆฌ์†Œ์Šค๋ฅผ ์‹๋ณ„ํ•œ๋‹ค. ํด๋ผ์ด์–ธํŠธ๋Š” ์›ํ•˜๋Š” ๋Œ€์ƒ URI๋กœ๋ถ€ํ„ฐ request-target์„ ์œ ๋„ํ•œ๋‹ค. method ๋ฐ ์š”์ฒญ์ด ํ”„๋ก์‹œ๋กœ ํ–ฅํ•˜๋Š”์ง€ ์—ฌ๋ถ€์— ๋”ฐ๋ผ request-target์—๋Š” ๋„ค ๊ฐ€์ง€ ์„œ๋กœ ๋‹ค๋ฅธ ํ˜•์‹์ด ์žˆ๋‹ค.

request-target์—๋Š” ๊ณต๋ฐฑ์ด ํ—ˆ์šฉ๋˜์ง€ ์•Š๋Š”๋‹ค. ๋ถˆํ–‰ํžˆ๋„ ์ผ๋ถ€ ์‚ฌ์šฉ์ž ์—์ด์ „ํŠธ๋Š” ํ•˜์ดํผํ…์ŠคํŠธ ์ฐธ์กฐ์—์„œ ๋ฐœ๊ฒฌ๋œ ๊ณต๋ฐฑ์„ ์ ์ ˆํžˆ ์ธ์ฝ”๋”ฉํ•˜๊ฑฐ๋‚˜ ์ œ์™ธํ•˜์ง€ ๋ชปํ•˜์—ฌ, ์ž˜๋ชป ํ˜•์„ฑ๋œ request-line์—์„œ ์ด๋Ÿฌํ•œ ํ—ˆ์šฉ๋˜์ง€ ์•Š๋Š” ๋ฌธ์ž๊ฐ€ request-target์œผ๋กœ ์ „์†ก๋˜๋Š” ๊ฒฝ์šฐ๊ฐ€ ์žˆ๋‹ค.

์ž˜๋ชป๋œ request-line์„ ์ˆ˜์‹ ํ•œ ์ˆ˜์‹ ์ž๋Š” request-target์ด ์ ์ ˆํžˆ ์ธ์ฝ”๋”ฉ๋œ 301 (Moved Permanently) ๋ฆฌ๋‹ค์ด๋ ‰ํŠธ ๋˜๋Š” 400 (Bad Request) ์˜ค๋ฅ˜๋กœ ์‘๋‹ตํ•˜๋Š” ๊ฒƒ์ด SHOULD ๊ถŒ์žฅ๋œ๋‹ค. ์ˆ˜์‹ ์ž๋Š” ์ž๋™์œผ๋กœ ์ˆ˜์ •ํ•˜์—ฌ ๋ฆฌ๋‹ค์ด๋ ‰ํŠธ ์—†์ด ์š”์ฒญ์„ ์ฒ˜๋ฆฌํ•˜๋ ค๊ณ  ์‹œ๋„ํ•ด์„œ๋Š” ์•ˆ ๋˜๋ฉฐ, ๊ทธ ์ด์œ ๋Š” ์ž˜๋ชป๋œ request-line์ด ์š”์ฒญ ์ฒด์ธ์ƒ์˜ ๋ณด์•ˆ ํ•„ํ„ฐ๋ฅผ ์šฐํšŒํ•˜๊ธฐ ์œ„ํ•ด ์˜๋„์ ์œผ๋กœ ์กฐ์ž‘๋˜์—ˆ์„ ์ˆ˜ ์žˆ๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค.

ํด๋ผ์ด์–ธํŠธ๋Š” ๋ชจ๋“  HTTP/1.1 ์š”์ฒญ ๋ฉ”์‹œ์ง€์—์„œ Host ํ—ค๋” ํ•„๋“œ๋ฅผ MUST ์ „์†กํ•ด์•ผ ํ•œ๋‹ค(Section 7.2 of [HTTP] ์ฐธ์กฐ). ๋Œ€์ƒ URI์— authority ๊ตฌ์„ฑ ์š”์†Œ๊ฐ€ ํฌํ•จ๋˜์–ด ์žˆ์œผ๋ฉด, ํด๋ผ์ด์–ธํŠธ๋Š” userinfo ํ•˜์œ„ ๊ตฌ์„ฑ ์š”์†Œ ๋ฐ ๊ทธ "@" ๊ตฌ๋ถ„์ž๋ฅผ ์ œ์™ธํ•œ ๊ทธ authority ๊ตฌ์„ฑ ์š”์†Œ์™€ ๋™์ผํ•œ Host ํ•„๋“œ ๊ฐ’์„ ์ „์†กํ•ด์•ผ ํ•œ๋‹ค. ๋Œ€์ƒ URI์— authority ๊ตฌ์„ฑ ์š”์†Œ๊ฐ€ ์—†๊ฑฐ๋‚˜ ์ •์˜๋˜์ง€ ์•Š์€ ๊ฒฝ์šฐ, ํด๋ผ์ด์–ธํŠธ๋Š” ๋นˆ ํ•„๋“œ ๊ฐ’์„ ๊ฐ€์ง„ Host ํ—ค๋” ํ•„๋“œ๋ฅผ ์ „์†กํ•ด์•ผ ํ•œ๋‹ค.

์„œ๋ฒ„๋Š” Host ํ—ค๋” ํ•„๋“œ๊ฐ€ ์—†๊ฑฐ๋‚˜ Host ํ—ค๋” ํ•„๋“œ๊ฐ€ ๋‘˜ ์ด์ƒ ํฌํ•จ๋˜์–ด ์žˆ๊ฑฐ๋‚˜ Host ํ—ค๋” ํ•„๋“œ ๊ฐ’์ด ์œ ํšจํ•˜์ง€ ์•Š์€ ๋ชจ๋“  HTTP/1.1 ์š”์ฒญ ๋ฉ”์‹œ์ง€์— ๋Œ€ํ•ด MUST 400 (Bad Request) ์ƒํƒœ ์ฝ”๋“œ๋ฅผ ์‘๋‹ตํ•ด์•ผ ํ•œ๋‹ค.

3.2.1. origin-form

๊ฐ€์žฅ ์ผ๋ฐ˜์ ์ธ request-target ํ˜•์‹์€ origin-form์ด๋‹ค.

CONNECT ๋˜๋Š” ์„œ๋ฒ„ ์ „์ฒด์— ๋Œ€ํ•œ OPTIONS ์š”์ฒญ(์•„๋ž˜์— ์ƒ์„ธ) ์ด์™ธ์˜ ๊ฒฝ์šฐ์— ์›๋ณธ(origin) ์„œ๋ฒ„์— ์ง์ ‘ ์š”์ฒญ์„ ๋ณด๋‚ผ ๋•Œ, ํด๋ผ์ด์–ธํŠธ๋Š” ๋Œ€์ƒ URI์˜ ์ ˆ๋Œ€ ๊ฒฝ๋กœ ๋ฐ ์ฟผ๋ฆฌ ๊ตฌ์„ฑ ์š”์†Œ๋งŒ์„ request-target์œผ๋กœ ๋ณด๋‚ด์•ผ ํ•œ๋‹ค(MUST). ๋Œ€์ƒ URI์˜ ๊ฒฝ๋กœ ๊ตฌ์„ฑ ์š”์†Œ๊ฐ€ ๋น„์–ด ์žˆ์œผ๋ฉด, ํด๋ผ์ด์–ธํŠธ๋Š” origin-form์˜ ๊ฒฝ๋กœ๋กœ "/"๋ฅผ ๋ณด๋‚ด์•ผ ํ•œ๋‹ค(MUST). ๋˜ํ•œ Host ํ—ค๋” ํ•„๋“œ๊ฐ€ ์ „์†ก๋œ๋‹ค(์ž์„ธํ•œ ๋‚ด์šฉ์€ Section 7.2 of [HTTP] ์ฐธ์กฐ).

์˜ˆ๋ฅผ ๋“ค์–ด, ํด๋ผ์ด์–ธํŠธ๊ฐ€ ๋‹ค์Œ ๋ฆฌ์†Œ์Šค์˜ ํ‘œํ˜„์„ ๊ฐ€์ ธ์˜ค๋ ค๋ฉด

http://www.example.org/where?q=now

์›๋ณธ ์„œ๋ฒ„์—์„œ ์ง์ ‘ ๊ฐ€์ ธ์˜ค๊ธฐ ์œ„ํ•ด ํ˜ธ์ŠคํŠธ "www.example.org"์˜ ํฌํŠธ 80์— TCP ์—ฐ๊ฒฐ์„ ์—ด(๋˜๋Š” ์žฌ์‚ฌ์šฉ)ํ•˜๊ณ  ๋‹ค์Œ ํ–‰๋“ค์„ ๋ณด๋‚ธ๋‹ค:

GET /where?q=now HTTP/1.1
Host: www.example.org

๊ทธ ๋’ค์— ์š”์ฒญ ๋ฉ”์‹œ์ง€์˜ ๋‚˜๋จธ์ง€ ๋ถ€๋ถ„์ด ์˜จ๋‹ค.

3.2.2. absolute-form

ํ”„๋ก์‹œ์— ์š”์ฒญ์„ ๋ณด๋‚ผ ๋•Œ(์•„๋ž˜์˜ CONNECT ๋˜๋Š” ์„œ๋ฒ„ ์ „์ฒด OPTIONS ์š”์ฒญ ์ œ์™ธ), ํด๋ผ์ด์–ธํŠธ๋Š” request-target์œผ๋กœ ๋Œ€์ƒ URI๋ฅผ absolute-form์œผ๋กœ ๋ณด๋‚ด์•ผ ํ•œ๋‹ค(MUST).

ํ”„๋ก์‹œ๋Š” ๊ฐ€๋Šฅํ•œ ๊ฒฝ์šฐ ์œ ํšจํ•œ ์บ์‹œ์—์„œ ๊ทธ ์š”์ฒญ์„ ์ฒ˜๋ฆฌํ•˜๊ฑฐ๋‚˜, ํด๋ผ์ด์–ธํŠธ๋ฅผ ๋Œ€์‹ ํ•˜์—ฌ ๋‹ค์Œ ์ธ๋ฐ”์šด๋“œ ํ”„๋ก์‹œ ์„œ๋ฒ„๋กœ ๋˜๋Š” ๋Œ€์ƒ origin ์„œ๋ฒ„๋กœ ๋™์ผํ•œ ์š”์ฒญ์„ ์ˆ˜ํ–‰ํ•˜๋„๋ก ์š”์ฒญ๋ฐ›๋Š”๋‹ค. ์ด๋Ÿฌํ•œ ๋ฉ”์‹œ์ง€์˜ "ํฌ์›Œ๋”ฉ"์— ๋Œ€ํ•œ ์š”๊ตฌ์‚ฌํ•ญ์€ Section 7.6 of [HTTP]์— ์ •์˜๋˜์–ด ์žˆ๋‹ค.

absolute-form์˜ request-line ์˜ˆ์‹œ๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™๋‹ค:

GET http://www.example.org/pub/WWW/TheProject.html HTTP/1.1

ํด๋ผ์ด์–ธํŠธ๋Š” request-target์ด absolute-form์ผ์ง€๋ผ๋„ HTTP/1.1 ์š”์ฒญ์—์„œ Host ํ—ค๋” ํ•„๋“œ๋ฅผ ์ „์†กํ•ด์•ผ ํ•œ๋‹ค(MUST), ์ด๋Š” ์˜ค๋ž˜๋œ HTTP/1.0 ํ”„๋ก์‹œ๋ฅผ ํ†ตํ•ด Host ์ •๋ณด๋ฅผ ์ „๋‹ฌํ•˜๋„๋ก ํ•˜๊ธฐ ์œ„ํ•จ์ด๋‹ค.

ํ”„๋ก์‹œ๊ฐ€ absolute-form์˜ request-target์„ ๊ฐ€์ง„ ์š”์ฒญ์„ ์ˆ˜์‹ ํ•˜๋ฉด, ํ”„๋ก์‹œ๋Š” ์ˆ˜์‹ ๋œ Host ํ—ค๋” ํ•„๋“œ(์žˆ์„ ๊ฒฝ์šฐ)๋ฅผ ๋ฌด์‹œํ•˜๊ณ  ๋Œ€์‹  request-target์˜ ํ˜ธ์ŠคํŠธ ์ •๋ณด๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋Œ€์ฒดํ•ด์•ผ ํ•œ๋‹ค(MUST). ๊ทธ๋Ÿฌํ•œ ์š”์ฒญ์„ ์ „๋‹ฌํ•˜๋Š” ํ”„๋ก์‹œ๋Š” ์ˆ˜์‹ ๋œ Host ํ•„๋“œ ๊ฐ’์„ ๊ทธ๋Œ€๋กœ ์ „๋‹ฌํ•ด์„œ๋Š” ์•ˆ ๋˜๋ฉฐ, ์ˆ˜์‹ ๋œ request-target์„ ๊ธฐ๋ฐ˜์œผ๋กœ ์ƒˆ Host ํ•„๋“œ ๊ฐ’์„ ์ƒ์„ฑํ•ด์•ผ ํ•œ๋‹ค(MUST).

์›๋ณธ ์„œ๋ฒ„๊ฐ€ absolute-form์˜ request-target์„ ๊ฐ€์ง„ ์š”์ฒญ์„ ์ˆ˜์‹ ํ•˜๋ฉด, ์›๋ณธ ์„œ๋ฒ„๋Š” ์ˆ˜์‹ ๋œ Host ํ—ค๋” ํ•„๋“œ(์žˆ์„ ๊ฒฝ์šฐ)๋ฅผ ๋ฌด์‹œํ•˜๊ณ  ๋Œ€์‹  request-target์˜ ํ˜ธ์ŠคํŠธ ์ •๋ณด๋ฅผ ์‚ฌ์šฉํ•ด์•ผ ํ•œ๋‹ค(MUST). ์š”์ฒญ-ํƒ€๊ฒŸ์— authority ๊ตฌ์„ฑ ์š”์†Œ๊ฐ€ ์—†์œผ๋ฉด ์ด ๊ฒฝ์šฐ ๋นˆ Host ํ—ค๋” ํ•„๋“œ๊ฐ€ ์ „์†ก๋œ๋‹ค๋Š” ์ ์— ์œ ์˜ํ•˜๋ผ.

๋Œ€๋‹ค์ˆ˜์˜ HTTP/1.1 ํด๋ผ์ด์–ธํŠธ๋Š” absolute-form์„ ํ”„๋ก์‹œ์—๋งŒ ๋ณด๋‚ผ ๊ฒƒ์ด์ง€๋งŒ, ์„œ๋ฒ„๋Š” ์š”์ฒญ์—์„œ absolute-form์„ ์ˆ˜๋ฝํ•ด์•ผ ํ•œ๋‹ค(MUST).

3.2.3. authority-form

request-target์˜ authority-form์€ CONNECT ์š”์ฒญ(Section 9.3.6 of [HTTP])์—๋งŒ ์‚ฌ์šฉ๋œ๋‹ค. ์ด๊ฒƒ์€ ํ„ฐ๋„ ๋ชฉ์ ์ง€์˜ uri-host์™€ port ๋ฒˆํ˜ธ๋งŒ์œผ๋กœ ๊ตฌ์„ฑ๋˜๋ฉฐ ์ฝœ๋ก (":")์œผ๋กœ ๊ตฌ๋ถ„๋œ๋‹ค.

ํ”„๋ก์‹œ๋ฅผ ํ†ตํ•ด ํ„ฐ๋„์„ ์„ค์ •ํ•˜๊ธฐ ์œ„ํ•œ CONNECT ์š”์ฒญ์„ ํ•  ๋•Œ, ํด๋ผ์ด์–ธํŠธ๋Š” ํ„ฐ๋„ ๋ชฉ์ ์ง€์˜ ํ˜ธ์ŠคํŠธ์™€ ํฌํŠธ๋งŒ์„ request-target์œผ๋กœ ๋ณด๋‚ด์•ผ ํ•œ๋‹ค(MUST). ํด๋ผ์ด์–ธํŠธ๋Š” ๋Œ€์ƒ URI์˜ authority ๊ตฌ์„ฑ ์š”์†Œ์—์„œ ํ˜ธ์ŠคํŠธ์™€ ํฌํŠธ๋ฅผ ํš๋“ํ•˜๋˜, ๋Œ€์ƒ URI๊ฐ€ ํฌํŠธ๋ฅผ ์ƒ๋žตํ•œ ๊ฒฝ์šฐ ํ•ด๋‹น ์Šคํ‚ด์˜ ๊ธฐ๋ณธ ํฌํŠธ๋ฅผ ์ „์†กํ•œ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด "http://www.example.com"์— ๋Œ€ํ•œ CONNECT ์š”์ฒญ์€ ๋‹ค์Œ๊ณผ ๊ฐ™๋‹ค:

CONNECT www.example.com:80 HTTP/1.1
Host: www.example.com

3.2.4. asterisk-form

request-target์˜ asterisk-form์€ ์„œ๋ฒ„ ์ „์ฒด์— ๋Œ€ํ•œ OPTIONS ์š”์ฒญ(Section 9.3.7 of [HTTP])์—๋งŒ ์‚ฌ์šฉ๋œ๋‹ค.

ํด๋ผ์ด์–ธํŠธ๊ฐ€ ์„œ๋ฒ„ ์ „์ฒด์— ๋Œ€ํ•œ OPTIONS๋ฅผ ์š”์ฒญํ•˜๋ ค๋Š” ๊ฒฝ์šฐ(์„œ๋ฒ„์˜ ํŠน์ • ๋ช…๋ช…๋œ ๋ฆฌ์†Œ์Šค๊ฐ€ ์•„๋‹Œ ๊ฒฝ์šฐ), ํด๋ผ์ด์–ธํŠธ๋Š” request-target์œผ๋กœ "*" (%x2A)๋งŒ์„ ๋ณด๋‚ด์•ผ ํ•œ๋‹ค(MUST). ์˜ˆ๋ฅผ ๋“ค๋ฉด

OPTIONS * HTTP/1.1

ํ”„๋ก์‹œ๊ฐ€ path๊ฐ€ ๋น„์–ด ์žˆ๊ณ  ์ฟผ๋ฆฌ ๊ตฌ์„ฑ ์š”์†Œ๊ฐ€ ์—†๋Š” absolute-form์˜ OPTIONS ์š”์ฒญ์„ ์ˆ˜์‹ ํ•˜๋ฉด, ์š”์ฒญ ์ฒด์ธ์˜ ๋งˆ์ง€๋ง‰ ํ”„๋ก์‹œ๋Š” ์›๋ณธ ์„œ๋ฒ„๋กœ ์š”์ฒญ์„ ์ „๋‹ฌํ•  ๋•Œ request-target์„ "*"๋กœ ๋ณด๋‚ด์•ผ ํ•œ๋‹ค(MUST).

์˜ˆ๋ฅผ ๋“ค์–ด, ๋‹ค์Œ ์š”์ฒญ์€

OPTIONS http://www.example.org:8001 HTTP/1.1

๋‹ค์Œ๊ณผ ๊ฐ™์ด ๋งˆ์ง€๋ง‰ ํ”„๋ก์‹œ์— ์˜ํ•ด ์ „๋‹ฌ๋  ๊ฒƒ์ด๋‹ค

OPTIONS * HTTP/1.1
Host: www.example.org:8001

ํ˜ธ์ŠคํŠธ "www.example.org"์˜ ํฌํŠธ 8001์— ์—ฐ๊ฒฐํ•œ ํ›„์ด๋‹ค.

3.3. ๋Œ€์ƒ URI ์žฌ๊ตฌ์„ฑ

request-target์ด absolute-form์ผ ๋•Œ ๋Œ€์ƒ URI๋Š” ๊ทธ request-target์ด๋‹ค. ์ด ๊ฒฝ์šฐ ์„œ๋ฒ„๋Š” ์ถ”๊ฐ€ ํ‰๊ฐ€๋ฅผ ์œ„ํ•ด URI๋ฅผ ์ผ๋ฐ˜ ๊ตฌ์„ฑ ์š”์†Œ๋กœ ๊ตฌ๋ฌธ ๋ถ„์„ํ•œ๋‹ค.

๊ทธ๋ ‡์ง€ ์•Š์€ ๊ฒฝ์šฐ, ์„œ๋ฒ„๋Š” ๋Œ€์ƒ ๋ฆฌ์†Œ์Šค๋ฅผ ์‹๋ณ„ํ•˜๊ธฐ ์œ„ํ•ด ์—ฐ๊ฒฐ ์ปจํ…์ŠคํŠธ ๋ฐ ์š”์ฒญ ๋ฉ”์‹œ์ง€์˜ ๋‹ค์–‘ํ•œ ๋ถ€๋ถ„์œผ๋กœ๋ถ€ํ„ฐ ๋Œ€์ƒ URI๋ฅผ ์žฌ๊ตฌ์„ฑํ•œ๋‹ค(Section 7.1 of [HTTP]):

  • ์„œ๋ฒ„ ๊ตฌ์„ฑ์—์„œ ๊ณ ์ •๋œ URI ์Šคํ‚ด์„ ์ œ๊ณตํ•˜๊ฑฐ๋‚˜ ์‹ ๋ขฐํ•  ์ˆ˜ ์žˆ๋Š” ์•„์›ƒ๋ฐ”์šด๋“œ ๊ฒŒ์ดํŠธ์›จ์ด๊ฐ€ ์Šคํ‚ด์„ ์ œ๊ณตํ•˜๋ฉด ํ•ด๋‹น ์Šคํ‚ด์„ ๋Œ€์ƒ URI์— ์‚ฌ์šฉํ•œ๋‹ค. ์ด๋Š” ๊ฒŒ์ดํŠธ์›จ์ด ์„œ๋ฒ„๊ฐ€ ํด๋ผ์ด์–ธํŠธ์˜ ์—ฐ๊ฒฐ ์ปจํ…์ŠคํŠธ๋ฅผ ์ˆ˜์‹ ํ•˜๊ณ  ์ด๋ฅผ ์ž์ฒด ์—ฐ๊ฒฐ๋กœ ๋Œ€์ฒดํ•˜์—ฌ ์ธ๋ฐ”์šด๋“œ ์„œ๋ฒ„๋กœ ์ „๋‹ฌํ•˜๊ธฐ ๋•Œ๋ฌธ์— ๋Œ€๊ทœ๋ชจ ๋ฐฐํฌ์—์„œ ์ผ๋ฐ˜์ ์ด๋‹ค. ๊ทธ๋ ‡์ง€ ์•Š์œผ๋ฉด ์š”์ฒญ์ด ๋ณด์•ˆ ์—ฐ๊ฒฐ์„ ํ†ตํ•ด ์ˆ˜์‹ ๋œ ๊ฒฝ์šฐ ๋Œ€์ƒ URI์˜ ์Šคํ‚ด์€ "https"์ด๊ณ , ๊ทธ๋ ‡์ง€ ์•Š์œผ๋ฉด ์Šคํ‚ด์€ "http"์ด๋‹ค.
  • request-target์ด authority-form์ธ ๊ฒฝ์šฐ ๋Œ€์ƒ URI์˜ authority ๊ตฌ์„ฑ ์š”์†Œ๋Š” request-target์ด๋‹ค. ๊ทธ๋ ‡์ง€ ์•Š์œผ๋ฉด ๋Œ€์ƒ URI์˜ authority ๊ตฌ์„ฑ ์š”์†Œ๋Š” Host ํ—ค๋” ํ•„๋“œ์˜ ํ•„๋“œ ๊ฐ’์ด๋‹ค. Host ํ—ค๋” ํ•„๋“œ๊ฐ€ ์—†๊ฑฐ๋‚˜ ๊ทธ ๊ฐ’์ด ๋น„์–ด ์žˆ๊ฑฐ๋‚˜ ์œ ํšจํ•˜์ง€ ์•Š์œผ๋ฉด ๋Œ€์ƒ URI์˜ authority ๊ตฌ์„ฑ ์š”์†Œ๋Š” ๋น„์–ด ์žˆ๋‹ค.
  • request-target์ด authority-form ๋˜๋Š” asterisk-form์ธ ๊ฒฝ์šฐ ๋Œ€์ƒ URI์˜ ๊ฒฐํ•ฉ๋œ path ๋ฐ query ๊ตฌ์„ฑ ์š”์†Œ๋Š” ๋น„์–ด ์žˆ๋‹ค. ๊ทธ๋ ‡์ง€ ์•Š์œผ๋ฉด ๋Œ€์ƒ URI์˜ ๊ฒฐํ•ฉ๋œ path ๋ฐ query ๊ตฌ์„ฑ ์š”์†Œ๋Š” request-target์ด๋‹ค.
  • ์œ„์—์„œ ๊ฒฐ์ •๋œ๋Œ€๋กœ ์žฌ๊ตฌ์„ฑ๋œ ๋Œ€์ƒ URI์˜ ๊ตฌ์„ฑ ์š”์†Œ๋Š” ์Šคํ‚ด, "://", authority, ๊ทธ๋ฆฌ๊ณ  ๊ฒฐํ•ฉ๋œ ๊ฒฝ๋กœ ๋ฐ ์ฟผ๋ฆฌ ๊ตฌ์„ฑ ์š”์†Œ๋ฅผ ์—ฐ๊ฒฐํ•˜์—ฌ absolute-URI ํ˜•ํƒœ๋กœ ๋‹ค์‹œ ๊ฒฐํ•ฉํ•  ์ˆ˜ ์žˆ๋‹ค.

์˜ˆ 1: ๋‹ค์Œ ๋ฉ”์‹œ์ง€๊ฐ€ ๋ณด์•ˆ ์—ฐ๊ฒฐ์„ ํ†ตํ•ด ์ˆ˜์‹ ๋œ ๊ฒฝ์šฐ

GET /pub/WWW/TheProject.html HTTP/1.1
Host: www.example.org

๋Œ€์ƒ URI๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™๋‹ค

https://www.example.org/pub/WWW/TheProject.html

์˜ˆ 2: ๋‹ค์Œ ๋ฉ”์‹œ์ง€๊ฐ€ ๋น„๋ณด์•ˆ ์—ฐ๊ฒฐ์„ ํ†ตํ•ด ์ˆ˜์‹ ๋œ ๊ฒฝ์šฐ

OPTIONS * HTTP/1.1
Host: www.example.org:8080

๋Œ€์ƒ URI๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™๋‹ค

http://www.example.org:8080

๋Œ€์ƒ URI์˜ authority ๊ตฌ์„ฑ ์š”์†Œ๊ฐ€ ๋น„์–ด ์žˆ๊ณ  ๊ทธ URI ์Šคํ‚ด์ด ๋น„์–ด ์žˆ์ง€ ์•Š์€ authority๋ฅผ ์š”๊ตฌํ•˜๋Š” ๊ฒฝ์šฐ(์˜ˆ: "http" ๋ฐ "https"), ์„œ๋ฒ„๋Š” ์š”์ฒญ์„ ๊ฑฐ๋ถ€ํ•˜๊ฑฐ๋‚˜ ๋“ค์–ด์˜ค๋Š” ์—ฐ๊ฒฐ ์ปจํ…์ŠคํŠธ์™€ ์ผ์น˜ํ•˜๋Š” ๊ตฌ์„ฑ๋œ ๊ธฐ๋ณธ๊ฐ’์ด ์ ์šฉ๋˜๋Š”์ง€ ํŒ๋‹จํ•  ์ˆ˜ ์žˆ๋‹ค. ์ปจํ…์ŠคํŠธ์—๋Š” ์ฃผ์†Œ ๋ฐ ํฌํŠธ, ์ ์šฉ๋œ ๋ณด์•ˆ, ๊ทธ๋ฆฌ๊ณ  ํ•ด๋‹น ์„œ๋ฒ„์˜ ๊ตฌ์„ฑ์— ํŠน์ •ํ•œ ๋กœ์ปฌ ์ •์˜ ์ •๋ณด์™€ ๊ฐ™์€ ์—ฐ๊ฒฐ ์„ธ๋ถ€์‚ฌํ•ญ์ด ํฌํ•จ๋  ์ˆ˜ ์žˆ๋‹ค. ๋นˆ authority๋Š” ์ถ”๊ฐ€ ์ฒ˜๋ฆฌ ์ „์— ๊ตฌ์„ฑ๋œ ๊ธฐ๋ณธ๊ฐ’์œผ๋กœ ๋Œ€์ฒด๋œ๋‹ค.

๋ณด์•ˆ ์—ฐ๊ฒฐ ์ปจํ…์ŠคํŠธ ๋‚ด์—์„œ authority์— ๋Œ€ํ•œ ๊ธฐ๋ณธ ์ด๋ฆ„์„ ์ œ๊ณตํ•˜๋Š” ๊ฒƒ์€ ํด๋ผ์ด์–ธํŠธ๊ฐ€ ์˜๋„ํ•œ authority๊ฐ€ ๊ธฐ๋ณธ๊ฐ’๊ณผ ๋‹ค๋ฅผ ๊ฐ€๋Šฅ์„ฑ์ด ์žˆ๋Š” ๊ฒฝ์šฐ ๋ณธ์งˆ์ ์œผ๋กœ ์•ˆ์ „ํ•˜์ง€ ์•Š๋‹ค. ์š”์ฒญ ์ปจํ…์ŠคํŠธ๋กœ๋ถ€ํ„ฐ ๊ณ ์œ ํ•˜๊ฒŒ authority๋ฅผ ์‹๋ณ„ํ•  ์ˆ˜ ์žˆ๋Š” ์„œ๋ฒ„๋Š” ๊ทธ ์‹๋ณ„์ž๋ฅผ ๊ธฐ๋ณธ๊ฐ’์œผ๋กœ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค(MAY). ๋˜๋Š” ์ƒˆ ํด๋ผ์ด์–ธํŠธ๋ฅผ ์–ป๋Š” ๋ฐฉ๋ฒ•์„ ์„ค๋ช…ํ•˜๋Š” ์•ˆ์ „ํ•œ ๋ฆฌ์†Œ์Šค๋กœ ์š”์ฒญ์„ ๋ฆฌ๋‹ค์ด๋ ‰ํŠธํ•˜๋Š” ๊ฒƒ์ด ๋” ๋‚ซ๋‹ค.

ํด๋ผ์ด์–ธํŠธ์˜ ๋Œ€์ƒ URI๋ฅผ ์žฌ๊ตฌ์„ฑํ•˜๋Š” ๊ฒƒ์€ ๋Œ€์ƒ ๋ฆฌ์†Œ์Šค ์‹๋ณ„ ํ”„๋กœ์„ธ์Šค์˜ ์ ˆ๋ฐ˜์— ๋ถˆ๊ณผํ•˜๋‹ค๋Š” ์ ์— ์œ ์˜ํ•˜๋ผ. ๋‚˜๋จธ์ง€ ์ ˆ๋ฐ˜์€ ํ•ด๋‹น ๋Œ€์ƒ URI๊ฐ€ ์„œ๋ฒ„๊ฐ€ ์‘๋‹ต์„ ๋ณด๋‚ผ ์˜์‚ฌ์™€ ๋Šฅ๋ ฅ์ด ์žˆ๋Š” ๋ฆฌ์†Œ์Šค๋ฅผ ์‹๋ณ„ํ•˜๋Š”์ง€ ์—ฌ๋ถ€๋ฅผ ๊ฒฐ์ •ํ•˜๋Š” ๊ฒƒ์ด๋‹ค(์ž์„ธํ•œ ๋‚ด์šฉ์€ Section 7.4 of [HTTP] ์ฐธ์กฐ).

4. ์ƒํƒœ ํ–‰

์‘๋‹ต ๋ฉ”์‹œ์ง€์˜ ์ฒซ ๋ฒˆ์งธ ํ–‰์€ status-line์œผ๋กœ, ํ”„๋กœํ† ์ฝœ ๋ฒ„์ „, ๊ณต๋ฐฑ(SP), ์ƒํƒœ ์ฝ”๋“œ, ๋˜ ๋‹ค๋ฅธ ๊ณต๋ฐฑ, ๊ทธ๋ฆฌ๊ณ  ์ƒํƒœ ์ฝ”๋“œ๋ฅผ ์„ค๋ช…ํ•˜๋Š” OPTIONALํ•œ ํ…์ŠคํŠธ ๋ฌธ๊ตฌ๋กœ ๋๋‚œ๋‹ค.

status-line ๋ฌธ๋ฒ• ๊ทœ์น™์€ ๊ฐ ๊ตฌ์„ฑ ์š”์†Œ๊ฐ€ ๋‹จ์ผ SP ์˜ฅํ…Ÿ์œผ๋กœ ๊ตฌ๋ถ„๋˜์–ด์•ผ ํ•จ์„ ์š”๊ตฌํ•˜์ง€๋งŒ, ์ˆ˜์‹ ์ž๋Š” ๋Œ€์‹  ๊ณต๋ฐฑ์œผ๋กœ ๊ตฌ๋ถ„๋œ ๋‹จ์–ด ๊ฒฝ๊ณ„๋กœ ๊ตฌ๋ฌธ ๋ถ„์„ํ•  MAY ์žˆ์œผ๋ฉฐ, ํ–‰ ์ข…๊ฒฐ์ž๋ฅผ ์ œ์™ธํ•˜๊ณ  ์•ž๋’ค ๊ณต๋ฐฑ์„ ๋ฌด์‹œํ•˜๋ฉด์„œ ๋ชจ๋“  ํ˜•ํƒœ์˜ ๊ณต๋ฐฑ์„ SP ๊ตฌ๋ถ„์ž๋กœ ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์žˆ๋‹ค. ๊ทธ๋Ÿฌํ•œ ๊ณต๋ฐฑ์—๋Š” ํ•˜๋‚˜ ์ด์ƒ์˜ ๋‹ค์Œ ์˜ฅํ…Ÿ์ด ํฌํ•จ๋œ๋‹ค: SP, HTAB, VT (%x0B), FF (%x0C), ๋˜๋Š” bare CR. ๊ทธ๋Ÿฌ๋‚˜ ๊ด€๋Œ€ํ•œ ๊ตฌ๋ฌธ ๋ถ„์„์€ ๋ฉ”์‹œ์ง€์˜ ์ˆ˜์‹ ์ž๊ฐ€ ์—ฌ๋Ÿฌ ๋ช…์ด๊ณ  ๊ฐ ์ˆ˜์‹ ์ž๊ฐ€ ์ž์ฒด์ ์œผ๋กœ ๋‹ค๋ฅธ ๊ฒฌ๊ณ ์„ฑ ํ•ด์„์„ ๊ฐ€์งˆ ๊ฒฝ์šฐ ์‘๋‹ต ๋ถ„ํ•  ๋ณด์•ˆ ์ทจ์•ฝ์ ์„ ์ดˆ๋ž˜ํ•  ์ˆ˜ ์žˆ๋‹ค(์ž์„ธํ•œ ๋‚ด์šฉ์€ Section 11.1 ์ฐธ์กฐ).

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

HTTP์˜ ํ•ต์‹ฌ ์ƒํƒœ ์ฝ”๋“œ๋Š” Section 15 of [HTTP]์— ์ •์˜๋˜์–ด ์žˆ์œผ๋ฉฐ, ์ƒํƒœ ์ฝ”๋“œ์˜ ํด๋ž˜์Šค, ์ƒˆ๋กœ์šด ์ƒํƒœ ์ฝ”๋“œ ์ •์˜์— ๋Œ€ํ•œ ๊ณ ๋ ค์‚ฌํ•ญ ๋ฐ ํ•ด๋‹น ์ •์˜๋ฅผ ์ˆ˜์ง‘ํ•˜๋Š” IANA ๋ ˆ์ง€์ŠคํŠธ๋ฆฌ๊ฐ€ ํฌํ•จ๋œ๋‹ค.

reason-phrase ์š”์†Œ๋Š” ์ˆซ์ž ์ƒํƒœ ์ฝ”๋“œ์™€ ์—ฐ๊ฒฐ๋œ ํ…์ŠคํŠธ ์„ค๋ช…์„ ์ œ๊ณตํ•˜๊ธฐ ์œ„ํ•œ ์œ ์ผํ•œ ๋ชฉ์ ์„ ๊ฐ€์ง„๋‹ค. ์ด๋Š” ์ฃผ๋กœ ์ƒํ˜ธ์ž‘์šฉํ˜• ํ…์ŠคํŠธ ํด๋ผ์ด์–ธํŠธ์™€ ๋” ์ž์ฃผ ์‚ฌ์šฉ๋˜๋˜ ์ดˆ๊ธฐ ์ธํ„ฐ๋„ท ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ํ”„๋กœํ† ์ฝœ์— ๋Œ€ํ•œ ์˜ˆ์˜๋ฅผ ์œ„ํ•œ ๊ฒƒ์ด๋‹ค.

ํด๋ผ์ด์–ธํŠธ๋Š” reason-phrase ๋‚ด์šฉ์ด ์‹ ๋ขฐํ•  ์ˆ˜ ์žˆ๋Š” ์ •๋ณด ์ฑ„๋„์ด ์•„๋‹ˆ๋ฏ€๋กœ ์ด๋ฅผ ๋ฌด์‹œํ•˜๋Š” ๊ฒƒ์ด SHOULD ๊ถŒ์žฅ๋œ๋‹ค(์ง€์—ญํ™”๋˜์–ด ๋ฒˆ์—ญ๋˜๊ฑฐ๋‚˜ ์ค‘๊ณ„์ž์— ์˜ํ•ด ๋ฎ์–ด์“ฐ๊ธฐ๋˜๊ฑฐ๋‚˜ ๋‹ค๋ฅธ HTTP ๋ฒ„์ „์„ ํ†ตํ•ด ์ „๋‹ฌ๋  ๋•Œ ํ๊ธฐ๋  ์ˆ˜ ์žˆ์Œ). ์„œ๋ฒ„๋Š” reason-phrase๊ฐ€ ์—†๋”๋ผ๋„ status-code์™€ reason-phrase๋ฅผ ๊ตฌ๋ถ„ํ•˜๋Š” ๊ณต๋ฐฑ์„ ๋ฐ˜๋“œ์‹œ ์ „์†กํ•ด์•ผ ํ•œ๋‹ค(MUST), ์ฆ‰ status-line์€ ๊ณต๋ฐฑ์œผ๋กœ ๋๋‚˜๊ฒŒ ๋œ๋‹ค.

5. ํ•„๋“œ ๊ตฌ๋ฌธ

๊ฐ ํ•„๋“œ ํ–‰์€ ๋Œ€์†Œ๋ฌธ์ž๋ฅผ ๊ตฌ๋ถ„ํ•˜์ง€ ์•Š๋Š” ํ•„๋“œ ์ด๋ฆ„, ์ฝœ๋ก (":"), ์„ ํƒ์  ์„ ํ–‰ ๊ณต๋ฐฑ, ํ•„๋“œ ํ–‰ ๊ฐ’, ๊ทธ๋ฆฌ๊ณ  ์„ ํƒ์  ํ›„ํ–‰ ๊ณต๋ฐฑ์œผ๋กœ ๊ตฌ์„ฑ๋œ๋‹ค.

ํ•„๋“œ ๊ฐ’ ๋‚ด๋ถ€์˜ ๊ตฌ๋ฌธ ๋ถ„์„ ๊ทœ์น™์€ Section 5.5 of [HTTP]์— ์ •์˜๋˜์–ด ์žˆ๋‹ค. ์ด ์„น์…˜์€ HTTP/1.1 ๋ฉ”์‹œ์ง€ ๋‚ด์—์„œ ํ—ค๋” ํ•„๋“œ์˜ ์ผ๋ฐ˜์ ์ธ ํฌํ•จ ๋ฐ ์ถ”์ถœ ๊ตฌ๋ฌธ์„ ๋‹ค๋ฃฌ๋‹ค.

5.1. ํ•„๋“œ ํ–‰ ๊ตฌ๋ฌธ ๋ถ„์„

๋ฉ”์‹œ์ง€๋Š” ๊ฐœ๋ณ„ ํ•„๋“œ ์ด๋ฆ„๊ณผ ๋ฌด๊ด€ํ•œ ์ผ๋ฐ˜ ์•Œ๊ณ ๋ฆฌ์ฆ˜์„ ์‚ฌ์šฉํ•˜์—ฌ ๊ตฌ๋ฌธ ๋ถ„์„๋œ๋‹ค. ์ฃผ์–ด์ง„ ํ•„๋“œ ํ–‰ ๊ฐ’ ๋‚ด๋ถ€์˜ ๋‚ด์šฉ์€ ๋ฉ”์‹œ์ง€ ํ•ด์„์˜ ์ดํ›„ ๋‹จ๊ณ„(๋Œ€๊ฐœ ๋ฉ”์‹œ์ง€์˜ ์ „์ฒด ํ•„๋“œ ์„น์…˜์ด ์ฒ˜๋ฆฌ๋œ ํ›„)์— ๊ตฌ๋ฌธ ๋ถ„์„๋œ๋‹ค.

ํ•„๋“œ ์ด๋ฆ„๊ณผ ์ฝœ๋ก  ์‚ฌ์ด์—๋Š” ๊ณต๋ฐฑ์ด ํ—ˆ์šฉ๋˜์ง€ ์•Š๋Š”๋‹ค. ๊ณผ๊ฑฐ์— ์ด๋Ÿฌํ•œ ๊ณต๋ฐฑ ์ฒ˜๋ฆฌ์˜ ์ฐจ์ด๋Š” ์š”์ฒญ ๋ผ์šฐํŒ… ๋ฐ ์‘๋‹ต ์ฒ˜๋ฆฌ์—์„œ ๋ณด์•ˆ ์ทจ์•ฝ์ ์„ ์ดˆ๋ž˜ํ•œ ๋ฐ” ์žˆ๋‹ค. ์„œ๋ฒ„๋Š” ํ•„๋“œ ์ด๋ฆ„๊ณผ ์ฝœ๋ก  ์‚ฌ์ด์— ๊ณต๋ฐฑ์ด ํฌํ•จ๋œ ์ˆ˜์‹ ๋œ ์š”์ฒญ ๋ฉ”์‹œ์ง€๋ฅผ MUST 400 (Bad Request) ์ƒํƒœ ์ฝ”๋“œ๋กœ ๊ฑฐ๋ถ€ํ•ด์•ผ ํ•œ๋‹ค. ํ”„๋ก์‹œ๋Š” ์‘๋‹ต ๋ฉ”์‹œ์ง€๋ฅผ ํ•˜๋ฅ˜๋กœ ์ „๋‹ฌํ•˜๊ธฐ ์ „์— ๊ทธ๋Ÿฌํ•œ ๊ณต๋ฐฑ์„ ์ œ๊ฑฐํ•ด์•ผ ํ•œ๋‹ค(MUST).

ํ•„๋“œ ํ–‰ ๊ฐ’์€ ์„ ํƒ์  ๊ณต๋ฐฑ(OWS)์— ์˜ํ•ด ์•ž๋’ค๋กœ ๋‘˜๋Ÿฌ์‹ธ์ผ ์ˆ˜ ์žˆ๋‹ค; ์ผ๊ด€๋œ ๊ฐ€๋…์„ฑ์„ ์œ„ํ•ด ํ•„๋“œ ํ–‰ ๊ฐ’ ์•ž์— ๋‹จ์ผ SP๋ฅผ ๋‘๋Š” ๊ฒƒ์ด ๋ฐ”๋žŒ์งํ•˜๋‹ค. ํ•„๋“œ ํ–‰ ๊ฐ’์€ ๊ทธ ์„ ํ–‰ ๋˜๋Š” ํ›„ํ–‰ ๊ณต๋ฐฑ์„ ํฌํ•จํ•˜์ง€ ์•Š๋Š”๋‹ค: ํ•„๋“œ ํ–‰ ๊ฐ’์˜ ์ฒซ ๋ฒˆ์งธ ๋น„๊ณต๋ฐฑ ์˜ฅํ…Ÿ ์•ž์— ๋‚˜ํƒ€๋‚˜๋Š” OWS ๋˜๋Š” ๋งˆ์ง€๋ง‰ ๋น„๊ณต๋ฐฑ ์˜ฅํ…Ÿ ๋’ค์— ๋‚˜ํƒ€๋‚˜๋Š” OWS๋Š” ํ•„๋“œ ํ–‰์—์„œ ํ•„๋“œ ํ–‰ ๊ฐ’์„ ์ถ”์ถœํ•  ๋•Œ ํŒŒ์„œ์— ์˜ํ•ด ์ œ์™ธ๋œ๋‹ค.

5.2. ๊ตฌ์‹ ํ–‰ ์ ‘๊ธฐ

์—ญ์‚ฌ์ ์œผ๋กœ HTTP/1.x ํ•„๋“œ ๊ฐ’์€ ๊ฐ ์ถ”๊ฐ€ ํ–‰ ์•ž์— ์ ์–ด๋„ ํ•˜๋‚˜์˜ ๊ณต๋ฐฑ ๋˜๋Š” ์ˆ˜ํ‰ ํƒญ(obs-fold)์„ ์ถ”๊ฐ€ํ•จ์œผ๋กœ์จ ์—ฌ๋Ÿฌ ํ–‰์— ๊ฑธ์ณ ํ™•์žฅ๋  ์ˆ˜ ์žˆ์—ˆ๋‹ค. ์ด ๋ช…์„ธ์„œ๋Š” "message/http" ๋ฏธ๋””์–ด ํƒ€์ž…(Section 10.1) ๋‚ด๋ฅผ ์ œ์™ธํ•˜๊ณ  ๊ทธ๋Ÿฌํ•œ ํ–‰ ์ ‘๊ธฐ๋ฅผ ์‚ฌ์šฉ ์ค‘๋‹จ(deprecate)ํ•œ๋‹ค.

  obs-fold     = OWS CRLF RWS
               ; obsolete line folding

์†ก์‹ ์ž๋Š” ๋ฉ”์‹œ์ง€์— ํ–‰ ์ ‘๊ธฐ(obs-fold)๋ฅผ ํฌํ•จ์‹œํ‚ค์ง€ ์•Š์•„์•ผ ํ•œ๋‹ค(MUST NOT), ์ฆ‰ ํ•„๋“œ ํ–‰ ๊ฐ’์ด obs-fold ๊ทœ์น™์— ์ผ์น˜ํ•˜๋Š” ๊ฒฝ์šฐ๋ฅผ ํฌํ•จํ•˜์ง€ ์•Š์•„์•ผ ํ•œ๋‹ค. ๋‹จ, ๋ฉ”์‹œ์ง€๊ฐ€ "message/http" ๋ฏธ๋””์–ด ํƒ€์ž…์œผ๋กœ ํฌ์žฅ๋˜๋Š” ๊ฒฝ์šฐ๋Š” ์˜ˆ์™ธ์ด๋‹ค.

"message/http" ์ปจํ…Œ์ด๋„ˆ ๋‚ด์— ์žˆ์ง€ ์•Š์€ ์š”์ฒญ ๋ฉ”์‹œ์ง€์—์„œ obs-fold๋ฅผ ์ˆ˜์‹ ํ•œ ์„œ๋ฒ„๋Š” ๊ทธ ๋ฉ”์‹œ์ง€๋ฅผ ๊ฑฐ๋ถ€ํ•˜๊ณ  400 (Bad Request)์„ ๋ณด๋‚ด๊ฑฐ๋‚˜, ๋ฐ”๋žŒ์งํ•˜๊ฒŒ๋Š” ๊ตฌ์‹ ํ–‰ ์ ‘๊ธฐ๊ฐ€ ํ—ˆ์šฉ๋˜์ง€ ์•Š์Œ์„ ์„ค๋ช…ํ•˜๋Š” ํ‘œํ˜„๊ณผ ํ•จ๊ป˜ ์‘๋‹ตํ•˜๊ฑฐ๋‚˜, ์ˆ˜์‹ ๋œ ๊ฐ obs-fold๋ฅผ ํ•„๋“œ ๊ฐ’ ํ•ด์„ ๋˜๋Š” ํ•˜๋ฅ˜ ์ „๋‹ฌ ์ „์— ํ•˜๋‚˜ ์ด์ƒ์˜ SP ์˜ฅํ…Ÿ์œผ๋กœ ๋Œ€์ฒดํ•ด์•ผ ํ•œ๋‹ค(MUST).

"message/http" ์ปจํ…Œ์ด๋„ˆ ๋‚ด์— ์žˆ์ง€ ์•Š์€ ์‘๋‹ต ๋ฉ”์‹œ์ง€์—์„œ obs-fold๋ฅผ ์ˆ˜์‹ ํ•œ ํ”„๋ก์‹œ ๋˜๋Š” ๊ฒŒ์ดํŠธ์›จ์ด๋Š” ๋ฉ”์‹œ์ง€๋ฅผ ํ๊ธฐํ•˜๊ณ  502 (Bad Gateway) ์‘๋‹ต์œผ๋กœ ๋Œ€์ฒดํ•˜๊ฑฐ๋‚˜, ๋ฐ”๋žŒ์งํ•˜๊ฒŒ๋Š” ์ˆ˜์‹ ๋œ ๋ถ€์ ์ ˆํ•œ ํ–‰ ์ ‘๊ธฐ๊ฐ€ ์ˆ˜์‹ ๋˜์—ˆ์Œ์„ ์„ค๋ช…ํ•˜๋Š” ํ‘œํ˜„๊ณผ ํ•จ๊ป˜, ์ˆ˜์‹ ๋œ ๊ฐ obs-fold๋ฅผ ํ•„๋“œ ๊ฐ’ ํ•ด์„ ๋˜๋Š” ํ•˜๋ฅ˜ ์ „๋‹ฌ ์ „์— ํ•˜๋‚˜ ์ด์ƒ์˜ SP ์˜ฅํ…Ÿ์œผ๋กœ ๋Œ€์ฒดํ•ด์•ผ ํ•œ๋‹ค(MUST).

"message/http" ์ปจํ…Œ์ด๋„ˆ ๋‚ด์— ์žˆ์ง€ ์•Š์€ ์‘๋‹ต ๋ฉ”์‹œ์ง€์—์„œ obs-fold๋ฅผ ์ˆ˜์‹ ํ•œ ์‚ฌ์šฉ์ž ์—์ด์ „ํŠธ๋Š” ํ•„๋“œ ๊ฐ’์„ ํ•ด์„ํ•˜๊ธฐ ์ „์— ์ˆ˜์‹ ๋œ ๊ฐ obs-fold๋ฅผ ํ•˜๋‚˜ ์ด์ƒ์˜ SP ์˜ฅํ…Ÿ์œผ๋กœ ๋Œ€์ฒดํ•ด์•ผ ํ•œ๋‹ค(MUST).

6. Message Body

HTTP/1.1 ๋ฉ”์‹œ์ง€์˜ ๋ฉ”์‹œ์ง€ ๋ณธ๋ฌธ(์žˆ์„ ๊ฒฝ์šฐ)์€ ์š”์ฒญ ๋˜๋Š” ์‘๋‹ต์˜ ์ฝ˜ํ…์ธ ( ์„น์…˜ 6.4 of [HTTP])์„ ๋‹ด๋Š” ๋ฐ ์‚ฌ์šฉ๋œ๋‹ค. ๋ฉ”์‹œ์ง€ ๋ณธ๋ฌธ์€ ์„น์…˜ 6.1์—์„œ ์„ค๋ช…๋œ ๋Œ€๋กœ ์ „์†ก ์ฝ”๋”ฉ์ด ์ ์šฉ๋˜์ง€ ์•Š์€ ๊ฒฝ์šฐ์—๋Š” ์ฝ˜ํ…์ธ ์™€ ๋™์ผํ•˜๋‹ค.

  message-body = *OCTET

HTTP/1.1 ๋ฉ”์‹œ์ง€์— ๋ฉ”์‹œ์ง€ ๋ณธ๋ฌธ์ด ์กด์žฌํ•˜๋Š” ์‹œ๊ธฐ๋ฅผ ๊ฒฐ์ •ํ•˜๋Š” ๊ทœ์น™์€ ์š”์ฒญ๊ณผ ์‘๋‹ต์—์„œ ์„œ๋กœ ๋‹ค๋ฅด๋‹ค.

์š”์ฒญ์—์„œ ๋ฉ”์‹œ์ง€ ๋ณธ๋ฌธ์˜ ์กด์žฌ๋Š” Content-Length ๋˜๋Š” Transfer-Encoding ํ—ค๋” ํ•„๋“œ๋กœ ํ‘œ์‹œ๋œ๋‹ค. ์š”์ฒญ ๋ฉ”์‹œ์ง€์˜ ํ”„๋ ˆ์ด๋ฐ์€ ๋ฉ”์„œ๋“œ ์˜๋ฏธ์™€ ๋…๋ฆฝ์ ์ด๋‹ค.

์‘๋‹ต์—์„œ ๋ฉ”์‹œ์ง€ ๋ณธ๋ฌธ์˜ ์กด์žฌ๋Š” ์„น์…˜ 6.3์— ์ƒ์„ธํžˆ ์„ค๋ช…๋œ ๋Œ€๋กœ, ์‘๋‹ต์ด ์‘๋‹ตํ•˜๋Š” ์š”์ฒญ ๋ฉ”์„œ๋“œ์™€ ์‘๋‹ต ์ƒํƒœ ์ฝ”๋“œ ๋ชจ๋‘์— ์˜์กดํ•œ๋‹ค. ์ด๋Š” HTTP ์˜๋ฏธ๋ก ์ƒ ์‘๋‹ต ์ฝ˜ํ…์ธ ๊ฐ€ ํ—ˆ์šฉ๋˜๋Š” ์‹œ์ ๊ณผ ๋Œ€์‘ํ•œ๋‹ค ( ์„น์…˜ 6.4.1 of [HTTP] ).

6.1. Transfer-Encoding

The Transfer-Encoding header field๋Š” ๋ฉ”์‹œ์ง€ ๋ณธ๋ฌธ์„ ํ˜•์„ฑํ•˜๊ธฐ ์œ„ํ•ด ์ฝ˜ํ…์ธ ์— ์ ์šฉ๋˜์—ˆ๊ฑฐ๋‚˜ ์ ์šฉ๋  ์ „์†ก ์ฝ”๋”ฉ๋“ค์˜ ์ˆœ์„œ์— ํ•ด๋‹นํ•˜๋Š” ์ „์†ก ์ฝ”๋”ฉ ์ด๋ฆ„๋“ค์„ ๋‚˜์—ดํ•œ๋‹ค. ์ „์†ก ์ฝ”๋”ฉ์€ ์„น์…˜ 7์— ์ •์˜๋˜์–ด ์žˆ๋‹ค.

Transfer-Encoding์€ MIME์˜ Content-Transfer-Encoding ํ•„๋“œ์™€ ์œ ์‚ฌํ•œ ์—ญํ• ์„ ํ•œ๋‹ค. MIME์—์„œ๋Š” 7๋น„ํŠธ ์ „์†ก ์„œ๋น„์Šค๋ฅผ ํ†ตํ•œ ์ด์ง„ ๋ฐ์ดํ„ฐ์˜ ์•ˆ์ „ํ•œ ์ „์†ก์„ ์œ„ํ•ด ์„ค๊ณ„๋˜์—ˆ๋‹ค( [RFC2045], ์„น์…˜ 6 ). ๊ทธ๋Ÿฌ๋‚˜ 8bit-ํด๋ฆฐ ์ „์†ก ํ”„๋กœํ† ์ฝœ์—์„œ๋Š” ์•ˆ์ „ ์ „์†ก์˜ ์ดˆ์ ์ด ๋‹ค๋ฅด๋‹ค. HTTP์˜ ๊ฒฝ์šฐ Transfer-Encoding์€ ์ฃผ๋กœ ๋™์ ์œผ๋กœ ์ƒ์„ฑ๋œ ์ฝ˜ํ…์ธ ๋ฅผ ์ •ํ™•ํ•˜๊ฒŒ ๊ตฌ๋ถ„ํ•˜๋Š” ๋ฐ ์‚ฌ์šฉ๋œ๋‹ค. ๋˜ํ•œ ์ „์†ก ์ค‘์—๋งŒ ์ ์šฉ๋˜๋Š” ์ธ์ฝ”๋”ฉ๊ณผ ์„ ํƒ๋œ ํ‘œํ˜„์˜ ํŠน์„ฑ์ธ ์ธ์ฝ”๋”ฉ์„ ๊ตฌ๋ณ„ํ•˜๋Š” ์—ญํ• ๋„ ํ•œ๋‹ค.

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

์˜ˆ๋ฅผ ๋“ค๋ฉด,

Transfer-Encoding: gzip, chunked

๋Š” ์ฝ˜ํ…์ธ ๊ฐ€ gzip์œผ๋กœ ์••์ถ•๋œ ๋‹ค์Œ chunked ์ฝ”๋”ฉ์œผ๋กœ ์ฒญํฌ๋˜์–ด ๋ฉ”์‹œ์ง€ ๋ณธ๋ฌธ์„ ํ˜•์„ฑํ–ˆ์Œ์„ ๋‚˜ํƒ€๋‚ธ๋‹ค.

Content-Encoding( ์„น์…˜ 8.4.1 of [HTTP] )๊ณผ ๋‹ฌ๋ฆฌ, Transfer-Encoding์€ ํ‘œํ˜„์˜ ํŠน์„ฑ์ด ์•„๋‹ˆ๋ผ ๋ฉ”์‹œ์ง€์˜ ์†์„ฑ์ด๋‹ค. ์š”์ฒญ/์‘๋‹ต ์ฒด์ธ์ƒ์˜ ์ˆ˜์‹ ์ž๋Š” ๋ฐ›์€ ์ „์†ก ์ฝ”๋”ฉ์„ ๋””์ฝ”๋“œํ•˜๊ฑฐ๋‚˜ ๋ฉ”์‹œ์ง€ ๋ณธ๋ฌธ์— ์ถ”๊ฐ€ ์ „์†ก ์ฝ”๋”ฉ์„ ์ ์šฉํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ, ๊ทธ ๊ฒฝ์šฐ Transfer-Encoding ํ•„๋“œ ๊ฐ’๋„ ์ ์ ˆํžˆ ๋ณ€๊ฒฝํ•ด์•ผ ํ•œ๋‹ค. ์ธ์ฝ”๋”ฉ ๋งค๊ฐœ๋ณ€์ˆ˜์— ๋Œ€ํ•œ ์ถ”๊ฐ€ ์ •๋ณด๋Š” ์ด ๋ช…์„ธ์„œ์—์„œ ์ •์˜ํ•˜์ง€ ์•Š์€ ๋‹ค๋ฅธ ํ—ค๋” ํ•„๋“œ๋“ค์„ ํ†ตํ•ด ์ œ๊ณต๋  ์ˆ˜ ์žˆ๋‹ค.

Transfer-Encoding์€ ๋ฉ”์‹œ์ง€ ๋ณธ๋ฌธ์„ ํฌํ•จํ•˜์ง€ ์•Š๋Š” HEAD ์š”์ฒญ์— ๋Œ€ํ•œ ์‘๋‹ต์ด๋‚˜ GET ์š”์ฒญ์— ๋Œ€ํ•œ 304 (Not Modified) ์‘๋‹ต( ์„น์…˜ 15.4.5 of [HTTP] )์—์„œ ๋ณด๋‚ผ ์ˆ˜ ์žˆ๋‹ค. ์ด๋Š” ์›๋ณธ ์„œ๋ฒ„๊ฐ€ ์กฐ๊ฑด ์—†๋Š” GET์ด์—ˆ๋”๋ผ๋ฉด ๋ฉ”์‹œ์ง€ ๋ณธ๋ฌธ์— ์ „์†ก ์ฝ”๋”ฉ์„ ์ ์šฉํ–ˆ์„ ๊ฒƒ์ž„์„ ๋‚˜ํƒ€๋‚ด๊ธฐ ์œ„ํ•œ ๊ฒƒ์ด๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ์ด ํ‘œ์‹œ๋Š” ํ•„์ˆ˜๋Š” ์•„๋‹ˆ๋‹ค. ์‘๋‹ต ์ฒด์ธ์ƒ์˜ ์–ด๋–ค ์ˆ˜์‹ ์ž(์›๋ณธ ์„œ๋ฒ„ ํฌํ•จ)๋„ ํ•„์š”ํ•˜์ง€ ์•Š์€ ๊ฒฝ์šฐ ์ „์†ก ์ฝ”๋”ฉ์„ ์ œ๊ฑฐํ•  ์ˆ˜ ์žˆ๋‹ค.

์„œ๋ฒ„๋Š” ์ƒํƒœ ์ฝ”๋“œ๊ฐ€ 1xx (Informational) ๋˜๋Š” 204 (No Content)์ธ ์‘๋‹ต์—๋Š” Transfer-Encoding ํ—ค๋” ํ•„๋“œ๋ฅผ ๋ณด๋‚ด๋ฉด ์•ˆ ๋œ๋‹ค. ๋˜ํ•œ ์„œ๋ฒ„๋Š” CONNECT ์š”์ฒญ์— ๋Œ€ํ•œ 2xx (Successful) ์‘๋‹ต์—๋Š” Transfer-Encoding ํ—ค๋” ํ•„๋“œ๋ฅผ ๋ณด๋‚ด๋ฉด ์•ˆ ๋œ๋‹ค.

์„œ๋ฒ„๊ฐ€ ์ดํ•ดํ•˜์ง€ ๋ชปํ•˜๋Š” ์ „์†ก ์ฝ”๋”ฉ์„ ํฌํ•จํ•œ ์š”์ฒญ ๋ฉ”์‹œ์ง€๋ฅผ ์ˆ˜์‹ ํ•˜๋ฉด SHOULD 501 (Not Implemented)๋กœ ์‘๋‹ตํ•˜๋Š” ๊ฒƒ์ด ๋ฐ”๋žŒ์งํ•˜๋‹ค.

Transfer-Encoding์€ HTTP/1.1์— ์ถ”๊ฐ€๋˜์—ˆ๋‹ค. ๋ณดํ†ต HTTP/1.0๋งŒ ์ง€์›ํ•œ๋‹ค๊ณ  ๊ด‘๊ณ ํ•˜๋Š” ๊ตฌํ˜„์ฒด๋Š” ์ „์†ก ์ธ์ฝ”๋”ฉ๋œ ์ฝ˜ํ…์ธ ๋ฅผ ์ฒ˜๋ฆฌํ•˜์ง€ ๋ชปํ•  ๊ฒƒ์œผ๋กœ ๊ฐ€์ •๋˜๋ฉฐ, Transfer-Encoding์„ ํฌํ•จํ•œ HTTP/1.0 ๋ฉ”์‹œ์ง€๊ฐ€ ์ˆ˜์‹ ๋˜๋ฉด ์ฒญํฌ ์ „์†ก ์ฝ”๋”ฉ์„ ์ œ๋Œ€๋กœ ์ฒ˜๋ฆฌํ•˜์ง€ ๋ชปํ•œ ์ฑ„ ์ „๋‹ฌ๋˜์—ˆ์„ ๊ฐ€๋Šฅ์„ฑ์ด ์žˆ๋‹ค.

ํด๋ผ์ด์–ธํŠธ๋Š” ์„œ๋ฒ„๊ฐ€ HTTP/1.1(๋˜๋Š” ์ดํ›„ ๋งˆ์ด๋„ˆ ๋ฒ„์ „)์„ ์ฒ˜๋ฆฌํ•  ๊ฒƒ์ž„์„ ์•Œ์ง€ ๋ชปํ•˜๋Š” ํ•œ Transfer-Encoding์„ ํฌํ•จํ•œ ์š”์ฒญ์„ ๋ณด๋‚ด๋ฉด ์•ˆ ๋œ๋‹ค(MUST NOT). ์ด๋Ÿฌํ•œ ์ง€์‹์€ ๋ช…์‹œ์  ์‚ฌ์šฉ์ž ๊ตฌ์„ฑ์ด๋‚˜ ์ด์ „์— ์ˆ˜์‹ ํ•œ ์‘๋‹ต์˜ ๋ฒ„์ „์„ ๊ธฐ์–ตํ•˜๋Š” ํ˜•ํƒœ์ผ ์ˆ˜ ์žˆ๋‹ค. ์„œ๋ฒ„ ์—ญ์‹œ ํ•ด๋‹น ์š”์ฒญ์ด HTTP/1.1(๋˜๋Š” ์ดํ›„ ๋งˆ์ด๋„ˆ ๋ฒ„์ „)์„ ์ง€์‹œํ•˜์ง€ ์•Š๋Š” ํ•œ Transfer-Encoding์„ ํฌํ•จํ•œ ์‘๋‹ต์„ ๋ณด๋‚ด๋ฉด ์•ˆ ๋œ๋‹ค(MUST NOT).

์ดˆ๊ธฐ Transfer-Encoding ๊ตฌํ˜„์€ ๋ฉ”์‹œ์ง€ ํ”„๋ ˆ์ด๋ฐ์„ ์œ„ํ•œ ์ฒญํฌ ์ „์†ก ์ฝ”๋”ฉ๊ณผ ์ง„ํ–‰ ํ‘œ์‹œ์ค„์„ ์œ„ํ•œ ์ถ”์ • Content-Length ํ—ค๋” ํ•„๋“œ๋ฅผ ํ•จ๊ป˜ ๋ณด๋‚ด๋Š” ๊ฒฝ์šฐ๊ฐ€ ์žˆ์—ˆ๋‹ค. ์ด ๋•Œ๋ฌธ์— Transfer-Encoding์€ Content-Length๋ฅผ ๋ฌด์‹œํ•˜๋„๋ก ์ •์˜๋˜์—ˆ์œผ๋ฉฐ, ์ƒํ˜ธ ๋ฐฐํƒ€์ ์ด์ง€ ์•Š๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ์ด๋Ÿฌํ•œ ๋ฉ”์‹œ์ง€๋ฅผ ์ „๋‹ฌํ•˜๋ฉด ์š”์ฒญ ์Šค๋จธ๊ธ€๋ง( ์„น์…˜ 11.2 ) ๋˜๋Š” ์‘๋‹ต ๋ถ„ํ• ( ์„น์…˜ 11.1 ) ๊ณต๊ฒฉ์— ์ทจ์•ฝํ•ด์งˆ ์ˆ˜ ์žˆ์œผ๋ฉฐ, ํŠนํžˆ ํ•˜๋ฅ˜ ์ˆ˜์‹ ์ž๊ฐ€ ์ด ๋ช…์„ธ์— ๋”ฐ๋ผ ๋ฉ”์‹œ์ง€๋ฅผ ํŒŒ์‹ฑํ•˜์ง€ ๋ชปํ•˜๊ณ  HTTP/1.0๋งŒ ๊ตฌํ˜„ํ•˜๋Š” ๊ฒฝ์šฐ ๋ฌธ์ œ๊ฐ€ ๋œ๋‹ค.

์„œ๋ฒ„๋Š” Content-Length์™€ Transfer-Encoding์„ ๋ชจ๋‘ ํฌํ•จํ•œ ์š”์ฒญ์„ ๊ฑฐ๋ถ€ํ•˜๊ฑฐ๋‚˜ Transfer-Encoding๋งŒ์„ ๊ธฐ์ค€์œผ๋กœ ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์žˆ๋‹ค(MAY). ๊ทธ๋Ÿผ์—๋„ ๋ถˆ๊ตฌํ•˜๊ณ , ์„œ๋ฒ„๋Š” ๊ทธ๋Ÿฌํ•œ ์š”์ฒญ์— ์‘๋‹ตํ•œ ํ›„ ์ž ์žฌ์  ๊ณต๊ฒฉ์„ ํ”ผํ•˜๊ธฐ ์œ„ํ•ด ์—ฐ๊ฒฐ์„ ๋‹ซ์•„์•ผ ํ•œ๋‹ค(MUST).

HTTP/1.0 ๋ฉ”์‹œ์ง€์—์„œ Transfer-Encoding ํ—ค๋” ํ•„๋“œ๋ฅผ ์ˆ˜์‹ ํ•œ ์„œ๋ฒ„ ๋˜๋Š” ํด๋ผ์ด์–ธํŠธ๋Š” ๋ฉ”์‹œ์ง€์˜ ํ”„๋ ˆ์ด๋ฐ์ด ์ž˜๋ชป๋œ ๊ฒƒ์œผ๋กœ ๊ฐ„์ฃผํ•ด์•ผ ํ•˜๋ฉฐ(์„ค์‚ฌ Content-Length๊ฐ€ ์žˆ์–ด๋„), ๋ฉ”์‹œ์ง€๋ฅผ ์ฒ˜๋ฆฌํ•œ ํ›„ ์—ฐ๊ฒฐ์„ ๋‹ซ์•„์•ผ ํ•œ๋‹ค(MUST). ์†ก์‹ ์ž๊ฐ€ ์ผ๋ถ€ ๋ฉ”์‹œ์ง€๋ฅผ ๋ฒ„ํผ์— ๋ณด์œ ํ•˜๊ณ  ์žˆ์„ ์ˆ˜ ์žˆ์–ด, ์—ฐ๊ฒฐ์„ ๊ณ„์† ์‚ฌ์šฉํ•  ๊ฒฝ์šฐ ๊ทธ ์ž”์—ฌ๊ฐ€ ์˜คํ•ด๋ฅผ ๋ถˆ๋Ÿฌ์ผ์œผํ‚ฌ ์ˆ˜ ์žˆ๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค.

6.2. Content-Length

๋ฉ”์‹œ์ง€์— Transfer-Encoding ํ—ค๋” ํ•„๋“œ๊ฐ€ ์—†์„ ๋•Œ, Content-Length ํ—ค๋” ํ•„๋“œ๋Š” ์ž ์žฌ์  ์ฝ˜ํ…์ธ ์˜ ์˜ˆ์ƒ ํฌ๊ธฐ๋ฅผ 10์ง„์ˆ˜ ์˜ฅํ…Ÿ ์ˆ˜๋กœ ์ œ๊ณตํ•  ์ˆ˜ ์žˆ๋‹ค. ์ฝ˜ํ…์ธ ๋ฅผ ํฌํ•จํ•˜๋Š” ๋ฉ”์‹œ์ง€์˜ ๊ฒฝ์šฐ Content-Length ํ•„๋“œ ๊ฐ’์€ ๋ฐ์ดํ„ฐ(๋ฐ ๋ฉ”์‹œ์ง€)๊ฐ€ ๋๋‚˜๋Š” ์œ„์น˜๋ฅผ ๊ฒฐ์ •ํ•˜๋Š” ๋ฐ ํ•„์š”ํ•œ ํ”„๋ ˆ์ด๋ฐ ์ •๋ณด๋ฅผ ์ œ๊ณตํ•œ๋‹ค. ์ฝ˜ํ…์ธ ๋ฅผ ํฌํ•จํ•˜์ง€ ์•Š๋Š” ๋ฉ”์‹œ์ง€์˜ ๊ฒฝ์šฐ Content-Length๋Š” ์„ ํƒ๋œ ํ‘œํ˜„์˜ ํฌ๊ธฐ๋ฅผ ๋‚˜ํƒ€๋‚ธ๋‹ค.

์†ก์‹ ์ž๋Š” Transfer-Encoding ํ—ค๋” ํ•„๋“œ๊ฐ€ ์žˆ๋Š” ์–ด๋–ค ๋ฉ”์‹œ์ง€์—์„œ๋„ Content-Length ํ—ค๋” ํ•„๋“œ๋ฅผ ๋ณด๋‚ด๋ฉด ์•ˆ ๋œ๋‹ค(MUST NOT).

6.3. Message Body Length

๋ฉ”์‹œ์ง€ ๋ณธ๋ฌธ์˜ ๊ธธ์ด๋Š” ๋‹ค์Œ ์ค‘ ํ•˜๋‚˜์— ์˜ํ•ด ๊ฒฐ์ •๋œ๋‹ค(์šฐ์„ ์ˆœ์œ„ ์ˆœ):

  1. HEAD ์š”์ฒญ์— ๋Œ€ํ•œ ๋ชจ๋“  ์‘๋‹ต๊ณผ ์ƒํƒœ ์ฝ”๋“œ๊ฐ€ 1xx (Informational), 204 (No Content), ๋˜๋Š” 304 (Not Modified)์ธ ๋ชจ๋“  ์‘๋‹ต์€ ํ—ค๋” ํ•„๋“œ ์ดํ›„์˜ ์ฒซ ๋ฒˆ์งธ ๋นˆ ์ค„์— ์˜ํ•ด ํ•ญ์ƒ ์ข…๋ฃŒ๋˜๋ฏ€๋กœ, ๋ฉ”์‹œ์ง€ ๋ณธ๋ฌธ์ด๋‚˜ ํŠธ๋ ˆ์ผ๋Ÿฌ ์„น์…˜์„ ํฌํ•จํ•  ์ˆ˜ ์—†๋‹ค.

  2. CONNECT ์š”์ฒญ์— ๋Œ€ํ•œ 2xx (Successful) ์‘๋‹ต์€ ๋นˆ ์ค„๋กœ ํ—ค๋” ํ•„๋“œ๊ฐ€ ์ข…๋ฃŒ๋œ ์งํ›„ ์—ฐ๊ฒฐ์ด ์ฆ‰์‹œ ํ„ฐ๋„์ด ๋จ์„ ์˜๋ฏธํ•œ๋‹ค. ํด๋ผ์ด์–ธํŠธ๋Š” ์ด๋Ÿฌํ•œ ๋ฉ”์‹œ์ง€์—์„œ ์ˆ˜์‹ ๋œ ์–ด๋–ค Content-Length ๋˜๋Š” Transfer-Encoding ํ—ค๋” ํ•„๋“œ๋„ ๋ฌด์‹œํ•ด์•ผ ํ•œ๋‹ค(MUST).

  3. ๋ฉ”์‹œ์ง€๊ฐ€ Transfer-Encoding๊ณผ Content-Length๋ฅผ ๋ชจ๋‘ ํฌํ•จํ•˜์—ฌ ์ˆ˜์‹ ๋œ ๊ฒฝ์šฐ, Transfer-Encoding์ด Content-Length๋ฅผ ๋ฌด์‹œํ•œ๋‹ค. ์ด๋Ÿฌํ•œ ๋ฉ”์‹œ์ง€๋Š” ์š”์ฒญ ์Šค๋จธ๊ธ€๋ง( ์„น์…˜ 11.2 ) ๋˜๋Š” ์‘๋‹ต ๋ถ„ํ• ( ์„น์…˜ 11.1 )์„ ์‹œ๋„ํ•˜๋ ค๋Š” ๊ฒƒ์œผ๋กœ ๋ณด์ผ ์ˆ˜ ์žˆ์œผ๋ฉฐ ์˜ค๋ฅ˜๋กœ ์ฒ˜๋ฆฌ๋˜์–ด์•ผ ํ•œ๋‹ค. ์ค‘๊ณ„์ž๊ฐ€ ๋ฉ”์‹œ์ง€๋ฅผ ์ „๋‹ฌํ•˜๊ธฐ๋กœ ์„ ํƒํ•˜๋Š” ๊ฒฝ์šฐ, ์ „๋‹ฌํ•˜๊ธฐ ์ „์— ์ˆ˜์‹ ๋œ Content-Length ํ•„๋“œ๋ฅผ ๋จผ์ € ์ œ๊ฑฐํ•˜๊ณ  Transfer-Encoding์„ ์ฒ˜๋ฆฌํ•ด์•ผ ํ•œ๋‹ค(MUST).

  4. Transfer-Encoding ํ—ค๋” ํ•„๋“œ๊ฐ€ ์กด์žฌํ•˜๊ณ  ๋งˆ์ง€๋ง‰ ์ธ์ฝ”๋”ฉ์ด ์ฒญํฌ ์ „์†ก ์ฝ”๋”ฉ( ์„น์…˜ 7.1 )์ธ ๊ฒฝ์šฐ, ๋ฉ”์‹œ์ง€ ๋ณธ๋ฌธ ๊ธธ์ด๋Š” ์ฒญํฌ๋œ ๋ฐ์ดํ„ฐ๋ฅผ ์ฝ๊ณ  ๋””์ฝ”๋”ฉํ•˜์—ฌ ์ „์†ก ์ฝ”๋”ฉ์ด ๋ฐ์ดํ„ฐ๊ฐ€ ์™„์ „ํ•จ์„ ๋‚˜ํƒ€๋‚ผ ๋•Œ๊นŒ์ง€ ํŒ์ •๋œ๋‹ค.

    Transfer-Encoding ํ—ค๋” ํ•„๋“œ๊ฐ€ ์‘๋‹ต์— ์กด์žฌํ•˜๊ณ  ์ฒญํฌ๊ฐ€ ์ตœ์ข… ์ธ์ฝ”๋”ฉ์ด ์•„๋‹Œ ๊ฒฝ์šฐ, ๋ฉ”์‹œ์ง€ ๋ณธ๋ฌธ ๊ธธ์ด๋Š” ์„œ๋ฒ„๊ฐ€ ์—ฐ๊ฒฐ์„ ๋‹ซ์„ ๋•Œ๊นŒ์ง€ ์—ฐ๊ฒฐ์„ ์ฝ์Œ์œผ๋กœ์จ ๊ฒฐ์ •๋œ๋‹ค.

    Transfer-Encoding ํ—ค๋” ํ•„๋“œ๊ฐ€ ์š”์ฒญ์— ์กด์žฌํ•˜๊ณ  ์ฒญํฌ๊ฐ€ ์ตœ์ข… ์ธ์ฝ”๋”ฉ์ด ์•„๋‹Œ ๊ฒฝ์šฐ, ๋ฉ”์‹œ์ง€ ๋ณธ๋ฌธ ๊ธธ์ด๋Š” ์‹ ๋ขฐํ•  ์ˆ˜ ์žˆ๊ฒŒ ๊ฒฐ์ •ํ•  ์ˆ˜ ์—†์œผ๋ฏ€๋กœ ์„œ๋ฒ„๋Š” 400 (Bad Request)๋กœ ์‘๋‹ตํ•œ ๋‹ค์Œ ์—ฐ๊ฒฐ์„ ๋‹ซ์•„์•ผ ํ•œ๋‹ค(MUST).

  5. Transfer-Encoding์ด ์—†๊ณ  ์ž˜๋ชป๋œ Content-Length ํ—ค๋” ํ•„๋“œ๊ฐ€ ์žˆ๋Š” ๋ฉ”์‹œ์ง€๊ฐ€ ์ˆ˜์‹ ๋˜๋ฉด, ๋ฉ”์‹œ์ง€ ํ”„๋ ˆ์ด๋ฐ์€ ์ž˜๋ชป๋œ ๊ฒƒ์ด๋ฉฐ ์ˆ˜์‹ ์ž๋Š” ์ด๋ฅผ ๋ณต๊ตฌ ๋ถˆ๊ฐ€๋Šฅํ•œ ์˜ค๋ฅ˜๋กœ ์ฒ˜๋ฆฌํ•ด์•ผ ํ•œ๋‹ค(MUST), ๋‹จ ํ•„๋“œ ๊ฐ’์ด ์‰ผํ‘œ๋กœ ๊ตฌ๋ถ„๋œ ๋ชฉ๋ก์œผ๋กœ ์„ฑ๊ณต์ ์œผ๋กœ ํŒŒ์‹ฑ๋  ์ˆ˜ ์žˆ๊ณ ( ์„น์…˜ 5.6.1 of [HTTP] ), ๋ชฉ๋ก์˜ ๋ชจ๋“  ๊ฐ’์ด ์œ ํšจํ•˜๋ฉฐ ๋ชฉ๋ก์˜ ๋ชจ๋“  ๊ฐ’์ด ๋™์ผํ•œ ๊ฒฝ์šฐ(์ด ๊ฒฝ์šฐ ๋ฉ”์‹œ์ง€๋Š” ํ•ด๋‹น ๋‹จ์ผ ๊ฐ’์„ Content-Length ํ•„๋“œ ๊ฐ’์œผ๋กœ ์‚ฌ์šฉํ•˜์—ฌ ์ฒ˜๋ฆฌ๋œ๋‹ค). ์š”์ฒญ ๋ฉ”์‹œ์ง€์—์„œ ๋ณต๊ตฌ ๋ถˆ๊ฐ€๋Šฅํ•œ ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ•˜๋ฉด ์„œ๋ฒ„๋Š” 400 (Bad Request)๋กœ ์‘๋‹ตํ•œ ๋’ค ์—ฐ๊ฒฐ์„ ๋‹ซ์•„์•ผ ํ•œ๋‹ค. ํ”„๋ก์‹œ๊ฐ€ ์‘๋‹ต ๋ฉ”์‹œ์ง€์—์„œ ์ด ์˜ค๋ฅ˜๋ฅผ ์ˆ˜์‹ ํ•˜๋ฉด ํ”„๋ก์‹œ๋Š” ์„œ๋ฒ„์™€์˜ ์—ฐ๊ฒฐ์„ ๋‹ซ๊ณ  ์ˆ˜์‹ ๋œ ์‘๋‹ต์„ ํ๊ธฐํ•œ ๋’ค ํด๋ผ์ด์–ธํŠธ์— 502 (Bad Gateway) ์‘๋‹ต์„ ๋ณด๋‚ด์•ผ ํ•œ๋‹ค. ์‚ฌ์šฉ์ž ์—์ด์ „ํŠธ๊ฐ€ ์‘๋‹ต ๋ฉ”์‹œ์ง€์—์„œ ์ด ์˜ค๋ฅ˜๋ฅผ ์ˆ˜์‹ ํ•˜๋ฉด ์‚ฌ์šฉ์ž ์—์ด์ „ํŠธ๋Š” ์„œ๋ฒ„์™€์˜ ์—ฐ๊ฒฐ์„ ๋‹ซ๊ณ  ์ˆ˜์‹ ๋œ ์‘๋‹ต์„ ํ๊ธฐํ•ด์•ผ ํ•œ๋‹ค.

  6. Content-Length ํ—ค๋” ํ•„๋“œ๊ฐ€ ์œ ํšจํ•˜๊ฒŒ ์กด์žฌํ•˜๊ณ  Transfer-Encoding์ด ์—†๋Š” ๊ฒฝ์šฐ, ๊ทธ 10์ง„ ๊ฐ’์€ ์˜ˆ์ƒ๋˜๋Š” ๋ฉ”์‹œ์ง€ ๋ณธ๋ฌธ ๊ธธ์ด๋ฅผ ์˜ฅํ…Ÿ ๋‹จ์œ„๋กœ ์ •์˜ํ•œ๋‹ค. ์†ก์‹ ์ž๊ฐ€ ํ‘œ์‹œ๋œ ์˜ฅํ…Ÿ ์ˆ˜๋ฅผ ๋ชจ๋‘ ์ „์†กํ•˜๊ธฐ ์ „์— ์—ฐ๊ฒฐ์„ ๋‹ซ๊ฑฐ๋‚˜ ์ˆ˜์‹ ์ž๊ฐ€ ํƒ€์ž„์•„์›ƒ์ด ๋ฐœ์ƒํ•˜๋ฉด, ์ˆ˜์‹ ์ž๋Š” ๋ฉ”์‹œ์ง€๊ฐ€ ๋ถˆ์™„์ „ํ•˜๋‹ค๊ณ  ๊ฐ„์ฃผํ•˜๊ณ  ์—ฐ๊ฒฐ์„ ๋‹ซ์•„์•ผ ํ•œ๋‹ค(MUST).

  7. ์ด๊ฒƒ์ด ์š”์ฒญ ๋ฉ”์‹œ์ง€์ด๊ณ  ์œ„์˜ ์–ด๋–ค ๊ฒฝ์šฐ๋„ ํ•ด๋‹น๋˜์ง€ ์•Š์œผ๋ฉด, ๋ฉ”์‹œ์ง€ ๋ณธ๋ฌธ ๊ธธ์ด๋Š” 0์ด๋‹ค(๋ฉ”์‹œ์ง€ ๋ณธ๋ฌธ์ด ์กด์žฌํ•˜์ง€ ์•Š์Œ).

  8. ๊ทธ๋ ‡์ง€ ์•Š์œผ๋ฉด, ์„ ์–ธ๋œ ๋ฉ”์‹œ์ง€ ๋ณธ๋ฌธ ๊ธธ์ด๊ฐ€ ์—†๋Š” ์‘๋‹ต ๋ฉ”์‹œ์ง€์ด๋ฏ€๋กœ ๋ฉ”์‹œ์ง€ ๋ณธ๋ฌธ ๊ธธ์ด๋Š” ์„œ๋ฒ„๊ฐ€ ์—ฐ๊ฒฐ์„ ๋‹ซ๊ธฐ ์ „์— ์ˆ˜์‹ ํ•œ ์˜ฅํ…Ÿ ์ˆ˜์— ์˜ํ•ด ๊ฒฐ์ •๋œ๋‹ค.

์™„์ „ํžˆ ์ˆ˜์‹ ๋œ ๋‹ซ๊ธฐ-๊ตฌ๋ถ„๋œ ์‘๋‹ต ๋ฉ”์‹œ์ง€์™€ ๋„คํŠธ์›Œํฌ ์žฅ์• ๋กœ ์ธํ•ด ๋ถ€๋ถ„์ ์œผ๋กœ ์ˆ˜์‹ ๋œ ๋ฉ”์‹œ์ง€๋ฅผ ๊ตฌ๋ถ„ํ•  ๋ฐฉ๋ฒ•์ด ์—†์œผ๋ฏ€๋กœ, ์„œ๋ฒ„๋Š” ๊ฐ€๋Šฅํ•œ ๊ฒฝ์šฐ ์ธ์ฝ”๋”ฉ ๋˜๋Š” ๊ธธ์ด๋กœ ๊ตฌ๋ถ„๋˜๋Š” ๋ฉ”์‹œ์ง€๋ฅผ ์ƒ์„ฑํ•˜๋Š” ๊ฒƒ์ด ๋ฐ”๋žŒ์งํ•˜๋‹ค(SHOULD). ๋‹ซ๊ธฐ-๊ตฌ๋ถ„ ๊ธฐ๋Šฅ์€ ์ฃผ๋กœ HTTP/1.0๊ณผ์˜ ํ•˜์œ„ ํ˜ธํ™˜์„ฑ์„ ์œ„ํ•ด ์กด์žฌํ•œ๋‹ค.

์„œ๋ฒ„๋Š” ๋ฉ”์‹œ์ง€ ๋ณธ๋ฌธ์ด ์žˆ์ง€๋งŒ Content-Length๊ฐ€ ์—†๋Š” ์š”์ฒญ์„ 411 (Length Required)๋กœ ์‘๋‹ตํ•˜์—ฌ ๊ฑฐ๋ถ€ํ•  ์ˆ˜ ์žˆ๋‹ค(MAY).

์ฒญํฌ ์ด์™ธ์˜ ์ „์†ก ์ฝ”๋”ฉ์ด ์ ์šฉ๋˜์ง€ ์•Š์€ ํ•œ, ๋ฉ”์‹œ์ง€ ๋ณธ๋ฌธ ๊ธธ์ด๋ฅผ ๋ฏธ๋ฆฌ ์•Œ ์ˆ˜ ์žˆ๋Š” ๊ฒฝ์šฐ ์š”์ฒญ์„ ๋ณด๋‚ด๋Š” ํด๋ผ์ด์–ธํŠธ๋Š” ์ฒญํฌ ์ „์†ก ์ฝ”๋”ฉ ๋Œ€์‹  ์œ ํšจํ•œ Content-Length ํ—ค๋” ํ•„๋“œ๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ด ๊ถŒ์žฅ๋œ๋‹ค(SHOULD)โ€”์ผ๋ถ€ ๊ธฐ์กด ์„œ๋น„์Šค๋Š” ์ฒญํฌ ์ „์†ก ์ฝ”๋”ฉ์„ ์ดํ•ดํ•˜๋”๋ผ๋„ ์ฒญํฌ์— ๋Œ€ํ•ด 411 (Length Required)๋กœ ์‘๋‹ตํ•˜๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค. ์ด๋Š” ์ผ๋ฐ˜์ ์œผ๋กœ ๊ทธ๋Ÿฌํ•œ ์„œ๋น„์Šค๋“ค์ด ๊ฒŒ์ดํŠธ์›จ์ด๋ฅผ ํ†ตํ•ด ๊ตฌํ˜„๋˜์–ด ์ „์ฒด ์š”์ฒญ์„ ๋ฒ„ํผ๋งํ•˜๊ธฐ ์ „์— ์ฝ˜ํ…์ธ  ๊ธธ์ด๋ฅผ ์š”๊ตฌํ•˜๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค.

๋ฉ”์‹œ์ง€ ๋ณธ๋ฌธ์„ ํฌํ•จํ•œ ์š”์ฒญ์„ ์ „์†กํ•˜๋Š” ์‚ฌ์šฉ์ž ์—์ด์ „ํŠธ๋Š” ์œ ํšจํ•œ Content-Length ํ—ค๋” ํ•„๋“œ ๋˜๋Š” ์ฒญํฌ ์ „์†ก ์ฝ”๋”ฉ ์ค‘ ํ•˜๋‚˜๋ฅผ ๋ฐ˜๋“œ์‹œ ์ „์†กํ•ด์•ผ ํ•œ๋‹ค(MUST). ํด๋ผ์ด์–ธํŠธ๋Š” ์„œ๋ฒ„๊ฐ€ HTTP/1.1(๋˜๋Š” ์ดํ›„)์„ ์ฒ˜๋ฆฌํ•  ๊ฒƒ์ž„์„ ์•Œ์ง€ ๋ชปํ•˜๋Š” ํ•œ ์ฒญํฌ ์ „์†ก ์ฝ”๋”ฉ์„ ์‚ฌ์šฉํ•ด์„œ๋Š” ์•ˆ ๋œ๋‹ค(MUST NOT).

์—ฐ๊ฒฐ์˜ ๋งˆ์ง€๋ง‰ ์š”์ฒญ์— ๋Œ€ํ•œ ์ตœ์ข… ์‘๋‹ต์ด ์™„์ „ํžˆ ์ˆ˜์‹ ๋˜์—ˆ๋Š”๋ฐ๋„ ์ฝ์„ ์ถ”๊ฐ€ ๋ฐ์ดํ„ฐ๊ฐ€ ๋‚จ์•„ ์žˆ์œผ๋ฉด, ์‚ฌ์šฉ์ž ์—์ด์ „ํŠธ๋Š” ๋‚จ์€ ๋ฐ์ดํ„ฐ๋ฅผ ํ๊ธฐํ•˜๊ฑฐ๋‚˜ ๊ทธ ๋ฐ์ดํ„ฐ๊ฐ€ ์ด์ „ ๋ฉ”์‹œ์ง€ ๋ณธ๋ฌธ์˜ ์ผ๋ถ€์ธ์ง€ ํŒ๋‹จ์„ ์‹œ๋„ํ•  ์ˆ˜ ์žˆ๋‹ค. ์ด๋Š” ์ด์ „ ๋ฉ”์‹œ์ง€์˜ Content-Length ๊ฐ’์ด ์ž˜๋ชป๋œ ๊ฒฝ์šฐ์— ํ•ด๋‹นํ•  ์ˆ˜ ์žˆ๋‹ค. ํด๋ผ์ด์–ธํŠธ๋Š” ๊ทธ๋Ÿฌํ•œ ์ถ”๊ฐ€ ๋ฐ์ดํ„ฐ๋ฅผ ๋ณ„๋„์˜ ์‘๋‹ต์œผ๋กœ ์ฒ˜๋ฆฌ, ์บ์‹œ ๋˜๋Š” ์ „๋‹ฌํ•˜๋ฉด ์•ˆ ๋œ๋‹ค(MUST NOT)โ€”๊ทธ๋ ‡๊ฒŒ ํ•˜๋ฉด ์บ์‹œ ์˜ค์—ผ์— ์ทจ์•ฝํ•ด์ง€๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค.

7. Transfer Codings

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

๋ชจ๋“  transfer-coding ์ด๋ฆ„์€ ๋Œ€์†Œ๋ฌธ์ž ๋น„๊ตฌ๋ถ„์ด๋ฉฐ, ์„น์…˜ 7.3์— ์ •์˜๋œ ๋Œ€๋กœ HTTP Transfer Coding ๋ ˆ์ง€์ŠคํŠธ๋ฆฌ์— ๋“ฑ๋ก๋˜์–ด์•ผ ํ•œ๋‹ค. ์ด๋“ค์€ Transfer-Encoding ๋ฐ TE ํ—ค๋” ํ•„๋“œ์—์„œ ์‚ฌ์šฉ๋œ๋‹ค(ํ›„์ž๋Š” "transfer-coding" ๋ฌธ๋ฒ•๋„ ์ •์˜ํ•œ๋‹ค).

7.1. Chunked Transfer Coding

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

chunk-size ํ•„๋“œ๋Š” ์ฒญํฌ ๋ฐ์ดํ„ฐ์˜ ์˜ฅํ…Ÿ ์ˆ˜๋ฅผ ๋‚˜ํƒ€๋‚ด๋Š” 16์ง„์ˆ˜ ์ˆซ์ž์˜ ๋ฌธ์ž์—ด์ด๋‹ค. chunk-size๊ฐ€ 0์ธ ์ฒญํฌ๋ฅผ ์ˆ˜์‹ ํ•˜๋ฉด ์ฒญํฌ ์ „์†ก ์ฝ”๋”ฉ์€ ์™„๋ฃŒ๋˜๋ฉฐ, ์„ ํƒ์ ์œผ๋กœ ํŠธ๋ ˆ์ผ๋Ÿฌ ์„น์…˜์ด ๋’ค๋”ฐ๋ฅด๊ณ  ๋งˆ์ง€๋ง‰์œผ๋กœ ๋นˆ ์ค„๋กœ ์ข…๋ฃŒ๋œ๋‹ค.

์ˆ˜์‹ ์ž๋Š” ์ฒญํฌ ์ „์†ก ์ฝ”๋”ฉ์„ ํŒŒ์‹ฑํ•˜๊ณ  ๋””์ฝ”๋“œํ•  ์ˆ˜ ์žˆ์–ด์•ผ ํ•œ๋‹ค(MUST).

HTTP/1.1์€ ์ค‘๊ณ„์ž๊ฐ€ ์ „์ฒด ์‘๋‹ต์„ ๋ฒ„ํผ๋งํ•  ์ˆ˜ ์žˆ์Œ์„ ๋ณด์žฅํ•  ์ˆ˜ ์žˆ๋„๋ก ์ฒญํฌ๋œ ์‘๋‹ต์˜ ํฌ๊ธฐ๋ฅผ ์ œํ•œํ•˜๋Š” ์ˆ˜๋‹จ์„ ์ •์˜ํ•˜์ง€ ์•Š๋Š”๋‹ค. ๋˜ํ•œ ๋งค์šฐ ํฐ ์ฒญํฌ ํฌ๊ธฐ๋Š” ์ˆ˜์‹  ๊ตฌํ˜„์—์„œ ์ •์ˆ˜ ๋ณ€ํ™˜ ์˜ค๋ฒ„ํ”Œ๋กœ์šฐ ๋˜๋Š” ์ •์ˆ˜ ํ‘œํ˜„์˜ ์ •๋ฐ€๋„ ์†์‹ค์„ ์ดˆ๋ž˜ํ•  ์ˆ˜ ์žˆ๋‹ค. ๋”ฐ๋ผ์„œ ์ˆ˜์‹ ์ž๋Š” ์ž ์žฌ์ ์œผ๋กœ ํฐ 16์ง„ ์ˆซ์ž๋ฅผ ์˜ˆ์ƒํ•˜๊ณ  ์ •์ˆ˜ ๋ณ€ํ™˜ ์˜ค๋ฒ„ํ”Œ๋กœ์šฐ๋‚˜ ์ •๋ฐ€๋„ ์†์‹ค๋กœ ์ธํ•œ ๊ตฌ๋ฌธ ์˜ค๋ฅ˜๋ฅผ ๋ฐฉ์ง€ํ•ด์•ผ ํ•œ๋‹ค(MUST).

์ฒญํฌ ์ฝ”๋”ฉ์€ ์–ด๋– ํ•œ ๋งค๊ฐœ๋ณ€์ˆ˜๋„ ์ •์˜ํ•˜์ง€ ์•Š๋Š”๋‹ค. ๋งค๊ฐœ๋ณ€์ˆ˜๊ฐ€ ์กด์žฌํ•˜๋ฉด ์˜ค๋ฅ˜๋กœ ๊ฐ„์ฃผํ•˜๋Š” ๊ฒƒ์ด ๋ฐ”๋žŒ์งํ•˜๋‹ค(SHOULD).

7.1.1. Chunk Extensions

์ฒญํฌ ์ฝ”๋”ฉ์€ ๊ฐ ์ฒญํฌ๊ฐ€ chunk-size ๋ฐ”๋กœ ๋‹ค์Œ์— 0๊ฐœ ์ด์ƒ์˜ ์ฒญํฌ ํ™•์žฅ์„ ํฌํ•จํ•˜๋„๋ก ํ—ˆ์šฉํ•œ๋‹ค. ์ด๋Š” ๊ฐ ์ฒญํฌ๋ณ„ ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ(์˜ˆ: ์„œ๋ช… ๋˜๋Š” ํ•ด์‹œ), ๋ฉ”์‹œ์ง€ ์ค‘๊ฐ„์˜ ์ œ์–ด ์ •๋ณด, ๋˜๋Š” ๋ฉ”์‹œ์ง€ ๋ณธ๋ฌธ ํฌ๊ธฐ์˜ ๋ฌด์ž‘์œ„ํ™” ๋“ฑ์„ ์ œ๊ณตํ•˜๊ธฐ ์œ„ํ•จ์ด๋‹ค.

์ฒญํฌ ์ฝ”๋”ฉ์€ ๊ฐ ์—ฐ๊ฒฐ์— ํŠนํ™”๋˜์–ด ์žˆ์œผ๋ฉฐ ๊ฐ ์ˆ˜์‹ ์ž(์ค‘๊ณ„์ž ํฌํ•จ)์— ์˜ํ•ด ์ œ๊ฑฐ๋˜๊ฑฐ๋‚˜ ์žฌ์ฝ”๋”ฉ๋  ๊ฐ€๋Šฅ์„ฑ์ด ํฌ๋ฏ€๋กœ, ์ฒญํฌ ํ™•์žฅ์˜ ์‚ฌ์šฉ์€ ์ผ๋ฐ˜์ ์œผ๋กœ "๋กฑ ํด๋ง"๊ณผ ๊ฐ™์ด ์ฒญํฌ ํ™•์žฅ์˜ ์‚ฌ์šฉ์— ๋Œ€ํ•ด ํด๋ผ์ด์–ธํŠธ์™€ ์„œ๋ฒ„๊ฐ€ ๊ณต์œ ๋œ ๊ธฐ๋Œ€๋ฅผ ๊ฐ€์ง€๋Š” ํŠน์ˆ˜ํ•œ HTTP ์„œ๋น„์Šค๋‚˜ ์ข…๋‹จ ๊ฐ„ ๋ณด์•ˆ ์—ฐ๊ฒฐ ๋‚ด์˜ ํŒจ๋”ฉ์— ์ œํ•œ๋œ๋‹ค.

์ˆ˜์‹ ์ž๋Š” ์ธ์‹ํ•˜์ง€ ๋ชปํ•˜๋Š” ์ฒญํฌ ํ™•์žฅ์„ ๋ฌด์‹œํ•ด์•ผ ํ•œ๋‹ค(MUST). ์„œ๋ฒ„๋Š” ์š”์ฒญ์—์„œ ์ˆ˜์‹ ๋˜๋Š” ์ฒญํฌ ํ™•์žฅ์˜ ์ด ๊ธธ์ด๋ฅผ ์ œ๊ณต๋˜๋Š” ์„œ๋น„์Šค์— ๋Œ€ํ•ด ํ•ฉ๋ฆฌ์ ์ธ ์–‘์œผ๋กœ ์ œํ•œํ•ด์•ผ ํ•˜๋ฉฐ, ๋‹ค๋ฅธ ๋ฉ”์‹œ์ง€ ๋ถ€๋ถ„์— ๋Œ€ํ•ด ์ ์šฉํ•˜๋Š” ๊ฒƒ๊ณผ ๋™์ผํ•œ ๊ธธ์ด ์ œํ•œ ๋ฐ ํƒ€์ž„์•„์›ƒ์„ ์ ์šฉํ•˜๊ณ , ๊ทธ ์–‘์„ ์ดˆ๊ณผํ•˜๋ฉด ์ ์ ˆํ•œ 4xx (Client Error) ์‘๋‹ต์„ ์ƒ์„ฑํ•ด์•ผ ํ•œ๋‹ค.

7.1.2. Chunked Trailer Section

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

์ฒญํฌ ์ฝ”๋”ฉ์„ ๋ฉ”์‹œ์ง€์—์„œ ์ œ๊ฑฐํ•˜๋Š” ์ˆ˜์‹ ์ž๋Š” ์ˆ˜์‹ ๋œ ํŠธ๋ ˆ์ผ๋Ÿฌ ํ•„๋“œ๋ฅผ ์„ ํƒ์ ์œผ๋กœ ์œ ์ง€ํ•˜๊ฑฐ๋‚˜ ํ๊ธฐํ•  ์ˆ˜ ์žˆ๋‹ค(MAY). ์ˆ˜์‹ ๋œ ํŠธ๋ ˆ์ผ๋Ÿฌ ํ•„๋“œ๋ฅผ ์œ ์ง€ํ•˜๋Š” ์ˆ˜์‹ ์ž๋Š” ๊ทธ ํŠธ๋ ˆ์ผ๋Ÿฌ ํ•„๋“œ๋ฅผ ์ˆ˜์‹ ๋œ ํ—ค๋” ํ•„๋“œ์™€ ๋ณ„๋„๋กœ ์ €์žฅ/์ „๋‹ฌํ•˜๊ฑฐ๋‚˜ ํ—ค๋” ์„น์…˜์— ๋ณ‘ํ•ฉํ•ด์•ผ ํ•œ๋‹ค(MUST). ์ˆ˜์‹ ์ž๋Š” ํ•ด๋‹น ํŠธ๋ ˆ์ผ๋Ÿฌ ํ•„๋“œ์˜ ๋Œ€์‘ํ•˜๋Š” ํ—ค๋” ํ•„๋“œ ์ •์˜๊ฐ€ ๋ช…์‹œ์ ์œผ๋กœ ๋ณ‘ํ•ฉ์„ ํ—ˆ์šฉํ•˜๊ณ  ์•ˆ์ „ํ•œ ๋ณ‘ํ•ฉ ๋ฐฉ๋ฒ•์„ ์ง€์‹œํ•˜์ง€ ์•Š๋Š” ํ•œ ์ˆ˜์‹ ๋œ ํŠธ๋ ˆ์ผ๋Ÿฌ ํ•„๋“œ๋ฅผ ํ—ค๋” ์„น์…˜์— ๋ณ‘ํ•ฉํ•ด์„œ๋Š” ์•ˆ ๋œ๋‹ค(MUST NOT).

7.1.3. Decoding Chunked

์ฒญํฌ ์ „์†ก ์ฝ”๋”ฉ์„ ๋””์ฝ”๋“œํ•˜๋Š” ๊ณผ์ •์€ ๋‹ค์Œ์˜ ์˜์‚ฌ ์ฝ”๋“œ๋กœ ํ‘œํ˜„ํ•  ์ˆ˜ ์žˆ๋‹ค:

  length := 0
  read chunk-size, chunk-ext (if any), and CRLF
  while (chunk-size > 0) {
     read chunk-data and CRLF
     append chunk-data to content
     length := length + chunk-size
     read chunk-size, chunk-ext (if any), and CRLF
  }
  read trailer field
  while (trailer field is not empty) {
     if (trailer fields are stored/forwarded separately) {
         append trailer field to existing trailer fields
     }
     else if (trailer field is understood and defined as mergeable) {
         merge trailer field with existing header fields
     }
     else {
         discard trailer field
     }
     read trailer field
  }
  Content-Length := length
  Remove "chunked" from Transfer-Encoding

7.2. Transfer Codings for Compression

์••์ถ•์„ ์œ„ํ•œ ๋‹ค์Œ ์ „์†ก ์ฝ”๋”ฉ ์ด๋ฆ„๋“ค์€ ๋Œ€์‘ํ•˜๋Š” ์ฝ˜ํ…์ธ  ์ฝ”๋”ฉ๊ณผ ๋™์ผํ•œ ์•Œ๊ณ ๋ฆฌ์ฆ˜์œผ๋กœ ์ •์˜๋œ๋‹ค:

compress (and x-compress)
์ž์„ธํ•œ ๋‚ด์šฉ์€ ์„น์…˜ 8.4.1.1 ์ฐธ์กฐ.
deflate
์ž์„ธํ•œ ๋‚ด์šฉ์€ ์„น์…˜ 8.4.1.2 ์ฐธ์กฐ.
gzip (and x-gzip)
์ž์„ธํ•œ ๋‚ด์šฉ์€ ์„น์…˜ 8.4.1.3 ์ฐธ์กฐ.

์••์ถ• ์ฝ”๋”ฉ๋“ค์€ ์–ด๋– ํ•œ ๋งค๊ฐœ๋ณ€์ˆ˜๋„ ์ •์˜ํ•˜์ง€ ์•Š๋Š”๋‹ค. ์ด๋“ค ์••์ถ• ์ฝ”๋”ฉ์— ๋งค๊ฐœ๋ณ€์ˆ˜๊ฐ€ ์žˆ๋Š” ๊ฒฝ์šฐ ์˜ค๋ฅ˜๋กœ ์ฒ˜๋ฆฌํ•˜๋Š” ๊ฒƒ์ด ๋ฐ”๋žŒ์งํ•˜๋‹ค(SHOULD).

7.3. Transfer Coding Registry

"HTTP Transfer Coding Registry"๋Š” ์ „์†ก ์ฝ”๋”ฉ ์ด๋ฆ„์˜ ๋„ค์ž„์ŠคํŽ˜์ด์Šค๋ฅผ ์ •์˜ํ•œ๋‹ค. ์ด๋Š” https://www.iana.org/assignments/http-parameters์—์„œ ์œ ์ง€ ๊ด€๋ฆฌ๋œ๋‹ค.

๋“ฑ๋ก์—๋Š” ๋‹ค์Œ ํ•„๋“œ๋“ค์ด ํฌํ•จ๋˜์–ด์•ผ ํ•œ๋‹ค(MUST):

  • Name
  • Description
  • Pointer to specification text

์ „์†ก ์ฝ”๋”ฉ์˜ ์ด๋ฆ„์€ ์ธ์ฝ”๋”ฉ ๋ณ€ํ™˜์ด ๋™์ผํ•˜์ง€ ์•Š๋Š” ํ•œ ์ฝ˜ํ…์ธ  ์ฝ”๋”ฉ์˜ ์ด๋ฆ„๊ณผ ์ค‘๋ณต๋˜์–ด์„œ๋Š” ์•ˆ ๋œ๋‹ค(์ด๋Š” ์„น์…˜ 7.2์—์„œ ์ •์˜ํ•œ ์••์ถ• ์ฝ”๋”ฉ์˜ ๊ฒฝ์šฐ์ฒ˜๋Ÿผ ์ธ์ฝ”๋”ฉ ๋ณ€ํ™˜์ด ๋™์ผํ•œ ๊ฒฝ์šฐ๋Š” ์˜ˆ์™ธ์ด๋‹ค).

TE ํ—ค๋” ํ•„๋“œ๋Š” ์—ฌ๋Ÿฌ ์ „์†ก ์ฝ”๋”ฉ์ด ํ—ˆ์šฉ๋  ๋•Œ ์šฐ์„ ์ˆœ์œ„ ๊ฐ’์„ ๋‚˜ํƒ€๋‚ด๊ธฐ ์œ„ํ•ด "q"๋ผ๋Š” ์˜์‚ฌ-๋งค๊ฐœ๋ณ€์ˆ˜๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค. ํ–ฅํ›„ ์ „์†ก ์ฝ”๋”ฉ ๋“ฑ๋ก์€ ๋ชจํ˜ธํ•จ์„ ํ”ผํ•˜๊ธฐ ์œ„ํ•ด ๋Œ€์†Œ๋ฌธ์ž ๊ตฌ๋ถ„ ์—†์ด "q"๋ผ๋Š” ์ด๋ฆ„์˜ ๋งค๊ฐœ๋ณ€์ˆ˜๋ฅผ ์ •์˜ํ•ด์„œ๋Š” ์•ˆ ๋œ๋‹ค(SHOULD NOT).

์ด ๋„ค์ž„์ŠคํŽ˜์ด์Šค์— ๊ฐ’์„ ์ถ”๊ฐ€ํ•˜๋ ค๋ฉด IETF ๊ฒ€ํ† ๊ฐ€ ํ•„์š”ํ•˜๋ฉฐ(์ž์„ธํ•œ ๋‚ด์šฉ์€ ์„น์…˜ 4.8 ์ฐธ์กฐ) ๋“ฑ๋ก์€ ์ด ๋ช…์„ธ์„œ์—์„œ ์ •์˜ํ•œ ์ „์†ก ์ฝ”๋”ฉ์˜ ๋ชฉ์ ์— ๋ถ€ํ•ฉํ•ด์•ผ ํ•œ๋‹ค(MUST).

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

7.4. Negotiating Transfer Codings

TE ํ•„๋“œ( ์„น์…˜ 10.1.4 of [HTTP] )๋Š” ํด๋ผ์ด์–ธํŠธ๊ฐ€ ์‘๋‹ต์—์„œ chunked ์ด์™ธ์— ์–ด๋–ค ์ „์†ก ์ฝ”๋”ฉ์„ ํ—ˆ์šฉํ•˜๋Š”์ง€์™€ ํด๋ผ์ด์–ธํŠธ๊ฐ€ ์ฒญํฌ ์ „์†ก ์ฝ”๋”ฉ์—์„œ ํŠธ๋ ˆ์ผ๋Ÿฌ ํ•„๋“œ๋ฅผ ๋ณด์กดํ•  ์˜์‚ฌ๊ฐ€ ์žˆ๋Š”์ง€๋ฅผ ๋‚˜ํƒ€๋‚ด๋Š” ๋ฐ ์‚ฌ์šฉ๋œ๋‹ค.

ํด๋ผ์ด์–ธํŠธ๋Š” TE์— chunked ์ „์†ก ์ฝ”๋”ฉ ์ด๋ฆ„์„ ๋ณด๋‚ด๋ฉด ์•ˆ ๋œ๋‹ค(MUST NOT); chunked๋Š” HTTP/1.1 ์ˆ˜์‹ ์ž์—๊ฒŒ ํ•ญ์ƒ ํ—ˆ์šฉ๋œ๋‹ค.

TE ์‚ฌ์šฉ์˜ ์„ธ ๊ฐ€์ง€ ์˜ˆ์‹œ๋Š” ์•„๋ž˜์™€ ๊ฐ™๋‹ค.

TE: deflate
TE:
TE: trailers, deflate;q=0.5

์—ฌ๋Ÿฌ ์ „์†ก ์ฝ”๋”ฉ์ด ํ—ˆ์šฉ๋  ๋•Œ, ํด๋ผ์ด์–ธํŠธ๋Š” ์„ ํ˜ธ๋„์— ๋”ฐ๋ผ ์†Œ๋ฌธ์ž ๊ตฌ๋ถ„ ์—†์ด "q" ๋งค๊ฐœ๋ณ€์ˆ˜๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์ฝ”๋”ฉ์˜ ์ˆœ์œ„๋ฅผ ์ง€์ •ํ•  ์ˆ˜ ์žˆ๋‹ค(์ฝ˜ํ…์ธ  ํ˜‘์ƒ ํ•„๋“œ์—์„œ ์‚ฌ์šฉํ•˜๋Š” q๊ฐ’๊ณผ ์œ ์‚ฌํ•จ). ์ˆœ์œ„ ๊ฐ’์€ 0์—์„œ 1 ๋ฒ”์œ„์˜ ์‹ค์ˆ˜์ด๋ฉฐ, 0.001์€ ๊ฐ€์žฅ ๋œ ์„ ํ˜ธ๋˜๊ณ  1์€ ๊ฐ€์žฅ ์„ ํ˜ธ๋œ๋‹ค; 0์€ "ํ—ˆ์šฉ๋˜์ง€ ์•Š์Œ"์„ ๋œปํ•œ๋‹ค.

TE ํ•„๋“œ ๊ฐ’์ด ๋น„์–ด ์žˆ๊ฑฐ๋‚˜ TE ํ•„๋“œ๊ฐ€ ์—†๋Š” ๊ฒฝ์šฐ, ํ—ˆ์šฉ๋˜๋Š” ์œ ์ผํ•œ ์ „์†ก ์ฝ”๋”ฉ์€ chunked์ด๋‹ค. ์ „์†ก ์ฝ”๋”ฉ์ด ์—†๋Š” ๋ฉ”์‹œ์ง€๋Š” ํ•ญ์ƒ ํ—ˆ์šฉ๋œ๋‹ค.

ํ‚ค์›Œ๋“œ "trailers"๋Š” ์†ก์‹ ์ž๊ฐ€ ํŠธ๋ ˆ์ผ๋Ÿฌ ํ•„๋“œ๋ฅผ ํ๊ธฐํ•˜์ง€ ์•Š์Œ์„ ๋‚˜ํƒ€๋‚ธ๋‹ค(์ž์„ธํ•œ ๋‚ด์šฉ์€ ์„น์…˜ 6.5 ์ฐธ์กฐ).

TE ํ—ค๋” ํ•„๋“œ๋Š” ์ฆ‰์‹œ ์—ฐ๊ฒฐ์—๋งŒ ์ ์šฉ๋˜๋ฏ€๋กœ, TE๋ฅผ ๋ณด๋‚ด๋Š” ์†ก์‹ ์ž๋Š” TE ํ—ค๋” ํ•„๋“œ๊ฐ€ ์ค‘๊ณ„์ž์— ์˜ํ•ด ์ „๋‹ฌ๋˜๋Š” ๊ฒƒ์„ ๋ฐฉ์ง€ํ•˜๊ธฐ ์œ„ํ•ด Connection ํ—ค๋” ํ•„๋“œ ๋‚ด์— "TE" ์—ฐ๊ฒฐ ์˜ต์…˜๋„ ํ•จ๊ป˜ ๋ณด๋‚ด์•ผ ํ•œ๋‹ค(MUST).

8. ๋ถˆ์™„์ „ํ•œ ๋ฉ”์‹œ์ง€ ์ฒ˜๋ฆฌ

์š”์ฒญ์ด ์ทจ์†Œ๋˜์—ˆ๊ฑฐ๋‚˜ ํƒ€์ž„์•„์›ƒ ์˜ˆ์™ธ๊ฐ€ ๋ฐœ์ƒํ•˜๋Š” ๋“ฑ์œผ๋กœ ์ธํ•ด ๋ถˆ์™„์ „ํ•œ ์š”์ฒญ ๋ฉ”์‹œ์ง€๋ฅผ ์ˆ˜์‹ ํ•œ ์„œ๋ฒ„๋Š” ์—ฐ๊ฒฐ์„ ๋‹ซ๊ธฐ ์ „์— ์˜ค๋ฅ˜ ์‘๋‹ต์„ ๋ณด๋‚ผ MAY ์žˆ๋‹ค.

์—ฐ๊ฒฐ์ด ์กฐ๊ธฐ์— ๋‹ซํžˆ๊ฑฐ๋‚˜ ์ฒญํฌ ์ „์†ก ์ฝ”๋”ฉ์„ ๋””์ฝ”๋”ฉํ•˜๋Š” ๊ณผ์ •์—์„œ ์‹คํŒจํ•˜๋Š” ๊ฒฝ์šฐ์ฒ˜๋Ÿผ ๋ถˆ์™„์ „ํ•œ ์‘๋‹ต ๋ฉ”์‹œ์ง€๋ฅผ ์ˆ˜์‹ ํ•œ ํด๋ผ์ด์–ธํŠธ๋Š” ํ•ด๋‹น ๋ฉ”์‹œ์ง€๋ฅผ ๋ถˆ์™„์ „ํ•œ ๊ฒƒ์œผ๋กœ ๊ธฐ๋กํ•ด์•ผ ํ•˜๋ฉฐ(MUST) ๋ถˆ์™„์ „ํ•œ ์‘๋‹ต์— ๋Œ€ํ•œ ์บ์‹œ ์š”๊ฑด์€ Section 3.3 of [CACHING]์— ์ •์˜๋˜์–ด ์žˆ๋‹ค.

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

์ฒญํฌ ์ „์†ก ์ฝ”๋”ฉ์„ ์‚ฌ์šฉํ•˜๋Š” ๋ฉ”์‹œ์ง€ ๋ณธ๋ฌธ์€ ์ธ์ฝ”๋”ฉ์„ ์ข…๋ฃŒํ•˜๋Š” 0ํฌ๊ธฐ ์ฒญํฌ๊ฐ€ ์ˆ˜์‹ ๋˜์ง€ ์•Š์œผ๋ฉด ๋ถˆ์™„์ „ํ•˜๋‹ค. ์œ ํšจํ•œ Content-Length๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๋ฉ”์‹œ์ง€๋Š” ์ˆ˜์‹ ๋œ ๋ฉ”์‹œ์ง€ ๋ณธ๋ฌธ ํฌ๊ธฐ(์˜ฅํ…Ÿ)๊ฐ€ Content-Length ๊ฐ’๋ณด๋‹ค ์ž‘์œผ๋ฉด ๋ถˆ์™„์ „ํ•˜๋‹ค. ์ฒญํฌ ์ „์†ก ์ฝ”๋”ฉ๋„ Content-Length๋„ ์—†๋Š” ์‘๋‹ต์€ ์—ฐ๊ฒฐ์˜ ์ข…๋ฃŒ๋กœ ์ข…๋ฃŒ๋˜๋ฉฐ, ํ—ค๋” ์„น์…˜์ด ์˜จ์ „ํ•˜๊ฒŒ ์ˆ˜์‹ ๋˜์—ˆ๋‹ค๋ฉด ๊ธฐ๋ฐ˜ ์—ฐ๊ฒฐ์—์„œ ์˜ค๋ฅ˜(์˜ˆ: TLS์˜ "incomplete close")๊ฐ€ ํ‘œ์‹œ๋˜์ง€ ์•Š๋Š” ํ•œ ์™„์ „ํ•œ ๊ฒƒ์œผ๋กœ ๊ฐ„์ฃผ๋œ๋‹ค(์ž์„ธํ•œ ๋‚ด์šฉ์€ Section 9.8 ์ฐธ์กฐ).

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

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

Section 7.3 of [HTTP]์— ์„ค๋ช…๋œ ๋ฐ”์™€ ๊ฐ™์ด, HTTP ์ƒํ˜ธ์ž‘์šฉ์— ์‚ฌ์šฉ๋  ๊ตฌ์ฒด์ ์ธ ์—ฐ๊ฒฐ ํ”„๋กœํ† ์ฝœ์€ ํด๋ผ์ด์–ธํŠธ ๊ตฌ์„ฑ ๋ฐ target URI์— ์˜ํ•ด ๊ฒฐ์ •๋œ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด "http" URI ์Šคํ‚ด์€ IP ์œ„์˜ TCP์˜ ๊ธฐ๋ณธ ์—ฐ๊ฒฐ(๊ธฐ๋ณธ ํฌํŠธ 80)์„ ๊ฐ€๋ฆฌํ‚ค์ง€๋งŒ, ํด๋ผ์ด์–ธํŠธ๋Š” ๋‹ค๋ฅธ ์—ฐ๊ฒฐ, ํฌํŠธ ๋˜๋Š” ํ”„๋กœํ† ์ฝœ์„ ํ†ตํ•ด ํ”„๋ก์‹œ๋ฅผ ์‚ฌ์šฉํ•˜๋„๋ก ๊ตฌ์„ฑ๋  ์ˆ˜ ์žˆ๋‹ค.

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

9.1. ์„ค์ •

๋‹ค์–‘ํ•œ ์ „์†ก์ธต ๋˜๋Š” ์„ธ์…˜์ธต ํ”„๋กœํ† ์ฝœ์„ ํ†ตํ•ด ์—ฐ๊ฒฐ์ด ์–ด๋–ป๊ฒŒ ์„ค์ •๋˜๋Š”์ง€๋ฅผ ์„ค๋ช…ํ•˜๋Š” ๊ฒƒ์€ ์ด ๋ช…์„ธ์„œ์˜ ๋ฒ”์œ„๋ฅผ ๋ฒ—์–ด๋‚œ๋‹ค. ๊ฐ HTTP ์—ฐ๊ฒฐ์€ ํ•˜๋‚˜์˜ ๊ธฐ์ € ์ „์†ก ์—ฐ๊ฒฐ์— ๋งคํ•‘๋œ๋‹ค.

9.2. ์‘๋‹ต์„ ์š”์ฒญ์— ์—ฐ๊ฒฐํ•˜๊ธฐ

HTTP/1.1์€ ํŠน์ • ์š”์ฒญ ๋ฉ”์‹œ์ง€์™€ ๊ทธ์— ๋Œ€์‘ํ•˜๋Š” ํ•˜๋‚˜ ์ด์ƒ์˜ ์‘๋‹ต ๋ฉ”์‹œ์ง€๋ฅผ ์—ฐ๊ฒฐํ•˜๊ธฐ ์œ„ํ•œ ์š”์ฒญ ์‹๋ณ„์ž๋ฅผ ํฌํ•จํ•˜์ง€ ์•Š๋Š”๋‹ค. ๋”ฐ๋ผ์„œ ๊ฐ™์€ ์—ฐ๊ฒฐ์—์„œ ์š”์ฒญ์ด ์ด๋ฃจ์–ด์ง„ ์ˆœ์„œ์™€ ์‘๋‹ต์ด ๋„์ฐฉํ•˜๋Š” ์ˆœ์„œ๋Š” ์ •ํ™•ํžˆ ์ผ์น˜ํ•ด์•ผ ํ•œ๋‹ค๊ณ  ๊ฐ€์ •ํ•œ๋‹ค. ํ•˜๋‚˜์˜ ์š”์ฒญ์— ๋Œ€ํ•ด ์—ฌ๋Ÿฌ ์‘๋‹ต์ด ๋ฐœ์ƒํ•˜๋Š” ๊ฒฝ์šฐ๋Š” ํ•˜๋‚˜ ์ด์ƒ์˜ ์ •๋ณด ์‘๋‹ต(1xx)์ด ์ตœ์ข… ์‘๋‹ต์— ์•ž์„œ ๋ณด๋‚ด์งˆ ๋•Œ๋งŒ ๋ฐœ์ƒํ•œ๋‹ค.

ํ•œ ์—ฐ๊ฒฐ์—์„œ ๋ฏธ์™„๋ฃŒ ์š”์ฒญ์ด ์—ฌ๋Ÿฌ ๊ฐœ์ธ ํด๋ผ์ด์–ธํŠธ๋Š” ์ „์†กํ•œ ์ˆœ์„œ๋Œ€๋กœ ๋ฏธ์™„๋ฃŒ ์š”์ฒญ ๋ชฉ๋ก์„ ์œ ์ง€ํ•ด์•ผ ํ•˜๋ฉฐ(MUST), ํ•ด๋‹น ์—ฐ๊ฒฐ์—์„œ ์ˆ˜์‹ ํ•œ ๊ฐ ์‘๋‹ต ๋ฉ”์‹œ์ง€๋ฅผ ์•„์ง ์ตœ์ข…(๋น„-1xx) ์‘๋‹ต์„ ๋ฐ›์ง€ ๋ชปํ•œ ์ฒซ ๋ฒˆ์งธ ๋ฏธ์™„๋ฃŒ ์š”์ฒญ์— ์—ฐ๊ด€์‹œ์ผœ์•ผ ํ•œ๋‹ค(MUST).

ํด๋ผ์ด์–ธํŠธ๊ฐ€ ๋ฏธ์™„๋ฃŒ ์š”์ฒญ์ด ์—†๋Š” ์—ฐ๊ฒฐ์—์„œ ๋ฐ์ดํ„ฐ๋ฅผ ์ˆ˜์‹ ํ•˜๋ฉด, ๊ทธ ๋ฐ์ดํ„ฐ๋Š” ์œ ํšจํ•œ ์‘๋‹ต์œผ๋กœ ๊ฐ„์ฃผํ•ด์„œ๋Š” ์•ˆ ๋œ๋‹ค(MUST NOT). ๋ฉ”์‹œ์ง€ ๊ตฌ๋ถ„์ด ๋ชจํ˜ธํ•ด์กŒ์œผ๋ฏ€๋กœ ํด๋ผ์ด์–ธํŠธ๋Š” ์—ฐ๊ฒฐ์„ ๋‹ซ๋Š” ๊ฒƒ์ด ๋ฐ”๋žŒ์งํ•˜๋‹ค(SHOULD), ๋‹จ ์ˆ˜์‹ ๋œ ๋ฐ์ดํ„ฐ๊ฐ€ ํ•˜๋‚˜ ์ด์ƒ์˜ CRLF๋งŒ์œผ๋กœ ๊ตฌ์„ฑ๋˜์–ด ํ๊ธฐํ•  ์ˆ˜ ์žˆ๋Š” ๊ฒฝ์šฐ(Section 2.2 ์ฐธ์กฐ)๋ฅผ ์ œ์™ธํ•œ๋‹ค.

9.3. ์ง€์† ์—ฐ๊ฒฐ

HTTP/1.1์€ ๋‹ค์ค‘ ์š”์ฒญ ๋ฐ ์‘๋‹ต์„ ๋‹จ์ผ ์—ฐ๊ฒฐ์—์„œ ์ „์†กํ•  ์ˆ˜ ์žˆ๋Š” ์ง€์† ์—ฐ๊ฒฐ์˜ ์‚ฌ์šฉ์„ ๊ธฐ๋ณธ๊ฐ’์œผ๋กœ ํ•œ๋‹ค. HTTP ๊ตฌํ˜„์ฒด๋Š” ์ง€์† ์—ฐ๊ฒฐ์„ ์ง€์›ํ•˜๋Š” ๊ฒƒ์ด ๋ฐ”๋žŒ์งํ•˜๋‹ค(SHOULD).

์ˆ˜์‹ ์ž๋Š” ํ”„๋กœํ† ์ฝœ ๋ฒ„์ „๊ณผ ํ•ด๋‹น ์—ฐ๊ฒฐ์—์„œ ๊ฐ€์žฅ ์ตœ๊ทผ์— ์ˆ˜์‹ ๋œ ๋ฉ”์‹œ์ง€์˜ Connection ํ—ค๋” ํ•„๋“œ(Section 7.6.1 ์ฐธ์กฐ)๋ฅผ ๊ธฐ์ค€์œผ๋กœ ์—ฐ๊ฒฐ์ด ์ง€์†๋˜๋Š”์ง€ ์—ฌ๋ถ€๋ฅผ ๊ฒฐ์ •ํ•œ๋‹ค:

  • ์—ฐ๊ฒฐ ์˜ต์…˜์œผ๋กœ "close"๊ฐ€ ์กด์žฌํ•˜๋ฉด(Section 9.6) ํ˜„์žฌ ์‘๋‹ต ํ›„ ์—ฐ๊ฒฐ์€ ์ง€์†๋˜์ง€ ์•Š๋Š”๋‹ค; ๊ทธ๋ ‡์ง€ ์•Š์œผ๋ฉด,
  • ์ˆ˜์‹ ๋œ ํ”„๋กœํ† ์ฝœ์ด HTTP/1.1(๋˜๋Š” ์ดํ›„)์ธ ๊ฒฝ์šฐ ํ˜„์žฌ ์‘๋‹ต ํ›„ ์—ฐ๊ฒฐ์€ ์ง€์†๋œ๋‹ค; ๊ทธ๋ ‡์ง€ ์•Š์œผ๋ฉด,
  • ์ˆ˜์‹ ๋œ ํ”„๋กœํ† ์ฝœ์ด HTTP/1.0์ด๊ณ  "keep-alive" ์—ฐ๊ฒฐ ์˜ต์…˜์ด ์กด์žฌํ•˜๋ฉฐ ์ˆ˜์‹ ์ž๊ฐ€ ํ”„๋ก์‹œ๊ฐ€ ์•„๋‹ˆ๊ฑฐ๋‚˜ ๋ฉ”์‹œ์ง€๊ฐ€ ์‘๋‹ต์ด๋ฉฐ ์ˆ˜์‹ ์ž๊ฐ€ HTTP/1.0 "keep-alive" ๋ฉ”์ปค๋‹ˆ์ฆ˜์„ ์กด์ค‘ํ•˜๋ ค๋Š” ๊ฒฝ์šฐ ํ˜„์žฌ ์‘๋‹ต ํ›„ ์—ฐ๊ฒฐ์€ ์ง€์†๋œ๋‹ค; ๊ทธ๋ ‡์ง€ ์•Š์œผ๋ฉด,
  • ํ˜„์žฌ ์‘๋‹ต ํ›„ ์—ฐ๊ฒฐ์€ ๋‹ซํžŒ๋‹ค.

์ง€์† ์—ฐ๊ฒฐ์„ ์ง€์›ํ•˜์ง€ ์•Š๋Š” ํด๋ผ์ด์–ธํŠธ๋Š” ๋ชจ๋“  ์š”์ฒญ ๋ฉ”์‹œ์ง€์—์„œ "close" ์—ฐ๊ฒฐ ์˜ต์…˜์„ ์ „์†กํ•ด์•ผ ํ•œ๋‹ค(MUST).

์ง€์† ์—ฐ๊ฒฐ์„ ์ง€์›ํ•˜์ง€ ์•Š๋Š” ์„œ๋ฒ„๋Š” ์ƒํƒœ ์ฝ”๋“œ๊ฐ€ 1xx (Informational)๊ฐ€ ์•„๋‹Œ ๋ชจ๋“  ์‘๋‹ต ๋ฉ”์‹œ์ง€์—์„œ "close" ์—ฐ๊ฒฐ ์˜ต์…˜์„ ์ „์†กํ•ด์•ผ ํ•œ๋‹ค(MUST).

ํด๋ผ์ด์–ธํŠธ๋Š” "close" ์—ฐ๊ฒฐ ์˜ต์…˜์„ ์ „์†กํ•˜๊ฑฐ๋‚˜ HTTP/1.0 ์‘๋‹ต์—์„œ "keep-alive" ์—ฐ๊ฒฐ ์˜ต์…˜์„ ์ˆ˜์‹ ํ•  ๋•Œ๊นŒ์ง€ ์ง€์† ์—ฐ๊ฒฐ์—์„œ ์ถ”๊ฐ€ ์š”์ฒญ์„ ๋ณด๋‚ผ ์ˆ˜ ์žˆ๋‹ค(MAY).

์—ฐ๊ฒฐ์„ ์ง€์†ํ•˜๋ ค๋ฉด ์—ฐ๊ฒฐ์˜ ๋ชจ๋“  ๋ฉ”์‹œ์ง€๋Š” ์Šค์Šค๋กœ ์ •์˜๋œ ๋ฉ”์‹œ์ง€ ๊ธธ์ด(์ฆ‰, ์—ฐ๊ฒฐ ์ข…๋ฃŒ๋กœ ์ •์˜๋˜์ง€ ์•Š๋Š” ๊ธธ์ด)๋ฅผ ๊ฐ€์ ธ์•ผ ํ•œ๋‹ค(์ž์„ธํ•œ ๋‚ด์šฉ์€ Section 6 ์ฐธ์กฐ). ์„œ๋ฒ„๋Š” ์ „์ฒด ์š”์ฒญ ๋ฉ”์‹œ์ง€ ๋ณธ๋ฌธ์„ ์ฝ๊ฑฐ๋‚˜ ์‘๋‹ต์„ ์ „์†กํ•œ ํ›„ ์—ฐ๊ฒฐ์„ ๋‹ซ์•„์•ผ ํ•œ๋‹ค(MUST); ๊ทธ๋ ‡์ง€ ์•Š์œผ๋ฉด ์ง€์† ์—ฐ๊ฒฐ์— ๋‚จ์•„ ์žˆ๋Š” ๋ฐ์ดํ„ฐ๋Š” ๋‹ค์Œ ์š”์ฒญ์œผ๋กœ ์ž˜๋ชป ํ•ด์„๋  ์ˆ˜ ์žˆ๋‹ค. ๋งˆ์ฐฌ๊ฐ€์ง€๋กœ, ํด๋ผ์ด์–ธํŠธ๋Š” ๋™์ผํ•œ ์—ฐ๊ฒฐ์„ ์žฌ์‚ฌ์šฉํ•˜๋ ค๋ฉด ์ „์ฒด ์‘๋‹ต ๋ฉ”์‹œ์ง€ ๋ณธ๋ฌธ์„ ์ฝ์–ด์•ผ ํ•œ๋‹ค(MUST).

ํ”„๋ก์‹œ ์„œ๋ฒ„๋Š” HTTP/1.0 ํด๋ผ์ด์–ธํŠธ์™€ ์ง€์† ์—ฐ๊ฒฐ์„ ์œ ์ง€ํ•ด์„œ๋Š” ์•ˆ ๋œ๋‹ค(MUST NOT). ์ž์„ธํ•œ ๋‚ด์šฉ์€ Appendix C.2.2 ์ฐธ์กฐ.

HTTP/1.0 ํด๋ผ์ด์–ธํŠธ์™€์˜ ํ•˜์œ„ ํ˜ธํ™˜์„ฑ์— ๋Œ€ํ•œ ์ถ”๊ฐ€ ์ •๋ณด๋Š” Appendix C.2.2๋ฅผ ์ฐธ์กฐํ•˜๋ผ.

9.3.1. ์š”์ฒญ ์žฌ์‹œ๋„

์—ฐ๊ฒฐ์€ ์˜๋„์ ์ด๋“  ์•„๋‹ˆ๋“  ์–ธ์ œ๋“ ์ง€ ๋‹ซํž ์ˆ˜ ์žˆ๋‹ค. ๊ตฌํ˜„์ฒด๋Š” ๋น„๋™๊ธฐ์  ๋‹ซํž˜ ์ด๋ฒคํŠธ์—์„œ ๋ณต๊ตฌํ•  ํ•„์š”๊ฐ€ ์žˆ์Œ์„ ์˜ˆ์ƒํ•ด์•ผ ํ•œ๋‹ค. ํด๋ผ์ด์–ธํŠธ๊ฐ€ ์ž๋™์œผ๋กœ ๋ฏธ์™„๋ฃŒ ์š”์ฒญ ์‹œํ€€์Šค๋ฅผ ์žฌ์‹œ๋„ํ•  ์ˆ˜ ์žˆ๋Š” ์กฐ๊ฑด์€ Section 9.2.2 of [HTTP]์— ์ •์˜๋˜์–ด ์žˆ๋‹ค.

9.3.2. ํŒŒ์ดํ”„๋ผ์ด๋‹

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

ํŒŒ์ดํ”„๋ผ์ธ์„ ์‚ฌ์šฉํ•˜๋Š” ํด๋ผ์ด์–ธํŠธ๋Š” ์—ฐ๊ฒฐ์ด ๋ชจ๋“  ํ•ด๋‹น ์‘๋‹ต์„ ์ˆ˜์‹ ํ•˜๊ธฐ ์ „์— ๋‹ซํžˆ๋ฉด ์‘๋‹ต์„ ๋ฐ›์ง€ ๋ชปํ•œ ์š”์ฒญ์„ ์žฌ์‹œ๋„ํ•ด์•ผ ํ•œ๋‹ค(SHOULD). ์‹คํŒจํ•œ ์—ฐ๊ฒฐ ํ›„ ํŒŒ์ดํ”„๋ผ์ธ๋œ ์š”์ฒญ์„ ์žฌ์‹œ๋„ํ•  ๋•Œ์—๋Š”(์„œ๋ฒ„์— ์˜ํ•ด ๋งˆ์ง€๋ง‰ ์™„์ „ํ•œ ์‘๋‹ต์œผ๋กœ ๋ช…์‹œ์ ์œผ๋กœ ๋‹ซํžˆ์ง€ ์•Š์€ ์—ฐ๊ฒฐ), ํด๋ผ์ด์–ธํŠธ๋Š” ์—ฐ๊ฒฐ์ด ์„ฑ๋ฆฝ๋œ ์งํ›„์— ์ฆ‰์‹œ ํŒŒ์ดํ”„๋ผ์ธํ•ด์„œ๋Š” ์•ˆ ๋œ๋‹ค(MUST NOT); ์ด์ „ ํŒŒ์ดํ”„๋ผ์ธ์—์„œ ๋‚จ์•„ ์žˆ๋Š” ์ฒซ ๋ฒˆ์งธ ์š”์ฒญ์ด ์—๋Ÿฌ ์‘๋‹ต์„ ์œ ๋ฐœํ–ˆ์„ ์ˆ˜ ์žˆ๊ณ , ์ด๋Š” ๋‹ค์‹œ ์ „์†ก๋  ๋•Œ ๋˜๋‹ค์‹œ ์†์‹ค๋  ์ˆ˜ ์žˆ๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค(์ž์„ธํ•œ ๋‚ด์šฉ์€ Section 9.6์— ์„ค๋ช…๋œ TCP reset ๋ฌธ์ œ ์ฐธ์กฐ).

๋ฉฑ๋“ฑ(idempotent) ๋ฉ”์„œ๋“œ(Section 9.2.2 ์ฐธ์กฐ)๋Š” ํŒŒ์ดํ”„๋ผ์ด๋‹์— ์ค‘์š”ํ•˜๋‹ค. ์™œ๋ƒํ•˜๋ฉด ์ด๋“ค์€ ์—ฐ๊ฒฐ ์‹คํŒจ ํ›„ ์ž๋™์œผ๋กœ ์žฌ์‹œ๋„๋  ์ˆ˜ ์žˆ๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค. ์‚ฌ์šฉ์ž ์—์ด์ „ํŠธ๋Š” ๋น„๋ฉฑ๋“ฑ ๋ฉ”์„œ๋“œ ์ดํ›„์—๋Š” ์ตœ์ข… ์‘๋‹ต ์ƒํƒœ ์ฝ”๋“œ๊ฐ€ ์ˆ˜์‹ ๋  ๋•Œ๊นŒ์ง€ ํŒŒ์ดํ”„๋ผ์ธ์„ ์‚ฌ์šฉํ•ด์„œ๋Š” ์•ˆ ๋œ๋‹ค(SHOULD NOT), ๋‹จ ์‚ฌ์šฉ์ž ์—์ด์ „ํŠธ๊ฐ€ ํŒŒ์ดํ”„๋ผ์ธ๋œ ์‹œํ€€์Šค์—์„œ ๋ถ€๋ถ„ ์‹คํŒจ๋ฅผ ํƒ์ง€ํ•˜๊ณ  ๋ณต๊ตฌํ•  ์ˆ˜ ์žˆ๋Š” ์ˆ˜๋‹จ์ด ์žˆ๋Š” ๊ฒฝ์šฐ๋Š” ์˜ˆ์™ธ์ด๋‹ค.

ํŒŒ์ดํ”„๋ผ์ธ๋œ ์š”์ฒญ์„ ์ˆ˜์‹ ํ•œ ์ค‘๊ณ„์ž๋Š” ์ด๋ฅผ ๋‚ด๋ถ€๋กœ ์ „๋‹ฌํ•  ๋•Œ ํŒŒ์ดํ”„๋ผ์ธํ•  ์ˆ˜ ์žˆ๋‹ค(MAY), ์ด๋Š” ์•„์›ƒ๋ฐ”์šด๋“œ ์‚ฌ์šฉ์ž ์—์ด์ „ํŠธ๊ฐ€ ์–ด๋–ค ์š”์ฒญ์„ ์•ˆ์ „ํ•˜๊ฒŒ ํŒŒ์ดํ”„๋ผ์ธํ•  ์ˆ˜ ์žˆ๋Š”์ง€ ๊ฒฐ์ •ํ•  ์ˆ˜ ์žˆ๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค. ์ธ๋ฐ”์šด๋“œ ์—ฐ๊ฒฐ์ด ์‘๋‹ต์„ ๋ฐ›๊ธฐ ์ „์— ์‹คํŒจํ•˜๋ฉด, ํŒŒ์ดํ”„๋ผ์ธ๋œ ์ค‘๊ณ„์ž๋Š” ์‘๋‹ต์„ ์•„์ง ๋ฐ›์ง€ ๋ชปํ•œ idempotent ๋ฉ”์„œ๋“œ์˜ ์š”์ฒญ ์‹œํ€€์Šค๋ฅผ ์žฌ์‹œ๋„ํ•  ์ˆ˜ ์žˆ๋‹ค(MAY). ๊ทธ๋ ‡์ง€ ์•Š๋‹ค๋ฉด ์ค‘๊ณ„์ž๋Š” ์ˆ˜์‹ ๋œ ์‘๋‹ต์„ ์ „๋‹ฌํ•œ ๋‹ค์Œ ํ•ด๋‹น ์•„์›ƒ๋ฐ”์šด๋“œ ์—ฐ๊ฒฐ์„ ๋‹ซ์•„ ์•„์›ƒ๋ฐ”์šด๋“œ ์‚ฌ์šฉ์ž ์—์ด์ „ํŠธ๊ฐ€ ์ ์ ˆํžˆ ๋ณต๊ตฌํ•  ์ˆ˜ ์žˆ๋„๋ก ํ•ด์•ผ ํ•œ๋‹ค(SHOULD).

9.4. ๋™์‹œ์„ฑ

ํด๋ผ์ด์–ธํŠธ๋Š” ํŠน์ • ์„œ๋ฒ„์— ๋Œ€ํ•ด ๋™์‹œ์— ์—ด์–ด ๋‘๋Š” ์—ฐ๊ฒฐ ์ˆ˜๋ฅผ ์ œํ•œํ•˜๋Š” ๊ฒƒ์ด ๋ฐ”๋žŒ์งํ•˜๋‹ค.

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

์—ฌ๋Ÿฌ ์—ฐ๊ฒฐ์„ ์‚ฌ์šฉํ•˜๋Š” ์ฃผ๋œ ์ด์œ ๋Š” ์„œ๋ฒ„ ์ธก ์ฒ˜๋ฆฌ ์‹œ๊ฐ„์ด ๋งŽ์ด ๊ฑธ๋ฆฌ๊ฑฐ๋‚˜ ๋งค์šฐ ํฐ ์ฝ˜ํ…์ธ  ์ „์†ก์ด ๋‹ค์Œ ์š”์ฒญ์„ ๋ธ”๋กํ•˜๋Š” "ํ—ค๋“œ ์˜ค๋ธŒ ๋ผ์ธ ๋ธ”๋กœํ‚น" ๋ฌธ์ œ๋ฅผ ํ”ผํ•˜๊ธฐ ์œ„ํ•จ์ด๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ๊ฐ ์—ฐ๊ฒฐ์€ ์„œ๋ฒ„ ์ž์›์„ ์†Œ๋น„ํ•œ๋‹ค.

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

์„œ๋ฒ„๋Š” ๋‹จ์ผ ํด๋ผ์ด์–ธํŠธ๋กœ๋ถ€ํ„ฐ์˜ ๊ณผ๋„ํ•œ ์—ฐ๊ฒฐ ์ˆ˜์™€ ๊ฐ™์ด ๋‚จ์šฉ ๋˜๋Š” DoS ๊ณต๊ฒฉ์˜ ํŠน์ง•์œผ๋กœ ํŒ๋‹จ๋˜๋Š” ํŠธ๋ž˜ํ”ฝ์„ ๊ฑฐ๋ถ€ํ•  ์ˆ˜ ์žˆ๋‹ค๋Š” ์ ์„ ์œ ์˜ํ•˜๋ผ.

9.5. ์žฅ์•  ๋ฐ ํƒ€์ž„์•„์›ƒ

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

ํƒ€์ž„์•„์›ƒ์„ ์ ์šฉํ•˜๋ ค๋Š” ํด๋ผ์ด์–ธํŠธ ๋˜๋Š” ์„œ๋ฒ„๋Š” ์—ฐ๊ฒฐ์— ๋Œ€ํ•ด ์ •์ƒ ์ข…๋ฃŒ(graceful close)๋ฅผ ์ˆ˜ํ–‰ํ•˜๋Š” ๊ฒƒ์ด ๋ฐ”๋žŒ์งํ•˜๋‹ค(SHOULD). ๊ตฌํ˜„์ฒด๋Š” ์—ด๋ฆฐ ์—ฐ๊ฒฐ์—์„œ ์ˆ˜์‹ ๋œ ์ข…๋ฃŒ ์‹ ํ˜ธ๋ฅผ ์ง€์†์ ์œผ๋กœ ๋ชจ๋‹ˆํ„ฐ๋งํ•˜๊ณ  ์ ์ ˆํžˆ ์‘๋‹ตํ•ด์•ผ ํ•œ๋‹ค(SHOULD), ์™œ๋ƒํ•˜๋ฉด ์–‘์ธก์˜ ์‹ ์†ํ•œ ์ข…๋ฃŒ๋Š” ํ• ๋‹น๋œ ์‹œ์Šคํ…œ ์ž์›์„ ํšŒ์ˆ˜ํ•˜๋Š” ๋ฐ ๋„์›€์ด ๋˜๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค.

ํด๋ผ์ด์–ธํŠธ, ์„œ๋ฒ„ ๋˜๋Š” ํ”„๋ก์‹œ๋Š” ์–ธ์ œ๋“ ์ง€ ์ „์†ก ์—ฐ๊ฒฐ์„ ๋‹ซ์„ MAY ์žˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด, ํด๋ผ์ด์–ธํŠธ๊ฐ€ ์ƒˆ ์š”์ฒญ ์ „์†ก์„ ์‹œ์ž‘ํ•œ ๋™์‹œ์— ์„œ๋ฒ„๊ฐ€ "์œ ํœด" ์—ฐ๊ฒฐ์„ ๋‹ซ๊ธฐ๋กœ ๊ฒฐ์ •ํ•  ์ˆ˜ ์žˆ๋‹ค. ์„œ๋ฒ„ ๊ด€์ ์—์„œ๋Š” ์—ฐ๊ฒฐ์ด ์œ ํœด ์ƒํƒœ์—์„œ ๋‹ซํžˆ๋Š” ๊ฒƒ์ด์ง€๋งŒ, ํด๋ผ์ด์–ธํŠธ ๊ด€์ ์—์„œ๋Š” ์š”์ฒญ์ด ์ง„ํ–‰ ์ค‘์ผ ์ˆ˜ ์žˆ๋‹ค.

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

๋ฉ”์‹œ์ง€ ๋ณธ๋ฌธ์„ ์ „์†กํ•˜๋Š” ํด๋ผ์ด์–ธํŠธ๋Š” ์ „์†ก ์ค‘์— ๋„คํŠธ์›Œํฌ ์—ฐ๊ฒฐ์—์„œ ์˜ค๋ฅ˜ ์‘๋‹ต์ด ์˜ค๋Š”์ง€ ๋ชจ๋‹ˆํ„ฐ๋งํ•ด์•ผ ํ•œ๋‹ค(SHOULD). ํด๋ผ์ด์–ธํŠธ๊ฐ€ ์„œ๋ฒ„๊ฐ€ ๋ฉ”์‹œ์ง€ ๋ณธ๋ฌธ์„ ์ˆ˜์‹ ํ•˜๊ธฐ๋ฅผ ์›ํ•˜์ง€ ์•Š์œผ๋ฉฐ ์—ฐ๊ฒฐ์„ ๋‹ซ๊ณ  ์žˆ๋‹ค๋Š” ์‘๋‹ต์„ ๋ณด๋ฉด ์ฆ‰์‹œ ์ „์†ก์„ ์ค‘๋‹จํ•˜๊ณ  ์ž์‹ ์˜ ์ชฝ ์—ฐ๊ฒฐ์„ ๋‹ซ์•„์•ผ ํ•œ๋‹ค(SHOULD).

9.6. ์ข…๋ฃŒ

"close" ์—ฐ๊ฒฐ ์˜ต์…˜์€ ์†ก์‹ ์ž๊ฐ€ ์‘๋‹ต ์™„๋ฃŒ ํ›„ ์ด ์—ฐ๊ฒฐ์„ ๋‹ซ์„ ๊ฒƒ์ด๋ผ๋Š” ์‹ ํ˜ธ๋กœ ์ •์˜๋œ๋‹ค. ์†ก์‹ ์ž๋Š” ์—ฐ๊ฒฐ์„ ๋‹ซ์„ ์˜์‚ฌ๊ฐ€ ์žˆ์„ ๋•Œ "close" ์—ฐ๊ฒฐ ์˜ต์…˜์„ ํฌํ•จํ•˜๋Š” Connection ํ—ค๋” ํ•„๋“œ๋ฅผ ์ „์†กํ•˜๋Š” ๊ฒƒ์ด ๋ฐ”๋žŒ์งํ•˜๋‹ค(SHOULD). ์˜ˆ๋ฅผ ๋“ค์–ด,

Connection: close

์š”์ฒญ ํ—ค๋” ํ•„๋“œ๋กœ์„œ ์ด๋Š” ํด๋ผ์ด์–ธํŠธ๊ฐ€ ์ด ์—ฐ๊ฒฐ์—์„œ ๋ณด๋‚ผ ๋งˆ์ง€๋ง‰ ์š”์ฒญ์ž„์„ ๋‚˜ํƒ€๋‚ด๊ณ , ์‘๋‹ต์—์„œ๋Š” ๋™์ผํ•œ ํ•„๋“œ๊ฐ€ ์„œ๋ฒ„๊ฐ€ ์‘๋‹ต ๋ฉ”์‹œ์ง€ ์™„๋ฃŒ ํ›„ ์ด ์—ฐ๊ฒฐ์„ ๋‹ซ์„ ๊ฒƒ์ž„์„ ๋‚˜ํƒ€๋‚ธ๋‹ค.

ํ•„๋“œ ์ด๋ฆ„ "Close"๋Š” ์˜ˆ์•ฝ๋˜์–ด ์žˆ์œผ๋ฏ€๋กœ, ํ•ด๋‹น ์ด๋ฆ„์„ ํ—ค๋” ํ•„๋“œ๋กœ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์€ "close" ์—ฐ๊ฒฐ ์˜ต์…˜๊ณผ ์ถฉ๋Œํ•  ์ˆ˜ ์žˆ๋‹ค.

"close" ์—ฐ๊ฒฐ ์˜ต์…˜์„ ์ „์†กํ•œ ํด๋ผ์ด์–ธํŠธ๋Š” ๊ทธ ์š”์ฒญ(ํ•ด๋‹น "close"๋ฅผ ํฌํ•จํ•œ ๊ฒƒ) ์ดํ›„๋กœ ํ•ด๋‹น ์—ฐ๊ฒฐ์—์„œ ์ถ”๊ฐ€ ์š”์ฒญ์„ ๋ณด๋‚ด์„œ๋Š” ์•ˆ ๋˜๋ฉฐ(MUST NOT) ์ด ์š”์ฒญ์— ๋Œ€ํ•œ ์ตœ์ข… ์‘๋‹ต์„ ์ฝ์€ ํ›„ ์—ฐ๊ฒฐ์„ ๋‹ซ์•„์•ผ ํ•œ๋‹ค(MUST).

"close" ์—ฐ๊ฒฐ ์˜ต์…˜์„ ์ˆ˜์‹ ํ•œ ์„œ๋ฒ„๋Š” ๊ทธ "close"๋ฅผ ํฌํ•จํ•œ ์š”์ฒญ์— ๋Œ€ํ•œ ์ตœ์ข… ์‘๋‹ต์„ ์ „์†กํ•œ ํ›„ ์—ฐ๊ฒฐ ์ข…๋ฃŒ๋ฅผ ์‹œ์ž‘ํ•ด์•ผ ํ•œ๋‹ค(MUST; ์•„๋ž˜ ์ฐธ์กฐ). ์„œ๋ฒ„๋Š” ํ•ด๋‹น ์—ฐ๊ฒฐ์—์„œ ์ตœ์ข… ์‘๋‹ต์œผ๋กœ "close" ์—ฐ๊ฒฐ ์˜ต์…˜์„ ๋ณด๋‚ด๋Š” ๊ฒƒ์ด ๋ฐ”๋žŒ์งํ•˜๋‹ค(SHOULD). ์„œ๋ฒ„๋Š” ํ•ด๋‹น ์—ฐ๊ฒฐ์—์„œ ์ˆ˜์‹ ๋˜๋Š” ์ถ”๊ฐ€ ์š”์ฒญ์„ ์ฒ˜๋ฆฌํ•ด์„œ๋Š” ์•ˆ ๋œ๋‹ค(MUST NOT).

"close" ์—ฐ๊ฒฐ ์˜ต์…˜์„ ๋ณด๋‚ด๋Š” ์„œ๋ฒ„๋Š” ๊ทธ "close"๋ฅผ ํฌํ•จํ•œ ์‘๋‹ต์„ ์ „์†กํ•œ ํ›„ ์—ฐ๊ฒฐ ์ข…๋ฃŒ๋ฅผ ์‹œ์ž‘ํ•ด์•ผ ํ•˜๋ฉฐ(MUST) ํ•ด๋‹น ์—ฐ๊ฒฐ์—์„œ ์ˆ˜์‹ ๋˜๋Š” ์ถ”๊ฐ€ ์š”์ฒญ์„ ์ฒ˜๋ฆฌํ•ด์„œ๋Š” ์•ˆ ๋œ๋‹ค(MUST NOT).

"close" ์—ฐ๊ฒฐ ์˜ต์…˜์„ ํฌํ•จํ•˜๋Š” ์‘๋‹ต์„ ์ˆ˜์‹ ํ•œ ํด๋ผ์ด์–ธํŠธ๋Š” ํ•ด๋‹น ์—ฐ๊ฒฐ์—์„œ์˜ ์š”์ฒญ ์ „์†ก์„ ์ค‘๋‹จํ•˜๊ณ  ๊ทธ ์‘๋‹ต์„ ์ฝ์€ ํ›„ ์—ฐ๊ฒฐ์„ ๋‹ซ์•„์•ผ ํ•˜๋ฉฐ(MUST) ์ถ”๊ฐ€๋กœ ํŒŒ์ดํ”„๋ผ์ธ๋œ ์š”์ฒญ์ด ์žˆ์œผ๋ฉด ์„œ๋ฒ„๊ฐ€ ๊ทธ๊ฒƒ๋“ค์„ ์ฒ˜๋ฆฌํ•  ๊ฒƒ์ด๋ผ๊ณ  ๊ฐ€์ •ํ•ด์„œ๋Š” ์•ˆ ๋œ๋‹ค(SHOULD NOT).

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

TCP ๋ฆฌ์…‹ ๋ฌธ์ œ๋ฅผ ํ”ผํ•˜๊ธฐ ์œ„ํ•ด ์„œ๋ฒ„๋Š” ์ผ๋ฐ˜์ ์œผ๋กœ ๋‹จ๊ณ„์ ์œผ๋กœ ์—ฐ๊ฒฐ์„ ๋‹ซ๋Š”๋‹ค. ๋จผ์ € ์„œ๋ฒ„๋Š” ์“ฐ๊ธฐ ์ธก๋งŒ ๋‹ซ์•„ ๋ฐ˜์ชฝ ๋‹ซ๊ธฐ(half-close)๋ฅผ ์ˆ˜ํ–‰ํ•œ๋‹ค. ๊ทธ๋Ÿฐ ๋‹ค์Œ ์„œ๋ฒ„๋Š” ํด๋ผ์ด์–ธํŠธ์˜ ํ•ด๋‹น ๋‹ซํž˜์„ ์ˆ˜์‹ ํ•˜๊ฑฐ๋‚˜ ์„œ๋ฒ„ ์ž์‹ ์˜ TCP ์Šคํƒ์ด ์„œ๋ฒ„์˜ ๋งˆ์ง€๋ง‰ ์‘๋‹ต์„ ํฌํ•จํ•œ ํŒจํ‚ท์— ๋Œ€ํ•œ ํด๋ผ์ด์–ธํŠธ์˜ ํ™•์ธ์„ ์ˆ˜์‹ ํ–ˆ๋‹ค๊ณ  ํ•ฉ๋ฆฌ์ ์œผ๋กœ ํ™•์‹ ํ•  ๋•Œ๊นŒ์ง€ ์—ฐ๊ฒฐ์„ ๊ณ„์† ์ฝ๋Š”๋‹ค. ๋งˆ์ง€๋ง‰์œผ๋กœ ์„œ๋ฒ„๋Š” ์—ฐ๊ฒฐ์„ ์™„์ „ํžˆ ๋‹ซ๋Š”๋‹ค.

๋ฆฌ์…‹ ๋ฌธ์ œ์— TCP๋งŒ ํ•ด๋‹นํ•˜๋Š”์ง€ ๋˜๋Š” ๋‹ค๋ฅธ ์ „์†ก ํ”„๋กœํ† ์ฝœ์—์„œ๋„ ๋ฐœ์ƒํ•˜๋Š”์ง€๋Š” ์•Œ๋ ค์ ธ ์žˆ์ง€ ์•Š๋‹ค.

ํด๋ผ์ด์–ธํŠธ๊ฐ€ ๋ฐ˜์ชฝ ๋‹ซ๊ธฐ๋กœ TCP ์—ฐ๊ฒฐ์„ ๋‹ซ๋Š”๋‹ค๊ณ  ํ•ด์„œ ์š”์ฒญ ๋ฉ”์‹œ์ง€๊ฐ€ ๊ตฌ๋ถ„๋˜๊ฑฐ๋‚˜ ํด๋ผ์ด์–ธํŠธ๊ฐ€ ๋” ์ด์ƒ ์‘๋‹ต์— ๊ด€์‹ฌ์ด ์—†๋‹ค๋Š” ๊ฒƒ์„ ์˜๋ฏธํ•˜์ง€๋Š” ์•Š๋Š”๋‹ค. ์ผ๋ฐ˜์ ์œผ๋กœ ์ „์†ก ์‹ ํ˜ธ๋Š” HTTP/1.1์ด ์ „์†ก๊ณผ ๋…๋ฆฝ์ ์ด๋ฏ€๋กœ ์—์ง€์ผ€์ด์Šค๋ฅผ ์‹ ํ˜ธํ•˜๊ธฐ ์œ„ํ•ด ์‹ ๋ขฐํ•  ์ˆ˜ ์—†๋‹ค.

9.7. TLS ์—ฐ๊ฒฐ ์‹œ์ž‘

๊ฐœ๋…์ ์œผ๋กœ HTTP/TLS๋Š” TLS๋กœ ๋ณดํ˜ธ๋œ ์—ฐ๊ฒฐ์„ ํ†ตํ•ด HTTP ๋ฉ”์‹œ์ง€๋ฅผ ์ „์†กํ•˜๋Š” ๊ฒƒ์ด๋‹ค([TLS13]).

HTTP ํด๋ผ์ด์–ธํŠธ๋Š” ๋˜ํ•œ TLS ํด๋ผ์ด์–ธํŠธ๋กœ ๋™์ž‘ํ•œ๋‹ค. ์ ์ ˆํ•œ ํฌํŠธ๋กœ ์„œ๋ฒ„์— ์—ฐ๊ฒฐ์„ ์‹œ๋„ํ•˜๊ณ  TLS ํ•ธ๋“œ์…ฐ์ดํฌ๋ฅผ ์‹œ์ž‘ํ•˜๊ธฐ ์œ„ํ•ด TLS ClientHello๋ฅผ ์ „์†กํ•œ๋‹ค. TLS ํ•ธ๋“œ์…ฐ์ดํฌ๊ฐ€ ์™„๋ฃŒ๋˜๋ฉด ํด๋ผ์ด์–ธํŠธ๋Š” ์ฒซ ๋ฒˆ์งธ HTTP ์š”์ฒญ์„ ์‹œ์ž‘ํ•  ์ˆ˜ ์žˆ๋‹ค. ๋ชจ๋“  HTTP ๋ฐ์ดํ„ฐ๋Š” TLS์˜ "application data"๋กœ ์ „์†ก๋˜์–ด์•ผ ํ•˜๋ฉฐ(MUST) ๊ทธ ์™ธ์—๋Š” ์ผ๋ฐ˜ ์—ฐ๊ฒฐ์ฒ˜๋Ÿผ ์ทจ๊ธ‰๋œ๋‹ค(์ง€์† ์—ฐ๊ฒฐ ์žฌ์‚ฌ์šฉ ํฌํ•จ).

9.8. TLS ์—ฐ๊ฒฐ ์ข…๋ฃŒ

TLS๋Š” ์˜ค๋ฅ˜๊ฐ€ ์•„๋‹Œ ์—ฐ๊ฒฐ ์ข…๋ฃŒ ์ „์— ์ข…๋ฃŒ ์•Œ๋ฆผ(closure alerts)์„ ๊ตํ™˜ํ•˜์—ฌ ์•ˆ์ „ํ•œ ์—ฐ๊ฒฐ ์ข…๋ฃŒ๋ฅผ ์ œ๊ณตํ•œ๋‹ค(์ž์„ธํ•œ ๋‚ด์šฉ์€ Section 6.1 of [TLS13] ์ฐธ์กฐ). ์œ ํšจํ•œ ์ข…๋ฃŒ ์•Œ๋ฆผ์„ ์ˆ˜์‹ ํ•˜๋ฉด ๊ตฌํ˜„์ฒด๋Š” ํ•ด๋‹น ์—ฐ๊ฒฐ์—์„œ ๋” ์ด์ƒ์˜ ๋ฐ์ดํ„ฐ๊ฐ€ ์ˆ˜์‹ ๋˜์ง€ ์•Š์Œ์„ ํ™•์‹ ํ•  ์ˆ˜ ์žˆ๋‹ค.

๊ตฌํ˜„์ฒด๊ฐ€ ์ž์‹ ์ด ๊ด€์‹ฌ ์žˆ๋Š” ๋ชจ๋“  ๋ฉ”์‹œ์ง€ ๋ฐ์ดํ„ฐ๋ฅผ ์ „์†กํ•˜๊ฑฐ๋‚˜ ์ˆ˜์‹ ํ–ˆ์Œ์„ ์•Œ๊ฒŒ ๋˜๋ฉด, ๋ณดํ†ต HTTP ๋ฉ”์‹œ์ง€ ๊ฒฝ๊ณ„๋ฅผ ๊ฐ์ง€ํ•จ์œผ๋กœ์จ, ์ƒ๋Œ€์˜ ๋Œ€์‘ ์ข…๋ฃŒ ์•Œ๋ฆผ์„ ๊ธฐ๋‹ค๋ฆฌ์ง€ ์•Š๊ณ  ์ข…๋ฃŒ ์•Œ๋ฆผ์„ ๋ณด๋‚ธ ๋’ค ์—ฐ๊ฒฐ์„ ๋‹ซ์•„ "incomplete close"๋ฅผ ์ƒ์„ฑํ•  ์ˆ˜ ์žˆ๋‹ค.

๋ถˆ์™„์ „ํ•œ ์ข…๋ฃŒ๋Š” ์ด๋ฏธ ์ˆ˜์‹ ๋œ ๋ฐ์ดํ„ฐ์˜ ๋ณด์•ˆ์„ฑ์„ ๋ฌธ์ œ ์‚ผ์ง€๋Š” ์•Š์ง€๋งŒ, ์ดํ›„์˜ ๋ฐ์ดํ„ฐ๊ฐ€ ์ž˜๋ฆฌ์—ˆ์„ ๊ฐ€๋Šฅ์„ฑ์„ ๋‚˜ํƒ€๋‚ผ ์ˆ˜ ์žˆ๋‹ค. TLS๋Š” HTTP ๋ฉ”์‹œ์ง€ ํ”„๋ ˆ์ด๋ฐ์„ ์ง์ ‘ ์•Œ์ง€ ๋ชปํ•˜๋ฏ€๋กœ ๋ฉ”์‹œ์ง€๊ฐ€ ์™„์ „ํ•œ์ง€ ํŒ๋‹จํ•˜๋ ค๋ฉด HTTP ๋ฐ์ดํ„ฐ๋ฅผ ๊ฒ€์‚ฌํ•ด์•ผ ํ•œ๋‹ค. ๋ถˆ์™„์ „ํ•œ ๋ฉ”์‹œ์ง€ ์ฒ˜๋ฆฌ ๋ฐฉ๋ฒ•์€ Section 8์— ์ •์˜๋˜์–ด ์žˆ๋‹ค.

๋ถˆ์™„์ „ํ•œ ์ข…๋ฃŒ๋ฅผ ๋งŒ๋‚ฌ์„ ๋•Œ, ํด๋ผ์ด์–ธํŠธ๋Š” ๋‹ค์Œ ์ค‘ ์–ด๋А ํ•˜๋‚˜๋ผ๋„ ์ˆ˜์‹ ํ–ˆ์œผ๋ฉด ๊ทธ ์š”์ฒญ๋“ค์„ ์™„๋ฃŒ๋œ ๊ฒƒ์œผ๋กœ ๊ฐ„์ฃผํ•˜๋Š” ๊ฒƒ์ด ๋ฐ”๋žŒ์งํ•˜๋‹ค(SHOULD):

  1. Content-Length ํ—ค๋” ํ•„๋“œ์— ์ง€์ •๋œ ๋งŒํผ์˜ ๋ฐ์ดํ„ฐ

  2. ์ฒญํฌ ์ „์†ก ์ฝ”๋”ฉ์ด ์‚ฌ์šฉ๋œ ๊ฒฝ์šฐ์˜ ์ข…๋ฃŒ๋ฅผ ์•Œ๋ฆฌ๋Š” 0ํฌ๊ธฐ ์ฒญํฌ

์ฒญํฌ ์ „์†ก ์ฝ”๋”ฉ๋„ Content-Length๋„ ์—†๋Š” ์‘๋‹ต์€ ์œ ํšจํ•œ ์ข…๋ฃŒ ์•Œ๋ฆผ์„ ์ˆ˜์‹ ํ•œ ๊ฒฝ์šฐ์—๋งŒ ์™„์ „ํ•œ ๊ฒƒ์œผ๋กœ ๊ฐ„์ฃผ๋œ๋‹ค. ๋ถˆ์™„์ „ํ•œ ๋ฉ”์‹œ์ง€๋ฅผ ์™„์ „ํ•œ ๊ฒƒ์œผ๋กœ ์ฒ˜๋ฆฌํ•˜๋ฉด ๊ตฌํ˜„์ฒด๋ฅผ ๊ณต๊ฒฉ์— ๋…ธ์ถœํ•  ์ˆ˜ ์žˆ๋‹ค.

๋ถˆ์™„์ „ํ•œ ์ข…๋ฃŒ๋ฅผ ๊ฐ์ง€ํ•œ ํด๋ผ์ด์–ธํŠธ๋Š” ์šฐ์•„ํ•˜๊ฒŒ ๋ณต๊ตฌํ•ด์•ผ ํ•œ๋‹ค(SHOULD).

ํด๋ผ์ด์–ธํŠธ๋Š” ์—ฐ๊ฒฐ์„ ๋‹ซ๊ธฐ ์ „์— ์ข…๋ฃŒ ์•Œ๋ฆผ์„ ๋ฐ˜๋“œ์‹œ ๋ณด๋‚ด์•ผ ํ•œ๋‹ค(MUST). ๋” ์ด์ƒ ๋ฐ์ดํ„ฐ๋ฅผ ๋ฐ›์ง€ ์•Š์„ ๊ฒƒ์œผ๋กœ ์˜ˆ์ƒ๋˜๋Š” ํด๋ผ์ด์–ธํŠธ๋Š” ์„œ๋ฒ„์˜ ์ข…๋ฃŒ ์•Œ๋ฆผ์„ ๊ธฐ๋‹ค๋ฆฌ์ง€ ์•Š๊ณ  ๋‹จ์ˆœํžˆ ์—ฐ๊ฒฐ์„ ๋‹ซ์•„ ์„œ๋ฒ„ ์ธก์—์„œ ๋ถˆ์™„์ „ํ•œ ์ข…๋ฃŒ๋ฅผ ์ƒ์„ฑํ•  MAY ์žˆ๋‹ค.

์„œ๋ฒ„๋Š” ํด๋ผ์ด์–ธํŠธ๊ฐ€ ๋ฐ์ดํ„ฐ๋ฅผ ๋๊นŒ์ง€ ์ฐพ์„ ์ˆ˜ ์žˆ๋Š” ๊ฒฝ์šฐ๊ฐ€ ๋งŽ์œผ๋ฏ€๋กœ ํด๋ผ์ด์–ธํŠธ๋กœ๋ถ€ํ„ฐ ๋ถˆ์™„์ „ํ•œ ์ข…๋ฃŒ๋ฅผ ๋ฐ›์„ ์ค€๋น„๋ฅผ ํ•ด์•ผ ํ•œ๋‹ค(SHOULD).

์„œ๋ฒ„๋Š” ํด๋ผ์ด์–ธํŠธ์™€ ์ข…๋ฃŒ ์•Œ๋ฆผ ๊ตํ™˜์„ ์‹œ๋„ํ•ด์•ผ ํ•˜๋ฉฐ(MUST) ์ข…๋ฃŒ ์•Œ๋ฆผ์„ ๋ณด๋‚ธ ํ›„ ์—ฐ๊ฒฐ์„ ๋‹ซ์•„ ํด๋ผ์ด์–ธํŠธ ์ธก์—์„œ ๋ถˆ์™„์ „ํ•œ ์ข…๋ฃŒ๋ฅผ ์ƒ์„ฑํ•  MAY ์žˆ๋‹ค.

10. ๋ฉ”์‹œ์ง€๋ฅผ ๋ฐ์ดํ„ฐ๋กœ ํฌํ•จํ•˜๊ธฐ

10.1. ๋ฏธ๋””์–ด ํƒ€์ž… message/http

"message/http" ๋ฏธ๋””์–ด ํƒ€์ž…์€ ํ•˜๋‚˜์˜ HTTP ์š”์ฒญ ๋˜๋Š” ์‘๋‹ต ๋ฉ”์‹œ์ง€๋ฅผ ํฌํ•จํ•˜๋Š” ๋ฐ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ, ์ด๋•Œ ๋ชจ๋“  "message" ์œ ํ˜•์— ์ ์šฉ๋˜๋Š” MIME์˜ ํ–‰ ๊ธธ์ด ๋ฐ ์ธ์ฝ”๋”ฉ ์ œํ•œ์„ ์ค€์ˆ˜ํ•ด์•ผ ํ•œ๋‹ค. ํ–‰ ๊ธธ์ด ์ œํ•œ ๋•Œ๋ฌธ์— "message/http" ๋‚ด์˜ ํ•„๋“œ ๊ฐ’์€ obs-fold์—์„œ ์„ค๋ช…ํ•œ ๋Œ€๋กœ ์—ฌ๋Ÿฌ ์ค„์— ๊ฑธ์ณ ํ•„๋“œ ๊ฐ’์„ ์ „๋‹ฌํ•˜๊ธฐ ์œ„ํ•ด ํ–‰ ์ ‘๊ธฐ(Section 5.2)๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค. "message/http" ๋ฐ์ดํ„ฐ๋ฅผ ์ˆ˜์‹ ํ•˜๋Š” ์ˆ˜์‹ ์ž๋Š” ๋ฉ”์‹œ์ง€๋ฅผ ์ฒ˜๋ฆฌํ•  ๋•Œ ๋ชจ๋“  ๊ตฌ์‹ ํ–‰ ์ ‘๊ธฐ(obs-fold)๋ฅผ ํ•˜๋‚˜ ์ด์ƒ์˜ SP ๋ฌธ์ž๋กœ ๋Œ€์ฒดํ•ด์•ผ ํ•œ๋‹ค(MUST).

Type name:
message
Subtype name:
http
Required parameters:
N/A
Optional parameters:
version, msgtype
version:
ํฌํ•จ๋œ ๋ฉ”์‹œ์ง€์˜ HTTP-version ๋ฒˆํ˜ธ(์˜ˆ: "1.1"). ์—†์œผ๋ฉด ๋ณธ๋ฌธ ์ฒซ ์ค„์—์„œ ๋ฒ„์ „์„ ํŒ๋ณ„ํ•  ์ˆ˜ ์žˆ๋‹ค.
msgtype:
๋ฉ”์‹œ์ง€ ์œ ํ˜• โ€” "request" ๋˜๋Š” "response". ์—†์œผ๋ฉด ๋ณธ๋ฌธ ์ฒซ ์ค„์—์„œ ์œ ํ˜•์„ ํŒ๋ณ„ํ•  ์ˆ˜ ์žˆ๋‹ค.
Encoding considerations:
ํ—ˆ์šฉ๋˜๋Š” ๊ฐ’์€ "7bit", "8bit", ๋˜๋Š” "binary"๋ฟ์ด๋‹ค
Security considerations:
๋ณด์•ˆ ๊ณ ๋ ค์‚ฌํ•ญ์€ ์„น์…˜ 11์„ ์ฐธ์กฐํ•˜๋ผ
Interoperability considerations:
N/A
Published specification:
RFC 9112 (์ฐธ์กฐ ์„น์…˜ 10.1).
Applications that use this media type:
N/A
Fragment identifier considerations:
N/A
Additional information:
Magic number(s):
N/A
Deprecated alias names for this type:
N/A
File extension(s):
N/A
Macintosh file type code(s):
N/A
Person and email address to contact for further information:
์ถ”๊ฐ€ ์ •๋ณด๋Š” ์ €์ž ์ฃผ์†Œ(Authors' Addresses) ์„น์…˜์„ ์ฐธ์กฐํ•˜๋ผ.
Intended usage:
COMMON
Restrictions on usage:
N/A
Author:
์ €์ž ์ฃผ์†Œ ์„น์…˜์„ ์ฐธ์กฐํ•˜๋ผ.
Change controller:
IESG

10.2. ๋ฏธ๋””์–ด ํƒ€์ž… application/http

"application/http" ๋ฏธ๋””์–ด ํƒ€์ž…์€ ํ•˜๋‚˜ ์ด์ƒ์˜ HTTP ์š”์ฒญ ๋˜๋Š” ์‘๋‹ต ๋ฉ”์‹œ์ง€(ํ˜ผํ•ฉ๋˜์ง€ ์•Š์Œ)์˜ ํŒŒ์ดํ”„๋ผ์ธ์„ ํฌํ•จํ•˜๋Š” ๋ฐ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค.

Type name:
application
Subtype name:
http
Required parameters:
N/A
Optional parameters:
version, msgtype
version:
ํฌํ•จ๋œ ๋ฉ”์‹œ์ง€๋“ค์˜ HTTP-version ๋ฒˆํ˜ธ(์˜ˆ: "1.1"). ์—†์œผ๋ฉด ๋ณธ๋ฌธ ์ฒซ ์ค„์—์„œ ๋ฒ„์ „์„ ํŒ๋ณ„ํ•  ์ˆ˜ ์žˆ๋‹ค.
msgtype:
๋ฉ”์‹œ์ง€ ์œ ํ˜• โ€” "request" ๋˜๋Š” "response". ์—†์œผ๋ฉด ๋ณธ๋ฌธ ์ฒซ ์ค„์—์„œ ์œ ํ˜•์„ ํŒ๋ณ„ํ•  ์ˆ˜ ์žˆ๋‹ค.
Encoding considerations:
์ด ํƒ€์ž…์œผ๋กœ ๋‘˜๋Ÿฌ์‹ธ์ธ HTTP ๋ฉ”์‹œ์ง€๋Š” "binary" ํ˜•์‹์ด๋‹ค; ์ด๋ฉ”์ผ๋กœ ์ „์†กํ•  ๋•Œ๋Š” ์ ์ ˆํ•œ Content-Transfer-Encoding ์‚ฌ์šฉ์ด ํ•„์š”ํ•˜๋‹ค.
Security considerations:
๋ณด์•ˆ ๊ณ ๋ ค์‚ฌํ•ญ์€ ์„น์…˜ 11์„ ์ฐธ์กฐํ•˜๋ผ
Interoperability considerations:
N/A
Published specification:
RFC 9112 (์ฐธ์กฐ ์„น์…˜ 10.2).
Applications that use this media type:
N/A
Fragment identifier considerations:
N/A
Additional information:
Deprecated alias names for this type:
N/A
Magic number(s):
N/A
File extension(s):
N/A
Macintosh file type code(s):
N/A
Person and email address to contact for further information:
์ถ”๊ฐ€ ์ •๋ณด๋Š” ์ €์ž ์ฃผ์†Œ(Authors' Addresses) ์„น์…˜์„ ์ฐธ์กฐํ•˜๋ผ.
Intended usage:
COMMON
Restrictions on usage:
N/A
Author:
์ €์ž ์ฃผ์†Œ ์„น์…˜์„ ์ฐธ์กฐํ•˜๋ผ.
Change controller:
IESG

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

์ด ์„น์…˜์€ ๊ฐœ๋ฐœ์ž, ์ •๋ณด ์ œ๊ณต์ž ๋ฐ ์‚ฌ์šฉ์ž์—๊ฒŒ HTTP ๋ฉ”์‹œ์ง€ ๊ตฌ๋ฌธ ๋ฐ ํŒŒ์‹ฑ๊ณผ ๊ด€๋ จ๋œ ์•Œ๋ ค์ง„ ๋ณด์•ˆ ๊ณ ๋ ค์‚ฌํ•ญ์„ ์•Œ๋ฆฌ๊ธฐ ์œ„ํ•œ ๊ฒƒ์ด๋‹ค. HTTP ์˜๋ฏธ๋ก , ์ฝ˜ํ…์ธ  ๋ฐ ๋ผ์šฐํŒ…์— ๋Œ€ํ•œ ๋ณด์•ˆ ๊ณ ๋ ค์‚ฌํ•ญ์€ [HTTP]๋ฅผ ์ฐธ์กฐํ•˜๋ผ.

11.1. ์‘๋‹ต ๋ถ„ํ• 

์‘๋‹ต ๋ถ„ํ• (์ผ๋ช… CRLF ์ธ์ ์…˜)์€ HTTP ๋ฉ”์‹œ์ง€ ํ”„๋ ˆ์ด๋ฐ์˜ ํ–‰ ๊ธฐ๋ฐ˜ ํŠน์„ฑ๊ณผ ์ง€์† ์—ฐ๊ฒฐ์—์„œ ์š”์ฒญ๊ณผ ์‘๋‹ต์˜ ์ˆœ์„œ ์—ฐ๊ด€์„ ์•…์šฉํ•˜๋Š” ๋‹ค์–‘ํ•œ ์›น ๊ณต๊ฒฉ์—์„œ ์‚ฌ์šฉ๋˜๋Š” ์ผ๋ฐ˜์ ์ธ ๊ธฐ๋ฒ•์ด๋‹ค([Klein]). ์ด ๊ธฐ๋ฒ•์€ ์š”์ฒญ์ด ๊ณต์œ  ์บ์‹œ๋ฅผ ํ†ต๊ณผํ•  ๋•Œ ํŠนํžˆ ์‹ฌ๊ฐํ•œ ํ”ผํ•ด๋ฅผ ์ค„ ์ˆ˜ ์žˆ๋‹ค.

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

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

์‘๋‹ต ๋ถ„ํ• ์— ๋Œ€ํ•œ ์ผ๋ฐ˜์ ์ธ ๋ฐฉ์–ด๋Š” ์ธ์ฝ”๋”ฉ๋œ CR ๋ฐ LF(์˜ˆ: "%0D" ๋ฐ "%0A")์ฒ˜๋Ÿผ ๋ณด์ด๋Š” ๋ฐ์ดํ„ฐ๋ฅผ ํ•„ํ„ฐ๋งํ•˜๋Š” ๊ฒƒ์ด๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ์ด๋Š” ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์„œ๋ฒ„๊ฐ€ ๋‹จ์ง€ URI ๋””์ฝ”๋”ฉ๋งŒ ์ˆ˜ํ–‰ํ•œ๋‹ค๋Š” ๊ฐ€์ •์— ๊ธฐ๋ฐ˜ํ•˜๋ฉฐ, ๋ฌธ์ž์…‹ ๋ณ€ํ™˜, XML ์—”ํ‹ฐํ‹ฐ ๋ณ€ํ™˜, base64 ๋””์ฝ”๋”ฉ, sprintf ์žฌํฌ๋งท ๋“ฑ ๋” ๋ชจํ˜ธํ•œ ๋ฐ์ดํ„ฐ ๋ณ€ํ™˜์ด ์ผ์–ด๋‚  ์ˆ˜ ์žˆ๋Š” ๊ฒฝ์šฐ๋ฅผ ๊ณ ๋ คํ•˜์ง€ ๋ชปํ•œ๋‹ค. ๋” ํšจ๊ณผ์ ์ธ ์™„ํ™”์ฑ…์€ ์„œ๋ฒ„์˜ ํ•ต์‹ฌ ํ”„๋กœํ† ์ฝœ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ์ด์™ธ์—์„œ ํ—ค๋” ์„น์…˜ ๋‚ด์— CR ๋˜๋Š” LF๋ฅผ ์ „์†กํ•˜์ง€ ๋ชปํ•˜๋„๋ก ์ œํ•œํ•˜๋Š” ๊ฒƒ์œผ๋กœ, ์ด๋Š” ์ž˜๋ชป๋œ ์˜ฅํ…Ÿ์„ ํ•„ํ„ฐ๋งํ•˜๋Š” API๋กœ ํ—ค๋” ํ•„๋“œ ์ถœ๋ ฅ์„ ์ œํ•œํ•˜๊ณ  ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์„œ๋ฒ„๊ฐ€ ํ”„๋กœํ† ์ฝœ ์ŠคํŠธ๋ฆผ์— ์ง์ ‘ ์“ฐ๋Š” ๊ฒƒ์„ ํ—ˆ์šฉํ•˜์ง€ ์•Š๋Š” ๊ฒƒ์„ ์˜๋ฏธํ•œ๋‹ค.

11.2. ์š”์ฒญ ์Šค๋จธ๊ธ€๋ง

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

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

11.3. ๋ฉ”์‹œ์ง€ ๋ฌด๊ฒฐ์„ฑ

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

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

"http" ์Šคํ‚ด์€ ์šฐ๋ฐœ์ ์ด๊ฑฐ๋‚˜ ์•…์˜์ ์ธ ๋ฉ”์‹œ์ง€ ๋ณ€์กฐ๋กœ๋ถ€ํ„ฐ ๋ณดํ˜ธ๋ฅผ ์ œ๊ณตํ•˜์ง€ ์•Š๋Š”๋‹ค.

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

11.4. ๋ฉ”์‹œ์ง€ ๊ธฐ๋ฐ€์„ฑ

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

๊ธฐ๋ฐ€ ์—ฐ๊ฒฐ์ด ํ•„์š”ํ•œ ๋ฆฌ์†Œ์Šค๋ฅผ ์‹๋ณ„ํ•˜๊ธฐ ์œ„ํ•ด "https" ์Šคํ‚ด์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค(์ž์„ธํ•œ ๋‚ด์šฉ์€ ์„น์…˜ 4.2.2 ์ฐธ์กฐ).

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

๋‹ค์Œ ๋“ฑ๋ก๋“ค์— ๋Œ€ํ•œ ๋ณ€๊ฒฝ ์ œ์–ด์ž๋Š”: "IETF (iesg@ietf.org) - Internet Engineering Task Force"์ด๋‹ค.

12.1. ํ•„๋“œ ์ด๋ฆ„ ๋“ฑ๋ก

IANA๋Š” https://www.iana.org/assignments/http-fields์— ์žˆ๋Š” "Hypertext Transfer Protocol (HTTP) Field Name Registry"์— ๋‹ค์Œ ํ•„๋“œ ์ด๋ฆ„๋“ค์„ ์ถ”๊ฐ€ํ–ˆ๋‹ค. ์ด๋Š” ์„น์…˜ 18.4์— ์„ค๋ช…๋œ ๋ฐ”์™€ ๊ฐ™๋‹ค.

ํ‘œ 1
Field Name Status Section Comments
Close permanent 9.6 (reserved)
MIME-Version permanent B.1
Transfer-Encoding permanent 6.1

12.2. ๋ฏธ๋””์–ด ํƒ€์ž… ๋“ฑ๋ก

IANA๋Š” https://www.iana.org/assignments/media-types์˜ "Media Types" ๋ ˆ์ง€์ŠคํŠธ๋ฆฌ๋ฅผ ์„น์…˜ 10.1 ๋ฐ 10.2์— ์žˆ๋Š” ๋“ฑ๋ก ์ •๋ณด๋กœ ์—…๋ฐ์ดํŠธํ–ˆ๋‹ค. ์ด๋Š” ๋ฏธ๋””์–ด ํƒ€์ž… "message/http" ๋ฐ "application/http"์— ๋Œ€ํ•œ ๊ฒƒ์ด๋‹ค.

12.3. ์ „์†ก ์ฝ”๋”ฉ ๋“ฑ๋ก

IANA๋Š” https://www.iana.org/assignments/http-parameters/์˜ "HTTP Transfer Coding Registry"๋ฅผ ์„น์…˜ 7.3์˜ ๋“ฑ๋ก ์ ˆ์ฐจ ๋ฐ ์•„๋ž˜ ํ‘œ์— ์š”์•ฝ๋œ ์ฝ˜ํ…์ธ  ์ฝ”๋”ฉ ์ด๋ฆ„์œผ๋กœ ์—…๋ฐ์ดํŠธํ–ˆ๋‹ค.

ํ‘œ 2
Name Description Section
chunked ์ฒญํฌ๋“ค์˜ ์—ฐ์†์œผ๋กœ ์ „์†ก 7.1
compress UNIX "compress" ๋ฐ์ดํ„ฐ ํ˜•์‹ [Welch] 7.2
deflate "deflate" ์••์ถ• ๋ฐ์ดํ„ฐ ([RFC1951]) ๋ฅผ "zlib" ๋ฐ์ดํ„ฐ ํ˜•์‹([RFC1950]) ์•ˆ์— ๋‹ด์€ ๊ฒƒ 7.2
gzip GZIP ํŒŒ์ผ ํ˜•์‹ [RFC1952] 7.2
trailers (reserved) 12.3
x-compress ๋” ์ด์ƒ ๊ถŒ์žฅ๋˜์ง€ ์•Š์Œ (compress์˜ ๋ณ„์นญ) 7.2
x-gzip ๋” ์ด์ƒ ๊ถŒ์žฅ๋˜์ง€ ์•Š์Œ (gzip์˜ ๋ณ„์นญ) 7.2

12.4. ALPN ํ”„๋กœํ† ์ฝœ ID ๋“ฑ๋ก

IANA๋Š” "TLS Application-Layer Protocol Negotiation (ALPN) Protocol IDs" ๋ ˆ์ง€์ŠคํŠธ๋ฆฌ๋ฅผ https://www.iana.org/assignments/tls-extensiontype-values/์—์„œ ์•„๋ž˜ ๋“ฑ๋ก ์ •๋ณด๋กœ ์—…๋ฐ์ดํŠธํ–ˆ๋‹ค:

ํ‘œ 3
Protocol Identification Sequence Reference
HTTP/1.1 0x68 0x74 0x74 0x70 0x2f 0x31 0x2e 0x31 ("http/1.1") RFC 9112

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

13.1. ๊ทœ๋ฒ”์  ์ฐธ๊ณ ๋ฌธํ—Œ

[CACHING]
Fielding, R., Ed., Nottingham, M., Ed., and J. Reschke, Ed., โ€œHTTP Cachingโ€, STD 98, RFC 9111, DOI 10.17487/RFC9111, June 2022.
[HTTP]
Fielding, R., Ed., Nottingham, M., Ed., and J. Reschke, Ed., โ€œHTTP Semanticsโ€, STD 97, RFC 9110, DOI 10.17487/RFC9110, June 2022.
[RFC1950]
Deutsch, P. and J-L. Gailly, โ€œZLIB Compressed Data Format Specification version 3.3โ€, RFC 1950, DOI 10.17487/RFC1950, May 1996, <https://www.rfc-editor.org/info/rfc1950>.
[RFC1951]
Deutsch, P., โ€œDEFLATE Compressed Data Format Specification version 1.3โ€, RFC 1951, DOI 10.17487/RFC1951, May 1996, <https://www.rfc-editor.org/info/rfc1951>.
[RFC1952]
Deutsch, P., โ€œGZIP file format specification version 4.3โ€, RFC 1952, DOI 10.17487/RFC1952, May 1996, <https://www.rfc-editor.org/info/rfc1952>.
[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>.
[RFC5234]
Crocker, D., Ed. and P. Overell, โ€œAugmented BNF for Syntax Specifications: ABNFโ€, STD 68, RFC 5234, DOI 10.17487/RFC5234, January 2008, <https://www.rfc-editor.org/info/rfc5234>.
[RFC7405]
Kyzivat, P., โ€œCase-Sensitive String Support in ABNFโ€, RFC 7405, DOI 10.17487/RFC7405, December 2014, <https://www.rfc-editor.org/info/rfc7405>.
[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>.
[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>.
[URI]
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>.
[USASCII]
American National Standards Institute, โ€œCoded Character Set -- 7-bit American Standard Code for Information Interchangeโ€, ANSI X3.4, 1986.
[Welch]
Welch, T., โ€œA Technique for High-Performance Data Compressionโ€, IEEE Computer 17(6), DOI 10.1109/MC.1984.1659158, June 1984, <https://ieeexplore.ieee.org/document/1659158/>.

13.2. ์ฐธ์กฐ ๋ฌธํ—Œ(์ •๋ณด์„ฑ)

[HTTP/1.0]
Berners-Lee, T., Fielding, R., and H. Frystyk, โ€œHypertext Transfer Protocol -- HTTP/1.0โ€, RFC 1945, DOI 10.17487/RFC1945, May 1996, <https://www.rfc-editor.org/info/rfc1945>.
[Klein]
Klein, A., โ€œDivide and Conquer - HTTP Response Splitting, Web Cache Poisoning Attacks, and Related Topicsโ€, March 2004, <https://packetstormsecurity.com/papers/general/whitepaper_httpresponse.pdf>.
[Linhart]
Linhart, C., Klein, A., Heled, R., and S. Orrin, โ€œHTTP Request Smugglingโ€, June 2005, <https://www.cgisecurity.com/lib/HTTP-Request-Smuggling.pdf>.
[RFC2045]
Freed, N. and N. Borenstein, โ€œMultipurpose Internet Mail Extensions (MIME) Part One: Format of Internet Message Bodiesโ€, RFC 2045, DOI 10.17487/RFC2045, November 1996, <https://www.rfc-editor.org/info/rfc2045>.
[RFC2046]
Freed, N. and N. Borenstein, โ€œMultipurpose Internet Mail Extensions (MIME) Part Two: Media Typesโ€, RFC 2046, DOI 10.17487/RFC2046, November 1996, <https://www.rfc-editor.org/info/rfc2046>.
[RFC2049]
Freed, N. and N. Borenstein, โ€œMultipurpose Internet Mail Extensions (MIME) Part Five: Conformance Criteria and Examplesโ€, RFC 2049, DOI 10.17487/RFC2049, November 1996, <https://www.rfc-editor.org/info/rfc2049>.
[RFC2068]
Fielding, R., Gettys, J., Mogul, J., Frystyk, H., and T. Berners-Lee, โ€œHypertext Transfer Protocol -- HTTP/1.1โ€, RFC 2068, DOI 10.17487/RFC2068, January 1997, <https://www.rfc-editor.org/info/rfc2068>.
[RFC2557]
Palme, J., Hopmann, A., and N. Shelness, โ€œMIME Encapsulation of Aggregate Documents, such as HTML (MHTML)โ€, RFC 2557, DOI 10.17487/RFC2557, March 1999, <https://www.rfc-editor.org/info/rfc2557>.
[RFC5322]
Resnick, P., Ed., โ€œInternet Message Formatโ€, RFC 5322, DOI 10.17487/RFC5322, October 2008, <https://www.rfc-editor.org/info/rfc5322>.
[RFC7230]
Fielding, R., Ed. and J. Reschke, Ed., โ€œHypertext Transfer Protocol (HTTP/1.1): Message Syntax and Routingโ€, RFC 7230, DOI 10.17487/RFC7230, June 2014, <https://www.rfc-editor.org/info/rfc7230>.
[RFC8126]
Cotton, M., Leiba, B., and T. Narten, โ€œGuidelines for Writing an IANA Considerations Section in RFCsโ€, BCP 26, RFC 8126, DOI 10.17487/RFC8126, June 2017, <https://www.rfc-editor.org/info/rfc8126>.

๋ถ€๋ก A. ์ˆ˜์ง‘๋œ ABNF

์•„๋ž˜์— ์ˆ˜์ง‘๋œ ABNF์—์„œ๋Š” ๋ชฉ๋ก ๊ทœ์น™๋“ค์ด Section 5.6.1 of [HTTP]์— ๋”ฐ๋ผ ํ™•์žฅ๋˜์–ด ์žˆ๋‹ค.

BWS = <BWS, see [HTTP], Section 5.6.3>

HTTP-message = start-line CRLF *( field-line CRLF ) CRLF [
 message-body ]
HTTP-name = %x48.54.54.50 ; HTTP
HTTP-version = HTTP-name "/" DIGIT "." DIGIT

OWS = <OWS, see [HTTP], Section 5.6.3>

RWS = <RWS, see [HTTP], Section 5.6.3>

Transfer-Encoding = [ transfer-coding *( OWS "," OWS transfer-coding
 ) ]

absolute-URI = <absolute-URI, see [URI], Section 4.3>
absolute-form = absolute-URI
absolute-path = <absolute-path, see [HTTP], Section 4.1>
asterisk-form = "*"
authority = <authority, see [URI], Section 3.2>
authority-form = uri-host ":" port

chunk = chunk-size [ chunk-ext ] CRLF chunk-data CRLF
chunk-data = 1*OCTET
chunk-ext = *( BWS ";" BWS chunk-ext-name [ BWS "=" BWS chunk-ext-val
 ] )
chunk-ext-name = token
chunk-ext-val = token / quoted-string
chunk-size = 1*HEXDIG
chunked-body = *chunk last-chunk trailer-section CRLF

field-line = field-name ":" OWS field-value OWS
field-name = <field-name, see [HTTP], Section 5.1>
field-value = <field-value, see [HTTP], Section 5.5>

last-chunk = 1*"0" [ chunk-ext ] CRLF

message-body = *OCTET
method = token

obs-fold = OWS CRLF RWS
obs-text = <obs-text, see [HTTP], Section 5.6.4>
origin-form = absolute-path [ "?" query ]

port = <port, see [URI], Section 3.2.3>

query = <query, see [URI], Section 3.4>
quoted-string = <quoted-string, see [HTTP], Section 5.6.4>

reason-phrase = 1*( HTAB / SP / VCHAR / obs-text )
request-line = method SP request-target SP HTTP-version
request-target = origin-form / absolute-form / authority-form /
 asterisk-form

start-line = request-line / status-line
status-code = 3DIGIT
status-line = HTTP-version SP status-code SP [ reason-phrase ]

token = <token, see [HTTP], Section 5.6.2>
trailer-section = *( field-line CRLF )
transfer-coding = <transfer-coding, see [HTTP], Section 10.1.4>

uri-host = <host, see [URI], Section 3.2.2>

๋ถ€๋ก B. HTTP์™€ MIME์˜ ์ฐจ์ด

HTTP/1.1์€ Internet Message Format [RFC5322] ๋ฐ Multipurpose Internet Mail Extensions (MIME) [RFC2045]์—์„œ ์ •์˜๋œ ๋งŽ์€ ๊ตฌ๋ฌธ ์š”์†Œ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋ฉ”์‹œ์ง€ ๋ณธ๋ฌธ์„ ๋‹ค์–‘ํ•œ ํ‘œํ˜„๊ณผ ํ™•์žฅ ๊ฐ€๋Šฅํ•œ ํ•„๋“œ์™€ ํ•จ๊ป˜ ์ „์†กํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•œ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ์ด๋Ÿฌํ•œ ๊ตฌ์„ฑ ์š”์†Œ๋“ค ์ค‘ ์ผ๋ถ€๋Š” ๋Œ€ํ™”ํ˜• ํ†ต์‹ ์˜ ์š”๊ตฌ์— ๋งž๊ฒŒ ์žฌํ•ด์„๋˜์–ด MIME ๊ตฌ์„ฑ ์š”์†Œ๊ฐ€ HTTP ๋‚ด์—์„œ ์‚ฌ์šฉ๋˜๋Š” ๋ฐฉ์‹์— ์ฐจ์ด๋ฅผ ์ดˆ๋ž˜ํ–ˆ๋‹ค. ์ด๋Ÿฌํ•œ ์ฐจ์ด๋Š” ์ด์ง„ ์—ฐ๊ฒฐ์—์„œ์˜ ์„ฑ๋Šฅ ์ตœ์ ํ™”, ์ƒˆ๋กœ์šด ๋ฏธ๋””์–ด ํƒ€์ž… ์‚ฌ์šฉ์˜ ์ž์œ ๋„ ์ฆ๊ฐ€, ๋‚ ์งœ ๋น„๊ต์˜ ์šฉ์ด์„ฑ ๋ฐ ์ผ๋ฐ˜์ ์ธ ๊ตฌํ˜„์˜ ์ˆ˜์šฉ์„ ์œ„ํ•ด ์‹ ์ค‘ํžˆ ์„ ํƒ๋˜์—ˆ๋‹ค.

์ด ๋ถ€๋ก์€ HTTP๊ฐ€ MIME๊ณผ ๋‹ค๋ฅธ ๊ตฌ์ฒด์ ์ธ ์˜์—ญ์„ ์„ค๋ช…ํ•œ๋‹ค. ์—„๊ฒฉํ•œ MIME ํ™˜๊ฒฝ๊ณผ์˜ ํ”„๋ก์‹œ ๋ฐ ๊ฒŒ์ดํŠธ์›จ์ด๋Š” ์ด๋Ÿฌํ•œ ์ฐจ์ด๋ฅผ ์ธ์‹ํ•˜๊ณ  ํ•„์š”์‹œ ์ ์ ˆํ•œ ๋ณ€ํ™˜์„ ์ œ๊ณตํ•ด์•ผ ํ•œ๋‹ค.

B.1. MIME-Version

HTTP๋Š” MIME ์ค€์ˆ˜ ํ”„๋กœํ† ์ฝœ์€ ์•„๋‹ˆ์ง€๋งŒ, ๋ฉ”์‹œ์ง€๋Š” ์‚ฌ์šฉ๋œ MIME ํ”„๋กœํ† ์ฝœ์˜ ๋ฒ„์ „์„ ๋‚˜ํƒ€๋‚ด๊ธฐ ์œ„ํ•ด ๋‹จ์ผ MIME-Version ํ—ค๋” ํ•„๋“œ๋ฅผ ํฌํ•จํ•  ์ˆ˜ ์žˆ๋‹ค. MIME-Version ํ—ค๋” ํ•„๋“œ์˜ ์‚ฌ์šฉ์€ ๋ฉ”์‹œ์ง€๊ฐ€ MIME ํ”„๋กœํ† ์ฝœ๊ณผ ์™„์ „ํ•˜๊ฒŒ ์ผ์น˜ํ•จ์„ ๋‚˜ํƒ€๋‚ธ๋‹ค([RFC2045] ์ฐธ์กฐ). ์†ก์‹ ์ž๋Š” HTTP ๋ฉ”์‹œ์ง€๋ฅผ ์—„๊ฒฉํ•œ MIME ํ™˜๊ฒฝ์œผ๋กœ ๋‚ด๋ณด๋‚ผ ๋•Œ ๊ฐ€๋Šฅํ•œ ๊ฒฝ์šฐ ์™„์ „ํ•œ ์ค€์ˆ˜๋ฅผ ๋ณด์žฅํ•  ์ฑ…์ž„์ด ์žˆ๋‹ค.

B.2. ์ •๊ทœํ˜•์œผ๋กœ์˜ ๋ณ€ํ™˜

MIME์€ Internet ๋ฉ”์ผ ๋ณธ๋ฌธ ๋ถ€๋ถ„์„ ์ „์†ก ์ „์— ์ •๊ทœํ˜•์œผ๋กœ ๋ณ€ํ™˜ํ•  ๊ฒƒ์„ ์š”๊ตฌํ•œ๋‹ค(์ž์„ธํ•œ ๋‚ด์šฉ์€ Section 4 of [RFC2049] ์ฐธ์กฐ). ๋˜ํ•œ "text" ํƒ€์ž…์˜ ์ฝ˜ํ…์ธ ๋Š” ์ค„ ๋ฐ”๊ฟˆ์„ CRLF๋กœ ํ‘œํ˜„ํ•ด์•ผ ํ•˜๋ฉฐ, ์ค„ ๋ฐ”๊ฟˆ ์ด์™ธ์˜ ๊ณณ์—์„œ CR ๋˜๋Š” LF๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์„ ๊ธˆ์ง€ํ•œ๋‹ค([RFC2046]). ๋ฐ˜๋ฉด HTTP๋Š” ์ฝ˜ํ…์ธ  ๋‚ด์—์„œ CRLF, ๋‹จ๋… CR ๋˜๋Š” ๋‹จ๋… LF ์ค‘ ์–ด๋А ๊ฒƒ์„ ์ค„ ๋ฐ”๊ฟˆ์œผ๋กœ ์‚ฌ์šฉํ• ์ง€์— ๋Œ€ํ•ด์„œ๋Š” ์ œํ•œํ•˜์ง€ ์•Š๋Š”๋‹ค.

HTTP์—์„œ ์—„๊ฒฉํ•œ MIME ํ™˜๊ฒฝ์œผ๋กœ์˜ ํ”„๋ก์‹œ๋‚˜ ๊ฒŒ์ดํŠธ์›จ์ด๋Š” ํ…์ŠคํŠธ ๋ฏธ๋””์–ด ํƒ€์ž… ๋‚ด์˜ ๋ชจ๋“  ์ค„ ๋ฐ”๊ฟˆ์„ RFC 2049์˜ ์ •๊ทœํ˜•์ธ CRLF๋กœ ๋ณ€ํ™˜ํ•ด์•ผ ํ•œ๋‹ค. ๋‹ค๋งŒ ์ด๋Š” Content-Encoding์˜ ์กด์žฌ๋‚˜ ์ผ๋ถ€ ๋ฌธ์ž์…‹์ด CR๊ณผ LF๋ฅผ ๊ฐ๊ฐ ์˜ฅํ…Ÿ 13๊ณผ 10์œผ๋กœ ์‚ฌ์šฉํ•˜์ง€ ์•Š๋Š”๋‹ค๋Š” ์‚ฌ์‹ค๋กœ ์ธํ•ด ๋ณต์žกํ•ด์งˆ ์ˆ˜ ์žˆ๋‹ค.

๋ณ€ํ™˜์€ ์›๋ณธ ์ฝ˜ํ…์ธ ์— ์ ์šฉ๋œ ์–ด๋–ค ์•”ํ˜ธํ™” ์ฒดํฌ์„ฌ๋„ ์†์ƒ์‹œํ‚ฌ ์ˆ˜ ์žˆ์œผ๋ฏ€๋กœ, ์›๋ณธ ์ฝ˜ํ…์ธ ๊ฐ€ ์ด๋ฏธ ์ •๊ทœํ˜•์ด๋ผ๋ฉด ์ •๊ทœํ˜• ์‚ฌ์šฉ์ด ๊ถŒ์žฅ๋œ๋‹ค.

B.3. ๋‚ ์งœ ํ˜•์‹ ๋ณ€ํ™˜

HTTP/1.1์€ ๋‚ ์งœ ๋น„๊ต๋ฅผ ๋‹จ์ˆœํ™”ํ•˜๊ธฐ ์œ„ํ•ด ์ œํ•œ๋œ ๋‚ ์งœ ํ˜•์‹ ์ง‘ํ•ฉ(Section 5.6.7 of [HTTP])์„ ์‚ฌ์šฉํ•œ๋‹ค. ๋‹ค๋ฅธ ํ”„๋กœํ† ์ฝœ๋กœ๋ถ€ํ„ฐ์˜ ํ”„๋ก์‹œ๋‚˜ ๊ฒŒ์ดํŠธ์›จ์ด๋Š” ๋ฉ”์‹œ์ง€์— ์กด์žฌํ•˜๋Š” Date ํ—ค๋” ํ•„๋“œ๊ฐ€ HTTP/1.1 ํ˜•์‹ ์ค‘ ํ•˜๋‚˜์— ์ผ์น˜ํ•˜๋„๋ก ๋ณด์žฅํ•˜๊ณ  ํ•„์š”์‹œ ๋‚ ์งœ๋ฅผ ์žฌ์ž‘์„ฑํ•ด์•ผ ํ•œ๋‹ค.

B.4. Content-Encoding ๋ณ€ํ™˜

MIME์—๋Š” HTTP์˜ Content-Encoding ํ—ค๋” ํ•„๋“œ์™€ ๋™๋“ฑํ•œ ๊ฐœ๋…์ด ์—†๋‹ค. ์ด๋Š” ๋ฏธ๋””์–ด ํƒ€์ž…์— ๋Œ€ํ•œ ์ˆ˜์‹์–ด๋กœ ์ž‘์šฉํ•˜๋ฏ€๋กœ, HTTP์—์„œ MIME ์ค€์ˆ˜ ํ”„๋กœํ† ์ฝœ๋กœ์˜ ํ”„๋ก์‹œ ๋ฐ ๊ฒŒ์ดํŠธ์›จ์ด๋Š” Content-Type ํ—ค๋” ํ•„๋“œ์˜ ๊ฐ’์„ ๋ณ€๊ฒฝํ•˜๊ฑฐ๋‚˜ ์ „์†ก ์ „์— ํ‘œํ˜„์„ ๋””์ฝ”๋“œํ•ด์•ผ ํ•œ๋‹ค. (์ผ๋ถ€ ์‹คํ—˜์  ์‘์šฉ์—์„œ๋Š” ";conversions=<content-coding>" ๊ฐ™์€ ๋ฏธ๋””์–ด ํƒ€์ž… ๋งค๊ฐœ๋ณ€์ˆ˜๋ฅผ ์‚ฌ์šฉํ–ˆ์œผ๋‚˜ ์ด๋Š” MIME ํ‘œ์ค€์˜ ์ผ๋ถ€๊ฐ€ ์•„๋‹ˆ๋‹ค.)

B.5. Content-Transfer-Encoding ๋ณ€ํ™˜

HTTP๋Š” MIME์˜ Content-Transfer-Encoding ํ•„๋“œ๋ฅผ ์‚ฌ์šฉํ•˜์ง€ ์•Š๋Š”๋‹ค. MIME ์ค€์ˆ˜ ํ”„๋กœํ† ์ฝœ์—์„œ HTTP๋กœ์˜ ํ”„๋ก์‹œ ๋ฐ ๊ฒŒ์ดํŠธ์›จ์ด๋Š” ์‘๋‹ต ๋ฉ”์‹œ์ง€๋ฅผ HTTP ํด๋ผ์ด์–ธํŠธ์—๊ฒŒ ์ „๋‹ฌํ•˜๊ธฐ ์ „์— ๋ชจ๋“  Content-Transfer-Encoding์„ ์ œ๊ฑฐํ•ด์•ผ ํ•œ๋‹ค.

HTTP์—์„œ MIME ์ค€์ˆ˜ ํ”„๋กœํ† ์ฝœ๋กœ์˜ ํ”„๋ก์‹œ ๋ฐ ๊ฒŒ์ดํŠธ์›จ์ด๋Š” ๋ชฉ์ ์ง€ ํ”„๋กœํ† ์ฝœ์˜ ์ œํ•œ์— ๋”ฐ๋ฅธ "์•ˆ์ „ํ•œ ์ „์†ก"์„ ๋ณด์žฅํ•˜๊ธฐ ์œ„ํ•ด ๋ฉ”์‹œ์ง€๊ฐ€ ์˜ฌ๋ฐ”๋ฅธ ํ˜•์‹๊ณผ ์ธ์ฝ”๋”ฉ์œผ๋กœ ๋ณ€ํ™˜๋˜๋„๋ก ์ฑ…์ž„์„ ์ ธ์•ผ ํ•œ๋‹ค. ์ด๋Ÿฌํ•œ ๋ณ€ํ™˜์ด ๋ชฉ์ ์ง€ ํ”„๋กœํ† ์ฝœ์—์„œ์˜ ์•ˆ์ „ ์ „์†ก ๊ฐ€๋Šฅ์„ฑ์„ ๋†’์ธ๋‹ค๋ฉด ์ ์ ˆํ•œ Content-Transfer-Encoding์„ ์ ์šฉํ•˜๊ณ  ๋ผ๋ฒจ๋งํ•ด์•ผ ํ•œ๋‹ค.

B.6. MHTML ๋ฐ ํ–‰ ๊ธธ์ด ์ œํ•œ

MHTML([RFC2557]) ๊ตฌํ˜„๊ณผ ์ฝ”๋“œ๋ฅผ ๊ณต์œ ํ•˜๋Š” HTTP ๊ตฌํ˜„์ฒด๋Š” MIME์˜ ํ–‰ ๊ธธ์ด ์ œํ•œ์„ ์ธ์ง€ํ•ด์•ผ ํ•œ๋‹ค. HTTP๋Š” ์ด๋Ÿฌํ•œ ์ œํ•œ์ด ์—†์œผ๋ฏ€๋กœ ๊ธด ํ–‰์„ ์ ‘์ง€ ์•Š๋Š”๋‹ค. HTTP๋กœ ์ „์†ก๋˜๋Š” MHTML ๋ฉ”์‹œ์ง€๋Š” MHTML์˜ ๋ชจ๋“  ๊ด€์Šต(ํ–‰ ๊ธธ์ด ์ œํ•œ ๋ฐ ์ ‘๊ธฐ, ์ •๊ทœํ™” ๋“ฑ)์„ ์ค€์ˆ˜ํ•ด์•ผ ํ•œ๋‹ค. HTTP๋Š” ๋ฉ”์‹œ์ง€ ๋ณธ๋ฌธ์„ ์ˆ˜์ • ์—†์ด ์ „์†กํ•˜๋ฉฐ, "multipart/byteranges" ํƒ€์ž…์„ ์ œ์™ธํ•˜๊ณ ๋Š” ์ฝ˜ํ…์ธ ๋‚˜ ๊ทธ ์•ˆ์— ํฌํ•จ๋œ MIME ํ—ค๋” ํ–‰์„ ํ•ด์„ํ•˜์ง€ ์•Š๋Š”๋‹ค.

๋ถ€๋ก C. ์ด์ „ RFC์™€์˜ ๋ณ€๊ฒฝ ์‚ฌํ•ญ

C.1. HTTP/0.9๋กœ๋ถ€ํ„ฐ์˜ ๋ณ€๊ฒฝ ์‚ฌํ•ญ

HTTP/0.9๋Š” ์š”์ฒญ์— ํ—ค๋” ํ•„๋“œ๋ฅผ ์ง€์›ํ•˜์ง€ ์•Š์•˜๊ธฐ ๋•Œ๋ฌธ์— ์ด๋ฆ„ ๊ธฐ๋ฐ˜ ๊ฐ€์ƒ ํ˜ธ์ŠคํŠธ(์š”์ฒญ์˜ Host ํ—ค๋” ํ•„๋“œ ๊ฒ€์‚ฌ๋กœ ๋ฆฌ์†Œ์Šค ์„ ํƒ)๋ฅผ ์ง€์›ํ•  ๋ฉ”์ปค๋‹ˆ์ฆ˜์ด ์—†๋‹ค. ์ด๋ฆ„ ๊ธฐ๋ฐ˜ ๊ฐ€์ƒ ํ˜ธ์ŠคํŠธ๋ฅผ ๊ตฌํ˜„ํ•˜๋Š” ์„œ๋ฒ„๋Š” HTTP/0.9 ์ง€์›์„ ๋น„ํ™œ์„ฑํ™”ํ•ด์•ผ ํ•œ๋‹ค. HTTP/0.9๋กœ ๋ณด์ด๋Š” ๋Œ€๋ถ€๋ถ„์˜ ์š”์ฒญ์€ ์‹ค์ œ๋กœ๋Š” ํด๋ผ์ด์–ธํŠธ๊ฐ€ request-target์„ ์˜ฌ๋ฐ”๋ฅด๊ฒŒ ์ธ์ฝ”๋”ฉํ•˜์ง€ ๋ชปํ•ด ์ž˜๋ชป ๊ตฌ์„ฑ๋œ HTTP/1.x ์š”์ฒญ์ด๋‹ค.

C.2. HTTP/1.0๋กœ๋ถ€ํ„ฐ์˜ ๋ณ€๊ฒฝ ์‚ฌํ•ญ

C.2.1. ๋‹ค์ค‘ ํ˜ธ์ŠคํŒ… ์›น ์„œ๋ฒ„

ํด๋ผ์ด์–ธํŠธ์™€ ์„œ๋ฒ„๊ฐ€ Host ํ—ค๋” ํ•„๋“œ๋ฅผ ์ง€์›ํ•˜๊ณ (๋ˆ„๋ฝ ์‹œ ์˜ค๋ฅ˜ ๋ณด๊ณ ), ์ ˆ๋Œ€ URI๋ฅผ ํ—ˆ์šฉํ•˜๋„๋ก ํ•œ ์š”๊ตฌ์‚ฌํ•ญ(Section 3.2)์€ HTTP/1.1์—์„œ ๊ฐ€์žฅ ์ค‘์š”ํ•œ ๋ณ€๊ฒฝ ์‚ฌํ•ญ ์ค‘ ํ•˜๋‚˜์ด๋‹ค.

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

C.2.2. Keep-Alive ์—ฐ๊ฒฐ

HTTP/1.0์—์„œ๋Š” ๊ฐ ์—ฐ๊ฒฐ์ด ์š”์ฒญ ์ „์— ํด๋ผ์ด์–ธํŠธ์— ์˜ํ•ด ์„ค์ •๋˜๊ณ  ์‘๋‹ต ํ›„ ์„œ๋ฒ„์— ์˜ํ•ด ๋‹ซํ˜”๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ์ผ๋ถ€ ๊ตฌํ˜„์ฒด๋Š” RFC 2068์˜ Section 19.7.1์— ์„ค๋ช…๋œ ๋ช…์‹œ์ ์œผ๋กœ ํ˜‘์ƒ๋œ("Keep-Alive") ์ง€์† ์—ฐ๊ฒฐ์„ ๊ตฌํ˜„ํ•˜๊ธฐ๋„ ํ–ˆ๋‹ค.

์ผ๋ถ€ ํด๋ผ์ด์–ธํŠธ์™€ ์„œ๋ฒ„๋Š” ์ด๋Ÿฌํ•œ ์ด์ „์˜ ์ง€์† ์—ฐ๊ฒฐ ์ ‘๊ทผ ๋ฐฉ์‹๊ณผ ํ˜ธํ™˜๋˜๊ธฐ๋ฅผ ์›ํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ, "Connection: keep-alive" ์š”์ฒญ ํ—ค๋” ํ•„๋“œ๋กœ ์ด๋ฅผ ๋ช…์‹œ์ ์œผ๋กœ ํ˜‘์ƒํ•˜๋ ค๊ณ  ํ•œ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ์ผ๋ถ€ ์‹คํ—˜์  HTTP/1.0 ์ง€์† ์—ฐ๊ฒฐ ๊ตฌํ˜„์€ ๊ฒฐํ•จ์ด ์žˆ์–ด, ์˜ˆ๋ฅผ ๋“ค์–ด HTTP/1.0 ํ”„๋ก์‹œ๊ฐ€ Connection์„ ์ดํ•ดํ•˜์ง€ ๋ชปํ•˜๋ฉด ํ•ด๋‹น ํ—ค๋”๋ฅผ ์ž˜๋ชป ์ „๋‹ฌํ•˜์—ฌ ์—ฐ๊ฒฐ์ด ๋ฉˆ์ถ”๊ฒŒ ๋  ์ˆ˜ ์žˆ๋‹ค.

์ด๋ฅผ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•ด Proxy-Connection ํ—ค๋” ํ•„๋“œ๊ฐ€ ๋„์ž…๋˜๊ธฐ๋„ ํ–ˆ์œผ๋‚˜, ํ”„๋ก์‹œ๊ฐ€ ์—ฌ๋Ÿฌ ๊ณ„์ธต์œผ๋กœ ๋ฐฐํฌ๋˜๋Š” ๊ฒฝ์šฐ ๋™์ผํ•œ ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•˜์—ฌ ์‹ค์šฉ์ ์ด์ง€ ์•Š์•˜๋‹ค.

๊ฒฐ๊ณผ์ ์œผ๋กœ ํด๋ผ์ด์–ธํŠธ๋Š” ์–ด๋–ค ์š”์ฒญ์—์„œ๋„ Proxy-Connection ํ—ค๋” ํ•„๋“œ๋ฅผ ๋ณด๋‚ด์ง€ ์•Š๋Š” ๊ฒƒ์ด ๊ถŒ์žฅ๋œ๋‹ค.

๋˜ํ•œ ํด๋ผ์ด์–ธํŠธ๋Š” ์š”์ฒญ์—์„œ "Connection: keep-alive" ์‚ฌ์šฉ์„ ์‹ ์ค‘ํžˆ ๊ณ ๋ คํ•ด์•ผ ํ•œ๋‹ค; ์ด๋Š” HTTP/1.0 ์„œ๋ฒ„์™€ ์ง€์† ์—ฐ๊ฒฐ์„ ํ™œ์„ฑํ™”ํ•  ์ˆ˜ ์žˆ์ง€๋งŒ, ์ด๋Ÿฌํ•œ ๊ธฐ๋Šฅ์„ ์‚ฌ์šฉํ•˜๋Š” ํด๋ผ์ด์–ธํŠธ๋Š” "hung" ์š”์ฒญ(ํด๋ผ์ด์–ธํŠธ๊ฐ€ ํ—ค๋” ํ•„๋“œ ์ „์†ก์„ ์ค‘๋‹จํ•ด์•ผ ํ•จ์„ ๋‚˜ํƒ€๋ƒ„)์„ ๋ชจ๋‹ˆํ„ฐ๋งํ•ด์•ผ ํ•˜๋ฉฐ ํ”„๋ก์‹œ๊ฐ€ ์‚ฌ์šฉ๋  ๋•Œ๋Š” ์ด ๋ฉ”์ปค๋‹ˆ์ฆ˜์„ ์‚ฌ์šฉํ•ด์„œ๋Š” ์•ˆ ๋œ๋‹ค.

C.2.3. Transfer-Encoding ๋„์ž…

HTTP/1.1์€ Transfer-Encoding ํ—ค๋” ํ•„๋“œ๋ฅผ ๋„์ž…ํ–ˆ๋‹ค(Section 6.1). ์ „์†ก ์ฝ”๋”ฉ์€ MIME ํ˜ธํ™˜ ํ”„๋กœํ† ์ฝœ์„ ํ†ตํ•ด HTTP ๋ฉ”์‹œ์ง€๋ฅผ ์ „๋‹ฌํ•˜๊ธฐ ์ „์— ๋””์ฝ”๋”ฉ๋˜์–ด์•ผ ํ•œ๋‹ค.

C.3. RFC 7230์œผ๋กœ๋ถ€ํ„ฐ์˜ ๋ณ€๊ฒฝ ์‚ฌํ•ญ

HTTP์˜ ์„ค๊ณ„ ๋ชฉํ‘œ, ์—ญ์‚ฌ, ์•„ํ‚คํ…์ฒ˜, ์ ํ•ฉ์„ฑ ๊ธฐ์ค€, ํ”„๋กœํ† ์ฝœ ๋ฒ„์ „ ๊ด€๋ฆฌ, URI, ๋ฉ”์‹œ์ง€ ๋ผ์šฐํŒ… ๋ฐ ํ—ค๋” ํ•„๋“œ์— ๊ด€ํ•œ ๋Œ€๋ถ€๋ถ„์˜ ์„น์…˜์ด [HTTP]๋กœ ์ด๋™๋˜์—ˆ๋‹ค. ์ด ๋ฌธ์„œ๋Š” HTTP/1.1์— ํŠน์ •ํ•œ ๋ฉ”์‹œ์ง€ ๊ตฌ๋ฌธ๊ณผ ์—ฐ๊ฒฐ ๊ด€๋ฆฌ ์š”๊ตฌ์‚ฌํ•ญ์œผ๋กœ ์ถ•์†Œ๋˜์—ˆ๋‹ค.

์ฝ˜ํ…์ธ  ์™ธ๋ถ€์—์„œ์˜ ๋‹จ๋… CR์€ ๊ธˆ์ง€๋˜์—ˆ๋‹ค. (Section 2.2)

authority-form์˜ ABNF ์ •์˜๋Š” ํฌํŠธ๊ฐ€ ์„ ํƒ์ ์ธ URI์˜ ๋ณด๋‹ค ์ผ๋ฐ˜์ ์ธ authority ๊ตฌ์„ฑ ์š”์†Œ์—์„œ CONNECT์— ์š”๊ตฌ๋˜๋Š” host:port ํ˜•์‹์œผ๋กœ ๋ณ€๊ฒฝ๋˜์—ˆ๋‹ค. (Section 3.2.3)

์ˆ˜์‹ ์ž๋Š” ๋ชจํ˜ธํ•œ ๋ฉ”์‹œ์ง€ ํ”„๋ ˆ์ด๋ฐ์„ ์ฒ˜๋ฆฌํ•  ๋•Œ ์Šค๋จธ๊ธ€๋ง/๋ถ„ํ•  ๊ณต๊ฒฉ์„ ํ”ผํ•ด์•ผ ํ•œ๋‹ค๋Š” ์š”๊ตฌ์‚ฌํ•ญ์ด ์ถ”๊ฐ€๋˜์—ˆ๋‹ค. (Section 6.1)

์ฒญํฌ ํ™•์žฅ(ABNF)์—์„œ ";" ๋ฐ "=" ์ฃผ์œ„์˜ (๋‚˜์œ) ๊ณต๋ฐฑ์ด ๋‹ค์‹œ ๋„์ž…๋˜์—ˆ๋‹ค. ๊ณต๋ฐฑ์€ RFC7230์—์„œ ์ œ๊ฑฐ๋˜์—ˆ์œผ๋‚˜ ๊ทธ ๋ณ€๊ฒฝ์ด ๊ธฐ์กด ๊ตฌํ˜„์„ ๊นจ๋œจ๋ฆฌ๋Š” ๊ฒƒ์œผ๋กœ ๋ฐํ˜€์กŒ๋‹ค. (Section 7.1.1)

ํŠธ๋ ˆ์ผ๋Ÿฌ ํ•„๋“œ์˜ ์˜๋ฏธ๋Š” ์ด์ œ ์ฒญํฌ ์ „์†ก ์ฝ”๋”ฉ์˜ ์„ธ๋ถ€ ์‚ฌํ•ญ์„ ์ดˆ์›”ํ•œ๋‹ค. ์ฒญํฌ ๋””์ฝ”๋“œ ์•Œ๊ณ ๋ฆฌ์ฆ˜(Section 7.1.3)์€ ํŠธ๋ ˆ์ผ๋Ÿฌ ํ•„๋“œ๋ฅผ ํ—ค๋” ์„น์…˜๊ณผ ๋ถ„๋ฆฌํ•˜์—ฌ ์ €์žฅ/์ „๋‹ฌํ•˜๋„๋ก ๊ถŒ์žฅํ•˜๊ณ , ์ˆ˜์‹ ์ž๊ฐ€ ํ•ด๋‹น ํ•„๋“œ ์ •์˜๊ฐ€ ๋ณ‘ํ•ฉ์„ ํ—ˆ์šฉํ•˜๊ณ  ๋ณ‘ํ•ฉ ๋ฐฉ๋ฒ•์„ ์ •์˜ํ•˜๋Š” ๊ฒฝ์šฐ์—๋งŒ ํ—ค๋” ์„น์…˜์œผ๋กœ ๋ณ‘ํ•ฉ์„ ํ—ˆ์šฉํ•˜๋ฉฐ, ๊ทธ๋ ‡์ง€ ์•Š์œผ๋ฉด ํŠธ๋ ˆ์ผ๋Ÿฌ ํ•„๋“œ๋ฅผ ๋ณ‘ํ•ฉํ•˜์ง€ ๋ง๊ณ  ํ๊ธฐํ•˜๋„๋ก ์—…๋ฐ์ดํŠธ๋˜์—ˆ๋‹ค. ํŠธ๋ ˆ์ผ๋Ÿฌ ๋ถ€๋ถ„์€ ์ด์ œ ํ—ค๋” ์„น์…˜๊ณผ ๋” ์ผ๊ด€๋˜๊ณ  ๋ณธ๋ฌธ ๋ถ€๋ถ„๊ณผ ๋” ๊ตฌ๋ถ„๋˜๋„๋ก ํŠธ๋ ˆ์ผ๋Ÿฌ ์„น์…˜์ด๋ผ๊ณ  ๋ถˆ๋ฆฐ๋‹ค. (Section 7.1.2)

TE ํ—ค๋” ํ•„๋“œ์—์„œ ์ˆœ์œ„๋กœ ์‚ฌ์šฉ๋˜๋Š” "q"์˜ ์‚ฌ์šฉ๊ณผ ์ถฉ๋Œ์„ ํ”ผํ•˜๊ธฐ ์œ„ํ•ด "q"๋ผ๋Š” ์ „์†ก ์ฝ”๋”ฉ ๋งค๊ฐœ๋ณ€์ˆ˜๋Š” ํ—ˆ์šฉ๋˜์ง€ ์•Š๋Š”๋‹ค. (Section 7.3)

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

Appendix "Acknowledgements" of [HTTP]๋ฅผ ๋ณด๋ผ. ์ด ๋‚ด์šฉ์€ ์ด ๋ฌธ์„œ์—๋„ ์ ์šฉ๋œ๋‹ค.

์ƒ‰์ธ

A C D F G H K L M O R T U W X

์ €์ž ์ฃผ์†Œ

Roy T. Fielding (editor)
Adobe
345 Park Ave
San Jose, CA 95110
United States of America
์ด๋ฉ”์ผ: fielding@gbiv.com
URI: https://roy.gbiv.com/
Mark Nottingham (editor)
Fastly
Prahran
Australia
์ด๋ฉ”์ผ: mnot@mnot.net
URI: https://www.mnot.net/
Julian Reschke (editor)
greenbytes GmbH
Hafenweg 16
48155 Mรผnster
Germany
์ด๋ฉ”์ผ: julian.reschke@greenbytes.de
URI: https://greenbytes.de/tech/webdav/