WebDAVはHTTP 1.1の拡張仕様であると説明したが、具体的にどのような拡張が行われているのだろうか? WebDAVで導入された概念や仕様を紹介する。
現在、多様化、複雑化した感はあるものの、Webの根幹にあるHTTPの実装は、非常にシンプルである。しかし、WebDAVにおいてはWebリソースの取り扱いに当たり、新しい概念を導入した。それが「プロパティ」と「コレクション」、そして「ロック」である。後述するが、プロパティとコレクションに対応した新規メソッドの規定/既存メソッドの拡張も併せて実施されている。
1.リソース(Resource)
WebDAVでの操作/管理の対象となるもの。ファイルやコレクション(後述)はリソースである。
2.コレクション(Collection)
複数のリソースをまとめて管理するための概念として、コレクションが定義されている。
例えば、FTPでは単一のファイル/ディレクトリへの操作を行うことが基本であるが、WebDAVではコレクションに対する操作を行うことが可能である。実装的には、コレクション=ディレクトリ(もしくはフォルダ)を示すことが多い。
3.プロパティ(Property)
リソースの属性を名前と値のペア(例:名前=値)で定義したものである。また、プロパティには2種類あり、それぞれライブプロパティ/デッドプロパティと呼ばれる。
リソース、プロパティ、コレクションの関連を図4に示す。
4.ロック(Lock)
読み込みだけでなく書き込みもサポートしたWebDAVだが、分散オーサリングを実施するに当たり、複数の人間が同じリソースに対する書き込みを行わないとも限らない。これを回避するための仕組みがロックである。WebDAVが提供するロックは、共有ロック(Shared Lock)方式である。排他ロックとは異なり、リソースがロックされている状態でもアクセスは可能である。
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
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
ちなみに、この場合のステータスコード「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>
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>
XMLデータとしてレスポンスが返ってきていることが分かる。多少見づらいかもしれないが、まずはこういうものだということが分かってくれればよい。
WebDAVにおいては、ステータスコードの新設/拡張も行われている。新設されたステータスコードは表2のとおり。
値 | ステータス | 意味 |
---|---|---|
102 | Processing | リクエストは受け付けたが、まだ処理が終わっていない |
207 | Multi-Status | 複数のステータスを持つ |
422 | Unprocessible Entity | リクエストの書式は正しいが、その内容が間違っている |
423 | Locked | リソースはロックされている |
424 | Failed Dependency | あるリクエストに関連したリクエストが失敗したため、依存関係が保てない |
507 | Insufficient Storage | 記憶領域が不足している |
表2 新設されたステータスコード |
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はHTTPのメソッド拡張が基本となっているため、シーケンスもシンプルである。ただし、設定によってはセキュリティホールのもとになったり、DoS攻撃にさらされたりすることに変わりはない。
10月中旬 WebDAV環境構築編公開予定
ApacheのWebDAV対応化からWebDAVクライアントのインストール、操作方法まで。ご期待ください。
Copyright © ITmedia, Inc. All Rights Reserved.