HTTPQUERY
한국어

424 Failed Dependency

사용법

424 Failed Dependency 오류는 HTTP 위의 파일 시스템으로 쓰이는 Webdav의 일부입니다. 이 오류를 받으면 해당 코드는 207 Multi-Status 응답의 일부로 메시지 본문 안에 나타납니다. 성공 응답이 실패 표시를 담고 있는 사례입니다.

클라이언트는 멀티 상태 응답을 파싱하고, 424 Failed Dependency 오류를 발견하면 문제를 판단해 그에 맞게 해결할 책임이 있습니다.

이 상태는 하나의 HTTP 요청에서 여러 속성을 한 번에 수정하는 PROPPATCH 작업 중에 마주치게 됩니다. 일반적으로 HTTP 요청은 성공하거나 실패하거나 둘 중 하나입니다. 속성 중 하나라도 설정에 실패하면 요청 전체가 실패합니다. 실패 이전에 성공적으로 설정된 속성에는 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 요청에서 속성 갱신 하나가 403 Forbidden으로 실패하면 같은 요청의 다른 모든 속성 갱신이 424로 실패합니다. 금지된 속성을 해결한 뒤(문제가 된 필드를 제거하거나 권한을 바로잡은 뒤) PROPPATCH 전체를 다시 시도하세요.

리소스 잠금을 확인하세요. 하위 요청 하나의 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