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

dgr*_*tin 10 rest resources http http-status-codes

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

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

GET /api/persons/angela/location

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

我无法决定是否在这里返回404 Not Found或401 Forbidden.

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

Phi*_*hil 22

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

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


Dar*_*ler 7

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

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

  • 如果请求中提供了授权凭据,并且请求者没有访问此资源的权限,那么您应该返回 401 而不是 403。RFC 2616 明确指出,对于 403,“授权不会有帮助,并且不应重复请求” (http://tools.ietf.org/html/rfc2616#section-10.4.4)。因此,如果存在授予访问资源权限的有效凭据,请不要返回 403。 (3认同)

Dmi*_*ryK 5

绝对不是 404。404 只是未找到。
401 拒绝访问。
403 被禁止。

我会选择 401

  • 401 是*不* 拒绝访问。它是“未登录且需要登录”。 (3认同)
  • @EricStein 根据 RFC 2616 (http://tools.ietf.org/html/rfc2616#section-10.4.2),“如果请求已包含授权凭据,则 401 响应表明这些凭据的授权已被拒绝.” 所以401实际上是拒绝访问。 (2认同)