Web Server は、Web ベースのコラボレーションの標準である WebDAV、つまり Web ベースの分散オーサリングおよびバージョン管理 (Web-based Distributed Authoring and Versioning) をサポートしています。WebDAV は HTTP/1.1 プロトコルの拡張機能であり、クライアントがリモート Web コンテンツのオーサリング操作を実行できるようにします。
完全な WebDAV トランザクションには、Web Server など、WebDAV リソースへの要求を処理できる WebDAV 対応サーバーと、Adobe® GoLive® や Macromedia® DreamWeaver® など、WebDAV 対応の Web パブリッシング要求をサポートする WebDAV 対応クライアントが必要になります。
サーバー側では、WebDAV 要求を処理できるように Web Server を有効化および構成する必要があります。
WebDAV を構成する理由としては、 サーバーのパフォーマンスチューニング、セキュリティーリスクの解消、衝突の発生しないリモートオーサリングなど、いくつかの理由が考えられます。
ユーザーは構成の要件に応じて、サーバーが WebDAV リソースのロックを保持する時間の最小値、コレクションに対する PROPFIND 要求の実行範囲、要求の本文内に指定可能な XML コンテンツの最大サイズなどを変更することができます。
仮想サーバーレベルでは、ある仮想サーバーのすべてのコレクションに対するデフォルトの WebDAV 属性を構成できます。ここで構成された値は、server.xml ファイル内の DAV 要素に対応します。
WebDAV 属性はコレクションレベルでも構成可能であり、その値は、仮想サーバーレベルでそのコレクションに対して構成されたどの属性よりも優先されます。コレクションレベルで構成された属性値は、server.xml ファイル内の DAVCOLLECTION 要素に対応します。
WebDAV は HTTP/1.1 プロトコルの拡張機能であり、新しい HTTP メソッドやヘッダーが追加されていますが、それらのメソッドやヘッダーは、HTML や XML だけでなく、テキスト、グラフィックス、スプレッドシート、およびその他のすべての形式を含む、あらゆるタイプの Web リソースに対してオーサリングサポートを提供します。WebDAV を使って実現可能なタスクを、いくつか次に示します。
プロパティー (メタデータ) の操作:WebDAV メソッドの PROPFIND と PROPPATCH を使えば、作成者や作成日付など、Web ページに関する情報の作成、削除、およびクエリーを行えます。
コレクションおよびリソースの管理:WebDAV メソッドの GET、PUT、DELETE、および MKCOL を使えば、一連のドキュメントを作成したり、ファイルシステムのディレクトリ一覧に似た階層的なメンバーシップ一覧を取得したりできます。
ロック:WebDAV を使えば、あるドキュメントを複数のユーザーが同時に操作しないようにできます。WebDAV メソッドの LOCK や UNLOCK による排他ロックや共有ロックを使えば、「失われた更新」(変更の上書き) の問題が発生しにくくなります。
名前空間の操作:WebDAV では、WebDAV メソッドの COPY や MOVE を使って Web リソースのコピーや削除をサーバーに指示できます。
Web Server の WebDAV サポートによって提供される機能は、次のとおりです。
RFC 2518 準拠による RFC 2518 クライアントとの相互運用性
パブリッシングのセキュリティーおよびアクセス制御。
ファイルシステムベースの WebDAV コレクションおよびリソースに対する効率的な発行操作。
この節では、WebDAV を扱う際に目にする一般的な用語について、簡単に説明します。
URI:URI (Uniform Resource Identifier) はファイル識別子の 1 つであり、省略形の URL を使用することで追加のセキュリティー層を提供します。URL の最初の部分が URL マッピングで置換されるため、ファイルの完全な物理パス名がユーザーからわからないようになります。
ソース URI:ソース URI という用語は、リソースのソースへのアクセスが可能な URI を意味します。ソース URI の概念を理解するために、次のような例を考えます。
JSP ページ foo.jsp が URI /docs/date.jsp に格納されています。このページには HTML マークアップと Java コードが含まれていますが、この Java コードは実行時に、クライアントのブラウザ上に現在日付を出力します。サーバーは、foo.jsp の GET 要求をクライアントから受信すると、そのページを送信する前に Java コードを実行します。クライアントが受信するのは、サーバー上に存在している状態の foo.jsp ではなく、動的に生成された、現在日付が表示されたページです。
たとえば、/publish/docs というソース URI を作成し、それを foo.jsp を含む /docs ディレクトリにマップした場合、/publish/docs/foo.jsp に対する要求は、/docs/foo.jsp JSP ページのソースコードに対する要求になります。この場合、サーバーは Java コードを実行せずにページを送信します。クライアントは、ディスク上に格納された状態のままの、未処理のページを受信します。
したがって、ソース URI に対する要求は、リソースのソースに対する要求になります。
コレクション:WebDAV コレクションとは、WebDAV 操作に対応したリソースまたは一連のリソースのことです。コレクションには一連の URI が含まれますが、これらはメンバー URI と呼ばれ、WebDAV に対応した各メンバーリソースを識別します。
メンバー URI:コレクション内の一連の URI のメンバーになっている URI。
内部メンバー URI:コレクションの URI の直接の相対パスになっているようなメンバー URI。たとえば、URL http://info.sun.com/resources/info のリソースが WebDAV に対応しており、URL http://info.sun.com/resources/ のリソースも WebDAV に対応している場合、URL http://info.sun.com/resources/ のリソースはコレクションであり、http://info.sun.com/resources/info を内部メンバーとして含みます。
プロパティー:リソースについての記述情報を含む名前と値のペア。プロパティーは、リソースの検索や管理を効率的に行うために使用されます。たとえば、「creationdate」プロパティーを使えば、すべてのリソースのインデックス作成をリソースの作成日付に基づいて行えますし、「author」プロパティーを使えば、それを作成者名に基づいて行えます。
ライブプロパティー: サーバーによって管理されるプロパティー。たとえば、getcontentlength ライブプロパティーはその値として、GET 要求によって返されるエンティティーの長さを持ちますが、この値はサーバーによって自動計算されます。ライブプロパティーには次のものがあります。
値がサーバーによって維持される、読み込み専用のプロパティー
値がクライアントによって維持されるプロパティー。ただし、サーバーは送信されてきた値に対して構文チェックを実行します。
デッドプロパティー: サーバーによって管理されないプロパティー。デッドプロパティーの場合、サーバーはその値を記録するだけです。その整合性を維持する責任はクライアントにあります。
サーバーがサポートするライブプロパティーは、次のとおりです。
creationdate
displayname
getcontentlanguage
getcontentlength
getcontenttype
gettag
getlastmodified
lockdiscovery
resourcetype
supportedlock
executable
サーバーがサポートするライブプロパティー executable を使えば、クライアントがリソースに関連付けられたファイルアクセス権を変更できます。
executable ライブプロパティーに対する PROPPATCH 要求の例を、次に示します。
PROPPATCH /test/index.html HTTP/1.1
Host: sun
Content-type: text/xml
Content-length: XXXX
<?xml version="1.0"?>
<A:propertyupdate xmlns:A="DAV:" xmlns:B="http://apache.org/dav/props/">
<A:set>
<A:prop>
<B:executable>T</B:executable>
</A:prop>
</A:set>
</A:propertyupdate>
ロック:リソースをロックする機能は、あるユーザーが編集しているリソースを別のユーザーが変更しないことを保証する機構を提供します。ロックを使えば上書きの衝突を回避でき、「失われた更新」の問題を解決できます。
サーバーがサポートするロックは 2 種類あります。 共有と排他です。
新しい HTTP ヘッダー:WebDAV は HTTP/1.1 プロトコルを拡張することで機能します。クライアントが WebDAV リソースに対する要求を伝えるための HTTP ヘッダーが、新たに定義されています。それらのヘッダーを次に示します。
Destination:
Lock-Token:
Timeout:
DAV:
If:
Depth:
Overwrite:
新しい HTTP メソッド: WebDAV では、WebDAV 対応サーバーに要求の処理方法を指示する新しい HTTP メソッドが、いくつか導入されました。GET、PUT、DELETE などの既存の HTTP メソッドに加えてそれらのメソッドを使用することで、WebDAV トランザクションが実行されます。新しい HTTP メソッドの簡単な説明を、次に示します。
COPY:リソースをコピーするために使用されます。コレクションのコピー時には、Depth: ヘッダーが使用され、Destination: ヘッダーによってコピー先が指定されます。COPY メソッドでは、Overwrite: ヘッダーも必要に応じて使用されます。
MOVE:リソースを移動するために使用されます。コレクションの移動時には、Depth: ヘッダーが使用され、Destination: ヘッダーによって移動先が指定されます。MOVE メソッドでは、Overwrite: ヘッダーも必要に応じて使用されます。
MKCOL:新しいコレクションを作成するために使用されます。このメソッドは、PUT メソッドのオーバーロードを回避するために使用されます。
PROPFIND:1 つ以上のリソースに属する 1 つ以上のプロパティーを取得するために使用されます。クライアントがあるコレクションの PROPFIND 要求をサーバーに送信する場合、その要求には、 0、1、infinity のいずれかの値を持つ Depth: ヘッダーが含まれている可能性があります。
0:指定された URI のコレクションのプロパティーを取得することを指定します。
1:コレクションのプロパティーと、指定された URI のすぐ下にあるリソースのプロパティーを取得することを指定します。
infinity:コレクションのプロパティーと、そのコレクションに含まれるすべてのメンバー URI のプロパティーを取得することを指定します。無限の実行範囲を持つ要求ではコレクションの全体が検索されるため、サーバーに大きな負荷がかかる可能性があるので、注意が必要です。
管理サーバーを使えば、WebDAV をサーバー全体で有効にすることができます。そのようにした場合、WebDAV プラグインを読み込むための次の指令が、magnus.conf file に追加されます。
Init fn="load-modules" shlib="/s1ws6.1/lib/libdavplugin.so" funcs="init-dav,ntrans-dav,pcheck-dav,service-dav" shlib_flags="(global|now)" Init fn="init-dav" LateInit=yes
init-dav Init 関数は、WebDAV サブシステムを初期化して登録します。
WebDAV を有効にするには、CLI で次のコマンドを実行します。
wadm> enable-webdav --user=admin --password-file=admin.pwd --host=serverhost --port=8989 --config=test |
CLI リファレンスの enable-webdav(1) を参照してください。
WebDAV コレクションを有効にするには、次のコマンドを実行します。
wadm> enable-dav-collection --user=admin --password-file=admin.pwd --host=serverhost --port=8989 --config=config1 --vs=config1_vs_1 --uri=/dav_config1 |
CLI リファレンスの enable-dav-collection(1) を参照してください。
WebDAV コレクションを無効にするには、次のコマンドを実行します。
wadm> disable-dav-collection --user=admin --password-file=admin.pwd --host=serverhost --port=8989 --config=config1 --vs=config1_vs_1 --uri=/dav_config1 |
CLI リファレンスの disable-dav-collection(1) を参照してください。
WebDAV コレクションを追加するには、次のコマンドを実行します。
wadm> create-dav-collection --user=admin --password-file=admin.pwd --host=serverhost --port=8989 --config=config1 --vs=config1_vs_1 --uri=/dav_config1 --source-uri=/dav_config1 |
CLI リファレンスの create-dav-collection(1) を参照してください。
すべての WebDAV コレクションを一覧表示するには、次のコマンドを実行します。
wadm> list-dav-collections --user=admin --password-file=admin.pwd --host=serverhost --port=8989 --config=config1 --vs=config1_vs_1 |
CLI リファレンスの list-dav-collections(1) を参照してください。
WebDAV コレクションを削除するには、次のコマンドを実行します。
wadm> delete-dav-collection --user=admin --password-file=admin.pwd --host=serverhost --port=8989 --config=config1 --vs=config1_vs_1 --uri=/dav_config1 |
CLI リファレンスの delete-dav-collection(1) を参照してください。
サーバーレベルの WebDAV プロパティーを設定するには、次のコマンドを実行します。
wadm> set-webdav-prop --user=admin --password-file=admin.pwd --host=serverhost --port=8989 --config=config1 acl-max-entries=120 |
CLI リファレンスの set-webdav-prop(1) を参照してください。
サーバーレベルの WebDAV プロパティーを表示するには、次のコマンドを実行します。
wadm> get-webdav-prop --user=admin --password-file=admin.pwd --host=serverhost --port=8989 --config=config1 |
CLI リファレンスの get-webdav-prop(1) を参照してください。
WebDAV コレクションのプロパティーを設定するには、次のコマンドを実行します。
wadm> set-dav-collection-prop --user=admin --password-file=admin.pwd --host=serverhost --port=8989 --config=config1 --vs=config1_vs_1 --uri=/dav_config1 min-lock-timeout=1 |
CLI リファレンスの set-dav-collection-prop(1) を参照してください。
WebDAV コレクションのプロパティーを表示するには、次のコマンドを実行します。
wadm> get-dav-collection-prop --user=admin --password-file=admin.pwd --host=serverhost --port=8989 -config=config1 --vs=config1_vs_1 --uri=/dav_config1 |
CLI リファレンスの get-dav-collection-prop(1) を参照してください。
一般的な WebDAV プロパティーのいくつかを、次の表に示します。
表 10–1 WebDAV パラメータ
パラメータ |
説明 |
---|---|
ロックデータベースのパス |
ロックデータベースが維持されるディレクトリを指定します。 |
最小ロックタイムアウト |
ロックの最短の寿命を秒単位で指定します。値 -1 は、ロックが決して期限切れにならないことを意味します。この値は、ある要素のロックが自動的に解除されるまでの時間を示します。 |
最大要求サイズ |
XML 要求本文の最大サイズを指定します。サービス拒否攻撃に備えてこの値を構成すべきです。デフォルト値は 8192 (8K) です。 |
最大拡張プロパティー Depth |
拡張プロパティーの実行範囲を指定します。0 の場合、指定されたリソースのみが処理対象になります。これがデフォルト値です。1 の場合、指定されたリソースとその次のレベルが処理対象になります。infinity の場合、指定されたリソースとそれに含まれるすべてのリソースが処理対象になります。また、このパラメータのサイズを制限することで、過剰なメモリー消費を防止するようにしてください。 |
デフォルトの所有者 |
コレクションのデフォルトの所有者。 |
URI |
WebDAV が有効になっている既存のルート URI。 |
最大 PROPFIND Depth |
コレクションに送信される PROPFIND 要求の実行範囲の最大値。 |
ロックデータベースの更新間隔 |
WebDAV ロックデータベースがディスクとの同期を取る間隔。WebDAV ロック情報のキャッシュを無効にするには、0 を使用します。 |
認証データベース |
使用する ACL 認証データベース。 |
認証方法 |
使用する認証方法。デフォルトの認証方法は「基本」です。 |
認証確認テキスト |
認証要求時にクライアントに表示される確認テキスト。 |
DAV ACL データベース | |
最大エントリ数 |
単一のリソースで許可される ACE の最大数。0-2147.0483647.0。制限なしの場合は —1 を指定します。 |
最大サイズ |
1 つのコレクションに対する WebDAV ACL データベースのメモリー表現の最大サイズ。0-2147.0483647.0。制限なしの場合は —1 を指定します。 |
更新間隔 |
WebDAV ACL データベースがディスクとの同期を取る間隔。0.001–3600 秒。WebDAV ACL リストのキャッシュを無効にする場合は、0 を指定します。 |
DAV プロパティーデータベース | |
最大サイズ |
WebDAV プロパティーデータベースファイルの最大サイズ。0-2147.0483647.0。制限なしの場合は —1 を指定します。 |
更新間隔 |
WebDAV プロパティーデータベースがディスクとの同期を取る間隔。0.01–3600 秒。WebDAV プロパティーのキャッシュを無効にする場合は、0 を指定します。 |
サーバーレベルで WebDAV を無効にするには、次のコマンドを実行します。
wadm> disable-webdav --user=admin --password-file=admin.pwd --host=serverhost --port=8989 --config=config1 |
CLI リファレンスの disable-webdav(1) を参照してください。
管理コンソールで WebDAV 認証データベースの設定を編集するには、選択された構成から「WebDAV 」タブをクリックします。次の表に、そのページ内の各フィールドの簡単な説明を示します。
表 10–2 WebDAV 認証データベースのプロパティー
WebDAV メソッドはリソースまたはコレクションのソースを処理します。GET や PUT などの HTTP メソッドは WebDAV プロトコルによってオーバーロードされるため、これらのメソッドを含む要求は、リソースのソースへの要求、リソースのコンテンツ (出力) への要求のいずれかになります。
Microsoft やその他の多くの WebDAV ベンダーは、要求と一緒に Translate:f ヘッダーを送信し、その要求がソースに対するものであることをサーバーに知らせるようにすることで、この問題を解決しました。広く利用されている WebDAV クライアントである Microsoft WebFolders との相互運用性を確保するため、サーバーは Translate:f ヘッダーをリソースのソースへの要求として認識します。Translate:f ヘッダーを送信しないクライアントに対応するため、サーバーはソース URI を定義します。
WebDAV に対応したコレクションの場合、URI を要求するとリソースのコンテンツ (出力) が取得され、ソース URI を要求するとリソースのソースが取得されます。Translate:f ヘッダーを含む URI への要求は、ソース URI への要求として扱われます。
デフォルトでは、サーバーインスタンスに固有の ACL ファイル内にある、次の宣言を含む dav-src ACL によって、リソースのソースへのアクセスのすべてが拒否されることに注意してください。
deny (all) user = "anyone";
ソースへのアクセスをあるユーザーに許可するには、ソース URI へのアクセス権限を追加してください。
サーバー管理者は、リソースをロックすることでそのリソースへのアクセスを直列化できます。ある特定のリソースにアクセスするユーザーは、ロックを使用することで、別のユーザーがその同じリソースを変更することがない、という安心感が得られます。こうして、サーバー上のリソースを複数のユーザーが共有する場合に生じる「失われた更新」の問題が解決されます。サーバーによって維持されるロックデータベースは、発行され、クライアントによって使用されるロックトークンを追跡します。
サーバーがサポートする opaquelocktoken URI スキーマは、すべての時間にわたってすべてのリソース間で一意になるように設計されています。これには、ISO-1157.08 で説明されている汎用一意識別子 (UUID) 機構が使用されています。
サーバーは次の 2 種類のロック機構を認識します。
排他ロック。
共有ロック。
排他ロックとは、リソースへのアクセスを単一ユーザーにのみ許可するロックのことです。ほかのユーザーがその同じリソースにアクセスできるのは、そのリソースの排他ロックが解除された後です。
排他ロックは、リソースをロックする機構としては、厳格でコストがかかりすぎる場合があると言われています。たとえば、プログラムがクラッシュしたりロック所有者がリソースのロック解除を忘れたりした場合、ロックタイムアウトや管理者の介入がないと排他ロックを解除できません。
共有ロックを使えば、あるリソースのロックを複数のユーザーが取得できます。したがって、適切なアクセス権を持つユーザーであれば、誰でもロックを取得できます。
共有ロックを使用する場合、複数のロック所有者は、何らかの通信手段を使って作業の調整を行えます。共有ロックの目的は、共同作業者に、ほかのどのユーザーがリソースを操作する可能性があるかを知らせることです。
ロックを制御するには、server.xml ファイル内の DAV または DAVCOLLECTION オブジェクトの minlocktimeout 属性の値を構成します。minlocktimeout 属性は、ロックの最小の寿命を秒単位で指定します。この値は、ある要素のロックが自動的に解除されるまでの時間を示します。
これは省略可能な属性です。値を -1 に設定すると、ロックが決して期限切れにならなくなります。値を 0 に設定すると、要求に指定された Timeout ヘッダーのタイムアウトで、コレクション内のすべてのリソースをロックできるようになります。
Timeout ヘッダーが指定されていないと、無限大のタイムアウトでリソースがロックされます。要求の Timeout ヘッダーが値 Infinite に設定されていると、やはり無限大のタイムアウトでリソースがロックされます。
WebDAV リソースの要求に含まれる Timeout ヘッダー値が、server.xml に指定された minlocktimeout 値に等しいかそれより大きい場合、その要求に指定された期間の間、リソースがロックされます。
これに対し、要求の Timeout ヘッダー値が server.xml に指定された minlocktimeout 値より小さい場合には、その server.xml に指定された minlocktimeout 値でリソースがロックされます。
次の表に、サーバーがロック要求を処理する方法を示します。
表 10–3 Sun Java System Web Server がロック要求を処理する方法
CLI の使用
CLI 経由でロックの期限切れを設定するには、次のコマンドを実行します。
wadm> expire-lock --user=admin --password-file=admin.pwd --host=serverhost--port=8989 --config=config1 --vs=config1 --collection-uri=/dav1 --lock-uri=/dav1/file.html --opaque-token=opaquelocktoken |
CLI リファレンスの expire-lock(1) を参照してください。
上の例の opaque-token は、期限切れに設定するロックの ID を指定しています。
CLI 経由で既存のロックを表示するには、次のコマンドを実行します。
wadm> list-locks --user=admin --password-file=admin.pwd --host=serverhost --port=8989 --config=config1 --vs config1 --collection-uri=/dav1 |
CLI リファレンスの list-locks(1) を参照してください。