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 |