424 Failed Dependency
Uso
El error 424 Failed Dependency forma parte de WebDAV, que se utiliza como un sistema de archivos sobre HTTP. Cuando se recibe este error, el código aparece dentro del cuerpo del mensaje como parte de una respuesta 207 Multi-Status. Es un ejemplo en el que una respuesta correcta contiene una indicación de fallo.
El cliente es responsable de analizar la respuesta multiestado y, al descubrir errores 424 Failed Dependency, determinar el problema y resolverlo en consecuencia.
Este estado se encuentra durante una acción PROPPATCH, en la que se modifican varias propiedades a la vez en una única solicitud HTTP. Por lo general, una solicitud HTTP o bien tiene éxito o bien falla. Si una de las propiedades no se puede establecer, falla la solicitud completa. Para las propiedades establecidas correctamente antes del fallo se utiliza el estado 424 Failed Dependency.
Impacto en SEO
Los motores de búsqueda como Google no indexan una URL con un estado de respuesta 424. Las URL indexadas previamente que devuelven este código de estado se eliminan de los resultados de búsqueda.
Ejemplo
El cliente envía una solicitud para actualizar los números de asiento y el nombre de un registro de inscripción a una conferencia. Tras la inscripción inicial, los asientos se pueden añadir, eliminar o cambiar. No se permite ninguna modificación del nombre. Como el cambio de nombre se deniega con 403 Forbidden, se deniega la solicitud completa, lo que significa que las actualizaciones de la distribución de asientos no se completan.
Solicitud
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>
Respuesta
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>
Cómo solucionarlo
Analice el cuerpo de la respuesta 207 Multi-Status y localice la subsolicitud con un código de fallo distinto de 424. Las entradas 424 son fallos en cascada. La causa raíz es la operación que presenta un error diferente, como 403, 409 o 423.
Corrija primero la operación que constituye la causa raíz. En una solicitud PROPPATCH, que una sola actualización de propiedad falle con 403 Forbidden hace que todas las demás actualizaciones de propiedades de esa misma solicitud fallen con 424. Resuelva la propiedad prohibida (elimine el campo problemático o corrija los permisos) y, después, reintente el PROPPATCH completo.
Compruebe si existen bloqueos de recursos. Un estado 423 Locked en una subsolicitud se propaga en cascada como 424 a todas las demás operaciones del lote. Desbloquee el recurso o incluya el token de bloqueo correcto en la cabecera If antes de reintentar.
En algunas implementaciones de WebDAV el orden importa. Coloque primero las operaciones independientes y al final las dependientes, de modo que los fallos parciales afecten a menos elementos.
Divida las solicitudes por lotes grandes en grupos más pequeños durante la depuración. Aislar las operaciones individuales hace visible la verdadera dependencia fallida sin necesidad de analizar una respuesta multiestado compleja.
En el lado del servidor, devuelva mensajes de error descriptivos en cada elemento <d:responsedescription> para que los clientes identifiquen la propiedad o el recurso que falla sin tener que adivinarlo.
Referencias de código
.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