19

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

10.2.5 204 无内容

服务器已完成请求,但不需要返回实体主体,并且可能希望返回更新的元信息。响应可能包括实体头形式的
新的或更新的元
信息,如果存在,应该与
请求的变体相关联。

如果客户端是用户代理,它不应该改变导致请求被发送的文档视图。这个响应主要是为了允许输入动作发生而不导致用户代理的活动文档视图发生变化,尽管任何新的或更新的元信息应该应用于当前在用户代理的活动视图中的文档。

204 响应不能包含消息体,因此总是由头字段之后的第一个空行终止。

“文档视图”是指 DOM 吗?

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

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

4

2 回答 2

6

两者实际上都是有效的。这完全取决于您的应用程序。

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

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

这个问题谈到它。

于 2014-06-11T08:10:24.790 回答
5

“文档视图”是指 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>来表示记录已被删除就符合这个要求。

于 2014-06-11T08:11:28.590 回答