204 No Content
用法
204 No Content 状态码在 POST、PUT 或 DELETE 操作中返回,此时预期不会有消息体。某些服务器则改为返回带有空消息体且 Content-Length 为 0 的 200。
一个实际用例是用户按下”保存”按钮后的表单提交结果。服务器提交更改,并依靠客户端来告知用户操作成功。
服务器绝不能在 204 响应中包含消息体。诸如 Cache-Control 和 ETag 之类的请求头仍会发送,并作用于请求所标识的文档。
相关的 205 Reset Content 状态同样不返回消息体,但会额外指示客户端重置文档视图(例如提交后清空表单)。条件式 GET 会返回 304,以表示该资源无需再次获取。
注意
DELETE 返回 204 是最常见的模式,适用于无需响应体的简单资源删除。当响应包含确认详情或被删除资源的表示时,应改为返回 200。PUT 返回 204 常见于更新成功且客户端无需回显更新后表示的场景。204 表示”成功,无内容可展示”,而 404 表示”资源未找到”。查询空集合应返回带空数组的 200,而非 204。
SEO 影响
Google 无法处理 204 响应,因为没有收到任何内容。持续返回 204 的 URL 不会出现在搜索结果中。
示例
客户端向服务器提交定义一个作业的 XML 数据。服务器响应确认数据已被接受且作业已完成。无需返回任何内容,因此 204 No Content 状态码是合适的选择。
请求
POST /job HTTP/1.1
Host: example.com
Content-Type: application/xml
Content-Length: 68
<?xml version="1.0"?>
<job>
<id>125</id>
<task>G01</task>
</job>
响应
HTTP/1.1 204 No Content
代码参考
.NET
HttpStatusCode.NoContent
Rust
http::StatusCode::NO_CONTENT
Rails
:no_content
Go
http.StatusNoContent
Symfony
Response::HTTP_NO_CONTENT
Python3.5+
http.HTTPStatus.NO_CONTENT
Java
java.net.HttpURLConnection.HTTP_NO_CONTENT
Apache HttpComponents Core
org.apache.hc.core5.http.HttpStatus.SC_NO_CONTENT
Angular
@angular/common/http/HttpStatusCode.NoContent