对于存在但用户没有足够权限(他们未登录或不属于正确的用户组)的网页,要提供的正确HTTP响应是什么?
401未授权?403禁止?还有别的吗?
到目前为止,我读到的每一篇文章都不太清楚两者之间的区别。每个响应都适合哪些用例?
对于存在但用户没有足够权限(他们未登录或不属于正确的用户组)的网页,要提供的正确HTTP响应是什么?
401未授权?403禁止?还有别的吗?
到目前为止,我读到的每一篇文章都不太清楚两者之间的区别。每个响应都适合哪些用例?
当前回答
英语:
401
您可能被允许访问,但出于某种原因否认。例如密码错误?请使用正确的请求重试你会得到成功的回应。
403
你永远不被允许。你的名字不在名单上,你不会一旦进入,离开,不要发送重试请求,它将被拒绝,总是走开。
其他回答
英语:
401
您可能被允许访问,但出于某种原因否认。例如密码错误?请使用正确的请求重试你会得到成功的回应。
403
你永远不被允许。你的名字不在名单上,你不会一旦进入,离开,不要发送重试请求,它将被拒绝,总是走开。
在401对403的情况下,这已经得到了多次回答。这本质上是一场“HTTP请求环境”辩论,而不是“应用程序”辩论。
您自己的登录问题(应用程序)似乎有问题。
在这种情况下,仅仅不登录不足以发送401或403,除非您使用HTTP Auth与登录页面(与设置HTTP Auth无关)。听起来您可能正在寻找一个“201已创建”,其中有一个滚动您自己的登录屏幕(而不是请求的资源),用于应用程序级访问文件。上面写着:
“我听到了,它在这里,但试试这个(不允许你看到)”
根据RFC 2616(HTTP/1.1)403在以下情况下发送:
服务器理解该请求,但拒绝履行该请求。授权没有帮助,不应重复该请求。如果请求方法不是HEAD,并且服务器希望公开请求未完成的原因,则应在实体中描述拒绝的原因。如果服务器不希望向客户端提供此信息,则可以使用状态代码404(未找到)
换句话说,如果客户端可以通过认证访问资源,则应发送401。
编辑:RFC2616已过时,请参阅RFC9110。
401未授权:
如果请求已经包括授权凭证,则401响应指示已拒绝对这些凭证的授权。
403禁止:
服务器理解该请求,但拒绝履行该请求。
从您的用例来看,用户似乎没有经过身份验证。我会返回401。
丹尼尔·欧文(Daniel Irvine)的明确解释[原始链接]:
401 Unauthorized(401未授权)存在问题,这是身份验证错误的HTTP状态代码。这就是它:它用于身份验证,而不是授权。收到401响应时,服务器会告诉你,“你不是已验证–完全未验证或已验证不正确–但请重新验证并重试。”为了帮助您,它将始终包含一个WWW Authenticate标头,描述如何以进行身份验证。这是通常由web服务器而不是web返回的响应应用这也是非常暂时的;服务器要求您尝试再一次因此,为了获得授权,我使用403 Forbidden响应。它是永久性的,它与我的应用程序逻辑有关,而且更具体响应大于401。收到403响应时,服务器会告诉你:“对不起,我知道你是谁——我相信你说的你是谁,但你只是没有访问此资源的权限。也许如果你问系统管理员很好,你会得到许可的。但请不要打扰直到你的困境改变。”总之,401未经授权的响应应用于缺失或认证错误,应使用403禁止响应之后,当用户经过身份验证但未被授权对给定资源执行请求的操作。
另一种很好的图片格式,说明如何使用http状态代码。