Beide Seiten der vorigen Revision Vorhergehende Überarbeitung Nächste Überarbeitung | Vorhergehende ÜberarbeitungLetzte ÜberarbeitungBeide Seiten der Revision |
development:net:webdav [2014-05-25 09:49] – Martin Prochnow | development:net:webdav [2017-04-05 11:10] – Martin Prochnow |
---|
| ====== WebDAV ====== |
| |
| |
| ===== Begriffe ===== |
| |
| ^ Begriff ^ Beschreibung ^ |
| | Collection | Container, der ein oder mehrere Ressourcen beinhaltet | |
| | Property | Ein benannter Wert, der eine Eigenschaft einer Ressource beschreibt | |
| |
| ===== Collection ===== |
| * Zugriff über URL mit Slash am Ende |
| * wenn nicht angegeben, soll der Server so arbeiten, als wenn er angegeben wurde |
| * in der Antwort soll HTTP-Header ''Content-Location'' den Pfad mit Slash am Ende angeben |
| * um sicher zu stellen, ob die angesprochene Ressource eine Collection ist, ist es für einen Client sicherer, die Property ''DAV::resourcetype'' zu verwenden |
| |
| |
| ===== Methoden ===== |
| |
| ^ Name ^ Compliance Class ^ Beschreibung ^ |
| | ''OPTIONS'' | 1 | Abfrage der unterstützten HTTP-Methoden (entsprechend HTTP-Protokoll) | |
| | ''PROPFIND'' | 1 | Abfrage von //Properties// einer Ressource | |
| | ''PROPPATCH'' | 1 | Ändern oder Löschen von //Properties// einer Ressource | |
| | ''MKCOL'' | 1 | Anlegen einer //Collection// | |
| | ''GET''/''HEAD'' | 1 | Verhalten entsprechend HTTP-Protokoll, wenn auf //Collection// angewendet, kann eine "index.html" zurück gegeben werden | |
| | ''DELETE'' | 1 | Löschen einer Ressource | |
| | ''PUT'' | 1 | Anlegen/Überschreiben einer Ressource, nicht spezifiziert für //Collections// | |
| | ''COPY'' | 1 | Kopieren einer Ressource | |
| | ''MOVE'' | 1 | Verschieben einer Ressource | |
| | ''LOCK'' | 2 | ... | |
| | ''UNLOCK'' | 2 | ... | |
| |
| ==== PROPFIND ==== |
| * Abfrage von Properties einer Ressource |
| * ''Depth''-Header muss vom Client angegeben werden |
| * ''0'' - nur Properties der Ressource |
| * ''1'' - Properties der Ressource und ihrer direkten Member, wenn Ressource eine //Collection// ist |
| * ''infinity'' - muss nicht unterstützt werden |
| * ''propfind''-XML-Element im Request-Body beschreibt die abgefragten Informationen |
| * wenn nur bestimmte Properties abgefragt werden, wird das ''props''-Element verwendete, welches die Properties auflistet, z.B.<code xml> |
| <?xml version="1.0" encoding="utf-8" ?> |
| <D:propfind xmlns:D="DAV:"> |
| <D:prop> |
| <D:resourcetype/> |
| </D:prop> |
| </D:propfind> |
| </code> |
| |
| ===== HTTP-Header ===== |
| |
| ^ Header ^ Beschreibung ^ mögl. Werte ^ |
| | ''DAV'' | gibt an, das eine WebDAV-Ressource angesprochen wird und //Compliance-Class// verwendet wird | ''1'', ''2'', ''1,2'', ''1,3'' (siehe auch RFC4918 10.1. u. 18.3) | |
| | ''Depth'' | gibt an, ob und welche untergeordneten Ressourcen einer Ressource durch einen Request mit angesprochen werden sollen | ''0'' - nur die Ressource\\ ''1'' - die Ressource und ihre //Internal member//\\ ''infinity'' - die Ressource und all ihre //Member// | |
| | ''Destination'' | gibt das Ziel für die Methoden ''COPY'' und ''MOVE'' an | absoluter URI | |
| | ''If'' | ... | ... | |
| | ''Lock-Token'' | ... | ... | |
| | ''Oberwrite'' | soll bei ''COPY''/''MOVE'' überschrieben werden | ''T'' - überschreiben, wenn Ressource existiert\\ ''F'' - nicht überschreiben, wenn Ressource existiert | |
| | ''Timeout'' | ... | ... | |
| |
| ===== Status-Codes ===== |
| |
| ^ Code ^ |
| | ''207 Multi-Status'' | |
| | ''423 Locked'' | |
| | ''424 Failed Dependency'' | |
| | ''507 Insufficient Storage'' | |
| |
| ===== XML ===== |
| * WebDAV verwendet für die Übertragung von Informationen XML |
| * falls das XML eines Requests nicht //well-formed// ist, muss der Server mit dem Fehler ''400 Bad Request'' antworten |
| |
| ==== DTD ==== |
| |
| <code xml> |
| <!ELEMENT activelock (lockscope, locktype, depth, owner?, timeout?, locktoken?, lockroot)> |
| <!ELEMENT allprop EMPTY> |
| <!ELEMENT depth (#PCDATA)> |
| <!ELEMENT error ANY> |
| <!ELEMENT exclusive EMPTY> |
| <!ELEMENT href (#PCDATA)> |
| <!ELEMENT include ANY> |
| <!ELEMENT location (href)> |
| <!ELEMENT lockentry (lockscope, locktype)> |
| <!ELEMENT lockinfo (lockscope, locktype, owner?)> |
| <!ELEMENT lockroot (href)> |
| <!ELEMENT lockscope (exclusive | shared)> |
| <!ELEMENT locktoken (href)> |
| <!ELEMENT locktype (write)> |
| <!ELEMENT multistatus (response*, responsedescription?)> |
| <!ELEMENT owner ANY> |
| <!ELEMENT prop ANY> |
| <!ELEMENT propertyupdate (remove | set)+> |
| <!ELEMENT propfind ( propname | (allprop, include?) | prop )> |
| <!ELEMENT propname EMPTY> |
| <!ELEMENT propstat (prop, status, error?, responsedescription?)> |
| <!ELEMENT remove (prop)> |
| <!ELEMENT response (href, ((href*, status)|(propstat+)), error?, responsedescription? , location?)> |
| <!ELEMENT responsedescription (#PCDATA)> |
| <!ELEMENT set (prop)> |
| <!ELEMENT shared EMPTY> |
| <!ELEMENT status (#PCDATA)> |
| <!ELEMENT timeout (#PCDATA)> |
| <!ELEMENT write EMPTY> |
| |
| <!ELEMENT creationdate (#PCDATA) > |
| <!ELEMENT displayname (#PCDATA) > |
| <!ELEMENT getcontentlanguage (#PCDATA) > |
| <!ELEMENT getcontentlength (#PCDATA) > |
| <!ELEMENT getcontenttype (#PCDATA) > |
| <!ELEMENT getetag (#PCDATA) > |
| <!ELEMENT getlastmodified (#PCDATA) > |
| <!ELEMENT lockdiscovery (activelock)* > |
| <!ELEMENT supportedlock (lockentry)* > |
| <!ELEMENT lock-token-submitted (href+) > |
| <!ELEMENT no-conflicting-lock (href)* > |
| </code> |
| (http://greenbytes.de/tech/webdav/rfc2518.html#rfc.section.23, https://code.google.com/p/sardine/source/browse/trunk/webdav.xsd) |
| ===== Properties ===== |
| |
| ^ Name ^ Mögliche Werte ^ |
| | creationdate | ISO8601-konforme Zeitangabe des Erstellungsdatum | |
| | displayname | Anzeigename für die Ressource, muss nicht im Zusammenhang mit der URI stehen | |
| | getcontentlanguage | | |
| | getcontentlength | Entspricht der Angabe im ''Content-Length''-Header in der Antwort auf eine ''GET''-Abfrage | |
| | getcontenttype | Entspricht der Angabe im ''Content-Type''-Header in der Antwort auf eine ''GET''-Anfrage | |
| | getetag | | |
| | getlastmodified | RFC1123-konforme Zeitangabe der letzten Änderung | |
| | lockdiscovery | | |
| | resourcetype | collection, wenn angefragte Ressource eine Collection ist, ansonsten leer | |
| | supportedlock | | |
| |
| |
| ===== Links ===== |
| * http://www.webdav.org/ |
| * http://tools.ietf.org/html/rfc4918 |
| * http://tools.ietf.org/html/rfc4331 |
| * http://sabre.io/dav/clients/ |
| |
| {{tag>WebDAV Protokoll}} |