HTTP/2와 HTTP/3
Web(HTTPS)

HTTP/2와 HTTP/3

1. HTTP

HTTP λ°œμ „ κ³Όμ •

- HTTP/0.9(1991λ…„) ▢️ HTTP/1(1996λ…„) ▢️ HTTP/1.1(1997λ…„) ▢️ HTTP/2(2015λ…„) ▢️ HTTP/3(2020λ…„)

 

HTTP/0.9(1991λ…„)

- 졜초 생성 μ‹œ 버전이 μ—†μ—ˆμœΌλ‚˜ HTTP/1이 μƒκΈ°λ©΄μ„œ κ΅¬λΆ„ν•˜κΈ° μœ„ν•˜μ—¬ HTTP 0.9둜 뢈리기 μ‹œμž‘

- λ‹¨μˆœ HTML만 전솑 κ°€λŠ₯

- GET λ©”μ„œλ“œλ§Œ κ°€λŠ₯

 

HTTP/1(1996λ…„)

- 헀더 λ“±μž₯

- μ„œλ²„ μƒνƒœ 확인 κ°€λŠ₯

- HTML μ™Έ 컨텐츠 파일 전솑 κ°€λŠ₯

- POST, PUT λ©”μ„œλ“œ μΆ”κ°€

 

HTTP/1.1(1997λ…„)

- ν‘œμ€€ λͺ¨λΈ

- Keep Alive κΈ°λŠ₯ μΆ”κ°€

- 지속 컀λ„₯μ…˜ κΈ°λŠ₯으둜 TCP Connection μž¬ν™œμš©

- νŒŒμ΄ν”„λΌμ΄λ‹ κΈ°λŠ₯ μΆ”κ°€

- OPTIONS, GET, HEAD, POST, PUT, DELETE, TRACE λ©”μ„œλ“œ μΆ”κ°€

 

HTTP/2(2015λ…„)

- ꡬ글이 κ°œλ°œν•œ SPDYλ₯Ό 기반

- HTTP 헀더 μ••μΆ•

- μ„œλ²„ ν‘Έμ‹œ κΈ°λŠ₯ μΆ”κ°€

- λ°”μ΄λ„ˆλ¦¬ ν”„λ‘œν† μ½œλ‘œ λ³€ν™˜

- 닀쀑 처리 κΈ°λŠ₯ μΆ”κ°€

 

HTTP/3(HTTP over QUIC)(2019λ…„)

- ꡬ글이 κ°œλ°œν•œ QUIC(Quick UDP Internet Connections) 이용

- UDP둜 λ³€κ²½

- QUIC 3 way handshaking κ΅¬ν˜„

- λ³΄μ•ˆ κ°•ν™”

 

2. HTTP/2 νŠΉμ§•

HTTP/1.1 ν˜Έν™˜ κ°€λŠ₯

- λΈŒλΌμš°μ €λ‚˜ OS에 따라 HTTP/2λ₯Ό λ―Έμ§€μ›ν•˜κΈ°λ„ ν•˜μ—¬ ν˜Έν™˜ ν•„μš”

- HTTP/2λ₯Ό λ―Έμ§€μ›ν•˜λŠ” Clientμ—μ„œλŠ” HTTP/1.1둜 톡신

 

HTTP 헀더 μ••μΆ•(Header compression)

- 헀더 ν…Œμ΄λΈ”μ„ κ΄€λ¦¬ν•˜μ—¬ 이전 Request에 μ€‘λ³΅λœ 값은 인덱슀 κ°’λ§Œ μ „μ†‘ν•˜μ—¬ 데이터 양을 μ€„μž„

- HTTP/1.1μ—μ„œλŠ” ν”Œλ ˆμΈ ν…μŠ€νŠΈλ‘œ μ „μ†‘ν–ˆμ§€λ§Œ HTTP/2μ—μ„œλŠ” Huffman으둜 μΈμ½”λ”©ν•˜μ—¬ ν…μŠ€νŠΈμ μΈ μ••μΆ•

- HPACK μ•Œκ³ λ¦¬μ¦˜μ„ 톡해 ν—€λ”μ˜ 크기λ₯Ό 80% 이상 μ••μΆ• 

 

 

μ„œλ²„ ν‘Έμ‹œ(Server Push)

- Clientκ°€ 단일 Request ν˜Ήμ€ Request 없이 Serverκ°€ Clientκ°€ ν•„μš”ν•  Response(PUSH_PROMISE)λ₯Ό 보냄

 

λ°”μ΄λ„ˆλ¦¬ ν”„λ‘œν† μ½œ(Binary Protocol)

- HTTP/1.1μ—μ„œλŠ” ν”Œλ ˆμΈ ν…μŠ€νŠΈλ‘œ μ „μ†‘ν•˜μ˜€μ§€λ§Œ HTTP/2μ—μ„œλŠ” ν”„λ ˆμž„ ꡬ쑰(Header Frame, Data Frame)둜 전솑

- λ°”μ΄λ„ˆλ¦¬ ν”„λ‘œν† μ½œμ€ Header Frameκ³Ό Data Frame(이진 데이터)으둜 ꡬ성

- ν”„λ ˆμž„μ΄ λͺ¨μ—¬ 메세지가 되고, 메세지가 λͺ¨μ—¬ 슀트림이 됨(전솑 λ‹¨μœ„ 메세지)

 

닀쀑 처리(Multiplexing)

- 지속 컀λ„₯μ…˜(Persistent Connection)으둜 TCP Connection μž¬ν™œμš©

- νŒŒμ΄ν”„λΌμ΄λ‹(Pipeling)으둜 Reqeustλ₯Ό μ—¬λŸ¬κ°œ 날릴 수 μžˆλ„λ‘ 함 

- ν”„λ ˆμž„λ§ˆλ‹€ 슀트림(μš”μ²­ μˆœμ„œ 번호) ν‘œκΈ°ν•˜μ—¬ Response μˆœμ„œλŒ€λ‘œ 받지 μ•Šμ•„λ„ 됨

- μŠ€νŠΈλ¦Όλ³„ μš°μ„  μˆœμœ„ 지정 κ°€λŠ₯(Prioritization)

 

HTTP HOL(Head of Line) Blocking 문제 ν•΄κ²°

- HTTP HOL Blocking 문제 : HTTP/1.1μ—μ„œλ„ νŒŒμ΄ν”„λΌμ΄λ‹ κ°€λŠ₯ν–ˆμ§€λ§Œ μ—¬λŸ¬κ°œμ˜ Requestλ₯Ό μˆœμ„œμ— 맞게 Responseλ₯Ό λ°›μ•„μ•Όλ§Œ ν–ˆμŒ(κ°€μž₯ λ¨Όμ € 받은 Reqeust의 Response의 지연 λ°œμƒν•  경우 이후 Requset듀도 ν•¨κ»˜ 지연 됨)

- HTTP/2μ—μ„œλŠ” 닀쀑 처리둜 μΈν•˜μ—¬ HTTP HOL Blocking 문제 ν•΄κ²°

 

λΈŒλΌμš°μ € μ›Ή λ‘œλ”© 속도 빨라짐

- HTTP 헀더 μ••μΆ• κΈ°λŠ₯으둜 데이터 양을 쀄이고 μ••μΆ•

- μ„œλ²„ ν‘Έμ‹œ κΈ°λŠ₯으둜 λΆˆν•„μš”ν•œ Request λŒ€κΈ° μ‹œκ°„ μ€„μž„

- λ°”μ΄λ„ˆλ¦¬ ν”„λ‘œν† μ½œ, λ‹€μ€‘μ²˜λ¦¬ κΈ°λŠ₯으둜 메세지λ₯Ό ν”„λ ˆμž„μœΌλ‘œ μͺΌκ°œκ³  닀쀑 처리 κ°€λŠ₯

 

λ³΄μ•ˆ κ°•ν™”

- TLS ν•„μˆ˜

 

3.  HTTP/2 톡신 κ³Όμ •

TLS Handsahking κ³Όμ • 쀑 Client Hello νŒ¨ν‚·κ³Ό Server Hello νŒ¨ν‚·μ˜ Extension : application_layer_protocol_negotiation(ALPN)ν•„λ“œμ— ν˜„μž¬ λΈŒλΌμš°μ €μ—μ„œ 지원 κ°€λŠ₯ν•œ HTTP 버전 

Client Hello νŒ¨ν‚·μ˜ Extension : application_layer_protocol_negotiation
Server Hello νŒ¨ν‚·μ˜ Extension : application_layer_protocol_negotiation

HTTPS일 경우 Application Data νŒ¨ν‚·μ€ μ•”ν˜Έν™”λ˜μ–΄ HTTP 버전을 확인할 수 μ—†μŒ

Application Data
크둬 κ°œλ°œμžλ„κ΅¬μ—μ„œμ˜ HTTP/2 ν”„λ‘œν† μ½œ

 

4. HTTP/3 νŠΉμ§•

ν˜„μž¬ μ‹€ν—˜ μ€‘μœΌλ‘œ 크둬 μ‹€ν—˜μ‹€μ—μ„œ QUIC κΈ°λŠ₯을 μΌœμ•Ό HTTP/3λ₯Ό μ œλŒ€λ‘œ ν…ŒμŠ€νŠΈν•΄λ³Ό 수 μžˆμŠ΅λ‹ˆλ‹€ πŸ€”

 

QUIC(Quick UDP Internet Connections)

- κ΅¬κΈ€μ—μ„œ κ°œλ°œν•œ ν”„λ‘œν† μ½œ

- HTTP/2κ°€ QUIC μœ„μ—μ„œ λ™μž‘

- IPκ°€ μ•„λ‹Œ Connection ID둜 톡신을 ν•˜μ—¬ IPκ°€ λ°”λ€Œμ–΄λ„ κΈ°μ‘΄ 연결을 μœ μ§€ν•  수 있음

 

 

UDP둜 λ³€κ²½

- TCP Handshaking ν•„μš” μ—†μŒ

- UDPλŠ” TCP보닀 비ꡐ적 빠름

 

TCP와 UDP ▢️ https://eunhyee.tistory.com/96

 

TCP와 UDP

1. TCP 3 way handshaking(μ‹œμž‘) SYN - Clientμ—μ„œ μ„Έμ…˜μ„ λ§ΊκΈ° μœ„ν•˜μ—¬ SYN 전솑 - ServerλŠ” SYN을 λ°›κ³  LITSEN > SYN_RCV μƒνƒœ λ³€κ²½ SYN+ACK - SeverλŠ” SYN을 ν™•μΈν•˜κ³  Client에 SYN+ACK 전솑 - ClientλŠ” SYN+AC..

eunhyee.tistory.com

 

QUIC 3 way Handshaking

- TLS Handshaking κ³Όμ • 포함

 

λΈŒλΌμš°μ € μ›Ή λ‘œλ”© 속도 빨라짐

- UDP λ³€κ²½μœΌλ‘œ 속도 빨라짐(TCP와 UDPλŠ” 전솑 κ³„μΈ΅μœΌλ‘œ 속도 차이가 있음)

- QUIC 3 way Handshaking κΈ°λŠ₯으둜 Handshaking κ³Όμ • 단좕

첫 Application Data(1.180671) - DNS Query(0.000046) = 1.180624
첫 Application Data(0.740320) - DNS Query(0.503021) = 0.237299

 

λ³΄μ•ˆ κ°•ν™”

- TLS 1.3 ν•„μˆ˜

 

μ°Έκ³  : https://velog.io/@zzzz465/HTTP1.1-2-3-%EC%9D%98-%EC%B0%A8%EC%9D%B4%EC%A0%90

 

HTTP/1.1, /2, /3 의 차이점

HTTP /1.x, /2, /3 에 λŒ€ν•΄ κ°„λž΅νžˆ κ³΅λΆ€ν•œ λ‚΄μš©μ„ μ •λ¦¬ν–ˆμŠ΅λ‹ˆλ‹€.

velog.io

https://ably.com/topic/http3

 

HTTP/3 Deep Dive | Ably Realtime

A deep dive into HTTP/3, including evolution, use cases, and how to get started.

ably.com

'Web(HTTPS)' μΉ΄ν…Œκ³ λ¦¬μ˜ λ‹€λ₯Έ κΈ€

HTTPS νŒ¨ν‚· 뢄석(TLS 1.2와 TLS 1.3)  (1) 2021.06.11
HTTP and TLS(SSL)  (0) 2021.06.06
URI, URL, URN  (0) 2020.03.22
HTTP Method(GET/POST)  (0) 2020.03.22
HTTP Header  (0) 2020.03.22