-
Notifications
You must be signed in to change notification settings - Fork 4
/
410.txt
106 lines (79 loc) · 6.92 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
* 仕様書
[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>
- [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>'''
- [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]]]] [[メソッド]]は、
[[要求URL]]によって表される[[資源]]が[[内部メンバー]]を持たない場合にはその[[資源]]の[[特性]]を、
[[内部メンバー]]を持つ場合にはその[[資源]]や[[内部メンバー]]の[[特性]]を取得するものです [SRC[>>6]]。
[25] [CODE(HTTP)@en[[[PROPFIND]]]] は[[安全なメソッド]]で[[冪等メソッド]]です [SRC[>>6]]。
* 構文
[9] [[クライアント]]は、[CODE(HTTP)@en[[[PROPFIND]]]] [[要求]]に値
[CODE(HTTP)[[[0]]]]、[CODE(HTTP)[[[1]]]]、[CODE(HTTP)@en[[[infinity]]]]
のいずれかの [CODE(HTTP)@en[[[Depth:]]]] [[ヘッダー]]を指定しなければ[['''なりません''']]
[SRC[>>6]]。
[11] [[クライアント]]は、[[要求]]の [[payload body]] で [CODE(XMLe)@en[[[propfind]]]]
[[要素]]を指定できます [SRC[>>6]]。
[FIG(list)[
- [13] [CODE(XMLe)@en[[[prop]]]] [[要素]]によって[[特性]]の名前を列挙することで、特定の[[特性]]の値を要求できます。
- [14] [CODE(XMLe)@en[[[allprop]]]] [[要素]]によって[[死特性]]と特定の[[生特性]]の値を要求できます。
[CODE(XMLe)@en[[[include]]]] [[要素]]で更に[[生特性]]を加えて要求できます。
- [15] [CODE(XMLe)@en[[[propname]]]] [[要素]]で定義されている[[特性]]の名前の一覧を要求できます。
]FIG]
[16] [[クライアント]]は、[[要求]]の [[payload body]] を空にもできます。
その場合、 [CODE(XMLe)@en[[[allprop]]]] [[要素]]が指定されたものとみなされます。 [SRC[>>6]]
* 文脈
[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]]]]
への対応を無効としても構いません。その場合 [CODE(HTTP)[[[403]]]] [[応答]]で[[事前条件符号]]
[CODE@en[[[propfind-finite-depth]]]] を指定する[['''べきです''']]。 [SRC[>>6]]
[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]]
[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>