WebDAV 协议对接 GoodSync——通用文件系统接口
WebDAV 的定位
WebDAV(Web Distributed Authoring and Versioning)是一个基于 HTTP/1.1 扩展的文件管理协议。它的设计初衷是让 Web 服务器能像文件系统一样被远程读写。目前很多服务都提供 WebDAV 接口:
- 某些云存储(坚果云、Box、Yandex Disk 等)
- NAS 设备(Synology、QNAP、WD My Cloud 等)
- 自建 WebDAV 服务器(nginx + WebDAV 模块、Apache mod_dav 等)
- 企业内部文件管理系统
GoodSync 原生支持 WebDAV 端点,可以直接读写这些服务的文件。
在 GoodSync 中配置 WebDAV 端点
基础配置
- 端点类型选择「WebDAV」
- 填写服务器信息:
服务器 URL:https://webdav.example.com/remote.php/dav/files/user/
用户名:myuser
密码:********
URL 的格式取决于 WebDAV 服务器的实现:
- Nextcloud:
https://nextcloud.example.com/remote.php/dav/files/用户名/ - Synology NAS:
http://syno-ip:5005/(启用 WebDAV 后) - 自建 nginx:
https://server.example.com/webdav/
HTTP vs HTTPS
强烈推荐使用 HTTPS 版的 WebDAV。如果只有 HTTP 可用:
- 必须在 GoodSync 作业中额外开启应用层 AES-256 加密
- 否则文件内容、用户名密码都会以明文在网络上传输
GoodSync 在检测到 HTTP WebDAV 端点而未开启额外加密时,会弹出警告提示。
主流 WebDAV 服务的配置
坚果云(国内常用)
URL: https://dav.jianguoyun.com/dav/
用户名: 你的坚果云邮箱
密码: 需要在坚果云网页端创建「应用专用密码」(不是登录密码)
注意:坚果云等国内云存储出于安全考虑,要求 WebDAV 连接使用应用专用密码而非账户登录密码。
Nextcloud / OwnCloud
URL: https://nextcloud.example.com/remote.php/dav/files/你的用户名/
用户名: Nextcloud 用户名
密码: 登录密码 或 应用专用密码(Nextcloud 24+ 推荐应用专用密码)
Synology NAS
Synology DSM 启用 WebDAV:
- DSM → 控制面板 → 文件服务 → WebDAV
- 勾选「启用 WebDAV」
- 端口默认 5005(HTTP)或 5006(HTTPS)
- 在 GoodSync 中配置:
URL: https://nas-ip:5006/
用户名: DSM 管理员账户
密码: DSM 密码
nginx WebDAV 自建服务器
# nginx.conf 示例
server {
listen 443 ssl;
server_name webdav.example.com;
ssl_certificate /path/to/cert.pem;
ssl_certificate_key /path/to/key.pem;
location /webdav/ {
alias /var/www/webdav/;
dav_methods PUT DELETE MKCOL COPY MOVE;
dav_access user:rw group:rw all:r;
auth_basic "WebDAV Area";
auth_basic_user_file /etc/nginx/.htpasswd;
}
}
URL: https://webdav.example.com/webdav/
用户名: .htpasswd 中的用户名
密码: .htpasswd 中的密码
WebDAV 端点的已知限制
不支持文件重命名(大多数实现)
很多 WebDAV 服务器不能执行原地重命名,只能通过「复制到新路径 + 删除旧路径」来实现。GoodSync 会自动处理这个限制:
- 先 PUT 新文件名的对象
- 确认上传成功后再 DELETE 旧文件
- 如果两步之间失败,两个文件会同时存在(不会丢失数据)
不支持保留修改时间戳
WebDAV 协议虽然有 PROPPATCH 方法可以设置文件属性,但大多数实现不支持设置自定义的修改时间戳。GoodSync 的对策:
- 传输过程中尽力保留时间戳
- 时间戳保持失败时,用 GoodSync 内部状态文件记录源文件时间戳
- 下次同步时读取内部状态文件进行对比(文件内容哈希优先)
并发写入冲突
如果多台设备同时通过 WebDAV 写入同一个文件,WebDAV 服务器通常不会做锁定控制(WebDAV 有 LOCK 方法但很少实现)。GoodSync 的双向同步会通过冲突检测来处理这种情况。
WebDAV vs 其他协议的选择
| 对比项 | WebDAV | FTP/SFTP | GoodSync Connect |
|---|---|---|---|
| 易用性 | 简单(HTTP 上跑) | 中等(端口/主动被动模式) | 最简单(账户体系) |
| 加密 | HTTPS(推荐) | SFTP(SSH 加密) | GSTP(TLS + AES-256) |
| 块级传输 | 不支持 | 不支持 | 支持 |
| 端点要求 | 对方有 WebDAV 服务 | 对方有 FTP/SFTP 服务 | 双方都装 GoodSync |
| 适用场景 | 接入各种云/NAS | 传统远程服务器 | GoodSync 设备之间 |
决策规则:
- 对方设备没有 GoodSync → 看对方能提供什么接口:能提供 WebDAV → 用 WebDAV;能提供 SFTP → 用 SFTP
- 对方设备有 GoodSync → 优先用 GoodSync Connect(功能最全、性能最好)
安全建议
- 始终用 HTTPS:只有 HTTP 的 WebDAV 端点务必开启 GoodSync 额外加密
- 使用应用专用密码:对于坚果云、Nextcloud 等支持应用专用密码的服务,不要用账户主密码
- 限制访问 IP:WebDAV 服务器上配置防火墙,只允许 GoodSync 运行设备的 IP 访问
- 定期更换密码:WebDAV 密码在传输过程中可能被记录(即使 HTTPS),定期更换是好习惯