Zum Hauptinhalt springen

4.6. Verwendung von HTTP-Statuscodes

4.6. Verwendung von HTTP-Statuscodes

Anwendungen, die HTTP verwenden, DÜRFEN nur registrierte HTTP-Statuscodes verwenden. Sie SOLLTEN den spezifischsten anwendbaren Statuscode verwenden, obwohl sie nicht auf die in [HTTP] definierten beschränkt sind; andere Statuscodes können verwendet werden, solange sie im Register "HTTP Status Codes" registriert sind.

Bei der Spezifizierung der Verwendung von Statuscodes SOLLTEN sich Anwendungen auf ihre generische Semantik konzentrieren und nicht auf ihre spezifische Bedeutung in einem bestimmten Kontext. Zum Beispiel ist es angemessen zu sagen:

Wenn die Anfrage erfolgreich ist, sendet der Server eine 200 OK-Antwort.

aber nicht:

Der Server sendet eine 200 OK-Antwort, wenn der Benutzer authentifiziert und berechtigt ist, auf die Ressource zuzugreifen.

Letzteres ist zu spezifisch, da es mehrere Dinge vermischt: Erfolg, Authentifizierung und Autorisierung. Eine angemessenere Aussage wäre:

Wenn die Anfrage erfolgreich ist, sendet der Server eine 200 OK-Antwort. Wenn Authentifizierung erforderlich, aber nicht bereitgestellt ist, sendet der Server eine 401 Unauthorized-Antwort. Wenn der Client nicht berechtigt ist, auf die Ressource zuzugreifen, sendet der Server eine 403 Forbidden-Antwort.

Anwendungen SOLLTEN NICHT neue Statuscodes definieren. In den seltenen Fällen, in denen ein neuer Statuscode wirklich notwendig ist, MUSS er gemäß dem Verfahren in [HTTP] Abschnitt 16.2 registriert werden.

Bei der Auswahl eines Statuscodes ist das allgemeine Prinzip, den spezifischsten auszuwählen, der zutrifft. Der Statuscode sollte den Hauptgrund für die Antwort vermitteln.

Wenn beispielsweise eine Anfrage fehlschlägt, weil die Ressource nicht existiert, ist 404 Not Found angemessen. Wenn sie fehlschlägt, weil der Client nicht berechtigt ist, darauf zuzugreifen, ist 403 Forbidden angemessen, auch wenn die Ressource möglicherweise nicht existiert.

Anwendungen SOLLTEN die folgenden Statuscodes angemessen verwenden:

  • 200 OK für erfolgreiche Anfragen, bei denen die Antwort eine Darstellung enthält.

  • 201 Created für erfolgreiche Anfragen, die zur Erstellung einer neuen Ressource führen.

  • 202 Accepted für Anfragen, die zur Verarbeitung akzeptiert wurden, bei denen die Verarbeitung jedoch noch nicht abgeschlossen wurde.

  • 204 No Content für erfolgreiche Anfragen, bei denen keine Darstellung zu senden ist.

  • 301 Moved Permanently oder 308 Permanent Redirect für Ressourcen, die dauerhaft verschoben wurden.

  • 302 Found oder 307 Temporary Redirect für Ressourcen, die vorübergehend verschoben wurden.

  • 304 Not Modified für bedingte Anfragen, bei denen sich die Ressource nicht geändert hat.

  • 400 Bad Request für fehlerhafte Anfragen.

  • 401 Unauthorized für Anfragen, die Authentifizierung erfordern.

  • 403 Forbidden für Anfragen, bei denen der Client nicht berechtigt ist.

  • 404 Not Found für Anfragen an nicht existierende Ressourcen.

  • 405 Method Not Allowed für Anfragen mit einer unangemessenen Methode.

  • 406 Not Acceptable wenn der Server keine Darstellung generieren kann, die der Client akzeptiert.

  • 409 Conflict wenn die Anfrage mit dem aktuellen Zustand der Ressource in Konflikt steht.

  • 410 Gone für Ressourcen, die existierten, aber dauerhaft entfernt wurden.

  • 415 Unsupported Media Type wenn der Content-Type der Anfrage nicht unterstützt wird.

  • 500 Internal Server Error für serverseitige Fehler.

  • 501 Not Implemented wenn der Server die angeforderte Funktionalität nicht unterstützt.

  • 503 Service Unavailable wenn der Server vorübergehend nicht in der Lage ist, die Anfrage zu bearbeiten.