HTTP 상태코드 알아보기

YeongMin·2022년 5월 13일
0

HTTP

목록 보기
1/2

HTTP 상태코드란?

클라이언트가 보낸 요청의 처리에 대한 결과의 상태를 알 수 있는 코드 이다.
정확하진 않지만 쉽게 말해 브라우저가 보낸 요청에 대한 결과를 대략적으로 알 수 있는 코드이기 때문에
브라우저가 다음에 수행할 행동을 결정하는데 매우 중요한 역활을 한다.

상태코드 종류

상태코드설명
1xx (Informational)요청이 수신되어 처리중
2xx (Successful)요청이 정상적으로 처리되었음
3xx (Redirection)요청을 완료하려면 브라우저 측에서 추가적인 행동이 필요
4xx (Client Error)클라이언트(브라우저)측에서의 오류
5xx (Server Error)서버측에서의 오류

모르는 상태 코드가 나타났을 경우 해결법

상태코드 또한 예전과 지금이 같은 역할을 하지 않고 새로운 상태코드 또한 필요에 의해 생성되고 있다.
그러나 그 큰 틀은 변하지 않기 때문에 1xx, 2xx , etc... 첫번째 자리의 숫자가 무엇인지에 따라서 판단하여 로직을 작성하자!

상태 코드별 상세 정보

1xx (Inforamtional)

거의 사용되지 않음으로 해당 포스트에서는 생략

2xx (Successful)

요청이 정상적으로 이루어진 경우의 상태코드

상태코드설명
200단순하다. OK!!
201요청이 완료되어 생성이 완료됌 (Created)
202요청이 접수되었으나 처리는 아직 완료되지 않은 경우(Accepted)
204요청이 완료되었으나 데이터를 넘겨줄 필요가 없는 경우(변경된 내용이 없는 경우)

3xx (Redirection)

요청은 제대로 이루어졌으나 특수한 상황으로 인해 클라이언트 측에서 추가적인 조치를 취해야 하는 경우
3xx 상태코드를 제대로 이해하기 위해서는 리다이렉션(Redirection) 에 대해 알아야한다.

리다이렉션이란?

사용자가 입력한 URL이 다른 URL로 변경된 경우 변경된 URL를 통해 요청을 자동으로 처리하는 것을 말한다.

즉 사용자의 행동에 의해 브라우저가 서버로 요청을 보냈을 때 정상적으로 요청과 응답이 이루어 졌지만 추가적인 작업을 필요로 함을 알려주는 상태코드이다.

리다이렉션의 종류

  • 영구 리다이렉션: 특정 리소스의 URI가 영구적으로 변경되었을 경우
  • 일시 리다이렉션: 일시적으로 URI가 변경된 경우 ( ex)주문후 결과페이지로 리다이렉션)
  • 특수 리다이렉션: 결과 대신 캐시를 이용하라고 알려주는 경우

사용 케이스는 이러하다. 영구 리다이렉션 기존의 이벤트페이지가 존재하여 정보를 입력하고 참여를 하려고 했으나 해당 이벤트가 영구히 종료되고 이벤트 내용 또한 바꼇을 경우 요청은 제대로 이루어 졌지만 브라우저에서는 추가적인 작업을 통해 현재 변경된 이벤트의 URI로 요청을 보내 영구적 리다이렉션 을 시켜줘야한다.

그럴 때 사용되는 코드로는 대표적으로 301, 308 이 존재한다.

301, 308

영구적인 리다이렉션

301 : 리다이렉트시 요청 method를 Get으로 변경되고 요청의 본문(내용)또한 변경될 수 있다.
308 : 동일한 기능이 가능하나 요청 method와 본문의 변화가 없다.

그렇다면 요청한 URL이 변경된 것은 아니지만 일시적으로 URL을 바꿔주는 일시적 리다이렉션 이 필요한 경우는 어떤 경우이며, 어떤 상태코드를 사용해야 할까?

302, 307, 303

일시적으로 URL을 변경해줘야하는 리다이렉션

  • 302(Found) : 리다이렉트시 요청 메서드 GET으로 변경, 본문이 제거될 수 있음
  • 307(Temporary Redirect) : 요청 메서드를 변경하지 않고 일시적으로 리다이렉션 한다.
  • 303(See Other) : 본문은 변경하지 않고 요청 메서드만 GET으로 변경

## 4xx (Client Error) - __클라이언트 측의 오류__ - 수정해서 보내지 않으면 재요청을 보내도 똑같이 거절당할 가능성이 높음

400 Bad Request

  • 요청 구문, 메시디 등등 오류
  • 클라이언트는 요청을 수정해서 보내야함 ex) 파라미터가 잘못됬거나 , API 스펙에 맞지않는 경우

401 Unauthorized

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

  • 인증(Authentication) 되지 않은 경우
  • 인증(Authentication): 본인이 누구인지에 대한 인증 ex) 로그인
  • 인가(Authrozition): 권한이 부여되지 않음 ex) ADMIN만 가능한 경우

403 Forbidden

서버가 요청을 이해했으나 승인을 거부함

  • 주로 인증 은 되었으나 인가 가 되지 않은 경우(권한이 없는경우)

404 Not Found

요청 리소스를 찾을 수 없음

  • 해당 서버에는 요청한 경로의 리소스가 존재하지 않은 경우

5xx (Server Error)

  • 서버측의 오류
  • 서버의 상황에 따라서 수정하지 않고 똑같이 재시도를 할 경우 요청이 이루어질수도 있음.

500 Internal Server Error

서버 문제로 오류 발생, 애매하면 500 오류로 취급

503 Service Unavailable

서비스 이용 불가

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

5xx Server Error 팁

  • 고객의 잔고가 부족한경우
  • 고객의 나이가 미달인 경우

이러한 경우에는 비즈니스 로직상 예외인 케이스이기 때문에
5xx Error 가 아닌 2xx, 4xx Error로 해결하는 것이 좋다.


Reference

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

잘못되었거나 부족한 부분을 발견하신다면 댓글로 알려주시면 수정하도록 하겠습니다 :)

profile
Front-End 안영민

0개의 댓글