본문 바로가기

Infrastructure/Network

[HTTP] 상태 코드 (4xx)

4xx (Client Error) 상태 코드에 대해서 알아본다.

클라이언트의 요청이 잘못되어 서버가 요청을 수행할 수 없다. 중요한 점은 오류의 원인이
클라이언트에게 있기 때문에 같은 형식으로 재요청시 재실패한다는 점이다.
백엔드 개발자들은 4xx 상태 코드를 잘 터트려주어 프론트 개발자들의 디버깅 시간을 줄여주어야한다.

  • 400 (잘못된 요청): 서버가 요청의 구문을 인식하지 못했다.
  • 401 (권한 없음): 이 요청은 인증이 필요하다. 서버는 로그인이 필요한 페이지에 대해 이 요청을 제공할 수 있다.
    상태 코드 이름이 권한 없음(Unauthorized)로 되어 있지만 실제 뜻은 인증 안됨(Unauthenticated)에 더 가깝다.
  • 403 (금지됨): 서버가 요청을 거부하고 있다. (401은 인증 실패, 403은 인가 실패라고 볼 수 있음)
  • 404 (찾을 수 없음): 서버가 요청한 페이지(리소스)를 찾을 수 없다.

400 (Bad Request)

  • 요청 구문, 메시지 등등 오류
    필자는 실제로 NotNull위반, 데이터 타입 위반할 경우 400 상태 코드를 내려보낸다.
  • 클라이언트는 요청 내용을 API 문서와 비교하여 다시 요청해야함

401 (Unauthorized)

  • 인증(Authentication) 되지 않음
  • 401 오류 발생시 응답에 WWW-Authenticate 헤더와 함께 인증 방법을 설명
  • 인증(Authentication) vs 인가(Authorization)
    • 인증(Authentication): 쉽게 말해 로그인이 되어 있는가. JWT 토큰을 사용한다면 토큰을 헤더에 포함시켰는가.
    • 인가(Authorization): 리소스에 접근할 권한이 있는가. 일반 사용자는 관리자 페이지에 접근할 수 없다.
                       즉, 관리자 리소스에 인가되지 않았다.

403 (Forbidden)

  • 주로 로그인(인증 자격 증명)은 되어 있지만, 접근이 불가능한 리소스에 접근할 때 발생
  • 인가되지 않은 리소스에 접근

404 (Not Found)

  • 클라이언트의 요청한 리소스가 서버에 없을 때 발생
  • 인가되지 않은 클라이언트가 리소스의 유무도 알면 안되는 경우 403 (Forbidden) 상태 코드가 아닌
    404 (Not Found) 상태 코드를 반환하여 리소스의 존재 유무마저 숨길 수 있다.

'Infrastructure > Network' 카테고리의 다른 글

[HTTP] 상태 코드 (3xx)  (0) 2021.06.25
[HTTP] 상태 코드 (5xx)  (0) 2021.06.24
[HTTP] 상태 코드 (2xx)  (0) 2021.06.24
[HTTP] 상태 코드 (종류)  (0) 2021.06.24
[HTTP] API 설계 예시  (0) 2021.06.23