HTTP / 0.9 ~ 1.1

HTTP(HyperText Transfer Protocol)

์›น ์ƒ์—์„œ ํด๋ผ์ด์–ธํŠธ์™€ ์„œ๋ฒ„ ๊ฐ„ ํ†ต์‹ ์„ ์œ„ํ•œ ํ”„๋กœํ† ์ฝœ. ์ฆ‰, ์ธํ„ฐ๋„ท์—์„œ ์›น ์„œ๋ฒ„์™€ ์‚ฌ์šฉ์ž ๋ธŒ๋ผ์šฐ์ € ์‚ฌ์ด์— ๋ฌธ์„œ๋ฅผ ์ „์†กํ•˜๊ธฐ ์œ„ํ•ด ์‚ฌ์šฉ๋˜๋Š” ํ†ต์‹  ๊ทœ์•ฝ์ด๋‹ค.

  • HTTP/number๋ผ๊ณ  ํ‘œ๊ธฐํ•˜๋Š”๋ฐ, ์—ฌ๊ธฐ์„œ number๋Š” ๋ฒ„์ „์„ ์˜๋ฏธํ•œ๋‹ค.

HTTP 0.9 : The One-line Protocol

// ์š”์ฒญ
GET /mypage.html

// ์‘๋‹ต
<HTML>
A very Simple HTML page
</HTML>

๋งค์šฐ ๊ฐ„๋‹จํ•œ ์š”์ฒญ๊ณผ ์‘๋‹ต๋งŒ ํฌํ•จ๋˜์–ด ์žˆ์—ˆ๊ณ  ํ™•์žฅํ•ด์„œ ์‚ฌ์šฉํ•˜๊ธฐ์—๋Š” ๋„ˆ๋ฌด ๊ฐ„๋‹จํ–ˆ๋‹ค.

๋ฉ”์„œ๋“œ๋„ Get๋งŒ ์กด์žฌํ–ˆ๊ณ  ์‘๋‹ต๋„ html๋งŒ ์ „์†ก์ด ๊ฐ€๋Šฅํ•˜๊ธฐ ๋•Œ๋ฌธ์— ๋‹ค๋ฅธ ์œ ํ˜•์˜ ๋ฌธ์„œ๋Š” ์ „์†ก๋  ์ˆ˜ ์—†๋‹ค.

HTTP 1.0

ํ—ค๋”๊ฐ€ ์ถ”๊ฐ€๋˜์—ˆ๊ณ , ์‘๋‹ต์—๋Š” ์ƒํƒœ์ฝ”๋“œ๋„ ์ถ”๊ฐ€๋˜์—ˆ๋‹ค. ๋˜ํ•œ ์ด๋ฏธ์ง€ ํŒŒ์ผ๋„ ์ „์†ก์ด ๊ฐ€๋Šฅํ•ด์ง

ํŠน์ง• : 1 Request & 1 Response per Connection

  • ์ปค๋„ฅ์…˜ ํ•˜๋‚˜๋‹น ์š”์ฒญ ํ•œ๊ฐœ, ์‘๋‹ต ํ•˜๋‚˜๋งŒ ์ฒ˜๋ฆฌ ๊ฐ€๋Šฅ

  • ๋งค๋ฒˆ ์ƒˆ๋กœ์šด ์—ฐ๊ฒฐ๋กœ ์„ฑ๋Šฅ ์ €ํ•˜

  • ์„œ๋ฒ„ ๋ถ€ํ•˜ ๋น„์šฉ ์ฆ๊ฐ€

HTTP 1.1

1.0์„ ๋ณด์™„ํ•˜๊ณ ์ž Pesistent Connection์„ ๋„์ž…ํ•œ๋‹ค. ์ง€์ •ํ•œ Timeout๋™์•ˆ ์ปค๋„ฅ์…˜์ด ๋‹ซํžˆ์ง€ ์•Š๋Š” ๋ฐฉ์‹์ด๋‹ค. ์ฆ‰, ๋‹จ์ผ ์—ฐ๊ฒฐ๋กœ ์—ฌ๋Ÿฌ ์š”์ฒญ์„ ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ๋‹ค. (TCP ์—ฐ๊ฒฐ์„ ์š”์ฒญ๋งˆ๋‹ค close(์ค‘๋‹จ)ํ•˜์ง€ ์•Š๊ณ  ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค.)

๐Ÿ”ฅ Persistenct Connection์ด ํ•„์š”ํ•œ ์ด์œ . (PC๋ผ๊ณ  ์ค„์ด๊ฒ ์Œ)

pc์‚ฌ์šฉํ•˜๋ฉด tcp ์—ฐ๊ฒฐ์—์„œ ํ•„์š”ํ•œ 3way handshake๋ฅผ request๋งˆ๋‹ค ํ•  ํ•„์š”๊ฐ€ ์—†๋‹ค.

  • tcp connection reqeust๊ฐ€ ๊ฐ์†Œํ•˜๊ธฐ ๋•Œ๋ฌธ์— "๋„คํŠธ์›Œํฌ ํ˜ผ์žก ๊ฐ์†Œ"

HTTP๋Š” ์ˆœ์ฐจ์ ์œผ๋กœ ์š”์ฒญ์„ ์ฒ˜๋ฆฌํ•˜๊ณ  ์‘๋‹ต์„ ์ฃผ๋Š”๋ฐ, ๋งŽ์€ ์š”์ฒญ์„ ์ฒ˜๋ฆฌํ•˜๊ธฐ์—๋Š” ๋Œ€๊ธฐ์‹œ๊ฐ„์ด ๋„ˆ๋ฌด ๊ธธ๊ธฐ ๋•Œ๋ฌธ์— Pipelining์„ ๋„์ž…ํ–ˆ๋‹ค.

  • Pipelining : ํ•˜๋‚˜์˜ ์ปค๋„ฅ์…˜์—์„œ ์‘๋‹ต์„ ๊ธฐ๋‹ค๋ฆฌ์ง€ ์•Š๊ณ  ์ˆœ์ฐจ์ ์ธ ์—ฌ๋Ÿฌ ์š”์ฒญ์„ ์—ฐ์†์ ์œผ๋กœ ๋ณด๋‚ด ๊ทธ ์ˆœ์„œ์— ๋งž์ถฐ ์‘๋‹ต์„ ๋ฐ›๋Š” ๋ฐฉ์‹์œผ๋กœ ์ง€์—ฐ ์‹œ๊ฐ„์„ ์ค„์ด๋Š” ๋ฐฉ๋ฒ•

ํ•˜์ง€๋งŒ Pipelining์€ HOL(Head Of Line) Blocking ๋ฌธ์ œ๊ฐ€ ์žˆ์—ˆ๋‹ค. HOL์€ ๋งŒ์•ฝ, ์ˆœ์ฐจ์ ์œผ๋กœ ์š”์ฒญ์ด ๋“ค์–ด์™”๋Š”๋ฐ ์ฒซ ๋ฒˆ์งธ ์š”์ฒญ์„ ์ฒ˜๋ฆฌํ•˜๋Š” ์‹œ๊ฐ„์ด ๋„ˆ๋ฌด ๊ธธ์–ด์ง€๋ฉด ๊ทธ ๋‹ค์Œ ์š”์ฒญ๋“ค๋„ ๋ฐ”๋กœ ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์—†๋‹ค.

์˜ˆ๋ฅผ ๋“ค์–ด, ์ฒซ ๋ฒˆ์งธ ์š”์ฒญ์˜ ์ฒ˜๋ฆฌ๊ฐ€ 30์ดˆ๊ฐ€ ๊ฑธ๋ฆฌ๊ณ  ๋‘ ๋ฒˆ์งธ ์š”์ฒญ์€ 1์ดˆ๊ฐ€ ๊ฑธ๋ฆฌ๋Š”๋ฐ, ์ฒซ ๋ฒˆ์งธ ์š”์ฒญ์˜ ์ฒ˜๋ฆฌ๊ฐ€ ๊ธธ์–ด์ง€๊ธฐ ๋•Œ๋ฌธ์— ์ฒ˜๋ฆฌ ์‹œ๊ฐ„์ด ์งง์€ ๋‘ ๋ฒˆ์งธ ์š”์ฒญ์ด block๋œ ์ƒํƒœ๋กœ ๋‚จ์•„์žˆ๋Š” ๊ฒƒ์ด๋‹ค.

HTTP Keep Alive

keep-alive๋Š” Persistenct Connection์˜ ๊ธฐ๋ฒ• ์ค‘ ํ•˜๋‚˜๋กœ, HTTP/1.0~ ์ดํ›„ ๋ฒ„์ „๋ถ€ํ„ฐ ์ง€์›ํ•œ๋‹ค.

HTTP/1.1์€ ๊ธฐ๋ณธ์ ์œผ๋กœ ํ™œ์„ฑํ™” ๋˜์–ด ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ๋ณ„๋„์˜ ์ปค๋„ฅ์…˜์— ๋Œ€ํ•œ ์„ค์ •์ด ์—†์œผ๋ฉด keep-alive๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค.

๋งŒ์•ฝ 1.1์—์„œ ์ปค๋„ฅ์…˜์„ closeํ•˜๋ ค๋ฉด ๋ช…์‹œ์ ์œผ๋กœ Connection: close ํ—ค๋”๋ฅผ ์ž‘์„ฑํ•ด์•ผ ํ•œ๋‹ค.

์œ„์—์„œ ์–˜๊ธฐํ–ˆ๋“ฏ์ด keep-alive ์˜ต์…˜์„ ํ™œ์„ฑํ™”ํ•˜๋ฉด request ๋งˆ๋‹ค connection์„ ๋Š์ง€ ์•Š๊ณ  ์ง€์†์ ์œผ๋กœ ์—ฐ๊ฒฐ์„ ์œ ์ง€ํ•˜๊ธฐ ๋•Œ๋ฌธ์— ๋„คํŠธ์›Œํฌ ๋ถ€ํ•˜์™€ latency๋ฅผ ์ค„์ผ ์ˆ˜ ์žˆ๋‹ค.

keep alive ์‚ฌ์šฉ๋ฒ•

keep-alive ์˜ต์…˜์„ ์‚ฌ์šฉํ•˜๋ ค๋ฉด ํด๋ผ์ด์–ธํŠธ๋Š” HTTP header์— ํฌํ•จ์‹œํ‚ค๊ณ , ์„œ๋ฒ„๋„ ํด๋ผ์ด์–ธํŠธ์˜ ์š”์ฒญ์„ ๋ฐ›๊ณ  ์—ฐ๊ฒฐ์„ ์œ ์ง€ํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” ์‘๋‹ต์— Connection: keep-aliveํ—ค๋”์™€ ์ถ”๊ฐ€ ์„ค์ •์„ ํฌํ•จ์‹œ์ผœ์•ผ ํ•œ๋‹ค.

timeout

  • ์ปค๋„ฅ์…˜์ด ์–ผ๋งˆ๋‚˜ ์œ ์ง€๋  ๊ฒƒ์ธ๊ฐ€๋ฅผ ์˜๋ฏธํ•œ๋‹ค. ์ด ์‹œ๊ฐ„ ๋™์•ˆ request๊ฐ€ ์—†์œผ๋ฉด connection์€ close ๋œ๋‹ค. ์ฆ‰, ๋ฐ์ดํ„ฐ๊ฐ€ ์ „์†ก๋˜์ง€ ์•Š์„ ๋•Œ, ์—ฐ๊ฒฐ์„ ์œ ์ง€ํ•˜๋Š” ์‹œ๊ฐ„(์ดˆ ๋‹จ์œ„)๋ฅผ ์ง€์ •ํ•˜๋Š” ๊ฒƒ์ด๋‹ค.

max (MaxKeepAliveRequest)

  • ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์žˆ๋Š” ์ตœ๋Œ€ HTTP ์š”์ฒญ ์ˆ˜๋ฅผ ์ง€์ •ํ•œ๋‹ค. ์ด๋Š” ์„œ๋ฒ„๊ฐ€ ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์žˆ๋Š” ์š”์ฒญ์˜ ์–‘์„ ์ œํ•œํ•˜์—ฌ ๋ฆฌ์†Œ์Šค๋ฅผ ํšจ์œจ์ ์œผ๋กœ ๊ด€๋ฆฌํ•œ๋‹ค. ์ง€์ •๋œ ์ˆ˜ ๋ณด๋‹ค ๋” ๋งŽ์€ request๋ฅผ ๋ฐ›๊ฒŒ ๋˜๋ฉด connection์€ close ๋œ๋‹ค.

์„ฑ๋Šฅ ์ตœ์ ํ™”๋ฅผ ์œ„ํ•ด์„œ๋Š” timeout๊ณผ max๊ฐ’์„ ์ ์ ˆํžˆ ์กฐ์ ˆํ•ด์•ผ ํ•œ๋‹ค.

Last updated