OpenList 的 WebDAV 挂载点不是根路径
一、缘起:能打开网页,却挂不上
我在小主机上用 Docker 跑了一个 OpenList,网页端一直正常,手机播放器通过 WebDAV 挂载却总失败。播放器只给了一句很含糊的"连接失败",抓包才看到关键一行:
PROPFIND / HTTP/1.1 405 Method Not Allowed
第一反应是账号密码错了。但 401 才和鉴权有关,405 是"方法不允许"——服务器收到了请求,只是这个路径不接受 PROPFIND 这个方法。方向立刻就变了:不是身份问题,是地址问题。
二、405 和 401 别混
WebDAV 客户端连上服务器,第一件事不是上传下载,而是发 PROPFIND 问"这个目录里有什么"。这个方法的响应码能直接说明问题:
| 响应码 | 含义 | 通常原因 |
|---|---|---|
| 401 | 未授权 | 用户名/密码错、没带 Basic Auth |
| 403 | 禁止访问 | 账号没有该目录权限 |
| 404 | 路径不存在 | 地址拼错、容器没起 |
| 405 | 方法不允许 | 路径不是 WebDAV 端点 |
| 207 | 多状态(正常) | 目录列表返回成功 |
看到 405,基本可以把"改密码"这条路划掉了。
三、两个地址一对比,原因就出来了
不用装客户端,直接用 curl 发同样的请求:
curl -s -o /dev/null -w '%{http_code}\n' -X PROPFIND \
-H 'Depth: 1' -u '用户名:密码' \
http://192.168.1.10:5244/
根路径返回 405。把地址换成 /dav 再试:
curl -s -o /dev/null -w '%{http_code}\n' -X PROPFIND \
-H 'Depth: 1' -u '用户名:密码' \
http://192.168.1.10:5244/dav/
这次返回 207 Multi-Status,响应体里是标准的 XML 目录列表,说明 WebDAV 服务本身完全正常。
原因很简单:OpenList 的 WebDAV 端点固定在 /dav,根路径留给 Web UI。 播放器里填 http://192.168.1.10:5244,它就会去请求根路径,于是稳定拿到 405。
把挂载地址改成:
http://192.168.1.10:5244/dav
用户名和密码填 OpenList 的管理员账号,保存后立刻能浏览目录。
四、顺手记下几个容易踩的点
末尾斜杠。 多数客户端对 /dav 和 /dav/ 都能处理,但个别实现会把两者当成不同路径。填 /dav 不行时,加个斜杠再试一次。
端口别写成 Web UI 的访问端口。 这里的 5244 是容器映射出来的端口,Web UI 和 WebDAV 共用同一个端口,区别只在路径。如果改过 ports 映射,客户端里也要跟着改。
Basic Auth 是必须的。 WebDAV 挂载走的是 HTTP Basic 认证,账号密码会随请求头发送。如果只在局域网用问题不大;要暴露到公网,记得套一层 HTTPS,别让密码明文过网。
根目录能列不代表能写。 207 只说明"读得到"。上传失败要单独看账号权限和存储驱动的写权限,别把两件事混在一起排查。
五、总结
- WebDAV 报 405 先查路径,不查密码;
PROPFIND打到的必须是真的 WebDAV 端点。 - OpenList 的端点是
/dav,根路径是网页界面,一条 curl 就能验证。 - 排查顺序建议:405/401 分清 → curl 对比路径 → 再看权限和端口,比在客户端里反复试快得多。
END
- 点赞
- 收藏
- 关注作者
评论(0)