PROPFIND
HTTP yöntemi
HTTP yöntemi PROPFIND'ün belirtimi
PROPFIND yöntemi, kaynağın dahili üyesi yoksa Request-URI tarafından tanımlanan kaynakta veya kaynak dahili üye URL'leri olan bir koleksiyon ise Request-URI tarafından tanımlanan kaynakta ve potansiyel olarak üye kaynaklarında tanımlanan özellikleri alır. Tüm DAV uyumlu kaynaklar PROPFIND yöntemini ve propfind
XML elemanını (Bölüm 14.20) ve bu elemanla birlikte kullanılmak üzere tanımlanmış tüm XML elemanlarını desteklemelidir.
İstemci, PROPFIND isteği ile birlikte "0", "1" veya "sonsuz" değerine sahip bir Derinlik başlığı göndermelidir. Sunucular, WebDAV uyumlu kaynaklarda "0" ve "1" derinlik isteklerini desteklemeli ve "sonsuz" istekleri desteklemelidir. Uygulamada, bu davranışla ilişkili performans ve güvenlik endişeleri nedeniyle sonsuz derinlikli isteklere yönelik destek devre dışı bırakılabilir. Sunucular, Derinlik başlığı olmayan bir isteği Depth: infinity
başlığı eklenmiş gibi değerlendirmelidir.
İstemci, istek yönteminin gövdesinde hangi bilgilerin istendiğini açıklayan bir propfind
XML öğesi gönderebilir. Şunları yapmak mümkündür:
- İstenen özellikleri
prop
öğesi içinde adlandırarak belirli özellik değerlerini talep etmek (buradaki özelliklerin sıralaması sunucu tarafından göz ardı edilebilir), - Bu belirtimde tanımlanan özellikler (en azından) ve ölü özellikler için özellik değerleri talep etmek,
allprop
öğesini kullanarak (include
öğesiallprop
ile birlikte kullanılarak sunucuya başka türlü döndürülmemiş olabilecek ek canlı özellikleri de dahil etmesi talimatı verilebilir), -
propname
öğesini kullanarak kaynakta tanımlanan tüm özelliklerin adlarının bir listesini isteyin.
İstemci bir istek gövdesi göndermemeyi seçebilir. Boş bir PROPFIND istek gövdesi bir allprop
isteği gibi ele alınmalıdır.
allprop
'un tüm canlı özellikler için değer döndürmediğini unutmayın. WebDAV sunucuları giderek daha pahalı hesaplanan veya uzun özelliklere sahip olmaktadır (bkz. [RFC3253] ve [RFC3744]) ve zaten tüm özellikleri döndürmemektedir. Bunun yerine, WebDAV istemcileri hangi canlı özelliklerin var olduğunu keşfetmek için propname
isteklerini kullanabilir ve değerleri alırken adlandırılmış özellikleri isteyebilir. Başka bir yerde tanımlanmış bir canlı özellik için, bu tanım o canlı özelliğin allprop
isteklerinde döndürülüp döndürülmeyeceğini belirtebilir.
Tüm sunucular, çeşitli özellikleri alma girişimlerinin sonuçlarını açıklayan bir multistatus
XML öğesi içeren text/xml
veya application/xml
içerik türünde bir yanıt döndürmeyi desteklemelidir.
Bir özellik alınırken hata oluşursa, uygun bir hata sonucu yanıta dahil edilmelidir. Mevcut olmayan bir özelliğin değerini alma isteği bir hatadır ve 404 (Bulunamadı) durum değerini içeren bir response
XML elemanı ile belirtilmelidir.
Sonuç olarak, bir koleksiyon kaynağı için multistatus
XML elemanı, koleksiyonun her üye URL'si için, istenen derinliğe kadar bir response
XML elemanı içermelidir. WebDAV uyumlu olmayan kaynaklar için herhangi bir response
öğesi İÇERMEMELİDİR. Her response
öğesi, prop
XML öğesindeki özelliklerin tanımlandığı kaynağın URL'sini içeren bir href
öğesi içermelidir. Bir koleksiyon kaynağı üzerindeki PROPFIND sonuçları, giriş sırası önemli olmayan düz bir liste olarak döndürülür. Bir kaynağın belirli bir isimdeki bir özellik için sadece bir değeri olabileceğini unutmayın, bu nedenle özellik PROPFIND yanıtlarında sadece bir kez görünebilir.
Özellikler erişim denetimine tabi olabilir. allprop
ve propname
istekleri durumunda, bir sorumlu belirli bir özelliğin var olup olmadığını bilme hakkına sahip değilse, özellik yanıttan sessizce çıkarılabilir.
Bazı PROPFIND sonuçları, çoğu özellik için önbellek doğrulama mekanizması olmadığından, dikkatli bir şekilde önbelleğe alınabilir. Bu yöntem hem güvenli hem de idempotenttir (bkz. [RFC2616] Bölüm 9.1).
PROPFIND yönteminin açıklaması
HTTP yöntemi PROPFIND için örnek
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