Network HTTP 상태코드

1. HTTP 상태코드

1.1. 상태 코드

상태코드라고 하는것은 클라이언트가 보낸 요청의 처리상태를 응답에서 알려주는 기능이라고 할 수 있습니다.

예를 들어보겠습니다. 크롬에서 개발자모드를 키면 network탭에 보시면 어떤식으로 응답이 오고가는지를 확인할 수 있습니다.

상태코드 예시

  • 1xx(Informational): 요청 수신 및 처리진행중일때 나오는 상태코드
  • 2xx(Successful): 요청 정상 처리 상태코드
  • 3xx(Redirection): 요청을 완료하려면 추가 행동필요함을 알리는 상태코드
  • 4xx(Client Error): 클라이언트 오류, 잘못된 문법 서버 요청 수행할 수 없을때 상태코드
  • 5xx(Server Error): 서버 오류, 서버가 정상 요청을 처리하지 못할때 나오는 상태코드

인식할 수 없는 상태코드를 서버가 반환하게 되는 경우 상위 상태코드를 해석해서 처리를 진행합니다. 즉, 2xx면 성공상태 코드라고 생각하고, 4xx 클라이언트에러, 5xx 서버에러라고 생각하면 상태코드를 변경하지 않아도되게됩니다.

1.2. 상태코드별 처리

  1. 1xx(Informational)
    현재 요청이 수신이 되어 처리를 진행중인 상태

  2. 2xx(Successful)
    클라이언트의 요청을 성공적인 처리한 상태
    200: OK, 201: Created(리소스 생성), 202: Accepted(요청접수 처리되었으나 처리 완료 X) - 배치 처리, 204: No Content: 서버가 요청을 성공적으로 수행했지만, 응답 페이로드 본문에 보낼 데이터가 없을때 처리합니다.

1
2
3
4
HTTP/1.1 200 OK
HTTP/1.1 201 Created
HTTP/1.1 202 Accepted
HTTP/1.1 204 No Content
  1. 3xx(Redirection)
    요청을 완료하기 위해서는 유저의 에이전트에서 추가 조치가 필요한 상태코드
1
2
3
4
5
6
7
HTTP/1.1 300 Multiple Choices
HTTP/1.1 301 Moved Permanently
HTTP/1.1 302 Found
HTTP/1.1 303 See Other
HTTP/1.1 304 Not Modified
HTTP/1.1 307 Temporary Redirect
HTTP/1.1 308 Permanent Redirect

웹 브라우저는 3xx 응답의 결과에 Location가 있는 경우 해당 위치로 리다이렉션을 진행합니다.

  • 영구 리다이렉션: 특정 리소스의 UR가 영구적으로 리다이렉션
    301: 리다이렉트시 요청 메서드가 GET 변경되어 본문 제거
    308: 리다이렉트시 요청 메서드와 본문 유지

  • 일시적 리다이렉션: 특정 로직 주문같은 경우 주문이 모두 완료시 GET화면으로 리다이렉션
    302: 리다이렉트시 요청 메서드가 GET 변경 본문 제거
    307: 302와 기능은 같으나 요청메서드와 본문 유지
    308: 리다이렉트시 요청 메서드가 GET으로 변경

  • 특수 리다이렉션: 결과를 캐시로 리다이렉션
    300: 잘 사용되지 않음
    304: 캐시를 목적으로 사용되며 로컬 PC저장된 캐시를 재사용합니다.

  1. 4xx(Client Error)

클라이언트의 요청에 잘못된 문법등으로 서버가 요청을 수행할 수 없습니다. 즉, 오류의 원인은 클라이언트

  • 400(Bad Request): 클라이언트가 잘못된 요청을 해서 서버가 요청을 처리할 수 없습니다.
    요청 구문, 메시지 등의 오류와 클라이언트는 요청 내용을 다시검토하고 데이터를 전송해야합니다. Request Parameter 혹은 API 스펙이 맞지 않을 경우

400은 500번과 다르게 복구가 불가능하고 500번은 같은 요청시 성공 가능성이 있습니다.

  • 401(Unauthorized)
    클라이언트가 해당 리소스에 대한 인증이 필요합니다.

인증이 되지 않거나 401 오류 발생시 응답에 WWW-Authenticate헤더와 함께 인증 방법을 설명해야합니다.
인증: 로그인, 인가: 권한부여(ADMIN)

  • 403(Forbidden)
    서버가 요청을 이해했지만 승인을 거부한 경우
    주로 인증 자격 증명은 있지만, 접근 권한이 불충분한 경우 발생할 수 있습니다. (인가관련된 허가 여부-ADMIN)

  • 404(Not Found)
    요청 리소스를 찾을 수 없을때 발생하거나 권한이 부족한 리소스에 접근할때 발생합니다. 혹은 리소스를 Hide처리하고 싶을때 발생합니다.

  1. 5xx(Server Error)

서버 문제로 오류가 발생할때 반환하는 상태코드입니다. 만약 서버가 문제가 있으니 클라이언트에서 재시도를 진행하면 성공할 수도 있다는것이 장점입니다.

  • 500(Internal Server Error)
    서버 문제로 오류 발생, 애매하면 500을 반환합니다.

  • 503(Service Unavailable)
    서비스 이용 불가, 일시적인 과부하또는 예정된 작업으로 잠시 요청을 처리할 수 없는 경우 반환합니다. Retry-After헤더필드를 사용하면 얼마뒤에 복구되는지 반환시킬 수 있습니다.