208 Already Reported
HTTP response status code 208 Already Reported indicates a resource has already been enumerated in a previous part of the 207 response. Servers use this code to avoid repeating information about a resource with multiple bindings, preventing both redundant data and infinite loops.
Usage
When a client receives 208 Already Reported inside a 207 multi-status body, the resource was already described earlier in the same response. No additional details are provided for the duplicate entry.
This status code exists specifically for WebDAV
Binding Extensions. A resource bound to
multiple locations within the same collection appears
once in full and once as 208 Already Reported,
breaking potential recursion when a Depth: infinity
request encounters a resource referencing itself.
WebDAV Only
The 208 Already Reported status code appears exclusively inside 207 multi-status response bodies. A server never sends 208 as a top-level HTTP response status.
Example
The client sends a PROPFIND request with
Depth: infinity to enumerate the /main/
collection. The /main/dependent resource is bound
to the same underlying resource as /main/ itself.
The server returns the full details for /main/
first, then returns 208 Already Reported for
/main/dependent to break the recursive loop.
Request
PROPFIND /main/ HTTP/1.1
Host: www.example.re
Depth: infinity
DAV: bind
Content-Type: application/xml; charset="utf-8"
Content-Length: 139
<?xml version="1.0" encoding="utf-8" ?>
<d:propfind xmlns:d="DAV:">
<d:prop>
<d:name/>
<d:link/>
</d:prop>
</d:propfind>
Response
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/main/</d:href>
<d:propstat>
<d:prop>
<d:name>Main Resource</d:name>
<d:resource-id>
<href>urn:uuid:1234-0000</href>
</d:resource-id>
</d:prop>
<d:status>HTTP/1.1 200 OK</d:status>
</d:propstat>
</d:response>
<d:response>
<d:href>
http://example.re/main/dependent
</d:href>
<d:propstat>
<d:prop>
<d:name>Main Resource</d:name>
<d:resource-id>
<href>urn:uuid:1234-0000</href>
</d:resource-id>
</d:prop>
<d:status>
HTTP/1.1 208 Already Reported
</d:status>
</d:propstat>
</d:response>
</d:multistatus>
Code references
.NET
HttpStatusCode.AlreadyReported
Rust
http::StatusCode::ALREADY_REPORTED
Rails
:already_reported
Go
http.StatusAlreadyReported
Symfony
Response::HTTP_ALREADY_REPORTED
Python3.5+
http.HTTPStatus.ALREADY_REPORTED
Apache HttpComponents Core
org.apache.hc.core5.http.HttpStatus.SC_ALREADY_REPORTED
Angular
@angular/common/http/HttpStatusCode.AlreadyReported
Takeaway
HTTP response status code 208 Already Reported tells the client a resource was already enumerated earlier in the same 207 response body. This prevents duplicate data and breaks infinite loops caused by recursive bindings in WebDAV collections.
See also
- RFC 5842: Binding Extensions to Web Distributed Authoring and Versioning (WebDAV)
- 207
- 508
- HTTP status codes