200 OK
- 클라이언트의 요청을 서버가 성공적으로 처리한 경우 사용한다.
201 Created
- 클라이언트의 요청을 서버가 정상적으로 처리했고 새로운 리소스가 생겼다.
- POST, PUT 요청에 대한 응답으로 사용된다.
- 헤더의 Content-Location을 통해 리소스가 생성된 위치를 알려주면 더욱 좋다!
- 🤨 PUT은 수정인데 새로운 리소스가 생겼다고 해석해도 되는 것인가?
202 Accepted
- 클라이언트의 요청은 정상적이나, 서버가 요청을 완료하지 못했다.
- 작업 완료를 위한 일련의 작업들이 오래 걸리기 때문에 나중에 알려주겠다는 의미(비동기 작업)
- 비동기 작업의 완료 여부를 알 수 있는 법
- Callback: 작업이 완료되면 클라이언트에게 알려준다.
- Polling: 클라이언트가 주기적으로 작업의 상태를 조회한다.
204 No Content
301
- 영구 이동, Moved Permanently
- 해당 URL이 영구적으로 새로운 URL로 변경되었을 때 사용한다.
302
307
- Temporary Redirect
- 302와 유사하나 HTTP 메서드를 유지한다.
308
- Permanent Redirect
- 301과 유사하나 HTTP 메서드를 유지한다.
400 Bad Request
- 클라이언트의 요청이 유효하지 않아 더 이상 작업을 진행하지 않는 경우 사용한다/
- 400 상태코드와 반드시 오류 발생의 위치, 사용자 입력 값, 에러 이유를 함께 전달해주자
401 Unauthorized
- 클라이언트가 인증이 되지 않아 작업을 진행할 수 없는 경우다.
- 로그인 조차 하지 않아서 접근할 수 없는 상태
- 아이디나 비밀번호가 틀려서 로그인을 실패한 경우(🤨Bad Request로 할 수 있지 않나?)
403 Forbidden
- 클라이언트가 인증은 됐으나 권한이 없기 때문에 작업을 진행할 수 없는 경우
404 Not Found
405 Method Not Allowed
- 클라이언트의 요청이 허용되지 않는 메소드인 경우
- uri는 존재하지만 지원되지 않는 메소드인 경우
409 Conflict
- 클라이언트의 요청이 서버의 상태와 충돌이 발생한 경우
- ex) post 요청 시 이미 존재하는 자원이 있는 경우에 대한 응답으로 사용
- 회원가입이 이미 되어있는데 또 회원가입을 시도하는 경우
- 로직상 모순이 발생하여 처리가 불가능한 경우
413 Payload Too Large
- request의 payload가 서버에서 정의한 한계보다 큰 경우
- ex) 전달된 파일의 크기가 정의한 값보다 큰 경우
429 Too Many Request
- 클라이언트가 일정 시간 동안 너무 많은 요청을 보낸 경우
- 일정 시간 뒤 요청할 것을 의미
- Retry-After 헤더를 이용하여
Retry-After: 3600
5XX
- 서버 오류
- API를 사용하는 클라이언트에게 5XX 상태 코드는 나타내지 말아야 한다.
500
내부 서버 오류
502 Bad Gateway
- 서버가 게이트웨이로부터 잘못된 응답을 수신했음을 의미합니다. 인터넷상의 서버가 다른 서버로부터 유효하지 않은 응답을 받은 경우 발생합니다.
- 프록시 서버와 백엔드 어플리케이션 간의 연결된 추상적인 통로를 “게이트웨이”라고 부르는 것이다. 백엔드 어플리케이션이 죽어버릴 경우 앞 단의 문지기인 프록시 서버는 백엔드 어플리케이션에게 아무런 응답을 받지 못하게 되고, 클라이언트에게 502 Bad Gateway라는 응답을 보내주는 것이다.
503 Service Unavailable
- 서버가 오버로드되었거나 유지관리를 위해 일시적으로 다운되었기 때문에 현재 서버를 사용할 수 없다.
내용 출처
REST API에서의 HTTP 상태 코드, 상태 메시지 (응답 코드, 응답 메시지)