HTTP 상태코드란 클라이언트가 보낸 요청의 처리 상태를 HTTP 응답을 통해 알려주기 위한 코드값이다.
요청이 수신되어 처리중 (거의 사용 x)
요청이 정상 처리 되었음을 뜻한다.
2XX대의 상태코드는 아래와 같이 여러가지가 있지만 , 주로 200/201을 사용한다
200 : OK
- 요청이 성공했음
201 : CREATED
- 요청이 성공해서 새로운 리소스가 생성되었음
- 응답 메시지의 Location을 통해 리소스를 식별한다.
202 : ACCEPTED
- 요청이 접수되었으나 처리가 완료되지 않음 (ex) 배치 돌리는 상황)
204 No Content
- 서버가 요청을 성공적으로 수행했지만, 응답 페이로드 본문에 보낼 데이터가 없음 (ex) 웹 문서 편집기에서 save 버튼 누를때)
요청을 완료하려면 추가 행동이 필요하다는 뜻으로, Location 헤더가 있으면 해당 헤더로 자동으로 이동시킨다.
주로 자원이 이동된 경우 웹 페이지를 이동시키기 위해 사용한다.
영구 리다이렉션, 일시 리다이렉션, 특수 리다이렉션 종류가 있고, 그에 따라 상태코드가 나뉜다.
특정 리소스의 URI가 영구적으로 이동한 경우로, 새로운 URI로 처음부터 다시 요청해야 한다. (예) /members → /users)
다음과 같은 상태 코드들이 있다.
301 : Moved Permanently
- 리다이렉트 시 메서드가 GET으로 변하고, 본문이 제거될 수 있다
308 : Permanent Redirect
- 301과 거의 동일한 기능이지만, 리다이렉트 시 요청 메서드와 본문을 유지한다는 차이가 있다.
- 해당 상태코드는 잘 안쓴다.
리소스의 URI가 일시적인 변경 되어 리다이렉션 하는 경우 사용한다.
영구 리다이렉션 보다 자주 사용하고, PRG 패턴에서 사용된다.
(PRG 패턴 : POST 요청 후 GET 요청으로 변경해야 하는 경우에 사용하는 패턴, 예시로 주문완료 후 주문 내역 화면으로 이동하는 경우가 있다)
302 : Found
- 리다이렉트 시 메서드가 GET으로 변하고, 본문이 제거될 수 있다 (거의 다 변함)
307 : Temporary Redirect
- 302와 기능이 같지만, 리다이렉트 시 요청 메서드와 본문을 유지한다는 차이가 있다
303 : See Other
- 302와 기능이 같지만, 리다이렉트 시 요청 메서드가 GET으로 변경된다.
서버가 요청을 처리하지 않고, 캐시를 사용하는 경우 쓰는 상태 코드
304 : Not Modified
- 클라이언트에게 리소스가 수정되지 않았음을 알려준다.
- 해당 상태 코드를 받은 클라이언트는 로컬 PC에 저장된 캐시를 재사용해서 리다이렉트 한다
- Body를 포함하면 안된다
클라이언트의 요청에 잘못된 문법 등으로 서버가 요청을 수행할 수 없음을 뜻한다.
이 경우에는 서버에 같은 요청을 재시도 해도 동일한 오류가 발생한다.
400 : Bad Request
- 클라이언트가 요청 구문, 메시지 등의 오류로 잘못된 요청을 해서 서버가 처리할 수 없음을 뜻한다.
- 클라이언트는 요청 내용을 다시 검토하고 보내야함 (ex) 요청 파라미터가 잘못되거나 , API 스펙이 맞지 않을 때)
401 : Unauthorized
- 클라이언트가 해당 리소스에 대한 인증(Authentication)이 필요함을 뜻한다.
- 주로 로그인 안되어있는데 리소스에 접근하려 할 때 사용한다
- 응답 메시지 헤더에 www-authenticate 헤더와 함께 인증 방법 설명한다.
403 : Foribidden
- 서버가 요청을 이해했지만 승인을 거부함
- 주로 인증 자격 증명은 있지만, 접근 권한이 불충분한 경우
404 : Not Found
- 요청 리소스를 찾을 수 없음을 뜻한다.
- 주로 요청 리소스가 서버에 없거나, 클라이언트가 권한이 부족한 리소스에 접근할 때 해당 리소스를 숨기고 싶을 때 사용한다.
서버 내부에 오류가 발생해서 정상 처리를 하지 못했음을 의미하는 상태코드이다.
서버에 문제가 있기 때문에 재시도 시 성공할 수도 있다 (복구가 되거나 등등)
실무에서는 5XX 상태 코드가 발생했을 때 대부분 시스템 장애로 판단한다.
그렇기 때문에, 서버 단에서는 비즈니스 로직으로 인한 오류가 5XX 상태 코드를 리턴하지 않도록 잘 처리해야 한다.
500 : Internal Server Error
- 서버 내부 문제로 오류가 발생했음을 뜻함. (대부분 서버 오류나면 이 500 에러인 경우가 많음)
503 : Service Unavailable
- 서버가 일시적인 과부하 또는 예정된 작업으로 잠시 요청을 처리할 수 없음을 뜻함
- HTTP 헤더에 Retry-After를 추가하여 얼마뒤에 복구되는지 보낼 수 있다.