/
982.txt
68 lines (50 loc) · 3.68 KB
/
982.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
65
66
67
68
[2] [DFN[[RUBYB[書き込みロック]@en[write lock]]]]は、変更操作に関する[[ロック]]です。
* 仕様書
[REFS[
- [1] '''[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>'''
-- [12] [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.4>
]REFS]
* 意味
[3] [[書き込みロック]]は、[RUBYB[書き込み]@en[write]]に関する[[ロック]]の種別です [SRC[>>1]]。
[4] 排他的[[書き込みロック]]は、[[ロック作成者]]以外の [[principal]]
による[[要求]]や[[ロックトークン]]が[[提出]]されていない[[要求]]による変更を防ぎます。
[[クライアント]]は、[[書き込みロック]]された[[資源]]を変更する[[要求]]においては、
適切な[[ロックトークン]]を[[提出]]しなければ[['''なりません''']]。 [SRC[>>1]]
[5] [[書き込みロック]]は次の操作に適用されます。
[FIG(list)[
- [6] [[書き込みロック]]された[[資源]]の[[異体]]や[[死特性]]や[RUBYB[[[ロック可能]]]@en[lockable]]な[[生特性]]についての変更 [SRC[>>1]]。
- [7] [[コレクション]]の[[内部メンバーURL]]の変更、すなわち追加、削除、
他の[[資源]]への変更 [SRC[>>1, >>12]]。
- [8] [[ロック根]]の[[写像]]の他の[[資源]]への変更や[[資源]]なしへの変更 ([CODE(HTTP)@en[[[DELETE]]]] など) [SRC[>>1]]。
]FIG]
;; [10] [[ロック可能]]でない[[生特性]]は、[[書き込みロック]]されていたとしても、
その定義に従い変化することがあります [SRC[>>1]]。
[9] [[書き込みロック]]は次の[[要求メソッド]]に適用されます [SRC[>>1]]。
[FIG(short list)[
- [CODE(HTTP)@en[[[PUT]]]]
- [CODE(HTTP)@en[[[POST]]]]
- [CODE(HTTP)@en[[[PROPPATCH]]]]
- [CODE(HTTP)@en[[[LOCK]]]]
- [CODE(HTTP)@en[[[UNLOCK]]]]
- [CODE(HTTP)@en[[[MOVE]]]]
- [CODE(HTTP)@en[[[COPY]]]] ([[終点]]側の[[資源]])
- [CODE(HTTP)@en[[[DELETE]]]]
- [CODE(HTTP)@en[[[MKCOL]]]]
]FIG]
[11] [[lost update]] 問題を完全に回避することはできませんが、[[クライアント]]はできるだけ
[CODE(HTTP)@en[[[LOCK]]]] → 取得 → 書き込み → [CODE(HTTP)@en[[[UNLOCK]]]]
の順序を守ることや、変更時に[[実体タグ]]を [CODE(HTTP)@en[[[If-Match:]]]]
[[ヘッダー]]に指定することが良い [SRC[>>1]] とされています。
;; [17] [[ロック]]の項も参照。
* コレクションの書き込みロック
[13] [[コレクション]]の[[書き込みロック]]には、深さ0と深さ無限大の2種類があります [SRC[>>12]]。
[14] [RUBYB[深さ0]@en[depth-0]]の[[書き込みロック]]は、
[[コレクション]]の[[特性]]と[[内部メンバーURL]] (や、あれば[[payload body]]) は保護しますが、
[[メンバー資源]]の[[内容]]や[[特性]]は保護しません。 [SRC[>>12]]
[15] [RUBYB[深さ無限大]@en[depth-infinity]]の[[書き込みロック]]は、
[[コレクション]]と[[コレクション]]の[[メンバー資源]]をすべて保護します [SRC[>>12]]。
[16] [[コレクション]]と[[メンバー]]がそれぞれ[[ロック]]されている時は、
変更には関係するすべての[[ロック]]が必要です [SRC[>>12]]。
* 移動や削除
[18] [[書き込みロック]]自体は、適用対象の[[資源]]の移動や削除が行われても変化しません。
;; [CODE(HTTP)@en[[[MOVE]]]]、[CODE(HTTP)@en[[[COPY]]]] 参照。