PROPFIND
HTTP 方法
指定 HTTP 方法 PROPFIND
如果资源没有任何内部成员,则 PROPFIND 方法将检索由请求-URI 标识的资源上定义的属性;如果资源是一个具有内部成员 URL 的集合,则 PROPFIND 方法将检索由请求-URI 标识的资源上定义的属性,并可能检索其成员资源。所有符合 DAV 标准的资源都必须支持 PROPFIND 方法和 propfind
XML 元素(第 14.20 节)以及为与该元素配合使用而定义的所有 XML 元素。服务器必须支持符合 WebDAV 标准的资源上的 "0 "和 "1 "深度请求,并应支持 "无限 "请求。在实践中,由于与此行为相关的性能和安全问题,可能会禁用对无限深度请求的支持。服务器应当将不包含深度标头的请求视为包含了 Depth: infinity
标头。
客户端可在请求方法的主体中提交一个 propfind
XML 元素,描述请求的信息。可以
- 通过在
prop
元素中命名所需的属性来请求特定的属性值(服务器可能会忽略此处属性的排序), - 请求本规范中定义的属性(至少)以及死属性的属性值、通过使用
allprop
元素(include
元素可与allprop
配合使用,以指示服务器也包含可能不会返回的其他有效属性), - 通过使用
propname
元素,请求资源上定义的所有属性的名称列表。
客户机可以选择不提交请求正文。空的 PROPFIND 请求正文必须被视为 allprop
请求。
请注意,allprop
不会返回所有有效属性的值。WebDAV 服务器越来越多地使用昂贵的计算或冗长的属性(请参阅 [RFC3253] 和 [RFC3744]),因此不会返回所有属性。相反,WebDAV 客户端可以使用 propname
请求来发现存在哪些实时属性,并在检索值时请求已命名的属性。对于在其他地方定义的实时属性,该定义可指定是否在 allprop
请求中返回该实时属性。
所有服务器都必须支持返回内容类型为 text/xml
或 application/xml
的响应,其中包含一个 multistatus
XML 元素,该元素描述了尝试检索各种属性的结果。检索不存在的属性值的请求属于错误,必须用包含 404(未找到)状态值的 response
XML 元素来说明。
因此,集合资源的 multistatus
XML 元素必须包括集合中每个成员 URL 的 response
XML 元素,无论请求的深度是多少。对于不兼容 WebDAV 的资源,它不应包括任何 response
元素。每个 response
元素都必须包含一个 href
元素,该元素包含资源的 URL,其中定义了 prop
XML 元素中的属性。对集合资源进行 PROPFIND 的结果将以平面列表的形式返回,其条目顺序并不重要。请注意,一个资源可能只有一个给定名称的属性值,因此该属性可能只会在 PROPFIND 响应中出现一次。在 allprop
和 propname
请求的情况下,如果委托人无权知道特定属性是否存在,那么该属性可能会被静默地排除在响应之外。
某些 PROPFIND 结果可能会被缓存,但需谨慎,因为大多数属性都没有缓存验证机制。这种方法既安全又可幂等使用(请参阅 [RFC2616] 第 9.1 节)。
PROPFIND 方法说明
HTTP 方法 PROPFIND 示例
PROPFIND /data HTTP/1.1
Host: api.example.com
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko)Chrome/58.0.3029.110 Safari/537
Depth: 1
Content-Type: text/xml; charset="utf-8"
Accept-Language: de-DE,de;q=0.5
Connection: keep-alive
HTTP/1.1 207 Multi-Status
Content-Type: text/xml; charset="utf-8"
Content-Length: 453
Date: Mon, 31 July 2023 14:58:12 GMT
Server: Apache/2.4.7 (Ubuntu)
Cache-Control: no-cache