λ³Έλ¬Έ λ°”λ‘œκ°€κΈ°

TIL (Today I Learned)/Network

[Network] HTTP2

728x90

HTTP 역사

image

1. HTTP/0.9 - 원라인 ν”„λ‘œν† μ½œ

1989λ…„ μ œλ„€λ°”μ˜ CERNμ—μ„œ μΌν•˜κ³  있던 Tim Berners-LEEλŠ” μΈν„°λ„·μ˜ ν•˜μ΄νΌν…μŠ€νŠΈ μ‹œμŠ€ν…œμ„ λ§Œλ“€κΈ° μœ„ν•œ μ œμ•ˆμ„ ν•˜μ˜€λ‹€. μ΄λ ‡κ²Œ HTML, HTTP, WorldWideWeb, httpd의 초기 버전이 1990λ…„ 말에 μ™„λ£Œλ˜μ—ˆκ³  첫번째 μ„œλ²„λŠ” 1991λ…„ μ΄ˆμ— CERN μ™ΈλΆ€μ—μ„œ 가동을 μ‹œμž‘ν•˜κ²Œ λ˜μ—ˆλ‹€.

μ΄ˆκΈ°μ—λŠ” 버전 λ²ˆν˜Έκ°€ μ‘΄μž¬ν•˜μ§€ μ•Šμ•˜μ§€λ§Œ, 이후에 λ‹€λ₯Έ 버전듀과 κ΅¬λΆ„ν•˜κΈ° μœ„ν•΄μ„œ 0.9λΌλŠ” 버전을 λΆ™μ΄κ²Œ λ˜μ—ˆλ‹€. 0.9 버전은 단일 라인으둜 ꡬ성 λ˜μ—ˆμœΌλ©° pathλŠ” GET이 μœ μΌν–ˆλ‹€. μ΄λ ‡κ²Œ μ œν•œμ μΈ κΈ°λŠ₯을 κ°–κ³  μžˆμ—ˆλ˜ HTTP/0.9λŠ” λ‹€μŒκ³Ό 같은 νŠΉμ§•μ„ κ°–κ³  μžˆμ—ˆλ‹€.
HTTP의 초기 λ²„μ „μ—λŠ” 버전 정보가 μ—†μ—ˆκ³  차후에 ꡬ뢄을 μœ„ν•΄ 0.9라고 뢈리게 λ˜μ—ˆλ‹€κ³  ν•©λ‹ˆλ‹€. μ•„μ£Ό λ‹¨μˆœν•˜κ²Œ GET ν†΅μ‹ λ§Œ κ°€λŠ₯ν•˜κ³  이후에 버전에 μ‘΄μž¬ν•˜λŠ” HTTP 헀더가 μ—†κΈ° λ•Œλ¬Έμ— 전솑은 HTML λ¬Έμ„œλ§Œ κ°€λŠ₯ν•˜κ³  λ‹€λ₯Έ μœ ν˜•μ€ 전솑할 수 μ—†λ‹€.

  • ν΄λΌμ΄μ–ΈνŠΈ-μ„œλ²„, μš”μ²­-응닡 ν”„λ‘œν† μ½œ
  • TCP/IP 링크λ₯Ό 톡해 μ‹€ν–‰λ˜λŠ” ASCII ν”„λ‘œν† μ½œ
  • ν•˜μ΄νΌ ν…μŠ€νŠΈ λ¬Έμ„œ(HTML)을 μ „μ†‘ν•˜λ„λ‘ 섀계
  • μ„œλ²„μ™€ ν΄λΌμ΄μ–ΈνŠΈ κ°„μ˜ 연결은 λͺ¨λ“  μš”μ²­ 후에 λ‹«νžŒλ‹€.

2. HTTP/1.0

HTTP/1.0 μ—μ„œλŠ” μƒνƒœμ½”λ“œκ°€ 응닡값 μ‹œμž‘ 뢀뢄에 ν¬ν•¨λ˜μ–΄ μš”μ²­μ— λŒ€ν•œ 성곡과 μ‹€νŒ¨λ₯Ό λ°”λ‘œ 확인할 수 있게 λ˜μ—ˆλ‹€. 그리고 μœ„μ— μ–ΈκΈ‰ν•˜μ˜€λ˜ HTTP 헀더가 μš”μ²­κ³Ό 응닡 λͺ¨λ‘μ— μΆ”κ°€λ˜μ–΄ ν”„λ‘œν† μ½œμ˜ 확상이 κ°€λŠ₯ν•΄μ§€κ³  ν—€λ”μ˜ β€˜Content-Typeβ€™μ˜ λ„μ›€μœΌλ‘œ HTML 파일 μ΄μ™Έμ˜ λ‹€λ₯Έ λ¬Έμ„œλ“€λ„ 전솑이 κ°€λŠ₯ν•˜κ²Œ λ˜μ—ˆλ‹€. λ˜ν•œ λ©”μ„œλ“œ POST, HEADκ°€ μΆ”κ°€

# html μš”μ²­
GET /mypage.html HTTP/1.0
User-Agent: NCSA_Mosaic/2.0 (Windows 3.1)

# html 응닡
200 OK
Date: Tue, 15 Nov 1994 08:12:31 GMT
Server: CERN/3.0 libwww/2.17
Content-Type: text/html
<HTML>
A page with an image
  <IMG SRC="/myimage.gif">
</HTML>

# gif μš”μ²­
GET / myimage.gif HTTP/1.0

# gif 응닡
200 OK  
...
Content-Type: text/gif

3. HTTP/1.1 - HTTP ν‘œμ€€

1995λ…„λΆ€ν„° λ‹€μ–‘ν•œ HTTP/1.0 κ΅¬ν˜„μ΄ λ™μ‹œμ— μ§„ν–‰λ˜μ—ˆκ³ , λͺ‡λ‹¬ λ’€ 1997λ…„ μ΄ˆμ— HTTP/1.1이 λ°œν‘œλ˜μ—ˆλ‹€. κ·Έ ν›„ 2λ…„ 반 후인 199λ…„ 6μ›” μ—¬λŸ¬ κ°œμ„  사항과 μ—…λ°μ΄νŠΈκ°€ ν‘œμ€€μ— ν†΅ν•©λ˜μ–΄ RFC 2616으둜 μΆœμ‹œ λ˜μ—ˆλ‹€.

4. HTTP/2

HTTP/2λŠ” 2010λ…„ μ „λ°˜κΈ°μ— ꡬ글이 μ‹€ν—˜μ μΈ SPDY ν”„λ‘œν† μ½œμ„ κ΅¬ν˜„ν•΄μ„œ ν΄λΌμ΄μ–ΈνŠΈμ™€ μ„œλ²„ κ°„μ˜ 데이터 κ΅ν™˜μ„ λŒ€μ²΄ν•  μˆ˜λ‹¨μ„ μ‹€μ¦ν–ˆλ‹€κ³  ν•œλ‹€. 그리고 그것이 HTTP/2의 κΈ°μ΄ˆλ‘œμ„œ κΈ°μ—¬ν–ˆλ‹€.

  • SPDY와 이λ₯Ό κΈ°λ°˜μœΌλ‘œν•œ HTTP2의 λ“±μž₯
    • SPDYλŠ” Googleμ—μ„œ κ°œλ°œν•œ μ‹œν—˜μš© ν”„λ‘œν† μ½œμ΄λ©° 20009λ…„ μ€‘λ°˜μ— λ°œν‘œλ˜μ—ˆλ‹€.
    • μ°Έκ³ : PLT 50% κ°œμ„ μ„ μ‹€ν˜„ν•˜κΈ° μœ„ν•œ SPDY의 λͺ©ν‘œλŠ” μƒˆ λ°”μ΄λ„ˆλ¦¬ ν”„λ ˆμ΄λ° 계측을 λ„μž…ν•˜μ—¬ μš”μ²­/응닡 닀쀑화, μš°μ„ μˆœμœ„ μ§€μ • 및 헀더 압좕을 μ§€μ›ν•¨μœΌλ‘œμ¨ κΈ°λ³Έ TCP 연결을 보닀 효율적으둜 μ‚¬μš©ν•˜λŠ” κ²ƒμ΄μ—ˆμŠ΅λ‹ˆλ‹€. Latency as a Performance Bottleneck을 μ°Έμ‘°ν•˜μ„Έμš”.

    • μ„±λŠ₯ ν–₯상에 νž˜μž…μ–΄ SPDYλ₯Ό μ‚¬μš©ν•˜λŠ” μ‚¬μ΄νŠΈκ°€ λŠ˜μ–΄λ‚˜κ²Œ λ˜μ—ˆκ³  μ‚¬μ‹€μƒμ˜ ν‘œμ€€μ΄ λ˜μ—ˆλ‹€. μ΄λŸ¬ν•œ 상황을 μ£Όμ‹œν•˜κ³  있던 HTTP-WGλŠ” HTTP/2 ν‘œμ€€μ„ μ„ λ³΄μ΄λ €λŠ” λ…Έλ ₯을 ν–ˆκ³  이 ν”„λ‘œν† μ½œμ˜ μΆœλ°œμ μ„ SPDY 사양을 μ±„νƒν•˜κ²Œ λ˜μ—ˆλ‹€. μ΄λ ‡κ²Œ 2012λ…„λΆ€ν„° 2015λ…„κΉŒμ§€ 3λ…„κ°„μ˜ λ…Έλ ₯으둜 HTTP/2 ν‘œμ€€μ΄ λ°œν–‰λ˜κ²Œ λ˜μ—ˆλ‹€. κ·Έλ ‡κ²Œ λͺ‡λ…„κ°„ ν•¨κ»˜ λ°œμ „ν•΄μ˜¨ SPDYλŠ” 지원을 μ€‘λ‹¨ν•˜λ©°, HTTP2κ°€ 널리 μ±„νƒλœλ‹€λŠ” 말을 남기고 μ‚¬λΌμ§€κ²Œ λ˜μ—ˆλ‹€.

μ°Έκ³ 

HTTP의 버전 별 차이에 λŒ€ν•΄

HTTP/2 μ†Œκ°œ