클라이언트의 요청을 서버가 성공적으로 처리한 상태
클라이언트가 서버에 요청을 했을 때, 서버가 요청을 완료하기 위해 클라이언트에서 추가적인 동작이 필요함을 알려줌
리다이렉션 : 웹 브라우저는 3xx 응답 결과에 Location 헤더가 있으면 Location 위치로 자동 이동한다.
- 리다이렉션 종류
301과 308의 차이는 301은 POST로 요청을 했을 때, 클라이언트가 응답을 받고 자동 리다이렉트를 할 때, GET으로 변경하여 요청을 보내고, 308에서는 POST로 요청을 보냈을 때, 클라이언트가 응답을 받고 리다이렉트를 할 때, 그래도 POST로 요청을 보낸다는 차이가 있다.
리소스의 URI를 일시적으로 변경하는 상태이다. 리다이렉트 시 요청 매서드가 GET으로 변경된다.
예를 들어, 어떤 물건을 주문하고 POST 요청을 보냈는데, 웹 브라우저를 새로고침하면? 새로고침으로 인해 중복 주문이 일어날 수 있다.
URL이 Post에서 GET으로 바뀌어 리다이렉트 된다. 따라서, 새로고침을 해도 GET으로 화면만 조회한다.
?
클라이언트의 요청에 잘못된 문법 등으로 서버가 요청을 수행할 수 없는 상태로, 클라이언트의 요청 자체가 잘못됐기 때문에 재시도를 해도 실패한다.
- 클라이언트가 잘못된 요청을 해서 서버가 요청을 처리할 수 없는 상태
- 요청 구문, 메세지 오류
ex) 요청 파라미터가 잘못됨, API 스펙이 안맞음(숫자를 보내야 하는데 문자를 보냄...)
- 클라이언트가 해당 리소스에 접근할 수 있는지에 대한 인증이 필요함.
- 인증(Authentication)이 되지 않은 상태
++Authentication : 본인이 누구인지에 대한 확인.
++Authorization : 권한부여. Admin처럼 특정 리소스에 대한 접근 권한
- 서버가 요청을 이해했지만 승인을 거부함
- 인증 자격은 있지만 접근 권한이 불충분한 경우
ex) Admin 등급이 아닌 사용자가 해당 리소스에 접근하는 경우
- 클라이언트가 요청한 리소스를 찾을 수 없음
- 또는, 클라이언트가 권한이 부족한 리소스에 접근할 때 해당 리소스를 숨기고 싶을 때 사용
- 서버 문제로 오류가 발생
- 서버에 문제가 있기 때문에 재시도로 성공할 수도 있음 (복구되면)
- 5xx 오류는 정말 서버에 심각한 문제가 있을 때 발생시켜야 한다. 예를 들어, 19세 이상만 구매 가능한 상품을 15세가 구매하려 한다면, 이때 500대 오류를 내야 할까? 아니다. 이는 비지니스 로직상의 예외이기 때문에 비지니스 로직에서 처리해줘야 한다.
- 서버 내부에 애매한 오류가 발생한 상태
- 서비스 이용 불가
- 서버가 일시적으로 과부화 되거나, 예정된 작업으로 잠시 요청을 처리할 수 없을 때
- Retry-After 헤더 필드로 얼마 뒤에 복구되는지 보낼 수 있음.
** 인프런 HTTP 강의 (김영한) 참고