HTTPQUERY
한국어

202 Accepted

사용법

202 Accepted 상태 코드는 일종의 확인 응답 역할을 합니다. 서버가 요청을 수신했으며 제출된 내용을 처리할 의사가 있다는 뜻입니다. 실무적으로는 서버가 요청 형식을 검증하고 해당 작업을 내부 큐에 넣었다는 의미입니다. 큐에 적재된 작업은 대개 오래 걸리는 처리이거나 배치 작업의 일부입니다.

서버가 나중에 최종 결과를 알리는 응답을 보낼 수 있는 메커니즘은 없습니다. 서버가 상태 조회 엔드포인트를 제공한다는 전제하에, 주기적으로 폴링하는 것은 클라이언트의 책임입니다.

SEO 영향

Googlebot은 202 응답을 만나면 콘텐츠를 잠시 기다립니다. 대기 시간 내에 수신된 콘텐츠는 색인 파이프라인으로 전달되지만, 색인 등록이 보장되지는 않습니다.

200 성공 응답이 도착하면 폴링을 멈춥니다. 그 밖에 유효한 결과로는 새 리소스가 생성되어 Location 헤더의 URI에서 사용할 수 있을 때의 201, 작업이 끝났지만 반환할 콘텐츠가 없을 때의 204가 있습니다.

예시

클라이언트가 작업을 정의하는 XML 데이터를 POST로 보냅니다. 서버는 제출을 확인해 줍니다. 이후 클라이언트의 요청들은 작업이 끝났는지 확인합니다. 최종적으로 서버가 완료를 알립니다.

요청

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