PROPFIND
Μέθοδος HTTP
Προδιαγραφή της μεθόδου HTTP PROPFIND
Η μέθοδος PROPFIND ανακτά ιδιότητες που ορίζονται στον πόρο που προσδιορίζεται από το Request-URI, εάν ο πόρος δεν έχει εσωτερικά μέλη, ή στον πόρο που προσδιορίζεται από το Request-URI και ενδεχομένως στους πόρους-μέλη του, εάν ο πόρος είναι μια συλλογή που έχει εσωτερικά URLs μελών. Όλοι οι πόροι που συμμορφώνονται με το DAV ΠΡΕΠΕΙ να υποστηρίζουν τη μέθοδο PROPFIND και το στοιχείο XML propfind
(ενότητα 14.20) μαζί με όλα τα στοιχεία XML που ορίζονται για χρήση με αυτό το στοιχείο.
Ένας πελάτης ΠΡΕΠΕΙ να υποβάλει μια κεφαλίδα Depth με τιμή "0", "1" ή "άπειρο" με ένα αίτημα PROPFIND. Οι εξυπηρετητές ΠΡΕΠΕΙ να υποστηρίζουν αιτήματα βάθους "0" και "1" σε πόρους συμβατούς με WebDAV και ΠΡΕΠΕΙ να υποστηρίζουν αιτήματα βάθους "άπειρο". Στην πράξη, η υποστήριξη αιτημάτων βάθους "άπειρο" ΜΠΟΡΕΙ να απενεργοποιηθεί, λόγω των προβλημάτων απόδοσης και ασφάλειας που σχετίζονται με αυτή τη συμπεριφορά. Οι εξυπηρετητές ΘΑ ΠΡΕΠΕΙ να αντιμετωπίζουν ένα αίτημα χωρίς κεφαλίδα Depth σαν να περιλαμβάνεται κεφαλίδα Depth: infinity
.
Ένας πελάτης μπορεί να υποβάλει ένα στοιχείο XML propfind
στο σώμα της μεθόδου αίτησης που περιγράφει τις πληροφορίες που ζητούνται. Είναι δυνατόν να:
- να ζητήσετε συγκεκριμένες τιμές ιδιοτήτων, κατονομάζοντας τις επιθυμητές ιδιότητες εντός του στοιχείου
prop
(η σειρά των ιδιοτήτων εδώ ΜΠΟΡΕΙ να αγνοηθεί από το διακομιστή), - να ζητήσετε τιμές ιδιοτήτων για τις ιδιότητες που ορίζονται στην παρούσα προδιαγραφή (τουλάχιστον) συν τις νεκρές ιδιότητες, με τη χρήση του στοιχείου
allprop
(το στοιχείοinclude
μπορεί να χρησιμοποιηθεί με τοallprop
για να δώσει εντολή στο διακομιστή να συμπεριλάβει και πρόσθετες ζωντανές ιδιότητες που μπορεί να μην έχουν επιστραφεί διαφορετικά), - Αναζητήστε μια λίστα με τα ονόματα όλων των ιδιοτήτων που ορίζονται στον πόρο, με τη χρήση του στοιχείου
propname
.
Ένας πελάτης μπορεί να επιλέξει να μην υποβάλει σώμα αίτησης. Ένα κενό σώμα αίτησης PROPFIND ΠΡΕΠΕΙ να αντιμετωπίζεται σαν να επρόκειτο για αίτηση allprop
.
Σημειώστε ότι το allprop
δεν επιστρέφει τιμές για όλες τις ζωντανές ιδιότητες. Οι διακομιστές WebDAV διαθέτουν όλο και περισσότερο ιδιότητες που υπολογίζονται με δαπανηρό τρόπο ή είναι μακροσκελείς (βλ. [RFC3253] και [RFC3744]) και δεν επιστρέφουν ήδη όλες τις ιδιότητες. Αντ' αυτού, οι πελάτες WebDAV μπορούν να χρησιμοποιούν αιτήσεις propname
για να ανακαλύψουν ποιες ζωντανές ιδιότητες υπάρχουν και να ζητούν ονομαστικές ιδιότητες κατά την ανάκτηση τιμών. Για μια ζωντανή ιδιότητα που έχει οριστεί αλλού, ο ορισμός αυτός μπορεί να καθορίσει εάν η συγκεκριμένη ζωντανή ιδιότητα θα επιστρέφεται ή όχι σε αιτήσεις allprop
.
Όλοι οι διακομιστές ΠΡΕΠΕΙ να υποστηρίζουν την επιστροφή μιας απάντησης τύπου περιεχομένου text/xml
ή application/xml
που περιέχει ένα στοιχείο XML multistatus
που περιγράφει τα αποτελέσματα των προσπαθειών ανάκτησης των διαφόρων ιδιοτήτων.
Εάν υπάρξει σφάλμα στην ανάκτηση μιας ιδιότητας, τότε στην απάντηση ΠΡΕΠΕΙ να περιλαμβάνεται ένα κατάλληλο αποτέλεσμα σφάλματος. Ένα αίτημα ανάκτησης της τιμής μιας ιδιότητας που δεν υπάρχει αποτελεί σφάλμα και ΠΡΕΠΕΙ να σημειώνεται με ένα στοιχείο XML response
που περιέχει την τιμή κατάστασης 404 (Not Found).
Συνεπώς, το στοιχείο XML multistatus
για έναν πόρο συλλογής ΠΡΕΠΕΙ να περιλαμβάνει ένα στοιχείο XML response
για κάθε URL μέλους της συλλογής, σε όποιο βάθος ζητήθηκε. ΔΕΝ ΠΡΕΠΕΙ να περιλαμβάνει στοιχεία response
για πόρους που δεν είναι συμβατοί με το WebDAV. Κάθε στοιχείο response
ΠΡΕΠΕΙ να περιέχει ένα στοιχείο href
που περιέχει τη διεύθυνση URL του πόρου στον οποίο ορίζονται οι ιδιότητες στο στοιχείο XML prop
. Τα αποτελέσματα για ένα PROPFIND σε έναν πόρο συλλογής επιστρέφονται ως μια επίπεδη λίστα της οποίας η σειρά των καταχωρήσεων δεν έχει σημασία. Σημειώστε ότι ένας πόρος μπορεί να έχει μόνο μία τιμή για μια ιδιότητα με δεδομένο όνομα, οπότε η ιδιότητα μπορεί να εμφανίζεται μόνο μία φορά στις απαντήσεις PROPFIND.
Οι ιδιότητες μπορεί να υπόκεινται σε έλεγχο πρόσβασης. Στην περίπτωση των αιτήσεων allprop
και propname
, εάν ένας εντολέας δεν έχει το δικαίωμα να γνωρίζει εάν υπάρχει μια συγκεκριμένη ιδιότητα, τότε η ιδιότητα ΜΠΟΡΕΙ να αποκλειστεί σιωπηρά από την απάντηση.
Μερικά αποτελέσματα PROPFIND ΜΠΟΡΕΙ να αποθηκευτούν στην προσωρινή μνήμη, με προσοχή, καθώς δεν υπάρχει μηχανισμός επικύρωσης της προσωρινής μνήμης για τις περισσότερες ιδιότητες. Αυτή η μέθοδος είναι ασφαλής και ιδεολογική (βλ. ενότητα 9.1 του [RFC2616]).
Περιγραφή της μεθόδου 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