207 Multi-Status
WebDAV response carrying an XML body with a separate status for each resource affected by the request.
Status
HTTP/1.1 207 Multi-Status
Details
- Category: 2xx
- Status: Standard. Registered with IANA and defined by a current standards-track RFC.
- Specification: RFC 4918 §11.1
- Cacheable: Not cacheable
- Response body: Allowed
- Retry: Retry only after changing the request
One WebDAV request can touch many resources, and they will not all end the same way. 207 wraps the individual outcomes in a DAV:multistatus XML document, one DAV:response element per URL, each with its own status line.
The 207 on the status line itself carries no success or failure meaning. A request in which every member failed still returns 207, so a client must parse the body to know what actually happened.
Headers
- Content-Type: Must be application/xml or text/xml. The body is a DAV:multistatus document.
Common causes
- A PROPFIND enumerated a collection and reported per-member properties.
- A COPY, MOVE, or DELETE across a collection succeeded for some members and failed for others.
How to fix it
As the client
- Parse every DAV:response element. Do not infer success from the 207 alone.
- Retry only the members that reported a retryable failure, not the whole operation.
As the server
- Include a status for every member so clients can reconcile state precisely.
- Use DAV:responsedescription to explain non-obvious failures.
Examples
PROPFIND /dav/team/ HTTP/1.1
Host: files.example.com
Depth: 1
HTTP/1.1 207 Multi-Status
Content-Type: application/xml; charset=utf-8
<?xml version="1.0"?>
<D:multistatus xmlns:D="DAV:">
<D:response>
<D:href>/dav/team/notes.txt</D:href>
<D:status>HTTP/1.1 200 OK</D:status>
</D:response>
<D:response>
<D:href>/dav/team/locked.txt</D:href>
<D:status>HTTP/1.1 423 Locked</D:status>
</D:response>
</D:multistatus>