πŸ”¬Computer Science/λ„€νŠΈμ›Œν¬

[TIL] HTTP μƒνƒœμ½”λ“œ ⚑️

hellohailie 2023. 1. 13. 00:25

 

πŸ€“λ°°μ›€ μš”μ•½ν•˜κΈ°

HTTP μƒνƒœ μ½”λ“œμ— λŒ€ν•΄μ„œ μ„€λͺ…ν•΄μ£Όμ„Έμš”.
HTTP μƒνƒœμ½”λ“œλŠ” ν΄λΌμ΄μ–ΈνŠΈκ°€ 보낸 μš”μ²­μ˜ 처리 μƒνƒœλ₯Ό μ„œλ²„μ—μ„œ μ‘λ‹΅ν•΄μ£ΌλŠ” μ½”λ“œμž…λ‹ˆλ‹€. 
200λ²ˆλŒ€ μ½”λ“œλŠ” ν΄λΌμ΄μ–ΈνŠΈκ°€ 보낸 μš”μ²­μ΄ μ œλŒ€λ‘œ μ„±κ³΅ν–ˆμŒμ„ μ•Œλ €μ£ΌλŠ” μ½”λ“œμ΄κ³ , 300λ²ˆλŒ€λŠ” ν΄λΌμ΄μ–ΈνŠΈμ˜ μš”μ²­μ΄ μ™„λ£Œλ˜λ €λ©΄ 좔가적인 μ‘°μΉ˜κ°€ ν•„μš”ν•˜λ‹€λŠ” 뜻이고, location 헀더가 있으면 location μœ„μΉ˜λ‘œ λ¦¬λ‹€μ΄λ ‰μ…˜λœλ‹€λŠ” νŠΉμ§•μ΄ μžˆμŠ΅λ‹ˆλ‹€. 400λ²ˆλŒ€ μ½”λ“œλŠ” ν΄λΌμ΄μ–ΈνŠΈμ—μ„œ 잘λͺ»λœ μ½”λ“œλ‚˜ 데이터λ₯Ό λ³΄λ‚΄μ„œ λ‚˜νƒ€λ‚˜λŠ” μ—λŸ¬μ½”λ“œμ΄κ³ , 500λ²ˆλŒ€ μ—λŸ¬λŠ” μ„œλ²„μ— λ¬Έμ œκ°€ μƒκ²¨μ„œ λ‚˜νƒ€λ‚˜λŠ” μ—λŸ¬μ½”λ“œ μž…λ‹ˆλ‹€. 

 

ν”„λ‘œμ νŠΈμ—μ„œ λ©˜ν† λ‘œ μž μ‹œ λ§Œλ‚¬λ˜ 뢄이 μ›Ή 개발자라면 HTTP μƒνƒœμ½”λ“œμ— λŒ€ν•΄μ„œλŠ” λΉ μ‚­ν•˜κ²Œ μ•Œκ³  μžˆμ–΄μ•Ό ν•œλ‹€κ³  κ°•μ‘°ν•˜μ…¨λŠ”λ° μ΄λ²ˆμ—μ„œμ•Ό μ œλŒ€λ‘œ 곡뢀할 수 μžˆμ—ˆμŠ΅λ‹ˆλ‹€. 

βœ”οΈ HTTP μƒνƒœμ½”λ“œ : ν΄λΌμ΄μ–ΈνŠΈκ°€ 보낸 μš”μ²­μ˜ 처리 μƒνƒœλ₯Ό μ‘λ‹΅μ—μ„œ μ•Œλ €μ£ΌλŠ” κΈ°λŠ₯

1xx (informational) : μš”μ²­μ΄ μˆ˜μ‹ λ˜μ–΄ μ²˜λ¦¬μ€‘ ⇒ 거의 μ‚¬μš©λ˜μ§€ μ•ŠμŒ

2xx (successful) : μš”μ²­ 정상 처리

3xx (redirection) : μš”μ²­μ„ μ™„λ£Œν•˜λ €λ©΄ μΆ”κ°€ 행동이 ν•„μš”

4xx (client error) : ν΄λΌμ΄μ–ΈνŠΈ 였λ₯˜, 잘λͺ»λœ 문법 λ“±μœΌλ‘œ μ„œλ²„κ°€ μš”μ²­μ„ μˆ˜ν–‰ν•  수 μ—†μŒ

5xx (server error) : μ„œλ²„ 였λ₯˜, μ„œλ²„κ°€ 정상 μš”μ²­μ„ μ²˜λ¦¬ν•˜μ§€ λͺ»ν•¨

 


βœ”οΈ 2xx (성곡)

β– 200 OK

β– 201 Created (ν΄λΌμ΄μ–ΈνŠΈκ°€ μš”μ²­ν•œ 사항을 μ„œλ²„μ—μ„œ λ¦¬μ†ŒμŠ€λ₯Ό 생성함. 주둜 postλ₯Ό μ‚¬μš©ν• λ•Œ)

β– 202 Accepted (μš”μ²­μ΄ μ ‘μˆ˜λ˜μ—ˆμœΌλ‚˜ μ²˜λ¦¬κ°€ μ™„λ£Œλ˜μ§€ μ•ŠμŒ) ex 비동기 처리

β– 204 No Content (μ„œλ²„κ°€ μš”μ²­μ„ μˆ˜ν–‰ν–ˆμ§€λ§Œ, 응닡 νŽ˜μ΄λ‘œλ“œ 본문에 보낼 데이터가 μ—†μŒ) ⇒ κ²°κ³Ό λ‚΄μš©μ΄ 없어도 204 λ©”μ„Έμ§€λ§ŒμœΌλ‘œ 성곡을 인식할 수 μžˆλ‹€.


βœ”οΈ 3xx (λ¦¬λ‹€μ΄λ ‰μ…˜) => μš”μ²­μ„ μ™„λ£Œν•˜κΈ° μœ„ν•΄ μœ μ € μ—μ΄μ „νŠΈμ˜ μΆ”κ°€ μ‘°μΉ˜κ°€ ν•„μš”

⇒ μ›Ή λΈŒλΌμš°μ €λŠ” 3xx 응닡 결과에 location 헀더가 있으면, location μœ„μΉ˜λ‘œ μžλ™μœΌλ‘œ μ΄λ™ν•œλ‹€.

영ꡬ λ¦¬λ‹€μ΄λ ‰μ…˜ : λ¦¬μ†ŒμŠ€μ˜ uriκ°€ 영ꡬ적으둜 이동함, 검색 엔진 λ“±μ—μ„œλ„ 변경을 인지할 수 μžˆλ‹€.

β– 301 moved permanently : λ¦¬λ‹€μ΄λ ‰νŠΈ μš”μ²­ λ©”μ„œλ“œκ°€ GET으둜 λ³€ν•˜κ³ , 본문이 제거될 수 있음 (싀무상 많이 씀)

β– 308 permanent redirect : 301κ³Ό κΈ°λŠ₯은 κ°™κ³ , λ¦¬λ‹€μ΄λ ‰νŠΈμ‹œ μš”μ²­ λ©”μ„œλ“œμ™€ λ³Έλ¬Έ μœ μ§€

μΌμ‹œ λ¦¬λ‹€μ΄λ ‰μ…˜ : λ¦¬μ†ŒμŠ€μ˜ uriκ°€ μΌμ‹œμ μœΌλ‘œ 변경됨, 검색 엔진 λ“±μ—μ„œ url을 λ³€κ²½ν•˜λ©΄ μ•ˆλœλ‹€.

β– 302 found : λ¦¬λ‹€μ΄λ ‰νŠΈμ‹œ μš”μ²­ λ©”μ„œλ“œκ°€ GET으둜 λ³€ν•˜κ³ , 본문이 제거될 수 μžˆλ‹€.

β– 303 see other : 302와 κΈ°λŠ₯은 κ°™κ³ , λ¦¬λ‹€μ΄λ ‰νŠΈμ‹œ μš”μ²­ λ©”μ„œλ“œκ°€ GET으둜 변경됨

β– 307 temporary redirect : 302와 κΈ°λŠ₯은 κ°™κ³ , λ¦¬λ‹€μ΄λ ‰νŠΈμ‹œ μš”μ²­ λ©”μ„œλ“œμ™€ λ³Έλ¬Έ μœ μ§€(μš”μ²­ λ©”μ„œλ“œ λ³€κ²½ κΈˆμ§€)

 

μΌμ‹œ λ¦¬λ‹€μ΄λ ‰μ…˜μ€ μƒν’ˆ μ£Όλ¬Έ ν›„ μ£Όλ¬Έ μ™„λ£Œ νŽ˜μ΄μ§€λ₯Ό 보여쀄 λ•Œ μ‚¬μš©ν•œλ‹€. (PRG : POST/Redirect/GET)

 

❓PRGλ₯Ό μ‚¬μš©X?POST둜 μ£Όλ¬Έ ν›„, μ›Ή λΈŒλΌμš°μ €λ₯Ό μƒˆλ‘œκ³ μΉ¨ν•˜λ©΄, μƒˆλ‘œκ³ μΉ¨μ€ λ‹€μ‹œ μš”μ²­ν•˜λŠ” 것이기 λ•Œλ¬Έμ— 쀑볡 주문이 될 수 μžˆλ‹€.

❓PRGλ₯Ό μ‚¬μš©ν•œλ‹€λ©΄? ⇒ POST둜 μ£Όλ¬Έ ν›„, μ›Ή λΈŒλΌμš°μ €λ₯Ό μƒˆλ‘œκ³ μΉ¨ν•˜λ©΄ GET λ©”μ„œλ“œλ‘œ λ¦¬λ‹€μ΄λ ‰νŠΈ ν•΄μ„œ μƒˆλ‘œκ³ μΉ¨μœΌλ‘œ μΈν•œ 쀑볡 주문을 방지할 수 μžˆλ‹€.

특수 λ¦¬λ‹€μ΄λ ‰μ…˜ :

β– 304 not modified (μ—„μ²­ 많이 씀) : μΊμ‹œλ₯Ό λͺ©μ μœΌλ‘œ μ‚¬μš©ν•œλ‹€.

ν΄λΌμ΄μ–ΈνŠΈμ—κ²Œ λ¦¬μ†ŒμŠ€κ°€ μˆ˜μ •λ˜μ§€ μ•Šμ•˜μŒμ„ μ•Œλ €μ€€λ‹€. λ”°λΌμ„œ ν΄λΌμ΄μ–ΈνŠΈλŠ” 둜컬pc에 μ €μž₯된 μΊμ‹œλ₯Ό μž¬μ‚¬μš©ν•œλ‹€. (μΊμ‹œλ‘œ λ¦¬λ‹€μ΄λ ‰νŠΈν•œλ‹€. ) => ν΄λΌμ΄μ–ΈνŠΈμ—μ„œ μš”μ²­ν•΄λ„ μ„œλ²„μ—μ„œ 데이터λ₯Ό μ•ˆλ‚΄λ €μ€€λ‹€. μ™œλƒλ©΄ μΊμ‹œκ°€ λ§Œλ£Œλ˜μ§€ μ•Šμ•˜μœΌλ‹ˆκΉŒ! ⇒ λ„€νŠΈμ›Œν¬ λ‹€μš΄λ‘œλ“œ μš©λŸ‰μ΄ 많이 μ€„μ–΄λ“ λ‹€λŠ” μž₯점이 μžˆλ‹€.

304 응닡은 응닡에 메세지 λ°”λ””λ₯Ό ν¬ν•¨ν•˜λ©΄ μ•ˆλœλ‹€. (둜컬 μΊμ‹œλ₯Ό μ‚¬μš©ν•΄μ•Ό ν•˜λ―€λ‘œ)


βœ”οΈ 4xx (ν΄λΌμ΄μ–ΈνŠΈ 였λ₯˜)

ν΄λΌμ΄μ–ΈνŠΈμ˜ μš”μ²­μ— 잘λͺ»λœ 문법 λ“±μœΌλ‘œ μ„œλ²„κ°€ μš”μ²­μ„ μˆ˜ν–‰ν•  수 μ—†μŒ

였λ₯˜μ˜ 원인이 ν΄λΌμ΄μ–ΈνŠΈμ— μžˆλ‹€!!!

 

ν΄λΌμ΄μ–ΈνŠΈκ°€ 이미 잘λͺ»λœ μš”μ²­, 데이터λ₯Ό 보내고 있기 λ•Œλ¬Έμ—, λ˜‘κ°™μ΄ μž¬μ‹œλ„ν•˜λ©΄ 계속 μš”λ₯˜κ°€ λ‚œλ‹€. 

 

 

β– 400 bad request : ν΄λΌμ΄μ–ΈνŠΈκ°€ 잘λͺ»λœ μš”μ²­μ„ ν•΄μ„œ μ„œλ²„κ°€ μš”μ²­μ„ μ²˜λ¦¬ν•  수 μ—†μŒ

ν΄λΌμ΄μ–ΈνŠΈλŠ” μš”μ²­ λ‚΄μš©μ„ λ‹€μ‹œ κ²€ν† ν•˜κ³ , λ³΄λ‚΄μ•Όν•œλ‹€. (μš”μ²­ νŒŒλΌλ―Έν„°, api μŠ€νŽ™ λ“±λ“±)

β– 401 unauthorized : ν΄λΌμ΄μ–ΈνŠΈκ°€ ν•΄λ‹Ή λ¦¬μ†ŒμŠ€μ— λŒ€ν•œ 인증이 ν•„μš”ν•¨ (μ‰½κ²Œ μ΄ν•΄ν•˜μžλ©΄ 둜그인 μ•ˆλ¨)

401 μ—λŸ¬ λ°œμƒμ‹œ, 응닡에 www-authenticate 헀더와 ν•¨κ»˜ 인증 방법을 μ„€λͺ…ν•΄μ€˜μ•Όν•œλ‹€.

  • 인증(authentication) = 본인이 λˆ„κ΅¬μΈμ§€ 확인(둜그인)
  • 인가(authorization) = λ‘œκ·ΈμΈν•œ νšŒμ›μ— λŒ€ν•œ κΆŒν•œ λΆ€μ—¬(admin κΆŒν•œμ²˜λŸΌ νŠΉμ • λ¦¬μ†ŒμŠ€μ— μ ‘κ·Όν•  수 μžˆλŠ” κΆŒν•œ, 인증이 μžˆμ–΄μ•Ό 인가가 μžˆλ‹€. )

β– 403 forbidden : μ„œλ²„κ°€ μš”μ²­μ„ μ΄ν•΄ν–ˆμ§€λ§Œ μŠΉμΈμ„ 거뢀함 (μ‰½κ²Œ μ΄ν•΄ν•˜μžλ©΄ λ‘œκ·ΈμΈν–ˆμ§€λ§Œ μ ‘κ·Ό κΆŒν•œ μ—†μŒ)

주둜 인증 자격 증λͺ…은 μžˆμ§€λ§Œ, μ ‘κ·Ό κΆŒν•œμ΄ λΆˆμΆ©λΆ„ν•œ 경우

(admin 자격 μ—†μ§€λ§Œ admin λ“±κΈ‰μ˜ λ¦¬μ†ŒμŠ€μ— μ ‘κ·Όν•˜λŠ” 경우)

β– 404 not found : μš”μ²­ λ¦¬μ†ŒμŠ€λ₯Ό 찾을 수 μ—†μŒ

μš”μ²­ λ¦¬μ†ŒμŠ€κ°€ μ„œλ²„μ— μ—†κ±°λ‚˜, ν΄λΌμ΄μ–ΈνŠΈκ°€ κΆŒν•œμ΄ λΆ€μ‘±ν•œ λ¦¬μ†ŒμŠ€μ— μ ‘κ·Όν•  λ•Œ ν•΄λ‹Ή λ¦¬μ†ŒμŠ€λ₯Ό 숨기고 μ‹Άμ„λ•Œ


βœ”οΈ 5xx (μ„œλ²„ 였λ₯˜)

μ„œλ²„μ— λ¬Έμ œκ°€ 있기 λ•Œλ¬Έμ— μž¬μ‹œλ„ ν•˜λ©΄ 성곡할 μˆ˜λ„ 있음(볡ꡬ가 λœλ‹€λ©΄..)

 

β– 500 internal server error : μ„œλ²„ λ‚΄λΆ€ 문제둜 였λ₯˜κ°€ λ°œμƒ, μ• λ§€ν•˜λ©΄ 500 였λ₯˜

β– 503 service unavailable : μ„œλΉ„μŠ€ 이용 λΆˆκ°€

μ„œλ²„κ°€ μΌμ‹œμ μΈ κ³ΌλΆ€ν•˜ λ˜λŠ” μ˜ˆμ •λœ μž‘μ—…μœΌλ‘œ μž μ‹œ μš”μ²­μ„ μ²˜λ¦¬ν•  수 μ—†μŒ

retry-after 헀더 ν•„λ“œλ‘œ μ–Όλ§ˆλ’€μ— λ³΅κ΅¬λ˜λŠ”μ§€ 보낼 수 μžˆλ‹€.

 

μ›¬λ§Œν•΄μ„œ 500λŒ€ μ—λŸ¬λ₯Ό λ§Œλ“€μ–΄μ„œλŠ” μ•ˆλœλ‹€. μ§„μ§œ μ„œλ²„μ— λ¬Έμ œκ°€ μžˆμ„λ•Œ λ§Œλ“€μ–΄μ•Όν•œλ‹€.

 

πŸ˜ƒ 잘λͺ»λœ κ°œλ… 전달이 μžˆλ‹€λ©΄ λŒ“κΈ€ λΆ€νƒλ“œλ¦½λ‹ˆλ‹€. μ €μ˜ μ„±μž₯에 큰 도움이 λ©λ‹ˆλ‹€πŸ€“