{\rtf1\ansi\ansicpg1252\uc1 \deff0\deflang1033\deflangfe1033{\fonttbl{\f0\froman\fcharset0\fprq2{\*\panose 02020603050405020304}Times New Roman;}{\f2\fmodern\fcharset0\fprq1{\*\panose 02070309020205020404}Courier New;}
{\f175\froman\fcharset238\fprq2 Times New Roman CE;}{\f176\froman\fcharset204\fprq2 Times New Roman Cyr;}{\f178\froman\fcharset161\fprq2 Times New Roman Greek;}{\f179\froman\fcharset162\fprq2 Times New Roman Tur;}
{\f180\froman\fcharset177\fprq2 Times New Roman (Hebrew);}{\f181\froman\fcharset178\fprq2 Times New Roman (Arabic);}{\f182\froman\fcharset186\fprq2 Times New Roman Baltic;}{\f191\fmodern\fcharset238\fprq1 Courier New CE;}
{\f192\fmodern\fcharset204\fprq1 Courier New Cyr;}{\f194\fmodern\fcharset161\fprq1 Courier New Greek;}{\f195\fmodern\fcharset162\fprq1 Courier New Tur;}{\f196\fmodern\fcharset177\fprq1 Courier New (Hebrew);}
{\f197\fmodern\fcharset178\fprq1 Courier New (Arabic);}{\f198\fmodern\fcharset186\fprq1 Courier New Baltic;}}{\colortbl;\red0\green0\blue0;\red0\green0\blue255;\red0\green255\blue255;\red0\green255\blue0;\red255\green0\blue255;\red255\green0\blue0;
\red255\green255\blue0;\red255\green255\blue255;\red0\green0\blue128;\red0\green128\blue128;\red0\green128\blue0;\red128\green0\blue128;\red128\green0\blue0;\red128\green128\blue0;\red128\green128\blue128;\red192\green192\blue192;}{\stylesheet{
\ql \li0\ri0\widctlpar\faauto\adjustright\rin0\lin0\itap0 \fs24\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 \snext0 Normal;}{\s1\ql \li0\ri0\keepn\widctlpar\faauto\adjustright\rin0\lin0\itap0
\b\fs28\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 \sbasedon0 \snext0 heading 1;}{\s2\ql \li0\ri0\sb240\sa60\keepn\widctlpar\faauto\adjustright\rin0\lin0\itap0 \b\i\fs24\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 \sbasedon0 \snext0
heading 2;}{\*\cs10 \additive Default Paragraph Font;}{\*\cs15 \additive \ul\cf2 \sbasedon10 Hyperlink;}{\s16\ql \li0\ri0\widctlpar\faauto\adjustright\rin0\lin0\itap0 \fs24\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 \sbasedon0 \snext17
Definition Term;}{\s17\ql \li360\ri0\widctlpar\faauto\adjustright\rin0\lin360\itap0 \fs24\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 \sbasedon0 \snext16 Definition List;}{\s18\qc \li0\ri0\widctlpar\faauto\adjustright\rin0\lin0\itap0
\fs24\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 \sbasedon0 \snext18 Title;}{\s19\ql \li540\ri540\widctlpar\faauto\adjustright\rin540\lin540\itap0 \i\fs24\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 \sbasedon0 \snext19 Block Text;}{
\s20\ql \li0\ri0\widctlpar\faauto\adjustright\rin0\lin0\itap0 \fs24\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 \sbasedon0 \snext20 endnote text;}{\*\cs21 \additive \super \sbasedon10 endnote reference;}{
\s22\ql \li0\ri0\widctlpar\faauto\adjustright\rin0\lin0\itap0 \i\fs24\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 \sbasedon0 \snext22 Body Text;}{\s23\ql \li0\ri0\widctlpar\tqc\tx4320\tqr\tx8640\faauto\adjustright\rin0\lin0\itap0
\fs24\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 \sbasedon0 \snext23 header;}{\s24\ql \li0\ri0\widctlpar\tqc\tx4320\tqr\tx8640\faauto\adjustright\rin0\lin0\itap0 \fs24\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 \sbasedon0 \snext24 footer;}
{\*\cs25 \additive \ul\cf12 \sbasedon10 FollowedHyperlink;}{\s26\ql \li0\ri0\widctlpar\faauto\adjustright\rin0\lin0\itap0 \fs24\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 \sbasedon0 \snext26 Body Text 2;}}{\*\listtable{\list\listtemplateid-1
\listsimple{\listlevel\levelnfc0\levelnfcn0\leveljc0\leveljcn0\levelfollow0\levelstartat0\levelspace0\levelindent0{\leveltext\'01*;}{\levelnumbers;}\chbrdr\brdrnone\brdrcf1 \chshdng0\chcfpat1\chcbpat1 }{\listname ;}\listid-2}{\list\listtemplateid67698705
\listsimple{\listlevel\levelnfc0\levelnfcn0\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\'02\'00);}{\levelnumbers\'01;}\chbrdr\brdrnone\brdrcf1 \chshdng0\chcfpat1\chcbpat1\fbias0 \fi-360\li360\jclisttab\tx360 }
{\listname ;}\listid3098888}}{\*\listoverridetable{\listoverride\listid-2\listoverridecount1{\lfolevel\listoverrideformat{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat0\levelold\levelspace0\levelindent0{\leveltext
\'01\'95;}{\levelnumbers;}\f0\fs64\chbrdr\brdrnone\brdrcf1 \chshdng0\chcfpat1\chcbpat1\fbias0 }}\ls1}{\listoverride\listid3098888\listoverridecount0\ls2}}{\info{\title WebDAV and Apache}{\author Greg Stein}{\operator Greg Stein}
{\creatim\yr2000\mo1\dy20\hr4\min2}{\revtim\yr2002\mo10\dy13\hr2\min41}{\version73}{\edmins354}{\nofpages10}{\nofwords4233}{\nofchars24131}{\*\company }{\nofcharsws29634}{\vern8269}}
\widowctrl\enddoc\aenddoc\aftnnar\noxlattoyen\expshrtn\noultrlspc\dntblnsbdb\nospaceforul\hyphcaps0\formshade\horzdoc\dghspace120\dgvspace120\dghorigin1701\dgvorigin1984\dghshow0\dgvshow3
\jcompress\viewkind1\viewscale100\pgbrdrhead\pgbrdrfoot\nolnhtadjtbl \fet1\sectd \linex0\endnhere\sectdefaultcl {\footer \pard\plain \s24\ql \li0\ri0\widctlpar\tqc\tx4320\tqr\tx8640\faauto\adjustright\rin0\lin0\itap0
\fs24\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\field{\*\fldinst {\fs20\cgrid0 AUTHOR }}{\fldrslt {\fs20\lang1024\langfe1024\cgrid0\noproof Greg Stein}}}{\fs20\cgrid0 \tab Page }{\field{\*\fldinst {\fs20\cgrid0 PAGE }}{\fldrslt {
\fs20\lang1024\langfe1024\cgrid0\noproof 6}}}{\fs20\cgrid0 \tab WebDAV and Apache}{\fs20
\par }}{\*\pnseclvl1\pnucrm\pnstart1\pnindent720\pnhang{\pntxta .}}{\*\pnseclvl2\pnucltr\pnstart1\pnindent720\pnhang{\pntxta .}}{\*\pnseclvl3\pndec\pnstart1\pnindent720\pnhang{\pntxta .}}{\*\pnseclvl4\pnlcltr\pnstart1\pnindent720\pnhang{\pntxta )}}
{\*\pnseclvl5\pndec\pnstart1\pnindent720\pnhang{\pntxtb (}{\pntxta )}}{\*\pnseclvl6\pnlcltr\pnstart1\pnindent720\pnhang{\pntxtb (}{\pntxta )}}{\*\pnseclvl7\pnlcrm\pnstart1\pnindent720\pnhang{\pntxtb (}{\pntxta )}}{\*\pnseclvl8
\pnlcltr\pnstart1\pnindent720\pnhang{\pntxtb (}{\pntxta )}}{\*\pnseclvl9\pnlcrm\pnstart1\pnindent720\pnhang{\pntxtb (}{\pntxta )}}\pard\plain \s18\qc \li0\ri0\widctlpar\faauto\adjustright\rin0\lin0\itap0
\fs24\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\b\fs32 WebDAV and Apache
\par }\pard\plain \qc \li0\ri0\widctlpar\faauto\adjustright\rin0\lin0\itap0 \fs24\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\fs20
\par Greg Stein
\par }{\field{\*\fldinst {\fs20 HYPERLINK "mailto:gstein@collab.net" }{\fs20 {\*\datafield
00d0c9ea79f9bace118c8200aa004ba90b020000001700000012000000670073007400650069006e00400063006f006c006c00610062002e006e00650074000000e0c9ea79f9bace118c8200aa004ba90b320000006d00610069006c0074006f003a00670073007400650069006e00400063006f006c006c00610062002e00
6e00650074000000}}}{\fldrslt {\cs15\fs20\ul\cf2 gstein@collab.net}}}{\fs20 , }{\field{\*\fldinst {\fs20 HYPERLINK "http://www.lyra.org/greg/" }{\fs20 {\*\datafield
00d0c9ea79f9bace118c8200aa004ba90b02000000170000001a00000068007400740070003a002f002f007700770077002e006c007900720061002e006f00720067002f0067007200650067002f000000e0c9ea79f9bace118c8200aa004ba90b3400000068007400740070003a002f002f007700770077002e006c007900
720061002e006f00720067002f0067007200650067002f000000}}}{\fldrslt {\cs15\fs20\ul\cf2 http://www.lyra.org/greg/}}}{\fs20
\par }\pard \ql \li0\ri0\widctlpar\faauto\adjustright\rin0\lin0\itap0 {\fs20
\par }\pard\plain \s1\ql \li0\ri0\keepn\widctlpar\faauto\outlinelevel0\adjustright\rin0\lin0\itap0 \b\fs28\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {Abstract
\par }\pard\plain \s19\ql \li540\ri540\widctlpar\faauto\adjustright\rin540\lin540\itap0 \i\fs24\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\fs20 WebDAV is an exciting new technology for the World Wide Web. WebDAV stands for Web-Bas
ed Distributed Authoring and Versioning, and provides a way to remotely author and manage your Web servers (whether you are an author or an administrator). The WebDAV protocol is specified by RFC 2518 and RFC 3253 and is now built into the Apache Web serv
e
r. This paper presents an overview of WebDAV, its benefits for users, and scenarios for effective deployment. It also details how to set up the mod_dav Apache module, and describes the available tools and applications to use with your new WebDAV-enabled s
erver. In closing, this paper discusses the future directions of the WebDAV protocol.
\par }\pard\plain \ql \li0\ri0\widctlpar\faauto\adjustright\rin0\lin0\itap0 \fs24\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\fs20
\par }\pard\plain \s1\ql \li0\ri0\keepn\widctlpar\faauto\outlinelevel0\adjustright\rin0\lin0\itap0 \b\fs28\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {WebDAV Overview
\par }\pard\plain \ql \li0\ri0\widctlpar\faauto\adjustright\rin0\lin0\itap0 \fs24\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\fs20
\par }{\i\fs20 WebDAV}{\fs20 stands for \'93Web-based Distributed Authoring and Versioning.\'94 Simply speaking, it provides a mechanism for authors to create documents on a web server and to manage their organization. WebDAV, or \'93DAV\'94
for short, is driven by a desire to create interoperable tools for distributed web authoring. Where the World Wide Web has generally been a read-only environment, DAV seeks to turn it into a }{\i\fs20 writeable}{\fs20 medium.
\par
\par DAV is specified by RFC 2518}{\cs21\fs20\super \chftn {\footnote\ftnalt \pard\plain \s20\ql \li0\ri0\widctlpar\faauto\adjustright\rin0\lin0\itap0 \fs24\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\cs21\fs20\super \chftn }{\fs20
The WebDAV RFC (2518) can be found at }{\field{\*\fldinst {\fs20 HYPERLINK http://www.webdav.org/specs/ }{\fs20 {\*\datafield
00d0c9ea79f9bace118c8200aa004ba90b02000000170000001d00000068007400740070003a002f002f007700770077002e007700650062006400610076002e006f00720067002f00730070006500630073002f000000e0c9ea79f9bace118c8200aa004ba90b3a00000068007400740070003a002f002f00770077007700
2e007700650062006400610076002e006f00720067002f00730070006500630073002f0000000000000000000000000000}}}{\fldrslt {\cs15\fs20\ul\cf2 http://www.webdav.org/specs/}}}}}{\fs20
as a set of extensions to the HTTP protocol. Just like HTTP, DAV operates on all kinds of document types, such HTML pages, images, text files, or PDF documents.
\par
\par It is important to note that RFC 2518 does not specify
any versioning mechanisms. Versioning is a very large problem set, so it was deferred in order to get a basic, core level of WebDAV completed and available for use. The versioning extensions were completed, and are now available in RFC 3253.
\par
\par }\pard\plain \s1\ql \li0\ri0\keepn\widctlpar\faauto\outlinelevel0\adjustright\rin0\lin0\itap0 \b\fs28\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {Benefits of Using DAV
\par }\pard\plain \ql \li0\ri0\widctlpar\faauto\adjustright\rin0\lin0\itap0 \fs24\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\fs20
\par Users, authors, and server administrators can receive benefits from the deployment of DAV technology. There are also technical benefits for developers, security personnel, and network administrators.
\par
\par Users, in this context, refer to people who
are visiting a web site. DAV can assist these users with providing additional metadata about the documents they are viewing. For example, information about the author, the revision history, or the last modification can be fetched from the DAV server and m
a
de available to the user. This can be performed in a consistent fashion rather than using ad hoc techniques, such as placing the last-modification date at the bottom of a web page. These ad hoc techniques may not even be in use by the site authors, may be
used inconsistently throughout the site, and cannot easily be interpreted and used by sophisticated user agents. Historically, authors have provided users with an }{\f2\fs18 index.html}{\fs20
document to provide an index into the contents of a directory or site. Using DAV, a user can fetch complete listings of a server\rquote s contents, subject to access restrictions. The user\rquote
s browser could display this listing in varying formats according to the user\rquote s preferences, rather than according to the author\rquote s desires. In fact, the Web Folders add-on to Internet Explorer 5 does exactly this \endash
it displays the listings in the same fashion as other resources on the user\rquote s local disk. Web Folders provides icons, varying layouts, and property pages to view detailed information.
\par
\par For the auth
or, DAV finally provides a way to consistently move documents from their client, authoring machine to the web server. The author no longer needs to invoke FTP and then remember how the filesystem presented by FTP maps to the URL namespace provided by the
web server. An author can specify the exact URL where the document should be stored. In addition, DAV provides mechanisms to manage existing content on the server \endash
moves, copies, and deletes are possible. The author can also attach metadata to the documents \endash
possibly for their own use, for browsing by users, or for tracking among the authoring team members. A DAV server also provides overwrite protection for multiple authors to ensure they do not destroy changes made by others when a (changed) document is
placed on the server.
\par
\par The server administrator can use DAV to increase the flexibility in the mapping of the URL namespace to an underlying filesystem or database. Portions may be placed into a database, others into a high-performance filesystem, and stil
l others onto a network data repository. All interactions will come through the web server, which can select the appropriate repository. Historically, web documents have had to reside in the filesystem so the authors can easily access them with editing to
ols. A second benefit is that the server administrator is not even required to provide \'93system\'94 accounts for the authors \endash authors\rquote
authentication will happen through the web server. By preventing access, via system accounts, to the underlying system, the administrator can greatly enhance the reliability and security of the server.
\par
\par From a technical standpoint, DAV introduces a number of features to the Web. These can be used by developers for new types or enhanced features in their products. These new features are discussed in the next section.
\par
\par The fact that DAV builds upon HTTP can simplify a network or security administrator\rquote s job \endash there is a single protocol (HTTP) to worry about. Separate tunnels, proxies, and policies are no longer required. In fact, i
t becomes possible to throw out plain-text password mechanisms, such as the one used by the standard FTP protocol, and replace them with stronger system. Certificates, Kerberos, or tunneling passwords through encrypted channels, such as SSL, all becomes p
ossible with HTTP.
\par
\par }\pard\plain \s1\ql \li0\ri0\keepn\widctlpar\faauto\outlinelevel0\adjustright\rin0\lin0\itap0 \b\fs28\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {DAV\rquote s Features
\par }\pard\plain \ql \li0\ri0\widctlpar\faauto\adjustright\rin0\lin0\itap0 \fs24\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\fs20
\par WebDAV introduces several key, new features for developers to use: properties, overwrite protection, namespace management, new infrastructure and reuse of existing infrastructure, and a basis for replacing other protocols.
\par
\par }\pard\plain \s22\ql \li0\ri0\widctlpar\faauto\adjustright\rin0\lin0\itap0 \i\fs24\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\fs20 Note: some new terminology will be used below \endash
please see the Appendix for a quick discussion of terminology used by DAV}{\i0\fs20
\par }{\fs20 .
\par }\pard\plain \s2\ql \li0\ri0\sb240\sa60\keepn\widctlpar\faauto\outlinelevel1\adjustright\rin0\lin0\itap0 \b\i\fs24\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\fs20 Properties
\par }\pard\plain \ql \li0\ri0\widctlpar\faauto\adjustright\rin0\lin0\itap0 \fs24\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\fs20 Properties, also known as \'93metadata\'94
, are stored as name/value pairs on the server. Every resource, whether a member resource or a collection resource, may have properties associated with it. Some properties will be defined by the server and are called \'93live properties\'94
. Other properties are client-defined and are called \'93dead properties\'94.
\par
\par A property name is a URI, which ensures that it is universally unique. Example property names are \'93DAV:getlastmodified\'94 or \'93http://apache.org/dav/props/executable\'94. A property value is a well-formed XML fragment.
\par
\par Properties can store items such as author, title, modification time, or size. If a property is server-defined (\'93live\'94), then it may be read-only and/or the (XML) contents may be required to fit a particular pattern. Dead properties\rquote
formatting and integrity are specified and managed by the clients that store them on the server.
\par
\par }\pard\plain \s2\ql \li0\ri0\sb240\sa60\keepn\widctlpar\faauto\outlinelevel1\adjustright\rin0\lin0\itap0 \b\i\fs24\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\fs20 Overwrite protection
\par }\pard\plain \ql \li0\ri0\widctlpar\faauto\adjustright\rin0\lin0\itap0 \fs24\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\fs20
WebDAV provides different types of locks that clients may use for arbitrating access to resources. These locks can be applied to individual resources, or an entire \'93tree\'94 of resources. A lock has different pieces of state, including
a timeout, an owner, a \'93lock token\'94, and an associated, authenticated user.
\par
\par It is important to note that timeouts are associated with the locks. A client may request a particular timeout, and the server may choose to honor or ignore that value. In addition, the client must also assume that a lock may disappear at any time
\endash typically, for administrative reasons, but it could also be caused by, say, a server crash. These features of the locks may seem to create too much indeterminism for a DAV client, but t
he client actually has a number of ways to cope with the situation. For example, the client can store the resource\rquote s \'93entity-tag\'94
when the lock is acquired. If the lock disappears, then the client can reacquire the lock and compare it saved entity-tag against the resource\rquote
s current entity-tag. If no change has occurred in the entity-tag, then the client knows it will not overwrite any changes when the document is saved. If a change }{\i\fs20 has}{\fs20 occurred, then the client can work out a solution with the user.
\par
\par }\pard\plain \s2\ql \li0\ri0\sb240\sa60\keepn\widctlpar\faauto\outlinelevel1\adjustright\rin0\lin0\itap0 \b\i\fs24\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\fs20 Namespace management
\par }\pard\plain \ql \li0\ri0\widctlpar\faauto\adjustright\rin0\lin0\itap0 \fs24\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\fs20 In this context, \'93namespace\'94
refers to the URL namespace exposed by a web server. DAV provides mechanisms to manage this namespace through copies, moves, deletes, and construction of resources.
\par
\par }\pard\plain \s2\ql \li0\ri0\sb240\sa60\keepn\widctlpar\faauto\outlinelevel1\adjustright\rin0\lin0\itap0 \b\i\fs24\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\fs20 Versioning
\par }\pard\plain \ql \li0\ri0\widctlpar\faauto\adjustright\rin0\lin0\itap0 \fs24\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\fs20 Versioning is a large and complex topic, which is a bit beyond the scope of the talk, or this paper.
RFC 3252 specifies a range of versioning capabilities, from simple linear versioning, to very complex configuration management. Clients and servers can choose which facilities they want to work with or supply, and perform feature negotiation to
find a compatible feature base. Please see the RFC or }{\field{\*\fldinst {\fs20 HYPERLINK "http://www.webdav.org/deltav/" }{\fs20 {\*\datafield
00d0c9ea79f9bace118c8200aa004ba90b02000000170000001e00000068007400740070003a002f002f007700770077002e007700650062006400610076002e006f00720067002f00640065006c007400610076002f000000e0c9ea79f9bace118c8200aa004ba90b3c00000068007400740070003a002f002f0077007700
77002e007700650062006400610076002e006f00720067002f00640065006c007400610076002f000000}}}{\fldrslt {\cs15\fs20\ul\cf2 http://www.webdav.org/deltav/}}}{\fs20 for more information on versioning.
\par }\pard\plain \s2\ql \li0\ri0\sb240\sa60\keepn\widctlpar\faauto\outlinelevel1\adjustright\rin0\lin0\itap0 \b\i\fs24\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\fs20 Infrastructure: old and new
\par }\pard\plain \ql \li0\ri0\widctlpar\faauto\adjustright\rin0\lin0\itap0 \fs24\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\fs20 DAV is built using
HTTP, so it inherits all of the benefits of the existing HTTP infrastructure. Specifically, items such as strong authentication, encryption, proxy and firewall navigation, and caching become available to DAV. The worldwide deployment of HTTP helps greatl
y, too, in providing a base for DAV to be used worldwide. There are also more subtle benefits that HTTP provides: a very large talent pool of people who understand HTTP, a large number of books, tools, and applications that deal with HTTP, and a \'93
critical mass\'94 for further development and deployment.
\par
\par Building on top of this infrastructure, DAV brings its new features: writeable resources, properties, overwrite protection, and namespace management. As additional DAV capabilities are introduced (such as acces
s control and versioning), these will continue to grow the infrastructure. This expansion of the existing infrastructure can then lead to more features and capabilities.
\par
\par }\pard\plain \s2\ql \li0\ri0\sb240\sa60\keepn\widctlpar\faauto\outlinelevel1\adjustright\rin0\lin0\itap0 \b\i\fs24\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\fs20 A replacement protocol
\par }\pard\plain \ql \li0\ri0\widctlpar\faauto\adjustright\rin0\lin0\itap0 \fs24\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\fs20 There are a number of proprietary, specialized, or alternative
mechanisms for transferring documents to a web server. DAV can easily replace these protocols and, at the same time, provide even more functionality.
\par
\par For example, using FTP to move files to a web server is problematic in a number of areas: plain-text pas
swords, needing to map a filesystem view to a URL namespace, and inconsistent directory listings. As an alternative, DAV can use stronger authentication (\'93digest\'94
, Kerberos, or even certificates), it can encrypt the channel, there is no mapping between namespaces, and DAV\rquote s form of a directory listing can reliably return modification dates, file size, names, and file types.
\par
\par Proprietary protocols, such as those used by Microsoft\rquote s FrontPage or NetObjects\rquote Fusion products, can be similarly replaced. If these tools become DAV-capable, then they can be used against }{\i\fs20 any}{\fs20 DAV-enabled server.
\par
\par Other ad hoc solutions, such as those based on \'93file upload\'94 or doing a POST to a CGI script, can be eliminated.
\par
\par HTTP/1.1 defines a solid platform for extending HTTP, which
DAV uses for its benefit. In turn, this provides a solid base for other specialized protocols. A system might use DAV for moving data between a client and a server, and define new HTTP methods for invoking specialized server operations. This would avoid m
any pitfalls associated with trying to create a new protocol from scratch; it also provides leverage with HTTP\rquote s existing feature set.
\par
\par }\pard\plain \s1\ql \li0\ri0\keepn\widctlpar\faauto\outlinelevel0\adjustright\rin0\lin0\itap0 \b\fs28\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {DAV Details
\par }\pard\plain \ql \li0\ri0\widctlpar\faauto\adjustright\rin0\lin0\itap0 \fs24\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\fs20
\par As mentioned before, DAV is built upon HTTP/1.1. DAV adds new headers and methods to the protocol, along wit
h providing additional semantics for some of the existing HTTP/1.1 methods. Part of the changes introduced by HTTP/1.1 (over 1.0) is this mechanism for extending the protocol in a clean, well-understood fashion.
\par
\par Briefly, the new headers are: }{\f2\fs20 DAV:}{\fs20 , }{\f2\fs20 If:}{\fs20 , }{\f2\fs20 Depth:}{\fs20 , }{\f2\fs20 Overwrite:}{\fs20 , }{\f2\fs20 Destination:}{\fs20 , }{\f2\fs20 Lock-Token:}{\fs20 , }{\f2\fs20 Timeout:}{\fs20 , and }{\f2\fs20
Status-URI:}{\fs20 . These headers will not be discussed in detail here, but will be mentioned in association with the HTTP methods.
\par
\par The new HTTP methods are: }{\f2\fs20 COPY}{\fs20 , }{\f2\fs20 MOVE}{\fs20 , }{\f2\fs20 MKCOL}{\fs20 , }{\f2\fs20 PROPPATCH}{\fs20 , }{\f2\fs20 PROPFIND}{\fs20 , }{\f2\fs20 LOCK}{\fs20 , and }{\f2\fs20 UNLOCK}{\fs20 . New semantics are provided for }{
\f2\fs20 GET}{\fs20 , }{\f2\fs20 PUT}{\fs20 , }{\f2\fs20 POST}{\fs20 , }{\f2\fs20 DELETE}{\fs20 , and }{\f2\fs20 OPTIONS}{\fs20 .
\par
\par }\pard\plain \s2\ql \li0\ri0\sb240\sa60\keepn\widctlpar\faauto\outlinelevel1\adjustright\rin0\lin0\itap0 \b\i\fs24\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\fs20 COPY and MOVE
\par }\pard\plain \ql \li0\ri0\widctlpar\faauto\adjustright\rin0\lin0\itap0 \fs24\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\fs20 These two methods are rather obvious: they move or copy resources on the DAV server. The }{\f2\fs20 Destination:}{\fs20
header is used to specify the target location. When collections are copied, the }{\f2\fs20 Depth:}{\fs20 header can be used to specify how deeply the copy will be performed. The }{\f2\fs20 Overwrite:}{\fs20
header is used to prevent overwriting, or to ensure that overwriting a target was intended.
\par }\pard\plain \s2\ql \li0\ri0\sb240\sa60\keepn\widctlpar\faauto\outlinelevel1\adjustright\rin0\lin0\itap0 \b\i\fs24\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\fs20 MKCOL
\par }\pard\plain \ql \li0\ri0\widctlpar\faauto\adjustright\rin0\lin0\itap0 \fs24\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\fs20 This method is used to create a new collection on the server. }{\f2\fs20 PUT}{\fs20
is only to be used for creating or updating the content of member resources.
\par
\par An important point is that some servers implement }{\f2\fs20 PUT}{\fs20 to implicitly create parent collections for a resource, if those parents do not exist. DAV has modified the semantics of }{\f2\fs20 PUT}{\fs20
to state that all parents must exist; this ensure that parents are not accidentally created due to, say, a typographical error. A }{\f2\fs20 MKCOL}{\fs20 must be issued to create parents before a }{\f2\fs20 PUT}{\fs20 is performed.
\par }\pard\plain \s20\ql \li0\ri0\widctlpar\faauto\adjustright\rin0\lin0\itap0 \fs24\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\fs20
\par }\pard\plain \s2\ql \li0\ri0\sb240\sa60\keepn\widctlpar\faauto\outlinelevel1\adjustright\rin0\lin0\itap0 \b\i\fs24\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\fs20 PROPPATCH and PROPFIND
\par }\pard\plain \ql \li0\ri0\widctlpar\faauto\adjustright\rin0\lin0\itap0 \fs24\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\f2\fs20 PROPPATCH}{\fs20 is used to set, change, or delete properties on a resource. Each }{\f2\fs20 PROPPATCH}{\fs20
operates on a single resource, but may perform an arbitrary, ordered sequence of property modifications on that resource.
\par
\par }{\f2\fs20 PROPFIND}{\fs20 is used to fetch one or more property names and/or values from one or more resources. The body of the method is used to determine the exact fetching behavior for each target resource. The }{\f2\fs20 Depth:}{\fs20
header specifies the behavior of selecting resources when a }{\f2\fs20 PROPFIND}{\fs20 is performed on a collection resource.
\par }\pard\plain \s2\ql \li0\ri0\sb240\sa60\keepn\widctlpar\faauto\outlinelevel1\adjustright\rin0\lin0\itap0 \b\i\fs24\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\fs20 LOCK and UNLOCK
\par }\pard\plain \ql \li0\ri0\widctlpar\faauto\adjustright\rin0\lin0\itap0 \fs24\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\fs20 These two methods have obvious semantics: they apply and remove locks from resources. The }{\f2\fs20 Depth:}{\fs20
header is used to select resources when a }{\f2\fs20 LOCK}{\fs20 is performed on a resource. The }{\f2\fs20 Lock-Token:}{\fs20 header is used by both resources: for }{\f2\fs20 LOCK}{\fs20 , it occurs in t
he response and specifies the resulting lock token; for }{\f2\fs20 UNLOCK}{\fs20 , it occurs in the request specifies the lock token to be unlocked.
\par
\par The }{\f2\fs20 LOCK}{\fs20 request must have a body, but it will not be detailed here. In short, it is used to specify the various pieces of lock state that were described earlier.
\par }\pard\plain \s2\ql \li0\ri0\sb240\sa60\keepn\widctlpar\faauto\outlinelevel1\adjustright\rin0\lin0\itap0 \b\i\fs24\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\fs20 New semantics for existing methods
\par }\pard\plain \ql \li0\ri0\widctlpar\faauto\adjustright\rin0\lin0\itap0 \fs24\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\fs20
The new semantics that were applied to the existing methods primarily deal with their interaction with locks, with the requirement to process the }{\f2\fs20 If:}{\fs20 header, and how to return a server\rquote s DAV capabilities in an }{\f2\fs20 OPTION}{
\fs20 request.
\par
\par }\pard\plain \s1\ql \li0\ri0\keepn\widctlpar\faauto\outlinelevel0\adjustright\rin0\lin0\itap0 \b\fs28\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {Some Scenarios for Use
\par }\pard\plain \ql \li0\ri0\widctlpar\faauto\adjustright\rin0\lin0\itap0 \fs24\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\fs20
\par There are many scenarios where WebDAV technology can be deployed effectively. A few samples are: collaborative authoring, a network file system, a uniform repository-access protocol, and r
emote/distributed software engineering projects. In each of these cases, DAV can provide a basis for communication between clients and servers.
\par
\par Below are a couple detailed deployment scenarios. It is interesting to note that the scenarios are not restricted to the Internet, but may be used in various LAN, WAN, or VPN environments.
\par
\par }\pard\plain \s2\ql \li0\ri0\sb240\sa60\keepn\widctlpar\faauto\outlinelevel1\adjustright\rin0\lin0\itap0 \b\i\fs24\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\fs20 Departmental server
\par }\pard\plain \ql \li0\ri0\widctlpar\faauto\adjustright\rin0\lin0\itap0 \fs24\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\fs20
In this scenario, suppose there is a department with twenty staff members. Each member needs to author documents on their department\rquote s private web server.
\par
\par H
istorically, this kind of scenario has used a central file server for collaborative authoring. More recently, and certainly with the advent of DAV, it is possibly to entirely drop the notion of a file server and work solely with a DAV-enabled web server.
The web server can provide better navigation, overviews, offsite links, searching, and integration with operational systems such as finance and accounting.
\par
\par By using a DAV server, the staff members can directly place and manage their documents on the web se
rver. Each of these documents may be tagged with metadata, by using DAV properties. The staff can create auxiliary index and overview documents, or use web server features to automatically perform these functions. The server administrator can partition th
e
URL namespace as necessary to store the documents into different backup partitions, or to spread a load over the available computer resources. In addition, the server administrator can use HTTP authentication and authorization mechanisms to restrict acce
ss to the web server on an individual basis.
\par }\pard\plain \s2\ql \li0\ri0\sb240\sa60\keepn\widctlpar\faauto\outlinelevel1\adjustright\rin0\lin0\itap0 \b\i\fs24\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\fs20 Web hosting
\par }\pard\plain \ql \li0\ri0\widctlpar\faauto\adjustright\rin0\lin0\itap0 \fs24\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\fs20 In this scenario, there is a small Internet Service Provider (\'93ISP\'94
) that has 5000 users, each with personal web pages.
\par
\par Typically, these users would be managing their web pages through some ad hoc sy
stem composed of FTP, NFS mounts, and possibly a FrontPage-enabled server. Every user would need to have some form of access to the system that is running the web server process.
\par
\par In the DAV-enabled scenario, the server administrator can dramatically restrict access to the server. Only ISP staff would have access to the server\rquote s command shell and facilities. The ISP\rquote
s users would access, create, and manage their web pages entirely through WebDAV. The web server could be configured to authenticate the user through, say, communication with the Radius server that authenticated the user\rquote s dialin process.
\par
\par }\pard\plain \s1\ql \li0\ri0\keepn\widctlpar\faauto\outlinelevel0\adjustright\rin0\lin0\itap0 \b\fs28\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {Setting Up mod_dav
\par }\pard\plain \ql \li0\ri0\widctlpar\faauto\adjustright\rin0\lin0\itap0 \fs24\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\fs20
\par This section is a brief overview of the processing of building, installing, and configuring the mod_dav module for the Apache web server. Detailed instructions are available at the mod_dav website}{\cs21\fs20\super \chftn {\footnote\ftnalt \pard\plain
\s20\ql \li0\ri0\widctlpar\faauto\adjustright\rin0\lin0\itap0 \fs24\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\cs21\fs20\super \chftn }{\fs20 }{\field{\*\fldinst {\fs20 HYPERLINK http://www.webdav.org/mod_dav/ }{\fs20 {\*\datafield
00d0c9ea79f9bace118c8200aa004ba90b02000000170000001f00000068007400740070003a002f002f007700770077002e007700650062006400610076002e006f00720067002f006d006f0064005f006400610076002f000000e0c9ea79f9bace118c8200aa004ba90b3e00000068007400740070003a002f002f007700
770077002e007700650062006400610076002e006f00720067002f006d006f0064005f006400610076002f0000000000000000000000000000}}}{\fldrslt {\cs15\fs20\ul\cf2 http://www.webdav.org/mod_dav/}}}}}{\fs20 and within the distribution. This section will cover mod_dav, as
a builtin module of Apache 2.0. The separate version, mod_dav 1.0.x, is designed for the Apache 1.3.x web server and is not discussed here. However, it operates similarly, so this information should also apply to that version.
\par
\par mod_dav is a module which adds DAV capabilities to an Apache server. Specifically, it recognizes and handles the new HTTP methods and modifies the behavior of the existing methods.
\par
\par There are five basic steps:
\par {\pntext\pard\plain\fs20 \hich\af0\dbch\af0\loch\f0 1)\tab}}\pard \ql \fi-360\li360\ri0\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls2\pnrnot0\pndec\pnstart1\pnindent360\pnsp120\pnhang{\pntxta )}}\faauto\ls2\adjustright\rin0\lin360\itap0 {\fs20
Grab the Apache tarball, unpack it, build it, and install it
\par {\pntext\pard\plain\fs20 \hich\af0\dbch\af0\loch\f0 2)\tab}}\pard \ql \fi-360\li360\ri0\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls2\pnrnot0\pndec\pnstart1\pnindent360\pnsp120\pnhang{\pntxta )}}\faauto\ls2\adjustright\rin0\lin360\itap0 {\fs20
Enable DAV for the appropriate portions of your servers\rquote namespace
\par {\pntext\pard\plain\fs20 \hich\af0\dbch\af0\loch\f0 3)\tab}}\pard \ql \fi-360\li360\ri0\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls2\pnrnot0\pndec\pnstart1\pnindent360\pnsp120\pnhang{\pntxta )}}\faauto\ls2\adjustright\rin0\lin360\itap0 {\fs20
Prepare the repository
\par {\pntext\pard\plain\fs20 \hich\af0\dbch\af0\loch\f0 4)\tab}}\pard \ql \fi-360\li360\ri0\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls2\pnrnot0\pndec\pnstart1\pnindent360\pnsp120\pnhang{\pntxta )}}\faauto\ls2\adjustright\rin0\lin360\itap0 {\fs20
Enable locking
\par {\pntext\pard\plain\fs20 \hich\af0\dbch\af0\loch\f0 5)\tab}}\pard \ql \fi-360\li360\ri0\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls2\pnrnot0\pndec\pnstart1\pnindent360\pnsp120\pnhang{\pntxta )}}\faauto\ls2\adjustright\rin0\lin360\itap0 {\fs20
Tighten up the security
\par }\pard \ql \li0\ri0\widctlpar\faauto\adjustright\rin0\lin0\itap0 {\fs20
\par }\pard\plain \s2\ql \li0\ri0\sb240\sa60\keepn\widctlpar\faauto\outlinelevel1\adjustright\rin0\lin0\itap0 \b\i\fs24\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\fs20 Grab, unpack, build, and install
\par }\pard\plain \ql \li0\ri0\widctlpar\faauto\adjustright\rin0\lin0\itap0 \fs24\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\fs20 mod_dav is similar to other Apache modules in the distribution. You simply configure Apache
to include the module, and it will get built and installed and ready for use. It is also important to configure and build a \'93back end\'94 for mod_dav. The back end actually stores all the content and properties, and \'93plugs into\'94
mod_dav. Apache 2.0 comes with a default back end, called mod_dav_fs, which stores all the data into the filesystem. Alternatives are the Catacomb or Subversion projects, which store data in a database or a versioning repository, respectively.
\par
\par }\pard\plain \s26\ql \li0\ri0\widctlpar\faauto\adjustright\rin0\lin0\itap0 \fs24\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\fs20
To configure mod_dav and mod_dav_fs into the Apache 2.0 server, you should pass a couple extra parameters to the configure script:
\par }\pard\plain \ql \li0\ri0\widctlpar\faauto\adjustright\rin0\lin0\itap0 \fs24\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\fs20
\par }{\f2\fs20 $ ./configure --enable-dav --enable-dav-fs
\par }{\fs20
\par Note that mod_dav will also be configured if you pass }{\f2\fs18 --enable-modules=most}{\fs20 to the configure script.
\par }\pard\plain \s2\ql \li0\ri0\sb240\sa60\keepn\widctlpar\faauto\outlinelevel1\adjustright\rin0\lin0\itap0 \b\i\fs24\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\fs20 Enabling DAV
\par }\pard\plain \ql \li0\ri0\widctlpar\faauto\adjustright\rin0\lin0\itap0 \fs24\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\fs20 mod_dav has a simple directive for enabling DAV within a Directory or a Location. For example:
\par
\par }{\f2\fs20 Alias /gstein /home/apache/davdirs/gstein
\par
\par }\pard \ql \fi720\li0\ri0\widctlpar\faauto\adjustright\rin0\lin0\itap0 {\f2\fs20 DAV On
\par }\pard \ql \li0\ri0\widctlpar\faauto\adjustright\rin0\lin0\itap0 {\f2\fs20
\par }{\fs20
\par In the above example, there is a location (in the URL namespace) named }{\f2\fs20 /gstein}{\fs20 . That location, and all resources under it, becomes DAV-enabled. Further, the resources will be stored in the }{\f2\fs20 /home/apache/davdirs/gstein}{\fs20
directory.
\par }\pard\plain \s2\ql \li0\ri0\sb240\sa60\keepn\widctlpar\faauto\outlinelevel1\adjustright\rin0\lin0\itap0 \b\i\fs24\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\fs20 Preparing the repository
\par }\pard\plain \ql \li0\ri0\widctlpar\faauto\adjustright\rin0\lin0\itap0 \fs24\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\fs20 In the example in the previous subsection, the resources are stored into the }{\f2\fs20 /home/apache/davdirs/gstein}{
\fs20 directory. It is important to make sure that the web server process can read and }{\b\fs20 write}{\fs20 to that directory.
\par
\par For example, if the webserver runs as user \'93nobody\'94 and group \'93www\'94, then the directory must allow reading and writing by that user and/or group. For example:
\par
\par }{\f2\fs20 % ls -la /home/apache/davdirs/gstein
\par }\pard\plain \s16\ql \li0\ri0\widctlpar\faauto\adjustright\rin0\lin0\itap0 \fs24\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\f2\fs20 total 3
\par }\pard\plain \ql \li0\ri0\widctlpar\faauto\adjustright\rin0\lin0\itap0 \fs24\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\f2\fs20 drwxr-s--- 3 nobody www 1024 Jun 25 14:32 .
\par drwxr-s--- 3 nobody www 1024 Jun 28 17:26 ..
\par -rw-r--r-- 1 nobody www 424 Jun 26 16:36 index.html
\par drwxr-s--- 4 nobody www 1024 Jun 26 13:05 specs
\par }{\fs20
\par The repository used by mod_dav is considered }{\i\fs20 private}{\fs20 . Users are not allowed to modify the repository through any means other than WebDAV. This does imply that FTP cannot be used as an alternate access mechanism.
\par }\pard\plain \s2\ql \li0\ri0\sb240\sa60\keepn\widctlpar\faauto\outlinelevel1\adjustright\rin0\lin0\itap0 \b\i\fs24\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\fs20 Enabling locking
\par }\pard\plain \ql \li0\ri0\widctlpar\faauto\adjustright\rin0\lin0\itap0 \fs24\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\fs20 mod_dav requires a lock database for recordi
ng locks on the resources. The database is specified as a filename; for example:
\par
\par }\pard\plain \s16\ql \li0\ri0\widctlpar\faauto\adjustright\rin0\lin0\itap0 \fs24\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\f2\fs20 DAVLockDB /home/apache/var/DAVLockDB
\par }\pard\plain \ql \li0\ri0\widctlpar\faauto\adjustright\rin0\lin0\itap0 \fs24\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\fs20
\par This file will be created at runtime \endash it does not have to exist before using mod_dav. However, this does imply that the web server process\rquote user/group must have write access to the directory containing the file (}{\f2\fs20 /home/apache/var}
{\fs20 in the above example).
\par
\par Note that mod_dav will actually create a pair of files, such as }{\f2\fs20 DAVLockDB.pag}{\fs20 and }{\f2\fs20 DAVLockDB.dir}{\fs20 .
\par }\pard\plain \s2\ql \li0\ri0\sb240\sa60\keepn\widctlpar\faauto\outlinelevel1\adjustright\rin0\lin0\itap0 \b\i\fs24\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\fs20 Tightening security
\par }\pard\plain \ql \li0\ri0\widctlpar\faauto\adjustright\rin0\lin0\itap0 \fs24\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\fs20 There are a few items needed to ensure that a DAV-enabled Apache server remains secure.
\par
\par First, turn off options such as CGI for the DAV directories. Otherwise, it may be possible to place a CGI onto the server and perform an attack through that CGI. CGI, includes, and executable includes can all be turned off with the }{\f2\fs20 Options}{
\fs20 directive. For example:
\par
\par }\pard\plain \s16\ql \li0\ri0\widctlpar\faauto\adjustright\rin0\lin0\itap0 \fs24\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\f2\fs20 Options None
\par }\pard\plain \ql \li0\ri0\widctlpar\faauto\adjustright\rin0\lin0\itap0 \fs24\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\fs20
\par Next, disable the capability for a .htaccess file to override the limitations imposed upon the DAV directory. This restriction is easily performed with:
\par
\par }\pard\plain \s16\ql \li0\ri0\widctlpar\faauto\adjustright\rin0\lin0\itap0 \fs24\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\f2\fs20 AllowOverride None
\par }\pard\plain \ql \li0\ri0\widctlpar\faauto\adjustright\rin0\lin0\itap0 \fs24\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\fs20
\par And lastly, ensure that modifications may only be performed by authenticated users:
\par
\par }{\f2\fs20
\par }\pard \ql \li0\ri0\widctlpar\faauto\adjustright\rin0\lin0\itap0 {\fs20
\par It is interesting to note that we normally want to restrict }{\f2\fs20 PROPFIND}{\fs20 to authenticated users. The reason is that }{\f2\fs20 PROPFIND}{\fs20
can return a listing of all the files within a DAV directory, whether they are normally discoverable through links or not. For example, there may be a PHP include file in a directory that contains a database password. It w
ould be inadvisable to allow a user to discover that file through a }{\f2\fs20 PROPFIND}{\fs20 and then attempt to fetch it.
\par
\par In the future, the server will have finer-grained functionality and the }{\f2\fs20 PROPFIND}{\fs20 would not need to be limited. For example, the server could hide the essential files, but allow a browser to see the \'93appropriate\'94
files. This would allow a browser to use }{\f2\fs20 PROPFIND}{\fs20 to create a nicely formatted index of the resources at a location.
\par }\pard\plain \s20\ql \li0\ri0\widctlpar\faauto\adjustright\rin0\lin0\itap0 \fs24\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\fs20
\par }\pard\plain \s1\ql \li0\ri0\keepn\widctlpar\faauto\outlinelevel0\adjustright\rin0\lin0\itap0 \b\fs28\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {Other Tools and Applications
\par }\pard\plain \ql \li0\ri0\widctlpar\faauto\adjustright\rin0\lin0\itap0 \fs24\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\fs20
\par }\pard\plain \s20\ql \li0\ri0\widctlpar\faauto\adjustright\rin0\lin0\itap0 \fs24\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\fs20 There are a great number of tools, applicati
ons, and servers that are being created or DAV-enabled. Most of these can be found via the Projects page at webdav.org}{\cs21\fs20\super \chftn {\footnote\ftnalt \pard\plain \s20\ql \li0\ri0\widctlpar\faauto\adjustright\rin0\lin0\itap0
\fs24\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\cs21\fs20\super \chftn }{\fs20 }{\field{\*\fldinst {\fs20 HYPERLINK http://www.webdav.org/projects/ }{\fs20 {\*\datafield
00d0c9ea79f9bace118c8200aa004ba90b02000000170000002000000068007400740070003a002f002f007700770077002e007700650062006400610076002e006f00720067002f00700072006f006a0065006300740073002f000000e0c9ea79f9bace118c8200aa004ba90b4000000068007400740070003a002f002f00
7700770077002e007700650062006400610076002e006f00720067002f00700072006f006a0065006300740073002f0000000000000000000000000000}}}{\fldrslt {\cs15\fs20\ul\cf2 http://www.webdav.org/projects/}}}}}{\fs20
, but this section will cover a few of the more significant tools.
\par
\par }\pard\plain \s2\ql \li0\ri0\sb240\sa60\keepn\widctlpar\faauto\outlinelevel1\adjustright\rin0\lin0\itap0 \b\i\fs24\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\fs20 Sitecopy
\par }\pard\plain \s20\ql \li0\ri0\widctlpar\faauto\adjustright\rin0\lin0\itap0 \fs24\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\fs20 Sitecopy}{\cs21\fs20\super \chftn {\footnote\ftnalt \pard\plain
\s20\ql \li0\ri0\widctlpar\faauto\adjustright\rin0\lin0\itap0 \fs24\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\cs21\fs20\super \chftn }{\fs20 }{\field{\*\fldinst {\fs20 HYPERLINK http://www.lyra.org/sitecopy/ }{\fs20 {\*\datafield
00d0c9ea79f9bace118c8200aa004ba90b02000000170000001e00000068007400740070003a002f002f007700770077002e006c007900720061002e006f00720067002f00730069007400650063006f00700079002f000000e0c9ea79f9bace118c8200aa004ba90b3c00000068007400740070003a002f002f0077007700
77002e006c007900720061002e006f00720067002f00730069007400650063006f00700079002f0000000000000000000000000000}}}{\fldrslt {\cs15\fs20\ul\cf2 http://www.lyra.org/sitecopy/}}}}}{\fs20 is an Open Source tool developed by Joe Orton. It
allows an author to create and edit a web site on their local machine. Once the changes are complete, then sitecopy can be used to synchronize the target web server with the local copy \endash
files will be copied up to the server, files will be moved or deleted on the server, etc. Sitecopy uses WebDAV or FTP to perform the synchronization, but the process operates much better through WebDAV. It is significantly faster and is more reliable.
\par }\pard\plain \s2\ql \li0\ri0\sb240\sa60\keepn\widctlpar\faauto\outlinelevel1\adjustright\rin0\lin0\itap0 \b\i\fs24\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\fs20 Cadaver
\par }\pard\plain \s20\ql \li0\ri0\widctlpar\faauto\adjustright\rin0\lin0\itap0 \fs24\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\fs20 Cadaver}{\cs21\fs20\super \chftn {\footnote\ftnalt \pard\plain
\s20\ql \li0\ri0\widctlpar\faauto\adjustright\rin0\lin0\itap0 \fs24\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\cs21\fs20\super \chftn }{\fs20 }{\field{\*\fldinst {\fs20 HYPERLINK http://www.webdav.org/cadaver/ }{\fs20 {\*\datafield
00d0c9ea79f9bace118c8200aa004ba90b02000000170000001f00000068007400740070003a002f002f007700770077002e007700650062006400610076002e006f00720067002f0063006100640061007600650072002f000000e0c9ea79f9bace118c8200aa004ba90b3e00000068007400740070003a002f002f007700
770077002e007700650062006400610076002e006f00720067002f0063006100640061007600650072002f0000000000000000000000000000}}}{\fldrslt {\cs15\fs20\ul\cf2 http://www.webdav.org/cadaver/}}}}}{\fs20 is a very similar to the classic, command-line FTP tool
, but uses the WebDAV protocol to talk to the target server. Files can be moved, copied, and deleted, on the server, by entering commands. Files can also be copied to and from the server, singly or in batch. Listings of directories can be fetched, and cha
nging among directories is supported, both locally and remotely. Various locking operations are provided.
\par
\par Cadaver is actually a very good tool for testing a server\rquote s operation.
\par }\pard\plain \s2\ql \li0\ri0\sb240\sa60\keepn\widctlpar\faauto\outlinelevel1\adjustright\rin0\lin0\itap0 \b\i\fs24\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\fs20 Microsoft Office 2000
\par }\pard\plain \s20\ql \li0\ri0\widctlpar\faauto\adjustright\rin0\lin0\itap0 \fs24\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\fs20 The Microsoft Office product has been DAV-enabled with the \'932000\'94
release. While FrontPage must still converse with a FrontPage-enabled server, the Word, Excel, and PowerPoint applications all support DAV operations. An author may type a URL into the \'93Open\'94 dialog. The file will be locked on the server, fetched,
and made available for editing. When the file is saved, it is saved directly to the web server. When the file is closed, then it is unlocked on the server.
\par
\par This is a very important product in the DAV world, as Microsoft Office enjoys such a broad distribution. Many offices around the world use this product, which means they can all use DAV for interacting with their web server.
\par }\pard\plain \s2\ql \li0\ri0\sb240\sa60\keepn\widctlpar\faauto\outlinelevel1\adjustright\rin0\lin0\itap0 \b\i\fs24\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\fs20 Internet Explorer 5
\par }\pard\plain \s20\ql \li0\ri0\widctlpar\faauto\adjustright\rin0\lin0\itap0 \fs24\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\fs20 Through the \'93Web Folders\'94 add-on package, Internet Explorer 5 can work with a DAV-enabled server. IE5 updates
the Windows Explorer navigation tree to include a new node named \'93Web Folders\'94
. In this section, the user can directly browse a DAV server and use drag-and-drop to move files between the local and remote machines. Many of the standard Windows Explorer idioms work, such as renaming, cut/copy/paste, and deleting files.
\par
\par The only drawback to this add-on package is that it does not have a \'93redirector\'94 which would allow the DAV server to be mapped to a drive letter. This functionality is required for older appl
ications to be able to open/save files on a DAV server. Without a change to the application to use the new DAV APIs in the Windows operating system, older applications can only work with files on a filesystem identified by a drive letter.
\par }\pard\plain \s2\ql \li0\ri0\sb240\sa60\keepn\widctlpar\faauto\outlinelevel1\adjustright\rin0\lin0\itap0 \b\i\fs24\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\fs20 Language APIs
\par }\pard\plain \s20\ql \li0\ri0\widctlpar\faauto\adjustright\rin0\lin0\itap0 \fs24\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\fs20 Var
ious libraries, modules, or APIs exist for communicating with DAV servers. These can be found for the Python, Perl, C/C++, and Java programming languages. The Python API is available at }{\field{\*\fldinst {\fs20
HYPERLINK http://www.lyra.org/greg/python/ }{\fs20 {\*\datafield
00d0c9ea79f9bace118c8200aa004ba90b02000000170000002100000068007400740070003a002f002f007700770077002e006c007900720061002e006f00720067002f0067007200650067002f0070007900740068006f006e002f000000e0c9ea79f9bace118c8200aa004ba90b4200000068007400740070003a002f00
2f007700770077002e006c007900720061002e006f00720067002f0067007200650067002f0070007900740068006f006e002f00000000000000000000}}}{\fldrslt {\cs15\fs20\ul\cf2 http://www.lyra.org/greg/python/}}}{\fs20 , the Perl API is at }{\field{\*\fldinst {\fs20
HYPERLINK http://www.webdav.org/perldav/ }{\fs20 {\*\datafield
00d0c9ea79f9bace118c8200aa004ba90b02000000170000001f00000068007400740070003a002f002f007700770077002e007700650062006400610076002e006f00720067002f007000650072006c006400610076002f000000e0c9ea79f9bace118c8200aa004ba90b3e00000068007400740070003a002f002f007700
770077002e007700650062006400610076002e006f00720067002f007000650072006c006400610076002f00000000000000000000}}}{\fldrslt {\cs15\fs20\ul\cf2 http://www.webdav.org/perldav/}}}{\fs20 , and the C API is at }{\cs15\fs20\ul\cf2 http://www.webdav.org/neon/}{\fs20
. Java APIs are available through the SkunkDAV project at }{\field{\*\fldinst {\fs20 HYPERLINK "http://skunkdav.sourceforge.net/" }{\fs20 {\*\datafield
00d0c9ea79f9bace118c8200aa004ba90b02000000170000002100000068007400740070003a002f002f0073006b0075006e006b006400610076002e0073006f00750072006300650066006f007200670065002e006e00650074002f000000e0c9ea79f9bace118c8200aa004ba90b4200000068007400740070003a002f00
2f0073006b0075006e006b006400610076002e0073006f00750072006300650066006f007200670065002e006e00650074002f000000}}}{\fldrslt {\cs15\fs20\ul\cf2 http://skunkdav.sourceforge.net/}}}{\fs20 and the Jakarta Slide project at }{\field{\*\fldinst {\fs20 HYPERLINK "
http://jakarta.apache.org/slide/" }{\fs20 {\*\datafield
00d0c9ea79f9bace118c8200aa004ba90b02000000170000002100000068007400740070003a002f002f006a0061006b0061007200740061002e006100700061006300680065002e006f00720067002f0073006c006900640065002f000000e0c9ea79f9bace118c8200aa004ba90b4200000068007400740070003a002f00
2f006a0061006b0061007200740061002e006100700061006300680065002e006f00720067002f0073006c006900640065002f000000}}}{\fldrslt {\cs15\fs20\ul\cf2 http://jakarta.apache.org/slide/}}}{\fs20 .
\par
\par With a robust set of APIs available to programmers, we should start seeing a larger interest in WebDAV. More experimentation and development will be possible.
\par
\par }\pard\plain \s1\ql \li0\ri0\keepn\widctlpar\faauto\outlinelevel0\adjustright\rin0\lin0\itap0 \b\fs28\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {Futures
\par }\pard\plain \ql \li0\ri0\widctlpar\faauto\adjustright\rin0\lin0\itap0 \fs24\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\fs20
\par Several new groups of capabilities will be added to WebDAV over the next 12 months: Advanced Collections, Searching, and Access Control.
\par
\par As these specifications stabilize, they will be incorporated into the Apache 2.0 line of mod_dav development.
\par
\par }\pard\plain \s2\ql \li0\ri0\sb240\sa60\keepn\widctlpar\faauto\outlinelevel1\adjustright\rin0\lin0\itap0 \b\i\fs24\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\fs20 Advanced Collections
\par }\pard\plain \ql \li0\ri0\widctlpar\faauto\adjustright\rin0\lin0\itap0 \fs24\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\fs20 The Advanced Collections functionality deals with three topics: creating bindings, or links,
between resources; creating redirects from an (obsolete) resource location to another; and being able to specify particular orderings of the resources when returned in a }{\f2\fs20 PROPFIND}{\fs20 . The first two items had a \'93last call\'94
at the beginning of 2000, but a large
amount of feedback has required a reissue of the drafts. The Working Group has been mostly quiet on the subject, although the bindings specification has picked up a bit of steam recently. An expected date for the reissue is unknown. In addition, the thir
d item (specifying orderings) has been quiet for a rather long time.
\par }\pard\plain \s2\ql \li0\ri0\sb240\sa60\keepn\widctlpar\faauto\outlinelevel1\adjustright\rin0\lin0\itap0 \b\i\fs24\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\fs20 Searching
\par }\pard\plain \ql \li0\ri0\widctlpar\faauto\adjustright\rin0\lin0\itap0 \fs24\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\fs20
This functionality provides for searching for resources on a DAV server that match a specific set of conditions. For example, \'93all resources authored by Joe Bob\'94 or \'93all resources containing the word \lquote enterprise\rquote .\'94
The searching specifications are reasonably stable and might move into a last call in late 2002, then becoming an RFC sometime in 2003. A mod_dav backend named Catacomb stores all of the content and properties in a SQL
database, which allows for effective querying capabilities. Catacomb implements the draft form of the searching specification.
\par }\pard\plain \s2\ql \li0\ri0\sb240\sa60\keepn\widctlpar\faauto\outlinelevel1\adjustright\rin0\lin0\itap0 \b\i\fs24\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\fs20 Access Control
\par }\pard\plain \ql \li0\ri0\widctlpar\faauto\adjustright\rin0\lin0\itap0 \fs24\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\fs20 The Access Control functionality is not about }{\i\fs20 how}{\fs20
to do access control (e.g. NT ACLs, AFS ACLs, *nix permissions), but how to remotely }{\i\fs20 manage}{\fs20
the access control imposed by the DAV server. Through the WebDAV Access Control protocols, a remote user will be able to apply, change, and remove access restrictions on server resources. A working group was formed and issued se
veral drafts, eventually sending a draft to the RFC Editor in the summer of 2002. An RFC for access control may be issued in late 2002.
\par }\pard\plain \s2\ql \li0\ri0\sb240\sa60\keepn\widctlpar\faauto\outlinelevel1\adjustright\rin0\lin0\itap0 \b\i\fs24\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\fs20 Versioning
\par }\pard\plain \ql \li0\ri0\widctlpar\faauto\adjustright\rin0\lin0\itap0 \fs24\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\fs20 Versioning features were conceived very early in the design and requirements, but were deferred so they would
not hold up the base protocol definition. The specification deals with different levels of conformance and capability, from simplistic versioning to complete configuration management. The working group completed its specification, resulting in RFC 3253
in early 2002.
\par
\par The Subversion server (at }{\field{\*\fldinst {\fs20 HYPERLINK http://subversion.tigris.org/ }{\fs20 {\*\datafield
00d0c9ea79f9bace118c8200aa004ba90b02000000170000001e00000068007400740070003a002f002f00730075006200760065007200730069006f006e002e007400690067007200690073002e006f00720067002f000000e0c9ea79f9bace118c8200aa004ba90b3c00000068007400740070003a002f002f0073007500
6200760065007200730069006f006e002e007400690067007200690073002e006f00720067002f000000000000}}}{\fldrslt {\cs15\fs20\ul\cf2 http://subversion.tigris.org/}}}{\fs20
) is a development project to create an Open Source versioning server using WebDAV Versioning for its network protocol.
\par
\par }\pard\plain \s1\ql \li0\ri0\keepn\widctlpar\faauto\outlinelevel0\adjustright\rin0\lin0\itap0 \b\fs28\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {Appendix
\par }\pard\plain \ql \li0\ri0\widctlpar\faauto\adjustright\rin0\lin0\itap0 \fs24\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\fs20
\par A \'93collection\'94 is a collection, or a group, of resources. In URL namespace terms, if the URL /a/b/c is given, then /a and /a/b are collections. c may or may not be a collection in this example. Note that collections are considered to be
resources, too, so that collections can contain other collections.
\par
\par A \'93member resource\'94 is the name given to a \'93leaf\'94 resource. Basically, member resources are files or documents on the web server.
\par
\par A \'93resource\'94 refers to either a collection or a member resource.
\par
\par This fancy naming is used for precision. In addition, \'93collection\'94 is used instead of \'93directory\'94 because the server might actually be using a database rather than a filesystem for storing the resources. The same logic applies to the use of
\'93resource\'94 and \'93member resource.\'94
\par
\par }}