RFC 7230 (HTTP/1.1)
Hypertext Transfer Protocol (HTTP/1.1) : Message Syntax and Routing
The Hypertext Transfer Protocol (HTTP) is a stateless application-level protocol for distributed, collaborative, hypertext information systems.
1. Introduction
1. โMessage Syntax and Routingโ (ํด๋น ๋ฌธ์)
2. โSemantics and Contentโ [RFC7231]
3. โConditional Requestsโ [RFC7232]
4. โRange Requestsโ [RFC7233]
5. โCachingโ [RFC7234]
6. โAuthenticationโ [RFC7235]
2. Architecture
HTTP๋ World Wide Web (WWW) ์ํคํ ์ฒ๋ฅผ ์ํด ๋ง๋ค์ด ์ก๊ณ , ์๊ฐ์ด ์ง๋จ์ ๋ฐ๋ผ ์๋ ์์ด๋ ํ์ดํผํ ์คํธ ์์คํ ์ ํ์ฅ์ฑ์ ๋ํ ์๊ตฌ๋ค์ ์ง์ํ๊ธฐ ์ํด ๋ฐ์ ํ๋ค. ์ํคํ ์ฒ์ ๋๋ถ๋ถ์ด ์ฉ์ด์ HTTP ์ ์๋ฅผ ์ํด ์ฌ์ฉ๋๋ ๊ตฌ๋ฌธ๋ค์ ๋ฐ์๋์๋ค.
2.1 Client/Server Messaging
HTTP๋ ์ ๋ขฐ์ฑ ์๋ ์ ์ก ๊ณ์ธต ๋๋ ์ธ์ ๊ณ์ธต โconnectionโ์ (Section 6) ๋ฉ์์ง ๊ตํ (Section 3)์ ์ํด ์๋๋๋ ์ํ์๋ ์์ฒญ/์๋ต ํ๋กํ ์ฝ์ด๋ค. HTTP โclient(์ดํ ํด๋ผ์ด์ธ ํธ)โ ๋ ํ๋ ์ด์์ HTTP ์์ฒญ๋ค์ ์ ์กํ๊ธฐ ์ํ ๋ชฉ์ ์ผ๋ก ์ปค๋ฅ์ ์ ์๋ฒ์ ์ค๋ฆฝํ๋ ํ๋ก ๊ทธ๋จ์ด๋ค. HTTP โserver(์ดํ ์๋ฒ)โ๋ HTTP ์์ฒญ์ ์ฒ๋ฆฌํ๊ณ HTTP ์๋ต์ ๋ณด๋ด๊ธฐ ์ํด ์ปค๋ฅ์ ์ ํ์ฉํ๋ ํ๋ก๊ทธ๋จ์ด๋ค.
user agent(์ดํ ์ฌ์ฉ์ ์์ด์ ํธ)
์์ฒญ์ ์์ํ๋ ๋ค์ํ ํด๋ผ์ด์ธํธ ํ๋ก๊ทธ๋จ (๋ธ๋ผ์ฐ์ , ์คํ์ด๋ (์น ๊ธฐ๋ฐ ๋ก๋ด), ์ปค๋งจ๋ ๋ผ์ธ ํด, ๋ชจ๋ฐ์ผ ์ฑ)
origin server(์ดํ ์์๋ฒ)
ํน์ ๋์ ๋ฆฌ์์ค์ ๋ ํ ๊ถํ ์๋ ์๋ต์ ์์ฑํ ์ ์๋ ํ๋ก๊ทธ๋จ
๋ค์ ์์๋ URI ์์ GET ์์ฒญ์ ์ํ ์ผ๋ฐ์ ์ธ ๋ฉ์์ง ๊ตํ์ ๋ณด์ฌ์ค๋ค.
"http://www.example.com/hello.txt":
ํด๋ผ์ด์ธํธ ์์ฒญ:
GET /hello.txt HTTP/1.1 User-Agent: curl/7.16.3 libcurl/7.16.3 OpenSSL/0.9.71 zlib/1.2.3 Host: www.example.com Accept-Lanuage: en, mi
์๋ฒ ์๋ต:
HTTP/1.1 200 OK Date: Mon, 27 Jul 2009 12:28:53 GMT Server: Apache Last-Modified: Wed, 22 Jul 2009 19:15:56 GMT ETag: "34aa387-d-1568eb00" Accept-Ranges: bytes Content-Length: 51 Vary: Accept-Encoding Content-Type: text/plain Hello World! My payload includes a trailing CRLF.
2.2 Implementation Diversity
๋ณดํต์ HTTP ์ฌ์ฉ์ ์์ด์ ํธ๋ ๊ฐ์ ์ ํ๋ฆฌ์ผ์ด์ , ์ํฅ๊ธฐ๊ธฐ, ์ฒด์ค๊ณ, ์คํฌ๋ฆฝํธ๋ฅผ ๊ฐฑ์ ํ๋ firmware, command-line ํ๋ก๊ทธ๋จ, ๋ชจ๋ฐ์ผ ์ฑ, ๊ทธ๋ฆฌ๊ณ ๋ค์ํ ๋ชจ์๊ณผ ํฌ๊ธฐ์ ํต์ ๊ธฐ๊ธฐ๋ฅผ ํฌํจํ๋ค. ๋ง์ฐฌ๊ฐ์ง๋ก, ๋ณดํต์ HTTP ์ ์๋ฒ๋ ํ ์๋ํ ์ฅ์น, ๋คํธ์ํน์ ๊ตฌ์ฑํ๋ ๋ถํ, ์ฌ๋ฌด์ฉ ๊ธฐ๊ณ, ์์จ ๋ก๋ด, ๋ด์ค ํผ๋, ํธ๋ํฝ ์นด๋ฉ๋ผ, ๊ด๊ณ ์ ํ์, ๊ทธ๋ฆฌ๊ณ ๋น๋์ค-๋ฐฐ์ก ํ๋ซํผ์ ํฌํจํ๋ค.
2.3 Intermediaries (์ค๊ฐ์)
์ค๊ฐ์์ 3๊ฐ์ง ํํ
Proxy
Gateway (reverse proxy)
Tunnel: ๋ฉ์์ง ๋ณ๊ฒฝ์์ด 2๊ฐ์ ์ปค๋ฅ์ ์ ์จ๊ฒจ์ง ์ค๊ฐ์๋ก์จ ์ญํ (ex, TLS)
์ฉ์ด: upstream, downstream, inbound, outbound
์๋ฒ๋ ์ปค๋ฅ์ ์ด ๋ณด์๋์ด ์๊ณ ํด๋น ์์ด์ ํธ์ ํน์ ๋์ด ์์ง ์๋ํ ๋์ผํ ์ปค๋ฅ์ ์ ๋ํ ๋๊ฐ์ ์์ฒญ ์ด ๋์ผํ ์ฌ์ฉ์ ์์ด์ ํธ์์ ์จ ๊ฒ์ผ๋ก ๊ฐ์ ํด์๋ ์ ๋๋ค. (MUST NOT)
2.4 Caches
"cache"๋ ์ด์ ์๋ต ๋ฉ์์ง์ ๋ก์ปฌ ๋ณด๊ด์์ด๊ณ ๋ฉ์์ง์ ์ ์ฅ, ๊ฒ์, ์ญ์ ๋ฅผ ๊ด๋ฆฌ ํ๋ ์๋ธ ์์คํ ์ด๋ค. ์บ์๋ ์บ์ ๊ฐ๋ฅํ ์๋ต์ ์ ์ฅํ์ฌ ํฅํ ๋์ผํ ์์ฒญ์ ๋ํ ์๋ต ์ ๊ฐ๊ณผ ๋คํธ์ํฌ ๋์ญํญ ์ฌ์ฉ์ ์ค์ธ๋ค. ์บ์๋ ์๋ฒ๊ฐ ํฐ๋ ์ญํ ์ ํ๋ ๋์์๋ ์ฌ์ฉ๋ ์ ์์ง๋ง ๊ทธ๊ฒ์ ์ ์ธํ๊ณ ๋ ํด๋ผ์ด์ธํธ, ์๋ฒ ๋ชจ๋์์ ์ฌ์ฉ ๊ฐ๋ฅํ๋ค.
2.5 Conformance and Error Handling
๋ฐ์ ์๋ ๋ฐ์ ์๊ฐ ๊ฑฐ์ง์ด๋ผ๋ ์๋ฏธ๋ฅผ ์ ๋ฌํ๋ ํ๋กํ ์ฝ ์์๋ฅผ ์์ฑํ๋ฉด ์ ๋๋ค.(MUST NOT)
๋ฐ์ ์๋ ABNF ๊ท์น์ ๋์ํ๋ ์ ์๋ ๋ฌธ๋ฒ์ ๋ง์ง ์๋ ํ๋กํ ์ฝ ์์๋ฅผ ์์ฑํ๋ฉด ์ ๋๋ค.(MUST NOT)
์ง์ ๋ ๋ฉ์ ์ง ๋ด์์, ๋ฐ์ ์๋ ๋ค๋ฅธ ์ญํ (i.e., ํด๋น ๋ฉ์์ง์ ๋ฐ์ ์์๊ฒ ์๋ ์ญํ )์ ์ฐธ๊ฐ์๋ง ์์ฑํ ์ ์๋ ํ๋กํ ์ฝ ์์๋ ๊ตฌ๋ฌธ ๋์์ ์์ฑํ๋ฉด ์ ๋๋ค.(MUST NOT)
์์ ๋ ํ๋กํ ์ฝ ์์๊ฐ ๋ถ์๋์์ ๋, ์์ ์๋ ์์ ์์ ์ญํ ์ ํด๋นํ๋ ์ ์ ํ ๊ธธ์ด์ ๊ฐ๊ณผ ๋ถ์ํ ์ ์์ด์ผ ํ๋ฉฐ ABNF ๊ท์น๋ค์ ๋์ํ๋ ์ ์๋ ๋ฌธ๋ฒ์ ์ผ์นํด์ผ ํ๋ค.(MUST)
์ต์ํ, ์์ ์๋ ๋ค๋ฅธ ๋ฉ์์ง์ ๋์ผํ ํ๋กํ ์ฝ ์์์ ๋ํด ์์ฑํ ๊ฐ๋งํผ ํ๋กํ ์ฝ ์์ ๊ธธ์ด๋ฅผ ๊ตฌ๋ฌธ๋ถ์ํ๊ณ ์ฒ๋ฆฌํ ์ ์์ด์ผํ๋ค.(MUST)
์์ ์๋ ์์ ์๊ฐ ํด๋น ์๋ฏธ๋ก ์ ์ํด ์์๋ ๊ฒ์ ์๋ชป ๊ตฌํํ๋ค๊ณ (๊ฒฝํ์ด๋ ๊ตฌ์ฑ์ ํตํด) ํ๋จํ์ง ์๋ ํ, ์์ ์๋ ์ด ๋ช ์ธ์ ์ ์๋ ์๋ฏธ๋ก ์ ๋ฐ๋ผ ์์ ๋ ํ๋กํ ์ฝ ์์๋ฅผ ํด์ํด์ผ ํ๋ค.(MUST)
๋ฌ๋ฆฌ ๋ช ์๋์ง ์์ ํ, ์์ ์๋ ์๋ชป๋ ๊ตฌ์กฐ์์ ์ฌ์ฉ ๊ฐ๋ฅํ ํ๋กํ ์ฝ ์์๋ฅผ ๋ณต๊ตฌํ๋ ค๊ณ ์๋ํ ์ ์๋ค.(MAY)
HTTP๋ ๊ตฌํ์ ๋ฌธ๋งฅ ๋ฐฐ์น์ ๋ชฉ์ ์ ๋ฐ๋ผ ์ ์ ํ ๊ธธ์ด๊ฐ ๋งค์ฐ ๋ค์ํ๊ธฐ ๋๋ฌธ์ ๋๋ถ๋ถ์ ํ๋กํ ์ฝ ์์์ ๋ํด ํน์ ํ ๊ธธ์ด ์ ํ์ ๊ฐ์ง๊ณ ์์ง ์๋๋ค.
๋ํ, HTTP๋ ๋ณด์์ ์ง์ ์ ์ธ ์ํฅ์ ๋ฏธ์น๋ ๊ฒฝ์ฐ๋ฅผ ์ ์ธํ๊ณ ํน์ ์ค๋ฅ ์ฒ๋ฆฌ ๋ฉ์ปค๋์ฆ์ ์ ์ํ์ง ์๋๋ฐ, ํ๋กํ ์ฝ์ ์๋ก ๋ค๋ฅธ ์์ฉ ํ๋ก๊ทธ๋จ์๋ ๋ค๋ฅธ ์ค๋ฅ ์ฒ๋ฆฌ ์ ๋ต ์ด ํ์ํ๊ธฐ ๋๋ฌธ์ด๋ค.
์๋ฅผ ๋ค์ด, ์น ๋ธ๋ผ์ฐ์ ๋ Location ํค๋ ํ๋๊ฐ ABNF์ ๋ฐ๋ผ ๊ตฌ๋ฌธ ๋ถ์๋์ง ์๋ ์๋ต์์ ํฌ๋ช ํ๊ฒ ๋ณต๊ตฌํ๊ธฐ๋ฅผ ์ํ๋ ๋ฐ๋ฉด, ์์คํ ์ ์ด ํด๋ผ์ด์ธํธ๋ ์ด๋ค ํ ํ์ ์ค๋ฅ ๋ณต๊ตฌ๋ ์ํํ๋ค๊ณ ๊ฐ์ฃผํ ์ ์๋ค.
2.6 Protocol Versioning
Host์ Connection ํค๋ ํ๋๋ HTTP/1.1์ค์ ์ฌ๋ถ์ ๊ด๊ณ ์์ด ๋ชจ๋ HTTP/1.x๊ตฌํ์ ์ํด ๊ตฌํ๋์ด์ผ ํ๋ค.
HTTP ๋ฉ์์ง๋ฅผ ์ฒ๋ฆฌํ๋ ์ค๊ฐ์(์ฆ, ํฐ๋ ์ญํ ์ ํ๋ ์ค๊ฐ์๋ฅผ ์ ์ธํ ๋ชจ๋ ์ค๊ฐ์)๋ ์ ๋ฌ ๋ ๋ฉ์์ง๋ก ์์ ์ HTTP-version์ ์ ์กํด์ผ ํ๋ค.(MUST)
ํด๋ผ์ด์ธํธ์ major ๋ฒ์ ์ด ์๋ฒ์ ์ํด ์ง์ํ๋ ๊ฐ์ฅ ๋์ ๋ฒ์ ๋ณด๋ค ๋์ง ์๊ณ ํด๋ผ์ด์ธํธ๊ฐ ๊ฐ์ฅ ๋์ ๋ฒ์ ์ ํธํํ๋ ๊ฒ์ผ๋ก ์๋ ค์ ธ ์๋ค๋ฉด ํด๋ผ์ด์ธํธ๋ ๊ฐ์ฅ ๋์ ๋ฒ์ ๊ณผ ๋์ผํ ์์ฒญ๋ฒ์ ์ ์ ์กํด์ผ ํ๋ค.(SHOULD) ํด๋ผ์ด์ธํธ๋ ์ ํฉํ์ง ์์ ๋ฒ์ ์ ๋ณด๋ด๋ฉด ์๋๋ค.(MUST NOT)
์๋ฒ๊ฐ HTTP ๊ท๊ฒฉ์ ์๋ชป ๊ตฌํํ ๊ฒ์ผ๋ก ์๋ ค์ง ๊ฒฝ์ฐ, ๊ทธ๋ฌ๋ ํด๋ผ์ด์ธํธ๊ฐ ์ ์ด๋ ํ๋์ ์ ์์ ์ธ ์์ฒญ์ ์๋ํ๊ณ ์๋ฒ๊ฐ ์์ ์์ฒญ ๋ฒ์ ์ ์๋ชป ์ฒ๋ฆฌํ๋ ์๋ต ์ํ ์ฝ๋ ๋๋ ํค๋ ํ๋๋ฅผ ํตํด ํ์ธํ ํ์๋ง ํด๋ผ์ด์ธํธ๊ฐ ํ์ ์์ฒญ ๋ฒ์ ์ ๋ณด๋ผ ์ ์๋ค.(MAY)
์๋ฒ๋ ์๋ฒ๊ฐ ๊ตฌ์ฑ๋ ๊ฐ์ฅ ๋์ ๋ฒ์ ๊ณผ ๋์ผํ ์๋ต ๋ฒ์ ์ ์ ์กํด์ผ ํ๋ฉฐ major ๋ฒ์ ์ ์์ฒญ์ ์์ ๋ ๋ฒ์ ๋ณด๋ค ์๊ฑฐ๋ ๊ฐ์์ผ ํ๋ค.(SHOULD) ์๋ฒ๋ ํธํ๋์ง ์๋ ๋ฒ์ ์ ๋ณด๋ด๋ฉด ์ ๋ ๋ค.(MUST NOT)
ํด๋ผ์ด์ธํธ๊ฐ HTTP ์ฌ์์ ์๋ชป ๊ตฌํํ ๊ฒ์ผ๋ก ์๋ ค์ง๊ฑฐ๋ ์์ฌ๋๋ ๊ฒฝ์ฐ(์:ํด๋ผ์ด์ธํธ๊ฐ ๋ฒ์ ๋ฒํธ๋ฅผ ์ฌ๋ฐ๋ฅด๊ฒ ๊ตฌ๋ฌธ ๋ถ์ํ์ง ๋ชปํ๊ฑฐ๋ ์ค๊ฐ์๊ฐ ํ๋กํ ์ฝ์ minor ๋ฒ์ ์ด ์ฃผ์ด์ง ๊ฒ์ ๋ฐ๋ฅด์ง ์์ ๋ HTTP ๋ฒ์ ์ ๋งน๋ชฉ์ ์ผ๋ก ์ ๋ฌํ๋ ๊ฒ์ผ๋ก ์๋ ค์ง ๊ฒฝ์ฐ) ์๋ฒ๊ฐ ์์ฒญ์ ๋ํด HTTP/ 1.0 ์๋ต์ ๋ณด๋ผ ์ ์๋ค.(MAY) ํ๋ ์ด์์ ์์ฒญ ํค๋ ํ๋(e.g., User-Agent)๊ฐ ์ค๋ฅ๊ฐ ์๋ ๊ฒ์ผ๋ก ์๋ ค์ง ํด๋ผ์ด์ธํธ๊ฐ ์ ์กํ ๊ฐ๊ณผ ๊ณ ์ ํ๊ฒ ์ผ์นํ๋ ๊ฒฝ์ฐ์ ๊ฐ์ ํน์ ํด๋ผ์ด์ธํธ ์์ฑ์ ์ํด ํธ๋ฆฌ๊ฑฐ ๋์ง ์๋ ํ ์ด๋ฌํ ํ๋กํ ์ฝ ๋ค์ด๊ทธ๋ ์ด๋๋ฅผ ์ํํด์๋ ์ ๋๋ค.(SHOULD NOT)
์ด๋ค ์ด์ ๋ก๋ ์๋ฒ๋ ํด๋ผ์ด์ธํธ์ ์ฃผ์ ํ๋กํ ์ฝ ๋ฒ์ ์๋น์ค๋ฅผ ๊ฑฐ๋ถํ๊ณ ์ ํ ๋ ๊ฒฝ์ฐ 505(HTTP Version Not Supported)์ ์๋ต์ ๋ณด๋ผ ์ ์๋ค.
2.7 Uniform Resource Identifiers
Uniform Resource Identifiers (URIs) [RFC3986]์ ๋ฆฌ์์ค๋ฅผ ์๋ณํ๋ ์๋จ์ผ๋ก HTTP ์ ์ฒด์์ ์ฌ์ฉ๋๋ค.
"URI-reference", "absolute-URI", โrelative-part", "scheme", "authority", "port", "host", "path-abempty", โsegment", "query", โfragment" ์ ์๋ URI ์ผ๋ฐ ๊ตฌ๋ฌธ์์ ์ฑํ๋์๋ค.
2.7.1 http URI scheme
๋ฐ์ ์(sender)๋ ํธ์คํธ ์๋ณ์๊ฐ ๋น์ด์๋ ์ํ๋ก โhttp" URI๋ฅผ ์์ฑํด์๋ ์ ๋๋ค.(MUST NOT)
์ด๋ฌ ํ URI ์ฐธ์กฐ๋ฅผ ์ฒ๋ฆฌํ๋ ์์ ์๋ ์ ํจํ์ง ์์ ๊ฒ์ผ๋ก ๊ฑฐ๋ถํด์ผ ํ๋ค.(MUST)
HTTP๋ ์ ์ก ํ๋กํ ์ฝ๊ณผ ๋ ๋ฆฝ์ ์ด์ง๋ง, ์ด๋ฆ ์์ ํ๋ก์ธ์ค๋ ๊ถํ์ ์ค์ ํ๋ TCP์ ์์กดํ๊ธฐ ๋๋ฌธ์ โhttpโ scheme์ TCP๊ธฐ๋ฐ ์๋น์ค์๋ง ํ์ ๋๋ค.
2.7.2 https URI scheme
โhttpsโ URI scheme๋ ์ ์ฌ์ ์ผ๋ก HTTP ์์๋ฒ๊ฐ ์ฃผ์ด์ง TLS-๋ณด์ ์ปค๋ฅ์ ์ ์ํ TCP ํฌํธ๋ฅผ ์ฒญ์ทจํ๋ ๊ฒ์ผ๋ก ๊ณ์ธต์ ์ผ๋ก ๊ด๋ฆฌ๋ ๋ค์ ์คํ์ด์ค์ ์ฐ๊ณ์ ๋ฐ๋ผ ์๋ณ์๋ฅผ ์ฃผ์กฐํ๋ ๋ชฉ์ ์ผ๋ก ์ ์ ๋๋ค.
TCP ํฌํธ 443์ ํฌํธ ํ์ ๊ตฌ์ฑ ์์๊ฐ ๋น์ด ์๊ฑฐ๋ ์ง์ ๋์ง ์์ ๊ฒฝ์ฐ๋ฅผ ์ ์ธํ๊ณ ๊ธฐ๋ณธ๊ฐ์ด๋ค. ์ฌ์ฉ์ ์์ด์ ํธ๋ ์ฒซ ๋ฒ์งธ HTTP ์์ฒญ์ ๋ณด๋ด๊ธฐ ์ ์ end-to-end์ ๊ฐ๋ ฅํ ์ํธํ ํตํด ์์๋ฒ์ ๋ํ ์ปค๋ฅ์ ์ด ์์ ํ์ง ํ์ธํด์ผ ํ๋ค.(MUST)
2.7.3 http and https URI Normalization and Comparison
ํฌํธ๊ฐ scheme์ ๊ธฐ๋ณธํฌํธ์ ๊ฐ๋ค๋ฉด, ์ผ๋ฐ์ ์ธ ํํ๋ ํฌํธ ํ์ ๊ตฌ์ฑ์ ์๋ตํ๋ ๊ฒ์ด.
OPTIONS ์์ฒญ์ ์์ฒญ ๋์์ผ๋ก absolute ํ์์ผ๋ก ์ฌ์ฉํ์ง ์์ ๊ฒฝ์ฐ, ๋น ๊ฒฝ๋ก ๊ตฌ์ฑ ์์ "/"์ ์ ๋ ๊ฒฝ๋ก์ ๊ฐ์ผ๋ฏ๋ก, ์ผ๋ฐ์ ์ธ ํ์์ โ/" ๊ฒฝ๋ก๋ฅผ ๋์ ์ ๊ณตํ๋ ๊ฒ์ด๋ค.
scheme ๊ณผ ํธ์คํธ๋ ๋์๋ฌธ์๋ฅผ ๊ตฌ๋ถํ์ง ์์ผ๋ฉฐ ์ผ๋ฐ์ ์ผ๋ก ์๋ฌธ์๋ก ์ ๊ณต๋๋ค.
โreserved" ์งํฉ์ ์๋ ๋ฌธ์ ์ด์ธ์ ๋ฌธ์๋ ๋ฐฑ๋ถ์จ๋ก ์ธ์ฝ๋ฉ๋ octets์ ๋์ผํ๋ค. ์ผ๋ฐ์ ์ธ ํ์์ ํด๋น ๋ฌธ์๋ฅผ ์ธ์ฝ๋ฉํ์ง ์๋๋ค.([RFC3986])
๋ค์ ์ธ๊ฐ์ URI๋ ๋๋ฑํ๋ค.
http://example.com:80/~smith/home.html
http://EXAMPLE.com/%7Esmith/home.html
http://EXAMPLE.com:/%7esmith/home.html
Last updated