我最近开始开发Java EE应用程序,并且我试图了解有关HTTP状态代码的更多信息,以及何时应该使用它们。
我遇到的一种情况是用户登录并想要检查订单的状态。要求是用户无法检查不属于他们的订单的状态。
检查订单的URL是,例如:
mysite.com/order/status?id=22594
处理此请求的servlet将检查ID参数,然后从数据库中检索订单。
如果用户输入了他们未提交的订单的ID,是否适合退回403,或者回复未找到的订单?
答案 0 :(得分:3)
:
服务器理解请求,但拒绝履行请求。授权无效,请求不应重复。如果请求方法不是HEAD并且服务器希望公开为什么请求没有得到满足,那么它应该描述实体中拒绝的原因。如果服务器不希望将此信息提供给客户端,则可以使用状态代码404(未找到)。
在您的情况下,出于安全原因,显示未找到的订单可能是个好主意,但一般来说答案是403
答案 1 :(得分:2)
如果用户没有提交订单,或者订单不属于用户,则适当返回以下任一响应:
从安全角度来看,最好返回 404 。
答案 2 :(得分:2)
我倾向于为用户未提交的订单ID返回HTTP 404
(缺少或不订购)。这里的原因是用户被授权访问/order/status
页面,但未找到特定的订单ID。
如果订单ID无效,我会返回HTTP 403
,向用户发送错误消息(此处不允许)。
订单是否存在或订单是否属于经过身份验证的用户;错误应该是相同的,否则你会冒险"泄漏"有关系统中订单的信息。
答案 3 :(得分:1)
在典型情况下,我可以考虑以下用例:
未找到订单ID
订单ID属于其他人。
用户未登录