HTTP (HyperText Transfer Protocol)
HTTP๋ HTML๊ณผ ๊ฐ์ ๋ฌธ์๋ฅผ ์ ์กํ๊ธฐ ์ํ ํ๋กํ ์ฝ์ด๋ฉฐ, ์น ๋ธ๋ผ์ฐ์ ์ ์น ์๋ฒ์ ์ํต์ ์ํด ๋์์ธ๋์๋ค. ์ ํต์ ์ธ ํด๋ผ์ด์ธํธ-์๋ฒ ๋ชจ๋ธ(2-Tier ์ํคํ ์ณ)์์ ํด๋ผ์ด์ธํธ๊ฐ HTTP Messages ์์์ ๋ง์ถฐ ์์ฒญ์ ๋ณด๋ด๋ฉด ์๋ฒ๋ HTTP Messages ์์์ ๋ง์ถฐ ์๋ตํ๋ค.
HTTP Messages
HTTP Messages๋ ํด๋ผ์ด์ธํธ์ ์๋ฒ ์ฌ์ด์์ ๋ฐ์ดํฐ๊ฐ ๊ตํ๋๋ ๋ฐฉ์์ด๋ฉฐ, ์์ฒญ(Requests)๊ณผ ์๋ต(Responses) ์ ํ์ผ๋ก ๋๋๋ค. HTTP Messages๋ ๋ช ์ค์ ํ ์คํธ ์ ๋ณด๋ก ๊ตฌ์ฑ๋์ง๋ง, ๊ฐ๋ฐ์๋ ์ด๋ฐ ๋ฉ์ธ์ง๋ฅผ ์ง์ ์์ฑํ ํ์๊ฐ ๊ฑฐ์ ์๋ค. ๊ตฌ์ฑ ํ์ผ, API, ๊ธฐํ ์ธํฐํ์ด์ค์์ ์๋์ผ๋ก ์์ฑํ๋ค.
์์ฒญ(Requests)๊ณผ ์๋ต(Responses)์ ๋ค์๊ณผ ๊ฐ์ ์ ์ฌํ ๊ตฌ์กฐ๋ฅผ ์ง๋๋ค.
- start line : ์์ฒญ์ด๋ ์๋ต์ ์ํ๋ฅผ ๋ํ๋ด๋ฉฐ ํญ์ ์ฒซ ์งธ์ค์ ์์นํ๋ค. ์๋ต์์๋ status line์ด๋ผ๊ณ ๋ถ๋ฅธ๋ค.
- HTTP headers : ์์ฒญ์ ์ง์ ํ๊ฑฐ๋, ๋ฉ์ธ์ง์ ํฌํจ๋ ๋ณธ๋ฌธ์ ์ค๋ช ํ๋ ํค๋์ ์งํฉ์ด๋ค.
- empty line : ํค๋์ ๋ณธ๋ฌธ์ ๊ตฌ๋ถํ๋ ๋น ์ค. ์ด๋ฅผ ๊ธฐ์ค์ผ๋ก ์์ start line๊ณผ HTTP headers๋ฅผ ๋ฌถ์ด ํค๋(head)๋ผ ํ๊ณ , ์๋์ body๋ฅผ payload(์ฌ์ฉ์ ์์ด ์ ์ก๋๋ ๋ฐ์ดํฐ)๋ผ ๋ถ๋ฅธ๋ค.
- body : ์์ฒญ/์๋ต๊ณผ ๊ด๋ จ๋ ๋ฐ์ดํฐ ๋๋ ๋ฌธ์๋ฅผ ํฌํจํ๋ค. ์์ฒญ๊ณผ ์๋ต์ ์ ํ์ ๋ฐ๋ผ ์ ํ์ ์ผ๋ก ์ฌ์ฉํ๋ค.
HTTP Requests
HTTP Requests๋ ํด๋ผ์ด์ธํธ๊ฐ ์๋ฒ์๊ฒ ๋ณด๋ด๋ ๋ฉ์ธ์ง์ด๋ค. ๋ฉ์ธ์ง์๋ ์๋์ ๋ด์ฉ๋ค์ด ํฌํจ๋๋ค.
Start line
Start line์๋ ์ธ ๊ฐ์ง ์์๊ฐ ์๋ค.
- ์ํํ ์์ (GET, PUT, POST ๋ฑ)์ด๋ ๋ฐฉ์(HEAD or OPTIONS)์ ์ค๋ช ํ๋ HTTP method๋ฅผ ๋ํ๋ธ๋ค. ์๋ฅผ ๋ค์ด GET ๋ฉ์๋๋ ๋ฆฌ์์ค๋ฅผ ๋ฐ์์ผ ํ๊ณ , POST ๋ฉ์๋๋ ๋ฐ์ดํฐ๋ฅผ ์๋ฒ๋ก ์ ์กํ๋ค.
- ์์ฒญ ๋์(์ผ๋ฐ์ ์ผ๋ก URL or URI) ๋๋ ํ๋กํ ์ฝ, ํฌํธ, ๋๋ฉ์ธ์ ์ ๋ ๊ฒฝ๋ก๋ ์์ฒญ ์ปจํ
์คํธ์ ์์ฑ๋๋ค. ์์ฒญ ํ์์ HTTP method๋ง๋ค ๋ค๋ฅด๋ค.
- origin ํ์
:
?
์ ์ฟผ๋ฆฌ ๋ฌธ์์ด์ด ๋ถ๋ ์ ๋ ๊ฒฝ๋ก์ด๋ค. GET, POST, HEAD, OPTIONS ๋ฑ์ method์ ํจ๊ป ์ฌ์ฉํ๋ค. โPOST / HTTP 1.1
โGET /background.png HTTP/1.0
โHEAD /test.html?query=alibaba HTTP/1.1
โOPTIONS /anypage.html HTTP/1.0
- absolute ํ์
: ์์ ํ URL ํ์์ผ๋ก, ํ๋ก์์ ์ฐ๊ฒฐํ๋ ๊ฒฝ์ฐ ๋๋ถ๋ถ GET method์ ํจ๊ป ์ฌ์ฉํ๋ค.
โ
GET http://developer.mozilla.org/en-US/docs/Web/HTTP/Messages HTTP/1.1
- authority ํ์
: ๋๋ฉ์ธ ์ด๋ฆ๊ณผ ํฌํธ ๋ฒํธ๋ก ์ด๋ฃจ์ด์ง URL์ ์ผ๋ถ๋ถ์ด๋ค. HTTP ํฐ๋์ ๊ตฌ์ถํ๋ ๊ฒฝ์ฐ
CONNECT
์ ํจ๊ป ์ฌ์ฉํ ์ ์๋ค. โCONNECT developer.mozilla.org:80 HTTP/1.1
- asterisk ํ์
:
OPTIONS
์ ํจ๊ป ๋ณํ(*
) ํ๋๋ก ์๋ฒ ์ ์ฒด๋ฅผ ํํํ๋ค. โOPTIONS * HTTP/1.1
- origin ํ์
:
- HTTP ๋ฒ์ ์ ๋ฐ๋ผ HTTP message์ ๊ตฌ์กฐ๊ฐ ๋ฌ๋ผ์ง๋ค. ๋ฐ๋ผ์ start line์ HTTP ๋ฒ์ ์ ํจ๊ป ์ ๋ ฅํ๋ค.
Headers
์์ฒญ์ Headers๋ ๊ธฐ๋ณธ ๊ตฌ์กฐ๋ฅผ ๋ฐ๋ผ ํค๋ ์ด๋ฆ(๋์๋ฌธ์ ๊ตฌ๋ถ ์๋ ๋ฌธ์์ด), ์ฝ๋ก (:
), ๊ฐ์ ์
๋ ฅํ๋ค. ๊ฐ์ ํค๋์ ๋ฐ๋ผ ๋ค๋ฅด๋ค. ์ฌ๋ฌ ์ข
๋ฅ์ ํค๋๊ฐ ์๊ณ , ๋ค์๊ณผ ๊ฐ์ด ๊ทธ๋ฃน์ ๋๋ ์ ์๋ค.
- General headers : ๋ฉ์ธ์ง ์ ์ฒด์ ์ ์ฉ๋๋ ํค๋๋ก, body๋ฅผ ํตํด ์ ์ก๋๋ ๋ฐ์ดํฐ์๋ ๊ด๋ จ์ด ์๋ค.
- Request headers : fetch๋ฅผ ํตํด ๊ฐ์ ธ์ฌ ๋ฆฌ์์ค๋ ํด๋ผ์ด์ธํธ ์์ฒด์ ๋ํ ์์ธํ ์ ๋ณด๋ฅผ ํฌํจํ๋ ํค๋๋ฅผ ์๋ฏธํ๋ค. User-Agent, Accept-Type, Accept-Language์ ๊ฐ์ ํค๋๋ ์์ฒญ์ ๋ณด๋ค ๊ตฌ์ฒดํํ๋ค. Referer์ฒ๋ผ ์ปจํ ์คํธ๋ฅผ ์ ๊ณตํ๊ฑฐ๋ If-None๊ณผ ๊ฐ์ด ์กฐ๊ฑด์ ๋ฐ๋ผ ์ ์ฝ์ ์ถ๊ฐํ ์๋ ์๋ค.
- Representation headers : ์ด์ ์๋ Entity headers๋ก ๋ถ๋ ธ์ผ๋ฉฐ body์ ๋ด๊ธด ๋ฆฌ์์ค์ ์ ๋ณด(์ฝํ ์ธ ๊ธธ์ด, MIME ํ์ ๋ฑ)๋ฅผ ํฌํจํ๋ ํค๋์ด๋ค.
Body
์์ฒญ์ ๋ณธ๋ฌธ์ HTTP message ๊ตฌ์กฐ์ ๋ง์ง๋ง์ ์์นํ๋ค. ๋ชจ๋ ์์ฒญ์ body๊ฐ ํ์ํ์ง ์์ผ๋ฉฐ, GET/HEAD/DELETE/OPTIONS์ฒ๋ผ ์๋ฒ์ ๋ฆฌ์์ค๋ฅผ ์์ฒญํ๋ ๊ฒฝ์ฐ์๋ ๋ณธ๋ฌธ์ด ํ์ํ์ง ์๋ค. POST๋ PUT๊ฐ์ด ๋ฐ์ดํฐ๋ฅผ ์ ๋ฐ์ดํธ ํ๊ธฐ ์ํ ์์ฒญ์์ ์ฌ์ฉํ๋ค. body๋ ๋ค์๊ณผ ๊ฐ์ ๋ ์ข ๋ฅ๋ก ๋๋ ์ ์๋ค.
- Single-resource bodies(๋จ์ผ-๋ฆฌ์์ค ๋ณธ๋ฌธ) : ํค๋ ๋ ๊ฐ(Content-Type๊ณผ Content-Length, ์ฆ Representation headers)๋ก ์ ์๋ ๋จ์ผ ํ์ผ๋ก ๊ตฌ์ฑ๋๋ค.
- Multiple-resource bodies(๋ค์ค-๋ฆฌ์์ค ๋ณธ๋ฌธ) : ์ฌ๋ฌ ํํธ๋ก ๊ตฌ์ฑ๋ ๋ณธ๋ฌธ์์๋ ๊ฐ ํํธ๋ง๋ค ๋ค๋ฅธ ์ ๋ณด๋ฅผ ์ง๋๋๋ค. ๋ณดํต HTML form๊ณผ ๊ด๋ จ์ด ์๋ค.
HTTP Responses
HTTP Responses๋ ์๋ฒ๊ฐ ํด๋ผ์ด์ธํธ์๊ฒ ๋ณด๋ด๋ ๋ฉ์ธ์ง์ด๋ค. ๋ฉ์ธ์ง์๋ ์๋์ ๋ด์ฉ๋ค์ด ํฌํจ๋๋ค.
Status line
HTTP Request์ start line์ ๋์ํ๋ ๋ด์ฉ์ผ๋ก, ๋ค์์ ์ ๋ณด๋ฅผ ํฌํจํ๋ค.
- ํ์ฌ ํ๋กํ ์ฝ์ ๋ฒ์ (HTTP/1.1)
- ์ํ ์ฝ๋ : ์์ฒญ์ ๊ฒฐ๊ณผ๋ฅผ ๋ํ๋ธ๋ค. (ex. 200, 302, 404)
- ์ํ ํ ์คํธ : ์ํ ์ฝ๋์ ๋ํ ์ค๋ช
Status line์ ํ ์์๋ก HTTP/1.1 404 Not Found
๊ฐ ์๋ค.
Headers
์๋ต์ ๋ค์ด๊ฐ๋ HTTP Headers๋ ์์ฒญ ํค๋์ ๋์ผํ ๊ตฌ์กฐ(๋์๋ฌธ์ ๊ตฌ๋ถ ์๋ ๋ฌธ์์ด : ๊ฐ
)๋ฅผ ๊ฐ์ง๊ณ ์๊ณ , ๊ฐ์ ํค๋์ ๋ฐ๋ผ ๋ค๋ฅด๋ค. ์์ฒญ ํค๋์ ๋ง์ฐฌ๊ฐ์ง๋ก ๋ช ๊ทธ๋ฃน์ผ๋ก ๋๋๋ค.
- General headers : ๋ฉ์ธ์ง ์ ์ฒด์ ์ ์ฉ๋๋ ํค๋๋ก, body๋ฅผ ํตํด ์ ์ก๋๋ ๋ฐ์ดํฐ์๋ ๊ด๋ จ์ด ์๋ค.
- Response headers : ์์น ๋๋ ์๋ฒ ์์ฒด์ ๋ํ ์ ๋ณด(์ด๋ฆ, ๋ฒ์ ๋ฑ)์ ๊ฐ์ด ์๋ต์ ๋ํ ๋ถ๊ฐ์ ์ ๋ณด๋ฅผ ๊ฐ๋ ํค๋๋ก Vary, Accept-Ranges์ ๊ฐ์ด ์ํ ์ค์ ๋ฃ๊ธฐ์๋ ๊ณต๊ฐ์ด ๋ถ์กฑํ๋ ์ถ๊ฐ์ ์ธ ์ ๋ณด๋ฅผ ์ ๊ณตํ๋ค.
- Representation headers : ์ด์ ์๋ Entity headers๋ก ๋ถ๋ ธ์ผ๋ฉฐ body์ ๋ด๊ธด ๋ฆฌ์์ค์ ์ ๋ณด(์ฝํ ์ธ ๊ธธ์ด, MIME ํ์ ๋ฑ)๋ฅผ ํฌํจํ๋ ํค๋์ด๋ค.
Body
์๋ต์ ๋ณธ๋ฌธ ์ญ์ HTTP message ๊ตฌ์กฐ์ ๋ง์ง๋ง์ ์์นํ๋ค. ๋ชจ๋ ์์ฒญ์ body๊ฐ ํ์ํ์ง ์์ผ๋ฉฐ, ํนํ 201, 204์ ๊ฐ์ ์ํ ์ฝ๋๋ฅผ ๊ฐ์ง๋ ์๋ต์๋ ๋ณธ๋ฌธ์ด ํ์ํ์ง ์๋ค. ์๋ต์ body๋ ๋ค์๊ณผ ๊ฐ์ ๋ ์ข ๋ฅ๋ก ๋๋ ์ ์๋ค.
- Single-resource bodies(๋จ์ผ-๋ฆฌ์์ค ๋ณธ๋ฌธ)
: ๊ธธ์ด๊ฐ ์๋ ค์ง ๋จ์ผ-๋ฆฌ์์ค ๋ณธ๋ฌธ์ ๋ ๊ฐ์ ํค๋(Content-Type, Content-Length)๋ก ์ ์ํ๋ค. ๊ธธ์ด๋ฅผ ๋ชจ๋ฅด๋ ๋จ์ผ ํ์ผ๋ก ๊ตฌ์ฑ๋ ๋จ์ผ-๋ฆฌ์์ค ๋ณธ๋ฌธ์ Transfer-Encoding์ด
chunked
๋ก ์ค์ ๋์ด ์์ผ๋ฉฐ ํ์ผ์ chunk๋ก ๋๋์ด ์ธ์ฝ๋ฉ๋์ด ์๋ค.
- Multiple-resource bodies(๋ค์ค-๋ฆฌ์์ค ๋ณธ๋ฌธ) : ์๋ก ๋ค๋ฅธ ์ ๋ณด๋ฅผ ๋ด๊ณ ์๋ body์ด๋ค.
Uploaded by N2T