202 Accepted

リクエストは受け付けられましたが、まだ処理されていません。

使いどころ

キューに入った処理やバックグラウンドジョブ。進行状況を確認する方法を返します。

知っておきたいこと

202 は結果について何も約束しません。ジョブは後で失敗するかもしれません。/jobs/123 のようなステータス URL を Location またはボディで返し、必要に応じて Retry-After でポーリング間隔を提案します。ステータスのエンドポイントは queued、running、done、failed のような状態を 200 で返し、ジョブが完了したら結果へのリンクを示すか、303 でそこへリダイレクトできます。

Webhook は、ポーリングに代わるプッシュ型の手段です。タイムアウトや接続の切断で 202 を受け取れなかったクライアントは再送するので、処理は冪等にしてください。応答する前に、SQS、Redis ベースのワーカー、ジョブテーブルなどの永続的なキューにジョブを入れましょう。AWS Lambda のようなサーバーレス環境ではレスポンスの送信後にプロセスが凍結されるため、プロセス内のバックグラウンド処理は実行されないままになるかもしれません。

成功 (2xx)

2xx は成功を表します。サーバーがリクエストを受け取り、理解し、受け入れました。

レスポンスでの表示

HTTP/1.1 202 Accepted

返し方

Node.js / Expressres.status(202).end()
Python / Flaskreturn '', 202
nginxreturn 202;

確認方法

curl -s -o /dev/null -w "%{http_code}\n" https://example.com/

HTTP ステータスコードを開く