Skip to content

Latest commit

Β 

History

History
376 lines (224 loc) Β· 13 KB

HTTP_κΈ°λ³Έ.md

File metadata and controls

376 lines (224 loc) Β· 13 KB

λͺ¨λ“  것이 HTTP

HTTP(Hyper Text Transfer Protocol)

λ¬Έμ„œ 간에 링크λ₯Ό 톡해 μ—°κ²°ν•  수 μžˆλŠ” ν”„λ‘œν† μ½œ ν•˜μ§€λ§Œ, μ΄μ œλŠ” λ¬Έμ„œλΏ μ•„λ‹ˆλΌ HTTP λ©”μ‹œμ§€μ— λͺ¨λ“  것을 μ „μ†‘ν•œλ‹€.

  • HTML, TEXT
  • IMAGE, μŒμ„±, μ˜μƒ, 파일
  • JSON, XML(API)
  • 거의 λͺ¨λ“  ν˜•νƒœμ˜ 데이터가 전솑 κ°€λŠ₯ν•˜λ‹€.
  • μ„œλ²„ 간에 데이터λ₯Ό 주고받을 λ•Œλ„ λŒ€λΆ€λΆ„ HTTPλ₯Ό μ‚¬μš©ν•œλ‹€.



HTTP의 역사

  • HTTP/0.9 1991λ…„ : GET λ©”μ„œλ“œλ§Œ 지원, HTTP 헀더 X

  • HTTP/1.0 1996λ…„ : λ©”μ„œλ“œ, 헀더 μΆ”κ°€

  • HTTP/1.1 1997λ…„ : κ°€μž₯ 많이 μ‚¬μš©ν•˜λ©°, μš°λ¦¬μ—κ²Œ κ°€μž₯ μ€‘μš”ν•œ 버전

    • RFC2068 (1997) πŸ‘‰ RFC2616 (1999)(κ°œμ •) πŸ‘‰ RFC7230~7235 (2014)(κ°œμ •)
    • _1.1에 λŒ€λΆ€λΆ„μ˜ κΈ°λŠ₯이 λ“€μ–΄κ°”κ³ , 2와 3μ—μ„œλŠ” μ„±λŠ₯ κ°œμ„ μ— 초점이 맞좰져 μžˆλ‹€. _
  • HTTP/2 2015λ…„ : μ„±λŠ₯ κ°œμ„ 

  • HTTP/3 진행 쀑 : TCP λŒ€μ‹ μ— UDP μ‚¬μš©, μ„±λŠ₯ κ°œμ„ 



기반 ν”„λ‘œν† μ½œ

  • TCP : HTTP/1.1, HTTP/2λŠ” TCP 기반으둜 λ™μž‘ν•œλ‹€.
  • UDP : HTTP/3
  • ν˜„μž¬ HTTP/1.1을 주둜 μ‚¬μš©ν•œλ‹€.
    • HTTP/2, HTTP/3도 점차 μ¦κ°€ν•˜κ³  μžˆλ‹€.

πŸ’‘ μ–΄μ§Έμ„œ HTTP/3λŠ” UDP κΈ°λ°˜μ΄μ§€?

κΈ°μ‘΄ TCPλŠ” 3 way hanshakeλΆ€ν„° λ‚΄λΆ€μ μœΌλ‘œ ν¬ν•¨ν•˜κ±°λ‚˜ μΆ”κ°€ν•΄μ•Ό ν•˜λŠ” μž‘μ—…λ“€μ΄ λ„ˆλ¬΄ λ§Žμ•„μ„œ μ‹ λ’°μ„±μ΄λ‚˜ 연결성은 보μž₯λ˜μ§€λ§Œ 속도가 떨어진닀. 그렇기에 UDP ν”„λ‘œν† μ½œμ„ μ• ν”Œλ¦¬μΌ€μ΄μ…˜ λ ˆλ²¨μ—μ„œ μž¬μ„€κ³„λ₯Ό ν•΄μ„œ λ‚˜μ˜¨ 게 HTTP/3이닀.



βœ… HTTP νŠΉμ§•

  • ν΄λΌμ΄μ–ΈνŠΈ μ„œλ²„ ꡬ쑰둜 λ™μž‘ν•œλ‹€.
  • λ¬΄μƒνƒœ ν”„λ‘œν† μ½œ(stateless), λΉ„μ—°κ²°μ„±
  • HTTP λ©”μ‹œμ§€λ₯Ό ν†΅ν•΄μ„œ 톡신을 ν•œλ‹€(솑/μˆ˜μ‹  λͺ¨λ‘)
  • λ‹¨μˆœν•¨, ν™•μž₯ κ°€λŠ₯



ν΄λΌμ΄μ–ΈνŠΈ μ„œλ²„ ꡬ쑰

HTTPλŠ” ν΄λΌμ΄μ–ΈνŠΈμ™€ μ„œλ²„ ꡬ쑰둜 λ˜μ–΄μžˆλŠ”λ°, HTTPλŠ” ν΄λΌμ΄μ–ΈνŠΈκ°€ HTTP λ©”μ‹œμ§€λ₯Ό λ§Œλ“€μ–΄ 보내고, μ„œλ²„μ—μ„œ μš”μ²­μ— λŒ€ν•œ 응닡이 올 λ•ŒκΉŒμ§€ κΈ°λ‹€λ¦°λ‹€.(Request) 그리고 μ„œλ²„λŠ” μš”μ²­μ— λŒ€ν•œ κ²°κ³Όλ₯Ό λ§Œλ“€μ–΄μ„œ 응닡(Response) ν•˜λŠ” ꡬ쑰인데, μ–΄μ§Έμ„œ μ΄λ ‡κ²Œ ν΄λΌμ΄μ–ΈνŠΈμ™€ μ„œλ²„λ₯Ό λΆ„λ¦¬ν•΄μ•Όλ§Œ ν• κΉŒ?


각자의 역할에 집쀑할 수 μžˆλ‹€.

  • ν΄λΌμ΄μ–ΈνŠΈμ—μ„œλŠ” λ³΅μž‘ν•œ λΉ„μ¦ˆλ‹ˆμŠ€ λ‘œμ§μ΄λ‚˜ 데이터λ₯Ό λ‹€λ£° ν•„μš” μ—†κ³ , UIλ₯Ό κ·Έλ¦¬λŠ”λ° 집쀑할 수 μžˆλ‹€.

  • μ„œλ²„μ—μ„œλŠ” λ³΅μž‘ν•œ λΉ„μ¦ˆλ‹ˆμŠ€ λ‘œμ§μ΄λ‚˜, 데이터λ₯Ό λ‹€λ£¨λŠ” 데만 μ§‘μ€‘ν•˜λ©΄ λœλ‹€.
    πŸ‘‰ λ§Œμ•½ νŠΈλž˜ν”½μ΄ 폭주해 고도화가 ν•„μš”ν•œ 경우 ν΄λΌμ΄μ–ΈνŠΈλŠ” μ‹ κ²½ 쓰지 μ•Šκ³  μ„œλ²„λ§Œ κ°œμ„ ν•˜λ©΄ λœλ‹€.


정리

ν΄λΌμ΄μ–ΈνŠΈμ™€ μ„œλ²„λ₯Ό λ…λ¦½μ μœΌλ‘œ κ΅¬λΆ„ν•œλ‹€λŠ” 것은 각자의 μ±…μž„μ„ λ‚˜λˆ  ν•΄λ‹Ή μ±…μž„μ—λ§Œ μ§‘μ€‘ν•˜μ—¬, μ΄μŠˆκ°€ μƒκΈ°κ±°λ‚˜ ν•  λ•Œ ν•œ μͺ½μ—λ§Œ μ‹ κ²½ μ“°λ©΄ λœλ‹€λŠ” μž₯점을 가진닀.



Stateful, Stateless

Stateful(μƒνƒœ μœ μ§€)

μ„œλ²„κ°€ ν΄λΌμ΄μ–ΈνŠΈμ˜ μƒνƒœλ₯Ό λ³΄μ‘΄ν•œλ‹€.

즉, ν΄λΌμ΄μ–ΈνŠΈμ™€ μ„œλ²„ 간에 솑/μˆ˜μ‹ μ„ ν•˜λ©° 단계별 과정을 μ§„ν–‰ν•˜λŠ”λ° μ„œλ²„μ—μ„œ ν΄λΌμ΄μ–ΈνŠΈκ°€ 이전 λ‹¨κ³„μ—μ„œ μ œκ³΅ν•œ 값을 μ €μž₯ν•˜κ³  λ‹€μŒ λ‹¨κ³„μ—μ„œλ„ μ €μž₯ν•œ μƒνƒœμΈ 것.

그럼 λ¬Έμ œκ°€ λ¬΄μ—‡μΌκΉŒ ❓

μ„œλ²„κ°€ λ©ˆμΆ”κ±°λ‚˜ ν•˜λŠ” μ—¬λŸ¬ 이유둜 λ‹€λ₯Έ μ„œλ²„λ₯Ό μ‚¬μš©ν•΄μ•Ό ν•œλ‹€λ©΄ 이전 μ„œλ²„μ—μ„œ 가지고 있던 μƒνƒœ 값듀을 가지고 μžˆμ§€ μ•ŠκΈ° λ•Œλ¬Έμ— μ—λŸ¬κ°€ λ°œμƒν•œλ‹€.


예제

1. μ„œλ²„κ°€ λ¬Έμ œμ—†μ΄ μœ μ§€λ˜λŠ” 경우

ν΄λΌμ΄μ–ΈνŠΈ: λ³€μˆ˜ Aμ—λŠ” 10만 원을 λ„£μ–΄μ€˜.
μ„œλ²„: λ³€μˆ˜ A에 10만 원을 λ„£κ² μŠ΅λ‹ˆλ‹€.

ν΄λΌμ΄μ–ΈνŠΈ: λ³€μˆ˜ Bμ—λŠ” 20만 원을 λ„£μ–΄μ€˜.
μ„œλ²„: λ³€μˆ˜ B에 20만 원을 λ„£κ² μŠ΅λ‹ˆλ‹€.

ν΄λΌμ΄μ–ΈνŠΈ: λ³€μˆ˜ A와 B의 합은 뭐야?
μ„œλ²„: λ³€μˆ˜μ˜ 합은 30만 μ›μž…λ‹ˆλ‹€.

2. μ„œλ²„κ°€ λ©ˆμΆ°μ„œ μƒˆλ‘œμš΄ μ„œλ²„μ— μš”μ²­ν•˜λŠ” 경우

ν΄λΌμ΄μ–ΈνŠΈ: λ³€μˆ˜ Aμ—λŠ” 10만 원을 λ„£μ–΄μ€˜.
μ„œλ²„ A: λ³€μˆ˜ A에 10만 원을 λ„£κ² μŠ΅λ‹ˆλ‹€.

--μ„œλ²„ A λ‹€μš΄μœΌλ‘œ μ„œλ²„ B둜 ꡐ체--

ν΄λΌμ΄μ–ΈνŠΈ: λ³€μˆ˜ Bμ—λŠ” 20만 원을 λ„£μ–΄μ€˜.
μ„œλ²„ B: λ³€μˆ˜ B에 20만 원을 λ„£κ² μŠ΅λ‹ˆλ‹€.

ν΄λΌμ΄μ–ΈνŠΈ: λ³€μˆ˜ A와 B의 합은 뭐야?
μ„œλ²„ B: λ³€μˆ˜μ˜ 합을 계산할 수 μ—†μŠ΅λ‹ˆλ‹€.

μƒˆλ‘œμš΄ μ„œλ²„λ‘œ λ³€κ²½λ˜λ©΄μ„œ κΈ°μ‘΄ μ„œλ²„μ— μ €μž₯ν•œ λ³€μˆ˜κ°’μ„ μƒˆλ‘œμš΄ μ„œλ²„μ—μ„œλŠ” μ•Œ 수 없기에 μ—λŸ¬κ°€ λ°œμƒν•œλ‹€. (λ§Œμ•½, κΈ°μ‘΄ μ„œλ²„μ—μ„œ μƒˆλ‘œμš΄ μ„œλ²„λ‘œ 이전 데이터λ₯Ό λͺ¨λ‘ 전달해 μ€€λ‹€λ©΄ λ¬Έμ œκ°€ 없을 수 μžˆλ‹€.) 즉, 항상 같은 μ„œλ²„κ°€ μœ μ§€λ˜μ–΄μ•Ό ν•œλ‹€.



Stateless(λ¬΄μƒνƒœ)

μ„œλ²„κ°€ ν΄λΌμ΄μ–ΈνŠΈμ˜ μƒνƒœλ₯Ό λ³΄μ‘΄ν•˜μ§€ μ•ŠλŠ”λ‹€. 그렇기에 맀번 μš”μ²­μ— λͺ¨λ“  μƒνƒœ 값듀을 전달해 μ€˜μ•Ό ν•œλ‹€.

예제

ν΄λΌμ΄μ–ΈνŠΈ: λ³€μˆ˜ A에 10만 원을 λ„£μ–΄μ€˜
μ„œλ²„ A: λ³€μˆ˜ A에 10만 원을 λ„£κ² μŠ΅λ‹ˆλ‹€.

--μ„œλ²„ A λ‹€μš΄μœΌλ‘œ μ„œλ²„ B둜 ꡐ체--

ν΄λΌμ΄μ–ΈνŠΈ: λ³€μˆ˜ Bμ—λŠ” 20만 원을 λ„£μ–΄μ€˜.
μ„œλ²„ B: λ³€μˆ˜ B에 20만 원을 λ„£κ² μŠ΅λ‹ˆλ‹€.

ν΄λΌμ΄μ–ΈνŠΈ: λ³€μˆ˜ A에 10만 원을 λ„£κ³  λ³€μˆ˜ Bμ—λŠ” 20만 원을 λ„£κ³  곱을 계산해 쀘
μ„œλ²„ C: λ³€μˆ˜μ˜ 합은 200만 μ›μž…λ‹ˆλ‹€.

μŠ€μΌ€μΌ 아웃 - μˆ˜ν‰ ν™•μž₯ 유리

  • μ„œλ²„μ˜ 변경이 μš©μ΄ν•˜λ‹€λŠ” 것은 같은 κΈ°λŠ₯을 ν•˜λŠ” μ„œλ²„ μ–΄λŠ 것을 선택해도 λœλ‹€λŠ” 것.
  • 그렇기에 μ„œλ²„μ˜ μˆ˜ν‰ ν™•μž₯이 λͺΉμ‹œ μœ λ¦¬ν•˜λ‹€.



정리

  • μƒνƒœ μœ μ§€ : 쀑간에 μ„œλ²„κ°€ λ³€κ²½λ˜λ©΄ μ•ˆ λœλ‹€.

  • λ¬΄μƒνƒœ : 쀑간에 μ„œλ²„κ°€ 변경돼도 λœλ‹€.

    • ν΄λΌμ΄μ–ΈνŠΈκ°€ 폭증해도 μ„œλ²„λ₯Ό 늘릴 수 μžˆλ‹€.
  • λ¬΄μƒνƒœλŠ” 응닡 μ„œλ²„λ₯Ό λ³€κ²½ν•˜κΈ°κ°€ 쉽기에 μ„œλ²„ 증섀이 쉽닀.



λ¬΄μƒνƒœμ˜ 싀무 ν•œκ³„

  • λͺ¨λ“  것을 λ¬΄μƒνƒœλ‘œ 섀계가 κ°€λŠ₯ν•œ κ²½μš°λ„ 있고 μ—†λŠ” κ²½μš°λ„ μžˆλ‹€.

  • λ¬΄μƒνƒœ

    • 둜그인이 ν•„μš” μ—†λŠ” λ‹¨μˆœν•œ 이벀트 νŽ˜μ΄μ§€
  • μƒνƒœ μœ μ§€

    • λ‘œκ·ΈμΈμ„ ν•΄μ•Ό ν•˜λŠ” 경우
  • λ‘œκ·ΈμΈν•œ μ‚¬μš©μžμ˜ 경우 ν•΄λ‹Ή μƒνƒœλ₯Ό μ„œλ²„μ— μœ μ§€ν•΄μ•Ό ν•œλ‹€.

  • 일반적으둜 λΈŒλΌμš°μ € 쿠킀와 μ„œλ²„ μ„Έμ…˜ 등을 μ‚¬μš©ν•΄ μƒνƒœλ₯Ό μœ μ§€ν•œλ‹€.

  • μƒνƒœ μœ μ§€λŠ” μ΅œμ†Œν•œμœΌλ‘œλ§Œ μ‚¬μš©ν•œλ‹€.

  • 보내야 ν•˜λŠ” 데이터가 λ„ˆλ¬΄ λ§Žλ‹€.

    • 맀번 μš”μ²­μ— ν•„μš”ν•œ 데이터λ₯Ό μ „λΆ€ μž‘μ„±ν•΄μ•Ό ν•˜κΈ° λ•Œλ¬Έ.



λΉ„ μ—°κ²°μ„±(connectionless)

TCP/IPλŠ” 연결을 μœ μ§€ν•˜λŠ” λͺ¨λΈ

|

  • TCP/IPλŠ” 연결을 μœ μ§€ν•˜λŠ” λͺ¨λΈμ΄λ‹€.
  • ν΄λΌμ΄μ–ΈνŠΈ 1이 μ„œλ²„μ™€ 연결을 ν•œ λ’€ ν΄λΌμ΄μ–ΈνŠΈ 2μ—μ„œ μ„œλ²„μ™€ 연결을 ν•  λ•Œλ„ ν΄λΌμ΄μ–ΈνŠΈ 1κ³Ό μ„œλ²„λŠ” 연결을 μœ μ§€ν•˜κ³  μžˆλ‹€. (μ΄λŠ” ν΄λΌμ΄μ–ΈνŠΈ 3의 κ²½μš°λ„ λ§ˆμ°¬κ°€μ§€λ‹€.)



연결을 μœ μ§€ν•˜μ§€ μ•ŠλŠ” λͺ¨λΈ

  • ν΄λΌμ΄μ–ΈνŠΈλ³„λ‘œ μ„œλ²„μ™€ 연결을 μœ μ§€ν•˜μ§€ μ•Šμ„ 경우 ν•„μš”ν•  λ•Œλ§Œ 연결을 ν•˜λ©° κ·Έ μ™Έμ—λŠ” 연결을 μœ μ§€ν•˜μ§€ μ•ŠκΈ° λ•Œλ¬Έμ— μ„œλ²„μ—μ„œ μ‚¬μš©ν•΄μ•Ό ν•˜λŠ” μžμ›μ΄ 훨씬 쀄어든닀.



HTTP의 λΉ„μ—°κ²°μ„±

  • HTTPλŠ” 기본이 연결을 μœ μ§€ν•˜μ§€ μ•ŠλŠ” λͺ¨λΈμ΄λ‹€.
  • 일반적으둜 초 λ‹¨μœ„ μ΄ν•˜μ˜ λΉ λ₯Έ μ†λ„λ‘œ μ‘λ‹΅ν•œλ‹€.
  • 1μ‹œκ°„ λ™μ•ˆ 수천 λͺ… 이상이 μ„œλΉ„μŠ€λ₯Ό μ‚¬μš©ν•΄λ„ μ‹€μ œ μ„œλ²„μ—μ„œ λ™μ‹œμ— μ²˜λ¦¬ν•˜λŠ” μš”μ²­μ€ μˆ˜μ‹­ 개 μ΄ν•˜λ‘œ 적닀. EX) μ›Ή λΈŒλΌμš°μ € 검색 νŽ˜μ΄μ§€μ—μ„œ 검색 λ²„νŠΌλ§Œ μ—°νƒ€ν•˜λ©΄μ„œ μ΄μš©ν•˜μ§€λŠ” μ•ŠλŠ”λ‹€.
  • μ„œλ²„ μžμ›μ„ 맀우 효율적으둜 μ‚¬μš©ν•  수 μžˆλ‹€.



λΉ„μ—°κ²°μ„±μ˜ ν•œκ³„μ™€ 극볡

비연결성이 μ’‹κΈ°λ§Œ ν•œ κ²ƒμ€μ•„λ‹ˆλ‹€. 맀번 μƒˆλ‘œ μ—°κ²°ν•΄μ•Ό ν•œλ‹€λŠ” 것은 맀 μ—°κ²°λ§ˆλ‹€ λ“€μ–΄κ°€λŠ” λΉ„μš©μ— λŒ€ν•΄μ„œ κ³ λ €ν•˜μ§€ μ•Šμ„ 수 μ—†λ‹€.

  • TCP/IP 연결을 μƒˆλ‘œ λ§Ίμ–΄μ•Ό ν•œλ‹€. - 3 way handshake μ‹œκ°„ μΆ”κ°€
  • μ›Ή λΈŒλΌμš°μ €λ‘œ μ‚¬μ΄νŠΈλ₯Ό μš”μ²­ν•˜λ©΄ HTML뿐 μ•„λ‹ˆλΌ JavaScript, CSS, Image λ“± μˆ˜λ§Žμ€ μžμ›λ“€μ„ ν•¨κ»˜ λ‹€μš΄λ‘œλ“œν•œλ‹€.
  • μ§€κΈˆμ€ HTTP 지속 μ—°κ²°(Persistent Connections)둜 문제λ₯Ό ν•΄κ²°ν•œλ‹€.
  • HTTP/2, HTTP/3μ—μ„œ 더 λ§Žμ€ μ΅œμ ν™”.



HTTP 초기 - μ—°κ²°, μ’…λ£Œ λ‚­λΉ„

HTTP μ΄ˆκΈ°μ—λŠ” λͺ¨λ“  μžλ£Œμ— λŒ€ν•΄μ„œ λΉ„μ—°κ²°μ„±μœΌλ‘œ 각각의 μžμ›μ— λŒ€ν•΄ μ—°κ²°/응닡/μ’…λ£Œλ₯Ό λ°˜λ³΅ν•˜λ‹€ λ³΄λ‹ˆ λŒ€λž΅μ μœΌλ‘œ 1μ΄ˆκ°€λŸ‰ μ†Œλͺ¨λ˜μ—ˆλ‹€κ³  ν•œλ‹€. 그럼 이 경우 HTTP 지속 연결을 ν•˜λ©΄ μ–΄λ–»κ²Œ 될까?



HTTP 지속 μ—°κ²°(Persistent Connections)

ν΄λΌμ΄μ–ΈνŠΈλŠ” μ„œλ²„μ™€ 연결을 ν•œ λ‹€μŒ ν•„μš”ν•œ μžμ›μ„ μš”μ²­/μ‘λ‹΅μœΌλ‘œ λ‹€μš΄λ‘œλ“œν•œλ‹€.

HTTP μ΄ˆκΈ°μ™€ 차이점으둜 연결이 μ’…λ£Œλ˜λŠ” 것이 μ•„λ‹ˆλΌ ν•„μš”ν•œ μžμ›λ“€μ„ λͺ¨λ‘ λ‹€μš΄λ‘œλ“œν•  λ•ŒκΉŒμ§€ 연결이 μ’…λ£Œλ˜μ§€ μ•Šκ³  μš”μ²­/응닡이 반볡된 λ’€ μ’…λ£Œλœλ‹€. 그럼으둜써 속도 μžμ²΄κ°€ 더 λΉ¨λΌμ‘Œλ‹€.


πŸ’‘ Stateless(λ¬΄μƒνƒœ)λ₯Ό κΈ°μ–΅ν•˜μž

싀무 μƒν™©μ—μ„œ νŠΉμ • μ‹œκ°„μ— λ°œμƒν•˜λŠ” λŒ€μš©λŸ‰ νŠΈλž˜ν”½μ— λŒ€ν•΄μ„œ λŒ€μ‘ν•΄μ•Ό ν•˜λŠ” κ²½μš°κ°€ 생긴닀 (Ex: μ„ μ°©μˆœ 이벀트, λͺ…μ ˆ KTX μ˜ˆμ•½) 이럴 경우 수천, 수만 λͺ… 이상이 λ™μ‹œμ— 접속을 ν•˜λ©΄μ„œ μ„œλ²„μ— κ³ΌλΆ€ν•˜κ°€ κ±Έλ¦¬λŠ” κ²½μš°κ°€ μžˆλŠ”λ°, 이 경우 λ¬΄μƒνƒœ νŽ˜μ΄μ§€λ₯Ό ν™œμš©ν•΄ νŽ˜μ΄μ§€ 접속 인원을 λΆ„μ‚°ν•΄μ„œ λŒ€μš©λŸ‰ νŠΈλž˜ν”½μ„ λΆ„μ‚°μ‹œν‚€λ©΄ μ’‹λ‹€.



HTTP λ©”μ‹œμ§€

HTTP λ©”μ‹œμ§€ ꡬ쑰

  • 곡백 라인은 ν•„μˆ˜ 정보

HTTP 헀더

  • header-field = field-name":" OWS field-value OWS
    • OWS WW: 띄어쓰기 ν—ˆμš©
  • field-name은 λŒ€μ†Œλ¬Έμž ꡬ뢄이 μ—†λ‹€.

HTTP 헀더 μš©λ„

  • HTTP 전솑에 ν•„μš”ν•œ λͺ¨λ“  뢀가정보
    • λ©”μ‹œμ§€ λ°”λ””μ˜ λ‚΄μš©, λ©”μ‹œμ§€ λ°”λ””μ˜ 크기, μ••μΆ•, 인증, μš”μ²­ ν΄λΌμ΄μ–ΈνŠΈ(λΈŒλΌμš°μ €) 정보 λ“±.
  • ν‘œμ€€ 헀더가 λ„ˆλ¬΄ λ§Žλ‹€.
  • ν•„μš”ν•œ 경우 μž„μ˜μ˜ 헀더 μΆ”κ°€ κ°€λŠ₯
    • helloworld: hihi

HTTP λ©”μ‹œμ§€ λ°”λ”” μš©λ„

  • μ‹€μ œ 전솑할 데이터
    • HTML λ¬Έμ„œ, 이미지, μ˜μƒ, JSON λ“± byte둜 ν‘œν˜„ν•  수 μžˆλŠ” λͺ¨λ“  데이터 전솑이 κ°€λŠ₯ν•˜λ‹€.


HTTP μš”μ²­ λ©”μ‹œμ§€

  • μš”μ²­ λ©”μ‹œμ§€μ˜ μ‹œμž‘ 라인에 전솑 νƒ€μž…κ³Ό 패슀, 쿼리 슀트링, HTTP 버전 같은 정보λ₯Ό λ‹΄λŠ”λ‹€.
  • ν—€λ”μ—λŠ” 기타 정보λ₯Ό λ‹΄λŠ”λ‹€.
  • 전솑할 데이터가 μ—†μœΌλ©΄ 곡백 이후 무언가 μΆ”κ°€ν•  ν•„μš”λŠ” μ—†λ‹€.

μ‹œμž‘ 라인

  • start-line = request-line / status-line

  • request-line = method SP request-target SP HTTP-version CRLF

    • SP : 곡백(Space)
    • CRLF : μ—”ν„°(κ°œν–‰)
  • HTTP λ©”μ„œλ“œ(GET : 쑰회)

    • μ’…λ₯˜ : GET, POST, PUT, DELETE
    • μ„œλ²„κ°€ μˆ˜ν–‰ν•΄μ•Ό ν•  λ™μž‘μ„ μ§€μ •ν•œλ‹€.
      • GET : λ¦¬μ†ŒμŠ€ 쑰회
      • POST : μš”μ²­ λ‚΄μ—­ 처리
  • μš”μ²­ λŒ€μƒ(/search?q=hello&hl=ko)

    • absolute-path[?query](μ ˆλŒ€ 경둜[?쿼리])
    • μ ˆλŒ€ 경둜 = "/"둜 μ‹œμž‘ν•˜λŠ” 경둜
    • *, http://..._?x=y_와 같이 λ‹€λ₯Έ μœ ν˜•μ˜ 경둜 지정 방식도 μžˆλ‹€.
  • HTTP Version



HTTP 응닡 λ©”μ‹œμ§€

  • μ‹œμž‘ λΌμΈμ—λŠ” HTTP 버전과 Status Code 등을 λ‹΄λŠ”λ‹€
  • ν—€λ”μ—λŠ” 기타 정보λ₯Ό λ‹΄λŠ”λ‹€.
  • Body에 μš”μ²­ν•œ μžμ›μ„ λ‹΄λŠ”λ‹€. (ex: HTML)
  • 곡식 μŠ€νŽ™
HTTP-message = start-line
	       *(header-field CRLF)
	       *CRLF
	       [ message - body ]

μ‹œμž‘ 라인

  • start-line = request-line / status-line
  • status-line = HTTP-version SP status-code SP reason-phrase CRLF
  • HTTP 버전
  • HTTP μƒνƒœ μ½”λ“œ: μš”μ²­ 성곡, μ‹€νŒ¨λ₯Ό λ‚˜νƒ€λ‚Έλ‹€.
    • 200 : 성곡
    • 400 : ν΄λΌμ΄μ–ΈνŠΈ μš”μ²­ 였λ₯˜
    • 500 : μ„œλ²„ λ‚΄λΆ€ 였λ₯˜
  • 이유 문ꡬ : μ‚¬λžŒμ΄ 이해할 수 μžˆλŠ” 짧은 μƒνƒœ μ½”λ“œ μ„€λͺ… κΈ€



λ‹¨μˆœν•¨ ν™•μž₯ κ°€λŠ₯

  • HTTPλŠ” λͺΉμ‹œ λ‹¨μˆœν•˜κ³  μŠ€νŽ™λ„ λ³Όλ§Œν•˜λ‹€.
  • HTTP λ©”μ‹œμ§€λ„ 맀우 λ‹¨μˆœν•˜λ‹€.
  • μ •λ¦¬ν•˜λ©΄ λ‹¨μˆœν•˜κΈ°μ— ν™•μž₯이 쉽고 μœ μ—°ν•œ κΈ°μˆ μ΄λ‹€.