HTTP 상태 코드
- REST 서버에 있어서 리소스에 대한 적절한 응답을 돌려주는 것은 중요하다.
2xx Code
- 200 : OK
- 일반적인 요청 성공을 나타내는 데 사용한다.
- 단, 주의해야 할 점이 있다면 200코드를 에러 응답에 사용하면 안 된다.
- 예를 들어 코드는 200인데 에러 메시지를 포함시킨다면 맞지 않은 응답코드를 보낸 것이다.
- 이런 적절치 못한 상황을 처리하는 경우에는 4XX대 코드를 사용해야한다.
- 201 : Created (Post)
- 리소스 생성 성공에 대한 응답 코드이다.
- CRUD 요청에서 Create 요청에 대한 응답으로 내보낼 수 있는 응답코드이다.
- 202 : Accepted
- 대체로 처리 시간이 오래 걸리는 비동기 요청에 대한 응답으로 사용된다.
- 즉, 이 요청에 대한 응답이 결과를 포함하지 않을 수 있다는 것이다.
- 하지만 최소한 응답 헤더나 응답 데이터에 해당 처리를 모니터링할 수 있는 리소스 페이지를 안내하거나
혹은 해당 리소스가 처리되기까지의 예상 경과 시간 따위를 안내하는 것이 더 좋은 설계라 볼 수 있다.
3xx Code
- 301 : Permanently Redirect
- 리소스가 이동되었을 경우의 응답코드이다.
- 이동된 URI를 응답 Location 헤더에 명시해야 한다.
- 이 응답을 받은 클라이언트는 새 URI로 이동하든지
URI를 갱신하고 캐싱을 한다든지 하는 행위를 해야한다.
-
302 : Temporary Redirect
- 301과 302의 차이는 301리디렉션 & 302리디렉션의 차이(사용법)를 참고했다.
4xx Code
- 400 : Bad Request
- 클라이언트의 요청이 부적절 할 경우 사용한다.
- 일반적인 요청 실패에 사용된다.
- 대체로 서버가 이해할 수 없는 형식의 요청이 왔을 때 응답하기 위해 사용된다.
- 하지만 무턱대고 400에러를 응답으로 주지 말고
다른 4xx대의 코드가 더 의미를 잘 설명할 수 있는지에 대하여 고민해야 한다.
- 401 : Unauthorized
- 클라이언트가 인증되지 않은 상태에서 보호된 리소스를 요청했을 때 사용한다.
- 말 그대로 리소스 접근 권한을 가지고 있지 않다는 것을 의미하기 위한 응답코드이다.
- 리소스를 획득하기 위하여 요청자는 인증에 필요한 헤더(가령 Authorization 헤더 같은)나 데이터를 첨부해야 한다. - 필요한 헤더나 데이터는 서버 쪽에서 요구하는 스펙을 따른 자원이여야한다.
- 403 : Forbidden
- 유저 인증상태와 관계없이 응답하고 싶지 않은 리소스를 클라이언트가 요청했을 떄 사용한다.
- 감춰진 리소스에 접근하려 할 때의 응답코드이다.
- 401과 달리 인증의 여부와 관계없이 리소스를 보여주지 않는다.
- 404 : Not Found
- 해당 URI와 매치되는 리소스가 없다는 의미를 뜻한다.
- 어지간한 사람들은 다 한 번씩(?) 마주치게 되는 응답이다.
- 403 대신에 404를 전송하는 경우도 많다.
- 왜냐하면 403을 전송하면 금지되었긴 하지만
어쨌든 어떠한 페이지는 있는 것이기 때문에 해커들의 공격을 받을 수 있다. - 이를 방지하고자 아예 404를 보내 없는 페이지처럼 위장하기도 한다.
- 405 : Method Not Allowed
- 클라이언트가 요청한 리소스에서는 사용 불가능한 Method를 이용했을 경우 사용한다.
- 예를 들어 POST 요청을 받는 컨트롤러 리소스에 GET 요청을 보낸다든가
지원하지 않는 요청을 하였을 때 사용한다. - 가능하다면 응답 메시지에 Allow 헤더를 추가하고 그 곳에 지원하는 메서드를 명시하여
클라이언트 측에서 정확한 요청을 보낼 수 있도록 유도한다.
- 406 : Not Acceptable
- 해당 미디어 타입(MIME 타입)에 대해서 지원하지 않을 때 사용한다.
- 요청 Accept 헤더에 명시된 타입(가령 Application/xml)에 대해서 지원이 불가능할 경우에 돌려주면 되는 코드이다.
- 409 : Conflict
- 요청의 형식에는 문제가 없지만 리소스 상태에 의하여 해당 요청 자체를 수행할 수 없는 경우의 응답코드이다.
- 즉, 이미 삭제된 리소스를 또 삭제한다든가
비어있는 리스트에서 무언가를 요청한다든가 하는 모순된 상황을 생각하면 된다. - 응답으로는 그 방법을 어떻게 해결할 수 있을지에(혹은 문제가 무엇인지) 대한 힌트가 포함되면 좋을 것이다.
- 429 :
- 서버가 동시에 여러 접속자로부터 request를 받는 중, 모든 응답을 처리할 수 없다.
- 사용자가 일정 시간 동안 너무 많은 요청을 보냈다.
5xx Code
- 500 : Internal Server Error
- 일반적인 서버 에러에 대한 응답코드이다.
- 4xx대의 에러코드가 클라이언트 측 에러를 나타내기 위해 사용된다면
5xx대의 에러코드는 서버 측 에러를 나타내기 위해 사용된다.
- 503 : Service Unavailable
- 가장 두려운(?) 응답코드 중 하나이다.
- 현재 서버에 과부하가 걸려있거나 유지보수를 위하여 잠시 접근이 거부 될 때 필요한 응답코드이다.