Moh*_*aji 19 http-status-codes http-status-code-403 http-status-code-401
经过大量的谷歌搜索和Stackoverflowing,我仍然不清楚,因为许多文章和问题/答案太笼统(包括403 Forbidden vs 401 Unauthorized HTTP响应,这不是专门针对我的用例).
问题:当用户未登录并请求查看仅应向登录用户显示的某些页面时,正确的HTTP状态代码是什么?
Moh*_*aji 34
我找到的确切令人满意的一次性答案是:
简短回答:
描述:
虽然我们首先知道身份验证(用户是否已登录?)然后我们将进入授权(他是否拥有所需的权限?),但这是导致我们失误的关键:
但是不是"401 Unauthorized"关于授权,而不是认证?
回到编写HTTP规范(RFC 2616)时,这两个词可能没有被广泛理解为不同.从描述和其他支持文本中可以清楚地看出401是关于认证的.
来自HTTP状态代码401未授权和403禁止进行身份验证和授权(和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
Run Code Online (Sandbox Code Playgroud)
这取决于您用于执行登录的机制。
403 Forbidden的规范说:
403(禁止)状态码表示服务器理解了请求,但拒绝授权。希望公开为什么禁止请求的服务器可以在响应有效负载(如果有)中描述该原因。
如果请求中提供了身份验证凭据,则服务器认为它们不足以授予访问权限。客户端不应该自动使用相同的凭据重复请求。 客户端可以用新的或不同的证书重复请求。 但是,出于与凭据无关的原因,可能会禁止请求。
虽然401 Unauthorized未在主要HTTP状态代码规范中定义,但在HTTP身份验证规范中指出:
401(未经授权)状态码表示该请求尚未应用,因为它缺少针对目标资源的有效身份验证凭据。 产生401响应的服务器必须发送WWW-Authenticate头域(4.1节),其中包含至少一个适用于目标资源的质询。
因此,如果您使用WWW-Authenticate和Authorization标头作为身份验证机制,请使用401。如果您使用任何其他方法,请使用403。
| 归档时间: |
|
| 查看次数: |
13795 次 |
| 最近记录: |