[Daily morning study] HTTP/1.1, HTTP/2, HTTP/3의 차이점

#daily morning study

Image


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

μ›Ήμ—μ„œ 데이터λ₯Ό μ „μ†‘ν•˜λŠ” ν”„λ‘œν† μ½œμΈ HTTP(ν•˜μ΄νΌν…μŠ€νŠΈ 전솑 ν”„λ‘œν† μ½œ)λŠ” μ—¬λŸ¬ 버전이 μ‘΄μž¬ν•˜λ©°, 각 λ²„μ „λ§ˆλ‹€ μ„±λŠ₯κ³Ό κΈ°λŠ₯μ—μ„œ 차이λ₯Ό 보인닀. 이번 λ¬Έμ„œμ—μ„œλŠ” HTTP/1.1, HTTP/2, HTTP/3의 μ£Όμš” 차이점에 λŒ€ν•΄μ„œ 정리해보겠닀.

HTTP/1.1

νŠΉμ§•

  • ν…μŠ€νŠΈ 기반: μš”μ²­κ³Ό 응닡이 λͺ¨λ‘ ν…μŠ€νŠΈ ν˜•μ‹μœΌλ‘œ 이루어짐.
  • μ—°κ²° 관리: 기본적으둜 λ§€ μš”μ²­λ§ˆλ‹€ μƒˆλ‘œμš΄ TCP 연결을 μˆ˜λ¦½ν•˜μ—¬ μ„±λŠ₯이 λ–¨μ–΄μ§ˆ 수 μžˆλ‹€. Keep-Alive 헀더λ₯Ό μ‚¬μš©ν•˜λ©΄ 연결을 μœ μ§€ν•  수 μžˆλ‹€.
  • 비동기성 λΆ€μ‘±: ν•œ μ—°κ²°μ—μ„œ μ—¬λŸ¬ μš”μ²­μ΄ λ™μ‹œμ— μ΄λ£¨μ–΄μ§ˆ 경우, ν•˜λ‚˜μ˜ μš”μ²­μ΄ μ™„λ£Œλ  λ•ŒκΉŒμ§€ λ‹€λ₯Έ μš”μ²­μ΄ λŒ€κΈ°ν•΄μ•Ό ν•˜λŠ” λ¬Έμ œκ°€ μžˆλ‹€.

μ˜ˆμ‹œ

GET /index.html HTTP/1.1
Host: example.com
Connection: keep-alive

HTTP/2

κ°œμ„ λœ 점

  • 이진 ν”„λ‘œν† μ½œ: μš”μ²­κ³Ό 응닡이 이진 ν˜•μ‹μœΌλ‘œ μ „μ†‘λ˜μ–΄, 해석 및 처리 속도가 λΉ λ₯΄λ‹€.
  • Multiplexing: ν•˜λ‚˜μ˜ μ—°κ²°μ—μ„œ μ—¬λŸ¬ μš”μ²­κ³Ό 응닡을 λ™μ‹œμ— μ²˜λ¦¬ν•  수 μžˆμ–΄, λŒ€κΈ° μ‹œκ°„μ„ 크게 쀄일 수 μžˆλ‹€.
  • 헀더 μ••μΆ•: HPACKμ΄λΌλŠ” μ•Œκ³ λ¦¬μ¦˜μ„ μ‚¬μš©ν•˜μ—¬ 헀더 정보λ₯Ό μ••μΆ•ν•΄ 전솑 속도λ₯Ό ν–₯μƒμ‹œν‚΄.
  • μ„œλ²„ ν‘Έμ‹œ(Server Push): μ„œλ²„κ°€ ν΄λΌμ΄μ–ΈνŠΈμ˜ μš”μ²­ 없이도 ν•„μš”ν•œ λ¦¬μ†ŒμŠ€λ₯Ό 미리 전솑할 수 μžˆμ–΄ λ‘œλ”© 속도가 ν–₯μƒλœλ‹€.

μ˜ˆμ‹œ

:method: GET
:path: /index.html
:scheme: https
:authority: example.com

HTTP/3

ν˜μ‹ μ μΈ λ³€ν™”

  • QUIC ν”„λ‘œν† μ½œ: UDP 기반의 QUIC(Quick UDP Internet Connections) ν”„λ‘œν† μ½œμ„ μ‚¬μš©ν•˜μ—¬ μ—°κ²° 지연을 μ΅œμ†Œν™”ν•˜κ³  μ„±λŠ₯을 κ°œμ„ ν•œλ‹€.
  • 0-RTT ν•Έλ“œμ‰μ΄ν¬: ν΄λΌμ΄μ–ΈνŠΈμ™€ μ„œλ²„ κ°„μ˜ 연결을 λΉ λ₯΄κ²Œ μ„€μ •ν•  수 μžˆμ–΄ 초기 μ—°κ²° 속도가 크게 ν–₯μƒλœλ‹€.
  • Multiplexing 확인: HTTP/2의 Multiplexing κΈ°λŠ₯을 λ”μš± κ°•ν™”ν•˜μ—¬, νŒ¨ν‚· 손싀이 λ°œμƒν•  λ•Œ νŠΉμ • 연결에 λŒ€ν•œ 영ν–₯을 쀄인닀.

μˆ˜μ‹  응닡 μ˜ˆμ‹œ

QUIC을 μ‚¬μš©ν•˜λŠ” HTTP/3의 μˆ˜μ‹  응닡은 이진 ν˜•μ‹μœΌλ‘œ μ „λ‹¬λ˜μ–΄ TCPμ™€λŠ” λ‹€λ₯Έ λ°©μ‹μœΌλ‘œ μ΅œμ ν™”λœλ‹€. μ‹€μ œ HTTP/3 μš”μ²­ μ˜ˆμ‹œλŠ” μ•„λž˜μ™€ κ°™λ‹€.

GET /index.html HTTP/3

μ’…ν•© λΉ„κ΅ν‘œ

νŠΉμ„±HTTP/1.1HTTP/2HTTP/3
ν”„λ‘œν† μ½œ ν˜•μ‹ν…μŠ€νŠΈ κΈ°λ°˜μ΄μ§„ 기반QUIC(UDP) 기반
닀쀑 μš”μ²­ μ²˜λ¦¬λΆˆκ°€λŠ₯ / λŒ€κΈ°κ°€λŠ₯κ°€λŠ₯
μ„œλ²„ ν‘Έμ‹œλΆˆκ°€λŠ₯κ°€λŠ₯κ°€λŠ₯
헀더 μ••μΆ•μ—†μŒHPACK μ‚¬μš©QPACK μ‚¬μš©
ν•Έλ“œμ‰μ΄ν¬1RTT1RTT0-RTT

κ²°λ‘ 

HTTP ν”„λ‘œν† μ½œμ˜ λ°œμ „μ€ μ›Ή ν™˜κ²½μ˜ μ„±λŠ₯ κ°œμ„ μ— μ€‘μš”ν•œ 역할을 ν•˜κ³  μžˆλ‹€. HTTP/1.1μ—μ„œ HTTP/2, HTTP/3둜의 λ³€ν™”λŠ” 속도와 νš¨μœ¨μ„±μ„ λ†’μ˜€κ³ , λ‹€μ–‘ν•œ κΈ°λŠ₯을 톡해 μ›Ή ν’ˆμ§ˆμ„ ν–₯μƒμ‹œμΌ°λ‹€. 각각의 ν”„λ‘œν† μ½œμ˜ νŠΉμ§•μ„ μ΄ν•΄ν•˜κ³  ν™œμš©ν•˜μ—¬, μ›Ή μ‘μš© ν”„λ‘œκ·Έλž¨ 개발 μ‹œ 더 λ‚˜μ€ μ„±λŠ₯을 λŒμ–΄λ‚Ό 수 μžˆλ„λ‘ ν•˜μž.