gpt4 book ai didi

http - "success, and thus you no longer have access"的 REST HTTP 状态代码

转载 作者:可可西里 更新时间:2023-11-01 15:20:46 24 4
gpt4 key购买 nike

我的 RESTful 服务包括表示项目 ACL 的资源。要更新此 ACL,客户端执行 PUT 请求并将新的 ACL 作为其实体。成功时,PUT 响应实体包含新 ACL 的净化规范版本。

在大多数情况下,HTTP 响应状态代码是相当明显的。 200 成功,403 如果不允许用户编辑 ACL,400 如果新的 ACL 格式不正确,404 如果他们尝试在不存在的项目上设置 ACL,如果 If-Match header 不匹配,则为 412,等等。

但是,在一种情况下,正确的 HTTP 状态代码并不明显。如果经过身份验证的用户使用 PUT 将自己从 ACL 中删除怎么办?我们需要表明请求已成功,但他们不再有权访问该资源。

我考虑过在 PUT 实体中使用新的 ACL 返回 200,但这没有任何迹象表明它们不再具有 GET 资源。我考虑过直接返回403,但这并不代表PUT成功了。我考虑过返回 303,其中 Location 指向相同的资源(随后的 GET 将返回 403),但这似乎是对 303 的滥用,因为资源没有移动。

那么“成功,因此您不再具有访问权限”的正确 REST HTTP 状态代码是什么?

最佳答案

200 是合适的响应,因为它表示成功(正如任何 2xx 代码所暗示的那样)。您可以在响应中区分用户缺乏权限(或者,如果您不想,204 也可以)。状要求。 HTTP 客户端应该几乎总是在查看之前跳转,并准备好处理几乎所有响应代码。

您应该阅读 updated description of the PUT method in httpbis ;它不仅讨论了 200/204 的使用,而且在仔细阅读后指出立即返回转换后的表示以响应 PUT 是不合适的;相反,使用 ETag 或 Last-Modified header 来指示客户端发送的实体是否已转换。如果是,客户端应该发出后续的 GET,而不是期望发送新的表示以响应 PUT,如果没有其他原因,除了更新沿途的任何缓存(因为对 PUT 的响应不可缓存) . Section 6.3.1同意:对 PUT 的响应应该代表操作的状态,而不是资源本身。另请注意,对于新的 ACL,您必须返回 201,而不是 200。

关于http - "success, and thus you no longer have access"的 REST HTTP 状态代码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18165616/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com