我应该 return 什么响应状态码?

What response status code should I return?

我有一个简单的购物清单应用程序,用户可以在其中创建购物清单、查看购物清单甚至共享购物清单。我的问题是一个用户没有创建购物清单可以说 x 但它是由另一个用户创建的,因此它在数据库中,我应该向这个用户 return 什么状态代码没有创建此购物清单?它应该是 403 因为它在数据库中但该用户无权查看它还是应该是 404 因为它不存在于该用户的购物清单集合中。

你应该 return 404:用户不应该知道另一个用户拥有的具有相同 ID 的购物车。

返回 403 被认为是一种安全流程,因为恶意黑客可以开始使用连续的用户 ID 攻击您的 API,直到他们找到拥有购物车的用户。

虽然接受的答案非常好,但另一种方法是为每个 ID 发送 403,即使它不存在。这样也没有安全漏洞。我假设用户是通过身份验证识别的,并且知道 /lists/200 是他们的,因此可能存在最多 200 个 ID。如果 /lists/50 和 /lists/50000000 都是 return 403,则用户 none 更聪明。

这种行为在面对缓存代理等中介时可能更安全,它可以公开缓存 404,但不能缓存 403 响应。