저번에 프로젝트 진행하면서 시간 부족 이유도 있었지만 Rest Api의 응답 http 상태 코드를 200, 400, 500으로만 작성했던 경험에서 http 코드에 대해 조금 정리를 할 필요성을 느꼈다.
HTTP 상태 코드는 클라이언트가 보낸 HTTP 요청에 대한 서버의 응답 코드로, 상태 코드에 따라 요청의 성공/실패 여부를 판단한다.
상태 코드의 첫 번째 숫자에 따라 크게 5가지로 분류 된다.
1xx : Informational -> 조건부응답
2xx : Success -> 성공
3xx : Redirection -> 리다이렉션 완료
4xx : Client Error -> 요청 오류
5xx : Server Error -> 서버 오류
Request received, continuing process
요청을 받았으며 작업을 계속함.
상태코드 | 요약 | 설명 |
---|---|---|
100 | continue | 요청의 시작 부분이 받아 들여졌으며 클라이언트는 계속 이어서 보내야 함. |
101 | Switching Protocol | 요청 헤더의 Update 필드 중 하나로 서버가 프로토콜을 변경함 |
102 | Processing | 서버가 요청을 수신하고 이를 처리하고 있으나 제대로 된 응답을 알려줄 수 없음 |
The action was successfully received, understood, and accepted
요청을 성공적으로 받았으며 인식했고 수용했음
상태코드 | 요약 | 설명 |
---|---|---|
200 | OK | 요청을 정상적으로 처리함 |
201 | Created | 성공적으로 생성에 대한 요청을 받었으며 서버가 새 리소스를 작성함 (대개 POST, PUT일 때) |
202 | Accepted | 요청을 접수했지만 아직 처리하지 않음 (요청은 적절했음) |
203 | Non-Authoritative Information | 요청을 성공적으로 처리했지만 다른 소스에서 수신된 정보를 제공함, 검증이 되지 않은 상태 |
204 | No Content | 서버가 요청을 성공적으로 처리했지만 제공할 컨텐츠는 없음 |
205 | Reset Content | 서버가 요청을 성공적으로 처리했지만 새로운 내용을 확인해야 함을 알려줌 (새로고침 등을 이용) |
206 | Partial Content | 서버가 GET 요청의 일부만 성공적으로 처리함 (Content-Range와 Date 헤더를 반드시 포함) |
207 | Multi Status | 여러 개의 리소스가 여러 status code를 갖고 있는 상황에서 적절한 정보 전달 |
208 | Already Reported | DAV에서 사용 |
Further action must be taken in order to complete the request
요청 완료를 위해 추가 작업 조치가 필요함 을 의미합니다.
상태코드 | 요약 | 설명 |
---|---|---|
300 | Multiple Choice | 클라이언트가 동시에 여러 응답이 가능한 요청을 보냈을 경우 클라이언트의 선택지를 반환 |
301 | Moved Permanently | 요청한 리소스의 URI가 변경됨 -> 변경된 URI에 대한 정보와 함께 응답 |
302 | Found | 요청한 리소스의 URI가 일시적으로 변경된 것이므로 원래 요청했던 URI로 요청해야 함 |
303 | See Other | 클라이언트가 요청한 작업을 하기 위해서는 다른 URI에서 얻어야 할 때 클라이언트에게 줌 |
304 | Not Modified | 이전의 요청과 비교하여 달라진 것이 없음 (캐시를 목적으로 사용됨) |
305 | Use Proxy | proxy를 통해 요청되어야 함 |
306 | Unused | 지금은 사용하지 않는 코드 -> 추후 사용을 위해 예약되어 있음 |
307 | Temporary Redirect | 302와 동일하나 클라이언트가 보낸 HTTP 메소드도 변경하면 안됨 |
308 | Permanent Redirect | 요청한 리소스가 영구적으로 다른 URI에 위치하고 있음, 301과 동일하나 HTTP 메소드도 변경하지 말 것 |
The request contains bad syntax or cannot be fulfilled
요청의 문법이 잘못되었거나 요청을 처리할 수 없음 을 의미
상태코드 | 요약 | 설명 |
---|---|---|
400 | Bad Request | 잘못된 문법 등으로 인해 클라이언트가 올바르지 못한 요청을 보내 서버가 요청을 이해할 수 없음을 의미합니다. |
401 | Unauthorized | 인증되지 않은 사용자가 인증이 필요한 리소스를 요청하는 경우의 응답 입니다. 보통 로그인이 필요한 API를 비로그인 사용자가 호출했을 때 사용됩니다. |
403 | Forbidden | 클라이언트가 콘텐츠에 접근할 권한을 가지고 있지 않음을 의미합니다. 401과 다른 점은 서버가 클라이언트가 누구인지 알고 있다는 것입니다. 보통 특정 IP나 국가가 차단되어 있는 사이트에 접속을 시도한 경우 사용됩니다. |
404 | Not Found | 요청한 리소스가 존재하지 않음을 의미합니다. 인증되지 않은 클라이언트로부터 리소스를 숨기기 위해 403 대신 이 응답을 전송하기도 합니다. |
405 | Method Not Allowed | 현재 리소스에 맞지 않는 메소드를 사용했음을 의미합니다. 예로는 GET 요청만 허용되는데 POST 요청을 한 경우의 응답입니다. |
406 | No Acceptable | 알맞은 컨텐츠 타입이 없음을 의미합니다. 서버의 리소스가 클라이언트의 HTTP 헤더에 들어있는 Accept 필드에 명시된 콘텐츠 타입이 아닌 경우의 응답입니다. |
408 | Request Timeout | 요청에 응답하는 시간이 너무 오래 걸림을 의미합니다. |
409 | Conflict | 요청이 현재 서버의 상태와 충돌될 때의 응답입니다. |
412 | Precondition Failed | 서버가 요청자가 요청 시 부과한 사전조건을 만족하지 않을 때의 응답입니다. |
413 | Payload Too Large | 요청이 너무 커서 서버가 처리할 수 없을 때의 응답입니다. |
|429 |Too many Requests |클라이언트가 지정된 시간에 너무 많은 요청을 보낸 경우의 응답입니다.
The server failed to fulfill an apparently valid request
서버가 명백히 유효한 요청에 대해 충족을 실패했음 을 의미합니다.
상태코드 | 요약 | 설명 |
---|---|---|
500 | Internal Server Error | 서버에 오류가 발생하여 응답할 수 없음을 의미합니다. 서버에 오류가 발생했으나 처리 방법을 알 수 없을 경우의 응답입니다. |
501 | Not Implemented | 클라이언트 요청에 대한 서버의 응답 수행 기능이 없음을 의미합니다. |
502 | Bad Gateway | 서버가 게이트웨이로부터 잘못된 응답을 수신했음을 의미합니다. 서버의 부모 서버에서 오류가 발생한 경우의 응답입니다. 보통 서버에 접속하는 사용자가 많아 과부하될 때 발생합니다. |
503 | Service Unavailable | 서버가 요청을 처리할 준비가 되지 않음을 의미합니다. 일반적으로 유지보수를 위해 작동이 중단되거나 과부하가 걸린 경우의 응답입니다. |
504 | Gateway Timeout | 서버가 게이트웨이 역할을 하고 있으며, 한 서버가 액세스하고 있는 다른 서버에서 적시에 응답을 받지 못했음을 의미합니다. |
검색해 보았을 때 자주 사용되는 상태 코드로
200, 201, 204, 301, 302, 304, 400, 401, 403,404, 500, 503 등이 있다고 나왔고
다음 글에서는 구체적인 예시를 정리해 볼 생각이다.
참고 사이트