正确使用HTTP错误代码。 550 - 为什么是5xx而不是4xx?

时间:2013-05-13 15:30:36

标签: web-applications http-status-codes http-error

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

在查看说明时,它确切地表明它已正确使用。而不是401错误,我之前使用过一些“问题”。

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

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

谢谢!

1 个答案:

答案 0 :(得分:11)

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

但是你是对的。 401错误意味着用户必须登录才能访问。即需要认证。

您正在寻找的错误是 403 Forbidden

这是否因为用户是否登录而没有歧义。它清晰明了。

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

  

403禁止

     

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

同样,根据上面的wiki,没有550错误这样的事情。我想你可以选择自己实现它,但可能没有必要诚实。但它应该是标准中定义的服务器错误。