什么时候以及为什么我应该使用403错误代码?

时间:2020-05-11 05:26:45

标签: rest error-handling error-code

在我的应用程序中,我有一个案例,其中我具有将在企业版和标准版中启用的功能。在此功能中,我具有创建实体的数量限制。两个版本的计数限制相同。超过计数时我应该扔403吗?还是只返回422错误代码? 谢谢

2 个答案:

答案 0 :(得分:0)

我认为您应该返回http状态406。不可接受。因为这是服务器的当前状态。

403状态适用于登录用户但对服务器中的操作没有足够要求的情况。

伴随错误406,您应该放一个msg来支付薪资或增加经常账户限额。

答案 1 :(得分:0)

要认识的重要一件事是响应的状态代码是(如标头值)元数据:它是以标准化形式提供的信息,以便通用组件可以理解语义发生了什么。细粒度的细节属于消息正文。

例如,考虑网络的模型:如果我们希望浏览器/缓存/反向代理/网络蜘蛛了解正在发生的事情,我们将使用元数据。对于网络的人类读者,响应有效负载中提供了细粒度的详细信息。

此外,元数据属于transporting documents over a network域;服务器正在幕后看起来像网站的后台做有趣的事情。

由于状态码用于通用组件,所以我们对错误代码的正确性的主要衡量标准是“通用组件会做正确的事吗?”看到的时候。

403在HTTP / 1.1中具有以下含义:

403(禁止)状态代码表示服务器理解了请求,但拒绝授权。

“授权”一词有时会使人绊倒,因为听起来这种状态特定于凭据。更仔细的阅读表明并非如此

出于与凭据无关的原因,可能会禁止请求。

HTTP/1.0中,语言略有不同

服务器理解了该请求,但拒绝执行该请求。

403的意思是“我不会允许这样做”,但是对于是否允许其他人这样做却模棱两可。

您可能考虑的另一种可能性是409 Conflict

409(冲突)状态代码表示由于与目标资源的当前状态冲突而无法完成请求。该代码用于用户可能能够解决冲突并重新提交请求的情况。服务器应生成有效载荷,该有效载荷应包含足够的信息,以使用户能够识别冲突的根源。

据我所知,这些代码是等效的,在某种意义上,通用组件的行为与每种组件相似。

我不考虑406 Not Acceptable,因为这是关于域逻辑的问题,而406是关于proactive negotiation的问题。同样,对于与412 Precondition Failed无关的失败,我不考虑precondition headers

同样,这里的主题是我们正在HTTP域中寻找正确的匹配项。