Bug: webdav_httpd/1.0.1 returns HTTP 200 instead of 207 for PROPFIND requests, breaking Zotero 8/9 WebDAV sync
Device: GL-BE3600 (Slate 7)
Firmware: v4.8.3
Impact: Zotero WebDAV sync is completely broken for anyone on Zotero 8 or 9 using the router's built-in WebDAV server. Worked fine on Zotero 7.
Root Cause
The router's webdav_httpd/1.0.1 is returning HTTP 200 in response to a PROPFIND request instead of the required HTTP 207 Multi-Status. This is confirmed non-compliant with RFC 4918 §9.1.
The likely trigger is a change in how Zotero 8+ (and the underlying Mozilla networking library) handles preemptive HTTP authentication — the PROPFIND may be going out without credentials first, and the server responds with 200 anonymously instead of 401, meaning Zotero never gets a proper authenticated 207 response.
Additionally, the server appears to handle PROPFIND requests differently depending on the XML namespace syntax in the request body:
- Prefixed namespace (old style) → correctly returns
207 Multi-Status
- Default namespace (new style, used by Zotero 8+) → incorrectly returns
200 OK
Reproduction
This returns the correct 207:
curl -v -k -X PROPFIND https://192.168.8.1:6008/disk1_part1/zotero/ \
-u user:pass -H "Depth: 0" -H "Content-Type: text/xml" \
-d "<?xml version='1.0'?><D:propfind xmlns:D='DAV:'><D:prop><D:resourcetype/></D:prop></D:propfind>"
This returns the wrong 200 (Zotero's exact request format):
curl -v -k -X PROPFIND https://192.168.8.1:6008/disk1_part1/zotero/ \
-u user:pass -H "Depth: 0" -H "Content-Type: text/xml" \
-d "<propfind xmlns='DAV:'><prop><getcontentlength/></prop></propfind>"
References
Zotero forum thread: WebDAV Syncing in Zotero 9 D1340576435 - Zotero Forums
Zotero lead developer (dstillman): *"A WebDAV server has to return 207 for a PROPFIND request, not 200. The change here likely has to do with how Zotero (and the underlying Mozilla platform) handles preemptive HTTP authentication, but the server should be returning 401 to require authentication, not a 200."
RFC 4918 §9.1 requires PROPFIND to always return 207 Multi-Status.
Please update webdav_httpd to correctly handle PROPFIND requests and return 207. Happy to provide additional logs if needed.
