include

要求メソッド PROPFIND (HTTP)

[47] PROPFIND は、資源の特性を取得する要求メソッドです。

仕様書

意味

[7] PROPFIND は、対象資源の特性を取得するものです。 対象資源がコレクションである場合には、それに加えてコレクションのメンバーの特性も取得することができます。 >>6

[25] PROPFIND は安全なメソッドで冪等メソッドです >>6。

構文

[9] PROPFIND 要求には、 Depth: ヘッダーの値 0、1、infinity のいずれかを指定しなければなりません >>6。

[11] 要求の payload body は、根要素 propfind を使った XML文書とすることができます >>6。

[16] 要求の payload body は、空にもできます >>6。

その場合、 allprop 要素が指定されたものとみなされます >>6。

[36] DAV: 名前空間の propfind 要素は、返すべき特性を指定するものです >>35。

[37] 内容は要素内容で、 propname 要素、 allprop 要素、 prop 要素のいずれかを含められます。 allprop 要素を含める時は、 include 要素も含められます。 >>35 順序は意味を持ちません >>42。

  1. |
    1. propname
    2. =
      1. allprop
      2. ?
        1. include
    3. =
      1. ?
        1. include
      2. allprop
    4. prop

[13] prop 要素によって特性の名前を列挙することで、 指定した特性の値を要求できます >>6。

[38] この prop 要素は特性の値を含んではなりません >>35。

[14] DAV: 名前空間の allprop 要素は、 当該資源に存在するすべての死特性と RFC 4918 で定義されるすべての生特性の名前と値を返すよう指定するものです >>6, >>28。 この要素は、空要素です >>28。

[29] DAV: 名前空間の include 要素は、更に生特性を加えて要求するものです >>6。

[32] include 要素の子要素は、 応答に含めるべき特性の名前を表すもの (特性名要素) でなければなりません >>30。 順序は意味を持ちません >>42。

[34] 死特性を指定することは禁止されていないようですが、 allprop 要素で死特性がすべて含まれるので、 冗長です。

[31] 内容にテキストを含めてはなりません >>30。

[33] 要素間空白が認められるかは不明です。

[15] DAV: 名前空間の propname 要素は、当該資源で定義されている特性の名前の一覧のみを要求するものです >>6, >>39。特性の値は要求しません。この要素は空要素です >>39。

文脈

[1] HTCPCP では、対象が珈琲一杯なら、 その沸かした珈琲に関するメタ・データが PROPFIND method を使って得られます >>3。

処理

[8] WebDAV に従う資源は、 PROPFIND メソッド、 propfind 要素およびその中で使われる各要素に対応しなければなりません >>6。

[10] WebDAV に従う資源は、 Depth: ヘッダーの値として 1 と 0 に対応しなければならず、 infinity にも対応するべきです。 Depth: ヘッダーが無い場合は infinity とみなすべきです。 >>6

[26] しかし実際上は性能や保安上の理由で infinity への対応を無効としても構いません >>6。その場合 403 応答で事前条件符号 propfind-finite-depth を指定するべきです >>6, >>40。

[41] propfind-finite-depth 要素の内容は空です >>40。

[5] 複数のパスセグメントから単一の資源への写像が存在する場合、 そのうちの1つのパスセグメントだけを一貫して選んで返さなければなりません >>4。

[12] 鯖は、 prop 要素で特性が指定された順序を無視して構いません >>6。

[17] 鯖は、空の payload body が指定された場合は allprop 要素が指定されたとみなさなければなりません >>6。

[18] allprop はその名前に反してすべての特性を返させるものではありません。 これは、特性の中には値の計算が大変なものもあるからです >>6。

[19] 鯖は、指定された特性を取得しようとした結果の multistatus 要素を含む text/xml または application/xml の応答を返せなければなりません >>6。

[21] コレクションに対する要求の場合、multistatus 要素は、 コレクションのうち Depth: で指定された範囲のメンバーURL それぞれについての response 要素を含まなければなりません >>6。 WebDAV に適合しない資源についての response 要素を含むべきではありません >>6。 順序は意味を持ちません >>6。

[22] response 要素は、資源の URL を含む href 要素を含めなければなりません >>6。

[23] 特性はアクセス制御の対象となっているかもしれませんが、 allprop と propname の要求の場合には、 特性の存在を知る権限がない特性については黙って除外して構いません >>6。

[20] 特性の取得時にエラーが発生した場合は、その旨を応答に含めなければなりません。 >>6

[27] 各特性は propstat 要素に含めますが、 propstat 要素は各特性についての status 要素を含みます。クライアントはその値として任意の 2xx、 3xx、4xx、5xx の状態符号を扱えるように準備するべきですが、 200、401、403、404 がよく使われます。 >>6

[52] 特性が存在することや、値を正しく取得できたことを 200 によって示すことができます >>6。

[50] 特性が適切な認証のもとでしか表示できないときは、 401 を使うことができます >>6。

[51] しかし 207 内に challenge を記述する方法は用意されていないようです。

[49] 特性が認証に関わらず表示できない時には、 403 を使うことができます >>6。

[48] 指定された特性が存在しなかった場合は、 状態符号 404 を含めなければなりません。 >>6

[44] 要求の XML文書の要素の構造が仕様通りでなかった場合の動作は明確に規定されているわけではありませんが、 仕様書の例示によれば、 allprop と propname の両方が指定されている時は、 400 応答を返さなければなりません (must) >>43。

[46] 要求の XML が怪しい時は 400 を返す >>45 という規定に基いていると思われますが、 422 ではなく 400 を返すべき根拠はよくわかりません。

[24] PROPFIND メソッドの結果はキャッシュ可能なこともありますが、 ほとんどの特性は検証の仕組みがありませんから、注意する必要があります >>6。

歴史

[54] RFC 3253 - Versioning Extensions to WebDAV (Web Distributed Authoring and Versioning) () https://tools.ietf.org/html/rfc3253#section-3.11

[55] RFC 3253 - Versioning Extensions to WebDAV (Web Distributed Authoring and Versioning) () https://tools.ietf.org/html/rfc3253#section-8.6

[56] RFC 3648 - Web Distributed Authoring and Versioning (WebDAV) Ordered Collections Protocol () https://tools.ietf.org/html/rfc3648#section-8

[57] RFC 3744 - Web Distributed Authoring and Versioning (WebDAV) Access Control Protocol () https://tools.ietf.org/html/rfc3744#section-5

[63] RFC 4316: Datatypes for Web Distributed Authoring and Versioning (WebDAV) Properties, https://www.rfc-editor.org/rfc/rfc4316.html#section-5

[58] RFC 4331 - Quota and Size Properties for Distributed Authoring and Versioning (DAV) Collections () https://tools.ietf.org/html/rfc4331#section-2

[59] RFC 4437 - Web Distributed Authoring and Versioning (WebDAV) Redirect Reference Resources () https://tools.ietf.org/html/rfc4437#section-13

[60] RFC 5323 - Web Distributed Authoring and Versioning (WebDAV) SEARCH () https://tools.ietf.org/html/rfc5323#section-2.3.2

[61] RFC 5323 - Web Distributed Authoring and Versioning (WebDAV) SEARCH () https://tools.ietf.org/html/rfc5323#section-5.5.3

[62] RFC 5842 - Binding Extensions to Web Distributed Authoring and Versioning (WebDAV) () https://tools.ietf.org/html/rfc5842#section-2.6

[53] RFC 8144 - Use of the Prefer Header Field in Web Distributed Authoring and Versioning (WebDAV) () https://tools.ietf.org/html/rfc8144#section-2.1