이 글은 공부를 하면서 알게 된 내용들을 기록하는 글 입니다. 오류나 고쳐야 할 사항들이 있다면 지적 부탁드립니다!
✅ HTTP 응답코드 4xx
HTTP 응답 코드 400번대는 Client 오류로 인해 요청(Request)를 처리할 수 없거나, 처리하지 않았음을 의미합니다.
Client의 요청에 오류가 있음을 의미하며, Client측에서는 400번대 응답 코드를 받은 후 재요청 할 때 이전과 같은 형태로 요청해서는 안됩니다.
HTTP 응답코드 400번대에는 `401 Unauthorized`와 `403 Forbidden`이 있습니다.
두 응답코드 모두 "요청을 거부"하는 상태 코드이지만, 그 사유가 다릅
✅ HTTP 401 Unauthorized
`401 Unauthorized`는 client가 인증(Authentication)되지 않았거나, 유효하지 않은 인증(Authentication)을 가지고 있어 요청에 대한 처리가 거부되었음을 나타냅니다.
즉, 서버가 사용자 인증을 하지 못했다는 뜻입니다.
`401 Unauthorized`는 다음과 같은 상황에 발생할 수 있습니다.
- 권한/자격(Credentials)이 없거나 유효하지 않은 경우
사용자가 인증 정보를 가지고 있지 않거나, 발급받은 인증 정보가 유효하지 않을 때 발생할 수 있습니다.
사용자가 틀린 비밀번호를 통해 로그인을 하는 경우를 예로 들 수 있습니다. - 권한/자격(Credentials)의 유효기간이 지난 경우
사용자의 인증 토큰 혹은 세션의 유효기간이 지난 경우, 다시 인증을 하기 이전까지는 인증을 통해 접근할 수 있는 곳에 접근 허가를 주지 않을 것입니다.
`OAuth`를 이용한 로그인에서 `access token`의 유효기간이 만료되어 다시 재로그인을 해야 하는 상황을 예로 들 수 있습니다.
`401 Unauthorized`는 사용자 인증 자격 증명이 필요한 상태입니다.
서버는 에러 코드와 함께 클라이언트가 인증을 할 수 있도록, `WWW-Authenticate` 응답 헤더에 리소스를 요청할 수 있는 방법을 알려줍니다.
HTTP/1.1 401 Unauthorized
Date: Wed, 21 Oct 2015 07:28:00 GMT
WWW-Authenticate: Basic realm="Access to staging site"
✅ HTTP 403 Forbidden
`403 Forbidden`은 client에 대해 인증은 성공적으로 마쳤으나, 클라이언트가 요청한 리소스(resource)에 대해서는 접근이 막혀있는 상황을 나타냅니다.
`401 Unauthorized`와의 차이점은, 사용자의 자격 증명(Credential)은 유효하지만, 특정 리소스에 대해 접근/활용할 수 있는 권한이 부족할 때 사용한다는 점입니다.
따라서 사용자가 로그인 등을 통해 재인증(re-authenticating)을 완료하여도, 접근을 계속해서 거절합니다.
`403 Forbidden`은 다음과 같은 상황에 발생할 수 있습니다.
- 권한 부족
사용자의 자격 증명(Credentials)이 특정 리소스에 접근하기 위해 필요한 권한이 만족하지 않을 때 발생합니다.
사용자의 권한(Role)이나 접근 제한 설정으로 인해 일어날 수 있습니다. - IP 블랙리스트
몇몇 웹 사이트는 IP 주소에 기반해 접근 제어를 하는 경우가 있습니다.
특정 사용자의 접근을 막거나, 특정 지역에서 특정 컨텐츠를 접근하는 것을 막을 때 사용합니다.
✅ 401(Unauthorized)와 403(Forbidden)의 차이 정리
두 HTTP 에러 코드 모두 `접근 거부`를 알리지만, authentication(인증)과 authorization(인가)의 의미에서는 둘의 이유가 다릅니다.
401(Unauthorized) | 403(Forbidden) | |
Authentication vs Authorization | Authentication(인증)에 실패 | Authentication(인증)은 유효하나, Authorization(인가)에 실패했음 |
Credentials | 유효한 Credentials이 필요함을 알림 | Credentials은 유효하나, 권한이 부족함을 알림 |
Response to the User | 사용자에게 로그인을 하거나, 유효한 Credentials을 받는 것을 요청 | Authentication(인증) 상태에 관계없이, 접근이 거부됨을 알림 |
✅ 참고 자료 & 링크
- [HTTP] HTTP 상태 401(Unauthorizaed) vs 403(Forbidden) 차이
- Demystifying HTTP Error Codes 401 vs 403
- 401 Unauthorized - HTTP | MDN