sequenceDiagram
participant Finder as 客户端(Finder)
participant Server as WebDAV 服务端

Note over Finder,Server: 1. 探测服务器能力
Finder->>Server: OPTIONS /path/ HTTP/1.1
Server-->>Finder: 200 OK, Allow: OPTIONS, GET, PUT, PROPFIND, LOCK, ... 【RFC 4918】

Note over Finder,Server: 2. 列出目录内容
Finder->>Server: PROPFIND /path/ (Depth:1)【RFC 4918 §9.1】
Server-->>Finder: 207 Multi-Status (目录 XML 列表)【】

Note over Finder,Server: 3. 创建空文件(0 字节)
Finder->>Server: PUT /path/foo.txt (Transfer-Encoding: chunked, 0 bytes)
Server-->>Finder: 201 Created【】【】

Note over Finder,Server: 4. 写入文件内容
Finder->>Server: PUT /path/foo.txt (Transfer-Encoding: chunked, 实际内容)
Server-->>Finder: 200 OK【】

Note over Finder,Server: 5. (可选)加锁/解锁
Finder->>Server: LOCK /path/foo.txt
Server-->>Finder: 200 OK
Finder->>Server: UNLOCK /path/foo.txt
Server-->>Finder: 204 No Content【】

Note over Finder,Server: 6. 刷新属性或目录
Finder->>Server: PROPFIND /path/foo.txt (Depth:0)
Server-->>Finder: 207 Multi-Status (单资源属性)【】

Note over Finder,Server: 7. (微软示例:读回文件以确认)
Finder->>Server: GET /path/foo.txt
Server-->>Finder: 200 OK + 内容【】

img.png

🔍 Finder 的行为
在访问 WebDAV 共享目录时,Finder 会执行以下操作:
1.发送 PROPFIND 请求以获取目录列表。
2.对目录中的每个文件,尝试访问对应的 ._ 文件,以获取资源分支和元数据。
3.如果 ._ 文件不存在,Finder 会继续处理原始文件,但可能会导致加载延迟。

这种行为可能导致 WebDAV 服务器日志中出现大量对 ._ 文件的 PROPFIND 请求,并且在所有请求完成之前,Finder 可能不会显示文件列表

class _DAVResource(ABC):
- get_content_length
- get_content_type
- get_creation_date
- get_directory_info
- get_display_name
- get_display_info
- get_etag
- get_used_bytes
- get_available_bytes
- get_last_modified
- get_member()
- get_member_list

class DAVNonCollection(_DAVResource):

class DAVCollection(_DAVResource):

class DAVProvider(ABC):