본문 바로가기
IT 공부/새로운 시작

HTTP(11) - HTTP 상태 코드(1)

by 수박한암살자 2021. 11. 1.

이번엔 우리가 자주 보게 되는 것 중 하나인 HTTP 상태 코드에 대해서 알아보자.

 

HTTP 상태 코드는 클라이언트가 보낸 요청에 대해서 기본적인 처리 상태를 응답에서 알려주는 기능이다.

대표적으로는 아래와 같다.

 

  • 1XX (Informational) : 요청이 수신되어 처리 중
  • 2XX (Successful) : 요청 처리 성공
  • 3XX (Redirection) : 요청을 완료하려면 추가 행동 필요
  • 4XX (Client Error) : 클라이언트 오류
  • 5XX (Server Error) : 서버 오류

XX 에는 세부적인 상태 코드들에 따른 숫자가 들어간다.

기본적으로 1~5로 시작하는 상태 코드를 기반으로 어떤 상태인지를 파악 가능하다는 것이 핵심이다.

00~99까지 들어갈 수 있는 상황이므로 모르는 코드가 추가된다하더라도 대략적으로 상태를 파악할 수 있기 때문이다.

 

예를 들어 203 상태 코드가 응답으로 왔다고 가정하자.

주로 200 응답으로 성공했다는 것만 알고 있던 사람들도 2XX가 다 요청 처리 성공이라는 걸 알게 되고 나면

203 은 몰라도 일단 요청이 성공했음을 알 수 있다. 

 

그렇다면 세부적인 응답은 무엇 무엇이 있을까?

 

일단 1XX는 거의 사용되지 않는다. 나도 본 적이 없다. 넘어가도록 하자.

 

2XX - 성공

  • 200 OK : 요청 성공
  • 201 Created : 요청 성공해서 새로운 리소스가 생성됨 (생성된 리소스는 응답의 Location 헤더 필드로 식별)
  • 202 Accepted : 요청이 접수되었으나 처리가 완료되지 않았음
    • 배치 처리 같은 곳에서 주로 사용한다
  • 204 No Content : 서버가 요청을 성공적으로 수행했으나, 응답 payload 본문에 보낼 데이터가 없음
    • ex : 문서 편집기에서 중간 저장을 할 경우, 응답 데이터를 줄 필요는 없다. 본문 작성 상태가 유지되어야하기 때문.

3XX - 리다이렉션

리다이렉션은 3XX 응답의 결과에 Location 헤더가 있으면, Location 위치로 자동 이동되는 것을 뜻한다.

자동 리다이렉트의 흐름은 아래와 같다.

김영한님 - HTTP 강의 자료에서 발췌

리다이렉션은 종류가 여러 가지가 있다.

 

  • 영구 리다이렉션 - 특정 리소스의 URI가 영구적으로 이동
    • 예) /members -> /users
    • 301 Moved Permanently : 리다이렉트 시 요청 메서드가 GET으로 변하고, 본문이 제거될 수 있음
    • 308 Permanent Redirect : 301과 기능은 같다. 하지만 리다이렉트 시 요청 메서드와 본문을 유지한다.
  • 일시 리다이렉션 - 특정 상황에서 일시적인 변경
    • 예) 주문 완료 후 주문 내역 화면으로 이동
    • 302 Found : 리다이렉트 시 요청 메서드가 GET으로 변할 수 있고, 본문이 제거될 수 있음
    • 307 Temporary Redirect : 302와 기능은 같다. 하지만 리다이렉트 시 요청 메서드와 본문을 유지한다(요청 메서드를 변경하면 안된다!)
    • 303 See Other : 302와 기능은 같다. 리다이렉트 시 GET으로 변한다(302와 달리 GET으로 무조건 변경된다).
    • 그래서 뭘 사용해야하는가? -> 원래는 302가 메서드를 유지해야하지만 사람들이 지키지 않음. 307이나 303을 쓰는게 맞지만 GET으로 변경되도 된다면 그냥 302를 써도 된다.
  • 특수 리다이렉션 - 결과 대신 캐시를 이용
    • 304 Not Modified : 캐시를 목적으로 사용한다. 클라이언트에게 리소스가 수정되지 않았음을 알려준다. 따라서 클라이언트는 로컬 PC에 저장된 캐시를 재사용한다. 또한, 어차피 캐시를 쓰니 응답에 메시지 바디는 포함하면 안된다.
      • 조건부 GET, HEAD 요청 시 사용한다.

그 외 300 Multiple Choices도 있으나 쓰지 않는다.

 

4XX와 5XX는 다음 포스트에서 작성하겠다.

반응형

댓글