使用案例响应403状态代码

时间:2014-12-26 14:03:32

标签: java http java-ee http-status-code-403

我最近开始开发Java EE应用程序,并且我试图了解有关HTTP状态代码的更多信息,以及何时应该使用它们。

我遇到的一种情况是用户登录并想要检查订单的状态。要求是用户无法检查不属于他们的订单的状态。

检查订单的URL是,例如:

mysite.com/order/status?id=22594

处理此请求的servlet将检查ID参数,然后从数据库中检索订单。

如果用户输入了他们未提交的订单的ID,是否适合退回403,或者回复未找到的订单?

4 个答案:

答案 0 :(得分:3)

来自w3.org

  

服务器理解请求,但拒绝履行请求。授权无效,请求不应重复。如果请求方法不是HEAD并且服务器希望公开为什么请求没有得到满足,那么它应该描述实体中拒绝的原因。如果服务器不希望将此信息提供给客户端,则可以使用状态代码404(未找到)。

在您的情况下,出于安全原因,显示未找到的订单可能是个好主意,但一般来说答案是403

答案 1 :(得分:2)

如果用户没有提交订单,或者订单不属于用户,则适当返回以下任一响应:

  1. 404-未找到资源。这不会向用户显示此情况 另一个用户存在订单ID。
  2. 401-Unauthorized。这将显示订单存在,但不属于请求用户。
  3. 从安全角度来看,最好返回 404

答案 2 :(得分:2)

我倾向于为用户未提交的订单ID返回HTTP 404(缺少或不订购)。这里的原因是用户被授权访问/order/status页面,但未找到特定的订单ID。

如果订单ID无效,我会返回HTTP 403,向用户发送错误消息(此处不允许)。

订单是否存在或订单是否属于经过身份验证的用户;错误应该是相同的,否则你会冒险"泄漏"有关系统中订单的信息。

答案 3 :(得分:1)

在典型情况下,我可以考虑以下用例:

未找到订单ID

  • 发送 404 。订单不存在。

订单ID属于其他人。

  • 如果用户已登录,则发送 403 。(403表示:"我知道您是谁,并且您不能访问此资源)
  • 发送 404 。有时它适合发送此状态。您不希望让最终客户知道资源是否存在。该经过身份验证和授权的用户可以使用该资源,也可以不存在。

用户未登录

  • 发送 401 "需要验证"在尝试访问资源时。