HTTP 상태 코드는 Client 와 Server 가 데이터를 주고 받을 때 잘 주고 받았는지를 확인할 수 있는 코드입니다.
개발자 모드에 들어가서 Network 탭을 보면 클라이언트가 서버로 요청한 API 에 대한 상태 코드 (Status) 를 볼 수 있습니다.
HTTP 상태 코드는 100번대 ~ 500번대 까지 있고, 각 번호대별로 의미하는게 다릅니다.
상태 코드 | 설명 |
---|---|
1xx(정보) | 요청을 받았으며 프로세스를 계속 진행합니다. |
2xx(성공) | 요청을 성공적으로 받았으며 인식했고 수용하였습니다. |
3xx(리다이렉션) | 요청 완료를 위해 추가 작업 조치가 필요합니다. |
4xx(클라이언트 오류) | 요청의 문법이 잘못되었거나 요청을 처리할 수 없습니다. |
5xx(서버 오류) | 서버가 명백히 유효한 요청에 대한 충족을 실패했습니다. |
서버가 요청을 받았으며, 서버에 연결된 클라이언트는 작업을 계속하라는 의미
상태코드 | 간략설명 | 설명 |
---|---|---|
100 | Continue | 진행 중임을 의미하는 응답코드 요청의 초기 부분이 수신되었으며 서버에서 아직 거부되지 않았음을 클라이언트에 알리는 데 사용 클라이언트는 요청의 나머지 부분을 계속 전송하거나 요청이 이미 완료된 경우 이 응답을 무시하면 됩니다. |
101 | Switching Protocols | 클라이언트에 의해 보낸 업그레이드 요청 헤더에 대한 응답코드 서버에서 프로토콜을 변경할 것 을 알려줌 |
클라이언트의 요청이 성공적으로 수신 되었음을 나타내는 의미
상태코드 | 간략설명 | 설명 |
---|---|---|
200 | OK | 요청이 성공되었음을 의미하는 응답코드 |
201 | Created | 요청이 성공되었으며, 그 결과로 새로운 리소스가 생성되었음을 나타내는 응답코드 |
202 | Accepted | 요청은 수신했지만, 그에 응하여 행동할 수 없음을 나타내는 응답코드 다른 프로세스에서 처리 또는 서버가 요청을 다루고 있거나 배치 프로세스를 하고 있는 경우를 위해서 만들어진 코드 |
203 | Non-Authoritative Information | 요청이 성공적으로 수행되었으나, 요청에 대한 검증이 되지 않았음을 나타내는 응답코드 |
204 | No Content | 서버가 요청을 완료했지만, 엔티티 본문을 반환할 필요가 없는 경우, 주로 삭제 시 사용 |
205 | Reset Content | 서버가 요청을 완료했으며, 클라이언트가 요청을 보낸 문서 보기를 재설정해야하는 경우 |
206 | Partial Content | 서버가 GET 요청에 대해서 부분적으로 수행했을 떄 |
요청 완료를 위해 추가 작업 조치가 필요함을 나타냄
상태코드 | 간략설명 | 설명 |
---|---|---|
300 | Multiple Choices | 요청에 대해서 하나 이상의 응답이 가능한 경우, 클라이언트는 그 중 하나를 선택해야 한다. |
301 | Moved Permanently | 요청한 리소스의 URI 가 변경되었을 때, 클라이언트는 HTTP 헤더에 들어 있는 Location 필드를 찾아서, 해당 필드가 존재하는 경우 자동으로 리다이렉트 되도록 해야함. |
302 | Found | 요청한 URI 이 일시적으로 변경되었음을 나타내는 코드, 새롭게 변경된 URI 는 나중에 만들어질 수도 있기 때문에 향후 요청도 반드시 동일한 URI 로 해야함. |
303 | See Other | 클라이언트가 요청한 리소스를 다른 URI 에서 GET 요청을 통해 얻어야 할 때 사용하는 상태코드 |
304 | Not Modified | 클라이언트가 조건부 GET 요청을 수행하고, 접근은 허용되지만 문서가 수정되지 않은 경우 사용하는 응답 코드 클라이언트에게 응답이 수정되지 않았음을 알려줌으로써 클라이언트는 계속해서 응답의 캐시된 버전을 사용할 수 있음. |
305 | Use Proxy | 이전 버전의 HTTP 기술 사양에서 정의되었으며, 요청한 응답은 반드시 프록시를 통해서 접속해야 하는 것을 알려주는 응답 코드 |
307 | Temporary Redirerct | 클라이언트가 요청한 리소스가 다른 URI 에 있음을 알려주는 응답코드, 클라이언트가 반드시 HTTP 메소드를 변경하지 말아야 한다. |
둘은 동일한 의미를 가지고 있으며, 클라이언트가 반드시 사용된 HTTP 메소드를 변경하지 말아야한다는 점만 다릅니다.
307 Temporary Redirect 의 경우 첫 요청에 POST 가 사용되었다면, 두번째 요청도 반드시 POST 를 사용해야 합니다.
클라이언트에서 서버로 요청을 보낼때 문법이 잘못되었거나 서버가 이해할 수 없을 때
상태코드 | 간략설명 | 설명 |
---|---|---|
400 | Bad Request | 클라이언트가 올바르지 못한 요청을 보낸 경우 발생하는 응답 코드 |
401 | Unauthorized | 인증되지 않은 사용자가 인증을 필요한 요청을 하려고 하는 경우 발생하는 오류 코드 EX) 로그인이 필요한 API 를 비로그인 사용자가 호출했을 때 |
403 | Forbidden | 클라이언트가 콘텐츠에 접근할 권한을 가지고 있지 않을 때 발생하는 응답 코드 서버가 클라이언트가 누구인지 알고 있음 |
404 | Not Found | 요청한 리소스가 없는 경우 발생하는 오류 코드 서버들은 인증받지 않은 클라이언트로부터 리소스를 숨기기 위하여 이 응답을 403 대신에 전송할 수도 있음 |
405 | Method Not Allowed | 요청과 맞지 않는 메소드를 사용한 경우 발생하는 응답 코드 |
406 | No Acceptable | 알맞은 컨텐츠 타입이 없을 때 발생하는 오류 코드 서버의 리소스가 클라이언트의 HTTP 헤더에 들어있는 Accept 필드에 명시된 콘텐츠 타입이 아닌 경우의 응답 |
407 | Proxy Authentication Required | 이것은 401과 비슷하지만 프록시에 의해 완료된 인증이 필요합니다 |
408 | Request Timeout | 요청에 응답하는 시간이 너무 오래 걸릴 경우 발생하는 응답 코드 |
409 | Conflict | 요청이 현재 서버의 상태와 충돌될 때의 응답 코드 |
413 | Request Entity Too Large | 요청 엔티티는 서버에서 정의한 한계보다 클 경우 발생하는 오류 코드 서버는 연결을 끊거나 혹은 Retry-After 헤더 필드로 돌려보냄 |
414 | Request-URI Too Long | 클라이언트가 요청한 URI는 서버에서 처리하지 않기로 한 길이보다 길 경우 발생하는 응답 코드 |
415 | Unsupported Media Type | 요청을 보낼때 함께 보낸 미디어 포맷이 서버에서 지원하지 않는 경우 발생하는 응답 코드 |
429 | Too Many Requests | 사용자가 지정된 시간에 너무 많은 요청을 보낸 경우 발생하는 응답 코드 |
서버가 명백히 유효한 요청에 대한 충족을 실패했습니다
상태코드 | 간략설명 | 설명 |
---|---|---|
500 | Internal Server Error | 서버에 오류가 발생하여 응답할 수 없음을 의미 서버에 오류가 발생했으나 처리 방법을 알 수 없을 경우의 응답 |
501 | Not Implemented | 클라이언트 요청에 대한 서버의 응답 수행 기능이 없음을 의미하는 응답 코드 |
502 | Bad Gateway | 서버가 게이트웨이로부터 잘못된 응답을 수신했음을 의미하는 응답 코드 |
503 | Service Unavailable | 서버가 요청을 처리할 준비가 되지 않음을 의미하는 응답 코드 일반적으로 유지보수를 위해 작동이 중단되거나 과부하가 걸린 경우의 응답 |
504 | Gateway Timeout | 서버가 게이트웨이 역할을 하고 있으며, 한 서버가 액세스하고 있는 다른 서버에서 적시에 응답을 받지 못했음을 의미하는 응답코드 |
505 | HTTP Version Not Supported | 서버에서 지원되지 않는 HTTP 버전을 클라이언트가 요청한 경우 발생하는 응땁코드 |
500 서버오류
@GetMapping("/error")
public void getError() throws Exception {
throw new Exception("오류오류");
}
서버에서 오류를 발생시켰을 때 개발자 모드 > Network 에서 해당 요청에 대한 정보를 보면 Status Code 가 서버에 오류가 발생하여 응답할 수 없음을 의미하는 500 Internal Server Error 으로 떨어진 걸 확인 할 수 있습니다.
400 클라이언트 오류
@GetMapping("/test")
public String getError(@RequestParam String testParam) {
return testParam;
}
클라이언트에서 파라미터를 잘 못 요청했을 경우 (넘겨야 하는데 안넘긴 경우) 개발자 모드 > Network 에서 해당 요청에 대한 정보를 보면 Status Code 가 클라이언트가 올바르지 못한 요청을 보낸 경우 발생하는 응답 코드인 400 Bad Request 로 떨어진 걸 확인 할 수 있습니다.
200 정상작동
@GetMapping("/test")
public String getError() {
return "Success";
}
오류가 나지 않은 경우에는 정상 작동 했다는 의미에서 200 이 리턴됩니다.