对于存在的网页,但用户没有足够的权限(他们没有登录或不属于正确的用户组),应该提供什么正确的 HTTP 响应?
401 Unauthorized? 403 Forbidden? 还有什么?
401 Unauthorized
403 Forbidden
到目前为止,我所读到的关于两者之间的区别并不是很清楚。每个响应适合哪些用例?
解释:
401 Unauthorized存在问题,这是身份验证错误的 HTTP 状态代码。仅此而已:它用于身份验证,而不是授权。接收到 401 响应是服务器告诉您,“您未通过身份验证 - 根本未通过身份验证或身份验证不正确 - 但请重新进行身份验证并重试。” 为了帮助您,它将始终包含一个WWW-Authenticate标头,用于描述如何进行身份验证。 这通常是由您的 Web 服务器返回的响应,而不是您的 Web 应用程序。 这也是非常暂时的;服务器要求您再试一次。 因此,对于授权,我使用403 Forbidden响应。它是永久性的,它与我的应用程序逻辑相关,而且它是比 401 更具体的响应。 收到 403 响应是服务器告诉你,“对不起。我知道你是谁——我相信你所说的你是谁——但你只是没有访问此资源的权限。也许如果您很好地询问系统管理员,您将获得许可。不过在你的困境改变之前,请不要再打扰我了。” 总之,401 Unauthorized响应应该用于缺少或错误的身份验证,而403 Forbidden响应应该在之后使用,当用户通过身份验证但无权对给定资源执行请求的操作时。
401 Unauthorized存在问题,这是身份验证错误的 HTTP 状态代码。仅此而已:它用于身份验证,而不是授权。接收到 401 响应是服务器告诉您,“您未通过身份验证 - 根本未通过身份验证或身份验证不正确 - 但请重新进行身份验证并重试。” 为了帮助您,它将始终包含一个WWW-Authenticate标头,用于描述如何进行身份验证。
这通常是由您的 Web 服务器返回的响应,而不是您的 Web 应用程序。
这也是非常暂时的;服务器要求您再试一次。
因此,对于授权,我使用403 Forbidden响应。它是永久性的,它与我的应用程序逻辑相关,而且它是比 401 更具体的响应。
收到 403 响应是服务器告诉你,“对不起。我知道你是谁——我相信你所说的你是谁——但你只是没有访问此资源的权限。也许如果您很好地询问系统管理员,您将获得许可。不过在你的困境改变之前,请不要再打扰我了。”
总之,401 Unauthorized响应应该用于缺少或错误的身份验证,而403 Forbidden响应应该在之后使用,当用户通过身份验证但无权对给定资源执行请求的操作时。