首页 > 解决方案 > 401 Unauthorized vs 403 Forbidden:当用户没有登录时,哪个是正确的状态码?

问题描述

经过大量谷歌搜索和 Stackoverflowing 之后,我仍然不清楚,因为许多文章和问题/答案过于笼统(包括403 Forbidden 与 401 Unauthorized HTTP 响应,这不是专门针对我的用例的)。

问题:当用户尚未登录并请求查看一些仅应向已登录用户显示的页面时,正确的 HTTP 状态代码是什么?

标签: http-status-code-403http-status-codeshttp-status-code-401

解决方案


我找到的确切令人满意的一次性答案是:

简短的回答:

401未经授权


描述:

虽然我们首先知道是身份验证(用户是否登录?),然后我们将进入授权(他是否具有所需的权限?),但这是使我们误会的关键:

但是“401 Unauthorized”不是授权,而不是身份验证吗?

早在编写 HTTP 规范 (RFC 2616) 时,这两个词可能还没有被广泛理解为是不同的。从描述和其他支持文本中可以清楚地看出 401 是关于身份验证的。

来自HTTP 状态代码 401 Unauthorized 和 403 Forbidden for Authentication and Authorization (and OAuth)

所以也许,如果我们想重写标准!对每个词都足够关注,我们可以参考下表:

Status Code | Old foggy naming | New clear naming | Use case
+++++++++++ | ++++++++++++++++ | ++++++++++++++++ | ++++++++++++++++++++++++++++++++++
401         | Unauthorized     | Unauthenticated  | User has not logged-in
403         | Forbidden        | Unauthorized     | User doesn't have enough privilege

推荐阅读