当资源可用但由于权限而无法访问时,请更正HTTP状态代码

时间:2010-08-23 12:24:45

标签: http rest resources http-status-codes

我正在为我的计算机科学论文构建一个用于动态拼车应用程序的RESTful协议。

在协议中,我还必须正式指定每个操作的HTTP状态代码。我有这个“隐私相关”的问题。假设如下:

GET /api/persons/angela/location

检索用户“angela”的当前位置。 很明显,不是每个人都应该能够获得结果。只有安吉拉本身和一个可能会选择她的司机应该能够知道它。

我无法决定是否在此处返回404 Not Found或401 Forbidden。

任何提示?什么是最好的,为什么?

4 个答案:

答案 0 :(得分:19)

根据Wikipedia(和RFC 2616),当页面存在但需要验证时使用401代码; 403用于认证不会改变任何内容的页面。 (在野外,403通常意味着对某些内容的权限是错误的,而401将提示用户输入用户名/密码)。 404用于文档根本不存在的地方。

在您的情况下,似乎401是最合适的代码,因为有一些方法可以验证可以访问该页面的用户。

答案 1 :(得分:0)

绝对不是404. 404就是找不到。
401被拒绝访问 403是被禁止的。

我会选择401

答案 2 :(得分:0)

对我来说,我会使用400 Bad请求 因为我的应用程序不会以编程方式获得无法访问的资源 在我看来,过滤用户权限和隐藏不可访问的资源是良好的用户体验。 如果我的服务器得到了无法访问的请求,这意味着有人试图做某事 这就是我在我的应用程序中选择400 - Bad请求的原因。

答案 3 :(得分:-1)

如果请求中提供了授权凭据,并且请求者没有访问此资源的权限,那么您应该返回403.

如果请求中未提供授权凭据,则应返回401。