http-status-code-403 - 401 Unauthorized vs 403 Forbidden:当用户没有登录时,哪个是正确的状态码?
问题描述
经过大量谷歌搜索和 Stackoverflowing 之后,我仍然不清楚,因为许多文章和问题/答案过于笼统(包括403 Forbidden 与 401 Unauthorized HTTP 响应,这不是专门针对我的用例的)。
问题:当用户尚未登录并请求查看一些仅应向已登录用户显示的页面时,正确的 HTTP 状态代码是什么?
解决方案
我找到的确切令人满意的一次性答案是:
简短的回答:
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
推荐阅读
- ios - iOS 模拟器上的通用链接
- java - Spring 4.3:在 DAO 中而不是在 @Bean 配置中加载 DataSource 是否有问题
- sql - 在插入触发器后加速 SQL Server
- r - 检查名称(df)是否在其他字符列表中,返回真假值
- postgresql - 使 Docker PostgreSql 安全 - 不信任本地连接、用户名和密码最大长度
- google-sheets - 从表单更新 Google 表格
- node.js - 未捕获的错误:找不到模块“反应”
- mysql - DateTime 和 TimeStamp 中的 MYSQL 错误 1064
- r - 使用ggplot不同的交叉线之间的阴影区域
- sharepoint - 如何从 MS Graph Search REST API 中获取缩略图、预览或完整 DriveItem?