Restful API 설계하면서 가끔 헷갈려서 제대로 정리해보고자 작성한다. 주로 사용되는 100, 200, 201, 400, 403, 404, 500 정도만 알고있었는데 찾아보니 굉장히 종류가 많다😶😶
아마 주로 이용되는것만 명확하게 알아도 되지 않을까 ..?
그래서 자주 사용하는 것 + 개발하면서 써본 것들로만 정리해보자.
상태코드는 3자리 숫자로 만들어져 있으며, 첫번째 자리는 1에서 5까지로 이루어진다. 이중 4
와 5
로 시작하는 상태코드는 에러가 발생했다는 것이므로 관리자의 확인이 필요한 사항이다.
1xx (정보): 요청을 받았으며 프로세스를 계속 진행
2xx (성공): 요청을 성공적으로 받았음
3xx (리다이렉션): 요청 완료를 위해 추가 작업 조치 필요
4xx (클라이언트 오류): 요청의 문법이 잘못되었거나 요청 처리 불가능
5xx (서버 오류): 서버가 유효한 요청에 대한 충족 실패
상태코드가 '1XX'인 경우: 서버가 요청 받았으며, 클라이언트는 계속 작업을 진행하라는 뜻
해당 코드는 HTTP 1.0에서 지원 안됨.
진행중임을 의미
현재까지의 진행상태에 문제 없으며, 클라이언트가 계속 요청을 하거나 이미 요청 완료한 경우에는 무시해도 상관없음.
요청이 성공적으로 됨
요청이 성공적이며, 그 결과로 새로운 리소스가 생성됨
응답은 일반적으로 POST 요청 또는 일부 PUT 요청으로 따라옴.
요청에 대해서 보낼 수 있는 콘텐츠는 없지만, 헤더는 의미있을 수 있음
사용자-에이전트는 리소스가 캐시된 헤더를 새로운 것으로 업데이트 가능.
잘못된 문법으로 인해 서버가 요청을 이해할 수 없음을 의미
HTTP 표준에서는 "미승인(unauthorized)"를 명확히 하고 있지만, 의미상 이 응답은 "비인증(unauthenticated)"을 의미
클라이언트가 요청한 응답을 받기 위해선 반드시 스스로 인증해야함.
클라이언트가 콘텐츠에 접근할 권리를 갖고있지 않음
예를 들어 해당 클라이언트가 미승인이라서 서버가 거절을 위한 적절한 응답을 전송함. 401
과 다른 점은 서버가 클라이언트가 누구인지 알 수 있다는 점.
서버가 요청받은 리소스를 찾을 수 없음
브라우저에서는 알려지지 않은 URL을 의미. 서버들은 인증받지 않은 클라이언트로부터 리소스를 숨기기 위해 해당 응답을 403
대신 보낼 수도 있음.
요청한 메소드는 서버에서 알고 있지만, 제거되었고 사용할 수 없음
예를 들어, 어떤 API에서 리소스를 삭제하는 것을 금지할 수 있음.
요청을 한지 시간이 오래된 연결에 일부 서버가 전송
어떨때는 이전에 클라이언트로부터 어떠한 요청이 없었다 하더라도 보내지기도 함. 이것은 서버가 사용되지 않는 연결을 끊고 싶어한다는 것을 의미함.
요청이 현재 서버의 상태와 충돌
Payload의 크기가 서버에서 정의한 한계보다 큰 경우
예를 들어, 파일 등을 전달받을 때 파일의 크기가 정의한 값보다 큰 경우 발생할 수 있음.
서버가 처리 방법을 모르는 상황