- 요약
- 1xx (Informational): 요청이 수신되어 처리중
- 2xx (Successful): 요청 정상 처리
- 3xx (Redirection): 요청을 완료하려면 추가 행동이 필요
- 4xx (Client Error): 클라이언트 오류, 잘못된 문법등으로 서버가 요청을 수행할 수 없음
- 5xx (Server Error): 서버 오류, 서버가 정상 요청을 처리하지 못함
만약 알고 있는 상태코드의 범위를 넘어가면 상위 상태코드로 해석해서 처리를 하면 된다.
클라이언트의 요청을 성공적으로 처리
1) 200 OK - 요청 성공
2) 201 Created - 요청 성공해서 새로운 리소스가 생성됨
3) 202 Accepted - 요청이 접수되었으나 처리가 완료되지 않았음
배치 처리 같은 곳에서 사용
4) 204 No Content - 서버가 요청을 성공적으로 수행했지만, 응답 페이로드 본문에 보낼 데이터가 없음
예) 웹 문서 편집기에서 save 버튼
save 버튼의 결과로 아무 내용이 없어도 된다.
save 버튼을 눌러도 같은 화면을 유지해야 한다.
결과 내용이 없어도 204 메시지(2xx)만으로 성공을 인식할 수 있다.
요청을 완료하기 위해 유저 에이전트의 추가 조치 필요
리다이랙션 : 웹 브라우저는 3xx 응답의 결과에 Location 헤더가 있으면, Location 위치로 자동 이동
자동 리다이렉트 흐름
리다이렉션의 종류
1-1) 301
1-2) 308
리소스의 URI가 일시적으로 변경
따라서 검색 엔진 등에서 URL을 변경하면 안됨
302 Found
307 Temporary Redirect
303 See Other
2-1) PRG: Post/Redirect/Get
주문완료 후 새로고침을 하면 중복주문 처리가 될 수 있다.
PRG를 사용하면 이런 오류를 막을 수 있다.
PRG 사용 전
PRG 사용 후
POST로 주문후에 새로 고침으로 인한 중복 주문 방지
POST로 주문후에 주문 결과 화면을 GET 메서드로 리다이렉트
새로고침해도 결과 화면을 GET으로 조회
중복 주문 대신에 결과 화면만 GET으로 다시 요청
- 정리
- 302 Found -> GET으로 변할 수 있음
- 307 Temporary Redirect -> 메서드가 변하면 안됨
- 303 See Other -> 메서드가 GET으로 변경
- 307, 303을 권장하지만 현실적으로 이미 많은 애플리케이션 라이브러리들이 302를 기본값으로 사용
- 자동 리다이렉션시에 GET으로 변해도 되면 그냥 302를 사용해도 큰 문제 없음
※ 참고!