10. HTTP Headers for Distributed Authoring (分散オーサリングのためのHTTPヘッダー)
WebDAVは、分散オーサリング機能をサポートするために、いくつかの新しいHTTPヘッダーを定義し、既存のヘッダーを拡張しています。
10.1 DAVヘッダー
目的: WebDAV準拠クラスとサポートされる機能を示します。
構文:
DAV = "DAV" ":" #(compliance-class)
compliance-class = ("1" | "2" | "3" | extend)
例:
DAV: 1, 2, 3
準拠クラス:
- クラス1: 基本WebDAVサポート (PROPFIND, PROPPATCH, COPY, MOVE, MKCOLなど)
- クラス2: クラス1 + ロックサポート (LOCK, UNLOCK)
- クラス3: クラス1 + 順序付きコレクション
使用: OPTIONSレスポンスで返さなければなりません (MUST)。他のレスポンスでも返すことができます (MAY)。
10.2 Depthヘッダー
目的: コレクションに適用されるメソッドの操作深度を指定します。
構文:
Depth = "Depth" ":" ("0" | "1" | "infinity")
値:
- 0: 対象リソースのみ
- 1: 対象と直接の子
- infinity: 対象とすべての子孫を再帰的に
例:
PROPFIND /collection/ HTTP/1.1
Depth: 1
デフォルト動作:
- PROPFIND: 省略時は
infinity - LOCK: 省略時は
infinity - COPY/MOVE: 省略時は
infinity
10.3 Destinationヘッダー
目的: COPYおよびMOVE操作の宛先URIを指定します。
構文:
Destination = "Destination" ":" Simple-ref
例:
COPY /source HTTP/1.1
Host: example.com
Destination: http://example.com/dest
要件: 絶対URIでなければなりません (MUST)。
10.4 Ifヘッダー
目的: 状態トークン (ETagまたはロックトークン) に基づく条件付き実行を提供します。
例:
1. 単純なロックトークン送信:
PUT /resource HTTP/1.1
If: (<opaquelocktoken:a515cfa4-5da4-22e1-f5b5-00a0451e6bf7>)
2. 複数条件 (OR):
DELETE /resource HTTP/1.1
If: (<locktoken1>) (<locktoken2>)
3. 複数条件 (AND):
MOVE /resource HTTP/1.1
If: (<locktoken>) (["etag123"])
4. NOT条件:
PUT /resource HTTP/1.1
If: (Not <DAV:no-lock>)
評価:
()内のリストはAND結合- 複数のリストはOR結合
Notは条件を否定- 評価失敗時は
412 Precondition Failedを返す
10.5 Lock-Tokenヘッダー
目的: UNLOCK操作のためのロックトークンを提供します。
構文:
Lock-Token = "Lock-Token" ":" Coded-URL
例:
UNLOCK /resource HTTP/1.1
Lock-Token: <opaquelocktoken:a515cfa4-5da4-22e1-f5b5-00a0451e6bf7>
要件: UNLOCKメソッドで使用しなければなりません (MUST)。
10.6 Overwriteヘッダー
目的: COPY/MOVEで宛先リソースを上書きするかを指定します。
構文:
Overwrite = "Overwrite" ":" ("T" | "F")
値:
- T (True): 宛先が存在する場合に上書き (デフォルト)
- F (False): 宛先が存在する場合は失敗 (412を返す)
例:
COPY /source HTTP/1.1
Destination: http://example.com/dest
Overwrite: F
デフォルト: 省略時はT。
10.7 Timeoutヘッダー
目的: 要求されるロックタイムアウト期間を指定します。
構文:
Timeout = "Timeout" ":" 1#TimeType
TimeType = ("Second-" DAVTimeOutVal | "Infinite")
例:
LOCK /resource HTTP/1.1
Timeout: Second-3600
LOCK /resource HTTP/1.1
Timeout: Infinite, Second-3600
セマンティクス:
- Second-n: n秒間のロックを要求
- Infinite: タイムアウトなしのロックを要求
- 複数の値は優先順位を示す
- サーバーがクライアントのリストから選択または独自の値を使用
ヘッダー概要表
| ヘッダー | メソッド | 必須 | デフォルト | 値 |
|---|---|---|---|---|
| DAV | OPTIONS | MUST | - | 1, 2, 3, extend |
| Depth | PROPFIND, LOCK, COPY, MOVE | MAY | infinity | 0, 1, infinity |
| Destination | COPY, MOVE | MUST | - | 絶対URI |
| If | 全て | MAY | - | 状態トークン、ETag |
| Lock-Token | UNLOCK | MUST | - | ロックトークンURI |
| Overwrite | COPY, MOVE | MAY | T | T, F |
| Timeout | LOCK | MAY | サーバー決定 | Second-n, Infinite |
注記: ABNF構文を含む完全なヘッダー仕様については、RFC 4918のセクション10を参照してください。