성공
| 코드 | 의미 |
|---|---|
200 OK | 요청 성공 |
201 Created | 요청 성공해서 새로운 리소스가 생성됨 |
202 Accepted | 요청이 접수됐으나 처리가 아직 완료되지 않음 |
204 No Content | 요청 성공했지만 응답 메세지로 보낼 데이터가 없음 저장 버튼을 눌려도 화면이 변하지 않아야 할 때 |
200 만 사용해도 된다
리다이렉션
요청을 완료하기 위해 클라이언트의 추가 조치가 필요한 경우

특정 리소스의 URI가 완전히 이동했을 때
안쓰는 경로로 요청이 왔을 때 새로운 경로(Location)로 안내하면 클라이언트는 이 경로로 자동 리다이렉트 함
| 상태 코드 | 의미 |
|---|---|
| 301 | POST 요청이 리다이렉트 시 GET으로 변하고 요청 메세지가 제거될 수 있음 메세지 바디는 다시 보내야 함 |
| 308 | POST 요청이 리다이렉트 시 POST 로 유지되고 요청 메세지도 유지됨 |
리소스의 URI가 일시적으로 변경될 때
| 상태 코드 | 의미 |
|---|---|
| 302 Found | POST 요청이 리다이렉트 시 GET으로 변하고 요청 메세지가 제거될 수 있음 |
| 303 See Other | 리다이렉트 시 무조건 GET으로 변경됨 |
| 307 Temporary Redirect | POST 요청이 리다이렉트 시 POST 로 유지되고 요청 메세지도 유지됨 |
PRG (Post Redirect Get) 패턴
중복 POST 요청을 방지하기 위해 결과 조회 요청으로 Redirect
새로고침해도 재요청이 발생하지 않음

서버에서 중복 요청 시 오류를 발생시켜야 하지만, PRG 패턴을 사용하면 중복 요청 자체를 줄일 수 있다
캐시 기간이 아직 유효해서 응답 결과를 보내줄 필요가 없을 때
| 상태 코드 | 의미 |
|---|---|
| 304 Not Modified | 캐시가 변경되지 않았다는 의미 |
오류의 원인이 클라이언트에 있을 때 (요청을 잘못 했을 때)
재시도를 해도 실패한다
| 상태 코드 | 의미 |
|---|---|
| 400 Bad Request | 요청 구문, requestBody 등의 오류 |
| 401 Unauthorized | 인증(로그인)이 되지 않음 응답에 WWW-Authenticate 헤더와 함께 인증 방법을 설명해서 보내줘야 한다. |
| 403 Forbidden | 로그인은 했지만 접근 권한이 없는 경우 ex) 관리자 기능에 일반 유저가 접근했을 때 |
| 404 Not Found | 요청 리소스가 서버에 없을 때 403 오류를 숨기고 싶을 때 |
오류의 원인이 서버에 있을 때
재시도를 하면 성공할 수도 있다.
| 상태 코드 | 의미 |
|---|---|
| 500 Internal Server Error | 서버에서 발생한 오류 |
| 503 Service Unavailable | 서버가 일시적 과부하 또는 작업 중 Retry-After 헤더 필드로 복구 예정 시간을 알려줄 수 있음 |
400대 오류(클라이언트 오류 또는 비즈니스 로직에서 예외 케이스)를 500으로 보내면 안된다.