メインコンテンツまでスキップ

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: タイムアウトなしのロックを要求
  • 複数の値は優先順位を示す
  • サーバーがクライアントのリストから選択または独自の値を使用

ヘッダー概要表

ヘッダーメソッド必須デフォルト
DAVOPTIONSMUST-1, 2, 3, extend
DepthPROPFIND, LOCK, COPY, MOVEMAYinfinity0, 1, infinity
DestinationCOPY, MOVEMUST-絶対URI
If全てMAY-状態トークン、ETag
Lock-TokenUNLOCKMUST-ロックトークンURI
OverwriteCOPY, MOVEMAYTT, F
TimeoutLOCKMAYサーバー決定Second-n, Infinite

注記: ABNF構文を含む完全なヘッダー仕様については、RFC 4918のセクション10を参照してください。