HTTP 상태 코드는 클라이언트가 서버로 요청을 보냈을 때 요청이 잘 처리되었는지, 오류가 났다면 어떤 종류의 오류가 발생한 건지에 대해 서버에서 클라이언트로 응답을 보낼 때 알려주는 기능이다.
크게 5가지 종류가 있는데, 요청이 수신되어 처리 중이라는 뜻인 1xx
코드는 잘 사용되지 않는다.
나머지 네 종류를 크게 구분하면 2xx
는 요청이 정상적으로 처리되었음을, 3xx
는 요청 완료를 위해 추가적인 행동이 필요함을, 4xx
는 오류가 발생했는데 클라이언트 쪽에서 발생했음을, 5xx
는 오류가 발생했는데 서버에서 데이터베이스, 혹은 통신 등의 문제가 발생했음을 나타낸다.
🤔 만약 클라이언트가 인식할 수 없는 상태 코드를 맞닥뜨린다면? 클라이언트는 상태 코드의 대분류를 통해 요청의 상황을 파악할 수 있다.
예를 들어 299와 같은 상태 코드를 만난다면, 정확히는 몰라도 2xx
이기 때문에 요청이 수신되어 처리 중이라는 뜻으로 파악할 수 있다는 말이다.
200 OK
: 클라이언트의 요청을 성공적으로 처리.
가장 일반적으로 볼 수 있는 경우이다.
201 Created
: 클라이언트의 요청을 통해 서버에서 무언가를 생성했을 때. (ex> POST)
위 예시와 같이 클라이언트로부터 POST를 통한 데이터 생성 요청을 받은 서버는 해당 데이터에 대한 리소스 URI를 생성하고, 응답 메세지와 함께 상태코드를 전송한다.
202 Accepted
: 클라이언트의 요청은 정상적으로 접수되었으나, 처리가 완료되지 않았을 때.
주로 요청 접수 후 일정 시간이 지나야 요청을 처리하는 배치 처리 같은 곳에서 사용한다.
204 No Content
: 서버가 클라이언트의 요청을 성공적으로 수행했지만, 응답 페이로드 본문에 보낼 데이터가 없을 때.
이 경우에는 결과 내용이 없지만 204 메세지만으로도 요청 성공을 인식할 수 있다. 예를 들어 웹 문서 편집기에서 저장 버튼을 눌렀을 때 저장 버튼의 결과로 아무 내용이 없어도 되지만, 저장 요청이 성공했는지는 사용자에게 알려줘야 하기 때문에 이와 같은 상태 코드를 사용한다.
이외에도 많은 상태 코드들이 있지만 주로 사용하는 것들만 정리하였다.
3XX
코드는 리다이렉션과 관련된 상태 코드로, 클라이언트의 추가 조치가 필요하다.
리다이렉션(Redirection)
- 웹 브라우저는
3xx
응답의 결과에 Location 헤더가 있으면, 자동으로 Location 위치로 이동시킨다.
예를 들어
/event
경로가/new-event
경로로 바뀌어서 리다이렉트되도록 설정해놓은 상황이 있다고 가정하자.
클라이언트는 기존 경로인/event
로 접속 요청을 보내면, 서버가 다음과 같은 응답 메세지를 보낸다.
여기서 눈 여겨봐야 할 부분은
301 Moved Permanently
이다. 클라이언트에게 해당 페이지의 경로가 영구적으로 변경되었음을 알리며, Location 헤더를 통해 변경된 경로를 전달한다.
서버의 301 응답 메세지를 받은 클라이언트는 Location 헤더에 있는 경로로 리다이렉트를 시도한다. 첫 요청과 같은 방식으로 서버에/new-event
경로에 대한 요청 메세지를 보내면, 서버는200 OK
와 함께 정상적으로 페이지를 응답한다.
리다이렉션의 종류로는 다음과 같이 3가지가 있다.
PRG: Post/Redirect/Get
가 있다.