Web

[HTTP 웹 기본 지식] 섹션6. HTTP 상태코드

Ella_K 2022. 11. 18. 04:18

※ 김영한 님의 인프런 "모든 개발자를 위한 HTTP 웹 기본 지식" 강의를 요약한 내용입니다.

1xx (Informational)

요청이 수신되어 처리중. 거의 사용하지 않음

 

2xx (Successful)

클라이언트의 요청을 성공적으로 처리

📌 200 OK

  • 요청 성공

📌 201 Created

  • 요청 성공해서 새로운 리소스가 생성됨
  • 생성된 리소스는 응답의 Location 헤더 필드로 식별할 수 있다.

📌 202 Accepted

  • 요청이 접수되었으나 처리가 완료되지 않았음
  • 배치 처리
    • 요청 접수 후 1시간 뒤에 배치 프로세스가 요청을 처리

📌 204 No Content

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

 

3xx (Redirection)

웹 브라우저는 3xx 응답의 결과에 Location 헤더가 있으면, Location 위치로 자동 이동

👉 영구 리다이렉션

  • 특정 리소스의 URI가 영구적으로 이동
  • 원래의 URL을 사용하지 않는다.
  • 특정 리소스의 URI가 영국적으로 바꼈는데 클라이언트가 이전 URI를 보내는 경우
  • 301, 308

📌 301 Moved Permanently 

  • 리다이텍트시 요청 메서드가 GET으로 변하고, 본문이 제거 될 수 있다.
  • 항상 그런건 아니지만 대부분 그렇다.

📌 308 Permanent Redirect

  • 301과 기능 같다.
  • 리다이렉트 요청시에 요청 메서드와 본문을 유지 한다.
사실 실무에서는 메서드를 유지하지 않는다.
URI가 영구적으로 바뀌면 내부적으로 전달해야하는 데이터 자체가 바껴버린다.
POST로 와도 GET으로 돌리는게 맞다.

👉 일시 리다이렉션

  • 일시적인 변경
  • 주문 완료 후 주문 내역 화면으로 이동
  • 302, 307, 303

📌 302 Found

  • 리다이텍트시 요청 메서드가 GET으로 변하고, 본문이 제거 될 수 있다.
  • 항상 그런건 아니지만 대부분 그렇다. (대부분 그런데 아닌 웹브라우저가 있긴 함.)

📌 307 Temporary Redirect

  • 302와 기능 같다.
  • 리다이렉트 요청시에 요청 메서드와 본문을 유지 한다.
  • 요청 메서드가 절대 변경되면 안된다.

📌 303 See Other

  • 302와 기능 같음
  • 리다이렉트시 요청 메서드가 무조건 GET으로 변경된다.

📌 PRG: Post/Redirect/Get

POST로 주문후에 웹 브라우저를 새로고침하면?
새로고침은 다시 요청한다. → POST로 다시 요청하면 중복 주문이 될 수 있다.
  • POST 요청(주문)을 받고 서버에서 로직 수행 후 응답으로 200 OK를 주는 것이 아닌 302 Found 리다이렉트를 응답으로 준다.
  • 웹 브라우저는 자동 리다이렉트를 하고 GET으로 주문한 상세 데이터 정보를 가진 URI로 (리다이렉트시 받은 URI) GET 요청을 한다.
  • 서버에서 200 OK 응답
  • 결과 화면에서 새로고침으로 인해 다시 요청해도 GET 요청을 함

👉 특수 리다이렉션

  • 결과 대신 캐시를 사용
  • 304

📌 304 Not Modified

  • 클라이언트에게 리소스가 수정되지 않았음을 알려준다. 따라서 클라이언트는 로컬PC에 저장된 캐시를 재사용한다. (캐시로 리다이렉트 한다.)
  • 클라이언트는 로컬 캐시를 사용해야 하므로 304 응답은 응답에 메시지 바디를 포함하면 안된다. 
  • 조건부 GET, HEAD 요청시 사용

 

4xx (Client Error)

오류의 원인이 클라이언트에 있다.

클라이언트가 이미 잘못된 요청, 데이터를 보내고 있기 때문에 똑같은 요청을 재시도 해도 실패한다.

📌 400 Bad Request

  • 클라이언트가 잘못된 요청을 해서 서버가 요청을 처리할 수 없다.
  • 요청 구문, 메시지 등등 오류
  • 클라이언트 요청 내용 검토 필요

📌 401 Unauthorized

  • 클라이언트가 해당 리소스에 대한 이증이 필요함

📌 401 Forbidden

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

📌 404 Not Found

  • 요청 리소스가 서버에 없음
  • 클라이언트가 권한이 부족한 리소스에 접근할 때 해당 리소스를 숨기고 싶을 때 

 

5xx (Server Error)

서버에 문제가 있기 때문에 발생하는 오류로 복구가 되거나 등등에 의해 요청을 재시도하면 성공할 수도 있다.

📌 500 Internal Server Error

  • 서버 내부 문제.
  • 애매하면 500오류.

📌 503 Service Unavailable

  • 서비스 이용 불가.
  • 서버가 일시적인 과부하 또는 예정된 작업으로 잠시 요청을 처리할 수 없음.
500대 에러는 서버 내부 문제. 쿼리 문제. DB가 down되거나 등등 서버 자체 문제로 인해 발생하는 오류이다.
비즈니스 로직상 예외 사항이고, 정상적인 프로세스인 경우 500 에러를 내면 안된다.