HTTP 有 2 个响应状态码:401 和 403,特别容易混淆。
我们看 MDN 上对这 2 个状态码的定义
401 Unauthorized
403 Forbidden
从状态码说明文字上看不出什么端倪。 下面说人话解释。
401:web 服务器(如 nginx;非应用服务器)不知道你是谁(因为没有进行身份验证或身份验证不正确,比如说 cookie 里没有带 seesionId,或者没带 JWT,或其他 token;或者说尽管携带了身份验证信息,但是格式不正确),它希望你重新进行身份验证并重试。
403:应用服务器知道你是谁,也相信你确实是你声称的那个人,但是你没有权限访问你想看的资源。这时你一般需要联系应用服务的开发者,向他申请对应的权限。
这里最重要的区别是 authentication 和 authorization 的区别,前者代表身份验证,解决「你是谁」的问题;后者代表权限验证,解决「你能不能」的问题。