HTTP Protocol - HTTP 상태코드

YUNU·2023년 8월 22일
0

HTTP

목록 보기
9/11
post-thumbnail

🖥️ HTTP - HTTP 상태코드


🟦 상태 코드

클라이언트가 보낸 요청의 처리 상태를 응답에서 알려주는 기능

🔹 1xx (Informational) : 요청 수신되어 처리중 ⬅️ 거의 사용하지 않음
🔹 2xx (Successful) : 요청 정상 처리
🔹 3xx (Redirection) : 요청 완료하기 위한 추가 행동 필요
🔹 4xx (Client Error) : 클라이언트 오류 ➡️ 서버가 요청을 수행할 수 없음
🔹 5xx (Server Error) : 서버 오류 ➡️ 서버가 정상 요청을 처리하지 못함

모르는 상태 코드가 나타난 경우

클라이언트는 상위 상태코드로 해석해서 처리함
ex) 234 -> 2xx (Successful)로 처리

🔷 2xx - 성공(Successful)

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

▪️ 200 - OK
: 요청 성공

▪️ 201 - Created
: 요청 성공해서 새로운 리소스 생성됨
HTTP 헤더에 'Location: 생성된 리소스 URI' 추가

▪️ 202 - Accepted
: 요청이 접수되었으나 처리가 완료되지 않음
(잘 사용하지 않음)

▪️ 204 - No Content
: 서버가 요청을 성공적으로 수행, but 응답 페이로드에 본문에 보낼 데이터 없음
ex) 웹 문서 편집기에서 저장 -> 저장 클릭의 결과로는 아무 내용이 없어도 됨


🔷 3xx - Redirection

요청을 완료하기 위해 유저 에이전트의 추가 조치 필요

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

🔹 Redirection

  1. 클라이언트 요청 보냄
  2. 응답에 Location: /~~~ 포함해서 응답 전송
  3. 클라이언트는 응답으로 받은 Location 헤더의 URL로 자동 리다이렉트
  4. 클라이언트는 다시 요청 보냄
  5. 서버 응답

🔹영구 리다이렉션

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

원래의 URL 사용 X, 검색 엔진에서도 변경 인지

▪️ 301 - Moved Permanently
리다이렉트시 요청 메서드가 GET으로 변경 + 메세지 바디가 제거될 수 있음

▪️ 308 - Permanent Redirect
리다이렉트시 요청 메서드와 메세지 바디 유지

🔹 일시 리다이렉션

리소스의 URI가 일시적으로 변경 -> 검색 엔진에서 URL 변경하면 안됨
ex) 주문 완료 후 주문 내역 화면으로 이동

▪️ 302 - Found
리다이렉트시 요청 메서드가 GET으로 변하고 메세지 바디가 제거될 수 있음 (MAY)

▪️ 307 - Temporary Redirect
리다이렉트시 요청 메서드와 메세지 바디 유지 (MUST NOT, 요청 메서드 변경X)

▪️ 303 - See Other
리다이렉트시 요청 메서드가 GET으로 변경


✔️ 일시적인 리다이렉션이 꼭 필요한 경우 - PRG(Post/Redirect/Get)

POST로 주문 후에 웹 브라우저를 새로고침하면 중복 주문 발생 가능

➡️ POST로 주문 후에 주문 결과 화면을 GET 메서드로 리다이렉트하여 중복 주문 방지

새로고침을 누르더라도 결과 화면만 GET으로 재요청 될 것

  1. 클라이언트 POST로 주문 요청
  2. 주문 데이터 DB 저장
  3. 요청에 대한 응답으로 Location 포함해서 전송
  4. 클라이언트는 해당 URL로 자동 리다이렉트
  5. 클라이언트는 GET으로 요청 보냄
  6. 서버는 주문 데이터 DB에서 조회
  7. 서버는 요청에 대한 응답 보냄

🔹특수(기타) 리다이렉션

▪️ 304 - Not Modified
캐시를 목적으로 사용

클라이언트에게 리소스가 수정되지 않았음을 알려줌
➡️ 클라이언트는 로컬PC에 저장된 캐시를 재사용함 (캐시로 리다이렉트)

304 응답은 응답에 메시지 바디 포함 X


🔷 4xx - Client Error

오류의 원인이 클라이언트에 있음
ex) 클라이언트의 요청에 잘못된 문법을 사용

❗ 잘못된 요청을 보내는 것이기에 재시도를 하여도 계속 실패할 것

▪️ 400 - Bad Request
클라이언트가 잘못된 요청을 하여 서버가 요청을 처리할 수 없음
요청 구문 or 메시지 등에 오류가 있는 경우
ex) 요청 파라미터가 잘못됨, API 스펙이 맞지 않음

▪️ 401 - Unauthorized
인증(Authentication)되지 않음
401 오류 발생하면 응답에 WWW-Authenticate 헤더와 함께 인증 방법을 설명해줘야

인증(Authencication): 본인이 누구인지 확인 -> 신원 확인
인가(Authorization): 권한 부여

▪️ 403 - Forbidden
주로 인증 자격 증명은 O, but 접근 권한이 불충분

▪️ 404 - Not Found
요청 리소스가 서버에 없음
클라이언트가 권한이 부족한 리소스에 접근하는 경우 해당 리소스를 숨기기 위해 사용하기도


🔷 5xx - Sever Error

서버 문제로 오류 발생

❗ 서버에 문제가 있기 때문에 재시도 하면 성공할 수도 있음

▪️ 500 - Internal Server Error
서버 내부 문제로 오류 발생
애매한 경우 500으로 처리

▪️ 503 - Service Unavailable
서비스 이용 불가
서버의 일시적 과부하 or 예정된 작업으로 잠시 요청 처리 불가
Retry-After 헤더 필드로 복구 예정 시간 알릴 수 있음

Server Error는 정말로 서버에 에러가 있을 때에만!!

비즈니스 로직 상의 예외 케이스는 서버의 문제가 아님



인프런 / 모든 개발자를 위한 HTTP 웹 기본 지식 (김영한) 참조

profile
DDeo99

0개의 댓글