HTTP状态代码:204 OR 200,正文包含空对象?

时间:2014-06-11 08:06:58

标签: http web rfc2616

我无法理解204 HTTP状态代码的用例。 RFC2616说:

  

10.2.5 204无内容

     

服务器已完成请求但不需要返回   entity-body,可能想要返回更新的元信息。该
  响应可以包括以形式的新的或更新的元信息   实体标题,如果存在,应该与
相关联   要求的变体。

     

如果客户端是用户代理,它不应该更改其文档   从导致请求发送的视图。这个回应   主要用于允许进行操作的输入   在不导致更改用户代理的活动文档视图的情况下,   虽然应该应用任何新的或更新的元信息   当前在用户代理的活动视图中的文档。

     

204响应绝不能包含消息体,因此是   始终以标题字段后的第一个空行终止。

“文档视图”是指DOM吗?

例如,如果我发送了一个删除用户的AJAX请求,并且在我的请求成功完成后我更新了我的页面以从列表中删除用户,那么服务器是否应该给我一个带有{}作为响应的200或者204没有身体?

编辑:我主要关注的是“如果客户端是用户代理,它不应该从导致请求发送的文档视图中更改它的文档视图。”部分。用我自己的话来重新表述:如果我返回204,我可以更新DOM吗?

2 个答案:

答案 0 :(得分:4)

两者实际上都是有效的。这完全取决于您的申请。

有效删除可以返回200或204响应代码。

文档视图确实引用了DOM,是的。

This question谈论它。

答案 1 :(得分:4)

  

“文档视图”是否指向DOM?

不完全是,它表示渲染文档。 DOM不是呈现文档的表示。它是文档树的抽象模型。每个UA可能会以不同的方式呈现它。

  

我发出删除用户的AJAX请求,然后更新我的页面以删除   我的请求成功完成后,列表中的用户,   如果服务器给我200作为响应或204   没有身体?

这取决于API以及它是如何'符合'的。因此,如果您使用'DELETE'动词提交删除请求(因此,它是一个RESTful API),那么响应应该是200 OK;但如果API特别迂腐,它也可以发送204.

如果您只是向'/ some / view?id = 1& action = delete'发送GET请求,很可能返回200 OK

在任何一种情况下,由于第二部分,您可以自由更改DOM(从而触发重新呈现文档):

  

虽然任何新的或更新的元信息应该应用于   当前在用户代理的活动视图中的文档。

因此,使用 <strike> 表示记录已被删除符合此要求。