HTTP 상태 코드

이민재·2022년 8월 19일
0

저번에 프로젝트 진행하면서 시간 부족 이유도 있었지만 Rest Api의 응답 http 상태 코드를 200, 400, 500으로만 작성했던 경험에서 http 코드에 대해 조금 정리를 할 필요성을 느꼈다.

HTTP 상태 코드란?

HTTP 상태 코드는 클라이언트가 보낸 HTTP 요청에 대한 서버의 응답 코드로, 상태 코드에 따라 요청의 성공/실패 여부를 판단한다.

HTTP 상태 코드 분류

상태 코드의 첫 번째 숫자에 따라 크게 5가지로 분류 된다.

  • 1xx : Informational -> 조건부응답

  • 2xx : Success -> 성공

  • 3xx : Redirection -> 리다이렉션 완료

  • 4xx : Client Error -> 요청 오류

  • 5xx : Server Error -> 서버 오류

1xx : 조건부 응답

Request received, continuing process
요청을 받았으며 작업을 계속함.

상태코드요약설명
100continue요청의 시작 부분이 받아 들여졌으며 클라이언트는 계속 이어서 보내야 함.
101Switching Protocol요청 헤더의 Update 필드 중 하나로 서버가 프로토콜을 변경함
102Processing서버가 요청을 수신하고 이를 처리하고 있으나 제대로 된 응답을 알려줄 수 없음

2xx : 성공

The action was successfully received, understood, and accepted
요청을 성공적으로 받았으며 인식했고 수용했음

상태코드요약설명
200OK요청을 정상적으로 처리함
201Created성공적으로 생성에 대한 요청을 받었으며 서버가 새 리소스를 작성함 (대개 POST, PUT일 때)
202Accepted요청을 접수했지만 아직 처리하지 않음 (요청은 적절했음)
203Non-Authoritative Information요청을 성공적으로 처리했지만 다른 소스에서 수신된 정보를 제공함, 검증이 되지 않은 상태
204No Content서버가 요청을 성공적으로 처리했지만 제공할 컨텐츠는 없음
205Reset Content서버가 요청을 성공적으로 처리했지만 새로운 내용을 확인해야 함을 알려줌 (새로고침 등을 이용)
206Partial Content서버가 GET 요청의 일부만 성공적으로 처리함 (Content-Range와 Date 헤더를 반드시 포함)
207Multi Status여러 개의 리소스가 여러 status code를 갖고 있는 상황에서 적절한 정보 전달
208Already ReportedDAV에서 사용

3xx : 리다이렉션 완료

Further action must be taken in order to complete the request
요청 완료를 위해 추가 작업 조치가 필요함 을 의미합니다.

상태코드요약설명
300Multiple Choice클라이언트가 동시에 여러 응답이 가능한 요청을 보냈을 경우 클라이언트의 선택지를 반환
301Moved Permanently요청한 리소스의 URI가 변경됨 -> 변경된 URI에 대한 정보와 함께 응답
302Found요청한 리소스의 URI가 일시적으로 변경된 것이므로 원래 요청했던 URI로 요청해야 함
303See Other클라이언트가 요청한 작업을 하기 위해서는 다른 URI에서 얻어야 할 때 클라이언트에게 줌
304Not Modified이전의 요청과 비교하여 달라진 것이 없음 (캐시를 목적으로 사용됨)
305Use Proxyproxy를 통해 요청되어야 함
306Unused지금은 사용하지 않는 코드 -> 추후 사용을 위해 예약되어 있음
307Temporary Redirect302와 동일하나 클라이언트가 보낸 HTTP 메소드도 변경하면 안됨
308Permanent Redirect요청한 리소스가 영구적으로 다른 URI에 위치하고 있음, 301과 동일하나 HTTP 메소드도 변경하지 말 것

4xx : 요청 오류

The request contains bad syntax or cannot be fulfilled
요청의 문법이 잘못되었거나 요청을 처리할 수 없음 을 의미

상태코드요약설명
400Bad Request잘못된 문법 등으로 인해 클라이언트가 올바르지 못한 요청을 보내 서버가 요청을 이해할 수 없음을 의미합니다.
401Unauthorized인증되지 않은 사용자가 인증이 필요한 리소스를 요청하는 경우의 응답 입니다. 보통 로그인이 필요한 API를 비로그인 사용자가 호출했을 때 사용됩니다.
403Forbidden클라이언트가 콘텐츠에 접근할 권한을 가지고 있지 않음을 의미합니다. 401과 다른 점은 서버가 클라이언트가 누구인지 알고 있다는 것입니다. 보통 특정 IP나 국가가 차단되어 있는 사이트에 접속을 시도한 경우 사용됩니다.
404Not Found요청한 리소스가 존재하지 않음을 의미합니다. 인증되지 않은 클라이언트로부터 리소스를 숨기기 위해 403 대신 이 응답을 전송하기도 합니다.
405Method Not Allowed현재 리소스에 맞지 않는 메소드를 사용했음을 의미합니다. 예로는 GET 요청만 허용되는데 POST 요청을 한 경우의 응답입니다.
406No Acceptable알맞은 컨텐츠 타입이 없음을 의미합니다. 서버의 리소스가 클라이언트의 HTTP 헤더에 들어있는 Accept 필드에 명시된 콘텐츠 타입이 아닌 경우의 응답입니다.
408Request Timeout요청에 응답하는 시간이 너무 오래 걸림을 의미합니다.
409Conflict요청이 현재 서버의 상태와 충돌될 때의 응답입니다.
412Precondition Failed서버가 요청자가 요청 시 부과한 사전조건을 만족하지 않을 때의 응답입니다.
413Payload Too Large요청이 너무 커서 서버가 처리할 수 없을 때의 응답입니다.

|429 |Too many Requests |클라이언트가 지정된 시간에 너무 많은 요청을 보낸 경우의 응답입니다.

5xx : 서버 오류

The server failed to fulfill an apparently valid request
서버가 명백히 유효한 요청에 대해 충족을 실패했음 을 의미합니다.

상태코드요약설명
500Internal Server Error서버에 오류가 발생하여 응답할 수 없음을 의미합니다. 서버에 오류가 발생했으나 처리 방법을 알 수 없을 경우의 응답입니다.
501Not Implemented클라이언트 요청에 대한 서버의 응답 수행 기능이 없음을 의미합니다.
502Bad Gateway서버가 게이트웨이로부터 잘못된 응답을 수신했음을 의미합니다. 서버의 부모 서버에서 오류가 발생한 경우의 응답입니다. 보통 서버에 접속하는 사용자가 많아 과부하될 때 발생합니다.
503Service Unavailable서버가 요청을 처리할 준비가 되지 않음을 의미합니다. 일반적으로 유지보수를 위해 작동이 중단되거나 과부하가 걸린 경우의 응답입니다.
504Gateway Timeout서버가 게이트웨이 역할을 하고 있으며, 한 서버가 액세스하고 있는 다른 서버에서 적시에 응답을 받지 못했음을 의미합니다.

검색해 보았을 때 자주 사용되는 상태 코드로
200, 201, 204, 301, 302, 304, 400, 401, 403,404, 500, 503 등이 있다고 나왔고
다음 글에서는 구체적인 예시를 정리해 볼 생각이다.

참고 사이트

profile
초보 개발자

0개의 댓글