
WebDAVリクエストは、通常のHTTP(GET や PUT など)を拡張した専用のメソッド(MKCOL、PROPFIND、MOVE、LOCK など)を用いて、リモートサーバー上のファイルやフォルダに対して「フォルダ作成」「一覧・属性取得」「移動・改名」「同時編集防止のロック」といったファイルシステム同様の操作をWeb経由で実行する仕組みです。
単にファイルをアップロード(新規作成・上書き)するだけであれば、送る側は通常のHTTP PUTリクエストを使います。
WebDAV(Web-based Distributed Authoring and Versioning)というプロトコルは、一から新しく作られたものではなく、「既存のHTTP(HyperText Transfer Protocol)をベースに、機能を継承・拡張したもの」だからです。 WebDAVの設計において、「サーバー上にファイルを配置して保存する」という行為は、HTTPの標準仕様にあるPUT メソッドの役割そのものであると定義されています。そのため、NextcloudのWebDAVエンドポイント(URL)に対してファイルを送る際は、一般的なWebサーバーにファイルをPUT送信するときと全く同じ方法(バイナリデータをそのままリクエストのボディに載せて送る方法)で完結します。
Pythonや curl が裏側でNextcloudのサーバーへと送信しているHTTPリクエストのメッセージ構造は、以下のように非常にシンプルです。
PUT /remote.php/dav/files/ユーザー名/documents/memo.txt HTTP/1.1
Host: your-nextcloud-domain.com
Authorization: Basic dXNlcm5hbWU6cGFzc3dvcmQ=
Content-Length: 45
[ここにファイルの中身のバイナリデータがそのまま入る]
ヘッダー部分で「どこに(URL)」「誰が(Authorization認証)」「どのくらいのサイズ(Content-Length)」を送るかを伝え、データの塊(ボディ)をそのまま流し込んでいるだけです。WebDAVだからといって、データに特別な装飾(タグなど)を施す必要はありません。
「ファイルのアップロード」や「ファイルのダウンロード(GET)」、「ファイルの削除(DELETE)」といった基本操作は、すべてHTTP標準のメソッドで行えます。 しかし、通常のHTTPには**「フォルダ(ディレクトリ)を作る」「ファイル一覧を取得する」「ファイルを移動・コピーする」という概念がありません。** これらを行う時に初めて、WebDAVで新しく拡張された特有のHTTPメソッドや、XML形式(特有の書き方)のリクエストボディが必要になります。
WebDAV(Web Distributed Authoring and Versioning)リクエストは、HTTPを拡張して「Webサーバー上のファイルやディレクトリをリモートで作成・編集・削除・管理する」ために使われます。 「ファイルをアップロードする」というフェーズにおいては、純粋なHTTP PUT通信を行います。