HTTP
ํ์ต ๋ชฉํ
- HTTP์ ๋์ ๋ฐฉ์์ ์ดํดํ ์ ์๋ค.
- HTTP Messages์ ๊ตฌ์กฐ๋ฅผ ์ค๋ช ํ ์ ์๋ค.
- HTTP Requests์ Responses๋ฅผ ๊ตฌ๋ถํ ์ ์๋ค.
- HTTP์ ์๋ต ๋ฉ์์ง๋ฅผ ์ฐพ์๋ณผ ์ ์๋ค.
HTTP Messages
HTTP Messages๋ ํด๋ผ์ด์ธํธ์ ์๋ฒ ์ฌ์ด์์ ๋ฐ์ดํฐ๊ฐ ๊ตํ๋๋ ๋ฐฉ์์ด๋ค. HTTP Messages์๋ ๋ค์๊ณผ ๊ฐ์ ๋ ๊ฐ์ง ์ ํ์ด ์๋ค.
- ์์ฒญ(Requests)
- ์๋ต(Responses)
HTTP Messages๋ ๋ช ์ค์ ํ ์คํธ ์ ๋ณด๋ก ๊ตฌ์ฑ๋๋, ๊ตฌ์ฑ ํ์ผ, API, ๊ธฐํ ์ธํฐํ์ด์ค์์ HTTP Messages๋ฅผ ์๋์ผ๋ก ์์ฑํ๊ธฐ ๋๋ฌธ์ ๊ฐ๋ฐ์๋ ์ด๋ฐ ๋ฉ์์ง๋ฅผ ์ง์ ์์ฑํ ํ์๊ฐ ๊ฑฐ์ ์๋ค.
์์ฒญ(Requests)๊ณผ ์๋ต(Responses)์ ๋ค์๊ณผ ๊ฐ์ ์ ์ฌํ ๊ตฌ์กฐ๋ฅผ ๊ฐ์ง๋ค.
- start line : start line์๋ ์์ฒญ์ด๋ ์๋ต์ ์ํ๋ฅผ ๋ํ๋ธ๋ค. ํญ์ ์ฒซ๋ฒ์งธ ์ค์ ์์นํ๋ค. ์๋ต์์๋ status line์ด๋ผ๊ณ ๋ถ๋ฅธ๋ค.
- HTTP headers : ์์ฒญ์ ์ง์ ํ๊ฑฐ๋, ๋ฉ์์ง์ ํฌํจ๋ ๋ณธ๋ฌธ์ ์ค๋ช ํ๋ ํค๋์ ์งํฉ์ด๋ค.
- empty line : ํค๋์ ๋ณธ๋ฌธ์ ๊ตฌ๋ถํ๋ ๋น ์ค์ด ์๋ค.
- body : ์์ฒญ๊ณผ ๊ด๋ จ๋ ๋ฐ์ดํฐ๋ ์๋ต๊ณผ ๊ด๋ จ๋ ๋ฐ์ดํฐ ๋๋ ๋ฌธ์๋ฅผ ํฌํจํ๋ค. ์์ฒญ๊ณผ ์๋ต์ ์ ํ์ ๋ฐ๋ผ ์ ํ์ ์ผ๋ก ์ฌ์ฉํ๋ค.
์ด ์ค start line๊ณผ HTTP header๋ฅผ ๋ฌถ์ด ์์ฒญ์ด๋ ์๋ต์ ํค๋(head)๋ผ๊ณ ํ๊ณ , payload๋ body๋ผ๊ณ ์ด์ผ๊ธฐ ํ๋ค.
payload๋? ํ์ด๋ก๋๋ ์ฌ์ฉ์ ์์ด์ ์ ์ก๋๋ ๋ฐ์ดํฐ๋ฅผ ๋ปํ๋ค. ์ ์ก์ ๊ทผ๋ณธ์ ์ธ ๋ชฉ์ ์ด ๋๋ ๋ฐ์ดํฐ์ ์ผ๋ถ๋ถ์ผ๋ก ๊ทธ ๋ฐ์ดํฐ์ ํจ๊ป ์ ์ก๋๋ ํค๋์ ๋ฉํ๋ฐ์ดํฐ์ ๊ฐ์ ๋ฐ์ดํฐ๋ ์ ์ธํ๋ค.
Stateless
Stateless๋ ๋ง ๊ทธ๋๋ก ์ํ๋ฅผ ๊ฐ์ง์ง ์๋๋ค๋ ๋ป์ด๋ค.
- HTTP๋ก ํด๋ผ์ด์ธํธ์ ์๋ฒ๊ฐ ํต์ ์ ์ฃผ๊ณ ๋ฐ๋ ๊ณผ์ ์์, HTTP๊ฐ ํด๋ผ์ด์ธํธ๋ ์๋ฒ์ ์ํ๋ฅผ ํ์ธํ์ง ์๋๋ค.
- HTTP๋ ํต์ ๊ท์ฝ์ผ ๋ฟ์ผ๋ก ์ํ๋ฅผ ์ ์ฅํ์ง ์๋๋ค. ๋ฐ๋ผ์ ํ์์ ๋ฐ๋ผ ๋ค๋ฅธ ๋ฐฉ๋ฒ(์ฟ ํค-์ธ์ , API ๋ฑ)์ ํตํด ์ํ๋ฅผ ํ์ธํ ์ ์๋ค.
Stateless(๋ฌด์ํ์ฑ)๊ฐ HTTP์ ํฐ ํน์ง์ค ํ๋์ด๋ค.
HTTP Requests (ํด๋ผ์ด์ธํธ โ ์๋ฒ)
Start line
HTTP Requests๋ ํด๋ผ์ด์ธํธ๊ฐ ์๋ฒ์๊ฒ ๋ณด๋ด๋ ๋ฉ์์ง์ด๋ค. Start line์๋ ์ธ ๊ฐ์ง ์์๊ฐ ์๋ค.
- ์ํํ ์์ (GET, PUT, POST ๋ฑ)์ด๋ ๋ฐฉ์(HEAD or OPTIONS)์ ์ค๋ช ํ๋ HTTP method๋ฅผ ๋ํ๋ธ๋ค. ์๋ฅผ ๋ค์ด GET method๋ ๋ฆฌ์์ค๋ฅผ ๋ฐ์์ผ ํ๊ณ , POST method๋ ๋ฐ์ดํฐ๋ฅผ ์๋ฒ๋ก ์ ์กํ๋ค.
- ์์ฒญ ๋์(์ผ๋ฐ์ ์ผ๋ก URL์ด๋ URI)๋๋ ํ๋กํ ์ฝ, ํฌํธ, ๋๋ฉ์ธ์ ์ ๋ ๊ฒฝ๋ก๋ ์์ฒญ ์ปจํ
์คํธ์ ์์ฑ๋๋ค. ์ด ์์ฒญ ํ์์ HTTP method๋ง๋ค ๋ค๋ฅด๋ค.
- origin ํ์ :
'?'
์ ์ฟผ๋ฆฌ ๋ฌธ์์ด์ด ๋ถ๋ ์ ๋ ๊ฒฝ๋ก์ด๋ค. GET, POST, HEAD, OPTIONS ๋ฑ์ method์ ํจ๊ป ์ฌ์ฉํ๋ค.POST /HTTPP 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://developer.mozilla.org/en-US/docs/Web/HTTP/Messages) HTTP/1.1
- authority ํ์ : ๋๋ฉ์ธ ์ด๋ฆ๊ณผ ํฌํธ ๋ฒํธ๋ก ์ด๋ฃจ์ด์ง URL์ ์ผ๋ถ๋ถ์ด๋ค. HTTP ํฐ๋์ ๊ตฌ์ถํ๋ ๊ฒฝ์ฐ,
CONNECT
์ ํจ๊ป ์ฌ์ฉํ ์ ์๋ค.CONNECT [developer.mozilla.org:80](http://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 messages ๊ตฌ์กฐ์ ๋ง์ง๋ง์ ์์นํ๋ค. ๋ชจ๋ ์์ฒญ์ body๊ฐ ํ์ํ์ง๋ ์๋ค. GET, HEAD, DELETE, OPTIONS ์ฒ๋ฐ ์๋ฒ์ ๋ฆฌ์์ค๋ฅผ ์์ฒญํ๋ ๊ฒฝ์ฐ์๋ ๋ณธ๋ฌธ์ด ํ์ํ์ง ์์ง๋ง, POST๋ PUT๊ณผ ๊ฐ์ ์ผ๋ถ ์์ฒญ์ ๋ฐ์ดํฐ๋ฅผ ์ ๋ฐ์ดํธ ํ๊ธฐ ์ํด ์ฌ์ฉํ๋ค. body๋ ๋ค์๊ณผ ๊ฐ์ด ๋ ์ข ๋ฅ๋ก ๋๋ ์ ์๋ค.
- Single-resource bodies(๋จ์ผ-๋ฆฌ์์ค ๋ณธ๋ฌธ) : ํค๋ ๋ ๊ฐ(Content-Type๊ณผ Content-Length)๋ก ์ ์๋ ๋จ์ผ ํ์ผ๋ก ๊ตฌ์ฑ๋๋ค.
- Multiple-resource bodies(๋ค์ค-๋ฆฌ์์ค ๋ณธ๋ฌธ) : ์ฌ๋ฌ ํํธ๋ก ๊ตฌ์ฑ๋ ๋ณธ๋ฌธ์์๋ ๊ฐ ํํธ๋ง๋ค ๋ค๋ฅธ ์ ๋ณด๋ฅผ ์ง๋๋ค. ๋ณดํต HTML form๊ณผ ๊ด๋ จ์ด ์๋ค.
HTTP Responses (์๋ฒ โ ํด๋ผ์ด์ธํธ)
Status line
HTTP Responses๋ ์๋ฒ๊ฐ ํด๋ผ์ด์ธํธ์์ธ ๋ณด๋ด๋ ๋ฉ์์ง์ด๋ค. ์๋ต์ ์ฒซ ์ค์ Status 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 messages ๊ตฌ์กฐ์ ๋ง์ง๋ง์ ์์นํ๋ค. ๋ชจ๋ ์๋ต์ body๊ฐ ํ์ํ์ง๋ ์๋ค. 201, 204์ ๊ฐ์ ์ํ ์ฝ๋๋ฅผ ๊ฐ์ง๋ ์๋ต์๋ ๋ณธ๋ฌธ์ด ํ์ํ์ง ์๋ค. ์๋ต์ body๋ ๋ค์๊ณผ ๊ฐ์ด ๋ ์ข ๋ฅ๋ก ๋๋ ์ ์๋ค.
- Single-resource bodies(๋จ์ผ-๋ฆฌ์์ค ๋ณธ๋ฌธ) :
- ๊ธธ์ด๊ฐ ์๋ ค์ง ๋จ์ผ-๋ฆฌ์์ค ๋ณธ๋ฌธ์ ๋ ๊ฐ์ ํค๋(Content-Type, Content-Length)๋ก ์ ์ํ๋ค.
- ๊ธธ์ด๋ฅผ ๋ชจ๋ฅด๋ ํ์ผ๋ก ๊ตฌ์ฑ๋ ๋จ์ผ-๋ฆฌ์์ค ๋ณธ๋ฌธ์ Transfer-Encoding์ด
chunked
๋ก ์ค์ ๋์ด ์์ผ๋ฉฐ, ํ์ผ์ chunk๋ก ๋๋์ด ์ธ์ฝ๋ฉ ๋์ด ์๋ค.
- Multiple-resource bodies(๋ค์ค-๋ฆฌ์์ค ๋ณธ๋ฌธ) : ์๋ก ๋ค๋ฅธ ์ ๋ณด๋ฅผ ๋ด๊ณ ์๋ body์ด๋ค.
Leave a comment