混合 200(正常)和 403(禁止)HTTP 响应
Posted
技术标签:
【中文标题】混合 200(正常)和 403(禁止)HTTP 响应【英文标题】:Mixture between 200 (OK) and 403 (Forbidden) HTTP response 【发布时间】:2022-01-06 03:33:00 【问题描述】:你知道这个用例是否有 HTTP 响应代码: “允许用户查看被调用资源的一小部分,但不能查看全部”。
这听起来像是 200 响应代码(因为允许用户检索部分资源)和 403 响应代码(因为不允许用户查看所有资源)之间的混合。
我猜 206 响应代码(部分内容)有点意思。但根据 MDN Web Docs*,此响应听起来非常“技术性”,而不是特定于业务案例。
感谢您的帮助!
*https://developer.mozilla.org/en-US/docs/Web/HTTP/Status/206
【问题讨论】:
【参考方案1】:它仍然是状态 200,因为他们成功地获取了他们有权访问的数据。如果他们获得了他们有权访问的数据,是否有其他他们无法访问的数据都没有区别。如果他们不尝试访问其他数据,也没有理由告诉他们他们无权访问这些数据。
206 表示您正在以较小的部分发送他们有权访问的数据。
想象一个用户端点。管理员可以访问所有用户信息,而普通用户只能访问他们自己的信息。因此,您可以使用 /user/ 获取所有用户,使用 /user/:id 获取特定用户。
如果普通用户访问 /user/:id ,其中 id 是他们自己的 id,他们应该得到 200。如果他们尝试访问 /user/ 或 /user/:id 而 id 不是他们的 id,他们应该得到 403 (因为他们不允许使用前者并允许使用后者,但不能获取该 id 的数据)。如果他们没有登录,他们应该得到一个 401(如果他们登录了,他们是否可以访问它甚至都没有关系)。
如果您只有一个 /user/ 端点,则相同,其中数据基于例如返回他们的 id 存储在 cookie 中。 如果返回数据:200。如果不允许他们使用该端点:403。同样,如果他们没有登录:401。
【讨论】:
以上是关于混合 200(正常)和 403(禁止)HTTP 响应的主要内容,如果未能解决你的问题,请参考以下文章
HEAD 请求在 GET “200 ok”时收到“403 禁止”?