跳转到内容
AsterDrive开发者
安全更新:Docker 镜像从 v0.4.0-rc.1 起已修复 FFmpeg MagicYUV 解码器漏洞 CVE-2026-8461(高危),使用旧镜像的实例请立即升级。查看 CVE 公告
安全更新:v0.4.0-beta.3 已修复 WebDAV 请求可导致服务进程终止的问题,旧版本实例请尽快升级。查看安全公告

WebDAV 使用

WebDAV 默认挂载地址是:

https://你的域名/webdav/

连接步骤:

  1. 在需要连接的个人或团队工作空间中创建 WebDAV 专用账号。
  2. 保存创建时返回的用户名和密码;明文密码只显示一次。
  3. 把挂载地址、用户名和密码填入 WebDAV 客户端。
  4. 如果账号设置了根文件夹,客户端只会看到该文件夹及其子项。

WebDAV 挂载使用 Basic Auth 和 WebDAV 专用凭据。网页登录的 Bearer JWT 不是 WebDAV 挂载凭据,也不需要把网页登录密码交给客户端。

个人账号只进入对应的个人空间;团队账号只进入对应的团队空间,并继续受团队成员身份、角色和工作空间权限约束。

挂载前的开关、路径前缀、大小上限和系统文件拦截规则,见 WebDAV 配置;协议层已实现的方法、属性、锁和 DeltaV 边界,见 WebDAV 协议兼容

WebDAV 路径是 URI,不是直接把操作系统文件名拼到字符串后面。文件名中的保留字符需要由客户端做 percent-encoding。

例如,Windows 允许的文件名:

report#draft.txt

在 WebDAV URL 中应表示为:

/webdav/report%23draft.txt

# 在 URI 中用来开始 fragment。下面的写法不表示文件名中的 #

/webdav/report#draft.txt

常见 WebDAV 客户端会在发送前移除真正的 fragment,并把文件名中的 # 编码为 %23。AsterDrive 已覆盖 %23 文件名的上传和下载往返。刻意发送带 raw #fragment 的非标准 request-target 时,底层 HTTP 解析器可能在 AsterDrive 处理前就截断 fragment;不要使用这种形式表示文件名。该解析边界由 GitHub #424 跟踪。

假设同一父目录下同时存在:

report # 文件
report/ # 文件夹

在 WebDAV 视图里,/report/report/ 不适合当作两个可独立管理的资源标识。当既有同名冲突已经存在时,AsterDrive WebDAV 的路径解析优先返回文件夹,同名文件在 WebDAV 视图中可能被遮蔽。

WebDAV 写入会尽量保持这个单一命名空间:

  • 目标已是文件时,MKCOL 返回 405 Method Not Allowed
  • 目标已是文件夹时,MKCOL 也返回 405 Method Not Allowed
  • 目标已是文件夹时,PUT 返回 405 Method Not Allowed
  • COPY / MOVE 将目标 href 当作一个资源,并按 Overwrite 语义处理已存在目标。

如果同名对象是通过网页、REST API 或老版本创建的,WebDAV 不会自动重命名或删除它们。这类目录是一个有损投影:文件可能在 WebDAV 客户端中不可达。需要稳定同步的目录,应避免在同一层创建同名文件和文件夹。

仓库里的协议回归测试和兼容性基线见 WebDAV 协议兼容。上线前建议用你实际采用的客户端验证:

  1. 根目录和两层子目录可以列出;
  2. 普通文件和包含空格、中文、# 的文件可以上传、下载和重命名;
  3. 大文件限制、Range 下载和断线后重试符合预期;
  4. 复制、移动、删除和覆盖行为符合预期;
  5. 同一文件在多客户端打开时,锁和冲突提示可以接受。

WebDAV 不只用 GETPUT。反向代理必须透传扩展方法和相关请求头,特别是:

  • 方法:PROPFINDPROPPATCHMKCOLCOPYMOVELOCKUNLOCKREPORTVERSION-CONTROL
  • 头部:AuthorizationDepthDestinationOverwriteIfLock-TokenTimeout

反向代理还可能有自己的请求体上限、超时、缓冲和路径编码规则。遇到“小文件正常,大文件失败”“可以下载,不能创建目录”“特殊文件名变了”时,同时对照直连 AsterDrive 和经过代理的结果。

完整代理示例见 反向代理