跳到主要內容
AnyStorage
免費下載

Windows 上的 WebDAV

Windows 11 上 WebDAV 無法運作:變的是什麼

微軟在 2023 年 11 月淘汰了 WebDAV 服務,而且它預設不再啟動。如何重新開啟、哪些登錄值仍會咬人,以及全部已記載的上限。

舊版 Windows 上能用的 WebDAV 對應為什麼在 Windows 11 上失敗,附微軟自己的淘汰原文、重新啟用服務的指令,以及每一個記載的限制值。

webdav windows 11 無法連線,WebClient 服務 Windows 11,WebDAV 淘汰 Windows

真正改變的事

不是你的伺服器。微軟的 Windows 用戶端淘汰功能清單裡有這一條,宣布時間是 2023 年 11 月:

text

Webclient (WebDAV) Service
The Webclient (WebDAV) service is deprecated.
The Webclient service isn't started by default in Windows.

這兩句話解釋了網路上大多數「Windows 11 的 WebDAV 不能用」的貼文。功能還在,也還能用;只是不再繼續開發,而且在全新安裝的系統上那個服務是停著的,於是第一次對應就失敗。更麻煩的是你拿到的提示——「找不到網路名稱」、0x80070043、「The folder you entered does not appear to be valid.」——完全沒提服務沒啟動這件事。

在 Windows 11 上弄壞 WebDAV 的五件事(依序)
失敗表現原因處理
任何對應嘗試都立刻失敗WebClient 服務沒啟動啟動並設為自動
http:// 端點,從不彈出密碼框Basic 驗證限定 SSL 網站BasicAuthLevel = 2
複製到 50 MB 左右回報 0x800700DFFileSizeLimitInBytes 預設值調高數值,重啟服務
剛修好立刻重試,錯誤照舊非 WebDAV 伺服器快取等 60 秒
重開機之後對應消失Basic 憑證不會被保存用登入指令碼重新對應

1. 啟動服務,並設為自動

powershell

Get-Service WebClient | Format-List Name, Status, StartType
Set-Service -Name WebClient -StartupType Automatic
Start-Service -Name WebClient

在管理員命令提示字元操作時,每個 = 後面要有空白:微軟的 sc.exe config 參考說明,選項與值之間必須有空白,省略會讓操作失敗——而被到處複製的 start=auto 正是省略空白的寫法。

cmd

sc.exe config WebClient start= auto
sc.exe start WebClient

Windows Server 上在加入「桌面體驗」功能之前重新導向器根本沒安裝;Windows 11 上它裝了,只是睡著。

2. 允許對 http:// 端點送出 Basic 憑證

Windows 10 與 11 預設不會把 Basic 憑證送給明文端點,而且失敗時不彈窗,所以這個原因常被誤判成密碼問題。控制它的是 HKLM\SYSTEM\CurrentControlSet\Services\WebClient\Parameters 下的 DWORD 值 BasicAuthLevel。微軟文件寫明 0 為停用、1 為「Basic authentication is enabled for SSL web sites only」、2 為「enabled for 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 或重新開機。微軟也把非 SSL 連線上的 Basic 驗證稱為「strongly discouraged」,這話沒錯——憑證是明文過線的。回送位址上流量不出本機;只要會走網路,就用 HTTPS 並把值保持在 1

3. 在撞上之前先知道上限

下面每個值都來自微軟的 WebDAV 重新導向器文件,同一個登錄機碼,全是實數而非傳聞。

WebClient 登錄設定與微軟記載的預設值
控制什麼預設
FileSizeLimitInBytes服務允許的最大檔案傳輸大小50,000,000(十進位,50 MB)
FileAttributesLimitInBytes單一集合上所有屬性的最大大小1,000,000(十進位,1 MB)
SendReceiveTimeoutInSec發出 GET /file.ext 之類請求後的逾時60
InternetServerTimeoutInSec非本機伺服器的連線逾時30
LocalServerTimeoutInSec本機伺服器的連線逾時15
ServerNotFoundCacheLifeTimeInSec主機被快取為非 WebDAV 的時間60
SupportLocking是否支援 LOCK1
BasicAuthLevelBasic 驗證:關 / 僅 SSL / 兩者1

其中兩個值得多看一眼。FileSizeLimitInBytes 就是著名的 50 MB 天花板;它是 DWORD,所以最大只能是 4,294,967,295 位元組——這就是為什麼 Windows 的 WebDAV 對應再怎麼設定都搬不動一個 5 GB 的檔案(細節見Windows WebDAV 50 MB 限制)。而 ServerNotFoundCacheLifeTimeInSec 正是「我修好了卻沒用」的真相:60 秒內服務直接回傳快取的失敗,根本不聯絡伺服器。

4. 排查期間用指令列對應

精靈給你一句話,net use 給你一個編號,而編號可以搜尋。微軟的說明用一般 URL 形式,UNC 形式記載為 \\server[@SSL][@port][\path]@SSL 代表 HTTPS,@port 在非 80/443 時必填:

cmd

net use Z: https://dav.example.com/files /user:alice *
net use Y: \\dav.example.com@SSL@8443\DavWWWRoot\files /user:alice *

結尾的 * 讓 Windows 提示輸入密碼,而不是留在指令歷史裡。如果答案是 System error 67,讀net use 錯誤 67;檔案總管版的寫法是0x80070043;精靈自己的拒絕另有一頁:輸入的資料夾似乎無效

5. 登出就消失的對應

這是記載過的行為,不是 Windows 11 的退步:自 Windows 7 起,Basic 驗證的憑證無法由憑證管理員保存,所以 Basic 驗證的 WebDAV 對應只能重建而不是還原。微軟自己的排查建議也是用登入指令碼重新執行指令。

powershell

if (-not (Test-Path Y:)) {
  net use Y: http://127.0.0.1:3211/ /user:anystorage
}

「淘汰」對你意味著什麼

淘汰不是移除。微軟自己的定義是:該功能不再積極開發,可能在未來更新中被移除。WebClient 這條自 2023 年 11 月起一直掛著,沒有給出移除日期。實際含義有三點:沒有新功能、沒有效能改進、下一個大版本沒有保證。

它也意味著長期方案不該只依賴 Windows 重新導向器做大量作業。直接說儲存 API 的用戶端沒有要啟動的服務、沒有 BasicAuthLevel、沒有 4 GB 天花板。AnyStorage(v0.2.24;macOS 11+、Windows 10+、Ubuntu 20.04+)走的是中間路線:檔案傳輸用儲存協定本身——支援 path-style 與自訂區域的 S3 相容端點、金鑰驗證的 SFTP、WebDAV——需要磁碟機代號時,再由內建的本機 WebDAV 服務(http://127.0.0.1:3211)提供一個,不裝 FUSE、WinFsp 或 macFUSE。應用程式裡開啟的每個連線都會成為該根目錄下的資料夾,免費版可用兩個連線。不過上面那些規則對這個對應同樣適用:Windows 對回送 WebDAV 服務與別人一視同仁,WebClient 要在跑,BasicAuthLevel 要是 2

Windows 11 24H2 裡 WebDAV 被移除了嗎?

沒有。是淘汰不是移除,服務仍隨系統提供。變的是它不會自己啟動,所以每台機器需要手動開一次。

我的 NAS 在瀏覽器看得到,為什麼做不成磁碟機?

因為重新導向器問的是另一個問題。它發 OPTIONS 並要求 DAV 回應標頭,接著發 PROPFIND。一台伺服器完全可以正常提供網頁,卻不在你輸入的路徑上宣告 WebDAV。

50 MB 限制可以安全調高嗎?

在合理範圍內可以。FileSizeLimitInBytes 是 DWORD,最大 4294967295,改完需要重啟 WebClient 或重新開機。它不會讓傳輸變快,只是讓傳輸被允許。

換成 HTTPS 能解決逾時嗎?

不能。逾時是 SendReceiveTimeoutInSec(60 秒)、InternetServerTimeoutInSec(30)與 LocalServerTimeoutInSec(15),與協定無關。對上千個項目的目錄做一次慢 PROPFIND,兩種協定都會撞上。

下一步