/
20.txt
64 lines (48 loc) · 4.19 KB
/
20.txt
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
[1] [DFN[[RUBYB[ロックされた空の資源]@en[locked empty resource]]]]は、
[[資源]]が存在しない [[URL]] を[[ロック]]した時に作成される空の[[資源]]です。
* 仕様書
[REFS[
- [6] [CITE@en[RFC 4918 - HTTP Extensions for Web Distributed Authoring and Versioning (WebDAV)]] ([TIME[2014-09-21 17:04:59 +09:00]] 版) <http://tools.ietf.org/html/rfc4918#section-6>
- [7] [CITE@en[RFC 4918 - HTTP Extensions for Web Distributed Authoring and Versioning (WebDAV)]] ([TIME[2014-09-21 17:04:59 +09:00]] 版) <http://tools.ietf.org/html/rfc4918#section-7.3>
- [40] '''[CITE@en[RFC 4918 - HTTP Extensions for Web Distributed Authoring and Versioning (WebDAV)]] ([TIME[2014-09-21 17:04:59 +09:00]] 版) <http://tools.ietf.org/html/rfc4918#section-9.10>'''
- [3] [CITE@en[RFC 4918 - HTTP Extensions for Web Distributed Authoring and Versioning (WebDAV)]] ([TIME[2014-09-21 17:04:59 +09:00]] 版) <http://tools.ietf.org/html/rfc4918#appendix-D>
]REFS]
* 鯖の動作
[14] [[写像]]がない [[URL]] を[[ロック]]した場合、空の[[資源]]を新たに作らなければ[['''なりません''']] [SRC[>>40, >>6, >>7]]。
[71] ただしいくつかの中間の[[コレクション]]が存在しない場合は、これを自動的に作っては[['''なりません''']]。
[CODE(HTTP)[[[409]]]] [[応答]]を返すことができます。 [SRC[>>40]]
[16] この資源は空の[[資源]] (「locked empty resource」 [SRC[>>7]]) で、次の条件を満たすものです。
[FIG(list)[
- [17] [[コレクション]]でない[[資源]]でなければなりません [SRC[>>7]]。
- [18] [CODE(HTTP)@en[[[Content-Type:]]]] や [CODE(HTTP)@en[[[Content-Language:]]]]
は既定値を使うか、空の値とします [SRC[>>7]]。
- [20] 読み取り、削除、移動、複製その他通常の[[コレクション]]でない[[資源]]のように扱えます [SRC[>>7]]。
- [65] [CODE(HTTP)@en[[[GET]]]] すると [CODE(HTTP)[[[204]]]] または長さ0の
[CODE(HTTP)[[[200]]]] の応答を返します [SRC[>>40]]。
- [26] [CODE(HTTP)@en[[[PUT]]]] により更新できます [SRC[>>7]]。
- [21] 親[[コレクション]]の[[メンバー]]となります [SRC[>>7, >>40]]。
- [22] [[ロック]]が破棄された時に消滅する[['''べきではありません''']] [SRC[>>7]]。
- [25] [CODE(URI)[[[DAV:getcontentlanguage]]]] その他指定されていない[[特性]]の値を持ちません
[SRC[>>7]]。
- [27] [[コレクション]]に変換しては[['''なりません''']] [SRC[>>7]]。
- [28] [CODE(URI)[[[DAV:lockdiscovery]]]] や [CODE(URI)[[[DAV:supportedlock]]]]
の[[特性]]の値を持たなければ[['''なりません''']] [SRC[>>7]]。
]FIG]
;; [15] [[コレクション]]を作る [CODE(HTTP)@en[[[MKCOL]]]] [[メソッド]]は既存の[[資源]]を上書きしないので、
[[lost update問題]]は置きません [SRC[>>7]]。
[31] [[鯖]]は、 [[RFC 2518]] との互換性のため、空の[[資源]]でなく
[[LNR]] (Lock-Null Resource) を実装しても構いません [SRC[>>7]]。
;; [[LNR]] 参照。
[29] 空の[[資源]]を作成した場合の[[応答]]は、 [CODE(HTTP)[[[201]]]] でなければ[['''なりません''']] [SRC[>>7]]。
[[応答]]には [CODE(URI)[[[DAV:lockdiscovery]]]] [[特性]]を含める必要があります [SRC[>>7]]。
* クライアント
[12] [[資源]]への[[写像]]が無い [[URL]] に [CODE(HTTP)@en[[[LOCK]]]]
[[要求]]を送信することにより、名前 ([[URL]]) を予約できます。
これにより[[資源]]の作成時の [[lost update問題]]を回避できます。 [SRC[>>7]]
;; [13] なお、これ以外に [CODE(HTTP)@en[[[If-None-Match:]]]] [[ヘッダー]]を使っても回避できます [SRC[>>7]]。
[30] [[クライアント]]は[[応答]]の後すぐに [CODE(HTTP)@en[[[PUT]]]] や
[CODE(HTTP)@en[[[PROPPATCH]]]] で[[ロック]]した[[資源]]を更新することが期待されています [SRC[>>7]]。
[2] [[鯖]]は[[ロックされた空の資源]]ではなく [[LNR]] を作成するかもしれません。
[[クライアント]]は[[ロックされた空の資源]]も [[LNR]] も扱えなければ[['''なりません''']]
[SRC[>>3]]。
;; [[LNR]] を参照。