-
Notifications
You must be signed in to change notification settings - Fork 4
/
972.txt
114 lines (83 loc) · 5.53 KB
/
972.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
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
[8] [DFN[[RUBYB[ロック]@en[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-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.4>
]REFS]
* 意味
[2] [[資源]]を[DFN[[RUBYB[[[ロック]]]@en[lock]]]] ([[動詞]]) することにより、
[[資源]]へのアクセスを[[直列化]]することができ、他の [[principal]]
が同時に[[資源]]を編集しないこと、すなわち [[lost update]] 問題を防ぐことができます。 [SRC[>>1]]
[5] [DFN[[RUBYB[[[ロック]]]@en[lock]]]] ([[名詞]]) は、
直接または間接に[[資源]]を[[ロック]]するものです [SRC[>>1]]。
[11] [[ロック]]は、大域的に固有な[[ロックトークン]]により識別されます [SRC[>>1]]。
* 分類
[3] [[ロック]]は、関与する [[principal]] の数により排他的か共有かに分類できます [SRC[>>1]]。
[13] [DFN[[RUBYB[[[排他的ロック]]]@en[exclusive lock]]]]は、
他の [[principal]] のアクセスを排除することによって、 [[WebDAV]]
の仕組みのみにより変更の[[衝突]]を防止するものです [SRC[>>1]]。
[15] [DFN[[RUBYB[共有ロック]@en[shared lock]]]]は、他の [[principal]]
が操作中であることを知らせるだけのものです。この場合 [[WebDAV]] 外の方法
(直接の対話や[[ポストイット]]、[[電子メール]]など) によって協調が必要かもしれません。
[SRC[>>1]]
;; [16] 経験上、[[排他的ロック]]のみだと何らかの理由で[[ロック]]が解放されなくなる問題が起こりがちなため、
[[共有ロック]]が導入されました [SRC[>>1]]。[[排他的ロック]]でも[[タイムアウト]]や管理者操作で解除はできますが、
[[共有ロック]]の方がより便利です [SRC[>>1]]。
[4] [[ロック]]は、保証されるアクセスの種類によっても分類できます [SRC[>>1]]。
次の種類があります。
[FIG(short list)[
- [[書き込みロック]]
]FIG]
[17] [[WebDAV]] に従う[[資源]]は、
[[排他的ロック]]と[[共有ロック]]のいずれかおよびアクセスの種類の任意の組み合わせについて、
対応してもしなくても構いません。[[ロック]]にまったく対応しなくても構いません。 [SRC[>>1]]
;; [18] [[WebDAV]] の裏側で用いられているシステムで対応する[[ロック]]の手法が様々であることから、
実装の柔軟性を認めています [SRC[>>1]]。
[9] [[ロック]]は通常の[[資源]]にも、[[コレクション]]にも適用されます。
* 状態
[20] [[ロック]]は、次の情報を有します。
[FIG(short list)[
- [[ロックトークン]]
- [[ロック根]]
- [[ロック作成者]]
- [[ロックタイムアウト]]
]FIG]
[27] [[ロック]]に関係して次の[[特性]]があります。
[FIG(short list)[
- [CODE(URI)[[[DAV:supportedlock]]]]
- [CODE(URI)[[[DAV:lockdiscovery]]]]
]FIG]
* 操作
[6] [[ロック]]は [CODE(HTTP)@en[[[LOCK]]]] [[要求]]で作成できます。
;; [CODE(HTTP)@en[[[LOCK]]]] を参照。
[26] [[要求]]において[[ロック]]を[[提出]] ([CODE(HTTP)@en[[[If:]]]]
[[ヘッダー]]に[[ロックトークン]]を指定) することで、
[[ロック]]されている[[資源]]を操作できます。
[25] [[クライアント]]は [CODE(HTTP)@en[[[LOCK]]]] [[要求]]に
[CODE(HTTP)@en[[[If:]]]] [[ヘッダー]]で既存の[[ロックトークン]]を指定することで、
[[ロックタイムアウト]]の更新を求めることができます。
[[鯖]]は[[ロックタイムアウト]]の値を改めて決めて計測を開始します。
** ロックの削除
[12] [CODE(HTTP)@en[[[UNLOCK]]]] [[要求]]は、指定した[[ロックトークン]]の[[ロック]]を削除します。
[[ロック]]が削除されると、その[[ロック]]による[[資源]]の[[ロック]]は解除されます。 [SRC[>>1]]
[10] [[ロック]]されている[[コレクション]]についてある[[資源]]を[[メンバー]]でなくすると、
その[[資源]]は[[コレクション]]の[[ロック]]による間接的な[[ロック]]から除外しなければ[['''なりません''']]。 [SRC[>>1, >>7]]
[14] ある[[要求]]によって[[ロック]]の[[ロック根]]が[[写像]]されない [[URL]]
となった時、その[[ロック]]はその[[要求]]によって削除されなければ[['''なりません''']]。
[SRC[>>1]]
[21] [[ロック]]を削除できるのは、[[ロック作成者]]か、[[ロック]]を削除する[[特権]]を有する
[[principal]] です。
[22] [[ロックタイムアウト]]が経過したら、 [CODE(HTTP)@en[[[UNLOCK]]]]
[[要求]]により[[ロック]]が削除されたかのように動作しなければ[['''なりません''']] [SRC[>>1]]。
* プロトコル
[19] 次の[[プロトコル要素]]が主に関係しています。
[FIG(short list)[
- [CODE(HTTP)@en[[[LOCK]]]]
- [CODE(HTTP)@en[[[UNLOCK]]]]
- [CODE(HTTP)@en[[[423]]]]
- [CODE(HTTP)@en[[[Lock-Token:]]]]
- [CODE(HTTP)@en[[[If:]]]]
- [CODE(HTTP)@en[[[no-conflicting-lock]]]]
- [CODE(URI)@en[[[DAV:supportedlock]]]]
- [CODE(URI)@en[[[DAV:lockdiscovery]]]]
]FIG]