HTTP Status Code란 클라이언트가 보낸 요청의 처리 상태를 응답 메시지의 Status Line로 알려주는 기능이다.
처리 상태를 숫자로 나타낸다.
100번대는 거의 사용되지 않으므로 생략한다.
200번대 Status Code는 요청이 정상적으로 처리되었음을 뜻한다.
200 OK
: 요청 성공
201 Created
: 요청이 성공해서 새로운 리소스가 생성됨
ex) POST로 새로운 단어 등록 요청
새로운 리소스가 정상적으로 생성되면 201 Created 반환
202 Accepted
: 요청이 접수되었으나 처리 중임
204 No Content
: 요청이 정상적으로 처리되었으나 Body에 넣을 데이터가 없음
300번대 Status Code는 요청을 완료하기 위해 클라이언트 측에서 추가 조치가 필요함을 뜻한다.
여기서 Redirection이란 300번대 Status Code가 붙여진 응답 메시지에 Location 헤더가 존재하면, 해당 Location 위치로 자동으로 이동하는 것을 뜻한다.
예를 들어 보자.
현재 벨로그 주소는 https://velog.io/@jaewon-ju/posts 이다.
근데 벨로그 주소를 https://velog.io/@jaewon-ju/my_posts 로 이전했다.
나의 친구 A는 내 벨로그의 옛날 주소만 알고 있다.
나는 친구 A가 옛날 주소로 접근해도 현재 주소로 이동시키려 한다.
옛날 주소로 접근하면 다음과 같은 응답 메시지를 보낸다.HTTP/1.1 301 Moved Permanently Location: https://velog.io/@jaewon-ju/my_posts
Status Code 301과 Location 헤더가 존재하기 때문에 해당 메시지를 받은 클라이언트는 자동적으로 새로운 URL을 요청한다.
이것이 바로 Redirection이다.
Redirection은 3가지 종류가 존재한다.
영구 Redirection: 특정 리소스의 URI가 영구적으로 이동
ex) 위의 예시
일시 Redirection: 일시적으로 변경
ex) 주문 완료 후 주문 내역 화면으로 이동
특수 Redirection: 결과 대신 캐시를 사용
특정 리소스의 URI가 영구적으로 이동
➜ 리다이렉트 요청 메소드가 GET으로 변하고, 본문이 제거될 수 있음
요청 메시지1 - POST Method, 본문 존재
POST /posts HTTP/1.1 Host: velog.io/@jaewon-ju
title=newPost&Content=hello
응답으로 301 Moved Permanently 를 받음
새로운 URL로 리다이렉트
요청 메시지2 - GET Method로 변경, 본문 삭제
GET /my_posts HTTP/1.1 Host: velog.io/@jaewon-ju
301과 기능은 같지만, 요청 메소드와 본문 내용이 유지된다.
리소스의 URI가 일시적으로 변경
왜 필요할까?
쿠팡에서 음료수를 1개 주문한다.
장바구니 페이지에서 HTML Form(POST)으로상품명: 사이다, 개수: 1
을 입력하고 주문하기 버튼을 누른다.
만약 200 OK 를 응답하면 어떻게 될까?
주문을 한 뒤에 새로고침을 하면, 똑같은 주문 [상품명: 사이다, 개수: 1
]이 다시 전달될 것이다.
따라서 이러한 경우 주문 결과 화면을 GET Method로 리다이렉트해야 한다.
이후의 포스트 참고 HTTP - Header(캐시)
400번대 Status Code는 클라이언트의 잘못으로 오류가 발생했음을 뜻한다.
500번대 Status Code는 서버의 문제로 오류가 발생했음을 뜻한다.