HTTP(HyperText Transfer Protocol)
์น ๋ธ๋ผ์ฐ์ ์ ์น ์๋ฒ๊ฐ HTML, ์ด๋ฏธ์ง, JSON ๋ฑ ๋ค์ํ ๋ฐ์ดํฐ๋ฅผ ์ฃผ๊ณ ๋ฐ๊ธฐ ์ํด ์ฌ์ฉํ๋ ์ ํ๋ฆฌ์ผ์ด์ ๊ณ์ธต ํ๋กํ ์ฝ์ด๋ค.
์ญ์ฌ
๋จ์ํ ํ ์คํธ ์ ์ก์์ ์์ํด, ์ฑ๋ฅ ์ต์ ํ์ ๋ณด์ ๊ฐํ๋ฅผ ๋ชฉ์ ์ผ๋ก ์ง์์ ์ผ๋ก ๋ฐ์ ํด์๋ค.
HTTP/0.9
1991
GET ๋ฉ์๋๋ง ์ง์, ํค๋ ์์, HTML๋ง ์ ์ก ๊ฐ๋ฅ
TCP
HTTP/1.0
1996
ํค๋ ๋์ , ์ํ ์ฝ๋ ์ถ๊ฐ, Content-Type ์ง์(๋ฉํฐ๋ฏธ๋์ด ์ ์ก ๊ฐ๋ฅ)
TCP
HTTP/1.1
1997
ํ์ฌ ๊ฐ์ฅ ๋๋ฆฌ ์ฐ์. ์ง์ ์ฐ๊ฒฐ(Keep-Alive), ํ์ดํ๋ผ์ด๋, ์บ์ ์ ์ด ํฅ์
TCP
HTTP/2
2015
์ฑ๋ฅ ๊ฐ์ ๋ชฉ์ . ๋ฉํฐํ๋ ์ฑ(ํ ์ปค๋ฅ์ ์ผ๋ก ๋์ ์ ์ก), ํค๋ ์์ถ(HPACK), ์๋ฒ ํธ์
TCP
HTTP/3
2022
QUIC ํ๋กํ ์ฝ ๊ธฐ๋ฐ. TCP์ ๊ตฌ์กฐ์ ๋ฌธ์ (HOL Blocking) ํด๊ฒฐ, ํธ๋์ ฐ์ดํฌ ์ต์ํ
UDP (QUIC)
HTTP/3์ UDP
HTTP/3๋ TCP๊ฐ ์๋ UDP ๊ธฐ๋ฐ์ QUIC ํ๋กํ ์ฝ์ ์ฌ์ฉํ๋ค.
TCP๋ ํจํท ํ๋๋ง ์ ์ค๋์ด๋ ์ ์ฒด ๋ฐ์ดํฐ ์ฒ๋ฆฌ๊ฐ ์ค๋จ๋๋ HOL(Head of Line) Blocking ๋ฌธ์ ๊ฐ ๋ฐ์
UDP๋ฅผ ํ๋ํ์ฌ ์ ๋ขฐ์ฑ์ ํ๋ณดํ๋ฉด์๋ ์ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๊ณ ์ฐ๊ฒฐ ์๋ฆฝ ์๋ ๋จ์ถ
HTTP ํน์ง
ํด๋ผ์ด์ธํธ-์๋ฒ ๊ตฌ์กฐ: ๋ฆฌ์์ค๋ฅผ ์์ฒญํ๋ ํด๋ผ์ด์ธํธ์ ๋ฆฌ์์ค๋ฅผ ์ ๊ณตํ๋ ์๋ฒ๋ก ๋ถ๋ฆฌ
๋ฌด์ํ(Stateless): ์๋ฒ๊ฐ ํด๋ผ์ด์ธํธ์ ์ด์ ์ํ๋ฅผ ๋ณด์กดํ์ง ์์
์ฅ์ : ์๋ฒ ํ์ฅ์ฑ์ด ๋์
๋จ์ : ๋ก๊ทธ์ธ ์ ์ง ๋ฑ์ ์ํ ์ฟ ํค๋ ์ธ์ ๊ฐ์ ๋ณ๋์ ๊ธฐ์ ํ์
๋น์ฐ๊ฒฐ์ฑ(Connectionless): ๊ธฐ๋ณธ์ ์ผ๋ก ์์ฒญ์ ์ฒ๋ฆฌํ ํ ์ฐ๊ฒฐ์ ๋์ด ๋ฆฌ์์ค๋ฅผ ์ ์ฝ
๋งค ์์ฒญ๋ง๋ค TCP ์ฐ๊ฒฐ์ ์๋ก ๋งบ๋ ์ค๋ฒํค๋๋ฅผ ์ค์ด๊ธฐ ์ํด HTTP/1.1๋ถํฐ๋
Keep-Alive๋ฅผ ํตํด ์ฐ๊ฒฐ์ ์ ์งํ๋ ๊ธฐ๋ฅ ๋์
์ ์ก ๋ฐฉ์
๋ฐ์ดํฐ์ ํฌ๊ธฐ์ ์ฑ๊ฒฉ์ ๋ฐ๋ผ ๋ค์ํ ์ ์ก ๋ฐฉ์์ ์ฌ์ฉํ๋ค.
๋จ์ ์ ์ก
Content-Length
๋ฐ์ดํฐ์ ์ ์ฒด ํฌ๊ธฐ๋ฅผ ๋ฏธ๋ฆฌ ์๊ณ ์์ ๋ ์ฌ์ฉํ๋ฉฐ, ํ ๋ฒ์ ์ ์ก
์์ถ ์ ์ก
Content-Encoding
gzip ๋ฑ์ผ๋ก ๋ฐ์ดํฐ๋ฅผ ์์ถํ์ฌ ์ ์ก๋ ์ ๊ฐ
๋ถํ ์ ์ก
Transfer-Encoding: chunked
์ฉ๋์ด ํฐ ๋ฐ์ดํฐ๋ฅผ ์ ์กํ ๋, ์ ์ฒด ํฌ๊ธฐ๋ฅผ ๋ชจ๋ฅด๋๋ผ๋ ์กฐ๊ธ์ฉ ์ชผ๊ฐ์(Chunk) ์ ์ก
๋ฒ์ ์ ์ก
Range, Content-Range
๋ฐ์ดํฐ์ ์ผ๋ถ๋ถ๋ง ์์ฒญํ๊ฑฐ๋ ์๋ตํ
์์ฒญ๊ณผ ์๋ต ๋ฉ์์ง ๊ตฌ์กฐ
HTTP ํต์ ์ ๋ช ํํ ํ ์คํธ ๊ธฐ๋ฐ์ ๋ฉ์์ง ๊ตฌ์กฐ๋ฅผ ๊ฐ์ง๋ค.
Start Line: ์์ฒญ ๋ผ์ธ(๋ฉ์๋, ๊ฒฝ๋ก, ๋ฒ์ ) ๋๋ ์ํ ๋ผ์ธ(๋ฒ์ , ์ํ ์ฝ๋, ๋ฌธ๊ตฌ)
Headers: HTTP ์ ์ก์ ํ์ํ ๋ฉํ ๋ฐ์ดํฐ
Body: ์ค์ ์ ์กํ ๋ฐ์ดํฐ (HTML, ์ด๋ฏธ์ง, JSON ๋ฑ)
Content Negotiation
ํด๋ผ์ด์ธํธ๊ฐ ์๋ฒ์๊ฒ ์ด๋ค ์ปจํ ์ธ ๋ฅผ ์ํ๋์ง ์๋ ค์ฃผ๋ ๊ธฐ๋ฅ์ผ๋ก, , ์๋ฒ๊ฐ ๊ทธ์ ๋ง์ถฐ ๊ฐ์ฅ ์ ์ ํ ํํ์ ๋ฆฌ์์ค๋ฅผ ์ ๊ณตํ๋ ๋ฉ์ปค๋์ฆ์ด๋ค.
ํด๋ผ์ด์ธํธ๋
request message์ Accept* ํค๋ ํ๋๋ฅผ ์ฌ์ฉํ์ฌ ์์ฒญ์๋ฒ๋
response message์ Content* ํค๋ ํ๋๋ฅผ ์ฌ์ฉํ์ฌ ์๋ต์ธ์ด ํ๊ทธ(
Accept-Language) / ๋ฌธ์์ (Accept-Charset) / ์ธ์ฝ๋ฉ(Accept-Encoding) / ๋ฏธ๋์ด ํ์ (Accept) ๋ฑ์ ์ฌ์ฉ0 ~ 1 ์ฌ์ด์ Quality Value(QValue)๋ฅผ ์ฌ์ฉํ์ฌ ์ฐ์ ์์๋ฅผ ๋ํ๋(
Accept-Language: ko-KR, en-US;q=0.9, en;q=0.8)
Status Code
request์ ๋ํ ์๋ฒ์ ์๋ต ์ํ๋ฅผ ๋ํ๋ด๋ ์ธ ์๋ฆฌ ์ซ์ ์ฝ๋๋ก ๊ตฌ์ฑ๋์ด ์์ผ๋ฉฐ, ์๋ต ์ํ๋ฅผ ํฌ๊ฒ 5๊ฐ์ง๋ก ๋ถ๋ฅํ ์ ์๋ค.
1xx
information
๋ฆฌํ์คํธ๋ฅผ ๋ฐ์๋ค์ฌ ์ฒ๋ฆฌ ์ค
2xx
success
๋ฆฌํ์คํธ ์ ์ ์ฒ๋ฆฌ
3xx
redirection
๋ฆฌํ์คํธ๋ฅผ ์๋ฃํ๋ ค๋ฉด ์ถ๊ฐ ํ๋ ํ์
4xx
client error
๋ฆฌํ์คํธ ์ดํด ๋ถ๊ฐ๋ฅ
5xx
server error
์๋ฒ๊ฐ ๋ฆฌํ์คํธ ์ฒ๋ฆฌ ์คํจ
์์ธํ ๋ด์ฉ์ HTTP Status ์ฐธ๊ณ
MIME (Multipurpose Internet Mail Extensions)
๋ณธ๋ ์ด๋ฉ์ผ ์ ์ก์ ์ํด ๋ง๋ค์ด์ก์ผ๋, ํ์ฌ๋ ์น์์ ์ ์ก๋๋ ๋ชจ๋ ๋ฐ์ดํฐ์ ํ์์ ๋ช
์ํ๊ธฐ ์ํด Content-Type ํค๋์ ๊ธฐ์ฌ๋๋ค.
์ด๋ฏธ์ง ๋ฑ์ ๋ฐ์ด๋๋ฆฌ ๋ฐ์ดํฐ๋ฅผ ์์คํค(ASCII) ๋ฌธ์์ด์ ์ธ์ฝ๋ฉํ๋ ๋ฐฉ๋ฒ๊ณผ ๋ฐ์ดํฐ ์ข ๋ฅ๋ฅผ ๋ํ๋ด๋ ๋ฐฉ๋ฒ ๋ฑ์ ๊ท์
ํ์ฅ ์ฌ์์ ์๋ ๋ฉํฐํํธ(Multipart)๋ผ๊ณ ํ๋ ์ฌ๋ฌ ๋ค๋ฅธ ์ข ๋ฅ์ ๋ฐ์ดํฐ๋ฅผ ์์ฉํ๋ ๋ฐฉ๋ฒ ์ฌ์ฉ
HTTP๋ ๋ฉํฐํํธ์ ๋์ํ๊ณ ์์ด ํ๋์ ๋ฉ์์ง ๋ฐ๋ ๋ด๋ถ์ ์ฌ๋ฌ ์ํฐํฐ๋ฅผ ํฌํจ์ํฌ ์ ์์์ ์ก ๋ฐฉ์
text/html: HTML ๋ฌธ์application/json: JSON ๋ฐ์ดํฐ (API ํต์ ํ์ค)image/png,image/jpeg: ์ด๋ฏธ์ง ํ์ผmultipart/form-data: HTML Form์ ํตํด ํ์ผ๊ณผ ํ ์คํธ ๋ฐ์ดํฐ๋ฅผ ํจ๊ป ์ ์กํ ๋ ์ฌ์ฉ. ๊ฐ ํํธ๋ง๋ค ๊ฒฝ๊ณ(Boundary)๋ก ๊ตฌ๋ถํ์ฌ ์ ์กํ๋ค.
์ฐธ๊ณ ์๋ฃ
Last updated
Was this helpful?