| ์ธํฐ๋ท ์์ง๋์ด๋ง ํ์คํฌ ํฌ์ค (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. ์๊ฐ
- 2. ๋ฉ์์ง
- 3. ์์ฒญ ํ
- 4. ์ํ ํ
- 5. ํ๋ ๊ตฌ๋ฌธ
- 6. ๋ฉ์์ง ๋ณธ๋ฌธ
- 7. ์ ์ก ์ฝ๋ฉ
- 8. ๋ถ์์ ํ ๋ฉ์์ง ์ฒ๋ฆฌ
- 9. ์ฐ๊ฒฐ ๊ด๋ฆฌ
- 10. ๋ฉ์์ง๋ฅผ ๋ฐ์ดํฐ๋ก ํฌํจ
- 11. ๋ณด์ ๊ณ ๋ ค์ฌํญ
- 12. IANA ๊ณ ๋ ค์ฌํญ
- 13. ์ฐธ๊ณ ๋ฌธํ
- Appendix A. ์์ง๋ ABNF
- Appendix B. HTTP์ MIME์ ์ฐจ์ด
- Appendix C. ์ด์ RFC์์ ๋ณ๊ฒฝ ์ฌํญ
- ๊ฐ์ฌ์ ๊ธ
- ์์ธ
- ์ ์ ์ฃผ์
1. ์๊ฐ
ํ์ดํผํ ์คํธ ์ ์ก ํ๋กํ ์ฝ(HTTP)์ ๋คํธ์ํฌ ๊ธฐ๋ฐ ํ์ดํผํ ์คํธ ์ ๋ณด ์์คํ ๊ณผ์ ์ ์ฐํ ์ํธ์์ฉ์ ์ํด ํ์ฅ ๊ฐ๋ฅํ ์๋ฏธ ์ฒด๊ณ์ ์๊ธฐ ์ค๋ช ์ ์ธ ๋ฉ์์ง๋ฅผ ์ฌ์ฉํ๋ ๋ฌด์ํ ์ ํ๋ฆฌ์ผ์ด์ ๊ณ์ธต ์์ฒญ/์๋ต ํ๋กํ ์ฝ์ด๋ค. HTTP/1.1์ ๋ค์์ ์ํด ์ ์๋๋ค:
์ด ๋ฌธ์๋ HTTP ์๋ฏธ๊ฐ HTTP/1.1 ๋ฉ์์ง ๊ตฌ๋ฌธ, ํ๋ ์ด๋ฐ ๋ฐ ์ฐ๊ฒฐ ๊ด๋ฆฌ ๋ฉ์ปค๋์ฆ์ ์ฌ์ฉํ์ฌ ์ด๋ป๊ฒ ์ ๋ฌ๋๋์ง๋ฅผ ๋ช ์ํ๋ค. ๋ชฉํ๋ HTTP/1.1 ๋ฉ์์ง ํ์์ ๋ฉ์์ง ์ ๋ฌ ์ค๊ณ์์ ์๊ตฌ์ฌํญ ์ ์ฒด ์งํฉ์ ์ ์ํ๋ ๊ฒ์ด๋ค.
์ด ๋ฌธ์๋ HTTP/1.1 ๋ฉ์์ง ๋ฐ ์ฐ๊ฒฐ ๊ด๋ฆฌ์ ๊ด๋ จ๋ RFC 7230์ ํด๋น ๋ถ๋ถ์ ํ๊ธฐํ๋ฉฐ, ๊ทธ ๋ณ๊ฒฝ ์ฌํญ์ ๋ถ๋ก C.3์ ์์ฝ๋์ด ์๋ค. RFC 7230์ ๋ค๋ฅธ ๋ถ๋ถ๋ค์ "HTTP Semantics" [HTTP]์ ์ํด ํ๊ธฐ๋๋ค.
1.1. ์๊ตฌ์ฌํญ ํ๊ธฐ
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๊ฐ ์ด์์ ํค๋ ํ๋ ํ(ํต์นญํ์ฌ "ํค๋" ๋๋ "ํค๋ ์น์ "), ํค๋ ์น์ ์ ๋์ ๋ํ๋ด๋ ๋น ์ค, ๊ทธ๋ฆฌ๊ณ ์ ํ์ ์ธ ๋ฉ์์ง ๋ณธ๋ฌธ.
HTTP-message = start-line CRLF *( field-line CRLF ) CRLF [ message-body ]
๋ฉ์์ง๋ ํด๋ผ์ด์ธํธ์์ ์๋ฒ๋ก์ ์์ฒญ์ด๊ฑฐ๋ ์๋ฒ์์ ํด๋ผ์ด์ธํธ๋ก์ ์๋ต์ผ ์ ์๋ค. ๋ฌธ๋ฒ์ ์ผ๋ก ๋ ์ข ๋ฅ์ ๋ฉ์์ง๋ ์ค์ง 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 ํ ํฐ์ ๋์ ๋ฆฌ์์ค์ ๋ํด ์ํํ ์์ฒญ ๋ฉ์๋๋ฅผ ๋ํ๋ธ๋ค. ์์ฒญ ๋ฉ์๋๋ ๋์๋ฌธ์๋ฅผ ๊ตฌ๋ถํ๋ค.
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์ด๋ค.
origin-form = absolute-path [ "?" query ]
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.4. asterisk-form
request-target์ asterisk-form์ ์๋ฒ ์ ์ฒด์ ๋ํ OPTIONS ์์ฒญ(Section 9.3.7 of [HTTP])์๋ง ์ฌ์ฉ๋๋ค.
asterisk-form = "*"
ํด๋ผ์ด์ธํธ๊ฐ ์๋ฒ ์ ์ฒด์ ๋ํ 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์๋ฆฌ ์ ์ ์ฝ๋์ด๋ค. ์์ ์๋ ๊ทธ ์ํ ์ฝ๋๊ฐ ์ธ์๋๋ ๊ฒฝ์ฐ ํด๋น ์ํ ์ฝ๋์ ๋ํด ์ ์๋ ์๋ฏธ์ ๋ฐ๋ผ ์๋ต ๋ฉ์์ง์ ๋๋จธ์ง ๋ถ๋ถ์ ๊ตฌ๋ฌธ ๋ถ์ํ๊ณ ํด์ํ๋ฉฐ, ํน์ ์ฝ๋๊ฐ ์ธ์๋์ง ์๋ ๊ฒฝ์ฐ ์ํ ์ฝ๋ ํด๋์ค์ ๋ฐ๋ผ ํด์ํ๋ค.
status-code = 3DIGIT
HTTP์ ํต์ฌ ์ํ ์ฝ๋๋ Section 15 of [HTTP]์ ์ ์๋์ด ์์ผ๋ฉฐ, ์ํ ์ฝ๋์ ํด๋์ค, ์๋ก์ด ์ํ ์ฝ๋ ์ ์์ ๋ํ ๊ณ ๋ ค์ฌํญ ๋ฐ ํด๋น ์ ์๋ฅผ ์์งํ๋ IANA ๋ ์ง์คํธ๋ฆฌ๊ฐ ํฌํจ๋๋ค.
reason-phrase ์์๋ ์ซ์ ์ํ ์ฝ๋์ ์ฐ๊ฒฐ๋ ํ ์คํธ ์ค๋ช ์ ์ ๊ณตํ๊ธฐ ์ํ ์ ์ผํ ๋ชฉ์ ์ ๊ฐ์ง๋ค. ์ด๋ ์ฃผ๋ก ์ํธ์์ฉํ ํ ์คํธ ํด๋ผ์ด์ธํธ์ ๋ ์์ฃผ ์ฌ์ฉ๋๋ ์ด๊ธฐ ์ธํฐ๋ท ์ ํ๋ฆฌ์ผ์ด์ ํ๋กํ ์ฝ์ ๋ํ ์์๋ฅผ ์ํ ๊ฒ์ด๋ค.
reason-phrase = 1*( HTAB / SP / VCHAR / obs-text )
ํด๋ผ์ด์ธํธ๋ reason-phrase ๋ด์ฉ์ด ์ ๋ขฐํ ์ ์๋ ์ ๋ณด ์ฑ๋์ด ์๋๋ฏ๋ก ์ด๋ฅผ ๋ฌด์ํ๋ ๊ฒ์ด SHOULD ๊ถ์ฅ๋๋ค(์ง์ญํ๋์ด ๋ฒ์ญ๋๊ฑฐ๋ ์ค๊ณ์์ ์ํด ๋ฎ์ด์ฐ๊ธฐ๋๊ฑฐ๋ ๋ค๋ฅธ HTTP ๋ฒ์ ์ ํตํด ์ ๋ฌ๋ ๋ ํ๊ธฐ๋ ์ ์์). ์๋ฒ๋ reason-phrase๊ฐ ์๋๋ผ๋ status-code์ reason-phrase๋ฅผ ๊ตฌ๋ถํ๋ ๊ณต๋ฐฑ์ ๋ฐ๋์ ์ ์กํด์ผ ํ๋ค(MUST), ์ฆ status-line์ ๊ณต๋ฐฑ์ผ๋ก ๋๋๊ฒ ๋๋ค.
5. ํ๋ ๊ตฌ๋ฌธ
๊ฐ ํ๋ ํ์ ๋์๋ฌธ์๋ฅผ ๊ตฌ๋ถํ์ง ์๋ ํ๋ ์ด๋ฆ, ์ฝ๋ก (":"), ์ ํ์ ์ ํ ๊ณต๋ฐฑ, ํ๋ ํ ๊ฐ, ๊ทธ๋ฆฌ๊ณ ์ ํ์ ํํ ๊ณต๋ฐฑ์ผ๋ก ๊ตฌ์ฑ๋๋ค.
field-line = field-name ":" OWS field-value OWS
ํ๋ ๊ฐ ๋ด๋ถ์ ๊ตฌ๋ฌธ ๋ถ์ ๊ท์น์ 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)๋ฅผ ํฌํจ์ํค์ง ์์์ผ ํ๋ค(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).
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 = #transfer-coding ; defined in [HTTP], Section 10.1.4
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
๋ฉ์์ง ๋ณธ๋ฌธ์ ๊ธธ์ด๋ ๋ค์ ์ค ํ๋์ ์ํด ๊ฒฐ์ ๋๋ค(์ฐ์ ์์ ์):
-
HEAD ์์ฒญ์ ๋ํ ๋ชจ๋ ์๋ต๊ณผ ์ํ ์ฝ๋๊ฐ 1xx (Informational), 204 (No Content), ๋๋ 304 (Not Modified)์ธ ๋ชจ๋ ์๋ต์ ํค๋ ํ๋ ์ดํ์ ์ฒซ ๋ฒ์งธ ๋น ์ค์ ์ํด ํญ์ ์ข ๋ฃ๋๋ฏ๋ก, ๋ฉ์์ง ๋ณธ๋ฌธ์ด๋ ํธ๋ ์ผ๋ฌ ์น์ ์ ํฌํจํ ์ ์๋ค.
-
CONNECT ์์ฒญ์ ๋ํ 2xx (Successful) ์๋ต์ ๋น ์ค๋ก ํค๋ ํ๋๊ฐ ์ข ๋ฃ๋ ์งํ ์ฐ๊ฒฐ์ด ์ฆ์ ํฐ๋์ด ๋จ์ ์๋ฏธํ๋ค. ํด๋ผ์ด์ธํธ๋ ์ด๋ฌํ ๋ฉ์์ง์์ ์์ ๋ ์ด๋ค Content-Length ๋๋ Transfer-Encoding ํค๋ ํ๋๋ ๋ฌด์ํด์ผ ํ๋ค(MUST).
-
๋ฉ์์ง๊ฐ Transfer-Encoding๊ณผ Content-Length๋ฅผ ๋ชจ๋ ํฌํจํ์ฌ ์์ ๋ ๊ฒฝ์ฐ, Transfer-Encoding์ด Content-Length๋ฅผ ๋ฌด์ํ๋ค. ์ด๋ฌํ ๋ฉ์์ง๋ ์์ฒญ ์ค๋จธ๊ธ๋ง( ์น์ 11.2 ) ๋๋ ์๋ต ๋ถํ ( ์น์ 11.1 )์ ์๋ํ๋ ค๋ ๊ฒ์ผ๋ก ๋ณด์ผ ์ ์์ผ๋ฉฐ ์ค๋ฅ๋ก ์ฒ๋ฆฌ๋์ด์ผ ํ๋ค. ์ค๊ณ์๊ฐ ๋ฉ์์ง๋ฅผ ์ ๋ฌํ๊ธฐ๋ก ์ ํํ๋ ๊ฒฝ์ฐ, ์ ๋ฌํ๊ธฐ ์ ์ ์์ ๋ Content-Length ํ๋๋ฅผ ๋จผ์ ์ ๊ฑฐํ๊ณ Transfer-Encoding์ ์ฒ๋ฆฌํด์ผ ํ๋ค(MUST).
-
Transfer-Encoding ํค๋ ํ๋๊ฐ ์กด์ฌํ๊ณ ๋ง์ง๋ง ์ธ์ฝ๋ฉ์ด ์ฒญํฌ ์ ์ก ์ฝ๋ฉ( ์น์ 7.1 )์ธ ๊ฒฝ์ฐ, ๋ฉ์์ง ๋ณธ๋ฌธ ๊ธธ์ด๋ ์ฒญํฌ๋ ๋ฐ์ดํฐ๋ฅผ ์ฝ๊ณ ๋์ฝ๋ฉํ์ฌ ์ ์ก ์ฝ๋ฉ์ด ๋ฐ์ดํฐ๊ฐ ์์ ํจ์ ๋ํ๋ผ ๋๊น์ง ํ์ ๋๋ค.
Transfer-Encoding ํค๋ ํ๋๊ฐ ์๋ต์ ์กด์ฌํ๊ณ ์ฒญํฌ๊ฐ ์ต์ข ์ธ์ฝ๋ฉ์ด ์๋ ๊ฒฝ์ฐ, ๋ฉ์์ง ๋ณธ๋ฌธ ๊ธธ์ด๋ ์๋ฒ๊ฐ ์ฐ๊ฒฐ์ ๋ซ์ ๋๊น์ง ์ฐ๊ฒฐ์ ์ฝ์์ผ๋ก์จ ๊ฒฐ์ ๋๋ค.
Transfer-Encoding ํค๋ ํ๋๊ฐ ์์ฒญ์ ์กด์ฌํ๊ณ ์ฒญํฌ๊ฐ ์ต์ข ์ธ์ฝ๋ฉ์ด ์๋ ๊ฒฝ์ฐ, ๋ฉ์์ง ๋ณธ๋ฌธ ๊ธธ์ด๋ ์ ๋ขฐํ ์ ์๊ฒ ๊ฒฐ์ ํ ์ ์์ผ๋ฏ๋ก ์๋ฒ๋ 400 (Bad Request)๋ก ์๋ตํ ๋ค์ ์ฐ๊ฒฐ์ ๋ซ์์ผ ํ๋ค(MUST).
-
Transfer-Encoding์ด ์๊ณ ์๋ชป๋ Content-Length ํค๋ ํ๋๊ฐ ์๋ ๋ฉ์์ง๊ฐ ์์ ๋๋ฉด, ๋ฉ์์ง ํ๋ ์ด๋ฐ์ ์๋ชป๋ ๊ฒ์ด๋ฉฐ ์์ ์๋ ์ด๋ฅผ ๋ณต๊ตฌ ๋ถ๊ฐ๋ฅํ ์ค๋ฅ๋ก ์ฒ๋ฆฌํด์ผ ํ๋ค(MUST), ๋จ ํ๋ ๊ฐ์ด ์ผํ๋ก ๊ตฌ๋ถ๋ ๋ชฉ๋ก์ผ๋ก ์ฑ๊ณต์ ์ผ๋ก ํ์ฑ๋ ์ ์๊ณ ( ์น์ 5.6.1 of [HTTP] ), ๋ชฉ๋ก์ ๋ชจ๋ ๊ฐ์ด ์ ํจํ๋ฉฐ ๋ชฉ๋ก์ ๋ชจ๋ ๊ฐ์ด ๋์ผํ ๊ฒฝ์ฐ(์ด ๊ฒฝ์ฐ ๋ฉ์์ง๋ ํด๋น ๋จ์ผ ๊ฐ์ Content-Length ํ๋ ๊ฐ์ผ๋ก ์ฌ์ฉํ์ฌ ์ฒ๋ฆฌ๋๋ค). ์์ฒญ ๋ฉ์์ง์์ ๋ณต๊ตฌ ๋ถ๊ฐ๋ฅํ ์ค๋ฅ๊ฐ ๋ฐ์ํ๋ฉด ์๋ฒ๋ 400 (Bad Request)๋ก ์๋ตํ ๋ค ์ฐ๊ฒฐ์ ๋ซ์์ผ ํ๋ค. ํ๋ก์๊ฐ ์๋ต ๋ฉ์์ง์์ ์ด ์ค๋ฅ๋ฅผ ์์ ํ๋ฉด ํ๋ก์๋ ์๋ฒ์์ ์ฐ๊ฒฐ์ ๋ซ๊ณ ์์ ๋ ์๋ต์ ํ๊ธฐํ ๋ค ํด๋ผ์ด์ธํธ์ 502 (Bad Gateway) ์๋ต์ ๋ณด๋ด์ผ ํ๋ค. ์ฌ์ฉ์ ์์ด์ ํธ๊ฐ ์๋ต ๋ฉ์์ง์์ ์ด ์ค๋ฅ๋ฅผ ์์ ํ๋ฉด ์ฌ์ฉ์ ์์ด์ ํธ๋ ์๋ฒ์์ ์ฐ๊ฒฐ์ ๋ซ๊ณ ์์ ๋ ์๋ต์ ํ๊ธฐํด์ผ ํ๋ค.
-
Content-Length ํค๋ ํ๋๊ฐ ์ ํจํ๊ฒ ์กด์ฌํ๊ณ Transfer-Encoding์ด ์๋ ๊ฒฝ์ฐ, ๊ทธ 10์ง ๊ฐ์ ์์๋๋ ๋ฉ์์ง ๋ณธ๋ฌธ ๊ธธ์ด๋ฅผ ์ฅํ ๋จ์๋ก ์ ์ํ๋ค. ์ก์ ์๊ฐ ํ์๋ ์ฅํ ์๋ฅผ ๋ชจ๋ ์ ์กํ๊ธฐ ์ ์ ์ฐ๊ฒฐ์ ๋ซ๊ฑฐ๋ ์์ ์๊ฐ ํ์์์์ด ๋ฐ์ํ๋ฉด, ์์ ์๋ ๋ฉ์์ง๊ฐ ๋ถ์์ ํ๋ค๊ณ ๊ฐ์ฃผํ๊ณ ์ฐ๊ฒฐ์ ๋ซ์์ผ ํ๋ค(MUST).
-
์ด๊ฒ์ด ์์ฒญ ๋ฉ์์ง์ด๊ณ ์์ ์ด๋ค ๊ฒฝ์ฐ๋ ํด๋น๋์ง ์์ผ๋ฉด, ๋ฉ์์ง ๋ณธ๋ฌธ ๊ธธ์ด๋ 0์ด๋ค(๋ฉ์์ง ๋ณธ๋ฌธ์ด ์กด์ฌํ์ง ์์).
-
๊ทธ๋ ์ง ์์ผ๋ฉด, ์ ์ธ๋ ๋ฉ์์ง ๋ณธ๋ฌธ ๊ธธ์ด๊ฐ ์๋ ์๋ต ๋ฉ์์ง์ด๋ฏ๋ก ๋ฉ์์ง ๋ณธ๋ฌธ ๊ธธ์ด๋ ์๋ฒ๊ฐ ์ฐ๊ฒฐ์ ๋ซ๊ธฐ ์ ์ ์์ ํ ์ฅํ ์์ ์ํด ๊ฒฐ์ ๋๋ค.
์์ ํ ์์ ๋ ๋ซ๊ธฐ-๊ตฌ๋ถ๋ ์๋ต ๋ฉ์์ง์ ๋คํธ์ํฌ ์ฅ์ ๋ก ์ธํด ๋ถ๋ถ์ ์ผ๋ก ์์ ๋ ๋ฉ์์ง๋ฅผ ๊ตฌ๋ถํ ๋ฐฉ๋ฒ์ด ์์ผ๋ฏ๋ก, ์๋ฒ๋ ๊ฐ๋ฅํ ๊ฒฝ์ฐ ์ธ์ฝ๋ฉ ๋๋ ๊ธธ์ด๋ก ๊ตฌ๋ถ๋๋ ๋ฉ์์ง๋ฅผ ์์ฑํ๋ ๊ฒ์ด ๋ฐ๋์งํ๋ค(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
์ฒญํฌ ์ ์ก ์ฝ๋ฉ์ ์ฝํ ์ธ ๋ฅผ ์ผ๋ จ์ ์ฒญํฌ๋ก ๋ํํ์ฌ ๊ฐ๊ฐ์ ํฌ๊ธฐ ํ์์๋ฅผ ๊ฐ๊ฒ ํ๊ณ , ์ ํ์ ์ธ ํธ๋ ์ผ๋ฌ ์น์ ์ ๋ค๋ฐ๋ฅด๊ฒ ํ๋ค. ์ฒญํฌ๋ ์๋ ค์ง์ง ์์ ํฌ๊ธฐ์ ์ฝํ ์ธ ์คํธ๋ฆผ์ ๊ธธ์ด-๊ตฌ๋ถ๋ ๋ฒํผ์ ์ฐ์์ผ๋ก ์ ์กํ ์ ์๊ฒ ํ์ฌ ์ก์ ์๊ฐ ์ฐ๊ฒฐ์ ์ ์งํ๊ณ ์์ ์๊ฐ ์ ์ฒด ๋ฉ์์ง๋ฅผ ์์ ํ๋์ง๋ฅผ ์ ์ ์๊ฒ ํ๋ค.
chunked-body = *chunk last-chunk trailer-section CRLF chunk = chunk-size [ chunk-ext ] CRLF chunk-data CRLF chunk-size = 1*HEXDIG last-chunk = 1*("0") [ chunk-ext ] CRLF chunk-data = 1*OCTET ; a sequence of chunk-size octets
chunk-size ํ๋๋ ์ฒญํฌ ๋ฐ์ดํฐ์ ์ฅํ ์๋ฅผ ๋ํ๋ด๋ 16์ง์ ์ซ์์ ๋ฌธ์์ด์ด๋ค. chunk-size๊ฐ 0์ธ ์ฒญํฌ๋ฅผ ์์ ํ๋ฉด ์ฒญํฌ ์ ์ก ์ฝ๋ฉ์ ์๋ฃ๋๋ฉฐ, ์ ํ์ ์ผ๋ก ํธ๋ ์ผ๋ฌ ์น์ ์ด ๋ค๋ฐ๋ฅด๊ณ ๋ง์ง๋ง์ผ๋ก ๋น ์ค๋ก ์ข ๋ฃ๋๋ค.
์์ ์๋ ์ฒญํฌ ์ ์ก ์ฝ๋ฉ์ ํ์ฑํ๊ณ ๋์ฝ๋ํ ์ ์์ด์ผ ํ๋ค(MUST).
HTTP/1.1์ ์ค๊ณ์๊ฐ ์ ์ฒด ์๋ต์ ๋ฒํผ๋งํ ์ ์์์ ๋ณด์ฅํ ์ ์๋๋ก ์ฒญํฌ๋ ์๋ต์ ํฌ๊ธฐ๋ฅผ ์ ํํ๋ ์๋จ์ ์ ์ํ์ง ์๋๋ค. ๋ํ ๋งค์ฐ ํฐ ์ฒญํฌ ํฌ๊ธฐ๋ ์์ ๊ตฌํ์์ ์ ์ ๋ณํ ์ค๋ฒํ๋ก์ฐ ๋๋ ์ ์ ํํ์ ์ ๋ฐ๋ ์์ค์ ์ด๋ํ ์ ์๋ค. ๋ฐ๋ผ์ ์์ ์๋ ์ ์ฌ์ ์ผ๋ก ํฐ 16์ง ์ซ์๋ฅผ ์์ํ๊ณ ์ ์ ๋ณํ ์ค๋ฒํ๋ก์ฐ๋ ์ ๋ฐ๋ ์์ค๋ก ์ธํ ๊ตฌ๋ฌธ ์ค๋ฅ๋ฅผ ๋ฐฉ์งํด์ผ ํ๋ค(MUST).
์ฒญํฌ ์ฝ๋ฉ์ ์ด๋ ํ ๋งค๊ฐ๋ณ์๋ ์ ์ํ์ง ์๋๋ค. ๋งค๊ฐ๋ณ์๊ฐ ์กด์ฌํ๋ฉด ์ค๋ฅ๋ก ๊ฐ์ฃผํ๋ ๊ฒ์ด ๋ฐ๋์งํ๋ค(SHOULD).
7.1.1. Chunk Extensions
์ฒญํฌ ์ฝ๋ฉ์ ๊ฐ ์ฒญํฌ๊ฐ chunk-size ๋ฐ๋ก ๋ค์์ 0๊ฐ ์ด์์ ์ฒญํฌ ํ์ฅ์ ํฌํจํ๋๋ก ํ์ฉํ๋ค. ์ด๋ ๊ฐ ์ฒญํฌ๋ณ ๋ฉํ๋ฐ์ดํฐ(์: ์๋ช ๋๋ ํด์), ๋ฉ์์ง ์ค๊ฐ์ ์ ์ด ์ ๋ณด, ๋๋ ๋ฉ์์ง ๋ณธ๋ฌธ ํฌ๊ธฐ์ ๋ฌด์์ํ ๋ฑ์ ์ ๊ณตํ๊ธฐ ์ํจ์ด๋ค.
chunk-ext = *( BWS ";" BWS chunk-ext-name [ BWS "=" BWS chunk-ext-val ] ) chunk-ext-name = token chunk-ext-val = token / quoted-string
์ฒญํฌ ์ฝ๋ฉ์ ๊ฐ ์ฐ๊ฒฐ์ ํนํ๋์ด ์์ผ๋ฉฐ ๊ฐ ์์ ์(์ค๊ณ์ ํฌํจ)์ ์ํด ์ ๊ฑฐ๋๊ฑฐ๋ ์ฌ์ฝ๋ฉ๋ ๊ฐ๋ฅ์ฑ์ด ํฌ๋ฏ๋ก, ์ฒญํฌ ํ์ฅ์ ์ฌ์ฉ์ ์ผ๋ฐ์ ์ผ๋ก "๋กฑ ํด๋ง"๊ณผ ๊ฐ์ด ์ฒญํฌ ํ์ฅ์ ์ฌ์ฉ์ ๋ํด ํด๋ผ์ด์ธํธ์ ์๋ฒ๊ฐ ๊ณต์ ๋ ๊ธฐ๋๋ฅผ ๊ฐ์ง๋ ํน์ํ HTTP ์๋น์ค๋ ์ข ๋จ ๊ฐ ๋ณด์ ์ฐ๊ฒฐ ๋ด์ ํจ๋ฉ์ ์ ํ๋๋ค.
์์ ์๋ ์ธ์ํ์ง ๋ชปํ๋ ์ฒญํฌ ํ์ฅ์ ๋ฌด์ํด์ผ ํ๋ค(MUST). ์๋ฒ๋ ์์ฒญ์์ ์์ ๋๋ ์ฒญํฌ ํ์ฅ์ ์ด ๊ธธ์ด๋ฅผ ์ ๊ณต๋๋ ์๋น์ค์ ๋ํด ํฉ๋ฆฌ์ ์ธ ์์ผ๋ก ์ ํํด์ผ ํ๋ฉฐ, ๋ค๋ฅธ ๋ฉ์์ง ๋ถ๋ถ์ ๋ํด ์ ์ฉํ๋ ๊ฒ๊ณผ ๋์ผํ ๊ธธ์ด ์ ํ ๋ฐ ํ์์์์ ์ ์ฉํ๊ณ , ๊ทธ ์์ ์ด๊ณผํ๋ฉด ์ ์ ํ 4xx (Client Error) ์๋ต์ ์์ฑํด์ผ ํ๋ค.
7.1.2. Chunked Trailer Section
ํธ๋ ์ผ๋ฌ ์น์ ์ ์ก์ ์๊ฐ ์ฝํ ์ธ ์ ์ก ์ค์ ๋์ ์ผ๋ก ์์ฑ๋ ์ ์๋ ๋ฉํ๋ฐ์ดํฐ(์: ๋ฉ์์ง ๋ฌด๊ฒฐ์ฑ ๊ฒ์ฌ, ๋์งํธ ์๋ช ๋๋ ํ์ฒ๋ฆฌ ์ํ)๋ฅผ ๋ฉ์์ง ๋์ ์ถ๊ฐํ ์ ์๊ฒ ํ๋ค. ํธ๋ ์ผ๋ฌ ํ๋์ ์ ์ ํ ์ฌ์ฉ๊ณผ ์ ํ์ ์น์ 6.5 of [HTTP]์ ์ ์๋์ด ์๋ค.
trailer-section = *( field-line CRLF )
์ฒญํฌ ์ฝ๋ฉ์ ๋ฉ์์ง์์ ์ ๊ฑฐํ๋ ์์ ์๋ ์์ ๋ ํธ๋ ์ผ๋ฌ ํ๋๋ฅผ ์ ํ์ ์ผ๋ก ์ ์งํ๊ฑฐ๋ ํ๊ธฐํ ์ ์๋ค(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):
-
Content-Length ํค๋ ํ๋์ ์ง์ ๋ ๋งํผ์ ๋ฐ์ดํฐ
-
์ฒญํฌ ์ ์ก ์ฝ๋ฉ์ด ์ฌ์ฉ๋ ๊ฒฝ์ฐ์ ์ข ๋ฃ๋ฅผ ์๋ฆฌ๋ 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์ ์ค๋ช ๋ ๋ฐ์ ๊ฐ๋ค.
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์ ๋ฑ๋ก ์ ์ฐจ ๋ฐ ์๋ ํ์ ์์ฝ๋ ์ฝํ ์ธ ์ฝ๋ฉ ์ด๋ฆ์ผ๋ก ์ ๋ฐ์ดํธํ๋ค.
| 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/์์ ์๋ ๋ฑ๋ก ์ ๋ณด๋ก ์ ๋ฐ์ดํธํ๋ค:
| 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
- deflate (transfer coding) 7.2
- F
- G
- ๋ฌธ๋ฒ(Grammar)
- absolute-form 3.2, 3.2.2
- ALPHA 1.2
- asterisk-form 3.2, 3.2.4
- authority-form 3.2, 3.2.3
- chunk 7.1
- chunk-data 7.1
- chunk-ext 7.1, 7.1.1
- chunk-ext-name 7.1.1
- chunk-ext-val 7.1.1
- chunk-size 7.1
- chunked-body 7.1
- CR 1.2
- CRLF 1.2
- CTL 1.2
- DIGIT 1.2
- DQUOTE 1.2
- field-line 5, 7.1.2
- field-name 5
- field-value 5
- HEXDIG 1.2
- HTAB 1.2
- HTTP-message 2.1
- HTTP-name 2.3
- HTTP-version 2.3
- last-chunk 7.1
- LF 1.2
- message-body 6
- method 3.1
- obs-fold 5.2
- OCTET 1.2
- origin-form 3.2, 3.2.1
- reason-phrase 4
- request-line 3
- request-target 3.2
- SP 1.2
- start-line 2.1
- status-code 4
- status-line 4
- trailer-section 7.1, 7.1.2
- Transfer-Encoding 6.1
- VCHAR 1.2
- gzip (transfer coding) 7.2
- ๋ฌธ๋ฒ(Grammar)
- H
- ํค๋ ํ๋๋ค
- header line 2.1
- header section 2.1
- headers 2.1
- HTTP 1, 1, 1.1, 1.2, 1.2, 1.2, 1.2, 1.2, 1.2, 1.2, 1.2, 1.2, 1.2, 1.2, 1.2, 2, 2.3, 3, 3, 3.1, 3.2, 3.2, 3.2.1, 3.2.2, 3.2.3,
3.2.4, 3.3, 3.3, 4, 5, 6, 6, 6.1, 6.1, 6.1, 6.1, 6.2, 6.2, 6.3, 7, 7.1.2, 7.2, 7.2, 7.2, 7.3, 7.3, 7.4, 7.4, 7.4, 7.4, 9, 9, 9.2, 9.3, 9.3.1, 9.3.2, 9.3.2,
9.6, 11, 11.4, 12.1, 12.3, 13.1, A, A, A, A, A, A, A, A, A, A, A, B.3, B.6, C.2.1, C.3, "Acknowledgements"
- Section 4.1 A
- Section 5.1 A
- Section 5.5 A
- Section 5.6.2 A
- Section 5.6.3 A, A, A
- Section 5.6.4 A, A
- Section 10.1.4 A
- Section 2 1.1
- Section 2.3 3
- Section 2.5 2.3
- Section 3 2
- Section 4.1 1.2
- Section 4.2 3.2
- Section 4.2.1 9
- Section 4.2.2 11.4
- Section 5.1 1.2
- Section 5.5 1.2, 5
- Section 5.6.1 1.2, 6.3, A
- Section 5.6.2 1.2
- Section 5.6.3 1.2, 1.2, 1.2
- Section 5.6.4 1.2, 1.2
- Section 5.6.7 B.3
- Section 6.4 6
- Section 6.4.1 6
- Section 6.5 7.1.2, 7.4
- Section 7.1 3.3
- Section 7.2 3.2, 3.2.1, C.2.1
- Section 7.3 9
- Section 7.4 3.3
- Section 7.6 3.2.2
- Section 7.6.1 7.4, 9.3, 9.6
- Section 8.4.1 6.1, 7.3
- Section 8.4.1.1 7.2
- Section 8.4.1.2 7.2
- Section 8.4.1.3 7.2
- Section 8.6 6.2, 6.2
- Section 9 3.1
- Section 9.2.1 9.3.2
- Section 9.2.2 9.3.1, 9.3.2
- Section 9.3.6 3.2.3, 6.1
- Section 9.3.7 3.2.4
- Section 10.1.4 1.2, 6.1, 7, 7.3, 7.4, 12.3
- Section 12.4.2 7.4
- Section 14.6 B.6
- Section 15 4
- Section 15.2 9.2
- Section 15.4.5 6.1
- Section 15.5.15 3
- Section 18.4 12.1
- Acknowledgements "Acknowledgements"
- HTTP/1.0 2.3, 13.2
- K
- L
- M
- O
- origin-form (request-target์ ๊ฒฝ์ฐ) 3.2.1
- R
- request-target 3.2
- RFC1950 12.3, 13.1
- RFC1951 12.3, 13.1
- RFC1952 12.3, 13.1
- RFC2045 2.1, 6.1, 13.2, B, B.1
- Section 6 6.1
- RFC2046 13.2, B.2
- RFC2049 13.2, B.2
- Section 4 B.2
- RFC2068 13.2, C.2.2
- Section 19.7.1 C.2.2
- RFC2119 1.1, 13.1
- RFC2557 13.2, B.6
- RFC5234 1.2, 1.2, 13.1
- Appendix B.1 1.2
- RFC5322 2.1, 13.2, B
- RFC7230 1, 1, 13.2, C.3
- RFC7405 1.2, 13.1
- RFC8126 7.3, 13.2
- Section 4.8 7.3
- RFC8174 1.1, 13.1
- T
- U
- W
- X