424 Failed Dependency
Verwendung
Der Fehler 424 Failed Dependency ist Teil von Webdav, das als Dateisystem über HTTP eingesetzt wird. Wird dieser Fehler empfangen, erscheint der Code innerhalb des Nachrichtenrumpfs als Teil einer 207-Multi-Status-Antwort. Dies ist ein Beispiel dafür, dass eine erfolgreiche Antwort einen Hinweis auf einen Fehlschlag enthält.
Der Client ist dafür verantwortlich, die Multi-Status-Antwort zu parsen und, sobald er darin Fehler vom Typ 424 Failed Dependency entdeckt, das Problem zu bestimmen und entsprechend zu beheben.
Dieser Status tritt bei einer PROPPATCH-Aktion auf, bei der mehrere Eigenschaften gleichzeitig in einer einzigen HTTP-Anfrage geändert werden. Im Allgemeinen gelingt eine HTTP-Anfrage entweder oder sie schlägt fehl. Schlägt das Setzen einer der Eigenschaften fehl, scheitert die gesamte Anfrage. Für die vor dem Fehlschlag erfolgreich gesetzten Eigenschaften wird der Status 424 Failed Dependency verwendet.
SEO-Auswirkung
Suchmaschinen wie Google indexieren keine URL mit dem Antwortstatus 424. Zuvor indexierte URLs, die diesen Statuscode zurückgeben, werden aus den Suchergebnissen entfernt.
Beispiel
Der Client sendet eine Anfrage, um die Sitzplatznummern und den Namen eines Konferenz-Registrierungsdatensatzes zu aktualisieren. Nach der Erstregistrierung können Sitzplätze hinzugefügt, entfernt oder geändert werden. Änderungen am Namen sind nicht erlaubt. Da die Namensänderung mit 403 Forbidden abgelehnt wird, wird die gesamte Anfrage abgelehnt, womit auch die Aktualisierungen der Sitzplatzanordnung nicht ausgeführt werden.
Anfrage
PROPPATCH /update.html HTTP/1.1
Host: example.com
Content-Type: application/xml; charset="utf-8"
Content-Length: 305
<?xml version="1.0" encoding="utf-8" ?>
<d:propertyupdate xmlns:d="DAV:"
xmlns:z="urn:example">
<d:set>
<d:prop>
<z:seats>
<z:seatnumber>100</z:seatnumber>
<z:seatnumber>101</z:seatnumber>
</z:seats>
</d:prop>
<d:prop>
<d:name>Smith</d:name>
</d:prop>
</d:set>
</d:propertyupdate>
Antwort
HTTP/1.1 207 Multi-Status
Content-Type: application/xml; charset="utf-8"
Content-Length: 528
<?xml version="1.0" encoding="utf-8" ?>
<d:multistatus xmlns:d="DAV:"
xmlns:z="urn:example">
<d:response>
<d:href>
http://example.com/registrants/update.html
</d:href>
<d:propstat>
<d:prop><z:seats/></d:prop>
<d:status>
HTTP/1.1 424 Failed Dependency
</d:status>
</d:propstat>
<d:propstat>
<d:prop><z:name/></d:prop>
<d:status>HTTP/1.1 403 Forbidden</d:status>
</d:propstat>
<d:responsedescription>
The name of the registrant is not modifiable.
</d:responsedescription>
</d:response>
</d:multistatus>
Behebung
Parsen Sie den Rumpf der 207-Multi-Status-Antwort und suchen Sie die Teilanfrage mit einem Fehlercode ungleich 424. Die 424-Einträge sind Folgefehler. Die eigentliche Ursache ist die Operation mit einem anderen Fehler wie 403, 409 oder 423.
Beheben Sie zuerst die ursächliche Operation. In einer PROPPATCH-Anfrage führt eine einzelne Eigenschaftsaktualisierung, die mit 403 Forbidden fehlschlägt, dazu, dass alle übrigen Eigenschaftsaktualisierungen derselben Anfrage mit 424 fehlschlagen. Lösen Sie das Problem mit der verbotenen Eigenschaft (entfernen Sie das betreffende Feld oder korrigieren Sie die Berechtigungen) und wiederholen Sie dann die gesamte PROPPATCH-Anfrage.
Prüfen Sie auf Ressourcensperren. Ein Status 423 Locked bei einer Teilanfrage pflanzt sich als 424 auf jede andere Operation des Stapels fort. Entsperren Sie die Ressource oder geben Sie vor dem erneuten Versuch das korrekte Lock-Token im If-Header an.
In manchen Webdav-Implementierungen spielt die Reihenfolge eine Rolle. Platzieren Sie unabhängige Operationen zuerst und abhängige zuletzt, damit Teilfehlschläge weniger Elemente betreffen.
Teilen Sie beim Debuggen große Stapelanfragen in kleinere Gruppen auf. Einzelne Operationen zu isolieren macht die tatsächlich fehlschlagende Abhängigkeit sichtbar, ohne eine komplexe Multi-Status-Antwort parsen zu müssen.
Geben Sie auf Serverseite in jedem <d:responsedescription>-Element aussagekräftige Fehlermeldungen zurück, damit Clients die fehlschlagende Eigenschaft oder Ressource ohne Raten identifizieren können.
Code-Referenzen
.NET
HttpStatusCode.FailedDependency
Rust
http::StatusCode::FAILED_DEPENDENCY
Rails
:failed_dependency
Go
http.StatusFailedDependency
Symfony
Response::HTTP_FAILED_DEPENDENCY
Python3.5+
http.HTTPStatus.FAILED_DEPENDENCY
Apache HttpComponents Core
org.apache.hc.core5.http.HttpStatus.SC_FAILED_DEPENDENCY
Angular
@angular/common/http/HttpStatusCode.FailedDependency