HTTPQUERY
한국어

207 Multi-Status

사용법

207 Multi-Status 응답은 하나의 HTTP 요청이 여러 리소스를 건드릴 때 돌아옵니다. 예를 들어 여러 데이터베이스를 갱신하는 POST 요청은 일부에서는 성공하고 일부에서는 실패할 수 있습니다. 응답 본문은 각 리소스에 대한 개별 결과를 나열합니다.

기본적으로 본문은 multistatus를 루트 요소로 하는 XML 문서입니다. 클라이언트는 각 노드를 파싱하여 모든 하위 작업의 결과를 판단합니다.

루트 요소는 0개 이상의 response 요소를 순서에 상관없이 포함합니다. 각 response에는 대상 리소스를 식별하는 href 요소가 들어 있습니다. 두 가지 형식이 있는데, 상태는 리소스 전체를 가리키거나 리소스의 특정 속성을 가리킵니다.

WebDAV

207 Multi-Status 상태 코드는 주로 WebDAV에서 사용됩니다. 일반적인 HTTP 클라이언트가 WebDAV 워크플로 밖에서 이 응답을 마주치는 일은 드뭅니다.

리소스 전체의 상태

하위 status 요소에는 식별된 리소스에 대한 결과 HTTP 상태 코드가 담깁니다. 클라이언트는 여기에 나타나는 표준 HTTP 상태 코드를 처리할 수 있어야 합니다.

<d:response>
  <d:href>http://example.re/tasks</d:href>
  <d:status>HTTP/1.1 200 OK</d:status>
</d:response>

개별 속성의 상태

PROPFIND와 PROPPATCH 메서드는 리소스의 개별 속성을 보고하기 위해 status 대신 propstat을 사용합니다.

<d:response>
  <d:href>http://example.re/tasks</d:href>
  <d:propstat>
    <d:prop>
      <d:getcontentlanguage>
        "en-CA"
      </d:getcontentlanguage>
    </d:prop>
    <d:status>HTTP/1.1 200 OK</d:status>
  </d:propstat>
</d:response>

성공 또는 실패의 표시

207 Multi-Status 응답은 전체 성공, 전체 실패, 또는 둘이 섞인 상태를 나타냅니다. 클라이언트는 각 response 요소를 살펴 작업이 얼마나 완전하게 수행되었는지 판단합니다.

예시

클라이언트가 XML 데이터를 서버에 POST합니다. 서로 독립적인 세 개의 리소스가 관여하며, 서버는 각각에 대한 개별 결과를 반환합니다.

앞의 두 리소스는 성공합니다. 첫 번째는 본문을 반환하지 않고(204), 두 번째는 새 리소스가 생성되었음을 확인해 줍니다(201). 세 번째 리소스는 잠금이 걸려 있어 423 오류를 보고합니다. 클라이언트는 이러한 개별 코드를 바탕으로 전체 작업이 성공했는지 실패했는지 판단합니다.

요청

POST /signup HTTP/1.1
Host: example.com
Content-Type: application/xml
Content-Length: 93

<?xml version="1.0"?>
<person>
  <name>David Smith</name>
  <country>USA</country>
</person>

응답

HTTP/1.1 207 Multi-Status
Content-Type: application/xml; charset="utf-8"
Content-Length: 568

<?xml version="1.0" encoding="utf-8" ?>
<d:multistatus xmlns:d="DAV:">
  <d:response>
    <d:href>http://example.re/signup/r1</d:href>
    <d:status>HTTP/1.1 204 No Content</d:status>
  </d:response>
  <d:response>
    <d:href>http://example.re/signup/r2</d:href>
    <d:status>HTTP/1.1 201 Created</d:status>
  </d:response>
  <d:response>
    <d:href>http://example.re/signup/r3</d:href>
    <d:status>HTTP/1.1 423 Locked</d:status>
    <d:error><d:lock-token-submitted/></d:error>
  </d:response>
</d:multistatus>

코드 참고

.NET

HttpStatusCode.MultiStatus

Rust

http::StatusCode::MULTI_STATUS

Rails

:multi_status

Go

http.StatusMultiStatus

Symfony

Response::HTTP_MULTI_STATUS

Python3.5+

http.HTTPStatus.MULTI_STATUS

Apache HttpComponents Core

org.apache.hc.core5.http.HttpStatus.SC_MULTI_STATUS

Angular

@angular/common/http/HttpStatusCode.MultiStatus