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

2022. 3. 13. 18:00Β·WEB

πŸ“Œ HTTP μƒνƒœμ½”λ“œ

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

  • 1xx (Informational) : μ²˜λ¦¬μ€‘ -> 거의 μ‚¬μš©x
  • 2xx (Successful): μš”μ²­ 정상 처리
  • 3xx(Redirection) : μš”μ²­μ„ μ™„λ£Œν•˜κΈ° μœ„ν•΄μ„œλŠ” μΆ”κ°€ 행동이 ν•„μš”
  • 4xx(Client Error) : ν΄λΌμ΄μ–ΈνŠΈ 였λ₯˜, 잘λͺ»λœ 문법 λ“±μœΌλ‘œ μ„œλ²„κ°€ μš”μ²­μ„ μˆ˜ν–‰ν•  수 μ—†μŒ
  • 5xx(Server Error) : μ„œλ²„ 였λ₯˜, μ„œλ²„κ°€ μ •μƒμ μœΌλ‘œ μš”μ²­μ„ μ²˜λ¦¬ν•˜μ§€ λͺ»ν•¨

 

βœ… λ§Œμ•½ λͺ¨λ₯΄λŠ” μƒνƒœ μ½”λ“œκ°€ λ‚˜νƒ€λ‚˜λ©΄?

  • μ„œλ²„κ°€ λ°˜ν™˜ν•œ μƒνƒœμ½”λ“œλ₯Ό ν΄λΌμ΄μ–ΈνŠΈκ°€ 인식할 수 μ—†μœΌλ©΄?
  • ν΄λΌμ΄μ–ΈνŠΈλŠ” μƒμœ„ μƒνƒœμ½”λ“œλ‘œ ν•΄μ„ν•΄μ„œ 처리
  • λ―Έλž˜μ— μƒˆλ‘œμš΄ μƒνƒœμ½”λ“œκ°€ μΆ”κ°€λ˜μ–΄λ„ ν΄λΌμ΄μ–ΈνŠΈλ₯Ό λ³€κ²½ν•˜μ§€ μ•Šμ•„λ„ 됨
  • 예
    • 299? -> 2xx (Successful)
    • 451? -> 4xx (Client Error)

 

πŸ“Œ 2xx (Successful)

ν΄λΌμ΄μ–ΈνŠΈμ˜ μš”μ²­μ„ μ„±κ³΅μ μœΌλ‘œ 처리

 

βœ… 200 OK

  • μš”μ²­ 성곡 

 

βœ… 201 Created

  • μš”μ²­μ„ μ„±κ³΅ν•΄μ„œ μƒˆλ‘œμš΄ λ¦¬μ†ŒμŠ€κ°€ 생성됨 (POST둜 λ“±λ‘λ˜μ—ˆμ„λ•Œ)
  • μƒμ„±λœ λ¦¬μ†ŒμŠ€λŠ” μ‘λ‹΅μ˜ Location 헀더 ν•„λ“œλ‘œ 식별

 

βœ… 202 Accepted

  • μš”μ²­μ΄ μ ‘μˆ˜λ˜μ—ˆμœΌλ‚˜ μ²˜λ¦¬κ°€ μ™„λ£Œλ˜μ§€ μ•Šμ•˜μŒ
  • 배치 처리 같은 κ³³μ—μ„œ μ‚¬μš© e.g. μš”μ²­ μ ‘μˆ˜ ν›„ 1μ‹œκ°„ 뒀에 배치 ν”„λ‘œμ„ΈμŠ€κ°€ μš”μ²­μ„ μ²˜λ¦¬ν•¨
  • 잘 μ‚¬μš©ν•˜μ§„ μ•ŠμŒ

 

βœ… 204 No Content

μ„œλ²„κ°€ μš”μ²­μ„ μ„±κ³΅μ μœΌλ‘œ μˆ˜ν–‰ν–ˆμ§€λ§Œ 응닡 νŽ˜μ΄λ‘œλ“œ 본문에 보낼 데이터가 μ—†μŒ

  • e.g. μ›Ή λ¬Έμ„œμ—μ„œ save λ²„νŠΌ
  • save λ²„νŠΌμ˜ 결과둜 아무 λ‚΄μš©μ΄ 없어도 됨
  • save λ²„νŠΌμ„ λˆŒλŸ¬λ„ 같은 ν™”λ©΄ μœ μ§€
  • κ²°κ³Ό λ‚΄μš©μ΄ 없어도 204 λ©”μ„Έμ§€ 만으둜 성곡 인식 κ°€λŠ₯

 

이외에도 2xx의 μ’…λ₯˜λŠ” λ§Žμ§€λ§Œ λ‹€ μ‚¬μš©ν•˜κΈ°λ³΄λ‹€λŠ” κ°œλ°œν•  λ•Œ λ²”μœ„λ₯Ό μ •ν•΄μ„œ μ‚¬μš©

 

πŸ“Œ 3xx (Redirection)

μš”μ²­μ„ μ™„λ£Œν•˜κΈ° μœ„ν•΄ μœ μ € μ—μ΄μ „νŠΈμ˜ μΆ”κ°€ 쑰치 ν•„μš”

  • 301~308을 많이 μ‚¬μš©ν•¨
  • μ›Ή λΈŒλΌμš°μ €λŠ” 3xxμ‘λ‹΅μ˜ 결과에 Location 헀더가 있으면 Location μœ„μΉ˜λ‘œ μžλ™ 이동(λ¦¬λ‹€μ΄λ ‰νŠΈ)

 

πŸ“Œ λ¦¬λ‹€μ΄λ ‰μ…˜ 이해

βœ… 영ꡬ λ¦¬λ‹€μ΄λ ‰μ…˜ (301, 308)

  • νŠΉμ • λ¦¬μ†ŒμŠ€μ˜ URIκ°€ 영ꡬ적으둜 이동
  • μ›λž˜μ˜ URL을 μ‚¬μš©X, 검색 μ—”μ§„ λ“±μ—μ„œλ„ λ³€κ²½ 인지
  • e.g. /event -> /new-event (μƒˆλ‘œμš΄ 이벀트 νŽ˜μ΄μ§€ 생성)

 

πŸ”» 301 Moved Permanently

  • λ¦¬λ‹€μ΄λ ‰νŠΈμ‹œ μš”μ²­ λ©”μ„œλ“œκ°€ GET으둜 λ³€ν•˜κ³  본문이 제거될 수 있음(MAY)

 

 

πŸ”» 308 Permanent Redirect

  • 301κ³Ό κΈ°λŠ₯은 κ°™μŒ
  • λ¦¬λ‹€μ΄λ ‰νŠΈμ‹œ μš”μ²­ λ©”μ„œλ“œμ˜ 본문을 μœ μ§€ν•¨ (처음 POSTλ₯Ό 보내면 λ¦¬λ‹€μ΄λ ‰νŠΈλ„ POST μœ μ§€)

 

μ‹€λ¬΄μ—μ„œλŠ” URIκ°€ λ°”λ€Œλ©΄ 전달받아야 ν•˜λŠ” 데이터가 λ³€κ²½λ˜λŠ” κ²½μš°κ°€ λ§ŽμœΌλ―€λ‘œ 301을 더 많이 μ‚¬μš©ν•œλ‹€. 근데 λ‘˜λ‹€ 잘 μ‚¬μš©λ˜μ§„ μ•ŠμŒ

 

βœ… μΌμ‹œμ μΈ λ¦¬λ‹€μ΄λ ‰μ…˜ (302, 307, 303)

  • λ¦¬μ†ŒμŠ€μ˜ URIκ°€ μΌμ‹œμ μœΌλ‘œ 변경됨
  • μ‹€λ¬΄μ—μ„œ 많이 μ‚¬μš©λ¨!
  • 307, 303을 ꢌμž₯ν•˜μ§€λ§Œ ν˜„μ‹€μ μœΌλ‘œ 이미 λ§Žμ€ μ• ν”Œλ¦¬μΌ€μ΄μ…˜ λΌμ΄λΈŒλŸ¬λ¦¬λ“€μ΄ 302λ₯Ό κΈ°λ³Έ κ°’μœΌλ‘œ μ‚¬μš©ν•¨

 

πŸ”» 302 Found

  • λ¦¬λ‹€μ΄λ ‰νŠΈμ‹œ μš”μ²­ λ©”μ„œλ“œκ°€ GET으둜 λ³€ν•˜κ³ , 본문이 제거될 수 있음(MAY)

 

πŸ”» 307 Temporary Redirect

  • 302와 κΈ°λŠ₯은 κ°™μŒ
  • λ¦¬λ‹€μ΄λ ‰νŠΈμ‹œ μš”μ²­ λ©”μ„œλ“œμ™€ 본문을 μœ μ§€ν•΄μ•Ό 함(MUST NOT λ³€κ²½)

 

πŸ”» 303 See Other

  • 302와 κΈ°λŠ₯은 κ°™μŒ
  • λ¦¬λ‹€μ΄λ ‰νŠΈμ‹œ μš”μ²­ λ©”μ„œλ“œκ°€ GET으둜 λ³€κ²½(MUST)

 

βœ… PRG: Post/Redirect/Get

μΌμ‹œμ  λ¦¬λ‹€μ΄λ ‰μ…˜μ—μ„œ 자주 μ‚¬μš©λ˜λŠ” νŒ¨ν„΄

 

πŸ”» PRG μ‚¬μš©μ „

POST둜 μ£Όλ¬Έ 후에 μ›Ή λΈŒλΌμš°μ €λ₯Ό μƒˆλ‘œκ³ μΉ¨ν•˜λ©΄? → 쀑볡 주문이 될 수 있음

 

πŸ”» PRG νŒ¨ν„΄μ„ μ‚¬μš©ν•˜λ©΄

  • POST둜 μ£Όλ¬Έ ν›„ μƒˆλ‘œ 고침으둜 μΈν•œ 쀑볡 μ£Όλ¬Έ λ°©μ§€
  • μ£Όλ¬Έ ν›„ μ£Όλ¬Έ κ²°κ³Ό 화면을 GET λ©”μ„œλ“œλ‘œ λ¦¬λ‹€μ΄λ ‰νŠΈ
  • μƒˆλ‘œκ³ μΉ¨ν•΄λ„ 쀑볡 μ£Όλ¬Έ λŒ€μ‹  κ²°κ³Ό 화면을 GET으둜 쑰회

 μ‚¬μš©μ„±μ΄ μ’‹μŒ → μ‚¬μš©μž μž…μž₯μ—μ„œλ„ μ’‹κ³ , μ„œλ²„μ—μ„œμ˜ 였λ₯˜λ„ 막을 수 있음

 

 

βœ… κΈ°νƒ€ λ¦¬λ‹€μ΄λ ‰μ…˜ (300, 304)

πŸ”» 304 Not Modified

  • μΊμ‹œλ₯Ό λͺ©μ μœΌλ‘œ μ‚¬μš©
  • ν΄λΌμ΄μ–ΈνŠΈμ—κ²Œ λ¦¬μ†ŒμŠ€κ°€ μˆ˜μ •λ˜μ§€ μ•Šμ•˜μŒμ„ μ•Œλ €μ€Œ. λ”°λΌμ„œ ν΄λΌμ΄μ–ΈνŠΈλŠ” 둜컬 PC에 μ €μž₯된 μΊμ‹œλ₯Ό μž¬μ‚¬μš©ν•¨ (μΊμ‹œλ‘œ λ¦¬λ‹€μ΄λ ‰νŠΈ)
  • 304 응닡은 응닡에 λŒ€ν•œ λ©”μ„Έμ§€ λ°”λ””λ₯Ό ν¬ν•¨ν•˜λ©΄ μ•ˆλ¨ (둜컬 μΊμ‹œλ₯Ό μ‚¬μš©ν•΄μ•Ό ν•˜λ―€λ‘œ)
  • 쑰건뢀 GET, HEAD μš”μ²­μ‹œ μ‚¬μš©

 

πŸ“Œ 4xx (Client Error)

  • ν΄λΌμ΄μ–ΈνŠΈμ˜ μš”μ²­μ— 잘λͺ»λœ 문법 λ“±μœΌλ‘œ μ„œλ²„κ°€ μš”μ²­μ„ μˆ˜ν–‰ν•  수 μ—†μŒ
  • 였λ₯˜μ˜ 원인이 ν΄λΌμ΄μ–ΈνŠΈμ—κ²Œ 있음
  • μŠ€νŽ™μ„ μ§€ν‚€μ§€ μ•Šκ±°λ‚˜ 인증이 μ•ˆλœ μΌ€μ΄μŠ€κ°€ κ°€μž₯ 많음
  • ν΄λΌμ΄μ–ΈνŠΈκ°€ 이미 잘λͺ»λœ μš”μ²­, 데이터λ₯Ό 보내고 μžˆκΈ°λ•Œλ¬Έμ— μž¬μ‹œλ„ν•΄λ„ μš”μ²­ μ‹€νŒ¨ν•¨ (μš”μ²­ μˆ˜μ • ν•„μš”)

 

βœ… 400 Bad Request

  • ν΄λΌμ΄μ–ΈνŠΈκ°€ 잘λͺ»λœ μš”μ²­μ„ ν•΄μ„œ μ„œλ²„κ°€ μš”μ²­μ„ μ²˜λ¦¬ν•  수 μ—†μŒ
  • μš”μ²­ ꡬ문, λ©”μ„Έμ§€ λ“± 였λ₯˜
  • ν΄λΌμ΄μ–ΈνŠΈλŠ” μš”μ²­ λ‚΄μš©μ„ κ²€ν† ν•˜κ³  λ‹€μ‹œ 보내야 함
  • ex) μš”μ²­ νŒŒλΌλ―Έν„°κ°€ 잘λͺ»λ˜κ±°λ‚˜, API μŠ€νŽ™μ΄ λ§žμ§€ μ•Šμ„λ•Œ

 

βœ… 401 Unauthorized

  • ν΄λΌμ΄μ–ΈνŠΈκ°€ ν•΄λ‹Ή λ¦¬μ†ŒμŠ€μ— λŒ€ν•œ 인증이 ν•„μš”ν•¨
  • 인증(Authentication)이 λ˜μ§€ μ•ŠμŒ
  • 였λ₯˜ λ°œμƒμ‹œ 응닡에 WWW-Authenticate 헀더와 ν•¨κ»˜ 인증 방법을 μ„€λͺ…   
  • μ°Έκ³ 
    • 인증(Authentication) : 본인이 λˆ„κ΅¬μΈμ§€ 확인 (둜그인)
    • 인가(Authorization) : κΆŒν•œ λΆ€μ—¬ (νŠΉμ • λ¦¬μ†ŒμŠ€μ— μ ‘κ·Όν•  수 μžˆλŠ” κΆŒν•œ, 인증이 μžˆμ–΄μ•Ό 인가가 있음)

 

βœ… 403 Forbidden

  • μ„œλ²„κ°€ μš”μ²­μ„ μ΄ν•΄ν–ˆμ§€λ§Œ μŠΉμΈμ„ 거뢀함
  • 주둜 인증 자격 증λͺ…은 μžˆμ§€λ§Œ μ ‘κ·Ό κΆŒν•œμ΄ λΆˆμΆ©λΆ„ν•œ 경우
  • ex) μ–΄λ“œλ―Ό 등급이 μ•„λ‹Œ μ‚¬μš©μžκ°€ λ‘œκ·ΈμΈμ€ ν–ˆμ§€λ§Œ, μ–΄λ“œλ―Ό λ“±κΈ‰μ˜ λ¦¬μ†ŒμŠ€μ— μ ‘κ·Όν•˜λŠ” 경우

 

βœ… 404 Not Found

  • μš”μ²­ λ¦¬μ†ŒμŠ€λ₯Ό 찾을 수 μ—†μŒ (μ„œλ²„μ— μ—†μŒ)
  • λ˜λŠ” ν΄λΌμ΄μ–ΈνŠΈκ°€ κΆŒν•œμ΄ λΆ€μ‘±ν•œ λ¦¬μ†ŒμŠ€μ— μ ‘κ·Όν•  λ•Œ ν•΄λ‹Ή λ¦¬μ†ŒμŠ€λ₯Ό 숨기고 μ‹Άμ„λ•Œ (403 λŒ€μ‹  μ‚¬μš©ν•˜κΈ°λ„ 함)

 

πŸ“Œ 5xx (Server Error)

  • μ„œλ²„ 문제둜 였λ₯˜ λ°œμƒ
  • μž¬μ‹œλ„ν•˜λŠ” μ‹œμ μ— μ„œλ²„μ˜ λ¬Έμ œκ°€ 해결될 수 μžˆμœΌλ―€λ‘œ μš”μ²­μ΄ 성곡될 수 있음 (μ„œλ²„μ˜ 문제 e.g. NPE, DB μ ‘κ·Ό 문제 λ“±)
  • μ›¬λ§Œν•˜λ©΄ 500 μ—λŸ¬λ₯Ό λ‚΄λ©΄ μ•ˆλ¨ → μ§„μ§œ μ„œλ²„μ— λ¬Έμ œκ°€ μžˆμ„λ•Œλ§Œ!

 

βœ… 500 Internal Server Error

  • μ„œλ²„ 문제둜 였λ₯˜ λ°œμƒ, μ• λ§€ν•˜λ©΄ 500 였λ₯˜ λ°œμƒ μ‹œν‚€κΈ°

 

βœ… 503 Service Unavailable

  • μ„œλ²„κ°€ μΌμ‹œμ μΈ κ³ΌλΆ€ν•˜ λ˜λŠ” μ˜ˆμ •λœ μž‘μ—…μœΌλ‘œ μž μ‹œ μš”μ²­μ„ μ²˜λ¦¬ν•  수 μ—†μŒ
  • Retry-After 헀더 ν•„λ“œλ‘œ μ–Όλ§ˆλ’€μ— λ³΅κ΅¬λ˜λŠ”μ§€ 보낼 μˆ˜λ„ 있음

 


κ°•μ˜ 자료

 

λͺ¨λ“  개발자λ₯Ό μœ„ν•œ HTTP μ›Ή κΈ°λ³Έ 지식 - μΈν”„λŸ° | κ°•μ˜

싀무에 κΌ­ ν•„μš”ν•œ HTTP 핡심 κΈ°λŠ₯κ³Ό μ˜¬λ°”λ₯Έ HTTP API 섀계 방법을 ν•™μŠ΅ν•©λ‹ˆλ‹€., - κ°•μ˜ μ†Œκ°œ | μΈν”„λŸ°...

www.inflearn.com

 

μ €μž‘μžν‘œμ‹œ λΉ„μ˜λ¦¬ λ³€κ²½κΈˆμ§€ (μƒˆμ°½μ—΄λ¦Ό)

'WEB' μΉ΄ν…Œκ³ λ¦¬μ˜ λ‹€λ₯Έ κΈ€

[HTTP] HTTP 헀더 - (1) 일반 헀더  (0) 2022.03.14
[HTTP] HTTP λ©”μ„œλ“œ ν™œμš©  (0) 2022.03.13
[HTTP] API URI 섀계와 HTTP λ©”μ„œλ“œ  (0) 2022.03.13
'WEB' μΉ΄ν…Œκ³ λ¦¬μ˜ λ‹€λ₯Έ κΈ€
  • [HTTP] HTTP 헀더 - (2) μΊμ‹œμ™€ 쑰건뢀 μš”μ²­
  • [HTTP] HTTP 헀더 - (1) 일반 헀더
  • [HTTP] HTTP λ©”μ„œλ“œ ν™œμš©
  • [HTTP] API URI 섀계와 HTTP λ©”μ„œλ“œ
Sue
Sue
개발 곡뢀 둜그
  • Sue
    Sue's devlog
    Sue
  • 전체
    였늘
    μ–΄μ œ
    • λΆ„λ₯˜ 전체보기 (122)
      • Algorithm (2)
      • WEB (8)
      • Java & Kotlin (83)
      • Spring (26)
      • Database (1)
      • Infra (0)
      • Git (1)
      • devlog (1)
  • 인기 κΈ€

  • 졜근 λŒ“κΈ€

  • 졜근 κΈ€

  • hELLOΒ· Designed Byμ •μƒμš°.v4.10.3
Sue
[HTTP] HTTP μƒνƒœμ½”λ“œ
μƒλ‹¨μœΌλ‘œ

ν‹°μŠ€ν† λ¦¬νˆ΄λ°”