WebDAV The good, the bad and the evil TobiasSchlitt < - - PowerPoint PPT Presentation

webdav
SMART_READER_LITE
LIVE PREVIEW

WebDAV The good, the bad and the evil TobiasSchlitt < - - PowerPoint PPT Presentation

WebDAV The good, the bad and the evil TobiasSchlitt < toby@php.net > IPC SE 2009 2009-05-30 Tobias Schlitt (IPC SE 2009) WebDAV 2009-05-30 1 / 32 About me Tobias Schlitt < toby@php.net > PHP since 2001 Freelancing consultant


slide-1
SLIDE 1

WebDAV

The good, the bad and the evil TobiasSchlitt <toby@php.net>

IPC SE 2009

2009-05-30

Tobias Schlitt (IPC SE 2009) WebDAV 2009-05-30 1 / 32

slide-2
SLIDE 2

About me

Tobias Schlitt <toby@php.net> PHP since 2001 Freelancing consultant Qualified IT Specialist Studying CS at TU Dortmund

(expect to finish this year)

OSS addicted

PHP eZ Components PHPUnit

Tobias Schlitt (IPC SE 2009) WebDAV 2009-05-30 2 / 32

slide-3
SLIDE 3

Agenda

1 HTTP & WebDAV 2 Development challenges 3 eZ Webdav component 4 Q/A

Tobias Schlitt (IPC SE 2009) WebDAV 2009-05-30 3 / 32

slide-4
SLIDE 4

Outline

1 HTTP & WebDAV 2 Development challenges 3 eZ Webdav component 4 Q/A

Tobias Schlitt (IPC SE 2009) WebDAV 2009-05-30 4 / 32

slide-5
SLIDE 5

HTTP

Network protocol driving the web Current version: 1.1 RFC 2616 (June 1999)

http://tools.ietf.org/html/rfc2616

Originlally invented by Sir Tim Berners-Lee Client / server based Stateless communication Defines

Request / response Headers / body Formats / actions

Figure: Tim Berners-Lee [Dan] Tobias Schlitt (IPC SE 2009) WebDAV 2009-05-30 5 / 32

slide-6
SLIDE 6

WebDAV

WebDAV HTTP Extensions for Distributed Authoring (RFC 2518) WebDAV HTTP Extensions for Web Distributed Authoring and Versioning (RFC 4918) IETF Standard Specified in RFC 2518 (February 1999)

http://tools.ietf.org/html/rfc2518

Refined in RFC 4918 (June 2007)

http://tools.ietf.org/html/rfc4918

Extension to HTTP Distributed editing WebDAV ... allows your users to edit web content easily.

Tobias Schlitt (IPC SE 2009) WebDAV 2009-05-30 6 / 32

slide-7
SLIDE 7

WebDAV

WebDAV HTTP Extensions for Distributed Authoring (RFC 2518) WebDAV HTTP Extensions for Web Distributed Authoring and Versioning (RFC 4918) IETF Standard Specified in RFC 2518 (February 1999)

http://tools.ietf.org/html/rfc2518

Refined in RFC 4918 (June 2007)

http://tools.ietf.org/html/rfc4918

Extension to HTTP Distributed editing WebDAV ... allows your users to edit web content easily.

Tobias Schlitt (IPC SE 2009) WebDAV 2009-05-30 6 / 32

slide-8
SLIDE 8

WebDAV

WebDAV HTTP Extensions for Distributed Authoring (RFC 2518) WebDAV HTTP Extensions for Web Distributed Authoring and Versioning (RFC 4918) IETF Standard Specified in RFC 2518 (February 1999)

http://tools.ietf.org/html/rfc2518

Refined in RFC 4918 (June 2007)

http://tools.ietf.org/html/rfc4918

Extension to HTTP Distributed editing WebDAV ... allows your users to edit web content easily.

Tobias Schlitt (IPC SE 2009) WebDAV 2009-05-30 6 / 32

slide-9
SLIDE 9

Request methods

HTTP OPTIONS GET HEAD POST PUT DELETE TRACE CONNECT WebDAV PROPFIND PROPPATCH MKCOL COPY MOVE LOCK UNLOCK Significant methods Not all methods are significant for implementing a WebDAV server.

Tobias Schlitt (IPC SE 2009) WebDAV 2009-05-30 7 / 32

slide-10
SLIDE 10

Request methods

HTTP OPTIONS GET HEAD POST PUT DELETE TRACE CONNECT WebDAV PROPFIND PROPPATCH MKCOL COPY MOVE LOCK UNLOCK Significant methods Not all methods are significant for implementing a WebDAV server.

Tobias Schlitt (IPC SE 2009) WebDAV 2009-05-30 7 / 32

slide-11
SLIDE 11

Request methods

HTTP OPTIONS GET HEAD POST PUT DELETE TRACE CONNECT WebDAV PROPFIND PROPPATCH MKCOL COPY MOVE LOCK UNLOCK Significant methods Not all methods are significant for implementing a WebDAV server.

Tobias Schlitt (IPC SE 2009) WebDAV 2009-05-30 7 / 32

slide-12
SLIDE 12

Request headers

HTTP Accept[-*] Authorization If-[None-]Match If-[Un]Modified-Since User-Agent ... WebDAV Depth Destination If Overwrite Timeout Significant headers Not all headers are significant for implementing a WebDAV server.

Tobias Schlitt (IPC SE 2009) WebDAV 2009-05-30 8 / 32

slide-13
SLIDE 13

Request headers

HTTP Accept[-*] Authorization If-[None-]Match If-[Un]Modified-Since User-Agent ... WebDAV Depth Destination If Overwrite Timeout Significant headers Not all headers are significant for implementing a WebDAV server.

Tobias Schlitt (IPC SE 2009) WebDAV 2009-05-30 8 / 32

slide-14
SLIDE 14

Request headers

HTTP Accept[-*] Authorization If-[None-]Match If-[Un]Modified-Since User-Agent ... WebDAV Depth Destination If Overwrite Timeout Significant headers Not all headers are significant for implementing a WebDAV server.

Tobias Schlitt (IPC SE 2009) WebDAV 2009-05-30 8 / 32

slide-15
SLIDE 15

Response headers

HTTP Accept-Ranges Content-Length Content-Type ETag Location Retry-After Server WWW-Authenticate ... WebDAV DAV Lock-Token Timeout Significant headers Not all methods are significant for implementing a WebDAV server.

Tobias Schlitt (IPC SE 2009) WebDAV 2009-05-30 9 / 32

slide-16
SLIDE 16

Response headers

HTTP Accept-Ranges Content-Length Content-Type ETag Location Retry-After Server WWW-Authenticate ... WebDAV DAV Lock-Token Timeout Significant headers Not all methods are significant for implementing a WebDAV server.

Tobias Schlitt (IPC SE 2009) WebDAV 2009-05-30 9 / 32

slide-17
SLIDE 17

Response headers

HTTP Accept-Ranges Content-Length Content-Type ETag Location Retry-After Server WWW-Authenticate ... WebDAV DAV Lock-Token Timeout Significant headers Not all methods are significant for implementing a WebDAV server.

Tobias Schlitt (IPC SE 2009) WebDAV 2009-05-30 9 / 32

slide-18
SLIDE 18

Request / response bodies

HTTP Request body mostly not significant Only PUT method needs body (to be stored) Response body usually content to deliver (unspecified) Error responses may contain arbitrary content

Tobias Schlitt (IPC SE 2009) WebDAV 2009-05-30 10 / 32

slide-19
SLIDE 19

Request / response bodies

WebDAV Bodies are significant Many methods require XML bodies Request

PROPFIND PROPPATCH COPY (optional) MOVE (optional) LOCK

Response

PROPFIND PROPPATCH LOCK Potentially others (multi-status)

Tobias Schlitt (IPC SE 2009) WebDAV 2009-05-30 10 / 32

slide-20
SLIDE 20

Request / response bodies

WebDAV Bodies are significant Many methods require XML bodies Request

PROPFIND PROPPATCH COPY (optional) MOVE (optional) LOCK

Response

PROPFIND PROPPATCH LOCK Potentially others (multi-status)

Tobias Schlitt (IPC SE 2009) WebDAV 2009-05-30 10 / 32

slide-21
SLIDE 21

Request / response bodies

WebDAV Bodies are significant Many methods require XML bodies Request

PROPFIND PROPPATCH COPY (optional) MOVE (optional) LOCK

Response

PROPFIND PROPPATCH LOCK Potentially others (multi-status)

Tobias Schlitt (IPC SE 2009) WebDAV 2009-05-30 10 / 32

slide-22
SLIDE 22

Properties

Concept introduced by WebDAV Store meta information about content Usually not directly visible to the user Pre-defined: Live properties creationdate displayname get* lockdiscovery resourcetype source supportedlock Client-specific: Dead properties May contain arbitrary data Must reside in their own namespace XML representation favored

Tobias Schlitt (IPC SE 2009) WebDAV 2009-05-30 11 / 32

slide-23
SLIDE 23

Properties

Concept introduced by WebDAV Store meta information about content Usually not directly visible to the user Pre-defined: Live properties creationdate displayname get* lockdiscovery resourcetype source supportedlock Client-specific: Dead properties May contain arbitrary data Must reside in their own namespace XML representation favored

Tobias Schlitt (IPC SE 2009) WebDAV 2009-05-30 11 / 32

slide-24
SLIDE 24

Properties

Concept introduced by WebDAV Store meta information about content Usually not directly visible to the user Pre-defined: Live properties creationdate displayname get* lockdiscovery resourcetype source supportedlock Client-specific: Dead properties May contain arbitrary data Must reside in their own namespace XML representation favored

Tobias Schlitt (IPC SE 2009) WebDAV 2009-05-30 11 / 32

slide-25
SLIDE 25

Outline

1 HTTP & WebDAV 2 Development challenges

RFC problems Client problems Back end flexibility

3 eZ Webdav component 4 Q/A

Tobias Schlitt (IPC SE 2009) WebDAV 2009-05-30 12 / 32

slide-26
SLIDE 26

Development challenges

Server development in general WebDAV RFCs are a BBOM

Unstructured Ambiguous Design fails

Misbehaving clients

Ignore the specification Different interpretations of RFCs Proprietary BS

Exchangeable back ends

Figure: Big Ball Of Mud [FY99] Tobias Schlitt (IPC SE 2009) WebDAV 2009-05-30 13 / 32

slide-27
SLIDE 27

Outline - Development challenges

1 HTTP & WebDAV 2 Development challenges

RFC problems Client problems Back end flexibility

3 eZ Webdav component 4 Q/A

Tobias Schlitt (IPC SE 2009) WebDAV 2009-05-30 14 / 32

slide-28
SLIDE 28

COPY / MOVE methods

Errors on COPY “[...] if an error occurs while copying an internal collection, the server MUST NOT copy any resources identified by members of this collection (i.e., the server must skip this subtree) [...]” [YG99] MOVE “[...] is the logical equivalent of a copy (COPY), followed by consistency maintenance processing, followed by a delete of the source,[...]” [YG99] MOVE errors “[...] after detecting the error, the move operation SHOULD try to finish as much of the original move as possible [...]” [YG99]

Tobias Schlitt (IPC SE 2009) WebDAV 2009-05-30 15 / 32

slide-29
SLIDE 29

COPY / MOVE methods

Errors on COPY “[...] if an error occurs while copying an internal collection, the server MUST NOT copy any resources identified by members of this collection (i.e., the server must skip this subtree) [...]” [YG99] MOVE “[...] is the logical equivalent of a copy (COPY), followed by consistency maintenance processing, followed by a delete of the source,[...]” [YG99] MOVE errors “[...] after detecting the error, the move operation SHOULD try to finish as much of the original move as possible [...]” [YG99]

Tobias Schlitt (IPC SE 2009) WebDAV 2009-05-30 15 / 32

slide-30
SLIDE 30

COPY / MOVE methods

Errors on COPY “[...] if an error occurs while copying an internal collection, the server MUST NOT copy any resources identified by members of this collection (i.e., the server must skip this subtree) [...]” [YG99] MOVE “[...] is the logical equivalent of a copy (COPY), followed by consistency maintenance processing, followed by a delete of the source,[...]” [YG99] MOVE errors “[...] after detecting the error, the move operation SHOULD try to finish as much of the original move as possible [...]” [YG99]

Tobias Schlitt (IPC SE 2009) WebDAV 2009-05-30 15 / 32

slide-31
SLIDE 31

The If header

The If header Makes operations conditional.

Tobias Schlitt (IPC SE 2009) WebDAV 2009-05-30 16 / 32

slide-32
SLIDE 32

The If header

The If header Makes operations conditional. Apply operation only if ... ... all conditions are met ... none of the conditions is met If header EBNF

I f = ” I f ” ”:” ( 1∗No−tag− l i s t | 1∗Tagged− l i s t ) No−tag− l i s t = L i s t Tagged− l i s t = Resource 1∗ L i s t Resource = Coded−URL L i s t = ”(” 1∗([” Not ” ] ( State−token | ”[” e n t i t y −tag ”]”) ) ”) ” State−token = Coded−URL Coded−URL = ”<” absoluteURI ”>”

Tobias Schlitt (IPC SE 2009) WebDAV 2009-05-30 16 / 32

slide-33
SLIDE 33

The If header

The If header Makes operations conditional. Can contain lock tokens entity tags No-tag list If header

I f : (< locktoken : a−write −lock −token> [” I am an ETag ” ] ) ( [ ” I am another ETag ” ] )

Tobias Schlitt (IPC SE 2009) WebDAV 2009-05-30 16 / 32

slide-34
SLIDE 34

The If header

The If header Makes operations conditional. Conditions can apply to single resources sets of resources all affected resources Negated tagged list If header

<http :// example . com/ resource1 > (< locktoken : a−write −lock −token > [W/”A weak ETag ” ] ) ( Not [” strong ETag ” ] )

Tobias Schlitt (IPC SE 2009) WebDAV 2009-05-30 16 / 32

slide-35
SLIDE 35

The If header

The If header Makes operations conditional. Required own parser implementation Parser is about 150 LOC

Tobias Schlitt (IPC SE 2009) WebDAV 2009-05-30 16 / 32

slide-36
SLIDE 36

Locking

2 different types of locks

Exclusive Shared

Lock conditions must be validated before anything else Timeout refresh on every lock use (successful or not)

(Fixed in RCF 4918)

Not specified how to associate principles with lock tokens Lock-Null-Resources

(Partly fixed in RFC 4918)

Do not behave like real resources Must vanish when the lock is released A collection can be created on them

Tobias Schlitt (IPC SE 2009) WebDAV 2009-05-30 17 / 32

slide-37
SLIDE 37

Locking

2 different types of locks

Exclusive Shared

Lock conditions must be validated before anything else Timeout refresh on every lock use (successful or not)

(Fixed in RCF 4918)

Not specified how to associate principles with lock tokens Lock-Null-Resources

(Partly fixed in RFC 4918)

Do not behave like real resources Must vanish when the lock is released A collection can be created on them

Tobias Schlitt (IPC SE 2009) WebDAV 2009-05-30 17 / 32

slide-38
SLIDE 38

Locking

2 different types of locks

Exclusive Shared

Lock conditions must be validated before anything else Timeout refresh on every lock use (successful or not)

(Fixed in RCF 4918)

Not specified how to associate principles with lock tokens Lock-Null-Resources

(Partly fixed in RFC 4918)

Do not behave like real resources Must vanish when the lock is released A collection can be created on them

Tobias Schlitt (IPC SE 2009) WebDAV 2009-05-30 17 / 32

slide-39
SLIDE 39

Locking

2 different types of locks

Exclusive Shared

Lock conditions must be validated before anything else Timeout refresh on every lock use (successful or not)

(Fixed in RCF 4918)

Not specified how to associate principles with lock tokens Lock-Null-Resources

(Partly fixed in RFC 4918)

Do not behave like real resources Must vanish when the lock is released A collection can be created on them

Tobias Schlitt (IPC SE 2009) WebDAV 2009-05-30 17 / 32

slide-40
SLIDE 40

Locking

2 different types of locks

Exclusive Shared

Lock conditions must be validated before anything else Timeout refresh on every lock use (successful or not)

(Fixed in RCF 4918)

Not specified how to associate principles with lock tokens Lock-Null-Resources

(Partly fixed in RFC 4918)

Do not behave like real resources Must vanish when the lock is released A collection can be created on them

Tobias Schlitt (IPC SE 2009) WebDAV 2009-05-30 17 / 32

slide-41
SLIDE 41

Outline - Development challenges

1 HTTP & WebDAV 2 Development challenges

RFC problems Client problems Back end flexibility

3 eZ Webdav component 4 Q/A

Tobias Schlitt (IPC SE 2009) WebDAV 2009-05-30 18 / 32

slide-42
SLIDE 42

Konqueror / Nautilus

Konqueror (KDE)

Does not decode URLs properly Requires Apache like error messages for 404

Nautilus (Gnome)

Cannot cope with charset="..." info in MIME types

Tobias Schlitt (IPC SE 2009) WebDAV 2009-05-30 19 / 32

slide-43
SLIDE 43

Konqueror / Nautilus

Konqueror (KDE)

Does not decode URLs properly Requires Apache like error messages for 404

Nautilus (Gnome)

Cannot cope with charset="..." info in MIME types

Tobias Schlitt (IPC SE 2009) WebDAV 2009-05-30 19 / 32

slide-44
SLIDE 44

Windows / InternetExplorer

At least 3 different WebDAV user agents in Windows

Loaded depending on how you initialize connection Transparently switched occasionally

Requires custom header MS-Author-Via on every response Requires custom namespaces set on live properties

Requires special namespace shortcut to be used (sic!) Requires different shortcuts for DAV: namespace

Tobias Schlitt (IPC SE 2009) WebDAV 2009-05-30 20 / 32

slide-45
SLIDE 45

Windows / InternetExplorer

At least 3 different WebDAV user agents in Windows

Loaded depending on how you initialize connection Transparently switched occasionally

Requires custom header MS-Author-Via on every response Requires custom namespaces set on live properties

Requires special namespace shortcut to be used (sic!) Requires different shortcuts for DAV: namespace

Tobias Schlitt (IPC SE 2009) WebDAV 2009-05-30 20 / 32

slide-46
SLIDE 46

Windows / InternetExplorer

At least 3 different WebDAV user agents in Windows

Loaded depending on how you initialize connection Transparently switched occasionally

Requires custom header MS-Author-Via on every response Requires custom namespaces set on live properties

Requires special namespace shortcut to be used (sic!) Requires different shortcuts for DAV: namespace

Tobias Schlitt (IPC SE 2009) WebDAV 2009-05-30 20 / 32

slide-47
SLIDE 47

Windows / InternetExplorer II

Cannot cope with non-significant white spaces in XML bodies Requires newline at the end of every XML body Occasionally sends invalid PROPFIND requests

Tobias Schlitt (IPC SE 2009) WebDAV 2009-05-30 21 / 32

slide-48
SLIDE 48

Windows / InternetExplorer II

Cannot cope with non-significant white spaces in XML bodies Requires newline at the end of every XML body Occasionally sends invalid PROPFIND requests

Tobias Schlitt (IPC SE 2009) WebDAV 2009-05-30 21 / 32

slide-49
SLIDE 49

Windows / InternetExplorer II

Cannot cope with non-significant white spaces in XML bodies Requires newline at the end of every XML body Occasionally sends invalid PROPFIND requests

Tobias Schlitt (IPC SE 2009) WebDAV 2009-05-30 21 / 32

slide-50
SLIDE 50

Windows / InternetExplorer II

Cannot cope with non-significant white spaces in XML bodies Requires newline at the end of every XML body Occasionally sends invalid PROPFIND requests

Figure: WTF? [Nad99] Tobias Schlitt (IPC SE 2009) WebDAV 2009-05-30 21 / 32

slide-51
SLIDE 51

Outline - Development challenges

1 HTTP & WebDAV 2 Development challenges

RFC problems Client problems Back end flexibility

3 eZ Webdav component 4 Q/A

Tobias Schlitt (IPC SE 2009) WebDAV 2009-05-30 22 / 32

slide-52
SLIDE 52

Back end flexibility

Exchangeable back end

File system Memory (testing) SQL Database? Subversion?

Independent of client issues Protocol enhancements back end independent Easy implementation

Tobias Schlitt (IPC SE 2009) WebDAV 2009-05-30 23 / 32

slide-53
SLIDE 53

Back end flexibility

Exchangeable back end

File system Memory (testing) SQL Database? Subversion?

Independent of client issues Protocol enhancements back end independent Easy implementation

Tobias Schlitt (IPC SE 2009) WebDAV 2009-05-30 23 / 32

slide-54
SLIDE 54

Back end flexibility

Exchangeable back end

File system Memory (testing) SQL Database? Subversion?

Independent of client issues Protocol enhancements back end independent Easy implementation

Tobias Schlitt (IPC SE 2009) WebDAV 2009-05-30 23 / 32

slide-55
SLIDE 55

Back end flexibility

Exchangeable back end

File system Memory (testing) SQL Database? Subversion?

Independent of client issues Protocol enhancements back end independent Easy implementation

Tobias Schlitt (IPC SE 2009) WebDAV 2009-05-30 23 / 32

slide-56
SLIDE 56

Outline

1 HTTP & WebDAV 2 Development challenges 3 eZ Webdav component 4 Q/A

Tobias Schlitt (IPC SE 2009) WebDAV 2009-05-30 24 / 32

slide-57
SLIDE 57

eZ Components

General purpose component library for PHP 5.1+ Open source and GPL friendly (New BSD license) Vital open source community Highly tested Extensive docs Professional support available

Tobias Schlitt (IPC SE 2009) WebDAV 2009-05-30 25 / 32

slide-58
SLIDE 58

The Webdav component

General purpose WebDAV server Easy integration and customization Work around client issues

Tobias Schlitt (IPC SE 2009) WebDAV 2009-05-30 26 / 32

slide-59
SLIDE 59

eZ Webdav architecture

Tobias Schlitt (IPC SE 2009) WebDAV 2009-05-30 27 / 32

slide-60
SLIDE 60

Setup a simple WebDAV server

$ s e r v e r = ezcWebdavServer : : g e t I n s t a n c e () ; $backend = new ezcWebdavFileBackend ( dirname ( F I L E ) . ’ / backend ’ ) ; $server − >handle ( $backend ) ;

Tobias Schlitt (IPC SE 2009) WebDAV 2009-05-30 28 / 32

slide-61
SLIDE 61

WebDAV server with locking

r e q u i r e o n c e ’ custom lock auth . php ’ ; $ s e r v e r = ezcWebdavServer : : g e t I n s t a n c e () ; $server − >auth = new myCustomLockAuth ( // Some c o n f i g u r a t i o n d i r e c t o r y here dirname ( F I L E ) . ’ / tokens . php ’ ) ; $server − >p l u g i n R e g i s t r y − >r e g i s t e r P l u g i n ( new ezcWebdavLockPluginConfiguration () ) ; $backend = new ezcWebdavFileBackend ( // Your WebDAV d i r e c t o r y here dirname ( F I L E ) . ’ / backend ’ ) ; $server − >handle ( $backend ) ;

Tobias Schlitt (IPC SE 2009) WebDAV 2009-05-30 29 / 32

slide-62
SLIDE 62

Outline

1 HTTP & WebDAV 2 Development challenges 3 eZ Webdav component 4 Q/A

Tobias Schlitt (IPC SE 2009) WebDAV 2009-05-30 30 / 32

slide-63
SLIDE 63

Q/A Thank you for listening!

Are there any questions left? Did the session satisfy your needs? Contact me: Tobias Schlitt <toby@php.net> Enjoy the rest of the conference!

Tobias Schlitt (IPC SE 2009) WebDAV 2009-05-30 31 / 32

slide-64
SLIDE 64

Q/A Thank you for listening!

Are there any questions left? Did the session satisfy your needs? Contact me: Tobias Schlitt <toby@php.net> Enjoy the rest of the conference!

Tobias Schlitt (IPC SE 2009) WebDAV 2009-05-30 31 / 32

slide-65
SLIDE 65

Q/A Thank you for listening!

Are there any questions left? Did the session satisfy your needs? Contact me: Tobias Schlitt <toby@php.net> Enjoy the rest of the conference!

Tobias Schlitt (IPC SE 2009) WebDAV 2009-05-30 31 / 32

slide-66
SLIDE 66

Q/A Thank you for listening!

Are there any questions left? Did the session satisfy your needs? Contact me: Tobias Schlitt <toby@php.net> Enjoy the rest of the conference!

Tobias Schlitt (IPC SE 2009) WebDAV 2009-05-30 31 / 32

slide-67
SLIDE 67

Q/A Thank you for listening!

Are there any questions left? Did the session satisfy your needs? Contact me: Tobias Schlitt <toby@php.net> Enjoy the rest of the conference!

Tobias Schlitt (IPC SE 2009) WebDAV 2009-05-30 31 / 32

slide-68
SLIDE 68

Outline

5 Attribution

Tobias Schlitt (IPC SE 2009) WebDAV 2009-05-30 32 / 32

slide-69
SLIDE 69

Enrique Dans, Tim berners-lee, http://en.wikipedia.org/wiki/File: Tim_Berners-Lee_April_2009.jpg. Brian Foote and Joseph Yoder, Big ball of mud, http://www.laputan.org/mud/mud.html#BigBallOfMud, 1999. Andreas Nadler, Ich will andere geschenke ..., http://www.flickr.com/photos/tobi_digital/3145179282/, 1999.

  • A. Faizi S. Carter D. Jensen Y. Goland, E. Whitehead, Http

extensions for distributed authoring – webdav, IETF, Network Working Group, 1999.

Tobias Schlitt (IPC SE 2009) WebDAV 2009-05-30 32 / 32