401(Unauthorized)
뜻 그대로 권한이 없는, 인증되지 않은 클라이언트라는 의미이다. 인증되지 않은 클라이언트는 다양한 경우가 있겠지만, 로그인을 하지 않은 사용자를 예시로 들 수 있다. 로그인을 하지 않은 사용자가 로그인이 필요한 기능에 대한 요청을 했을 때 throw 하기 적절한 응답이다.
403(Forbidden)
Unauthorized와 비슷하지만 명확하게 다른 점이 있다. Forbidden은 클라이언트가 보낸 요청에 대해서 해당 클라이언트에게 권한이 없음을 나타내는 status code이다. 일반적인 유저가 관리자 페이지에 접근하는 경우(관리자 권한이 없는 유저가 관리자 권한이 필요한 기능에 대한 요청을 한 경우) throw하기 적절한 응답이다.
이 차이점만 두고 보면 권한이 없으면 403을 response하면 된다고 생각할 수 있다. 하지만, 반대로 생각하면 403이면 일단 해당 요청이 존재한다는 것을 의미한다. 이를 이용해 악의적인 공격을 할 수 있는데, GitHub는 이를 방지하기 위해 private Repository에 대한 get 요청을 404 Not Found로 처리했다. 이 링크를 클릭해보면 알 수 있다. 해당 Repository는 필자의 private Repository이고, 존재하는 Repository인데, GitHub에선 404로 처리해 존재 유무를 알려주지 않고 있다. 이 예시에서 볼 수 있듯, 상황에 따라서는 존재하더라도 404로 처리를 해 주는 방법도 있다.