crates/protocols/src/webdav/README.md
WebDAV (Web Distributed Authoring and Versioning) protocol implementation for RustFS, providing HTTP-based file access compatible with native OS file managers and WebDAV clients.
| Method | Description | S3 Operation |
|---|---|---|
PROPFIND | List directory / Get metadata | ListObjects / HeadObject |
MKCOL | Create directory | CreateBucket / PutObject (prefix) |
PUT | Upload file | PutObject |
GET | Download file | GetObject |
DELETE | Delete file/directory | DeleteObject / DeleteBucket |
HEAD | Get file metadata | HeadObject |
| Method | Description | Status |
|---|---|---|
MOVE | Move/rename file | Returns 501 Not Implemented |
COPY | Copy file | Returns 501 Not Implemented |
WebDAV is opt-in and must be explicitly enabled.
Build with WebDAV support:
cargo build --features webdav
Or enable all protocol features:
cargo build --features full
Configure WebDAV via environment variables:
| Variable | Description | Default |
|---|---|---|
RUSTFS_WEBDAV_ENABLE | Enable WebDAV server | false |
RUSTFS_WEBDAV_ADDRESS | Server bind address | 0.0.0.0:8080 |
RUSTFS_WEBDAV_TLS_ENABLED | Enable TLS | true |
RUSTFS_WEBDAV_CERTS_DIR | TLS certificate directory | - |
RUSTFS_WEBDAV_CA_FILE | CA file for client verification | - |
RUSTFS_WEBDAV_MAX_BODY_SIZE | Max upload size (bytes) | 5GB |
RUSTFS_WEBDAV_REQUEST_TIMEOUT | Request timeout (seconds) | 300 |
RUSTFS_WEBDAV_ENABLE=true \
RUSTFS_WEBDAV_ADDRESS=0.0.0.0:8080 \
RUSTFS_WEBDAV_TLS_ENABLED=false \
RUSTFS_ACCESS_KEY=rustfsadmin \
RUSTFS_SECRET_KEY=rustfsadmin \
./target/release/rustfs /path/to/data
# List root (buckets)
curl -u rustfsadmin:rustfsadmin -X PROPFIND http://127.0.0.1:8080/ -H "Depth: 1"
# Create bucket
curl -u rustfsadmin:rustfsadmin -X MKCOL http://127.0.0.1:8080/mybucket/
# Upload file
curl -u rustfsadmin:rustfsadmin -T file.txt http://127.0.0.1:8080/mybucket/file.txt
# Download file
curl -u rustfsadmin:rustfsadmin http://127.0.0.1:8080/mybucket/file.txt
# Create subdirectory
curl -u rustfsadmin:rustfsadmin -X MKCOL http://127.0.0.1:8080/mybucket/subdir/
# Delete file
curl -u rustfsadmin:rustfsadmin -X DELETE http://127.0.0.1:8080/mybucket/file.txt
# Delete bucket
curl -u rustfsadmin:rustfsadmin -X DELETE http://127.0.0.1:8080/mybucket/
Ctrl+L to show address bardav://rustfsadmin:[email protected]:8080/Cmd+K (Connect to Server)http://rustfsadmin:[email protected]:8080/http://127.0.0.1:8080/Install jonpfote.webdav extension and create .code-workspace:
{
"folders": [
{
"uri": "webdav://rustfs-local",
"name": "RustFS WebDAV"
}
],
"settings": {
"jonpfote.webdav-folders": {
"rustfs-local": {
"host": "127.0.0.1:8080",
"ssl": false,
"authtype": "basic",
"username": "rustfsadmin",
"password": "rustfsadmin"
}
}
}
}
WebDAV Client (curl, Finder, Explorer, VSCode)
│
▼ HTTP/HTTPS
┌───────────────────┐
│ WebDavServer │ ← Hyper HTTP server + Basic Auth
└─────────┬─────────┘
│
┌─────────▼─────────┐
│ WebDavDriver │ ← DavFileSystem implementation
└─────────┬─────────┘
│
┌─────────▼─────────┐
│ StorageBackend │ ← S3 API operations
└─────────┬─────────┘
│
┌─────────▼─────────┐
│ ECStore │ ← Erasure coded storage
└───────────────────┘
WebDAV paths are mapped to S3 buckets and objects:
WebDAV Path S3 Mapping
/ → List all buckets
/mybucket/ → Bucket: mybucket
/mybucket/file.txt → Bucket: mybucket, Key: file.txt
/mybucket/dir/file.txt → Bucket: mybucket, Key: dir/file.txt
Apache License 2.0