HTTPQUERY
English

202 Accepted

用法

202 Accepted 状态码充当一种确认:服务器已收到请求并打算处理该提交。在实践中,这意味着服务器已校验请求格式并将该工作放入内部队列。排队的任务通常是长耗时的处理过程,或批处理操作的一部分。

服务器没有机制在之后再发送一个表明最终结果的响应。只要服务器提供了状态端点,客户端就有责任定期进行轮询。

SEO 影响

Googlebot 在遇到 202 响应时会短暂等待内容。在等待期内收到的内容会被传入索引流程,但不保证一定被索引。

一旦收到 200 成功响应,轮询即停止。其他有效结果还包括:201,表示已创建新资源且可在 Location 请求头的 URI 处获取;或 204,表示作业已完成且无内容可返回。

示例

客户端提交定义一个作业的 XML 数据。服务器确认收到该提交。客户端随后发起请求以检查工作是否完成。最终,服务器发出完成信号。

请求

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 202 Accepted
Link: </job/status/125>; rel="http://example.re/job-status"
Content-Length: 0

状态请求 1

GET /job-status/125 HTTP/1.1
Host: example.com

响应

HTTP/1.1 202 Accepted
Content-Length: 0

状态请求 2

GET /job-status/125 HTTP/1.1
Host: example.com

响应

HTTP/1.1 200 OK
Content-Type: application/json
Content-Length: 18

{"success":"true"}

收到 200 状态码后,客户端停止轮询并处理结果。

202 中的响应体

202 Accepted 响应允许包含消息体。该消息体通常包含请求的当前状态、指向状态监控端点的链接,或操作预计完成时间的估算。与指向已创建资源的 201 不同,202 的消息体描述的是待处理的操作本身。

202 与 201 对比

201 响应确认资源已创建并可立即获取。202 响应确认请求已收到但处理尚未完成。当响应时资源已存在时使用 201。当工作已排队或为异步、且最终结果尚未可知时使用 202。

代码参考

.NET

HttpStatusCode.Accepted

Rust

http::StatusCode::ACCEPTED

Rails

:accepted

Go

http.StatusAccepted

Symfony

Response::HTTP_ACCEPTED

Python3.5+

http.HTTPStatus.ACCEPTED

Java

java.net.HttpURLConnection.HTTP_ACCEPTED

Apache HttpComponents Core

org.apache.hc.core5.http.HttpStatus.SC_ACCEPTED

Angular

@angular/common/http/HttpStatusCode.Accepted