对于存在但用户没有足够权限(他们未登录或不属于正确的用户组)的网页,要提供的正确HTTP响应是什么?

401未授权?403禁止?还有别的吗?

到目前为止,我读到的每一篇文章都不太清楚两者之间的区别。每个响应都适合哪些用例?


当前回答

考虑到最新的RFC(7231和7235),用例似乎非常清楚(添加了斜体):

401表示未经认证(“缺少有效认证”);即“我不知道你是谁,或者我不相信你是你说的那样。”

401未授权

401(未授权)状态代码表示请求没有已应用,因为它缺少有效的身份验证凭据目标资源。生成401响应的服务器必须发送WWW Authenticate头字段(第4.1节),至少包含一个适用于目标资源的挑战。

如果请求包括认证证书,则401响应表明授权已被拒绝资格证书用户代理可以使用新的或替换了Authorization头字段(第4.2节)。如果401响应包含与先前响应相同的挑战用户代理已经至少尝试了一次身份验证,然后用户代理应向因为它通常包含相关的诊断信息。

403表示未经授权(“拒绝授权”);即“我知道你是谁,但你无权访问此资源。”

403禁止

403(禁止)状态代码表示服务器已理解请求,但拒绝授权公开为什么该请求被禁止可以描述这一点响应有效载荷中的原因(如果有的话)。

如果请求中提供了身份验证凭据服务器认为它们不足以授予访问权限。客户不应自动重复相同的请求资格证书客户可以用新的或不同的重复请求资格证书然而,出于某些原因,请求可能被禁止与证书无关。

希望“隐藏”当前存在的禁用的目标资源可能会以状态代码响应404(未找到)。

其他回答

其含义如下:

401:用户未(正确)验证,资源/页面需要验证

403:用户的角色或权限不允许访问请求的资源,例如,用户不是管理员,请求的页面是管理员的。

注意:从技术上讲,403是401的超集,因为给未经认证的用户403也是合法的。无论如何,区分更有意义。

在401对403的情况下,这已经得到了多次回答。这本质上是一场“HTTP请求环境”辩论,而不是“应用程序”辩论。

您自己的登录问题(应用程序)似乎有问题。

在这种情况下,仅仅不登录不足以发送401或403,除非您使用HTTP Auth与登录页面(与设置HTTP Auth无关)。听起来您可能正在寻找一个“201已创建”,其中有一个滚动您自己的登录屏幕(而不是请求的资源),用于应用程序级访问文件。上面写着:

“我听到了,它在这里,但试试这个(不允许你看到)”

考虑到最新的RFC(7231和7235),用例似乎非常清楚(添加了斜体):

401表示未经认证(“缺少有效认证”);即“我不知道你是谁,或者我不相信你是你说的那样。”

401未授权

401(未授权)状态代码表示请求没有已应用,因为它缺少有效的身份验证凭据目标资源。生成401响应的服务器必须发送WWW Authenticate头字段(第4.1节),至少包含一个适用于目标资源的挑战。

如果请求包括认证证书,则401响应表明授权已被拒绝资格证书用户代理可以使用新的或替换了Authorization头字段(第4.2节)。如果401响应包含与先前响应相同的挑战用户代理已经至少尝试了一次身份验证,然后用户代理应向因为它通常包含相关的诊断信息。

403表示未经授权(“拒绝授权”);即“我知道你是谁,但你无权访问此资源。”

403禁止

403(禁止)状态代码表示服务器已理解请求,但拒绝授权公开为什么该请求被禁止可以描述这一点响应有效载荷中的原因(如果有的话)。

如果请求中提供了身份验证凭据服务器认为它们不足以授予访问权限。客户不应自动重复相同的请求资格证书客户可以用新的或不同的重复请求资格证书然而,出于某些原因,请求可能被禁止与证书无关。

希望“隐藏”当前存在的禁用的目标资源可能会以状态代码响应404(未找到)。

英语:

401

您可能被允许访问,但出于某种原因否认。例如密码错误?请使用正确的请求重试你会得到成功的回应。

403

你永远不被允许。你的名字不在名单上,你不会一旦进入,离开,不要发送重试请求,它将被拒绝,总是走开。

你又是谁??(程序员走进一个没有ID或ID无效的酒吧)

403:太好了,又是你。我盯着你了。走吧,离开这里。(程序员走进一家86岁的酒吧)