11

今天,当用户没有权限时,一位同事在删除操作上使用了 550 错误,这起初对我来说很糟糕,因为据我所知,这种错误对我来说看起来像是客户端(又名 4xx)错误而不是服务器(又名 5xx)。

查看描述时,它准确地表明它被正确使用。而不是 401 错误,我之前使用过一些“问题”。

401 错误的问题是:如果用户 A 已登录,并尝试执行返回 401 的操作,它可能会建议您必须“登录”,因为您没有有效的凭据来访问该 http 资源。这种方法的问题是,如果用户已登录,服务器知道他没有权限,在这种情况下,看起来像 550 更合适,但在我看来,应该在此使用 550 错误设想。

问题是:在基于 Web 的应用程序中,550 错误的正确用途(如果有的话)是什么?我了解它用于 FTP 和 SMTP 中继使用。如果某个登录用户发送了一个不允许的操作请求,应该返回哪个错误?

谢谢!

4

1 回答 1

14

5xx 错误是服务器错误。如果用户没有权限,则应该是 4XX 错误。

不过你是对的。401 错误意味着用户必须登录才能访问。即需要身份验证。

您要查找的错误是403 Forbidden

这对于是否因为用户登录没有歧义。其分明。

从 wiki 上的 http 错误代码(http://en.wikipedia.org/wiki/List_of_HTTP_status_codes)(强调我的):

403 禁止

该请求是一个有效的请求,但服务器拒绝响应它。[2] 与 401 Unauthorized 响应不同,身份验证没有任何区别。 [2] 在需要身份验证的服务器上,这通常意味着提供的凭据已成功通过身份验证,但凭据仍不授予客户端访问资源的权限(例如,已识别的用户尝试访问受限制的内容)。

同样,根据上述 wiki,没有 550 错误之类的东西。我想你可以选择自己实现它,但可能没有必要说实话。然而,它应该是标准中定义的服务器错误。

于 2013-05-13T15:39:54.410 回答