【问题标题】:When and why should i use 403 error code?何时以及为什么应该使用 403 错误代码?
【发布时间】:2020-08-26 14:10:04
【问题描述】:

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

【问题讨论】:

  • 您可以使用402 - 需要付款

标签: rest error-handling error-code


【解决方案1】:

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

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

除了错误 406,您还应该添加一条支付信息或增加当前帐户限制。

【讨论】:

  • 感谢您的意见。但是现在不能根据工资增加计数限制。但我可以移动到未付款实体。
  • 在这种情况下,我建议使用状态码 412 Pré-conditions failed as the user got his limits.
【解决方案2】:

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

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

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

因为状态代码是为通用组件设计的,所以我们衡量错误代码正确性的主要指标是“通用组件会做正确的事吗?”当它看到它时。

403 在 HTTP/1.1 中有这个含义:

403(Forbidden)状态码表示服务器理解请求但拒绝授权。

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

请求可能因与凭据无关的原因而被禁止。

HTTP/1.0,语言略有不同

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

403 的意思是“我不会允许做这件事”,但对于是否允许其他人做这件事含糊其辞。

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

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

据我所知,这些代码是等价的,因为通用组件的行为方式与每个代码相似。

我不考虑406 Not Acceptable,因为这是一个关于域逻辑的问题,406 是关于proactive negotiation。同样,对于与precondition headers 无关的故障,我不考虑使用412 Precondition Failed

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

【讨论】:

    猜你喜欢
    • 2010-12-07
    • 1970-01-01
    • 2014-05-22
    • 2023-03-08
    • 2013-01-29
    • 1970-01-01
    • 2021-01-11
    • 2011-06-07
    相关资源
    最近更新 更多