一尘不染

403 Forbidden vs 401 Unauthorized HTTP 响应

javascript

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

401 Unauthorized?
403 Forbidden?
还有什么?

到目前为止,我所读到的关于两者之间的区别并不是很清楚。每个响应适合哪些用例?


阅读 171

收藏
2022-01-18

共1个答案

一尘不染

解释:

401 Unauthorized存在问题,这是身份验证错误的 HTTP 状态代码。仅此而已:它用于身份验证,而不是授权。接收到 401 响应是服务器告诉您,“您未通过身份验证 - 根本未通过身份验证或身份验证不正确 - 但请重新进行身份验证并重试。” 为了帮助您,它将始终包含一个WWW-Authenticate标头,用于描述如何进行身份验证。

这通常是由您的 Web 服务器返回的响应,而不是您的 Web 应用程序。

这也是非常暂时的;服务器要求您再试一次。

因此,对于授权,我使用403 Forbidden响应。它是永久性的,它与我的应用程序逻辑相关,而且它是比 401 更具体的响应。

收到 403 响应是服务器告诉你,“对不起。我知道你是谁——我相信你所说的你是谁——但你只是没有访问此资源的权限。也许如果您很好地询问系统管理员,您将获得许可。不过在你的困境改变之前,请不要再打扰我了。”

总之,401 Unauthorized响应应该用于缺少或错误的身份验证,而403 Forbidden响应应该在之后使用,当用户通过身份验证但无权对给定资源执行请求的操作时。

2022-01-18