[ 네트워크 ] HTTP 상태코드

Shelby Choi·2023년 8월 30일

CS

목록 보기
5/5

모든 개발자를 위한 HTTP 웹 기본 지식 - 김영한 | 섹션6

  • 상태코드 : 클라이언트가 보낸 요청의 처리 상태를 응답에서 알려주는 기능
    • 1xx 요청 처리중. 거의 사용하지 않음
    • 2xx 요청 정상 처리
    • 3xx 리다이렉트. 요청 완료하려면 추가 행동 필요
    • 4xx 클라이언트 오류
    • 5xx 서버 오류
  • 클라이언트가 인식할 수 없는 상태코드일 경우, 첫번째 자리로 해석

📌 2xx - 성공

200 OK

  • 요청 성공

201 Created

  • 요청 성공해서 새로운 리소스 생성
  • 생성된 리소스: 응답의 Location 헤더 필드에 넣어줌

202 Accepted

  • 요청이 접수되었으나 처리가 완료되지 않음
  • 배치 처리 등에 사용

204 No Content

  • 요청을 성공적으로 수행했지만, 응답 페이로드 본문에 보낼 데이터가 없음
  • ex) 웹문서 save 버튼

📌 3xx - 리다이렉션

  • 요청을 완료하기 위해 유저 에이전트의 추가 조치 필요
  • 웹 브라우저는 3xx 응답의 결과에 Location 헤더가 있으면, Location 위치로 자동 이동한다
  • 리다이렉션의 종류
    • 영구 리다이렉션 특정 리소스의 URI가 영구적으로 이동 ex) /members -> /users
    • 일시 리다이렉션 ex) 주문 완료 후 주문 내역 화면으로 이동할 때
    • 특수 리다이렉션 결과 대신 캐시 사용

영구 리다이렉션

  • 리소스의 URI가 영구적으로 이동
  • 원래의 URL 사용x
  • 301 리다이렉트 요청 메서드가 GET으로 변하고 본문이 제거될 수 있음
  • 308 301과 기능은 동일하나 리다이렉트 요청 메서드와 본문 유지
  • 대부분 301 사용

일시 리다이렉션

  • 리소스의 URI가 일시적으로 변경
  • 302 리다이렉트 요청 메서드가 GET으로 변하고 본문이 제거될 수 있음
  • 307 302과 기능 동일. 메서드와 본문은 유지
  • 303 302과 기능 동일. 메서드만 GET으로 반드시 변경

PRG란?

  • POST로 주문후에 웹 브라우저를 새로고침하면 주문이 완료된 후, 웹 브라우저를 새로고침하면 중복 POST가 들어갈 수 있다. -> Post/Redirect/Get로 이를 해결할 수 있음
  • PRG 사용전: /order에 POST 요청 -> 서버는 주문 데이터를 저장 & 200 OK 응답 -> /order 결과 화면에서 새로고침 -> 주문 데이터 한 건이 더 들어옴
    • 상품id를 미리 만들어놓아서 이를 방지 해야하지만, 클라이언트에서도 미리 방지해주는 것이 좋다
      • POST로 주문후에 새로고침으로 인한 중복 주문 방지
      • POST로 주문후에 주문 결과 화면을 GET 메서드로 리다이렉트
      • 새로고침해도 결과화면을 GET으로 조회
      • 중복 주문 대신에 결과 화면만 GET으로 다시 요청
  • PRG 사용후: /order에 POST 요청 -> 서버는 주문 데이터 저장 & 302 Found | Location: /order-result/19 응답 -> 클라이언트는 /order-result/19로 자동 리다이렉트하고, 메서드가 GET으로 바뀌면서 /order-result/19에 GET 요청을 보냄(실수로 새로고침하더라도 GET요청만 하게 됨) -> 서버는 주문 데이터 조회해서 200 OK 응답

기타 리다이렉션

  • 300 안씀
  • 304 캐시를 목적으로 사용
    • 클라이언트에게 리소스가 수정되지 않았음을 알려줌 -> 클라이언트는 로컬PC에 저장된 캐시를 재사용
    • 응답에 메시지 바디를 포함하면 안된다

📌 4xx - 클라이언트 오류

  • 오류의 원인이 클라이언트에 있음. 4xx 오류는 복구 불가능하기 때문에, 똑같은 요청을 보내면 100% 실패한다
  • 400 클라이언트가 잘못된 요청을 함 ex) 파라미터 오류, API 스펙 오류
  • 401 인증 필요
  • 403 서버가 요청을 이해했지만 승인을 거부함 ex) 로그인했지만 접근 불가한 리소스에 접근했을 때
  • 404 요청 리소스가 서버에 없음. 또는 리소스를 숨기고 싶을 때

📌 5xx - 서버 오류

  • 서버 문제로 인한 오류. 복구되면 재시도시 성공할 수 있음
  • 500 서버 내부 오류. 애매하면 전부 500
  • 503 서버 과부하 또는 예정된 작업(retry-after)
profile
React를 애정하는 FE 개발자

0개의 댓글