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

问题描述 投票:0回答:5

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

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

GET /api/persons/angela/location

检索用户“angela”的当前位置。 显然不是每个人都能获得结果。只有安吉拉本人和可能会接她的司机应该知道。

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

有什么提示吗?什么是最好的,为什么?

http rest resources http-status-codes
5个回答
41
投票

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

在您的情况下,似乎 401 是最合适的代码,因为有某种方法可以对确实有权访问该页面的用户进行身份验证。


7
投票

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

如果请求中没有提供授权凭据,那么您应该返回 401。


4
投票

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

我会选择 401


2
投票

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


0
投票

如果用户有有效的凭据,但没有查看资源的权限,错误 403。如果他没有经过身份验证,并且需要,错误 401。根据 rfc https://www.rfc-editor.org /rfc/rfc2616#section-10.4.2,error 401表示缺少凭据,error 403表示其他授权问题,例如登录后未被授予权限。但只有在说明原因的情况下才能使用拒绝(例如缺乏权限),如果没有提供对经过身份验证的用户拒绝的解释,您可以根据 RFC 使用 404 错误。

© www.soinside.com 2019 - 2024. All rights reserved.