对话框原文
text
The folder you entered does not appear to be valid. Please choose another.你在"映射网络驱动器"里输入 WebDAV 地址,Windows 想了一会儿,然后拒绝。没有错误码,也没有提示它到底不喜欢哪一部分。同一个地址在浏览器里能打开,换个 WebDAV 客户端也能连上。
Windows 在还没资格评价你的密码之前就抛出这句话。它的意思只有两种:重定向器没能和这个地址完成一次 WebDAV 对话,或者根本没能开始对话。原因实际上就五个,而一条命令就能判断你在哪一半。
| 还能观察到什么 | 原因 | 处理 |
|---|---|---|
Get-Service WebClient 显示 Stopped | 负责说 WebDAV 的服务没运行 | 启动它,并设为自动 |
地址是 http://,且从不弹出密码框 | 明文 HTTP 上的 Basic 认证被禁 | BasicAuthLevel 设为 2 |
curl 看不到该路径的 DAV 响应头 | 不是 WebDAV 根,或没启用 WebDAV | 指向真正的 WebDAV 路径 |
| 端口不是 80/443,或省略了协议 | Windows 能接受的地址形式比浏览器窄 | 用完整 URL 或 UNC 形式 |
老服务端,XML 标签没有 DAV: 前缀 | 微软文档化的解析假设 | 服务端调整或打补丁 |
第一步:先打这一条
用重定向器的方式去问服务端。它的第一个请求就是对你给的路径发 OPTIONS。
powershell
curl.exe -i -X OPTIONS -u alice https://dav.example.com/要看的只有一个头。WebDAV 规范 RFC 4918 写得很直白:「All DAV-compliant resources MUST return the DAV header with compliance-class '1' on all OPTIONS responses.」所以正常的服务端会回类似 DAV: 1, 2, 3 的响应,以及包含 PROPFIND 的 Allow。
如果没有 DAV 头,就别再折腾 Windows 了。要么这个路径不是 WebDAV 根(同一份规范说,对包括 / 在内的非 WebDAV 资源发 OPTIONS「SHOULD NOT advertise WebDAV support」),要么服务端把 WebDAV 关了。比如 Nextcloud 把它发布在 /remote.php/dav/files/<user>,而不是站点根。
如果这个头在,那服务端是清白的,剩下的原因全在你自己机器上。
第二步:启动 WebClient 服务
Windows 上所有映射的 WebDAV 驱动器都由一个叫 WebClient 的服务处理,而微软的弃用功能清单写着:「The Webclient (WebDAV) service is deprecated. The Webclient service isn't started by default in Windows.」在全新安装的 Windows 11 上,这是单一原因里最常见的一个。
powershell
Get-Service WebClient | Format-List Name, Status, StartType
Set-Service -Name WebClient -StartupType Automatic
Start-Service -Name WebClient然后别立刻重试。重定向器维护一份"判定为非 WebDAV 服务器"的列表,ServerNotFoundCacheLifeTimeInSec 默认 60 秒;在列表里的这段时间,按文档的说法是「a fail is returned immediately without attempting to contact the server」。刚修好就重试,看到的是缓存下来的失败。
Windows Server 上,在添加"桌面体验"功能之前重定向器根本没装;桌面版 Windows 自带。
第三步:允许对 http:// 发送 Basic 凭据
如果端点是 http:// 且用 Basic 认证,Windows 会在弹窗之前就拒绝。开关是 WebClient 参数键下的 DWORD 值 BasicAuthLevel。微软文档写明 0 为禁用,1 为「for SSL web sites only」,2 为「SSL and non-SSL web sites」,默认是 1。
cmd
reg add "HKLM\SYSTEM\CurrentControlSet\Services\WebClient\Parameters" /v BasicAuthLevel /t REG_DWORD /d 2 /f
net stop WebClient
net start WebClient重启服务不是可选步骤——同一处注记说明,改动该键下任何值之后都必须重启 Web Client 或重启计算机。也要清楚代价:未加密连接上的 Basic 认证被文档称为「strongly discouraged」,凭据是明文过线的。对 127.0.0.1 合理,在自己的局域网里可以辩护,走公网就是错的。
第四步:按重定向器要的格式写地址
向导要的是完整 URL,包含协议和非标准端口,例如 http://dav.example.com:8080/remote.php/dav/files/alice。只写主机名会让 Windows 走 SMB,那条路永远找不到 WebDAV 服务器。
命令行更好排查,因为它返回编号而不是句子。微软的说明用的是普通 URL 形式 NET USE * http://www.example.com,UNC 形式则被文档化为 \\server[@SSL][@port][\path],其中 @SSL 表示 HTTPS,@port 在非 80/443 时必填,DavWWWRoot 指向 WebDAV 服务器根:
cmd
net use Z: \\dav.example.com@SSL\DavWWWRoot\files /user:alice *
net use Y: http://dav.example.com:8080/remote.php/dav/files/alice /user:alice *如果它返回 System error 67,你只是从另一个方向看同一份原因清单:net use 错误 67。如果资源管理器之后报 0x80070043,那是同一个 Win32 错误被包成 HRESULT:错误 0x80070043。
第五步:微软自己写下的那个原因
这类拒绝背后确实有一个解析 bug,微软在专门讲这句提示的支持文章里写明了原因:「The Windows Web Client service incorrectly assumes that all XML tags from WebDAV servers contain the namespace prefix 'DAV.' However, there are some scenarios in which this assumption is incorrect.」
换句话说,服务端的 PROPFIND 响应即使是合法 XML,只要 DAV: 命名空间声明方式不同,就可能被一口拒绝。微软给的答案是替换 Webclnt.dll 的修复程序,适用于 Windows 7 与 Windows Server 2008 R2。如果你用的是现代 Windows 和现代服务端,这很少是你的原因——但当它就是原因时,再怎么改凭据也不会好,这就是解释。
顺手排掉两个邻居:拦截请求的代理(重定向器会报 System error 224,要求把站点加入受信任站点),以及凭据管理器重放的旧密码。把该主机在 Windows 凭据下的条目全部删掉,执行 net use Z: /delete,再试一次。
映射本机 WebDAV 服务时
上面每条规则在服务端就在本机时依然成立,因为 Windows 并不关心地址是不是回环。
AnyStorage(v0.2.24;macOS 11+、Windows 10+、Ubuntu 20.04+)在 http://127.0.0.1:3211 上运行内置 WebDAV 服务,应用里打开的每个存储连接都作为该根下的一个文件夹出现——S3 存储桶、Cloudflare R2、MinIO、Backblaze B2 或 SFTP 主机,一个盘符全都能到,不用装任何文件系统驱动。由于端点是 HTTP + Basic 认证,必须先把 BasicAuthLevel 设为 2 并保证 WebClient 在运行,资源管理器才会跟它说话。免费版可用两个连接。
这和 0x80070043 是一回事吗?
不完全是。0x80070043 是映射过程本身返回的带编号失败,而这句提示是向导在走到那一步之前就否掉了地址。两者的原因清单几乎重合,所以处理动作相同。
Edge 里能打开,为什么资源管理器不行?
浏览器发 GET,把返回内容画出来即可。重定向器发 OPTIONS 和 PROPFIND,需要 DAV 响应头和合法的多状态响应。一个服务端完全可能通过前者却挂在后者。
必须用 HTTPS 吗?
技术上不必,但 HTTP + Basic 认证就得抬高 BasicAuthLevel,代价是密码明文过网。只要流量会离开本机,就用 https:// 并把该值保持为 1。
映射成功了,但大文件失败,是同一个问题吗?
不是,而且文档齐全:FileSizeLimitInBytes 默认 50,000,000(十进制),超过就以 0x800700DF 失败。见Windows WebDAV 50 MB 限制。
下一步
- 同一失败的编号版本:WebDAV 错误 0x80070043 与 net use 错误 67
- Windows 侧的完整清单:Windows 无法连接 WebDAV
- Windows 11 改了什么:Windows 11 上 WebDAV 不工作