HTTP

HTTP(Hyper Text Transfer Protocol)

ν΄λΌμ΄μ–ΈνŠΈμ™€ μ„œλ²„ κ°„μ˜ 데이터(ν…μŠ€νŠΈ, μ˜€λ””μ˜€, λΉ„λ””μ˜€, 이미지 λ“±)λ₯Ό μ£Όκ³ λ°›κ²Œ ν•΄μ£ΌλŠ” TCP/IP 기반의 ν”„λ‘œν† μ½œμ΄λ©°, κΈ°λ³Έ 80포트λ₯Ό μ‚¬μš©ν•œλ‹€.
μ›Ήμ˜ 아버지라 λΆˆλ¦¬λŠ” Tim Bernes-Lee에 μ˜ν•΄ 발λͺ…λ˜μ—ˆλ‹€. μ΄ˆκΈ°μ—λŠ” Mesh라고 뢈렸으며, 이후 개발 κ³Όμ • 쀑에 World Wide Web(WWW)으둜 이름을 λ°”κΎΈμ—ˆλ‹€. μ•„λž˜ 4개의 λΈ”λ‘μœΌλ‘œ κ΅¬μ„±λ˜μ–΄ μžˆλ‹€.

  1. ν•˜μ΄νΌν…μŠ€νŠΈ λ¬Έμ„œλ₯Ό ν‘œν˜„ν•˜κΈ° μœ„ν•œ λ§ˆν¬μ—… μ–Έμ–΄(HTML)
  2. λ¬Έμ„œλ₯Ό κ΅ν™˜ν•˜κΈ° μœ„ν•œ κ°„λ‹¨ν•œ ν”„λ‘œν† μ½œ(HTTP)
  3. λ¬Έμ„œλ₯Ό λ””μŠ€ν”Œλ ˆμ΄ ν•΄μ£ΌλŠ” ν΄λΌμ΄μ–ΈνŠΈ(Web Browser)
  4. λ¬Έμ„œμ— μ ‘κ·Όν•˜λ„λ‘ ν•΄μ£ΌλŠ” μ„œλ²„(httpd)

HTTP νŠΉμ§•

  • ν΄λΌμ΄μ–ΈνŠΈ μ„œλ²„ ꡬ쑰
    • μ„œλ²„κ°€ μš”μ²­(request)에 λŒ€ν•œ κ²°κ³Όλ₯Ό λ§Œλ“€μ–΄μ„œ 응닡이 였면 ν΄λΌμ΄μ–ΈνŠΈκ°€ 응닡(response) κ²°κ³Όλ₯Ό μ—΄μ–΄μ„œ λ™μž‘μ„ ν•˜κ²Œλœλ‹€.
  • λ¬΄μƒνƒœ(Stateless)
    • μ„œλ²„κ°€ ν΄λΌμ΄μ–ΈνŠΈμ˜ μƒνƒœλ₯Ό λ³΄μ‘΄ν•˜μ§€ μ•ŠλŠ”λ‹€.
    • μ„œλ²„ ν™•μž₯성이 λ†’λ‹€λŠ” μž₯점이 있고, ν΄λΌμ΄μ–ΈνŠΈκ°€ μΆ”κ°€ 데이터λ₯Ό μ „μ†‘ν•΄μ•Όν•˜λŠ” 단점이 μžˆλ‹€.
  • λΉ„μ—°κ²°μ„±(Connectionless)
    • ν΄λΌμ΄μ–ΈνŠΈκ°€ μ„œλ²„μ— μš”μ²­μ„ 보내고 응닡을 λ°›κ²Œλ˜λ©΄ λ°”λ‘œ ν΄λΌμ΄μ–ΈνŠΈμ™€ μ„œλ²„μ˜ 연결을 λŠμ–΄λ²„λ¦°λ‹€.
    • 수 천λͺ…이 μ„œλΉ„μŠ€λ₯Ό μ‚¬μš©ν•΄λ„ μ‹€μ œ μ„œλ²„μ—μ„œ λ™μ‹œμ— μ²˜λ¦¬ν•˜λŠ” μš”μ²­μ€ 수 μ‹­κ°œ μ΄ν•˜λ‘œ μž‘μœΌλ―€λ‘œ μ„œλ²„ μžμ›μ„ 효율적으둜 μ‚¬μš©ν•  수 μžˆλ‹€.
  • http 메세지
    • ν•˜λ‹¨ μ°Έκ³ 

HTTP λ™μž‘ κ³Όμ •

  1. μ‚¬μš©μžκ°€ μ›Ή λΈŒλΌμš°μ €μ— μ ‘μ†ν•œλ‹€.
  2. DNS μ„œλ²„μ— μ›Ή μ„œλ²„μ˜ 호슀트 이름을 IP μ£Όμ†Œλ‘œ λ³€κ²½ν•œλ‹€.
  3. μ›Ή μ„œλ²„μ™€ TCP 연결을 μ‹œλ„ν•œλ‹€.(3-way handshake: ν΄λΌμ΄μ–ΈνŠΈ - μ„œλ²„ 간에 μ‹ λ’°μ„± μžˆλŠ” 연결을 μœ„ν•΄ 3번의 νŒ¨ν‚· κ΅ν™˜ κ³Όμ •)
    1. ν΄λΌμ΄μ–ΈνŠΈ β†’ μ„œλ²„(SYN): ν΄λΌμ΄μ–ΈνŠΈλŠ” μ„œλ²„μ™€ 컀λ„₯μ…˜μ„ μ—°κ²°ν•˜κΈ° μœ„ν•΄ νŒ¨ν‚·(SYN(x))을 μ „μ†‘ν•œλ‹€.
    2. μ„œλ²„ β†’ ν΄λΌμ΄μ–ΈνŠΈ(ACK + SYN): μ„œλ²„λŠ” ν΄λΌμ΄μ–ΈνŠΈμ—μ„œ μ „μ†‘ν•œ νŒ¨ν‚·(SYN(x))을 λ°›κ³  ν΄λΌμ΄μ–ΈνŠΈμ—κ²Œ λ°›μ•˜λ‹€λŠ” μ‹ ν˜ΈμΈ ACK(x+1)와 SYN(y) νŒ¨ν‚·μ„ μ „μ†‘ν•œλ‹€.
    3. ν΄λΌμ΄μ–ΈνŠΈ β†’ μ„œλ²„(ACK): ν΄λΌμ΄μ–ΈνŠΈλŠ” μ„œλ²„μ˜ 응닡 νŒ¨ν‚·(ACK(x+1) + SYN(y))을 λ°›κ³  ACK(y+1)λ₯Ό μ„œλ²„λ‘œ μ „μ†‘ν•œλ‹€.
  4. ν΄λΌμ΄μ–ΈνŠΈκ°€ μ„œλ²„μ— 데이터λ₯Ό μš”μ²­(REQUEST) ν•œλ‹€.
  5. μ„œλ²„κ°€ ν΄λΌμ΄μ–ΈνŠΈμ—κ²Œ 응닡(RESPONSE) ν•œλ‹€.
  6. μ„œλ²„μ™€ ν΄λΌμ΄μ–ΈνŠΈ κ°„μ˜ μ—°κ²° μ’…λ£Œν•œλ‹€.(4-way handshaking: ν΄λΌμ΄μ–ΈνŠΈ - μ„œλ²„ 간에 연결을 ν•΄μ œν•˜λŠ” 4번의 νŒ¨ν‚· κ΅ν™˜ κ³Όμ •)
    1. ν΄λΌμ΄μ–ΈνŠΈ β†’ μ„œλ²„(FIN(+ACK)): ν΄λΌμ΄μ–ΈνŠΈλŠ” μ„œλ²„μ—κ²Œ 연결을 μ’…λ£Œν•œλ‹€λŠ” FIN νŒ¨ν‚·(ACK 포함)을 μ „μ†‘ν•œλ‹€.
    2. μ„œλ²„ β†’ ν΄λΌμ΄μ–ΈνŠΈ(ACK): μ„œλ²„λŠ” FIN을 λ°›κ³  ν™•μΈν–ˆλ‹€λŠ” ACKλ₯Ό ν΄λΌμ΄μ–ΈνŠΈμ—κ²Œ μ „μ†‘ν•˜κ³  μžμ‹ μ˜ 톡신이 끝날 λ•ŒκΉŒμ§€ κΈ°λ‹€λ¦°λ‹€.(TIME_WAIT μƒνƒœ)
    3. μ„œλ²„ β†’ ν΄λΌμ΄μ–ΈνŠΈ(FIN): 데이터λ₯Ό λͺ¨λ‘ μ „μ†‘ν–ˆλ‹€λ©΄ μ„œλ²„λŠ” 연결이 μ’…λ£Œλλ‹€λŠ” 의미둜 FIN νŒ¨ν‚·μ„ ν΄λΌμ΄μ–ΈνŠΈμ—κ²Œ μ „μ†‘ν•œ ν›„ 승인번호λ₯Ό 쀄 λ•ŒκΉŒμ§€ κΈ°λ‹€λ¦°λ‹€.(LAST_ACK μƒνƒœ)
    4. ν΄λΌμ΄μ–ΈνŠΈ β†’ μ„œλ²„(ACK): ν΄λΌμ΄μ–ΈνŠΈλŠ” FIN을 λ°›κ³  ν™•μΈν–ˆλ‹€λŠ” ACK νŒ¨ν‚·μ„ μ „μ†‘ν•œλ‹€.
  7. μ›Ή λΈŒλΌμš°μ €κ°€ μ›Ή λ¬Έμ„œλ₯Ό 좜λ ₯ν•œλ‹€.

HTTP λ©”μ‹œμ§€

ν΄λΌμ΄μ–ΈνŠΈμ—μ„œ μ„œλ²„λ‘œ 데이터λ₯Ό λ³΄λ‚΄λŠ” 것은 μš”μ²­(REQUEST), μ„œλ²„μ—μ„œ ν΄λΌμ΄μ–ΈνŠΈλ‘œ 데이터λ₯Ό λ³΄λ‚΄λŠ” 것은 응닡(RESPONSE)이라고 ν•œλ‹€.
이 μš”μ²­κ³Ό 응닡은 μ‹œμž‘μ€„, 헀더, μ—”ν„°ν‹° 본문으둜 κ΅¬μ„±λœλ‹€. 그리고 μ‹œμž‘μ€„, 헀더, μ—”ν„°ν‹°λŠ” μ€„λ°”κΏˆμœΌλ‘œ κ΅¬λΆ„λœλ‹€.

  • μš”μ²­ λ©”μ‹œμ§€(Request Message)
    • λ©”μ„œλ“œ(Method)
      첫 μ€„μ—λŠ” ν΄λΌμ΄μ–ΈνŠΈκ°€ 무엇을, μ–΄λ–»κ²Œ μ²˜λ¦¬ν•˜κ³ μž ν•œλ‹€λŠ” 정보가 담겨 μžˆλŠ”λ° 이 λ•Œ λ©”μ„œλ“œλŠ” β€œμ–΄λ–»κ²Œβ€, 즉 처리 방식에 ν•΄λ‹Ήν•œλ‹€.
      λ‹€μ‹œ λ§ν•΄μ„œ ν΄λΌμ΄μ–ΈνŠΈκ°€ μ„œλ²„μ—κ²Œ 데이터λ₯Ό μš”μ²­ν•˜κ³ , μš”μ²­ν•˜λŠ” 데이터에 μˆ˜ν–‰ν•˜κ³ μž ν•˜λŠ” λ™μž‘μ„ λ‚˜νƒ€λ‚Έλ‹€.
      λ©”μ„œλ“œμ˜ μ’…λ₯˜λŠ” μ•„λž˜μ™€ κ°™λ‹€.
      • GET: μ‘΄μž¬ν•˜λŠ” μžμ›μ— λŒ€ν•œ μš”μ²­
      • POST: μƒˆλ‘œμš΄ μžμ›μ„ 생성
      • PUT: μ‘΄μž¬ν•˜λŠ” μžμ›μ— λŒ€ν•œ λ³€κ²½
      • DELETE: μ‘΄μž¬ν•˜λŠ” μžμ›μ— λŒ€ν•œ μ‚­μ œ
    • 경둜(URL)
      λ©”μ„œλ“œκ°€ β€œμ–΄λ–»κ²Œβ€μ— ν•΄λ‹Ήν•œλ‹€λ©΄, κ²½λ‘œλŠ” λ©”μ„œλ“œλ₯Ό μ°Έκ³ ν•˜μ—¬ μˆ˜ν–‰ν•  λŒ€μƒ, 즉 β€œλ¬΄μ—‡μ„β€μ— ν•΄λ‹Ήν•œλ‹€. 주둜 κ°€μ Έμ˜€λ €λŠ” λ¦¬μ†ŒμŠ€μ˜ 경둜λ₯Ό ν‘œμ‹œν•˜λ©° ν˜•νƒœλŠ” β€œhttps://www.google.comβ€μ²˜λŸΌ μ™„μ „ν•œ ν˜•μ‹, β€œ/index.htmlβ€μ²˜λŸΌ μƒλŒ€μ μΈ ν˜•μ‹ λ“± λ©”μ„œλ“œμ˜ μœ ν˜•μ— 따라 λ‹€μ–‘ν•œ 포맷이 μžˆλ‹€.

    • ν”„λ‘œν† μ½œ 버전(Vesion of protocol)
      HTTP ν”„λ‘œν† μ½œμ˜ 버전을 ν‘œμ‹œν•œλ‹€. ν˜„μž¬λŠ” 1.1버전과 2버전이 μ£Όλ₯Ό 이루고 μžˆλ‹€.

    • 헀더(Headers)
      μ„œλ²„μ— λŒ€ν•œ μΆ”κ°€ 정보λ₯Ό μ „λ‹¬ν•œλ‹€. 주둜 호슀트의 μ •λ³΄λ‚˜ μ ‘μ†ν•˜κ³  μžˆλŠ” μ‚¬μš©μžμ˜ 정보, 그리고 μ ‘μ†ν•˜λ €κ³  ν•˜λŠ” νŽ˜μ΄μ§€μ˜ 정보 등을 확인할 수 μžˆλ‹€.
      • user-agent: μ›Ή λΈŒλΌμš°μ €μ˜ λ‹€λ₯Έ ν‘œν˜„. μš”μ²­ν•˜λŠ” μ›Ή λΈŒλΌμš°μ €μ˜ 정보 및 운영체제λ₯Ό ν‘œμ‹œν•œλ‹€.
      • accept-encoding: ν΄λΌμ΄μ–ΈνŠΈκ°€ 이해할 수 μžˆλŠ” μ••μΆ• 방식을 ν‘œμ‹œν•œλ‹€. accept-encoding을 ν‘œκΈ°ν•˜μ—¬ μ„œλ²„μ—κ²Œ μ „μ†‘ν•˜λ©΄ μ„œλ²„λŠ” ν•„μš”ν•œ 경우 λ¦¬μ†ŒμŠ€λ₯Ό μ••μΆ•ν•˜μ—¬ λ°˜ν™˜ν•œλ‹€.
    • 곡백 라인(Empty Line)
      곡백 라인은 헀더와 본문을 κ΅¬λΆ„ν•˜λŠ” 역할이닀. 빈 쀄이 μ—†μœΌλ©΄ λ©”μ‹œμ§€λ₯Ό 읽을 λ•Œ μ–΄λ””κΉŒμ§€κ°€ 헀더이며 μ–΄λ””λΆ€ν„°κ°€ 본문인지λ₯Ό νŒŒμ•…ν•  수 μ—†κΈ° λ•Œλ¬Έμ— μ€‘μš”ν•œ μš”μ†Œμ΄λ‹€.

    • λ³Έλ¬Έ(Request Message Body)
      λ©”μ‹œμ§€μ˜ κ°€μž₯ λ§ˆμ§€λ§‰μ— λ“€μ–΄κ°€λŠ” 컨텐츠이닀. λ‹€λ§Œ λ‹€λ₯Έ μ»¨ν…μΈ μ™€λŠ” λ‹€λ₯΄κ²Œ 본문은 ν•„μˆ˜ μš”μ†ŒλŠ” μ•„λ‹ˆλ‹€. λ©”μ„œλ“œκ°€ GET, HEAD, DELETE, OPTIONS 처럼 λ¦¬μ†ŒμŠ€λ₯Ό κ°€μ Έμ˜€λŠ” μš”μ²­μ€ 보톡 본문이 ν•„μš” μ—†κΈ° λ•Œλ¬Έμ΄λ‹€.
      λ”°λΌμ„œ POST처럼 μ„œλ²„μ— μƒˆλ‘œμš΄ μžμ›μ„ μΆ”κ°€ν•΄μ•Ό ν•˜λŠ” κ²½μš°μ— κ·Έ 정보λ₯Ό 본문에 μž‘μ„±ν•˜μ—¬ μ „λ‹¬ν•œλ‹€.
  • 응닡 λ©”μ‹œμ§€(Response Message)
    • ν”„λ‘œν† μ½œ 버전(Vesion of protocol)
      μš”μ²­ λ©”μ‹œμ§€μ™€ λ™μΌν•˜λ©° HTTP ν”„λ‘œν† μ½œμ˜ 버전을 λ‚˜νƒ€λ‚Έλ‹€.

    • μƒνƒœ μ½”λ“œ(Status code)
      μƒνƒœ μ½”λ“œλŠ” ν΄λΌμ΄μ–ΈνŠΈ μš”μ²­μ˜ 성곡 μ—¬λΆ€λ₯Ό 숫자둜 λ‚˜νƒ€λ‚Έ 것이며, μƒνƒœ λ©”μ‹œμ§€λŠ” μƒνƒœ μ½”λ“œλ₯Ό μ΄ν•΄ν•˜κΈ° μ‰½κ²Œ μ˜μ–΄λ‘œ ν’€μ–΄μ“΄ λ©”μ‹œμ§€μ΄λ‹€. μƒνƒœ μ½”λ“œμ™€ μƒνƒœ λ©”μ‹œμ§€λŠ” 100λ²ˆλŒ€λΆ€ν„° 500λ²ˆλŒ€κΉŒμ§€ μ‘΄μž¬ν•˜λŠ”λ° κ·Έ 쀑 μš°λ¦¬κ°€ κ°€μž₯ 자주 μ ‘ν•˜λŠ” μ½”λ“œλŠ” μ„±κ³΅ν–ˆμ„ λ•Œ λ‚˜μ˜€λŠ” 200λ²ˆλŒ€, μ›Ή λΈŒλΌμš°μ € μΈ‘μ—μ„œ 였λ₯˜κ°€ λ°œμƒν–ˆμ„ λ•Œ λ‚˜μ˜€λŠ” 400λ²ˆλŒ€μ΄λ‹€.
      크게 5개둜 λ‚˜νƒ€λ‚΄λŠ” μƒνƒœμ½”λ“œλŠ” μ•„λž˜μ™€ κ°™λ‹€.(μžμ„Έν•œ μƒνƒœ μ½”λ“œλŠ” 링크 μ°Έκ³ )
      • 1xx(쑰건뢀 응닡): μš”μ²­μ„ λ°›μ•˜μœΌλ©° μž‘μ—…μ„ κ³„μ†ν•œλ‹€.
      • 2xx(성곡): μ •μƒμ μœΌλ‘œ μš”μ²­μ„ μˆ˜ν–‰ν–ˆμ„ λ•Œ λ‚˜νƒ€λ‚΄λŠ” μ½”λ“œμ΄λ‹€.
      • 3xx(λ¦¬λ‹€μ΄λ ‰μ…˜ μ™„λ£Œ): ν΄λΌμ΄μ–ΈνŠΈκ°€ μš”μ²­μ„ 마치기 μœ„ν•΄ μΆ”κ°€ λ™μž‘μ„ μ·¨ν•΄μ•Όν•  λ•Œ λ‚˜νƒ€λ‚œλ‹€.
      • 4xx(μš”μ²­ 였λ₯˜): ν΄λΌμ΄μ–ΈνŠΈμ˜ μš”μ²­μ— 였λ₯˜κ°€ μžˆμ„ λ•Œ λ‚˜νƒ€λ‚΄λŠ” μ½”λ“œμ΄λ‹€.
      • 5xx(μ„œλ²„ 였λ₯˜): μ„œλ²„κ°€ λ“€μ–΄μ˜¨ μš”μ²­μ„ μˆ˜ν–‰ν•˜μ§€ λͺ»ν–ˆμ„ λ•Œ λ‚˜νƒ€λ‚΄λŠ” μ½”λ“œμ΄λ‹€.
    • 헀더(Headers)
      μš”μ²­ 헀더와 μœ μ‚¬ν•œ ν˜•μ‹μœΌλ‘œ μΆ”κ°€ 정보λ₯Ό μ „λ‹¬ν•œλ‹€.
      • content-type: μ „λ‹¬ν•œ λ¦¬μ†ŒμŠ€μ˜ νƒ€μž…. text/html이라면 ν…μŠ€νŠΈ μ€‘μ—μ„œλ„ HTML νƒ€μž…μ΄λΌλŠ” 뜻이며, image/jpeg라면 jpeg ν™•μž₯자λ₯Ό 가진 μ΄λ―Έμ§€μž„μ„ μ˜λ―Έν•œλ‹€.
      • content-encoding: 응닡 λ©”μ‹œμ§€ ν—€λ”μ˜ accept-encoding처럼 컨텐츠가 μ••μΆ•λœ 방식을 ν‘œμ‹œν•œλ‹€.
      • date: ν•΄λ‹Ή λ©”μ‹œμ§€κ°€ λ§Œλ“€μ–΄μ§„ λ‚ μ§œμ™€ μ‹œκ°„μ„ ν¬ν•¨ν•œλ‹€.
    • λ³Έλ¬Έ(Body)
      κ°€μ Έμ˜¨ λ¦¬μ†ŒμŠ€κ°€ ν‘œμ‹œλœλ‹€. λ§Œμ•½ λ¦¬μ†ŒμŠ€ μœ ν˜•μ΄ HTML이라면 <html><body></body></html> ν˜•νƒœμ˜ HTMLμ½”λ“œκ°€ λ‚˜νƒ€λ‚˜κ³ , μœ ν˜•μ΄ 이미지 λ˜λŠ” λ™μ˜μƒμ΄λ©΄ 그에 λ§žλŠ” μ½”λ“œκ°€ ν‘œμ‹œλœλ‹€.

HTTP 버전별 νŠΉμ§•

  • HTTP/0.9
    • 헀더, μƒνƒœ, λ°”λ””, 였λ₯˜μ™€ 같은 κ°œλ…μ΄ μ—†μ—ˆκ³ , GET λ©”μ„œλ“œλ§Œμ΄ μœ μΌν–ˆλ‹€.
    • 원라인 ν”„λ‘œν† μ½œμ΄λ‹€.
  • HTTP/1.0
    • 헀더가 μΆ”κ°€λ˜μ–΄ 메타데이터λ₯Ό 전솑할 수 있게 λ˜μ—ˆλ‹€.
    • Content-Type이 μ‘΄μž¬ν•˜μ—¬ HTML이 μ•„λ‹Œ λ‹€λ₯Έ λ¬Έμ„œλ„ 전솑할 수 있게 λ˜μ—ˆλ‹€.
    • HTTP 버전을 확인할 수 μžˆμ—ˆλ‹€.
    • μƒνƒœμ½”λ“œκ°€ μ‘λ‹΅μ˜ μ‹œμž‘λΆ€λΆ„μ— λΆ™μ–΄ μ „μ†‘λ˜μ—ˆκ³ , κ·Έ 결과에 λŒ€ν•œ λ™μž‘μ„ ν•  수 있게 λ˜μ—ˆλ‹€.
  • HTTP/1.1
    • HTTP의 첫번째 ν‘œμ€€ 버전이닀.
    • μ—¬λŸ¬ μš”μ²­μ΄ ν•˜λ‚˜μ˜ 컀λ„₯μ…˜μ„ 톡해 μ²˜λ¦¬ν•  수 있게 λ˜μ—ˆλ‹€.
    • ν•˜λ‚˜μ˜ μ»€ν…μ…˜μ—μ„œ 응닡을 기닀리지 μ•Šκ³  순차적인 μ—¬λŸ¬ μš”μ²­μ„ μ—°μ†μ μœΌλ‘œ 보내 κ·Έ μˆœμ„œμ— 맞좰 응닡을 λ°›λŠ” λ°©μ‹μœΌλ‘œ, 지연 μ‹œκ°„μ„ μ€„μ΄λŠ” 방법인 Pipelining이 λ„μž…λ˜μ—ˆλ‹€.
      ν•˜μ§€λ§Œ μ•„λž˜μ™€ 같이 문제점이 μžˆλ‹€.
      • Head Of Line Blocking, μ•ž μš”μ²­μ˜ μ‹œκ°„μ΄ 였래 걸리면 뒀에 μ˜€λŠ” μš”μ²­λ„ ν•΄λ‹Ή μš”μ²­μ΄ 처리될 λ•ŒκΉŒμ§€ κΈ°λ‹€λ €μ•Όν•˜λŠ” ν˜„μƒμ΄λ‹€.
      • Header ꡬ쑰의 쀑볡, μ—°μ†λœ μš”μ²­μ˜ 경우 Header 값이 같은 κ²½μš°κ°€ λ§ŽμŒμ—λ„ λΆˆκ΅¬ν•˜κ³  μ€‘λ³΅λœ 값을 κ·ΈλŒ€λ‘œ μ „μ†‘ν•˜λŠ” ν˜„μƒμ΄λ‹€. μ£Όκ³  λ°›λŠ” 데이터가 λΆˆν•„μš”ν•˜κ²Œ 컀진닀.
    • 컀λ„₯μ…˜μ΄ μž¬μ‚¬μš©λ  수 μžˆλ„λ‘ μ‚¬μš©λœ 컀λ„₯μ…˜μ„ μœ μ§€ν•˜μ—¬ μ‹œκ°„μ„ μ ˆμ•½ν•˜κ²Œ λ˜μ—ˆλ‹€.(Keep-Alive)
    • μΊμ‹œ μ œμ–΄ λ©”μ»€λ‹ˆμ¦˜μ΄ λ„μž…λ˜μ—ˆλ‹€.(ETag)
    • 동일 IP μ£Όμ†Œμ— λ‹€λ₯Έ 도메인을 ν˜ΈμŠ€νŠΈν•˜λŠ” κΈ°λŠ₯ κ°€λŠ₯ν•΄μ‘Œλ‹€.(HOST header)
  • HTTP/2
    • κΈ°μ‘΄ λ²„μ „μ˜ μ„±λŠ₯ ν–₯상에 μ΄ˆμ μ„ 맞좘 ν”„λ‘œν† μ½œμ΄λ‹€. 즉, ν‘œμ€€μ˜ λŒ€μ²΄κ°€ μ•„λ‹Œ ν™•μž₯을 λͺ©μ μœΌλ‘œ ν•œλ‹€.
    • μš”μ²­κ³Ό μ‘λ‹΅μ˜ λ©€ν‹°ν”Œλ ‰μ‹±μ„ μ§€μ›ν•œλ‹€.
      • λ°”μ΄λ„ˆλ¦¬ ν”„λ ˆμ΄λ° 계측을 μ‚¬μš©ν•˜μ—¬, νŒŒμ‹±κ³Ό 전솑 속도λ₯Ό 높이고 였λ₯˜ λ°œμƒ κ°€λŠ₯성을 쀄인닀.
      • λ©”μ‹œμ§€λ₯Ό ν”„λ ˆμž„μ΄λΌλŠ” λ‹¨μœ„(ν—€λ”μŠ€ ν”„λ ˆμž„, 데이타 ν”„λ ˆμž„)둜 λΆ„ν• ν•˜κ³ , 이λ₯Ό λ°”μ΄λ„ˆλ¦¬λ‘œ μΈμ½”λ”©ν•œλ‹€.
      • ν•˜λ‚˜μ˜ TCP 컀λ„₯μ…˜λ§ŒμœΌλ‘œ ν•΄λ‹Ή μ›Ή νŽ˜μ΄μ§€μ˜ λͺ¨λ“  μš”μ²­κ³Ό 응닡 데이터λ₯Ό μ „μ†‘ν•˜λ©°, λ°”μ΄λ„ˆλ¦¬ ν”„λ ˆμž„μ˜ 슀트림 전솑 방식을 톡해 응닡 μˆœμ„œμ— λ¬΄κ΄€ν•˜κ²Œ 데이터λ₯Ό μ²˜λ¦¬ν•œλ‹€.
      • HTTP/1.1의 Pipeliningκ³Ό λ©€ν‹°ν”Œλ ‰μ‹±μ˜ κ°€μž₯ 큰 μ°¨μ΄λŠ” 순차적 응닡 μ²˜λ¦¬μ— λ”°λ₯Έ HOLB(Head Of Line Blocking)λ₯Ό μ™„λ²½ν•˜κ²Œ ν•΄κ²°ν–ˆλ‹€λŠ” 것이닀.
    • λ¨Όμ € 응닡 λ°›κ³  싢은 μš”μ²­μ˜ μš°μ„ μˆœμœ„(Stream Priority)λ₯Ό 지정할 수 μžˆλ‹€.
    • HTTP 헀더 데이터 μ••μΆ• κΈ°λŠ₯이 μΆ”κ°€λ˜μ–΄ νŽ˜μ΄μ§€ λ‘œλ“œ μ‹œκ°„μ„ μ€„μ˜€λ‹€.
      • Header tableκ³Ό Huffman Encoding 기법을 μ‚¬μš©ν•˜μ—¬ Header 정보λ₯Ό μ••μΆ•(HPACK μ••μΆ• 방식)ν•œλ‹€.
      • HPACK μ•Œκ³ λ¦¬μ¦˜μœΌλ‘œλŠ” Header 크기λ₯Ό μ•½ 85%둜 μ••μΆ•ν•  수 μžˆλ‹€κ³  ν•œλ‹€.
    • Server Push 기술 λ„μž…μ΄ λ˜μ—ˆλ‹€.
      • ν΄λΌμ΄μ–ΈνŠΈκ°€ μš”μ²­ν•  κ²ƒμœΌλ‘œ μ˜ˆμƒλ˜λŠ” λ¦¬μ†ŒμŠ€λ₯Ό ν΄λΌμ΄μ–ΈνŠΈκ°€ μš”μ²­ν•˜μ§€ μ•Šμ•„λ„ μ•Œμ•„μ„œ μ„œλ²„μ—μ„œ Pushν•΄μ„œ 보내쀀닀.
  • HTTP/3
    • UDP 기반의 ν”„λ‘œν† μ½œμ„ μ‚¬μš©ν•œλ‹€.(μ •ν™•ν•˜κ²ŒλŠ” QUIC)
      • β€œHTTP over QUIC”이라고 ν‘œν˜„ν•˜κ³  μ€„μ—¬μ„œ HQ라고 ν•œλ‹€.
      • HTTP/2에 μžˆλŠ” ν”„λ ˆμž„, 슀트림, λ©”μ‹œμ§€ ꡬ쑰와 κΈ°μˆ λ“€μ€ κ·ΈλŒ€λ‘œ HTTP/3둜 μŠΉκ³„λ˜μ—ˆκ³  λͺ…μΉ­λ§Œ HQframe, QPACK λ“±μœΌλ‘œ λ³€κ²½λ˜μ—ˆλ‹€.
      • μ§€μ›ν•˜λŠ” λΈŒλΌμš°μ €λŠ” 링크λ₯Ό μ°Έκ³ 
    • UDPλŠ” 데이터 신뒰성을 보μž₯ν•˜μ§€ μ•Šμ§€λ§Œ QUIC 계측 μΆ”κ°€λ₯Ό 톡해 TCP와 같은 신뒰성을 μ œκ³΅ν•œλ‹€.
    • Handshakeλ₯Ό μ‚¬μš©ν•˜μ§€ μ•Šμ•„μ„œ λΉ λ₯΄λ‹€.
    • HTTP/2D의 λ©€ν‹°ν”Œλ ‰μ‹±κ³Ό 같이 ν•˜λ‚˜μ˜ μ—°κ²°λ‘œ λ‹€μˆ˜μ˜ 병렬 슀트림으둜 데이터λ₯Ό λ™μ‹œ μ „μ†‘ν•˜λ©° UDP κΈ°λ°˜μ΄μ§€λ§Œ 그와 λ‹€λ₯΄κ²Œ TCP와 같은 μˆœμ„œμ— λ§žλŠ” 전솑 처리λ₯Ό ν•œλ‹€.
    • HTTP/2μ—μ„œλŠ” μ—¬λŸ¬ 슀트림 쀑에 ν•˜λ‚˜μ˜ 슀트림이 νŒ¨ν‚·μ„ μžƒλŠ” 경우 볡ꡬ가 λ˜μ§€ μ•Šμ•˜μ§€λ§Œ QUICλŠ” λ‹€λ₯Έ 슀트림이 전솑 쀑에 μžƒμ€ 슀트림의 νŒ¨ν‚·μ„ μž¬μ „μ†‘ν•˜μ—¬ μ™„λ£Œκ°€ κ°€λŠ₯ν•˜λ‹€.
    • 일반적인 μ›Ή ν™˜κ²½μ—μ„œλŠ” HTTP/2와 차이가 크지 μ•Šμ„ 수 μžˆμ§€λ§Œ, λ™μ˜μƒ μ„œλΉ„μŠ€ λ“±μ—μ„œλŠ” 큰 차이λ₯Ό 보인닀.

HTTP/1.1 VS HTTP/2 속도λ₯Ό ν™•μΈν•˜λŠ” μ‚¬μ΄νŠΈ

Categories:

Updated:

Leave a comment