【问题标题】:Is a response-body allowed for a HTTP-DELETE-request?HTTP-DELETE 请求是否允许响应体?
【发布时间】:2011-07-05 10:33:27
【问题描述】:

我假设响应代码 200 始终允许响应体,但我找不到任何明确提及删除请求的响应体。

【问题讨论】:

    标签: rest http http-delete


    【解决方案1】:

    RFC这里明确提到了

    简短的回答是:

    如果您返回 200,您应该包含一个带有描述已删除项目/资源的实体的响应正文。

    202 类似于异步请求/响应返回状态。

    204 明确表示您不包含响应正文

    【讨论】:

    • 赞成引用 HTTP 规范。另请注意,他们正在更新 HTTP 规范并在此处澄清许多问题 tools.ietf.org/wg/httpbis
    • +1 但是规范说,如果响应正文包含实体“描述状态”而不是删除实体,则可以返回 200。
    • 它实际上说“包括一个描述 状态的实体”——因此返回带有“已删除”标志的已删除实体似乎完全有效。
    • 是否必须包含 202(已接受)响应?
    【解决方案2】:

    是的,根据the W3C spec,您通常应该使用 200 响应代码进行响应:

    9.7 删除

    DELETE 方法请求 源服务器删除资源 由 Request-URI 标识。这个 方法可以被人类覆盖 干预(或其他方式) 源服务器。客户端不能 保证操作已经 执行,即使状态码 从源服务器返回 表示该动作已 顺利完成。但是,那 服务器不应指示成功 除非,当时的回应是 鉴于,它打算删除 资源或将其移动到无法访问的地方 位置。

    成功的响应应该是 200 (OK) 如果响应包含一个 描述状态的实体,202 (已接受)如果该操作尚未 已颁布,或 204(无内容),如果 该行动已经制定,但 响应不包含实体。

    如果请求通过缓存 并且 Request-URI 标识一个或 更多当前缓存的实体,那些 条目应该被视为过时的。 对这种方法的反应不是 可缓存。

    【讨论】:

    • 你读错了语言。代码按升序排列,该顺序并不意味着首选响应。如本文所述,200、202 或 204 响应中的每一个都同样可以接受。 SHOULD 仅表示代码是按照通常的约定实现的(例如,200 包含主体,而 204 不包含)。
    猜你喜欢
    • 2010-11-16
    • 1970-01-01
    • 1970-01-01
    • 2013-04-24
    • 2015-10-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-12-15
    相关资源
    最近更新 更多