HTTP 상태 코드 정리

mallin·2022년 5월 16일
0

WEB

목록 보기
3/3
post-thumbnail

HTTP 상태 코드는 Client 와 Server 가 데이터를 주고 받을 때 잘 주고 받았는지를 확인할 수 있는 코드입니다.

개발자 모드에 들어가서 Network 탭을 보면 클라이언트가 서버로 요청한 API 에 대한 상태 코드 (Status) 를 볼 수 있습니다.

HTTP 상태 코드는 100번대 ~ 500번대 까지 있고, 각 번호대별로 의미하는게 다릅니다.

상태 코드설명
1xx(정보)요청을 받았으며 프로세스를 계속 진행합니다.
2xx(성공)요청을 성공적으로 받았으며 인식했고 수용하였습니다.
3xx(리다이렉션)요청 완료를 위해 추가 작업 조치가 필요합니다.
4xx(클라이언트 오류)요청의 문법이 잘못되었거나 요청을 처리할 수 없습니다.
5xx(서버 오류)서버가 명백히 유효한 요청에 대한 충족을 실패했습니다.

100번대

서버가 요청을 받았으며, 서버에 연결된 클라이언트는 작업을 계속하라는 의미

상태코드간략설명설명
100Continue진행 중임을 의미하는 응답코드
요청의 초기 부분이 수신되었으며 서버에서 아직 거부되지 않았음을 클라이언트에 알리는 데 사용
클라이언트는 요청의 나머지 부분을 계속 전송하거나 요청이 이미 완료된 경우 이 응답을 무시하면 됩니다.
101Switching Protocols클라이언트에 의해 보낸 업그레이드 요청 헤더에 대한 응답코드
서버에서 프로토콜을 변경할 것 을 알려줌

200번대

클라이언트의 요청이 성공적으로 수신 되었음을 나타내는 의미

상태코드간략설명설명
200OK요청이 성공되었음을 의미하는 응답코드
201Created요청이 성공되었으며, 그 결과로 새로운 리소스가 생성되었음을 나타내는 응답코드
202Accepted요청은 수신했지만, 그에 응하여 행동할 수 없음을 나타내는 응답코드
다른 프로세스에서 처리 또는 서버가 요청을 다루고 있거나 배치 프로세스를 하고 있는 경우를 위해서 만들어진 코드
203Non-Authoritative Information요청이 성공적으로 수행되었으나, 요청에 대한 검증이 되지 않았음을 나타내는 응답코드
204No Content서버가 요청을 완료했지만, 엔티티 본문을 반환할 필요가 없는 경우, 주로 삭제 시 사용
205Reset Content서버가 요청을 완료했으며, 클라이언트가 요청을 보낸 문서 보기를 재설정해야하는 경우
206Partial Content서버가 GET 요청에 대해서 부분적으로 수행했을 떄

300번대

요청 완료를 위해 추가 작업 조치가 필요함을 나타냄

상태코드간략설명설명
300Multiple Choices요청에 대해서 하나 이상의 응답이 가능한 경우, 클라이언트는 그 중 하나를 선택해야 한다.
301Moved Permanently요청한 리소스의 URI 가 변경되었을 때, 클라이언트는 HTTP 헤더에 들어 있는 Location 필드를 찾아서, 해당 필드가 존재하는 경우 자동으로 리다이렉트 되도록 해야함.
302Found요청한 URI 이 일시적으로 변경되었음을 나타내는 코드, 새롭게 변경된 URI 는 나중에 만들어질 수도 있기 때문에 향후 요청도 반드시 동일한 URI 로 해야함.
303See Other클라이언트가 요청한 리소스를 다른 URI 에서 GET 요청을 통해 얻어야 할 때 사용하는 상태코드
304Not Modified클라이언트가 조건부 GET 요청을 수행하고, 접근은 허용되지만 문서가 수정되지 않은 경우 사용하는 응답 코드
클라이언트에게 응답이 수정되지 않았음을 알려줌으로써 클라이언트는 계속해서 응답의 캐시된 버전을 사용할 수 있음.
305Use Proxy이전 버전의 HTTP 기술 사양에서 정의되었으며, 요청한 응답은 반드시 프록시를 통해서 접속해야 하는 것을 알려주는 응답 코드
307Temporary Redirerct클라이언트가 요청한 리소스가 다른 URI 에 있음을 알려주는 응답코드, 클라이언트가 반드시 HTTP 메소드를 변경하지 말아야 한다.

302 Found vs 307 Temporary Redirect

둘은 동일한 의미를 가지고 있으며, 클라이언트가 반드시 사용된 HTTP 메소드를 변경하지 말아야한다는 점만 다릅니다.
307 Temporary Redirect 의 경우 첫 요청에 POST 가 사용되었다면, 두번째 요청도 반드시 POST 를 사용해야 합니다.

400번대

클라이언트에서 서버로 요청을 보낼때 문법이 잘못되었거나 서버가 이해할 수 없을 때

상태코드간략설명설명
400Bad Request클라이언트가 올바르지 못한 요청을 보낸 경우 발생하는 응답 코드
401Unauthorized인증되지 않은 사용자가 인증을 필요한 요청을 하려고 하는 경우 발생하는 오류 코드
EX) 로그인이 필요한 API 를 비로그인 사용자가 호출했을 때
403Forbidden클라이언트가 콘텐츠에 접근할 권한을 가지고 있지 않을 때 발생하는 응답 코드
서버가 클라이언트가 누구인지 알고 있음
404Not Found요청한 리소스가 없는 경우 발생하는 오류 코드
서버들은 인증받지 않은 클라이언트로부터 리소스를 숨기기 위하여 이 응답을 403 대신에 전송할 수도 있음
405Method Not Allowed요청과 맞지 않는 메소드를 사용한 경우 발생하는 응답 코드
406No Acceptable알맞은 컨텐츠 타입이 없을 때 발생하는 오류 코드
서버의 리소스가 클라이언트의 HTTP 헤더에 들어있는 Accept 필드에 명시된 콘텐츠 타입이 아닌 경우의 응답
407Proxy Authentication Required이것은 401과 비슷하지만 프록시에 의해 완료된 인증이 필요합니다
408Request Timeout요청에 응답하는 시간이 너무 오래 걸릴 경우 발생하는 응답 코드
409Conflict요청이 현재 서버의 상태와 충돌될 때의 응답 코드
413Request Entity Too Large요청 엔티티는 서버에서 정의한 한계보다 클 경우 발생하는 오류 코드
서버는 연결을 끊거나 혹은 Retry-After 헤더 필드로 돌려보냄
414Request-URI Too Long클라이언트가 요청한 URI는 서버에서 처리하지 않기로 한 길이보다 길 경우 발생하는 응답 코드
415Unsupported Media Type요청을 보낼때 함께 보낸 미디어 포맷이 서버에서 지원하지 않는 경우 발생하는 응답 코드
429Too Many Requests사용자가 지정된 시간에 너무 많은 요청을 보낸 경우 발생하는 응답 코드

500번대

서버가 명백히 유효한 요청에 대한 충족을 실패했습니다

상태코드간략설명설명
500Internal Server Error서버에 오류가 발생하여 응답할 수 없음을 의미
서버에 오류가 발생했으나 처리 방법을 알 수 없을 경우의 응답
501Not Implemented클라이언트 요청에 대한 서버의 응답 수행 기능이 없음을 의미하는 응답 코드
502Bad Gateway서버가 게이트웨이로부터 잘못된 응답을 수신했음을 의미하는 응답 코드
503Service Unavailable서버가 요청을 처리할 준비가 되지 않음을 의미하는 응답 코드
일반적으로 유지보수를 위해 작동이 중단되거나 과부하가 걸린 경우의 응답
504Gateway Timeout서버가 게이트웨이 역할을 하고 있으며, 한 서버가 액세스하고 있는 다른 서버에서 적시에 응답을 받지 못했음을 의미하는 응답코드
505HTTP 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 이 리턴됩니다.

🙇🏻‍♀️ 레퍼런스

HTTP 상태 코드 정리
W3 RFC 2616 상태 코드 정리
HTTP 상태 코드

0개의 댓글