[HTTP] HTTP 상태 코드

괭이밥·2022년 12월 28일
0

HTTP

목록 보기
5/6
post-thumbnail

🔎목차

  1. HTTP 상태코드
  2. 200번대
  3. 300번대
  4. 400번대
  5. 500번대


📌 HTTP 상태코드

HTTP 상태코드란?

상태코드는 클라이언트가 보낸 요청의 처리 상태이다. 서버에서 클라이언트로 응답 메시지를 보낼 때 메시지 헤더에 상태코드를 포함하여 보낸다.

상태코드 분류

크게 5가지가 있다.

  • 100번대 (Informational)
    • 요청이 수신되어 처리중
    • 거의 사용하지 않음
  • 200번대 (Successful)
    • 요청 정상 처리
  • 300번대 (Redirection)
    • 요청 완료하려면 추가 행동 필요
  • 400번대 (Client Error)
    • 클라이언트 오류
  • 500번대 (Server Error)
    • 서버 오류

클라이언트가 인식 못하는 상태코드를 서버가 반환하면?
클라이언트는 상위 상태코드로 해석해서 처리한다.
ex. 299 -> 200번대 요청 정상 처리로 이해



📌 200번대

200번대 - 클라이언트 요청을 성공적으로 처리

주요 200번대 코드

200 OK

  • 요청 성공
  • 결과 정상적으로 처리하여 응답

201 Created

  • 요청 성공하여 새로운 리소스 생성됨
  • 주로 POST에서 자주 사용
  • Loaction 헤드 통해 리소스의 위치 알 수도 있음

202 Accepted

  • 요청이 접수되었으니 처리가 완료되지 않았음
  • 배치 처리 같은 곳에서 사용
    • ex. 요청 접수 후 1시간 뒤 배치 프로세스가 요청을 처리함

204 No Content

  • 서버가 요청을 성공적으로 수행했지만, 응답 페이로드 본문에 보낼 데이터 없을 때 사용
    • 서버 HTTP 응답 메시지에 보통 바디가 있음, 하지만 보낼 데이터 없으면 생략해서 보냄
  • 결과 내용 없어도 204 메시지만으로도 성공 인식할 수 있음


📌 300번대

300번대 - 리다이렉션
요청 완료하기 위해 유저 에이전트(클라이언트 프로그램)의 추가 조치가 필요하다.

주요 300번대 코드

리다이렉션

리다이렉트: 웹 브라우저는 300번대 응답 결과에 Location 헤더가 있으면, Location 위치로 자동 이동한다.

동작 방식
1. 클라이언트는 리소스 URI를 담아 요청한다.
2. 리소스 URI가 변경되었으면 서버는 300번대 상태코드로 응답한다. 이때 Location 헤더에 새로운 리소스 URI가 있다.
3. 클라이언트는 자동 리다이렉트가 일어난다. 새로운 URI로 새로 요청한다.
4. 서버는 새로운 URI에 대해 응답한다.

종류

  • 영구 리다이렉션
    • 특정 리소스의 URI가 영구적으로 이동
  • 일시 리다이렉션
    • 일시적인 변경
    • ex. 주문 완료 후 주문 내역 화면으로 이동
    • PRG: POST, Redirect, Get - 자주 사용되는 패턴
  • 특수 리다이렉션
    • 클라이언트에 있는 캐시 만료된건지 서버에게 물어봄
    • 서버 확인하고 계속 캐 사용해도 된다는 뜻으로 보냄
    • 클라이언트는 결과 대신 캐시를 사용

301, 308 영구 리다이렉션

  • 리소스의 URI 영구적으로 이동
  • 원래 URI 사용X
  • 클라이언트 이전 URI로 요청하면 서버는 변경된 URI 전달
  • 301 Moved Permanently
    • 리다이렉트시 요청 메서드가 GET으로 변하고, 본문이 제거될 수 있음
  • 308 Permanent Redirect
    • 301과 기능은 같음
    • 리다이렉트시 요청 메서드와 본문 유지
    • 많이 사용하지 않음, 만약 페이지 바뀌었다면 내부 데이터도 바뀔 가능성 높기 때문

301 예시
1. 클라이언트는 POST로 요청
2. 서버는 301 상태코드로 바뀐 URI 알려줌
3. 클라이언트는 GET으로 다시 요청! -> 메시지 바디 사라짐

308 예시
1. 클라이언트 POST로 요청
2. 서버는 308 상태코드로 바뀐 URI 알려줌
3. 클라이언트는 POST로 다시 요청 -> 메시지 바디 유지


302, 307, 303 일시 리다이렉션

  • 리소스의 URI 일시적으로 변경
  • 검색 엔진 등에서 URI 변경하면 안 됨
  • 302 FOUND
    • 리다이렉트시 요청 메서드 GET으로 변하고, 본문이 제거될 수 있음
    • 자주 사용
  • 307 Temporary Redirect
    • 리다이렉트시 요청 메서드와 본문 유지
  • 303 See Other
    • 리다이렉트시 요청 메서드가 GET으로 무조건 변경

추가) PRG 패턴: POST/Redirect/Get

  • POST로 주문 후 웹 브라우저 새로고침하면? -> POST 요청 한번 더!
  • 중복 주문이 될 수 있음
  • 이를 방지하기 위해 PRG 패턴 적용
  • PRG 패턴
  1. 클라이언트는 POST로 요청
  2. 서버는 302 Found로 응답(Location 헤더 포함)
  3. 클라이언트는 Location으로 리다이렉트, 이때 GET으로 요청
  4. 클라이언트는 다시 새로고침해도 3번 조회!

304 Not Modiried

  • 클라이언트에게 리소스 수정되지 않았음을 알림
    • 클라이언트: 나 이 캐시 있는데 써도 돼?
    • 서버: 응 써도 돼(304)
  • 캐시 목적으로 자주 사용
  • 응답 메시지 바디 없음
    • 클라이언트는 로컬 캐시를 사용


📌 400번대

400번대 - 클라이언트 오류
오류의 원인이 클라이언트에 있다. 클라이언트 요청에 잘못된 문법 등으로 서버가 요청을 수행할 수 없는 상태이다. 클라이언트가 이미 잘못된 요청을 보냈기 때문에 똑같은 재시도가 실패한다.

주요 400번대 코드

400 BadRequest

  • 클라이언트가 잘못된 요청
  • 요청 구문, 메시지 등등 오류
  • ex. 요청 파라미터 잘못, API 스펙 맞지 않음

401 UnAuthorized

  • 클라이언트가 해당 리소스에 대한 인증이 필요함
  • 401 오류 발생 시 응답에 WWW-Authenticate 헤더와 함께 인증 방법 설명
  • 참고
    • 인증(Authentication): 본인이 누구인지 확인(로그인)
    • 인가(Authorization): 권한부여(특정 리소스에 접근할 수 있는 권한, 인증이 있어야 인가가 있음)
    • 오류 메시지가 Unauthorized 이지만 인증 되지 않음

403 Forbidden

  • 서버가 요청을 이해했지만 승인 거부
  • 주로 인증 자격 증명은 있지만 접근 권한이 불충분한 경우
  • ex. 어드민 등급이 아닌 사용자가 로그인 했지만, 어드민 등급의 리소스에 접근

404 Not Found

  • 요청 리소스르 찾을 수 없음
    • 서버에 요청 리소스 없다.
  • 또는 클라이언트 권한 부족한 리소스에 접근했을 때 리소스 숨기고 싶을 때 사용


📌 500번대

500번대 - 서버 문제로 오류 발생
오류의 원인이 서버에 있다. 따라서 클라이언트의 동일 요청에 성공 가능성이 있다.

주요 500번대 상태코드

500 Internal Server Error

  • 서버 내부 문제로 오류 발생
  • 애매할 때는 500 오류 보냄

503 Server Unavailable

  • 서비스 이용 불가
  • 서버가 일시적인 과부하 또는 예정된 작업으로 잠시 요청 처리 불가
  • Retry-After 헤더 필드로 얼마뒤에 복구되는지 보낼 수도 있음


출처
인프런 '모든 개발자를 위한 HTTP 웹 기본 지식' 강의

profile
개발도 하고 싶은 클라우드 엔지니어

0개의 댓글