Der HTTP 202 Code signalisiert, dass eine Anfrage erfolgreich akzeptiert wurde, aber die Verarbeitung noch nicht abgeschlossen ist. Dieser Statuscode ist besonders nützlich bei asynchronen Vorgängen, bei denen die tatsächliche Verarbeitung der Anfrage erst später erfolgt.
1. HTTP Status 202 Antwortkörper
Der HTTP-Statuscode 202 gehört zur 2xx-Serie, die im Allgemeinen erfolgreiche Antworten kennzeichnet. Allerdings ist die “Accepted”-Antwort speziell, da sie nicht den unmittelbaren Erfolg einer Anfrage signalisiert. Stattdessen informiert sie den Client darüber, dass die Anfrage zur Bearbeitung angenommen wurde, aber möglicherweise noch nicht bearbeitet oder abgeschlossen ist.
Der HTTP 202-Statuscode wird in Szenarien verwendet, in denen eine sofortige Bearbeitung der Anfrage nicht möglich ist und der Client wissen sollte, dass die Anfrage asynchron behandelt wird.
Die mit dieser Antwort zurückgegebene Entität SOLLTE den aktuellen Status der Anfrage beschreiben und auf eine Statusüberwachung hinweisen (oder diese einbetten), die dem Benutzer (mit oder ohne Schätzung) mitteilt, wann die Anfrage erfüllt wird.
Beispiel einer Anfrage:
bashCode kopierenPOST /api/tasks
Status: 202 Accepted
Location: /tasks/12345
Content-Type: application/json
{
"taskId": 12345,
"status": "pending",
"createdAt": "2023-11-04T10:00:00Z"
}
2. Beispiel für HTTP Status 202
Die 202-Antwort wird häufig in Verbindung mit Mechanismen zur asynchronen Verarbeitung verwendet, sodass der Client den Status der Anfrage periodisch überprüfen kann, bis diese abgeschlossen ist. Es können Echtzeit-Kommunikationskanäle (z. B. WebSockets) genutzt werden, um Aktualisierungen zum Fortschritt der Anfrage bereitzustellen.
In folgendem Beispiel wird ein lang andauernder asynchroner Job an eine REST-API übermittelt, und die API kann das Ergebnis folgendermaßen zurückgeben:
HTTP STATUS 202 (Accepted)
jsonCode kopieren{
"task": {
"href": "/api/company/job-management/jobs/2130040",
"id": "2130040"
}
}
Nun kann der Benutzeragent HTTP GET-Anfragen an die URI ‘/api/company/job-management/jobs/2130040‘ senden, um den Abschlussstatus des Jobs zu überprüfen.
Die Antwort der oben genannten API wird den aktuellen Status des tatsächlich geplanten Vorgangs anzeigen.
2.1. Job Noch Nicht Gestartet
perlCode kopieren{
"job" : {
"@uri" : "/api/company/job-management/jobs/2130040" ,
"id" : "2130040",
"name" : "Update Resource",
"job-state" : "SCHEDULED",
"job-status" : "UNDETERMINED",
"percent-complete" : "0",
"scheduled-start-time" : "01-01-2013 10:50:45 PM GMT",
"start-time" : "",
"end-time" : "",
"owner" : "Admin",
"summary" : "random text"
}
}
2.2. Job Gestartet
perlCode kopieren{
"job" : {
"@uri" : "/api/company/job-management/jobs/2130040" ,
"id" : "2130040",
"name" : "Update Resource",
"job-state" : "STARTED",
"job-status" : "INPROGRESS",
"percent-complete" : "30",
"scheduled-start-time" : "01-01-2013 10:50:45 PM GMT",
"start-time" : "01-01-2013 10:50:55 PM GMT",
"end-time" : "",
"owner" : "Admin",
"summary" : "random text"
}
}
2.3. Job Abgeschlossen
perlCode kopieren{
"job" : {
"@uri" : "/api/company/job-management/jobs/2130040" ,
"id" : "2130040",
"name" : "Update Resource",
"job-state" : "COMPLETED",
"job-status" : "SUCCESS",
"percent-complete" : "100",
"scheduled-start-time" : "01-01-2013 10:50:45 PM GMT",
"start-time" : "01-01-2013 10:50:55 PM GMT",
"end-time" : "01-01-2013 10:52:18 PM GMT",
"owner" : "Admin",
"summary" : "random text"
}
}
Das obige Beispiel dient nur als Referenz.
3. Best Practices
Beim Einsatz des HTTP 202-Statuscodes sollten die folgenden Best Practices beachtet werden:
- Stellen Sie sicher, dass der Client eine Möglichkeit hat, den Fortschritt der Anfrage zu überwachen oder das Ergebnis zu erhalten.
- Fügen Sie relevante Header wie ‘Location’ hinzu, um anzugeben, wo der Client weitere Informationen über den Status der Anfrage erhalten kann.
- Dokumentieren Sie klar das erwartete Verhalten und den Umgang mit der Anfrage, einschließlich eventueller Zeitlimits für Abfragen oder Rückrufe.
202 Code-Referenzen
- Rails HTTP Status Symbol:
:accepted
- Go HTTP Status Constant:
http.StatusAccepted
- Symfony HTTP Status Constant:
Response::HTTP_ACCEPTED
- Python2 HTTP Status Constant:
httplib.ACCEPTED
- Python3+ HTTP Status Constant:
http.client.ACCEPTED
- Python3.5+ HTTP Status Constant:
http.HTTPStatus.ACCEPTED
Wann wird ein http 202 Statuscode verwendet?
Ein HTTP 202-Statuscode wird verwendet, wenn ein Server eine HTTP-Anfrage empfängt und plant, diese zu verarbeiten. Dies deutet in der Regel darauf hin, dass der Server das Format der Anfrage validiert hat und sie in eine interne Warteschlange für die Verarbeitung eingereiht hat, insbesondere wenn es sich um einen langwierigen Prozess oder eine tägliche Operation handelt.
Der Client muss den Ausgang der HTTP-Antwort regelmäßig überprüfen, da der Server keinen Status zurückgeben kann, der das endgültige Ergebnis der Anfrage angibt. Sobald der Status 200 OK empfangen wird, kann der Client aufhören, den Status zu überprüfen.
Wie prüft man einen 202 Statuscode?
Da der Server keinen Status zurückgeben kann, der dem Client das endgültige Ergebnis der Anfrage anzeigt, muss der Client den Fortschritt der Anfrage überprüfen. Dies kann durch eine GET-Anfrage geschehen, um den Status des Prozesses oder der Aufgabe abzufragen.
Beispiel für einen 202-Statuscode
Um einen 202 Accepted-Statuscode in Aktion zu sehen, nehmen wir folgendes Szenario an: Ein Client möchte Daten an einen Server senden, um eine Aufgabe zu definieren, die erledigt werden muss.
Der Server wird antworten, dass die Anfrage empfangen und anerkannt wurde. Der Client muss dann zusätzliche Anfragen senden, um festzustellen, ob die Aufgabe abgeschlossen wurde. Schließlich wird der Server mit einem 200 OK-Statuscode antworten, wenn die Aufgabe beendet ist.
Erste Anfrage
xmlCode kopierenPOST /job HTTP/1.1
Host: www.example.com
Content-Type: xml
Content-Length: 50
<?xml version="2.0"?>
<job>
<id>123</id>
<task>A101</task>
</job>
Erste Antwort
javascriptCode kopierenHTTP/1.1 202 Accepted
Link: </job/status/123> rel="http://www.example.com/job-status"
Content-Length: 0
Anfrage #2
vbnetCode kopierenGET /job-status/123
Host: www.example.com
Antwort auf Anfrage #2
cssCode kopierenHTTP/1.1 202 Accepted
Content-Length: 0
Anfrage #3
vbnetCode kopierenGET /job-status/123
Host: www.example.com
Antwort auf Anfrage #3
cssCode kopierenHTTP/1.1 200 OK
Content-Type: json
Content-Length: 25
{"success":"true"}
Sobald der Client den Status 200 OK erhält, kann er aufhören, Statusanfragen zu senden und entsprechend handeln.