HTTP 상태코드

kimm·2023년 2월 28일
0
post-thumbnail

📗 Reference

모든 개발자를 위한 HTTP 웹 기본 지식

🟢 2xx (Successful)

  • 200 : OK
  • 201 : Created
  • 202 : Accepted
  • 204 : No Content

2xx : 클라이언트의 요청을 성공적으로 처리

* 200 : 서버에서 결과를 정상적으로 잘 처리해서 응답을 하면 200 OK

* 201 : 요청 성공해서 새로운 리소스가 생성되는데, 생성된 리소스는 응답의 Location 헤더 필드로 식별

* 202 : 요청이 접수되었으나 처리가 완료되지 않은 상태

* 204 : 서버가 요청을 성공적으로 수행했지만, 응답 페이로드 본문에 보낼 데이터가 없을 경우

🟢 3xx (Redirection)

  • 300 : Multiple Choices
  • 301 : Moved Permanently
  • 302 : Found
  • 303 : See Other
  • 304 : Not Modified
  • 307 : Temporary Redirect
  • 308 : Permanent Redirect
  • 300은 잘 쓰지 않고 301 ~ 308 까지가 중요

3xx : 요청을 완료하기 위해 유저 에이전트의 추가 조치 필요

🟣 리다이랙션의 이해

  • 리다이랙트란? 웹 브라우저가 3xx 응답의 결과에 Location 헤더가 있으면, Location 위치로 자동 이동하는 것

🟣 영구 리다이렉션 - 301 (Moved Permanently)

  • 리소스의 URI가 영구적으로 이동
  • 원래의 URL을 사용하지 않고, 검색 엔진 등에서도 변경 인지
  • 리다이렉트시 요청 메서드가 GET으로 변하고, 본문이 제거될 수 있음

🟣 영구 리다이렉션 - 308 (Permanent Redirect)

  • 301과 기능은 같음
  • 리다이렉트시 요청 메서드와 본문 유치(처음 POST를 보내면 리다이렉트도 POST 유지)

🟣 일시적인 리다이렉션 - 302 (Found)

  • 리소스의 URI가 일시적으로 변경
  • 따라서 검색 엔진 등에서 URL을 변경하면 안 됨
  • 리다이렉트시 요청 메서드가 GET으로 변하고, 본문이 제거될 수 있음

🟣 일시적인 리다이렉션 - 307 (Temporary Redirect)

  • 302와 기능은 같음
  • 리다이렉트시 요청 메서드와 본문 유지 (요청 메서드를 변경하면 안 됨)

🟣 일시적인 리다이렉션 - 303 (See Other)

  • 302와 기능은 같음
  • 리다이렉트시 요청 메서드가 GET으로 변경

🟣 PRG: Post/Redirect/Get 예시

  • POST로 주문후에 웹 브라우저를 새로고침하면?
  • 새로고침은 다시 요청 -> 중복 주문이 될 수 있다.

  • POST로 주문후에 새로 고침으로 인한 중복 주문 방지
  • POST로 주문후에 주문 결과 화면을 GET 메서드로 리다이렉트
  • 새로고침해도 결과 화면을 GET으로 조회
  • 중복 주문 대신에 결과 화면만 GET으로 다시 요청

<==3xx 정리==>

  • 302 Found -> 요청 메서드가 GET으로 변하고 본문이 제거될 수 있음
  • 307 Temporary Redirect -> 요청 메서드와 본문 유지
  • 303 See Other -> 요청 메서드가 GET으로 변경
  • 307, 303을 권장하지만 많은 애플리케이션 라이브러리들이 302를 기본값으로 사용하기 때문에 GET으로 자동 리다이렉션시 변해도 되면 302를 사용해도 됨
  • 300 Multiple Choices -> 거의 쓰지 않음
  • 304 Not Modified -> 캐시를 목적으로 사용

🟢 4xx (Client Error)

  • 400 : Bad Request
  • 401 : Unauthorized
  • 403 : Forbidden
  • 404 : Not Found

4xx : 클라이언트 오류

  • 오류의 원인이 클라이언트에 있음
  • 클라이언트가 이미 잘못된 요청, 데이터를 보내고 있기 때문에 똑같은 재시도가 실패

🟣 400 (Bad Request)

  • 클라이언트가 잘못된 요청을 해서 서버가 요청을 처리할 수 없음
  • ex) 잘못된 요청 파라미터, 맞지 않는 API 스펙

🟣 401 (Unauthorized)

  • 인증(Authentication)이 되지 않았을 때 발생
  • 클라이언트가 해당 리소스에 대한 인증이 필요
  • 401 오류 발생시 응답에 WWW-Authenticate 헤더와 함께 인증 방법을 설명해야함

🟣 403 (Forbidden)

  • 서버가 요청을 이해했지만 승인을 거부함
  • ex) 어드민 등급이 아닌 사용자가 로그인은 했지만, 어드민 등급의 리소스에 접근하는 경우

🟣 404 (Not Found)

  • 요청 리소스를 찾을 수 없음
  • 권한이 부족한 클라이언트가 리소스에 접근할 때 403처럼 접근 금지가 아닌 해당 리소스를 숨기고 싶을 때 사용

🟢 5xx (Server Error)

  • 500 : Internal Server Error
  • 503 : Service Unavailable

5xx : 서버 문제로 오류 발생

🟣 500 (Internal Server Error)

  • 서버 문제로 오류 발생

🟣 503 (Service Unavailable)

  • 서비스 이용 불가
  • 서버가 일시적인 과부화 또는 예정된 작업으로 잠시 요청을 처리할 수 없음
  • Retry-After 헤더 필드로 복구 예상 시간을 보낼 수 있음
  • 하지만 이러한 오류는 예측 불가능하기 때문에 503보다 바로 500을 내보내는 경우가 많음

<==4xx 오류와 5xx 오류의 차이점==>

  • 오류 발생 후 똑같은 재시도를 할 때 5xx 오류는 서버를 복구하면 정상적으로 보내짐
  • 하지만 4xx 오류는 문제가 클라이언트의 잘못된 요청에 있음
  • 따라서 4xx 오류는 클라이언트가 올바른 요청을 하지 않는 이상 복구 불가능
profile
벨린이

0개의 댓글