在 Zotero 的同步设置、Obsidian 的同步插件、坚果云或群晖 NAS 的设置里,常会碰到「WebDAV」,旁边要你填地址、用户名和密码。这篇用平常的话讲讲它是什么、怎么用,以及它和 SFTP 有什么区别。
WebDAV 是什么
一句话:WebDAV 让网页服务器可以当网络盘、共享文件夹来用。
打开网页用的 HTTP,本来只会取文件、放文件和删文件,不能列出文件夹里有什么,也不能新建文件夹或改名。WebDAV 给 HTTP 补上了这些,还能给文件「加锁」,免得两个人同时改一个文件、后存的把先存的盖掉。它是一个公开的标准,1999 年首次发布,现在用的是 2007 年的版本(RFC 4918)。
正因为它就是 HTTP,WebDAV 有几个实在的好处:
- 地址就是普通的网址,
https://开头,和打开网页走同一条路(443 端口)。公司防火墙、代理服务器一般都放行,不用另开端口。 - 任何能发 HTTP 请求的软件都能当它的客户端,所以很多 App 都内置了 WebDAV 同步。
在哪里会遇到它
- 坚果云:地址是
https://dav.jianguoyun.com/dav/,用户名是坚果云账号。密码不是登录密码,而是在网页版「账户信息 → 安全选项 → 第三方应用管理」里生成的应用密码。免费用户每 30 分钟最多 600 次请求,单个文件默认最大 500 MB。 - Nextcloud:地址是
https://服务器/remote.php/dav/files/用户名/,开了两步验证时要用「应用密码」。 - NAS:群晖装上「WebDAV Server」套件后,HTTP 默认端口是 5005,HTTPS 是 5006。威联通(QNAP)在控制台的网络和文件服务里开启。
- 用它同步的软件:Zotero 的附件同步(文献条目本身仍走 Zotero 自己的服务器)、Obsidian 的 Remotely Save 插件、Joplin,以及 KeePass 2.x(自带,可以按网址打开和同步密码库)。
挂成电脑上的一个盘
WebDAV 也能直接挂到电脑上,像 U 盘一样在文件管理器里拖放文件。下面用 https://dav.example.com/docs/ 代表你的地址。
macOS:在「访达」里选「前往」>「连接服务器」(⌘K),在「服务器地址」栏填地址,点「连接」,再输入用户名和密码。挂好后它出现在边栏的「位置」下,点旁边的「推出」按钮就断开了。
Windows:打开文件资源管理器,点左侧的「此电脑」,再点上方的「…」按钮,选「映射网络驱动器」(Windows 10 在「计算机」选项卡上),在「文件夹」一栏直接填地址。微软在 2023 年 11 月把系统自带的这个功能列为弃用,现在仍能用,但限制不少:
- 默认只在
https://地址上发送密码,服务器只有http://时多半连不上; - 单个文件默认最大约 50 MB;
- 文件很多(上千个)的文件夹可能列不全;
- 连不上时,先看系统里的 WebClient 服务有没有在运行。
被这些限制卡住时,可以改用 rclone 这类第三方工具挂载(Windows 上要先装 WinFsp)。
Linux:在 GNOME 的「文件」里点侧栏的「其他位置」,在「连接到服务器」一栏填 davs://dav.example.com/docs/(https 换成 davs,http 换成 dav),点「连接」。
用的时候注意
- 尽量用 HTTPS。WebDAV 登录常用的 Basic 认证只是把用户名和密码换了一种写法(Base64 编码),并没有加密。走
http://时,路上任何一台机器都能读到你的密码。 - 能用应用密码就用应用密码。它只给一个软件用,泄露了可以单独作废,不用改账号密码。
- 大量小文件很慢。每个文件至少要来回一次请求,几千个小文件,时间大都花在等待上,有请求次数限制的服务还会限流。能打包就先打包再传。
和 SFTP 有什么区别
SFTP 也是传文件用的,但它走 SSH:能 SSH 登录一台服务器,一般就能用 SFTP 管理上面的文件。两者比一比:
| WebDAV | SFTP | |
|---|---|---|
| 走什么路 | HTTP 或 HTTPS,和网页一样 | SSH 连接 |
| 默认端口 | 443(HTTPS),NAS 常用自己的端口 | 22 |
| 加密 | 用 HTTPS 时加密,用 HTTP 时不加密 | 始终加密 |
| 防火墙和代理 | 一般都能通过 | 22 端口常被封,HTTP 代理通常走不了 |
| 服务器那边 | 网盘、NAS 或专门架设的服务 | 能 SSH 登录的机器一般就有 |
| 文件权限、符号链接 | 基础协议里没有 | 有 |
| 断点续传 | 下载能续,上传没有统一的做法 | 上传下载都能续 |
| 常见用途 | 网盘、NAS 共享、App 同步 | 管理服务器上的文件、部署、运维 |
简单说:要连网盘、NAS 或只认 WebDAV 的 App,或者网络只放行网页流量,就用 WebDAV;存文件的那台机器能 SSH 登录,就用 SFTP。如果手边只有一个终端,连 SFTP 都开不了,还可以用 ZMODEM(rz/sz)。
NAS 在内网时,怎么从外面连
常见的情况是:NAS 在家里或公司的内网,地址是 nas.internal:5005,不对外开放;但你能 SSH 登录同一网络里的另一台机器(跳板机)。这时可以用 SSH 的「本地端口转发」把它接到自己电脑上:
ssh -N -L 8080:nas.internal:5005 alice@jump.example.com
这条连接开着时,本机的 http://127.0.0.1:8080/ 就是 NAS 的 WebDAV,挂载、填进 App 都行。
注意 SSH 只加密本机到跳板机这一段,跳板机到 NAS 仍是内网里的普通 HTTP。另外 Windows 自带的映射照样不肯在这个 http:// 地址上发送密码,在 Windows 上改用 rclone 更省事。
在 ShellRS 里
ShellRS 是一个免费、开源的 SSH 客户端。它不支持 WebDAV,但能帮上前面说的两件事:
- 用 SFTP 管文件:能 SSH 登录的服务器,在 ShellRS 里打开它的「SFTP」标签,两栏分别是本机和服务器上的文件,拖过去就能上传下载,传输中断后可以续传。
- 把端口转发存成规则:上面那条
ssh -L不用每次手敲。点标题栏的端口转发图标,在列表上方点「+」,选「本地转发」,「经由主机」选那台跳板机,监听127.0.0.1:8080,目标填nas.internal:5005。「创建」只保存规则,用每行末尾的按钮启动,也可以勾选「启动 ShellRS 时自动开启」。每条规则用自己的 SSH 连接,关掉终端标签不影响它,断线后会自动重连。
转发开好后,访问 WebDAV 仍用访达、文件资源管理器或 rclone。
详见 ShellRS 使用手册的「端口转发」和「SFTP」两节,ShellRS 可以在下载页获取。