[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] [[特性]]の取得時にエラーが発生した場合は、その旨を[[応答]]に含めなければ[['''なりません''']]。 [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]]

[52] [[特性]]が存在することや、値を正しく取得できたことを [CODE(HTTP)[[[200]]]]
によって示すことができます [SRC[>>6]]。

[50] [[特性]]が適切な[[認証]]のもとでしか表示できないときは、
[CODE(HTTP)[[[401]]]] を使うことができます [SRC[>>6]]。

;; [51] しかし [CODE(HTTP)[[[207]]]] 内に [[challenge]] を記述する方法は用意されていないようです。

[49] [[特性]]が[[認証]]に関わらず表示できない時には、 [CODE(HTTP)[[[403]]]]
を使うことができます [SRC[>>6]]。

[48] 指定された[[特性]]が存在しなかった場合は、
[[状態符号]] [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]]。

* 歴史


[54] [CITE@en[RFC 3253 - Versioning Extensions to WebDAV (Web Distributed Authoring and Versioning)]]
([TIME[2017-09-17 18:19:04 +09:00]])
<https://tools.ietf.org/html/rfc3253#section-3.11>

[55] [CITE@en[RFC 3253 - Versioning Extensions to WebDAV (Web Distributed Authoring and Versioning)]]
([TIME[2017-09-17 18:19:04 +09:00]])
<https://tools.ietf.org/html/rfc3253#section-8.6>

[56] [CITE@en[RFC 3648 - Web Distributed Authoring and Versioning (WebDAV) Ordered Collections Protocol]]
([TIME[2017-09-24 19:10:29 +09:00]])
<https://tools.ietf.org/html/rfc3648#section-8>

[57] [CITE@en[RFC 3744 - Web Distributed Authoring and Versioning (WebDAV) Access Control Protocol]]
([TIME[2017-09-24 17:45:41 +09:00]])
<https://tools.ietf.org/html/rfc3744#section-5>

[63] [CITE@en[RFC 4316: Datatypes for Web Distributed Authoring and Versioning (WebDAV) Properties]], [TIME[2022-02-09T08:58:15.000Z]] <https://www.rfc-editor.org/rfc/rfc4316.html#section-5>

[58] [CITE@en[RFC 4331 - Quota and Size Properties for Distributed Authoring and Versioning (DAV) Collections]]
([TIME[2017-09-24 12:51:47 +09:00]])
<https://tools.ietf.org/html/rfc4331#section-2>

[59] [CITE@en[RFC 4437 - Web Distributed Authoring and Versioning (WebDAV) Redirect Reference Resources]]
([TIME[2017-09-24 19:11:37 +09:00]])
<https://tools.ietf.org/html/rfc4437#section-13>




- [64] [CITE['''['''MS-XWDSEARCH''']'''.pdf]], [TIME[2018-10-13T16:09:45.000Z]], [TIME[2022-02-09T08:59:32.066Z]] <https://download.microsoft.com/download/5/0/1/501ED102-E53F-4CE0-AA6B-B0F93629DDC6/Exchange/%5BMS-XWDSEARCH%5D.pdf>
--[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>



[60] [CITE@en[RFC 5323 - Web Distributed Authoring and Versioning (WebDAV) SEARCH]]
([TIME[2017-10-01 13:49:21 +09:00]])
<https://tools.ietf.org/html/rfc5323#section-2.3.2>

[61] [CITE@en[RFC 5323 - Web Distributed Authoring and Versioning (WebDAV) SEARCH]]
([TIME[2017-10-01 13:49:21 +09:00]])
<https://tools.ietf.org/html/rfc5323#section-5.5.3>

[62] [CITE@en[RFC 5842 - Binding Extensions to Web Distributed Authoring and Versioning (WebDAV)]]
([TIME[2017-09-30 00:47:40 +09:00]])
<https://tools.ietf.org/html/rfc5842#section-2.6>

[53] [CITE@en[RFC 8144 - Use of the Prefer Header Field in Web Distributed Authoring and Versioning (WebDAV)]]
([TIME[2017-04-19 23:22:44 +09:00]])
<https://tools.ietf.org/html/rfc8144#section-2.1>
