HTTP 상태 코드는 서버가 클라이언트의 요청메시지에 대한 응답메시지를 보낼 때 스타트 라인에 포함하여 같이 보내고, 요청 처리 상태를 보여준다.
상태 코드의 분류를 알고 있으면 클라이언트가 인식할 수 없는 상태코드를 서버가 반환하여도, 클라이언트는 상위 상태코드로 해석해서 처리 할 수 있다.
HTTP 100번대 상태코드는 거의 보기가 힘들다.
200 OK : 주로 GET 메서드를 이용하여 조회하는데 사용
201 Created : 주로 POST메서드를 이용하여 새로운 리소스가 생성된다.
--> 컬렉션 : 서버가 리소스의 위치를 알고, 클라이언트는 리소스의 위치를 모른다.
202 Accepted : 요청이 접수되었으나 처리가 완료되지 않았다.
--> 요청 접수 후 1시간뒤에 배치 프로세스가 요청을 처리한다.
리다이렉션은 상태코드에 따라 여러가지 방법으로 리다이렉션 한다.
특정 리소스의 URI가 영구적으로 이동
주문 완료 후 주문 내역 화면으로 이동
PRG : Post - Redirect - GET
-->중복 주문, 중복 등록을 방지하기위한 일시적 리다이렉션
결과 대신 캐시를 사용한다. 캐시기간이 만료되었을 경우 캐시에 대한 정보를 제공한다.
★ 웹 브라우저는 3xx응답의 결과에 Location 헤더가 있으면, Location 위치로 자동 이동한다.
Uri가 변경 되었을 경우 새로운 URI가 리다이렉트 하기 위한 상태코드
헤더에 Location이 담겨있어 웹 브라우저는 새로운 URI가 자동 리다이렉트 된다.
301: 리다이렉트 시 요청 메서드가 GET으로 변하고, 본문이 제거 될 수 있다.
308: 리다이렉트시 요청 메서드와 본문 유지
(POST로 보낼경우 리다이렉트도 POST로유지한다.)
리소스의 URI가 일시적으로 변경.
302 : 리다이렉트시 요청 메서드가 GET으로 변하고, 본문이 제거 될 수 있다.
307 : 리다이렉트시 요청 메서드와 본문 유지(요청 메서드가 절대 안바뀐다.)
308 : 리다이렉트시 요청 메서드가 GET으로 변경된다.
304 : Not modified. 캐시를 목적으로 사용한다.
클라이언트에게 리소스가 수정되지 않았음을 알려준다. 따라서 클라이언트는 로컬PC에 저장된 캐시를 재사용한다.
클라이언트의 요청에 잘못된 문법등으로 서버가 요청을 수행할 수가 없다.
오류의 원인이 클라이언트에 있다.
400 : 요청 구문, 메시지 오류. 요청 파라미터가 잘못되었거나, API스펙이 맞지 않을 때
401 : 클라이언트가 해당 리소스에 대한 인증이 필요하다.
404 : Not Found. 요청 리소스를 찾을 수가 없다. 요청 리소스가 서버에 없음.
서버 문제로 오류 발생. 서버에 문제가 있기 때문에 재시도하면 성공할 수도 있다.
500 : 서부 내부 문제로 오류가 발생하여 요청처리가 불가능하다.
503 : Service Unavailable. 서버가 일시적인 과부하 또는 예정된 작업으로 잠시 요청을 처리할 수 없다.
Post/ Redirect/ Get
POST로 주문 후 웹 브라우저를 새로고침 하면 어떻게 될까?
새로고침은 요청한 메시지를 다시 요청하고, 중복하여 요청된다.
POST 요청 후 새로고침을 계속하면 요청이 계속 처리되고, 주문같은 경우는 새로고침한 횟수만큼 주문이 등록된다.
POST로 주문 후 새로 고침으로 인한 중복 주문을 방지한다.
POST로 주문 후 주문 결과 화면을 GET 메서드로 리다이렉트하여 새로고침을해도 화면결과를 출력하기 위한 GET을 계속해서 요청하기 때문에 중복주문이 방지 된다.