HTTP๋?
HyperText Transfer Protocol์ ์ค์๋ง๋ก, HTML๊ณผ ๊ฐ์ ๋ฌธ์๋ฅผ ์ ์กํ๊ธฐ ์ํ ํ๋กํ ์ฝ์ด๋ค.
HTTP Messages (ํด๋ผ์ด์ธํธ์ ์๋ฒ ์ฌ์ด์์ ๋ฐ์ดํฐ๊ฐ ๊ตํ๋๋ ๋ฐฉ์)
HTTP Messages ์ ์ ํ 2๊ฐ์ง
- ์์ฒญ(Requests)
- ์๋ต(Responses)
- start line : start line์๋ ์์ฒญ์ด๋ ์๋ต์ ์ํ๋ฅผ ๋ํ๋ธ๋ค. ํญ์ ์ฒซ ๋ฒ์งธ ์ค์ ์์นํฉ๋๋ค. ์๋ต์์๋ status line์ด๋ผ๊ณ ๋ถ๋ฅธ๋ค.
- HTTP headers : ์์ฒญ์ ์ง์ ํ๊ฑฐ๋, ๋ฉ์์ง์ ํฌํจ๋ ๋ณธ๋ฌธ์ ์ค๋ช ํ๋ ํค๋์ ์งํฉ์ด๋ค.
- empty line : ํค๋์ ๋ณธ๋ฌธ์ ๊ตฌ๋ถํ๋ ๋น ์ค.
- body : ์์ฒญ๊ณผ ๊ด๋ จ๋ ๋ฐ์ดํฐ๋ ์๋ต๊ณผ ๊ด๋ จ๋ ๋ฐ์ดํฐ ๋๋ ๋ฌธ์๋ฅผ ํฌํจํ๋ค. ์์ฒญ๊ณผ ์๋ต์ ์ ํ์ ๋ฐ๋ผ ์ ํ์ ์ผ๋ก ์ฌ์ฉํ๋ค.
HTTP์ ํฐ ํน์ง : Stateless
HTTP๋ก ํด๋ผ์ด์ธํธ์ ์๋ฒ๊ฐ ํต์ ์ ์ฃผ๊ณ ๋ฐ๋ ๊ณผ์ ์์, HTTP๊ฐ ํด๋ผ์ด์ธํธ๋ ์๋ฒ์ ์ํ๋ฅผ ํ์ธํ์ง ์๋๋ค.
์ฆ, ํด๋ผ์ด์ธํธ์์ ๋ฐ์ํ ์ด๋ฐ ๋ชจ๋ ์ํ๋ฅผ HTTP ํต์ ์ด ์ถ์ ํ์ง ์๋๋ค.
HTTP๋ ํต์ ๊ท์ฝ์ผ ๋ฟ์ด๋ฏ๋ก, ์ํ๋ฅผ ์ ์ฅํ์ง ์๋๋ค.
HTTP Requests
Start line
- ์ํํ ์์ (GET, PUT, POST ๋ฑ)์ด๋ ๋ฐฉ์(HEAD or OPTIONS)์ ์ค๋ช ํ๋ HTTP method๋ฅผ ๋ํ๋ธ๋ค.
- ์์ฒญ ๋์(์ผ๋ฐ์ ์ผ๋ก URL์ด๋ 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
- HTTP ๋ฒ์ ์ ๋ฐ๋ผ HTTP message์ ๊ตฌ์กฐ๊ฐ ๋ฌ๋ผ์ง๋ค. ๋ฐ๋ผ์ start line์ HTTP ๋ฒ์ ์ ํจ๊ป ์ ๋ ฅํ๋ค.
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์ฒ๋ผ ์๋ฒ์ ๋ฆฌ์์ค๋ฅผ ์์ฒญํ๋ ๊ฒฝ์ฐ์๋ ๋ณธ๋ฌธ์ด ํ์X) POST๋ PUT๊ณผ ๊ฐ์ ์ผ๋ถ ์์ฒญ์ ๋ฐ์ดํฐ๋ฅผ ์ ๋ฐ์ดํธํ๊ธฐ ์ํด ์ฌ์ฉ
[๋ณธ๋ฌธ์ ์ข ๋ฅ]
- 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์ ๊ฐ์ ์ํ ์ฝ๋๋ฅผ ๊ฐ์ง๋ ์๋ต์๋ ๋ณธ๋ฌธ์ด ํ์ํ์ง ์๋๋ค.)
- Single-resource bodies(๋จ์ผ-๋ฆฌ์์ค ๋ณธ๋ฌธ) :
- ๊ธธ์ด๊ฐ ์๋ ค์ง ๋จ์ผ-๋ฆฌ์์ค ๋ณธ๋ฌธ์ ๋ ๊ฐ์ ํค๋(Content-Type, Content-Length)๋ก ์ ์ํ๋ค.
- ๊ธธ์ด๋ฅผ ๋ชจ๋ฅด๋ ๋จ์ผ ํ์ผ๋ก ๊ตฌ์ฑ๋ ๋จ์ผ-๋ฆฌ์์ค ๋ณธ๋ฌธ์ Transfer-Encoding์ด chunked ๋ก ์ค์ ๋์ด ์์ผ๋ฉฐ, ํ์ผ์ chunk๋ก ๋๋์ด ์ธ์ฝ๋ฉ๋์ด ์๋ค.
- Multiple-resource bodies(๋ค์ค-๋ฆฌ์์ค ๋ณธ๋ฌธ) : ์๋ก ๋ค๋ฅธ ์ ๋ณด๋ฅผ ๋ด๊ณ ์๋ body๋ค.