이번엔 우리가 자주 보게 되는 것 중 하나인 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 위치로 자동 이동되는 것을 뜻한다.
자동 리다이렉트의 흐름은 아래와 같다.
리다이렉션은 종류가 여러 가지가 있다.
- 영구 리다이렉션 - 특정 리소스의 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 요청 시 사용한다.
- 304 Not Modified : 캐시를 목적으로 사용한다. 클라이언트에게 리소스가 수정되지 않았음을 알려준다. 따라서 클라이언트는 로컬 PC에 저장된 캐시를 재사용한다. 또한, 어차피 캐시를 쓰니 응답에 메시지 바디는 포함하면 안된다.
그 외 300 Multiple Choices도 있으나 쓰지 않는다.
4XX와 5XX는 다음 포스트에서 작성하겠다.
반응형
'IT 공부 > 새로운 시작' 카테고리의 다른 글
HTTP(13) - HTTP 헤더(1) (0) | 2021.11.10 |
---|---|
HTTP(12) - HTTP 상태 코드(2) (0) | 2021.11.06 |
HTTP(10) - HTTP API 설계 예시 (0) | 2021.10.31 |
HTTP(9) - 클라이언트에서 서버로 데이터를 전송하는 케이스 (0) | 2021.10.27 |
HTTP(8) - HTTP 메서드을 알아보자(2) (0) | 2021.10.25 |
댓글