次世代プロトコルWebDAVの可能性[前編]


次世代プロトコルWebDAVの可能性
技術仕様徹底解説

将来、SambaやCVSを不要にしてしまう可能性を秘めたプロトコル「WebDAV」。まだ開発途上にあり、そのポテンシャルを完全に発揮しきっているとはいえないが、今後重要な存在となるだろう。
これから、このWebDAVの技術仕様からLinuxでのWebDAVサーバ構築までを解説する。


 これまで、Webといえば読む動作が大半であった。CGIをはじめとするさまざまな仕組みを準備することによって、特定の条件下においてファイルやデータをサーバに送り込むことはできたものの、決して「自由に」ということにはならなかった。

 また、Webページの更新にしてもFTPなどの古いプロトコル経由で転送しなければならない。それらのプロトコルにもセキュリティ上の問題が発生することがしばしばあったし、クライアント/サーバ間の接続にも気を使うことが多かった。

 しかし、WebDAVの規格ができてからは、この様子が変わってくる。「読むだけ」から「書くこと」のできるプロトコルへとHTTPが拡張され、対応するツールも次々に開発されつつある。既存のツールをWebDAVに対応させるソフトウェアも増えている。本稿では、まずWebDAVの概要を述べ、その後に実際に使うための方法を解説させていただくこととする。

WebDAVとは

 WebDAV(Web-based Distributed Authoring and Versioning)は、RFC 2291「WWWにおける分散オーサリングおよびバージョン管理プロトコルの要件」(注1)で提唱され、RFC 2518「分散オーサリングのためのHTTP拡張 --WEBDAV」(注2)で具体的に定義されているプロトコルの名称である。つまり、ネットワークによる分散環境下でのWebコンテンツなどの編集(Authoring)リビジョン管理(Versioning)を行うことを目的に規定されたプロトコルである。

注1:Requirements for a Distributed Authoring and Versioning Protocol for the World Wide Web

注2:HTTP Extensions for Distributed Authoring

 WebDAVには、その名称から

というイメージがある。しかし、上記RFCが記述している範囲はあくまで「HTTP Extensions for Distributed Authoring」となっているように、HTTPの拡張によるリモートファイル操作までで、その内容にはバージョン管理についての規定がないことが分かる。WebDAVが、まずはリモートファイル操作についての実装からのアプローチであるというところだろう。

 RFC 2518の著者を見ると分かるが、Microsoft、Netscape、Novellの技術者が名を連ねている。また、MicrosoftからリリースされているInternet Information Service(IIS) 5.0(編注) でWebDAVの機能が利用できる。このように、WebDAVは実装も含めてMicrosoftがリードしてきた規格ではあるが、内容は別にMicrosoft製品に特化したものではない。また、オープンソースのWebサーバソフトウェアApacheで利用可能なDAVモジュール(mod_dav)もリリースされているし、今後リリースされる予定のApache 2.0には、WebDAVサーバとしての機能が同梱される予定である(Apache 2.0については「Apache 2.0の新機能とその実力」参照)。

編注:IISは、4.0までがInternet Information「Server」、5.0からはInternet Information「Service」となっている。

WebDAVのアドバンテージ

 では、WebDAVにはどのような利点があるのだろうか? まずはそれを明らかにしておこう。

1.シンプルである

 HTTPベースのサービスであるため、シンプルそのもの。例えば、図1に示すようにWebコンテンツアップロードをWebDAVで実施することが可能になる。

図1 WebDAV対応のクライアント/サーバを使うことにより、コンテンツのアップロードも可能になる

2.セキュリティの向上が比較的容易

 1と重複する部分ではあるが、WebDAVはHTTPの拡張である。従って、Webサーバのセキュリティを確保・向上させるときの考え方の大半が流用可能である。図2に示すように、FTPやSMBをインターネット経由で利用する場合と比較すると、少なくともサーバに対する接続許可を与えるポート番号は少なくて済む。

図2 HTTP以外のプロトコルも併用すると、多くのポートを開放する必要がある

 ただし、サーバに対するデータの書き込みを可能としているプロトコルなので、この部分に注意を払ったサーバサイドの設定は必要となる。

 また、OSI 7階層モデルにおけるレイヤ4(セッション層)以上の実装になるので、レイヤ3(TCP/IP)以下のレイヤがセキュアになれば、その上のレイヤは必然的にセキュアになる。

3.特定のOSやサーバ実装に依存しない

 WebDAVはあくまでHTTPの拡張であり、その中に特定のOSや機種に依存する特別な仕組みはなく、複数のOS上での実装がすでに存在する(図1)。WebDAVサーバは、WebDAVクライアントからのアクセスを特段の区別なく受け付ける(注3)。

注3:ただし、リソースの名前(ファイル名)に使われる文字コードなどはクライアント依存の部分が大きく、稿あらためて解説するmod_encodingではクライアントの種類によって受け付ける文字コードを決定するようにしている。

ほかのプロトコルとの相違

 リモートへのファイル転送という観点からすると、FTPやSMB(Samba)の利用が思い浮かぶ。それらのプロトコルを利用した場合とWebDAVを利用した場合では、どこがどう違うのかを説明しよう。

1.FTPとの相違

 FTPは、制御コネクションとデータコネクションという2つのコネクションについて気を使う必要がある。また、そのコネクションの方向(対クライアント方向のデータコネクションおよび対サーバ方向のデータコネクション)も考慮しなければならない。

 WebDAVであれば、HTTPの機能とサーバの通信ポートのみに注意すればよい。

 また、DAV準拠クラス(後述)にもよるが、ロック(後述)が定義されているため、複数の端末から同時にコンテンツを書き込んだ際に不整合が生じるといった事態をある程度防ぐことが可能である。

2.SMBとの相違

 SMBは、Windowsネットワーク上で使われるプロトコルである。詳細はSMBを取り扱う専門記事やSambaの技術解説に譲るが、シーケンスが複雑なうえ、実装によってはセキュリティホールやトラブルもある。また、図3に簡単な流れを示すが、ファイルのコピーを行うに当たり、SMBではいったんクライアントにファイルの内容を取り込んでからコピーを実施するため、ネットワークに相応のトラフィックが発生する。WebDAVのCOPYメソッドを使用する場合は、すべてサーバサイドでの処理になるのでトラフィックはほとんど発生しない。

図3 プロトコルによるファイルコピーの動作の違い。SMBではより多くのトラフィックが発生することが分かる

WebDAVの技術仕様

 WebDAVはHTTP 1.1の拡張仕様であると説明したが、具体的にどのような拡張が行われているのだろうか? WebDAVで導入された概念や仕様を紹介する。

WebDAVにおいて導入された概念

 現在、多様化、複雑化した感はあるものの、Webの根幹にあるHTTPの実装は、非常にシンプルである。しかし、WebDAVにおいてはWebリソースの取り扱いに当たり、新しい概念を導入した。それが「プロパティ」と「コレクション」、そして「ロック」である。後述するが、プロパティとコレクションに対応した新規メソッドの規定/既存メソッドの拡張も併せて実施されている。

1.リソース(Resource)

 WebDAVでの操作/管理の対象となるもの。ファイルやコレクション(後述)はリソースである。

2.コレクション(Collection)

 複数のリソースをまとめて管理するための概念として、コレクションが定義されている。

 例えば、FTPでは単一のファイル/ディレクトリへの操作を行うことが基本であるが、WebDAVではコレクションに対する操作を行うことが可能である。実装的には、コレクション=ディレクトリ(もしくはフォルダ)を示すことが多い。

3.プロパティ(Property)

 リソースの属性を名前と値のペア(例:名前=値)で定義したものである。また、プロパティには2種類あり、それぞれライブプロパティ/デッドプロパティと呼ばれる。

 リソース、プロパティ、コレクションの関連を図4に示す。

図4 リソース、プロパティ、コレクションの関係。プロパティはリソースの属性であり、コレクションは複数のリソースをグループ化する。コレクションはネストできることにも注目

4.ロック(Lock)

 読み込みだけでなく書き込みもサポートしたWebDAVだが、分散オーサリングを実施するに当たり、複数の人間が同じリソースに対する書き込みを行わないとも限らない。これを回避するための仕組みがロックである。WebDAVが提供するロックは、共有ロック(Shared Lock)方式である。排他ロックとは異なり、リソースがロックされている状態でもアクセスは可能である。

HTTP 1.1の拡張としてのWebDAV

 WebDAVではHTTP 1.1からさらにいくつかのメソッドが新設されている。その内容を表1に示す。

 
メソッド
機能
  PROPFIND プロパティの取得
  PROPPATCH プロパティの変更
  MKCOL コレクションの作成
  COPY コレクションを含むリソースおよびプロパティの複製
  MOVE コレクションを含むリソースの移動
  LOCK リソースのロック
  UNLOCK リソースのロック解除
  表1 WebDAVで新設されたメソッド

 また、HTTP 1.1までに既定されたGET、HEAD、PUT、DELETEについても、その動作やステータスコードに対してコレクションなどを取り扱うのに適した拡張が施されている。

 メソッドのパラメータについては、HTTPヘッダ中への埋め込みだけでなくXML形式のデータでも与えることが可能であり、結果についても必要に応じてXML形式のデータが返される。例えば、DELETEメソッドのリクエストとレスポンスの様子は以下のとおりである。DELETEメソッドを発行して、その結果を受け取っている。

DELETE /DAV/sample/ HTTP/1.1
Host: localhost
DELETEメソッドのリクエスト

HTTP/1.1 204 No Content
Date: Fri, 14 Sep 2001 05:58:04 GMT
Server: Apache/1.3.19 (Unix) DAV/1.0.2
Content-Type: text/plain
DELETEメソッドのレスポンス

 ちなみに、この場合のステータスコード「204」は、DELETE メソッドが正常に終了していることを表している。

 今度は別の例について見てみよう。PROPFINDメソッドを発行した結果である。

PROPFIND /DAV/setup01.jpg HTTP/1.1
Host: localhost
Content-type: text/xml; charset="utf-8"
Depth: 0

<?xml version="1.0" encoding="utf-8" ?>
<D:propfind xmlns:D="DAV:">
   <D:prop xmlns:R="http://localhost/boxschema/">
      <R:bigbox/>
         <R:author/>
         <R:DingALing/>
      <R:Random/>
   </D:prop>
</D:propfind>
PROPFINDメソッドのリクエスト

HTTP/1.1 207 Multi-Status
Date: Fri, 14 Sep 2001 06:07:26 GMT
Server: Apache/1.3.19 (Unix) DAV/1.0.2
Transfer-Encoding: chunked
Content-Type: text/xml; charset="utf-8"

379
<?xml version="1.0" encoding="utf-8"?>
<D:multistatus xmlns:D="DAV:">
<D:response xmlns:lp0="DAV:" xmlns:lp1="http://apache.org/dav/props/">
<D:href>/DAV/setup01.jpg</D:href>
<D:propstat>
<D:prop>
<lp0:creationdate>2001-09-13T13:29:41Z</lp0:creationdate>
<lp0:getcontentlength>72285</lp0:getcontentlength>
<lp0:getlastmodified>Thu, 13 Sep 2001 13:29:41 GMT</lp0:getlastmodified>
<lp0:getetag>"12ef3-11a5d-3ba0b4c5"</lp0:getetag>
<lp1:executable>F</lp1:executable>
<D:supportedlock>
<D:lockentry>
<D:lockscope><D:exclusive/></D:lockscope>
<D:locktype><D:write/></D:locktype>
</D:lockentry>
<D:lockentry>
<D:lockscope><D:shared/></D:lockscope>
<D:locktype><D:write/></D:locktype>
</D:lockentry>
</D:supportedlock>
<D:lockdiscovery/>
<D:resourcetype/>
<D:getcontenttype>image/jpeg</D:getcontenttype>
</D:prop>
<D:status>HTTP/1.1 200 OK</D:status>
</D:propstat>
</D:response>
</D:multistatus>
PROPFINDメソッドのレスポンス

 XMLデータとしてレスポンスが返ってきていることが分かる。多少見づらいかもしれないが、まずはこういうものだということが分かってくれればよい。

 WebDAVにおいては、ステータスコードの新設/拡張も行われている。新設されたステータスコードは表2のとおり。

ステータス
意味
102 Processing リクエストは受け付けたが、まだ処理が終わっていない
207 Multi-Status 複数のステータスを持つ
422 Unprocessible Entity リクエストの書式は正しいが、その内容が間違っている
423 Locked リソースはロックされている
424 Failed Dependency あるリクエストに関連したリクエストが失敗したため、依存関係が保てない
507 Insufficient Storage 記憶領域が不足している
表2 新設されたステータスコード

DAV準拠クラス(DAV Compliant Classes)

 WebDAV準拠といっても、使用可能なメソッドによってクラス分けされている。このクラスは、OPTIONSメソッドを実行してレスポンスとして返ってきたDAVヘッダをチェックすることで知ることができる。

クラス1
クラス2
PROPFIND クラス1に加えて
PROPPATCH LOCK
UNLOCK
MKCOL
DELETE
COPY
MOVE

表3 DAV準拠クラス(DAV Compliant Classes)

 2001年9月現在、RFC2518においてはクラス1およびクラス2が定義されている。それぞれのクラスでサポートするメソッドは表3のとおりである。

 現在は、クラス2はクラス1を包含するものとなっているが、今後クラス3、4……と定義された際に、クラス1、2、4に準拠するものがクラス3に準拠するとは限らない。

WebDAVの注意点

 WebDAVはHTTPのメソッド拡張が基本となっているため、シーケンスもシンプルである。ただし、設定によってはセキュリティホールのもとになったり、DoS攻撃にさらされたりすることに変わりはない。

参考資料

・RFC 2291ftp://ftp.nic.ad.jp/rfc/rfc2291.txt
Requirements for a Distributed Authoring and Versioning Protocol for the World Wide Web

・RFC 2518ftp://ftp.nic.ad.jp/rfc/rfc2518.txt
HTTP Extensions for Distributed Authoring -- WEBDAV


次世代プロトコルWebDAVの可能性[前編]

次世代プロトコルWebDAVの可能性[中編]

次世代プロトコルWebDAVの可能性[後編]