HTTP
HTTP(Hyper Text Transfer Protocol)๋?
์๋ฒ-ํด๋ผ์ด์ธํธ(2ํฐ์ด ์ํคํ
์ฒ)์์ ๋ฐ์ดํฐ๋ฅผ ์ฃผ๊ณ ๋ฐ๊ธฐ ์ํ ํ๋กํ ์ฝ์ด๋ค. HTML ๋ฌธ์(Hyper text), ์ด๋ฏธ์ง, ๋น๋์ค ๋ฑ๊ณผ ๊ฐ์ ๋ฆฌ์์ค๋ฅผ ๊ตํํ๊ธฐ ์ํ ํต์ ๊ท์ฝ์ผ๋ก, ๋ณดํต 80๋ฒ ํฌํธ๋ฅผ ์ฌ์ฉํ๊ณ ์๋ค.
HTTP์ ํน์ง
- ํค๋์ ํ์ฅ์ด ๊ฐ๋ฅ
โก๏ธ Authentication, Caching, Conditionals, Cookies, CORS, Redirects ... ๋ฑ ๋ง์ ๊ธฐ๋ฅ์ด ์๊ณ ์์ธํ ์ค๋ช
์ HTTP-Header MDN ์ ์ฐธ๊ณ ํ๋ฉด ๋๋ค.
- ๋ฌด์ํ์ฑ(Stateless)
- ๋น์ฐ๊ฒฐ์ฑ(Connectionless) : ์ต์ํ ์์์ผ๋ก ์๋ฒ ์ ์ง ๊ฐ๋ฅ
โก๏ธ ํธ๋ํฝ์ด ๋ง๊ณ , ํฐ ๊ท๋ชจ์ ์๋น์ค๋ฅผ ์ด์ํ ๊ฒฝ์ฐ ํ๊ณ๋ฅผ ๋๋
โก๏ธ ์ง๊ธ์ HTTP ์ง์ ์ฐ๊ฒฐ(Persistent Connections)๋ก ๋ฌธ์ ํด๊ฒฐ
์ํ์ฑ vs ๋ฌด์ํ์ฑ
ํด๋ผ์ด์ธํธ์ ์ค๊ณ์๋ฒ ๊ทธ๋ฆฌ๊ณ ๊ฐ์ ๊ธฐ๋ฅ์ ํ๋ ์ฌ๋ฌ ๋์ ์๋ฒ(A,B,C)๊ฐ ์๋ค๊ณ ๊ฐ์ ํ๋ค.
์ํ์ฑ(stateful)์ธ ๊ฒฝ์ฐ
ํด๋ผ์ด์ธํธ๊ฐ ์ค๊ณ์๋ฒ๋ฅผ ํตํด A์๋ฒ์๊ฒ ์์ฒญ์ํ๊ณ , ํด๋ผ์ด์ธํธ์ ๋ํ ์ํ์ ๋ณด๋ A์๋ฒ์๊ฒ๋ง ์ ์ง๋๋ค.
๋ง์ฝ A์๋ฒ์ ๋ฌธ์ ๊ฐ ์๊ฒผ์ ๊ฒฝ์ฐ ํด๋ผ์ด์ธํธ์ ๋ํ ์ํ์ ๋ณด๊ฐ ๋ค ๋ ๋ผ๊ฐ๊ธฐ ๋๋ฌธ์ ๋ค๋ฅธ ์๋ฒ(B,C)์๊ฒ ๋ค์ ์ฒ์๋ถํฐ ์์ฒญ์ ํด์ผํ๋ค.
๋ฌด์ํ์ฑ(stateless)์ธ ๊ฒฝ์ฐ
ํด๋ผ์ด์ธํธ๊ฐ ์ ์ด์ ํ์ํ ์ ๋ณด๋ค์ ๋ด์ ์๋ฒ์๊ฒ ๋ณด๋ด๊ธฐ ๋๋ฌธ์ ์๋ฌด ์๋ฒ๋ ํธ์ถํด๋ ๋๋ค.
๋ง์ฝ A์๋ฒ์ ๋ฌธ์ ๊ฐ ์๊ฒผ์ ๊ฒฝ์ฐ ๋ค๋ฅธ ์๋ฒ(B,C)์๊ฒ ์๋ต์ ์ ๋ฌํ๋ฉด ๋๊ธฐ ๋๋ฌธ์ ํด๋ผ์ด์ธํธ๋ ๋ค์ ์ฌ์์ฒญ์ ํ ํ์๊ฐ ์๋ค.
๋ฌด์ํ์ฑ์ ์๋ต ์๋ฒ๋ฅผ ์ธ์ ๋ ๋ฐ๊ฟ ์ ์๊ธฐ ๋๋ฌธ์ ๋ฌดํ ์๋ฒ ์ฆ์ค์ด ๊ฐ๋ฅํ๋ค.
๋ฌด์ํ์ฑ์ ํ๊ณ
- ๋ชจ๋ ๊ฒ์ ๋ฌด์ํ์ฑ์ผ๋ก ์ค๊ณํ ์๋ ์๋ค.
- ์ํ์ ์ง๊ฐ ํ์ํ ๊ฒฝ์ฐ(ex. ๋ก๊ทธ์ธํ์ ๊ฒฝ์ฐ) ํค๋์ ์ฟ ํค๋ฅผ ๋ด์์ ๋ณด๋ด๊ฑฐ๋, ์๋ฒ ์ธ์
์ ์ด์ฉํ๋ ๋ฑ์ ํ์ฉํด์ผ ํ๋ค.
์ด๋ ์ํ๋ ์ต์ํ๋ง ์ ์งํด์ผ ํ๋ค.
HTTP ํ๋ฆ
- 2ํฐ์ด ์ํคํ
์ฒ
- 3ํฐ์ด ์ํคํ
์ฒ
HTTP ๋ฉ์ธ์ง
HTTP ์์ฒญ๊ณผ ์๋ต์ ๊ตฌ์กฐ๋ ์๋ก ๋ฎ์๋ค.
- ์์ ์ค(start-line) : ์คํ๋์ด์ผ ํ ์์ฒญ, ๋์ ์์ฒญ ์ํ์ ๋ํ ์ฑ๊ณต ๋๋ ์คํจ๊ฐ ๊ธฐ๋ก๋์ด์๋ค. ์ด ์ค์ ํญ์ ํ ์ค๋ก ๋๋๋ค.
- ํค๋(HTTP headers) : ์์ฒญ์ ๋ํ ์ค๋ช
, ํน์ ๋ฉ์์ง ๋ณธ๋ฌธ์ ๋ํ ์ค๋ช
์ด ๋ค์ด๊ฐ๋ค.
- ๋น ์ค(empty line) : ์์ฒญ์ ๋ํ ๋ชจ๋ ๋ฉํ ์ ๋ณด๊ฐ ์ ์ก๋์์์ ์๋ฆฐ๋ค.
- ๋ณธ๋ฌธ(body) : ์์ฒญ๊ณผ ๊ด๋ จ๋ ๋ด์ฉ(HTML ํผ ์ฝํ
์ธ ๋ฑ)์ด ์ต์
์ผ๋ก ๋ค์ด๊ฐ๊ฑฐ๋, ์๋ต๊ณผ ๊ด๋ จ๋ ๋ฌธ์(document)๊ฐ ๋ค์ด๊ฐ๋ค. ๋ณธ๋ฌธ์ ์กด์ฌ ์ ๋ฌด ๋ฐ ํฌ๊ธฐ๋ ์ฒซ ์ค๊ณผ HTTP ํค๋์ ๋ช
์๋๋ค.
HTTP ๋ฉ์์ง์ ์์ ์ค๊ณผ HTTP ํค๋๋ฅผ ๋ฌถ์ด์ ์์ฒญ ํค๋(head)๋ผ๊ณ ๋ถ๋ฅด๋ฉฐ, HTTP ๋ฉ์์ง์ ํ์ด๋ก๋(payload)๋ ๋ณธ๋ฌธ(body)์ด๋ผ๊ณ ํ๋ค.
์์ฒญ(Request) ๋ฉ์ธ์ง
1. ์์์ค(start-line)
- ๋ฉ์๋(Method) : ์ํํ ์์
(GET, PUT, POST ๋ฑ)์ด๋ ๋ฐฉ์(HEAD or OPTIONS)์ ์ค๋ช
ํ๋ HTTP method๋ฅผ ๋ํ๋ธ๋ค. ์๋ฅผ ๋ค์ด GET method๋ ๋ฆฌ์์ค๋ฅผ ๋ฐ์์ผ ํ๊ณ , POST method๋ ๋ฐ์ดํฐ๋ฅผ ์๋ฒ๋ก ์ ์กํ๋ค.
โก๏ธ ์ข
๋ฅ : GET, POST, PUT, OPTIONS ๋ฑ๋ฑ
- ๊ฒฝ๋ก(Path) : ์ฃผ๋ก URL๋ก ๋ํ๋ด๊ณ ํ๋กํ ์ฝ, ํฌํธ, ๋๋ฉ์ธ์ ์ ๋ ๊ฒฝ๋ก๋ก๋ ๋ํ๋ผ ์๋ ์์ผ๋ฉฐ ํฌ๋งท์ HTTP ๋ฉ์๋์ ๋ฐ๋ผ ๋ฌ๋ผ์ง๋ค.
โก๏ธ origin ํ์ : ๋์ '?'์ ์ฟผ๋ฆฌ ๋ฌธ์์ด์ด ๋ถ๋ ์ ๋ ๊ฒฝ๋ก๋ค. GET, POST, HEAD, OPTIONS ๋ฉ์๋์ ํจ๊ป ์ฌ์ฉํ๋ค.
- POST / HTTP 1.1
- GET /background.png HTTP/1.0
- HEAD /test.html?query=alibaba HTTP/1.1
- OPTIONS /anypage.html HTTP/1.0
- ๋ฒ์ (Version of the Protocol) : ๋ฉ์์ง์ ๋จ์ ๊ตฌ์กฐ๋ฅผ ๊ฒฐ์ ํ๊ธฐ ๋๋ฌธ์, ์๋ต ๋ฉ์์ง์์ ์จ์ผ ํ HTTP ๋ฒ์ ์ ์๋ ค์ฃผ๋ ์ญํ ์ ํ๋ค.
๊ธฐ๋ณธ์ ์ธ ํฌ๋งท์ ๋์๋ฌธ์ ๊ตฌ๋ถ์์ด ๋ฌธ์์ด ๋ค์ ํด๋ก ์ด ์ค๊ณ , ํด๋นํ๋ ๊ฐ์ ์ด๋ค ํค๋๋์ ๋ฐ๋ผ ๋ค๋ฅด๋ค. ๋ค์๊ณผ ๊ฐ์ด ๊ทธ๋ฃน์ ๋๋ ์ ์๋ค.
- Request ํค๋ : fetch๋ฅผ ํตํด ๊ฐ์ ธ์ฌ ๋ฆฌ์์ค๋ ํด๋ผ์ด์ธํธ ์์ฒด์ ๋ํ ์์ธํ ์ ๋ณด๋ฅผ ํฌํจํ๋ ํค๋๋ฅผ ์๋ฏธํ๋ค. User-Agent, Accept-Type, Accept-Language๊ณผ ๊ฐ์ ํค๋๋ ์์ฒญ์ ๋ณด๋ค ๊ตฌ์ฒดํํ๊ณ Referer์ฒ๋ผ ์ปจํ
์คํธ๋ฅผ ์ ๊ณตํ๊ฑฐ๋ If-None๊ณผ ๊ฐ์ด ์กฐ๊ฑด์ ๋ฐ๋ผ ์ ์ฝ์ ์ถ๊ฐํ ์ ์๋ค.
- General ํค๋ : ๋ฉ์์ง ์ ์ฒด์ ์ ์ฉ๋๋ ํค๋๋ก, body๋ฅผ ํตํด ์ ์ก๋๋ ๋ฐ์ดํฐ์๋ ๊ด๋ จ์ด ์๋ค.
- Entity ํค๋ : body์ ๋ด๊ธด ๋ฆฌ์์ค์ ์ ๋ณด(์ปจํ
์ธ ๊ธธ์ด, MIME ํ์
๋ฑ)๋ฅผ ํฌํจํ๋ค.
3. ๋ณธ๋ฌธ(body)
- ๋ชจ๋ ์์ฒญ์ body๊ฐ ํ์ํ์ง๋ ์๋ค.
GET, HEAD, DELETE, OPTIONS์ฒ๋ผ ์๋ฒ์ ๋ฆฌ์์ค๋ฅผ ์์ฒญํ๋ ๊ฒฝ์ฐ์๋ ๋ณธ๋ฌธ์ด ํ์ํ์ง ์๋ค.
- POST๋ PUT๊ณผ ๊ฐ์ ์ผ๋ถ ์์ฒญ์ ๋ฐ์ดํฐ๋ฅผ ์
๋ฐ์ดํธ(์์ )ํ๊ธฐ ์ํด ์ฌ์ฉํ๋ค.
- body๋ ๋ค์๊ณผ ๊ฐ์ด ๋ ์ข
๋ฅ๋ก ๋๋ ์ ์๋ค.
- Single-resource bodies(๋จ์ผ-๋ฆฌ์์ค ๋ณธ๋ฌธ) : ํค๋ ๋ ๊ฐ(Content-Type๊ณผ Content-Length)๋ก ์ ์๋ ๋จ์ผ ํ์ผ๋ก ๊ตฌ์ฑ๋๋ค.
- Multiple-resource bodies(๋ค์ค-๋ฆฌ์์ค ๋ณธ๋ฌธ) : ์ฌ๋ฌ ํํธ๋ก ๊ตฌ์ฑ๋ ๋ณธ๋ฌธ์์๋ ๊ฐ ํํธ๋ง๋ค ๋ค๋ฅธ ์ ๋ณด๋ฅผ ์ง๋๊ณ ๋ณดํต HTML form๊ณผ ๊ด๋ จ์ด ์๋ค.
์๋ต(Response) ๋ฉ์ธ์ง
1. ์์์ค(start-line)
- ๋ฒ์ (Version of the protocol) : ํ์ฌ ํ๋กํ ์ฝ์ ๋ฒ์ ์ ๋ํ๋ด๊ณ ๋ณดํต HTTP/1.1์ด๋ค.
- ์ํ ์ฝ๋(status code) : ์์ฒญ์ ์ฑ๊ณต ์ฌ๋ถ๋ฅผ ์ฝ๋๋ฅผ ํตํด ํํํ๋ค.
โก๏ธ ์ข
๋ฅ : 200(GET ์์ฒญ ์ฑ๊ณต), 201(POST ์์ฒญ ์ฑ๊ณต), 400(์์ฒญ ์คํจ), 500(์คํจ, ์๋ฒ ๋ฌธ์ ) ... ๊ทธ ์ธ ์ํ์ฝ๋๋ ์ฌ๊ธฐ๋ฅผ ์ฐธ๊ณ ํ๋ฉด ๋๋ค.
- ์ํ ํ
์คํธ(status message) : ์ํ ์ฝ๋์ ๋ํ ์ค๋ช
์ ๋ํ๋ธ๋ค. ์๋ต์ ๋ณด๋ผ ๋ ์งง์ ๋ฌธ์ฅ์ ์จ์ ์ํ๋ฅผ ์ฝ๊ฒ ์ดํดํ๊ธฐ ์ํ ์ฉ๋์ด๋ค.
๊ธฐ๋ณธ์ ์ธ ํฌ๋งท์ ๋์๋ฌธ์ ๊ตฌ๋ถ์์ด ๋ฌธ์์ด ๋ค์ ํด๋ก ์ด ์ค๊ณ , ํด๋นํ๋ ๊ฐ์ ์ด๋ค ํค๋๋์ ๋ฐ๋ผ ๋ค๋ฅด๋ค. ๋ค์๊ณผ ๊ฐ์ด ๊ทธ๋ฃน์ ๋๋ ์ ์๋ค.
- Response headers : ์์น ๋๋ ์๋ฒ ์์ฒด์ ๋ํ ์ ๋ณด(์ด๋ฆ, ๋ฒ์ ๋ฑ)์ ๊ฐ์ด ์๋ต์ ๋ํ ๋ถ๊ฐ์ ์ธ ์ ๋ณด๋ฅผ ๊ฐ๊ณ , Vary, Accept-Ranges์ ๊ฐ์ด ์ํ ์ค์ ๋ฃ๊ธฐ์๋ ๊ณต๊ฐ์ด ๋ถ์กฑํ๋ ์ถ๊ฐ ์ ๋ณด๋ฅผ ์ ๊ณตํ๋ค.
- General headers : ๋ฉ์์ง ์ ์ฒด์ ์ ์ฉ๋๋ฉฐ body๋ฅผ ํตํด ์ ์ก๋๋ ๋ฐ์ดํฐ์๋ ๊ด๋ จ์ด ์๋ค.
- Entity headers : body์ ๋ด๊ธด ๋ฆฌ์์ค์ ์ ๋ณด(์ปจํ
์ธ ๊ธธ์ด, MIME ํ์
๋ฑ)๋ฅผ ํฌํจํ๋ค.
3. ๋ณธ๋ฌธ(body)
- ๋ชจ๋ ์๋ต์ body๊ฐ ํ์ํ์ง๋ ์์ผ๋ฉฐ 201, 204์ ๊ฐ์ ์ํ ์ฝ๋๋ฅผ ๊ฐ์ง๋ ์๋ต์๋ ๋ณธ๋ฌธ์ด ํ์ํ์ง ์๋ค.
- ์๋ต์ body๋ ๋ค์๊ณผ ๊ฐ์ด ๋ ์ข
๋ฅ๋ก ๋๋ ์ ์๋ค.
- Single-resource bodies(๋จ์ผ-๋ฆฌ์์ค ๋ณธ๋ฌธ) : ๊ธธ์ด๊ฐ ์๋ ค์ง ๋จ์ผ-๋ฆฌ์์ค ๋ณธ๋ฌธ์ ๋ ๊ฐ์ ํค๋(Content-Type, Content-Length)๋ก ์ ์ํ๋ค. ๊ธธ์ด๋ฅผ ๋ชจ๋ฅด๋ ๋จ์ผ ํ์ผ๋ก ๊ตฌ์ฑ๋ ๋จ์ผ-๋ฆฌ์์ค ๋ณธ๋ฌธ์ ransfer-Encoding์ด chunked ๋ก ์ค์ ๋์ด ์์ผ๋ฉฐ, ํ์ผ์ chunk๋ก ๋๋์ด ์ธ์ฝ๋ฉ๋์ด ์๋ค.
- Multiple-resource bodies(๋ค์ค-๋ฆฌ์์ค ๋ณธ๋ฌธ) : ์๋ก ๋ค๋ฅธ ์ ๋ณด๋ฅผ ๋ด๊ณ ์๋ค.
HTTP์ ์ญ์ฌ
- HTTP/1.1, HTTP/2 : TCP ๊ธฐ๋ฐ
- HTTP/3 : UDP ๊ธฐ๋ฐ