HTTP 상태 코드

김민기·2024년 3월 25일
0

HTTP

목록 보기
4/6

상태 코드란?

클라이언트가 보낸 요청의 처리 상태를 서버가 알려주는 기능을 의미
1-- : 요청이 수신되어 처리중
2-- : 요청 정상 처리
3-- : 요청을 완료하려면 추가 행동이 필요
4-- : 클라이언트의 오류
5-- : 서버 오류

1-- (처리중)

말 그대로 처리중일때 받을 수 있는 상태코드

2-- (성공)

200 - OK
201 - Created , 생성 완료

  • 요청이 성공하여 새로운 리소스가 생성됨을 의미
  • ex) post로 등록

202 - Accepted

  • 요청이 접수됐으나 처리는 완료되지 않음
  • ex) Batch 처리

204 - No Content

  • 요청을 성공적으로 수행, 서버가 클라이언트에게 따로 보낼 메세지가 없음
  • ex) post로 저장처럼 데이터의 변동은 있지만, 환경 변경이 필요 없을 때

3-- (리다이렉션)

리다이렉션이란, 클라이언트의 요청으로 인한 서버의 응답에서 location 헤더가 있을 경우, 해당 위치로 자동 이동하는 것

리다이렉션의 종류

  1. 영구 리다이렉션
  2. 일시 리다이렉션
  3. 특수 리다이렉션

영구 리다이렉션 (301, 308)

  • 특정 리소스의 URI가 영구적으로 이동
  • ex) /members -> /users

301 - Moved Permanently

  • 리다이렉트시 요청 메서드가 GET으로 변할수도 있음

308 - Permanent Redirect

  • 리다이렉트시 요청 메서드와 본문 유지

301과 308의 차이점

308은 리다이렉션을 해도 기존의 method유지, 301은 GET으로 메소드 변환

일시적인 리다이렉션 (302,307,308)

리소스의 URI가 일시적으로 변경되는 것으로 검색 엔진 등에서 URL을 변경하면 안된다

  • 주문 완료 후 주문 내역 화면으로 이동
  • 자주 쓰이는 패턴 - Post/Redirect/Get

302 - Found

  • 리다이렉트시 요청 메서드가 Get으로 변할수도있음

307 - Temporary Redirect

  • 302와 기능은 동일하지만, 기존 메서드와 본문은 유지된다

303 - See Other

  • 302와 기능은 같지만 반드시 메소드가 GET으로 변경됨

정리하자면,

  • 302는 Get으로 변할 수 있음
  • 307은 메소드가 변하지 않음
  • 303은 메소드가 Get으로 변함

303,307을 권장하지만, 현재 이미 많은 앱들이 302를 사용 중

PRG (Post/Redirect/Get)

Post 주문 후 Redirection 시 다시 Post로 인한 재 주문 방지를 위함
따라서, 주문 후 주문 결과 화면을 Get으로 리다이렉트 하게

기존
요청 -> DB 저장 -> 응답 -> 새로고침으로 인한 요청 -> DB 주문 -> 응답
위 처럼 진행될 경우 새로고침마다 주문 횟수 증가

개선
요청 -> DB 저장 -> 응답 -> 자동 리다이렉트(다른 화면으로 이동, Post에서 Get으로 변환) -> 요청 -> DB 조회 -> 응답


특수 리다이렉션

  • 결과 대신 캐시 사용

4-- (클라이언트 오류)

오류의 원인이 클라이언트에 있을 경우로, 재시도를 하더라도 실패함

400 Bad Request

  • 문법, 메세지 오류

401 Unauthorized

  • 인증 되지 않음

403 Forbidden

  • 인증 자격은 있지만, 접근 권한이 불충분
  • 등급에 맞지 않는 리소스 접근

404 Not Found

  • 권한이 부족한 리소스에 접근

5-- (서버 오류)

서버 문제이기 때문에 재시도 하면 성공할 가능성 존재

profile
work0ut

0개의 댓글