-
Notifications
You must be signed in to change notification settings - Fork 4
/
410.txt
175 lines (131 loc) · 11.3 KB
/
410.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
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
[47] [DFN[[CODE(HTTP)@en[[[PROPFIND]]]]]] は、[[資源]]の[[特性]]を取得する[[要求メソッド]]です。
* 仕様書
[REFS[
- [4] [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-5.2>
- [45] [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-8.2>
- [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-9.1>'''
- [28] [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-14.2>
- [30] [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-14.8>
- [35] [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-14.20>
- [39] [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-14.21>
- [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#page-101>
- [42] [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-17>
- [43] [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-A.3>
- [3] [CITE@en[RFC 2324 - Hyper Text Coffee Pot Control Protocol (HTCPCP/1.0)]] ([TIME[2014-10-06 15:21:16 +09:00]] 版) <http://tools.ietf.org/html/rfc2324#section-2.1.3>
]REFS]
* 意味
[7] [CODE(HTTP)@en[[[PROPFIND]]]] は、[[対象資源]]の[[特性]]を取得するものです。
[[対象資源]]が[[コレクション]]である場合には、それに加えて[[コレクション]]の[[メンバー]]の[[特性]]も取得することができます。 [SRC[>>6]]
[25] [CODE(HTTP)@en[[[PROPFIND]]]] は[[安全なメソッド]]で[[冪等メソッド]]です [SRC[>>6]]。
* 構文
[9] [CODE(HTTP)@en[[[PROPFIND]]]] [[要求]]には、 [CODE(HTTP)@en[[[Depth:]]]]
[[ヘッダー]]の値
[CODE(HTTP)[[[0]]]]、[CODE(HTTP)[[[1]]]]、[CODE(HTTP)@en[[[infinity]]]]
のいずれかを指定しなければ[['''なりません''']] [SRC[>>6]]。
[11] [[要求]]の [[payload body]] は、[[根要素]] [CODE(XMLe)@en[[[propfind]]]]
を使った [[XML文書]]とすることができます [SRC[>>6]]。
[16] [[要求]]の [[payload body]] は、空にもできます [SRC[>>6]]。
;; その場合、 [CODE(XMLe)@en[[[allprop]]]] [[要素]]が指定されたものとみなされます [SRC[>>6]]。
[36] [CODE(URI)@en[[[DAV:]]]] [[名前空間]]の [DFN[[CODE(XMLe)@en[[[propfind]]]]]]
[[要素]]は、返すべき[[特性]]を指定するものです [SRC[>>35]]。
[37] [[内容]]は[[要素内容]]で、 [CODE(XMLe)@en[[[propname]]]] [[要素]]、
[CODE(XMLe)@en[[[allprop]]]] [[要素]]、 [CODE(XMLe)@en[[[prop]]]]
[[要素]]のいずれかを含められます。 [CODE(XMLe)@en[[[allprop]]]]
[[要素]]を含める時は、 [CODE(XMLe)@en[[[include]]]] [[要素]]も含められます。
[SRC[>>35]] 順序は意味を持ちません [SRC[>>42]]。
[FIG(railroad)[
= |
== [CODE(XMLe)@en[[[propname]]]]
== =
=== [CODE(XMLe)@en[[[allprop]]]]
=== ?
==== [CODE(XMLe)@en[[[include]]]]
== =
=== ?
==== [CODE(XMLe)@en[[[include]]]]
=== [CODE(XMLe)@en[[[allprop]]]]
== [CODE(XMLe)@en[[[prop]]]]
]FIG]
[13] [CODE(XMLe)@en[[[prop]]]] [[要素]]によって[[特性]]の名前を列挙することで、
指定した[[特性]]の値を要求できます [SRC[>>6]]。
[38] この [CODE(XMLe)@en[[[prop]]]] [[要素]]は[[特性]]の値を含んでは[['''なりません''']]
[SRC[>>35]]。
[14] [CODE(URI)[[[DAV:]]]] [[名前空間]]の [DFN[[CODE(XMLe)@en[[[allprop]]]]]] [[要素]]は、
当該[[資源]]に存在するすべての[[死特性]]と [[RFC 4918]] で定義されるすべての[[生特性]]の名前と値を返すよう指定するものです [SRC[>>6, >>28]]。
この[[要素]]は、[[空要素]]です [SRC[>>28]]。
[29] [CODE(URI)@en[[[DAV:]]]] [[名前空間]]の [DFN[[CODE(XMLe)@en[[[include]]]]]]
[[要素]]は、更に[[生特性]]を加えて要求するものです [SRC[>>6]]。
[32] [CODE(XMLe)@en[[[include]]]] [[要素]]の[[子要素]]は、
[[応答]]に含めるべき[[特性]]の名前を表すもの
([[特性名要素]]) でなければ[['''なりません''']] [SRC[>>30]]。
順序は意味を持ちません [SRC[>>42]]。
;; [34] [[死特性]]を指定することは禁止されていないようですが、
[CODE(XMLe)@en[[[allprop]]]] [[要素]]で[[死特性]]がすべて含まれるので、
冗長です。
[31] [[内容]]に[[テキスト]]を含めては[['''なりません''']] [SRC[>>30]]。
;; [33] [[要素間空白]]が認められるかは不明です。
[15] [CODE(URI)@en[[[DAV:]]]] [[名前空間]]の [DFN[[CODE(XMLe)@en[[[propname]]]]]]
[[要素]]は、当該[[資源]]で定義されている[[特性]]の名前の一覧のみを要求するものです
[SRC[>>6, >>39]]。[[特性]]の値は要求しません。この[[要素]]は[[空要素]]です [SRC[>>39]]。
* 文脈
[1] [[HTCPCP]] では、対象が[[珈琲]]一杯なら、
その沸かした珈琲に関する[[メタ・データ]]が
[CODE(HTTP)[PROPFIND]] [[method]] を使って得られます [SRC[>>3]]。
* 処理
[8] [[WebDAV]] に従う[[資源]]は、 [CODE(HTTP)@en[[[PROPFIND]]]] [[メソッド]]、
[CODE(XMLe)@en[[[propfind]]]] [[要素]]およびその中で使われる各[[要素]]に対応しなければ[['''なりません''']] [SRC[>>6]]。
[10] [[WebDAV]] に従う[[資源]]は、 [CODE(HTTP)@en[[[Depth:]]]] [[ヘッダー]]の値として
[CODE(HTTP)[[[1]]]] と [CODE(HTTP)[[[0]]]] に対応しなければ[['''ならず''']]、
[CODE(HTTP)@en[[[infinity]]]] にも対応する[['''べきです''']]。
[CODE(HTTP)@en[[[Depth:]]]] [[ヘッダー]]が無い場合は [CODE(HTTP)@en[[[infinity]]]]
とみなす[['''べきです''']]。 [SRC[>>6]]
[26] しかし実際上は性能や保安上の理由で [CODE(HTTP)@en[[[infinity]]]]
への対応を無効としても構いません [SRC[>>6]]。その場合 [CODE(HTTP)[[[403]]]]
[[応答]]で[[事前条件符号]] [DFN[[CODE@en[[[propfind-finite-depth]]]]]]
を指定する[['''べきです''']] [SRC[>>6, >>40]]。
[41] [CODE(XMLe)@en[[[propfind-finite-depth]]]] [[要素]]の[[内容]]は[[空]]です [SRC[>>40]]。
[5] 複数の[[パスセグメント]]から単一の[[資源]]への[[写像]]が存在する場合、
そのうちの1つの[[パスセグメント]]だけを一貫して選んで返さなければ[['''なりません''']]
[SRC[>>4]]。
[12] [[鯖]]は、 [CODE(XMLe)@en[[[prop]]]] [[要素]]で[[特性]]が指定された順序を無視して構いません [SRC[>>6]]。
[17] [[鯖]]は、空の [[payload body]] が指定された場合は [CODE(XMLe)@en[[[allprop]]]]
[[要素]]が指定されたとみなさなければ[['''なりません''']] [SRC[>>6]]。
;; [18] [CODE(XMLe)@en[[[allprop]]]] はその名前に反してすべての[[特性]]を返させるものではありません。
これは、[[特性]]の中には値の計算が大変なものもあるからです [SRC[>>6]]。
[19] [[鯖]]は、指定された[[特性]]を取得しようとした結果の
[CODE(XMLe)@en[[[multistatus]]]] [[要素]]を含む
[CODE(MIME)@en[[[text/xml]]]] または [CODE(MIME)@en[[[application/xml]]]]
の[[応答]]を返せなければ[['''なりません''']] [SRC[>>6]]。
[21] [[コレクション]]に対する[[要求]]の場合、[CODE(XMLe)@en[[[multistatus]]]] [[要素]]は、
[[コレクション]]のうち [CODE(HTTP)@en[[[Depth:]]]] で指定された範囲の[[メンバーURL]]
それぞれについての [CODE(XMLe)@en[[[response]]]] [[要素]]を含まなければ[['''なりません''']]
[SRC[>>6]]。 [[WebDAV]] に適合しない[[資源]]についての [CODE(XMLe)@en[[[response]]]]
[[要素]]を含む[['''べきではありません''']] [SRC[>>6]]。
順序は意味を持ちません [SRC[>>6]]。
[22] [CODE(XMLe)@en[[[response]]]] [[要素]]は、[[資源]]の [[URL]]
を含む [CODE(XMLe)@en[[[href]]]] [[要素]]を含めなければ[['''なりません''']] [SRC[>>6]]。
[23] [[特性]]は[[アクセス制御]]の対象となっているかもしれませんが、
[CODE(XMLe)@en[[[allprop]]]] と [CODE(XMLe)@en[[[propname]]]] の[[要求]]の場合には、
[[特性]]の存在を知る権限がない[[特性]]については黙って除外して構いません [SRC[>>6]]。
[20] [[特性]]の取得時にエラーが発生した場合は、その旨を[[応答]]に含めなければ[['''なりません''']]。
[[特性]]が存在しなかった場合は、 [CODE(HTTP)[[[404]]]] の [CODE(XMLe)@en[[[response]]]]
[[要素]]として含めなければ[['''なりません''']]。 [SRC[>>6]]
[27] 各[[特性]]は [CODE(XMLe)@en[[[propstat]]]] [[要素]]に含めますが、
[CODE(XMLe)@en[[[propstat]]]] [[要素]]は各[[特性]]についての [CODE(XMLe)@en[[[status]]]]
[[要素]]を含みます。[[クライアント]]はその値として任意の [CODE(HTTP)[[[2xx]]]]、
[CODE(HTTP)[[[3xx]]]]、[CODE(HTTP)[[[4xx]]]]、[CODE(HTTP)[[[5xx]]]] の[[状態符号]]を扱えるように準備するべきですが、
[CODE(HTTP)[[[200]]]]、[CODE(HTTP)[[[401]]]]、[CODE(HTTP)[[[403]]]]、[CODE(HTTP)[[[404]]]]
がよく使われます。 [SRC[>>6]]
[44] [[要求]]の [[XML文書]]の[[要素]]の構造が仕様通りでなかった場合の動作は明確に規定されているわけではありませんが、
仕様書の例示によれば、 [CODE(XMLe)@en[[[allprop]]]] と
[CODE(XMLe)@en[[[propname]]]] の両方が指定されている時は、 [CODE(HTTP)[[[400]]]]
[[応答]]を返さなければ[RUBYB[なりません]@en[must]] [SRC[>>43]]。
;; [46] [[要求]]の [[XML]] が怪しい時は [CODE(HTTP)[[[400]]]] を返す [SRC[>>45]]
という規定に基いていると思われますが、 [CODE(HTTP)[[[422]]]] ではなく
[CODE(HTTP)[[[400]]]] を返すべき根拠はよくわかりません。
[24] [CODE(XMLe)@en[[[PROPFIND]]]] [[メソッド]]の結果は[[キャッシュ可能]]なこともありますが、
ほとんどの[[特性]]は[[検証]]の仕組みがありませんから、注意する必要があります [SRC[>>6]]。
* メモ
[2] [CITE[''''''[''''''MS-XWDSEARCH'''''']'''''': Web Distributed Authoring and Versioning (WebDAV) Extensions for Search]]
( ([TIME[2014-09-17 03:17:18 +09:00]] 版))
<http://webcache.googleusercontent.com/search?q=cache:JudZmDtQJ7gJ:download.microsoft.com/download/5/0/1/501ED102-E53F-4CE0-AA6B-B0F93629DDC6/Exchange/%5BMS-XWDSEARCH%5D.pdf#19>