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๊ฐ€์ง€๋กœ ๋ถ„๋ฅ˜ํ•  ์ˆ˜ ์žˆ๋‹ค.

code
class
description

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?