1xx
: 요청이 수신되어 처리중 - 거의 사용 X
2xx
: 요청 정상 처리
3xx
: 요청을 완료하려면 추가 행동 필요
4xx
: 클라이언트 쪽 오류, 잘못된 문법 등으로 서버가 요청을 수행할 수 없음
5xx
: 서버 쪽 오류, 서버가 정상 요청을 처리하지 못함
200
: OK - 요청 성공
201
: Created - 보통 Post로 요청했을 때 created로 응답이 온다.
202
: Accepted - 요청이 접수되었으나 처리가 완료되지 않았음
204
: No Content - 요청은 성공했으나, 응답 페이로드 본문에 보낼 데이터가 없음(웹 문서 편집기의 save 버튼을 누른다고 어떤 내용을 바라진 않는다.)
300
: Multiple Choices - 안 씀
301
: Moved Permanently - 기존 경로가 새로운 경로로 변경되었음. 리다이렉트시 요청 메소드가 GET으로 변하고, 본문이 제거될 수 있음 (영구 리다이렉션)
302
: Found - 리다이렉트시 요청 메소드가 대부분 GET으로 변하고, 본문이 제거될 수 있음 (⭐️ 일시적 리다이렉션)
303
: See Other - 302과 기능은 같으나, 리다이렉트시 요청 메소드가 GET으로 무조건 바뀐다.(⭐️ 일시적 리다이렉션)
304
: Not Modified - 캐시를 목적으로 사용. 클라이언트가 로컬에 저장된 캐시를 재사용하도록 한다.
307
: Temporary Redirect - 302과 기능은 같으나, 리다이렉트시 요청 메서드와 본문 유지. 요청 메소드를 변경하면 안 된다. (⭐️ 일시적 리다이렉션)
308
: Permanent Redirect - 301과 기능은 같으나, 리다이렉트시 요청 메서드와 본문 유지 (영구 리다이렉션)
주문 창에서 주문 요청 버튼을 누르고(POST 요청) 주문 완료 창이 뜬다. 그런데 주문 완료 창에서 새로고침을 누르면 이전 POST 요청이 한 번 더 전송돼서 중복 주문이 되는 일이 발생할 수 있다.
이러한 문제를 방지하기 위해 PRG 개념이 도입된다. POST 요청으로 주문을 하고 나면 서버에서 주문 데이터를 DB에 저장하고 응답으로 302 Found와 주문 번호를 보낸다.(303도 상관 없음) 그러면 클라이언트는 주문 번호를 GET으로 다시 요청하고 서버에서는 주문 번호를 조회 후 응답으로 200 OK와 주문 완료 화면을 보낸다. 마지막으로 클라이언트 화면에 주문 완료 페이지가 다시 뜨면 끝.
400
: Bad Request - 요청 구문, 메시지 오류
401
: Unauthorized - 클라이언트가 해당 리소스에 대한 인증이 필요함
403
: Forbidden - 서버가 요청을 이해했지만 승인을 거부함(접근 권한 불충분)
404
: Not Found - 요청 리소스를 찾을 수 없음 or 서버에 없음
500
: Internal Server Error - 서버 내부 문제로 발생
503
: Service Unavailable - 서비스 이용 불가, 서버가 일시적으로 과부하 또는 예정된 작업으로 인해 잠시 요청을 처리할 수 없는 상태