HTTPQUERY
日本語

424 Failed Dependency

使い方

424 Failed Dependency エラーは、HTTP 上のファイルシステムとして使われる WebDAV の一部です。このエラーを受け取ると、そのコードは 207 Multi-Status レスポンスの一部としてメッセージボディ内に現れます。これは、成功したレスポンスが失敗の表示を含む一例です。

クライアントはマルチステータスのレスポンスを解析し、424 Failed Dependency エラーを見つけた場合は問題を特定して適切に解決する責任を負います。

このステータスは、1回の HTTP リクエストで複数のプロパティを同時に変更する PROPPATCH の操作中に遭遇します。一般に、HTTP リクエストは成功するか失敗するかのいずれかです。プロパティのうち1つの設定が失敗すると、リクエスト全体が失敗します。失敗の前に正常に設定されたプロパティには、424 Failed Dependency ステータスが使われます。

SEO への影響

Google のような検索エンジンは、424 のレスポンスステータスを持つ URL をインデックスしません。このステータスコードを返す、以前にインデックスされていた URL は検索結果から削除されます。

例

クライアントが、カンファレンスの登録レコードについて座席番号と氏名を更新するリクエストを送信します。初回登録後、座席は追加・削除・変更できます。氏名の変更は一切許可されていません。氏名の変更が 403 Forbidden で拒否されるため、リクエスト全体が拒否され、座席配置の更新も完了しません。

リクエスト

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>

レスポンス

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>

対処方法

207 Multi-Status のレスポンスボディを解析し、424 以外の失敗コードを持つサブリクエストを見つけます。424 のエントリは連鎖的な失敗です。根本原因は、403、409、423 といった異なるエラーを伴う操作です。

まず根本原因となっている操作を修正します。PROPPATCH リクエストでは、1つのプロパティ更新が 403 Forbidden で失敗すると、同じリクエスト内の他のすべてのプロパティ更新が 424 で失敗します。禁止されているプロパティを解消し(問題のフィールドを削除するか権限を修正し)、その後 PROPPATCH 全体を再試行します。

リソースのロックを確認します。1つのサブリクエストにおける 423 Locked ステータスは、そのバッチ内の他のすべての操作に 424 として連鎖します。再試行の前に、リソースのロックを解除するか、正しいロックトークンを If ヘッダーに含めます。

一部の WebDAV 実装では順序が重要です。独立した操作を先に、依存する操作を後に配置することで、部分的な失敗の影響を受ける項目を減らせます。

デバッグ時には、大きなバッチリクエストをより小さなグループに分割します。個々の操作を切り分けることで、複雑なマルチステータスのレスポンスを解析しなくても、本当に失敗している依存関係が見えるようになります。

サーバー側では、クライアントが推測せずに失敗したプロパティやリソースを特定できるよう、各 <d:responsedescription> 要素に説明的なエラーメッセージを返します。

コードリファレンス

.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