Skip to content

Latest commit

ย 

History

History
135 lines (119 loc) ยท 7.29 KB

2021-03-12-http-versions.md

File metadata and controls

135 lines (119 loc) ยท 7.29 KB

HTTP ํ”„๋กœํ† ์ฝœ 1.0 vs 1.1 vs 2.0

1. HTTP 1.0

  • ๋ธŒ๋ผ์šฐ์ € ์นœํ™”์ ์ธ ํ”„๋กœํ† ์ฝœ
  • ์š”์ฒญ ๋ฐ ์‘๋‹ต์— ๋Œ€ํ•œ ๋ฉ”ํƒ€ ๋ฐ์ดํ„ฐ๋ฅผ ํฌํ•จํ•˜๋Š” ํ—ค๋” ํ•„๋“œ ์ œ๊ณต(Status code, Content-Type ๋“ฑ)
  • Response: Content-Type์— Http ํŒŒ์ผ ์™ธ์—๋„ ์Šคํฌ๋ฆฝํŠธ, ์Šคํƒ€์ผ ์‹œํŠธ, ๋ฏธ๋””์–ด ๋“ฑ์„ ์ „์†ก ๊ฐ€๋Šฅ
  • Method: GET, HEAD, POST
  • Connection ํŠน์„ฑ: ์‘๋‹ต ์งํ›„ ์ข…๋ฃŒ
(Connection 1 Establishment - TCP Three-Way Handshake)
Connected to xxx.xxx.xxx.xxx

(Request)
GET /my-page.html HTTP/1.0 
User-Agent: NCSA_Mosaic/2.0 (Windows 3.1)

(Response)
HTTP/1.0 200 OK 
Content-Type: text/html 
Content-Length: 137582
Expires: Thu, 01 Dec 1997 16:00:00 GMT
Last-Modified: Wed, 1 May 1996 12:45:26 GMT
Server: Apache 0.84
<HTML> 
A page with an image
  <IMG SRC="/myimage.gif">
</HTML>

(Connection 1 Closed - TCP Teardown)

HTTP 1.0

  • ๋‹จ์ : ๊ฐ ๋ชจ๋“  ์š”์ฒญ์— ๋”ฐ๋ผ ์ƒˆ๋กœ์šด ์—ฐ๊ฒฐ์„ ์—ด๊ณ , ์‘๋‹ต์ด ์ „์†ก๋œ ํ›„ ์ฆ‰์‹œ ๋‹ซ๊ธฐ ๋•Œ๋ฌธ์— ์ƒˆ๋กœ์šด ์—ฐ๊ฒฐ์ด ์„ค์ • ๋  ๋•Œ๋งˆ๋‹ค TCP 3-way Handshake๊ฐ€ ๋ฐœ์ƒํ•จ.

2. HTTP 1.1

2.1 HTTP 1.1์ด๋ž€?

  • ์˜ค๋Š˜๋‚  ๊ฐ€์žฅ ๋งŽ์ด ์‚ฌ์šฉ๋˜๋Š” HTTP ๋ฒ„์ „
  • ์˜๊ตฌ ๋ฐ ํŒŒ์ดํ”„ ๋ผ์ธ ์—ฐ๊ฒฐ, ์••์ถ•/์••์ถ• ํ•ด์ œ, ๊ฐ€์ƒ ํ˜ธ์ŠคํŒ…, ์บ์‹œ ๋“ฑ์ด ์ถ”๊ฐ€๋˜์–ด ์‘๋‹ต์†๋„๊ฐ€ ๋นจ๋ผ์ง€๊ณ  ๋Œ€์—ญํญ์ด ์ ˆ์•ฝ๋˜๋Š” ๋“ฑ ์„ฑ๋Šฅ ์ตœ์ ํ™” ๋ฐ ๊ธฐ๋Šฅ ํ–ฅ์ƒ
  • Upgrade๋กœ WebSocket ์ „ํ™˜ ๊ฐ€๋Šฅ
  • Method: GET, HEAD, POST, PUT, DELETE, TRACE, OPTIONS
  • Connection ํŠน์„ฑ: long-lived
(Connection 1 Establishment - TCP Three-Way Handshake)
Connected to xxx.xxx.xxx.xxx

(Request 1)
GET /en-US/docs/Glossary/Simple_header HTTP/1.1
Host: developer.mozilla.org
User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.9; rv:50.0) Gecko/20100101 Firefox/50.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language: en-US,en;q=0.5
Accept-Encoding: gzip, deflate, br
Referer: https://developer.mozilla.org/en-US/docs/Glossary/Simple_header

(Response 1)
HTTP/1.1 200 OK
Connection: Keep-Alive
Content-Encoding: gzip
Content-Type: text/html; charset=utf-8
Date: Wed, 20 Jul 2016 10:55:30 GMT
Etag: "547fa7e369ef56031dd3bff2ace9fc0832eb251a"
Keep-Alive: timeout=5, max=1000
Last-Modified: Tue, 19 Jul 2016 00:59:33 GMT
Server: Apache
Transfer-Encoding: chunked
Vary: Cookie, Accept-Encoding
[content]

(Request 2)
GET /static/img/header-background.png HTTP/1.1
Host: developer.cdn.mozilla.net
User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.9; rv:50.0) Gecko/20100101 Firefox/50.0
Accept: */*
Accept-Language: en-US,en;q=0.5
Accept-Encoding: gzip, deflate, br
Referer: https://developer.mozilla.org/en-US/docs/Glossary/Simple_header

(Response 2)
HTTP/1.1 200 OK
Age: 9578461
Cache-Control: public, max-age=315360000
Connection: keep-alive
Content-Length: 3077
Content-Type: image/png
Date: Thu, 31 Mar 2016 13:34:46 GMT
Last-Modified: Wed, 21 Oct 2015 18:27:50 GMT
Server: Apache
[image content of 3077 bytes]

(Connection 1 Closed - TCP Teardown)
  • ์—ฐ๊ฒฐ์„ ์„ค์ •ํ•˜๊ธฐ ์ „์— TCP 3-way Handshake ๋ฐœ์ƒ. ๋งˆ์ง€๋ง‰์œผ๋กœ ๋ชจ๋“  ๋ฐ์ดํ„ฐ๋ฅผ Client๋กœ ๋ณด๋‚ธ ํ›„ Server๋Š” ๋” ์ด์ƒ ๋ณด๋‚ผ ๋ฐ์ดํ„ฐ๊ฐ€ ์—†๋‹ค๋Š” ๋ฉ”์„ธ์ง€๋ฅผ ๋ณด๋‚ด๊ณ , ๊ทธ ์ดํ›„ ์—ฐ๊ฒฐ์„ ๋‹ซ๋Š”๋‹ค.
  • ์ฆ‰, HTTP1.1์€ ์—ฌ๋Ÿฌ Request-Response์— ๋Œ€ํ•ด ๋™์ผํ•œ ์—ฐ๊ฒฐ์„ ์žฌ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค.

2.2 HTTP 1.1 Keep Alive์™€ Pipeline

HTTP 1.0 "Closed" vs HTTP 1.1 "Keep-Alive"

HTTP 1.1 Keep-Alive

  • HTTP 1.0: TCP Connection์€ HTTP ์š”์ฒญ๋งˆ๋‹ค 3-way Handshake์™€ TearDown์„ ๋ฐ˜๋ณตํ•œ๋‹ค.
  • HTTP 1.1: ํ•˜๋‚˜์˜ TCP Connection์ด ์—ด๋ ค์žˆ์œผ๋ฉด (Established ์ƒํƒœ), ๊ทธ ์—ฐ๊ฒฐ์„ ํ†ตํ•ด ์—ฌ๋Ÿฌ Request์— ๋Œ€ํ•œ Response๋ฅผ ๋ฐ›์„ ์ˆ˜ ์žˆ๋‹ค.
HTTP 1.1์˜ Connection "Keep Alive(Pipelining)" vs "Keep-Alive(Multiple)"

HTTP 1.1 Pipelining

  • HTTP 1.1 Keep-Alive Pipelining: Pipelining์„ ์‚ฌ์šฉํ•  ๋•Œ, client๋Š” ์—ฌ๋Ÿฌ request๋ฅผ response์˜ ์‘๋‹ต์„ ๊ธฐ๋‹ค๋ฆฌ์ง€ ์•Š๊ณ  ๋ณด๋‚ผ ์ˆ˜ ์žˆ๋‹ค.
  • HTTP 1.1 Keep-Alive Multiple Connections: ํด๋ผ์ด์–ธํŠธ๋Š” ๋งŽ์€ ์–‘์˜ objects๋ฅผ ๊ฒ€์ƒ‰ํ•˜๋Š” ์„ฑ๋Šฅ์„ ๋†’์ด๊ธฐ ์œ„ํ•ด TCP ๋‹ค์ค‘ ์—ฐ๊ฒฐ์„ ํ•  ์ˆ˜ ์žˆ๋‹ค.

2.3 HOLB(Head Of Line Blocking) - ํŠน์ • ์‘๋‹ต ์ง€์—ฐ

  • Http Pipelining์œผ๋กœ ํ•˜๋‚˜์˜ connection์„ ํ†ตํ•ด ๋‹ค์ˆ˜๊ฐœ์˜ ํŒŒ์ผ์„ Request/Response ๋ฐ›์„ ์ˆ˜ ์žˆ์ง€๋งŒ ์ฒซ ๋ฒˆ์งธ Response๊ฐ€ ์ง€์—ฐ๋˜๋ฉด, ๋‹ค์Œ ๋‘, ์„ธ๋ฒˆ์งธ Response๋Š” ์ฒซ๋ฒˆ์งธ ์‘๋‹ต์ฒ˜๋ฆฌ๊ฐ€ ์™„๋ฃŒ๋˜๊ธฐ ์ „๊นŒ์ง€ ๋Œ€๊ธฐํ•˜๊ฒŒ ๋˜๊ธฐ ๋•Œ๋ฌธ์— Head Of Line Blocking(HOLB)๊ฐ€ ๋ฐœ์ƒํ•œ๋‹ค. HOLB

3. HTTP 2.0

Http2.0 HTTP 2.0์€ HTTP 1.1 ํ”„๋กœํ† ์ฝœ์„ ๊ณ„์Šนํ•ด ๋™์ผํ•œ API๋ฉด์„œ ์„ฑ๋Šฅ ํ–ฅ์ƒ์— ์ดˆ์ ์„ ๋งž์ท„๋‹ค. ๊ธฐ์กด์— Plain Text(ํ‰๋ฌธ)์„ ์‚ฌ์šฉํ•˜๊ณ  ๊ฐœํ–‰์œผ๋กœ ๊ตฌ๋ณ„๋˜๋˜ HTTP/1.x ํ”„๋กœํ† ์ฝœ๊ณผ ๋‹ฌ๋ฆฌ 2.0์€ ๋ฐ”์ด๋„ˆ๋ฆฌ ํฌ๋งท์œผ๋กœ ์ธ์ฝ”๋”ฉ๋œ Message, Frame์œผ๋กœ ๊ตฌ์„ฑ๋œ๋‹ค.

  • Stream: ๊ตฌ์„ฑ๋œ ์—ฐ๊ฒฐ ๋‚ด์—์„œ ์ „๋‹ฌ๋˜๋Š” ๋ฐ”์ดํŠธ์˜ ์–‘๋ฐฉํ–ฅ ํ๋ฆ„, ํ•˜๋‚˜ ์ด์ƒ์˜ ๋ฉ”์‹œ์ง€๊ฐ€ ์ „๋‹ฌ ๊ฐ€๋Šฅํ•˜๋‹ค.
  • Message: ๋…ผ๋ฆฌ์  ์š”์ฒญ ๋˜๋Š” ์‘๋‹ต ๋ฉ”์‹œ์ง€์— ๋งคํ•‘๋˜๋Š” ํ”„๋ ˆ์ž„์˜ ์ „์ฒด ์‹œํ€€์Šค์ด๋‹ค.
  • Frame: Http/2.0์—์„œ ํ†ต์‹ ์˜ ์ตœ์†Œ ๋‹จ์œ„, ๊ฐ ์ตœ์†Œ ๋‹จ์œ„์—๋Š” ํ•˜๋‚˜์˜ ํ”„๋ผ์ž„ ํ—ค๋”๊ฐ€ ํฌํ•จ๋œ๋‹ค. ์ด ํ”„๋ผ์ž„ ํ—ค๋”๋Š” ์ตœ์†Œํ•œ์œผ๋กœ ํ”„๋ ˆ์ž„์ด ์†ํ•˜๋Š” ์ŠคํŠธ๋ฆผ์„ ์‹๋ณ„ํ•œ๋‹ค. Headers Type Frame, Data Type Frame์ด ์กด์žฌํ•œ๋‹ค.

Multiplexed Streams

  • ํ•œ Connection์œผ๋กœ ๋™์‹œ์— ์—ฌ๋Ÿฌ ๊ฐœ ๋ฉ”์‹œ์ง€๋ฅผ ์ฃผ๊ณ  ๋ฐ›์„ ์ˆ˜ ์žˆ์œผ๋ฉฐ, Response๋Š” ์ˆœ์„œ์— ์ƒ๊ด€์—†์ด stream์œผ๋กœ ์ฃผ๊ณ ๋ฐ›๋Š”๋‹ค.

Stream Prioritization

  • ๋ฆฌ์†Œ์Šค๊ฐ„ ์šฐ์„ ์ˆœ์œ„๋ฅผ ์„ค์ •ํ•ด ํด๋ผ์ด์–ธํŠธ๊ฐ€ ๋จผ์ € ํ•„์š”ํ•œ ๋ฆฌ์†Œ์Šค๋ถ€ํ„ฐ ๋ณด๋‚ด์ค€๋‹ค.

Server Push

  • ์„œ๋ฒ„๋Š” ํด๋ผ์ด์–ธํŠธ์˜ ์š”์ฒญ์— ๋Œ€ํ•ด ์š”์ฒญํ•˜์ง€ ์•Š์€ ๋ฆฌ์†Œ์Šค๋ฅผ ๋งˆ์Œ๋Œ€๋กœ ๋ณด๋‚ด์ค„ ์ˆ˜ ์žˆ๋‹ค.
  • ์ฆ‰, ํด๋ผ์ด์–ธํŠธ๊ฐ€ ์š”์ฒญํ•˜๊ธฐ ์ „์— ํ•„์š”ํ•˜๋‹ค๊ณ  ์˜ˆ์ƒ๋˜๋Š” ๋ฆฌ์†Œ์Šค๋ฅผ Server์—์„œ ๋จผ์ € ์š”์ฒญํ•œ๋‹ค. ์˜ˆ) http๋งŒ ์š”์ฒญํ–ˆ๋Š”๋ฐ http์™€ css, js, image๋ฅผ ํ•จ๊ป˜ ์ „์†กํ•ด์ฃผ๋Š” ๋“ฑ

Header Compression

  • Header table๊ณผ Huffman Encoding ๊ธฐ๋ฒ•(HPAC ์••์ถ•๋ฐฉ์‹)์„ ์ด์šฉํ•ด ์••์ถ•ํ–ˆ๋‹ค.
  • ์ด์ „ Header์˜ ๋‚ด์šฉ๊ณผ ์ค‘๋ณต๋˜๋Š” ํ•„๋“œ๋ฅผ ์žฌ์ „์†กํ•˜์ง€ ์•Š์•„ ๋ฐ์ดํ„ฐ๋ฅผ ์ ˆ์•ฝํ–ˆ๋‹ค. Header Compression

HTTP 1.0 vs 1.1 vs 2.0

HTTP versions

์ฐธ๊ณ ์ž๋ฃŒ