LNR

ロック null 資源 (HTTP)

[2] ロック null 資源 (lock-null resource) (LNR) は、 LOCK 要求で作られることがある資源です。

仕様書

意味

[3] LOCK 要求要求URL資源写像されていない URL である場合、は新しい資源を作ることになっています。 RFC 2518 ではこれは「ロック null 資源」 (LNR) を作ることとなっていました。 しかし複雑すぎて相互運用性と実装の問題があった >>1 として、 RFC 4918 ではロックされた空の資源を原則とし、 非推奨 (deprecated) >>1 ながら互換性のために LNR を使っても良いこととしています。

鯖の動作

[5] LNR は、PUTMKCOLOPTIONSPROPFINDLOCKUNLOCK を除き、 404405 を返して存在しないように振る舞います >>1

[6] LNR は、親のコレクションメンバーとして現れます >>1

[8] LNR は、 PUT が成功すると通常の資源に変換されます >>1

[9] LNR は、 MKCOL が成功するとコレクションに変換されます >>1

[10] しかし実装によってはこれに従っていません >>1

[7] LNR は、ロックが破棄された時点で通常の資源に変換されていなければ、 削除されます。ここでロックの破棄には、満期や UNLOCK の他、自身や親のコレクションの移動に伴うものも含まれます。 >>1

[11] LNR では DAV:lockdiscoveryDAV:supportedlock が定義されますが、 他の特性は定義される必要はありません >>1

[13] LOCK 要求に対する応答のみから LNRロックされた空の資源かを判定する方法はありません >>1

クライアントの動作

[4] クライアントロックされた空の資源LNR も扱えなければなりません >>1

[12] クライアントLOCK の後 PUT のみ行い、 MKCOLGET を使わないことで、ロックされた空の資源LNR も扱えます >>1

[15] LOCK 要求でどちらの種類でも新しい資源を作りたくない時には、 If-Match: * を指定することができます >>1

[14] LOCK 要求資源を作成して直後に COPYMOVE で上書きしたい時は、 Overwrite: T要求に指定するべきです >>1

[16] LOCK 要求で新しい資源を作ったものの、 それを削除したい時は、 LNR では DELETE が存在しないとみなして失敗しますし、 ロックされた空の資源では UNLOCK で自動的に削除されることがないので、 UNLOCKDELETE の両方を送信し、一方のみでエラーになっても無視すると良いです >>1