HTTP λ²μ λ§λ€ μ΄λ€ λ¨μ μ΄ μμκ³ , λ€μ λ²μ μμ κ·Έ λ¨μ μ μ΄λ»κ² ν΄κ²°νλμ§λ₯Ό μκ°νκ³ μ ν©λλ€.
HTTP/1.0
HTTP/1.0 μ μλ²μ ν΄λΌμ΄μΈνΈκ°μ Connection μ μ§μνμ§ μμ΅λλ€.
μ¦, ν΄λΌμ΄μΈνΈκ° μλ²μ Connection μ λ§ΊκΈ° μν΄ DNS μ‘°ν, TCP 3-way handshake, SSL/TLS handshake κ°μ΄ λ€νΈμν¬ μ§μ° μκ°μ λ리λ νμλ₯Ό 1κ°μ μμ² λ§λ€ λ°λ³΅μ μΌλ‘ νλ€λ κ²μ΄μμ΅λλ€.
μ΄λ λ§€μ° λΆνμν νμμ΄κΈ° λλ¬Έμ, HTTP/1.1 μ μ΄λ₯Ό μ΅μ ν νκ² λ©λλ€.
HTTP/1.1
βΆ HTTP/1.1 μ κΈ°λ₯ : Keep-Alive
κ·Έλμ, HTTP/1.1 λΆν° 맀 μμ²λ§λ€ Connection μ λ§Ίμ§ μκΈ° μν΄ μλ²μ ν΄λΌμ΄μΈνΈκ°μ Connection μ Keep-Alive νκ² μ μ§ν©λλ€.
* Keep - Alive : ν΄λΌμ΄μΈνΈμ μλ²κ°μ μ°κ²°μ μ μ§νμ¬ νλμ TCP μ°κ²°λ‘ μ¬λ¬ κ°μ μμ²/μλ΅μ μ²λ¦¬ν μ μλ μν
μ΄ λλΆμ νλμ TCP Connection μ ν΅ν΄ μ¬λ¬ κ°μ μμ²/μλ΅μ μ²λ¦¬ν μ μκ² λμμ΅λλ€.
κ·Έλ κ² Keep-Alive λ HTTP/1.1 λΆν° κΈ°λ³Έ λμμΌλ‘ ν¬ν¨λμμ΅λλ€.
λ§μ½, ν΄λΌμ΄μΈνΈκ° μλ²μμ μ°κ²°μ λκ³ μΆλ€λ©΄ Connection: close λ₯Ό ν€λμ ν¬ν¨μμΌ μλ²μ λͺ μμ μΌλ‘ μμ²ν μ μμ΅λλ€.
βΆ HTTP/1.1 μ κΈ°λ₯ : νμ΄νλΌμ΄λ
λν, HTTP/1.1 μ νμ΄νλΌμ΄λ κΈ°λ₯λ μμμ΅λλ€.
νμ΄νλΌμ΄λμ΄λ ν΄λΌμ΄μΈνΈ μμ²μ λν μλ΅μ κΈ°λ€λ¦¬μ§ μκ³ λ λ¨μΌ TCP μ°κ²°μ ν΅ν΄ μ¬λ¬ HTTP μμ²μ 보λ΄λ κ²μ λλ€.
βΆ HTTP/1.1 μ κΈ°λ₯ : νμ΄νλΌμ΄λμ λ¨μ
κ·Έλ¬λ, νμ΄νλΌμ΄λμ μμ² μμμ λ§κ² μλ΅μ λ°μμΌ νλ μΉλͺ μ μΈ λ¨μ μ΄ μμ΅λλ€.
μλ₯Ό λ€μ΄, ν΄λΌμ΄μΈνΈκ° [μμ²1, μμ²2, μμ²3] μμΌλ‘ μμ²νλ©΄ [μλ΅1, μλ΅2, μλ΅3] μμΌλ‘ μλ΅μ λ°μμΌ ν©λλ€.
λ§μ½, μλ΅2κ° κ°μ₯ λ¨Όμ ν΄λΌμ΄μΈνΈμκ² μλ€λ©΄, μλ΅2λ μλ΅1μ΄ μ€κΈ° μ κΉμ§ μ²λ¦¬λμ§ μκ³ κΈ°λ€λ¦¬κ² λ©λλ€.
μ΄λ κ² λμΌν Connection μμ νΉμ μμ²μ λν΄ νμ μμ²μ΄ μν₯μ λ°λ κ²μ Head of Line Blocking(HOL Blocking)μ΄λΌ ν©λλ€. κ·Έλμ, HTTP/2.0 μμλ HOL Blocking μ ν΄κ²°νκ³ μ ν©λλ€.
μΆκ°λ‘, νμ΄νλΌμ΄λμ ꡬνμ΄ μ΄λ €μ κ³ , νλ‘μ(μ€κ³) μλ²κ° νμ΄νλΌμ΄λμ μ λλ‘ μ²λ¦¬νμ§λͺ»ν΄μ ν¬λ‘¬, νμ΄μ΄νμ€ κ°μ λΈλΌμ°μ λ κ²°κ΅ μ΄ νμ΄νλΌμ΄λμ μ§μνμ§ μκ² λμμ΅λλ€.
HTTP/2.0
βΆ HTTP/2.0 μ κΈ°λ₯ : frame κ³Ό Stream μκ°
μ°μ HTTP/1.1 μμ λ©μμ§λ₯Ό text λ‘ λ³΄λλ€λ©΄, HTTP/2.0 μ textλ₯Ό binary ν νμ¬ header λ‘λ header frame, body λ body frame μ΄λ λ°μ΄ν° λ¨μλ₯Ό λ§λλλ€(μ¬μ§ μΆμ²: λ§ν¬)
μ΄λ κ² 1κ°μ λ©μμ§λ 1 or 2κ°μ HEADER frame κ³Ό 0κ° μ΄μμ DATA frame μΌλ‘ λλμ΄μ μ μ‘λμ΄μ§λλ€.
κ·Έλ¦¬κ³ , μ΄λ κ² λλ frame λ€μ TCPλ΄μμ header frame, data frame μμΌλ‘ μ μ‘λμΌ νκΈ° λλ¬Έμ κ° frame λ€μ ꡬλΆνκ³ μ Stream Sequence λ λ²νΈλ₯Ό frame μ λΆμ λλ€.
μ΄λ κ² κ°μ λ²νΈμΈ frame λ€μ Stream μ΄λ κ°λ μΌλ‘ ꡬλΆμ§κ² λ©λλ€.
ex) 1λ² header frame + 1λ² data frame + 1λ² data frame μ 1λ² Stream μΌλ‘ λΆλ¦ λλ€.
βΆ HTTP/2.0 μ κΈ°λ₯ : multiplexing (λ©ν°νλ μ±)
μ΄λ κ², 1κ°μ λ©μμ§λ₯Ό μ¬λ¬ κ°μ frame μΌλ‘ λλμ΄μ μ μ‘νκ² λλ μ μ¬μ§μ²λΌ μμ²3μ header frame μ΄ μμ²2μ header frame λ³΄λ€ λ¨Όμ μ¬ μ μκ² λμμ΅λλ€.(μλ΅μ΄ μμ² μμμ λ°λΌ μ²λ¦¬λμ§ μμλ λ¨)
HTTP/1.1 μ λ¬Έμ μλ μλ΅μ΄ μμλλ‘ μμΌν΄μ νμ μμ²λ€μ΄ μν₯μ λ°λ λ¬Έμ μΈ HOL Blockingμ Application Layer μμ ν΄κ²°ν μ μμμ΅λλ€.
HTTP/2.0 μ μ€νΈλ¦Όμ΄λΌλ κ°λ μ λμ ν΄μ νμ΄νλΌμ΄λμ λ¨μ μ λ©ν°νλ μ±(multiplexing) μΌλ‘ 극볡νμμ΅λλ€.
βΆ multiplexing (λ©ν°νλ μ±) μ λ¨μ
νμ§λ§, μ¬μ ν TCP Connection μμ frame λ€μ μ£Όκ³ λ°μκΈ° λλ¬Έμ, TCP μμ λ°μνλ HOL Blocking μ ν΄κ²°ν μ μμμ΅λλ€.
μλ₯Ό λ€μ΄, μ¬μ§3 μμ stream2 header μ ν¨ν·μ΄ μμ€μ΄ λμλ€λ©΄ ν΄λΉ stream2 header λ μμ€λ ν¨ν·μ΄ μ¬ λκΉμ§ κΈ°λ€λ¦¬κ² λκ³ , κ·Έ λ€μμλ stream 1 data, 3 data, 2data λ μ¬μ ν κΈ°λ€λ¦¬κ² λμμ΅λλ€.
μ¦, multiplexing μ Application Layer μμμ HOL Blocking μ ν΄κ²°νμ§λ§ Transport Layer μμμ HOL Blocking μ μ¬μ ν λ¬Έμ κ° λμμ΅λλ€. μ΄λ νμ HTTP/3.0 μΈ QUIC μ΄ λμ€λ©΄μ ν΄κ²°λμκ³ , QUIC μ μ€λͺ ν λ λ€μ μΈκΈνκ² μ΅λλ€.
βΆ HTTP/2.0 μ κΈ°λ₯ : Server push
HTTP/2.0 μ κΈ°λ₯μΌλ‘ Server Push κ° μμ΅λλ€.
Server Push λ ν΄λΌμ΄μΈνΈκ° μμ²νκΈ° μ μ μλ²κ° ν΄λΌμ΄μΈνΈμ 리μμ€λ₯Ό 보λ΄λ κ²μΌλ‘ 미리 리μμ€λ₯Ό 보λΈλ€λ μ μμ λ€νΈμν¬ μμ²μ μ€μΈλ€λ μ΄μ μ΄ μμ κ²μ΄λΌ μκ°λμμ΅λλ€.
νμ§λ§, ν΄λΌμ΄μΈνΈκ° μλ²κ° λ³΄λΈ λ¦¬μμ€λ₯Ό μμ§ λͺ»νκ³ , 리μμ€λ₯Ό λ€μ μμ²νλ€λ μ μμ 22λ 10μ Google μ Chrome μμ Server push κΈ°λ₯μ μ κ±°νμμ΅λλ€.(μΆμ² : wikipeidia - HTTP/2.0)
HTTP/3.0
βΆ TCP λ 벨μμμ HOL Blocking ν΄κ²°
HTTP/2.0 μ TCP HOL Blocking μ TCP νλ‘ν μ½ νΉμ±μ λ°μνκΈ° λλ¬Έμ, μ΄λ₯Ό ν΄κ²°νκΈ° μν΄ HTTP/3.0 μ TCP μ μμ‘΄νμ§ μκ³ , UDP μ κΈ°λ°ν QUIC νλ‘ν μ½μ μ¬μ©νκ² λ©λλ€.
μ΄ λμ, TCP μ κΈ°λ°ν Stream λ€μ΄ UDP μ κΈ°λ°ν QUIC νλ‘ν μ½μ μ¬μ©νκ² λλ©΄μ κ° μ€νΈλ¦Όλ€μ λ 립μ μ΄κ² λμμ΅λλ€.
μλ₯Ό λ€μ΄, μ¬μ§5μμ 1λ² ν¨ν·μ΄ μμ€λμλ€λ©΄, TCP κΈ°λ°μμλ 2~8λ²κΉμ§μ ν¨ν·μ΄ λͺ¨λ Blocking λμ§λ§ UDP κΈ°λ°μ QUIC νλ‘ν μ½μμλ 2,3 λ²μ ν¨ν·λ§ Blocking λκ² λμμ΅λλ€.
βΆ HTTP/3.0 μ κΈ°λ₯ : zero RTT Connection λ¬μ±
λν, HTTP/3.0 μ μλ²μ ν΄λΌμ΄μΈνΈκ°μ Connection μ λ§Ίλλ° 0 RTT(Round-Trip Time, λ¨μ : ms)λ₯Ό λ¬μ±ν©λλ€.
TCP μ°κ²°μ 1 RTT(100ms) , TCP + TLS μ°κ²°μ 2~3 RTT(200~300ms) μ΄ κ±Έλ¦¬λ λ°λ©΄μ HTTP/3.0 μ QUIC μ 0 RTT λ₯Ό λ¬μ±νμ¬ μ°κ²°νλ©΄μ λ°μ΄ν°λ₯Ό μ μ‘ν μ μκ² λμμ΅λλ€.
μΆμ²
- StackOverflow : HTTP/2 HEADERS and DATA Frames
- Youtube : ByteByteGo - HTTP/1.1 HTTP/2.0 HTTP/3.0
- Youtube : The QUIC Protocol, HTTP3, and How HTTP Has Evolved
- RFC 9113 - HTTP/2
'Network' μΉ΄ν κ³ λ¦¬μ λ€λ₯Έ κΈ
TCP & UDPμ μ°¨μ΄μ 3,4 way handshake μμ보기 (0) | 2024.09.06 |
---|---|
ARQμ TCP μ μ°¨μ΄μ , κ·Έλ¦¬κ³ TCP Reno (1) | 2024.09.05 |
μΏ ν€ μΈμ ν ν°μ μ°¨μ΄λ₯Ό μ΄ν΄νκ³ , μΏ ν€ μ¬μ© μμ XSS CSRF μλ°© μμ보기 (0) | 2024.08.29 |
TLS 1.2 Handshake λμ κ³Όμ + HTTPS κ°μ (0) | 2024.08.22 |
TCP/IPμ 'ν¨ν· κ΅ν λ°©μ' μ°λ¨Ή νκΈ° (0) | 2024.08.15 |