【发布时间】:2015-04-19 09:47:21
【问题描述】:
如果有人请求访问他不被允许看到的实体,应该返回什么状态代码?你可能会说它是 403: Forbidden。但是返回 404 是常见的做法吗?我不希望有人知道如果不允许他看到这个实体甚至存在。你怎么看?
【问题讨论】:
-
如果资源不存在且不允许客户端访问,你会返回什么?
标签: rest http http-status-code-404 http-status-code-403
如果有人请求访问他不被允许看到的实体,应该返回什么状态代码?你可能会说它是 403: Forbidden。但是返回 404 是常见的做法吗?我不希望有人知道如果不允许他看到这个实体甚至存在。你怎么看?
【问题讨论】:
标签: rest http http-status-code-404 http-status-code-403
使用 404 未找到。
404状态码也可以用在403场景中,当服务器 不想发回拒绝服务的原因 要求。 一个很好的例子是当服务器感知到某种 攻击,可能是蛮力攻击。在这种情况下, 服务器响应 404 Not found 而不是 403 Forbidden 和 解释。
【讨论】:
返回403 Forbidden。如果您为不允许客户端访问的每个请求返回此信息,并且如果您从不返回404 Not Found,则客户端一无所知。
这完全取决于这对你有多重要:
我不希望有人知道如果不允许他看到这个实体甚至存在。
如果这真的很重要,请始终返回403 Forbidden。
【讨论】:
嗯..这取决于..
如果您的端点 URL 泄露了敏感信息(例如,在 Dropbox API 中,您通过文件名而不是 ID 来引用文件 - 因此 URL 包含文件名)或者您可能正在使用顺序 ID(例如,可以被暴力破解的升序 ID),返回 404。
如果您需要支持对您无权访问的资源的“请求访问”功能,请返回 403,以便您的客户端可以分辨出差异。
一般来说,如果您的 API 使用 ID 并且从不将信息作为其 URL 的一部分透露,并且您使用 UUID 作为 ID,我会选择 403.. 与当今许多知名且非常安全的应用程序一样(Google、微软等)。
【讨论】:
403 的知名API 方法的具体示例?
希望您根据我在下面发布的内容对 HTTP 错误有所了解:
HTTP 401 错误 :: 当网站访问者尝试访问受限网页但无权访问时会发生此错误。
HTTP 403 错误 :: 此错误类似于 401 错误,但请注意未授权和禁止的区别。例如,如果您尝试访问任何网站上的目录(禁止访问),就会发生这种情况。
HTTP 404 错误 :: 当您尝试访问不存在的 Web 服务器(通常是网页)上的资源时,会发生 404 错误。
【讨论】: