πŸ’» Computer Science/- Network

[HTTP] 기본적인 HTTP ν†΅μ‹ μ˜ ꡬ성 μš”μ†Œμ™€ 흐름 및 HTTP λ©”μ‹œμ§€ κ΅¬μ„±μš”μ†Œ

Wonit 2020. 10. 9. 15:20

HTTP 톡신은 잘 μ•Œλ‹€μ‹Άμ΄ ν΄λΌμ΄μ–ΈνŠΈ-μ„œλ²„ ν”„λ‘œν† μ½œμ΄λ‹€.

 

HTTP의 ν΄λΌμ΄μ–ΈνŠΈ-μ„œλ²„κ΅¬μ‘°μ— λŒ€ν•΄μ„œ 아직 κ°œλ…μ΄ μž‘νžˆμ§€ μ•Šμ€ μ‚¬λžŒμ€ HTTP ν†΅μ‹ μ˜ μ„œλ²„μ™€ ν΄λΌμ΄μ–ΈνŠΈλ₯Ό ν™•μΈν•˜κ³  μ˜€λŠ” 것을 μΆ”μ²œν•œλ‹€.

 

λ‹€μ‹œ 본둠으둜 λ“€μ–΄κ°€μ„œ HTTP μš”μ²­κ³Ό μ‘λ‹΅μ—λŠ” μ—¬λŸ¬ 과정을 κ±°μΉ  수 μžˆλ‹€.

Request & Response 

톡신 μš”μ†Œλ“€μ„ 3κ°€μ§€λ‘œ λ‚˜λˆ λ³΄μž.

  • ν΄λΌμ΄μ–ΈνŠΈ
  • ν”„λ‘μ‹œ
  • μ„œλ²„

 

HTTP ν†΅μ‹ μ˜ ꡬ성 μš”μ†Œ

ν΄λΌμ΄μ–ΈνŠΈμ™€ μ„œλ²„λŠ” μ§€λ‚œ μ‹œκ°„ 이야기 ν–ˆκ³ , ν”„λ‘μ‹œμ— λŒ€ν•΄μ„œλŠ” ν•  이야기가 많기 λ•Œλ¬Έμ— λ‹€μŒμ— ν•˜λ‚˜μ˜ μƒˆλ‘œμš΄ 파트둜 이야기λ₯Ό 해보고 μ˜€λŠ˜μ€ κ°„λ‹¨ν•˜κ²Œ 이야기λ₯Ό ν•΄λ³΄μž.

ν΄λΌμ΄μ–ΈνŠΈ

ν΄λΌμ΄μ–ΈνŠΈλŠ” User Agent라고 ν•œλ‹€.


μ΄λŠ” μ‚¬μš©μžλ₯Ό λŒ€μ‹ ν•΄μ„œ μš”μ²­μ„ λ³΄λ‚΄λŠ” 일을 μˆ˜ν–‰ν•œλ‹€.


보톡 HTML λ¬Έμ„œλ₯Ό μ‚¬μš©μž λˆˆμ— 보이게 ν•˜κΈ° μœ„ν•΄μ„œλŠ” ν΄λΌμ΄μ–ΈνŠΈμ˜ λΈŒλΌμš°μ €κ°€ μ„œλ²„λ‘œ html을 κ°€μ Έμ˜€κΈ° μœ„ν•œ μš”μ²­μ„ μˆ˜ν–‰ν•˜κ³ , λΈŒλΌμš°μ €κ°€ CSS에 λŒ€μ‘ν•˜λŠ” μŠ€νƒ€μΌ 정보와 HTML νƒœκ·Έλ₯Ό μΆ”κ°€ν•˜μ—¬ 슀크립트λ₯Ό μ‹€ν–‰ν•˜κ²Œ λœλ‹€.

 

μ„œλ²„

μ„œλ²„λŠ” ν΄λΌμ΄μ–ΈνŠΈκ°€ μš”μ²­μ„ ν•˜λŠ” λŒ€μƒμ΄λ‹€.


μ„œλ²„λŠ” κ°œλ°œμžκ°€ νŠΉμ • κΈ°λŠ₯을 μˆ˜ν–‰ν•˜λ„λ‘ 섀계해놓은 μ½”λ“œλ₯Ό μ‹€ν–‰μ‹œμΌœ ν΄λΌμ΄μ–ΈνŠΈμ—κ²Œ 정보λ₯Ό μ œκ³΅ν•œλ‹€.

 

ν”„λ‘μ‹œ

ν΄λΌμ΄μ–ΈνŠΈμ™€ μ„œλ²„ μ‚¬μ΄μ—λŠ” λ§Žμ€ HTTP λ©”μ‹œμ§€κ°€ 였고 κ°„λ‹€.


ν”„λ‘μ‹œλ„ ν•˜λ‚˜μ˜ μ„œλ²„λ‘œμ¨ κΈ°λŠ₯을 μˆ˜ν–‰ν•˜λŠ”λ°, λ‹€λ₯Έ λ„€νŠΈμ›Œν¬λ‘œ 접속할 수 μžˆλŠ” 길을 μ—΄μ–΄μ€€λ‹€.


κ·Έλž˜μ„œ μš°λ¦¬λŠ” ν”„λ‘μ‹œ μ„œλ²„λ₯Ό μ€‘κ³„μ„œλ²„λΌκ³  ν•˜λŠ”λ°, ν”„λ‘μ‹œ μ„œλ²„λ₯Ό λ„μ‹ν™”ν•˜λ©΄ λ‹€μŒκ³Ό κ°™λ‹€.

ν”„λ‘μ‹œ μ„œλ²„λŠ” λŒ€ν‘œμ μœΌλ‘œ λ‹€μŒκ³Ό 같은 κΈ°λŠ₯을 μˆ˜ν–‰ν•  수 μžˆλ‹€.

  • 캐싱
  • 필터링
  • λ‘œλ“œ λ°ΈλŸ°μ‹±
  • 인증
  • λ‘œκΉ…

각각의 κ°œλ…κ³Ό μ„ΈλΆ€ λ‚΄μš©μ€ ν•΄λ‹Ή μΉ΄ν…Œκ³ λ¦¬μ˜ ν”„λ‘μ‹œλ₯Ό μ°Έκ³ ν•˜κΈΈ λ°”λž€λ‹€.

 

HTTP ν†΅μ‹ μ˜ 흐름

ν΄λΌμ΄μ–ΈνŠΈκ°€ μ„œλ²„μ™€ 톡신할 λ•ŒλŠ” λ‹€μŒκ³Ό 같은 과정을 μˆ˜ν–‰ν•œλ‹€.

  1. TCP μ—°κ²°
  2. HTTP λ©”μ‹œμ§€ 전솑
  3. μ„œλ²„κ°€ 응닡 - μ„œλ²„κ°€ 보낸 응닡 뢄석
  4. TCP μ—°κ²° λ‹«κΈ° ν˜Ήμ€ λ‹€λ₯Έ μš”μ²­μ„ μœ„ν•΄ μž¬μ‚¬μš©

TCP μ—°κ²°

TCP 연결은 Request, Response에 μ‚¬μš©λœλ‹€.


ν΄λΌμ΄μ–ΈνŠΈμ—κ²ŒλŠ” 3κ°€μ§€ 선택지가 μžˆλŠ”λ°, μƒˆλ‘œμš΄ TCP포트λ₯Ό μ—΄κ±°λ‚˜, κΈ°μ‘΄ 연결을 μž¬μ‚¬μš©ν•˜κ±°λ‚˜, μ—¬λŸ¬ TCPλ₯Ό μ—°κ²°ν•  수 μžˆλ‹€.

 

HTTP λ©”μ‹œμ§€ 전솑

HTTP λ©”μ‹œμ§€λŠ” 우리(인간듀)이 읽을 수 μžˆλŠ” ν‰λ¬Έμ˜ ν˜•νƒœμ΄λ‹€.


κ·Έλž˜μ„œ λ³΄μ•ˆμ΄ μ·¨μ•½ν•˜λŠ” νŠΉμ§•λ•Œλ¬Έμ— λ‚˜μ˜¨ 것이 HTTPS ν”„λ‘œν† μ½œμΈλ°, ν•΄λ‹Ή μΉ΄ν…Œκ³ λ¦¬μ— λ‚˜μ™€μžˆμœΌλ‹ˆ ν™•μΈν•΄λ³΄λŠ” 것을 μΆ”μ²œν•œλ‹€.

MDN-HTTP

 

μ„œλ²„κ°€ 응닡 - μ„œλ²„κ°€ 보낸 응닡 뢄석

그리고 μœ„μ˜ HTTP λ©”μ‹œμ§€λ₯Ό 톡해 μ„œλ²„μ—κ²Œ μ •ν™•ν•œ λ©”μ‹œμ§€κ°€ 잘 κ°”λ‹€λ©΄ μ„œλ²„λŠ” μ„œλ²„ λ‚΄λΆ€μ˜ λ‘œμ§μ— μ˜ν•΄ μ–΄λ–€ νŠΉμ • 행동을 μ·¨ν•˜κ³  μš°λ¦¬μ—κ²Œ κ²°κ³Ό λ©”μ‹œμ§€λ₯Ό 응닡해쀄 것이닀.

MDN HTTP

 

μ„œλ²„κ°€ 보낸 응닡 뢄석

그리고 λΈŒλΌμš°μ €μ—μ„œλŠ” μ„œλ²„κ°€ 보낸 응닡을 λΆ„μ„ν•˜λŠ”λ°, λ§Œμ•½ HTML λ¬Έμ„œκ°€ μ™”λ‹€λ©΄ Element에 적용된 CSS μŠ€νƒ€μΌλ§μ„μ μš©ν•˜κ³  슀크립트λ₯Ό μ‹€ν–‰μ‹œν‚€λŠ”λ“± λ‹€μ–‘ν•œ 행동이 μ·¨ν•΄μ§„λ‹€.

 

TCP μ—°κ²° λ‹«κΈ° ν˜Ήμ€ λ‹€λ₯Έ μš”μ²­μ„ μœ„ν•΄ μž¬μ‚¬μš©

그리고 λ§Œμ•½ λΈŒλΌμš°μ €κ°€ λ‹€λ₯Έ 연결을 또 ν•΄μ•„ ν•œλ‹€λ©΄ connection헀더λ₯Ό 톡해 keep-aliveν˜Ήμ€ close의 κΈ°λŠ₯을 μˆ˜ν–‰ν•˜κ³  연결이 μ’…λ£Œλœλ‹€.

 

 

HTTP λ©”μ‹œμ§€

 

μœ„μ—μ„œ 봀던 HTTP 톡신 κ³Όμ •μ—μ„œ μš°λ¦¬λŠ” HTTP λ©”μ‹œμ§€κ°€ κ΅ν™˜λ˜κ±°λ‚˜ μ „μ†‘λœλ‹€λŠ” 것을 μ•Œ 수 μžˆλ‹€.

 

그리고 HTTP λ©”μ‹œμ§€λ₯Ό 뢄석할 수 μžˆλ‹€.

MDN http 

μš”μ²­ : Request

Method : HTTP λ©”μ„œλ“œλ‘œ ν•΄λ‹Ή λ©”μ„œλ“œλ₯Ό 톡해 행동을 κ΅¬λΆ„ν•œλ‹€.

Path : λ¦¬μ†ŒμŠ€ 경둜

Version of the protocol : ν”„λ‘œν† μ½œ 버전

Headers : μ„œλ²„μ— λŒ€ν•œ 선택적 헀더듀

응닡 : Response

Version of the protocol : ν”„λ‘œν† μ½œ 버전

Status Code : λ¦¬μ†ŒμŠ€ 경둜

Status Message : HTTP λ©”μ„œλ“œ

Headers : μ„œλ²„μ— λŒ€ν•œ 선택적 헀더듀