HTTP-DELETE请求是否允许有响应体?

91
我假设响应代码200总是允许一个响应体,但我找不到任何明确提到DELETE请求的响应体的内容。
2个回答

163

这里在RFC中明确提到:

简单地说:

如果返回200,您应该包括一个描述已删除的项/资源的实体响应体。

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

204明确指出不包含响应主体。


2
点赞引用HTTP规范。还要注意,他们正在更新HTTP规范并在此澄清许多问题http://tools.ietf.org/wg/httpbis/。 - Darrel Miller
11
规范中说,如果响应正文包含“描述状态”的实体而不是已删除的实体,则可以返回200 OK。 - naikus
1
实际上它说的是“包括描述状态的实体” - 因此返回带有“已删除”标志的已删除实体似乎完全有效。 - Ryan Wheale
必须在响应中包含主体的Must 202(已接受)吗? - Soullivaneuh

16
通常情况下,您应该按照W3C规范(RFC2616第9节)使用200响应代码进行回复:
9.7 DELETE
DELETE方法请求原始服务器删除由Request-URI标识的资源。此方法可能被原始服务器上的人工干预(或其他手段)覆盖。即使从原始服务器返回的状态代码指示操作已成功完成,客户端也不能保证操作已完成。但是,除非在给出响应时它打算删除资源或将其移动到无法访问的位置,否则服务器不应指示成功。如果响应包含描述状态的实体,则成功的响应应为200(OK),如果尚未执行该操作,则接受的响应应为202,如果已执行该操作但响应不包括实体,则204(无内容)。如果请求通过缓存并且Request-URI标识一个或多个当前缓存的实体,则应将这些条目视为陈旧的。此方法的响应不可缓存。

5
你误读了语言。这些代码是按升序列出的,而顺序并不意味着有首选响应。在本文中,200、202或204响应的任何一种都是同样可接受的。"SHOULD" 只是指这些代码实现了通常的惯例(例如,200包含正文,而204则没有)。 - George Shaw

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接