搜索这个问题,首页多半是没有结论的论坛帖。原因之一是:「Windows 连不上 WebDAV」不是一种故障,至少有九种,而且 Windows 会用同一句含糊的提示报告其中好几种。
所以按症状查。先在表里找到你看到的那句话,再去做它指向的检查。前两项能解决绝大多数情况,后面每一条都是「穿着相似提示的另一个问题」。
| Windows 显示的内容 | 原因 | 修法 |
|---|---|---|
错误代码: 0x80070043 | WebClient 未运行、HTTP 上的 Basic 认证,或 URL 形式不对 | 检查 1 到 3,详见 错误 0x80070043 |
发生系统错误 67。 | 同样三个原因,由 net use 报出 | net use 错误 67 |
| 你输入的文件夹似乎无效 | 多数是 WebClient 没运行,或子路径不对 | 检查 1 和 3 |
超过约 50MB 的文件报 0x800700DF | FileSizeLimitInBytes 默认 50,000,000 字节 | 50MB 限制 |
发生系统错误 5。 | 账号或密码错误,或对内容没有权限 | 检查 4 |
发生系统错误 1244。 | 服务器没启用任何认证方式,或登录类型不匹配 | 服务器侧 |
发生系统错误 58。 | 你用的名字不在服务器的主机绑定里 | 服务器侧 |
发生系统错误 59。 | 站点或其应用程序池已停止 | 服务器侧 |
发生系统错误 224。 | URL 所在区域不被重定向程序信任 | 加入受信任站点 |
发生系统错误 1397。(相互身份验证失败) | 证书认证的映射驱动器在空闲后重连 | 断开再重新映射 |
| 能挂载,但在 Mac 上写入失败 | Finder 需要声明 LOCK 的 class 2 服务器 | Mac 上 WebDAV 很慢 |
上面这些错误号和文本,连 1244 的拼写错误在内,都出自微软的 WebDAV 重定向程序文档。
检查 1:WebClient 服务到底有没有在跑
Windows 上每一个映射的 WebDAV 驱动器都走 WebClient 服务。微软在 2023 年 11 月弃用了它,并在公告里写明 Webclient 服务默认不启动。在干净的 Windows 11 上,这条比其他任何原因都常见。
powershell
Get-Service WebClient | Format-List Name, Status, StartType
Set-Service -Name WebClient -StartupType Automatic
Start-Service -Name WebClient如果 services.msc 里「状态」列是空的,说明 WebDAV 重定向程序根本没加载,任何映射都不可能成功。而资源管理器这时给你的提示是「你输入的文件夹似乎无效」,于是你去反复检查一个本来没问题的 URL。
检查 2:Windows 愿不愿意向 HTTP 发送 Basic 凭据
WebClient 读一个叫 BasicAuthLevel 的注册表值,文档给出三个取值:0 禁用,1 仅 SSL 站点,2 SSL 与非 SSL 都允许。默认是 1,所以一个用 Basic 认证的 http:// 端点会在弹密码框之前就失败。
cmd
reg add "HKLM\SYSTEM\CurrentControlSet\Services\WebClient\Parameters" /v BasicAuthLevel /t REG_DWORD /d 2 /f
net stop WebClient
net start WebClient重启不可省略。微软文档写明:改动这个键下任何值之后,都要重启 WebClient 或重启计算机。跳过它,正是那么多人认定这个修法是玄学的原因。
也要知道级别 2 的代价:凭据以明文传输。对 127.0.0.1 合理,在自己掌控的网络里可以接受,跨公网就是错的——那种场合应该用 HTTPS 端点。
检查 3:URL 是不是重定向程序认的形状
- 写上协议。
http://host:port/path。只写主机名会被当作 SMB,永远到不了你的服务器。 - 端口不是 80 或 443 就必须写出来。WebDAV 扩展规范记载,Vista 之前的客户端只支持 80 端口,所以这套端口写法看起来才这么别扭。
- 子路径要完全对上。服务器常发布在
/dav或/remote.php/dav/files/alice这类路径下,映射高一层就会得到同样的「似乎无效」。 - 命令行下两种都行:
net use * http://www.example.com,或文档定义的 UNC 形式\\server[@SSL][@port][\path],其中DavWWWRoot指向服务器根。
检查 4:是不是旧凭据在被反复重放
打开控制面板、凭据管理器、Windows 凭据,删掉该主机的所有条目,再用 net use Z: /delete 丢掉半成品映射,然后重试。密码明明改对了 0x80070043 还在,通常就是错的那个还留在缓存里。
顺带一提:微软明确说明,从 Windows 7 起 Basic 认证的凭据无法由凭据管理器保存,所以这类映射不会在登录时静默恢复。微软自己的建议是用登录脚本重新执行 net use。
检查 5:没人提的超时与缓存
下面这些全都在 HKLM\SYSTEM\CurrentControlSet\Services\WebClient\Parameters,全都由微软文档记载,也全都需要重启服务才生效。一整类「时好时坏」的报告都能在这里找到解释。
ServerNotFoundCacheLifeTimeInSec,默认 60。WebClient 会记住「不是 WebDAV 服务器」的主机,一分钟内直接失败。修好服务器立刻重试却拿到同样错误,就是这个原因。InternetServerTimeoutInSec默认 30、LocalServerTimeoutInSec默认 15,分别是远程与本地服务器的连接超时。SendReceiveTimeoutInSec,默认 60,按请求计算,所以一个大文件的慢PUT可能死在这里而不是尺寸限制上。FileAttributesLimitInBytes,默认 1,000,000,是单个集合上所有属性的总大小上限,几千个条目的文件夹能撞上。SupportLocking,默认 1。关掉它会改变对不实现LOCK的服务器的行为。FileNotFoundCacheLifeTimeInSec。连接区分大小写的 Linux WebDAV 服务器时,微软建议设为 0,否则仅大小写不同的两个文件名会造成「找不到文件」和数据被覆盖。
有时根本不是 Windows 的问题
- macOS 的症状不同:能挂载,写入却静默失败,因为 Finder 需要一个声明
LOCK的 class 2 服务器。见 Mac 上 WebDAV 很慢。 - 如果你要做的是搭服务器而不是连服务器,看 在 Windows 上跑 WebDAV 服务器。
- 如果映射能用、只是大文件到 50MB 就停,上面全都不适用,那是 50MB 限制。
映射本机服务,比如 AnyStorage 的 3211 端口
AnyStorage 在你自己的机器上跑 WebDAV 服务:侧边栏 Services,WebDAV 标签,Start,端点 http://127.0.0.1:3211,端口可改。应用里打开的每个连接都是这个根下的一个文件夹,所以一个映射就能同时到达 S3 桶、Cloudflare R2、Backblaze B2、MinIO、Google Drive、OneDrive、Dropbox 和 SFTP 主机。
检查 1 和 2 直接适用:端点是 HTTP,Basic 认证始终开启,所以 WebClient 必须在跑,BasicAuthLevel 必须是 2。凭据在 WebDAV 标签里,默认用户名 anystorage,密码是生成的 24 个字符。免费版挂载只读,读写属于 Pro;连接懒加载,所以只有本次会话在应用里打开过的连接才会出现在根目录。当前版本没有 TLS,这正是它默认绑定 127.0.0.1 并在你开启局域网访问前给出警告的原因。
全都试过了还是不行,怎么办?
用另一个 WebDAV 客户端连同一个 URL。如果它连得上而资源管理器连不上,问题就在重定向程序而不是你的服务器,再改注册表也没用。
大批量传输该用映射驱动器吗?
映射驱动器适合浏览和小文件拖拽。批量传输应该放在直接对接存储的客户端里,绕开 WebClient、它的注册表值,以及 4GB 的单文件硬上限。
换成 Windows 11 会好一点吗?
不会。WebClient 在 Windows 10 和 11 上都是弃用状态,默认值还是十年前那套,两边都默认不启动。把上面的检查当成长期存在的步骤就好。