跳到主要内容
AnyStorage
免费下载

WebDAV 排障

Windows 连不上 WebDAV:按症状排查的清单

Windows 的 WebDAV 连接失败可以按症状查表:每条错误文本对应原因和修法,从 WebClient 服务一直到没人提的超时与缓存值。

一张症状对照表加五步检查,涵盖 WebClient、BasicAuthLevel,以及会让正常服务器看起来不通的缓存和超时。

Windows 连不上 WebDAV,映射 WebDAV 网络驱动器,WebClient 服务

搜索这个问题,首页多半是没有结论的论坛帖。原因之一是:「Windows 连不上 WebDAV」不是一种故障,至少有九种,而且 Windows 会用同一句含糊的提示报告其中好几种。

所以按症状查。先在表里找到你看到的那句话,再去做它指向的检查。前两项能解决绝大多数情况,后面每一条都是「穿着相似提示的另一个问题」。

Windows WebDAV 故障的症状、原因与修法
Windows 显示的内容原因修法
错误代码: 0x80070043WebClient 未运行、HTTP 上的 Basic 认证,或 URL 形式不对检查 1 到 3,详见 错误 0x80070043
发生系统错误 67。同样三个原因,由 net use 报出net use 错误 67
你输入的文件夹似乎无效多数是 WebClient 没运行,或子路径不对检查 1 和 3
超过约 50MB 的文件报 0x800700DFFileSizeLimitInBytes 默认 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 上都是弃用状态,默认值还是十年前那套,两边都默认不启动。把上面的检查当成长期存在的步骤就好。