HTTPQUERY
Deutsch

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