PROPFIND
HTTP-metod
Specifikation av HTTP-metoden PROPFIND
Metoden PROPFIND hämtar egenskaper som definieras på den resurs som identifieras av Request-URI, om resursen inte har några interna medlemmar, eller på den resurs som identifieras av Request-URI och eventuellt dess medlemsresurser, om resursen är en samling som har interna medlems-URL:er. Alla DAV-kompatibla resurser MÅSTE stödja PROPFIND-metoden och XML-elementet propfind
(avsnitt 14.20) tillsammans med alla XML-element som definieras för användning med det elementet.
En klient MÅSTE skicka en Depth-rubrik med värdet "0", "1" eller "infinity" med en PROPFIND-begäran. Servrar MÅSTE stödja "0"- och "1"-djupförfrågningar på WebDAV-kompatibla resurser och BÖR stödja "oändlighet"-förfrågningar. I praktiken KAN stöd för oändligt djupa förfrågningar inaktiveras på grund av de prestanda- och säkerhetsproblem som är förknippade med detta beteende. Servrar SKA behandla en begäran utan en Depth-rubrik som om en Depth: infinity
-rubrik inkluderades.
En klient kan skicka ett propfind
XML-element i kroppen av förfrågningsmetoden som beskriver vilken information som begärs. Det är möjligt att:
- Begära särskilda egenskapsvärden genom att namnge de önskade egenskaperna i
prop
-elementet (ordningen på egenskaperna här KAN ignoreras av servern), - Begära egenskapsvärden för de egenskaper som definieras i denna specifikation (som ett minimum) plus döda egenskaper, genom att använda elementet
allprop
(elementetinclude
kan användas medallprop
för att instruera servern att också inkludera ytterligare levande egenskaper som kanske inte har returnerats annars), - Begära en lista med namn på alla egenskaper som definieras på resursen, genom att använda elementet
propname
.
En klient kan välja att inte skicka in en request body. En tom PROPFIND-begäran MÅSTE behandlas som om det vore en allprop
-begäran.
Observera att allprop
inte returnerar värden för alla levande egenskaper. WebDAV-servrar har allt oftare dyrt beräknade eller långa egenskaper (se [RFC3253] och [RFC3744]) och returnerar inte alla egenskaper redan. Istället kan WebDAV-klienter använda propname
-förfrågningar för att upptäcka vilka levande egenskaper som finns, och begära namngivna egenskaper när de hämtar värden. För en live-egenskap som definieras någon annanstans kan den definitionen ange om den live-egenskapen ska returneras i allprop
-förfrågningar eller inte.
Alla servrar MÅSTE stödja returnering av ett svar av innehållstyp text/xml
eller application/xml
som innehåller ett multistatus
XML-element som beskriver resultaten av försöken att hämta de olika egenskaperna.
Om det uppstår ett fel vid hämtning av en egenskap MÅSTE ett korrekt felresultat inkluderas i svaret. En begäran om att hämta värdet på en egenskap som inte finns är ett fel och MÅSTE noteras med ett svar
XML-element som innehåller ett 404 (Not Found) statusvärde.
Sedan måste multistatus
XML-elementet för en samlingsresurs innehålla ett svar
XML-element för varje medlems URL i samlingen, till det djup som begärdes. Det SKA INTE innehålla några response
-element för resurser som inte är WebDAV-kompatibla. Varje response
-element MÅSTE innehålla ett href
-element som innehåller URL:en för den resurs som egenskaperna i XML-elementet prop
definieras för. Resultat för en PROPFIND på en samlingsresurs returneras som en platt lista där ordningen på posterna inte är signifikant. Observera att en resurs kan ha endast ett värde för en egenskap med ett givet namn, så egenskapen kan bara visas en gång i PROPFIND-svar.
Egenskaper kan vara föremål för åtkomstkontroll. När det gäller allprop
och propname
förfrågningar, om en huvudman inte har rätt att veta om en viss egenskap finns, KAN egenskapen tyst uteslutas från svaret.
Vissa PROPFIND-resultat KAN cachas, med försiktighet, eftersom det inte finns någon cache-valideringsmekanism för de flesta egenskaper. Denna metod är både säker och idempotent (se avsnitt 9.1 i [RFC2616]).
Beskrivning av PROPFIND-metoden
Exempel för HTTP-metoden 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