You are previewing WebDAV: Next-Generation Collaborative Web Authoring.
O'Reilly logo
WebDAV: Next-Generation Collaborative Web Authoring

Book Description

WebDAV: Next-Generation Collaborative Web Authoring is the complete guide to Web-based Distributed Authoring and Versioning (WebDAV), the IETF standard for Web authoring and wide area collaboration. Experienced implementer Lisa Dusseault covers WebDAV from bits on the wire up to custom application implementation, demonstrating with extensive examples and traces from real clients and servers. Coverage includes: practical rules for building WebDAV document management systems; step-by-step, Internet Explorer compatible sample applications; and the latest WebDAV tools. For application designers, software engineers, and information managers.

Table of Contents

  1. Copyright
  2. Prentice Hall PTR Series in Computer Networking and Distributed Systems
  3. About Prentice Hall Professional Technical Reference
  4. Preface
    1. Readers
    2. Organization of the Book
      1. Introductory Material
      2. How WebDAV Works
      3. WebDAV Extensions
      4. Software and Custom Applications
      5. Reference Appendixes
      6. Typographical Conventions
      7. Icons Used
      8. References
    3. Acknowledgments
  5. 1. Introduction
    1. 1.1. What Is Authoring?
      1. 1.1.1. The Bad Old Days
      2. 1.1.2. Usable but Proprietary Software
      3. 1.1.3. Web Authoring via Web Forms
      4. 1.1.4. Multiple Stages Multiply Errors
    2. 1.2. Third-Generation Web Authoring
    3. 1.3. WebDAV History
      1. 1.3.1. The WebDAV Working Group
      2. 1.3.2. Suggested Requirements
      3. 1.3.3. W3C Pressure
      4. 1.3.4. Corporate Pressure
      5. 1.3.5. The Final Draft
      6. 1.3.6. Today
    4. 1.4. Requirements and Scenarios
    5. 1.5. Extended Example, Concepts, and Terminology
      1. 1.5.1. Distributed Web Authoring
      2. 1.5.2. Simple Publishing Process
      3. 1.5.3. Custom Application Example
    6. 1.6. What WebDAV Is and Is Not
      1. WebDAV Is HTTP: True
      2. WebDAV Is an API: False
      3. WebDAV Is a Document Management System: False
      4. WebDAV Is a Server-to-Server Protocol: False
      5. WebDAV Is a Network File System for the Internet: True
      6. WebDAV Is an Appropriate Successor to FTP: True
      7. WebDAV Is a Microsoft Technology: False
      8. WebDAV Is a Standard: True
      9. WebDAV Is a Web Service: Maybe
    7. 1.7. Roles for WebDAV
      1. CM Interoperability
      2. Common-Denominator Information Retrieval
      3. Networked File System Access
      4. Source Control Systems
    8. 1.8. Summary
  6. 2. History of Web and Collaborative Authoring
    1. 2.1. A Brief History of Web Authoring
      1. 2.1.1. HTTP Editing
      2. 2.1.2. Editing via Remote Login
      3. 2.1.3. Editing and Copying
      4. 2.1.4. HTML Editing Tools
    2. 2.2. Network-Enabled Web Authoring Tools
      1. 2.2.1. Networking Changes
      2. 2.2.2. Growth in Team Sizes
      3. 2.2.3. Early Networked Tools
      4. 2.2.4. Connected, But Not Interoperable
    3. 2.3. The Standards Revolution in Web Authoring
      1. 2.3.1. FrontPage Server Extensions
      2. 2.3.2. AOLPress
      3. 2.3.3. Netscape Extensions
      4. 2.3.4. Amaya/Jigsaw
    4. 2.4. HTTP, Pre-WebDAV
      1. 2.4.1. Obvious Missing Features
        1. How to Create a Collection
        2. Copy Operation
        3. Move and Rename
        4. Standardized Content Listings
      2. 2.4.2. ETags and the Lost Update Problem
    5. 2.5. The File Transfer Protocol
      1. 2.5.1. Missing Functionality
      2. 2.5.2. Poor Navigation
      3. 2.5.3. Some Performance Concerns
      4. 2.5.4. Lessons Learned
    6. 2.6. WebDAV for Sharing Documents
      1. 2.6.1. Networked File Systems
        1. NFS
        2. SMB and Samba
        3. The Andrew File System
      2. 2.6.2. Collaborative Authoring via Email
      3. 2.6.3. Email Attachment Semantics
        1. Copy Proliferation
        2. Visibility of Changes
        3. Retrieval on Demand
    7. 2.7. Summary
  7. 3. HTTP Mechanics
    1. 3.1. URLs
      1. 3.1.1. Relative URLs
      2. 3.1.2. Links
      3. 3.1.3. URL Escaping
      4. 3.1.4. Requests to Directories
    2. 3.2. Message Structure
      1. 3.2.1. HTTP Requests
      2. 3.2.2. Header Syntax
      3. 3.2.3. Required Request Headers
      4. 3.2.4. HTTP Responses
      5. 3.2.5. Error Responses
      6. 3.2.6. Status Code Categories
      7. 3.2.7. Common Status Codes
      8. 3.2.8. Message Length
        1. Content-Length
        2. Responses Where Body Must Be Empty
        3. Transfer-Encoding
        4. Media Type Multipart/Byteranges
        5. Closing Connection
    3. 3.3. HTTP Methods
      1. 3.3.1. GET
      2. 3.3.2. GET with File System Directories
      3. 3.3.3. PUT
      4. 3.3.4. DELETE
      5. 3.3.5. POST
      6. 3.3.6. HEAD
      7. 3.3.7. OPTIONS
      8. 3.3.8. OPTIONS *
      9. 3.3.9. TRACE
      10. 3.3.10. CONNECT
    4. 3.4. HTTP ETags
    5. 3.5. Beyond the Request/Response Model
      1. 3.5.1. Keeping Connections Alive
      2. 3.5.2. Pipelining
      3. 3.5.3. Predicting Success for Lengthy Requests
    6. 3.6. HTTP Security
      1. User Identification
      2. Server Identification
      3. Confidentiality
      4. 3.6.1. Basic Authentication
      5. 3.6.2. Digest Authentication
      6. 3.6.3. Transport Security
    7. 3.7. HTTP Headers
      1. 3.7.1. Accept-Ranges Header
      2. 3.7.2. Allow Header
      3. 3.7.3. Authorization Header
      4. 3.7.4. Accept-* Headers
      5. 3.7.5. Content-* Headers
      6. 3.7.6. Conditional Headers
      7. 3.7.7. Connection Header
      8. 3.7.8. User-Agent Header
      9. 3.7.9. Expect Header
      10. 3.7.10. Cache Control Headers
      11. 3.7.11. Date
      12. 3.7.12. Range
      13. 3.7.13. Location
      14. 3.7.14. Server
      15. 3.7.15. Upgrade
      16. 3.7.16. WWW-Authenticate
    8. 3.8. Summary
  8. 4. Data Model
    1. 4.1. Basic Components
    2. 4.2. URLs and WebDAV Resources
      1. 4.2.1. Root URL
      2. 4.2.2. Path Hierarchy
      3. 4.2.3. URL Uniqueness
    3. 4.3. Using the Hierarchy
      1. Depth 0
      2. Depth Infinity
      3. Depth 1
    4. 4.4. Metadata
      1. Property Values
      2. 4.4.1. Live and Dead Properties
      3. 4.4.2. Required Live Properties
      4. 4.4.3. MOVE, COPY, and Properties
      5. 4.4.4. Property Names
      6. 4.4.5. Property Namespaces
      7. 4.4.6. Property Values
      8. 4.4.7. Internationalization
    5. 4.5. Locks
      1. 4.5.1. Locks and the Lost Update Problem
      2. 4.5.2. Lock Permissions
      3. 4.5.3. Locks and Read Operations
      4. 4.5.4. Locks vs. Access Control
      5. 4.5.5. Lock Owners
      6. 4.5.6. Lock Timeout and Lock Refresh
      7. 4.5.7. Locks Are Not Transactions
      8. 4.5.8. Removing Locks
      9. 4.5.9. Depth Locks: Locking Collections
      10. 4.5.10. Shared Locks
    6. 4.6. Summary
  9. 5. WebDAV Modifications to HTTP
    1. 5.1. WebDAV URLs and Feature Discovery
      1. 5.1.1. Discovering WebDAV Support
      2. 5.1.2. URLs to Collections
      3. 5.1.3. Deconstructing WebDAV URLs
      4. 5.1.4. Limits to HTTP URL Decomposition
      5. 5.1.5. Finding the Repository Root with OPTIONS
    2. 5.2. New Response Status Codes
    3. 5.3. GET
      1. 5.3.1. Getting Collections
      2. 5.3.2. Resource Integrity
      3. 5.3.3. How to Retrieve Source Code
    4. 5.4. PUT
      1. 5.4.1. Partial PUT
      2. 5.4.2. Avoiding Lost Updates
      3. 5.4.3. Creating New Resources Safely
      4. 5.4.4. Generating Unique URLs
      5. 5.4.5. Pipelining
      6. 5.4.6. PUT and Collections
    5. 5.5. DELETE
      1. 5.5.1. Multi-Status Response
        1. URLs in Multi-Status
        2. Successes in Multi-Status
        3. Permissions Failures in Multi-Status
      2. 5.5.2. Handling XML Bodies
        1. Formatting of href Elements
        2. Formatting of status Elements
        3. Don't Forget Prefixes
        4. Handling Extensions
      3. 5.5.3. Atomicity
      4. 5.5.4. Destroy Data or Move to Trash?
      5. 5.5.5. Operations on Addresses or Resources
    6. 5.6. Summary
  10. 6. WebDAV Hierarchy Operations
    1. 6.1. Why WebDAV Defines New Methods
    2. 6.2. MKCOL: Create Collection
      1. 6.2.1. MKCOL and the Allow Header
      2. 6.2.2. Status Codes for MKCOL
    3. 6.3. MOVE
      1. 6.3.1. Destination Header
      2. 6.3.2. Depth Header
      3. 6.3.3. Depth noroot Extension
      4. 6.3.4. The Overwrite Header
      5. 6.3.5. Status Codes for MOVE
      6. 6.3.6. 102 Processing Response
      7. 6.3.7. The Multi-Status Response
      8. 6.3.8. Specifying Property Value Behavior
    4. 6.4. COPY
      1. 6.4.1. MOVE = COPY + DELETE?
      2. 6.4.2. Depth and COPY
      3. 6.4.3. Status Codes for COPY
    5. 6.5. Summary
  11. 7. Property Operations
    1. 7.0.1. HTML and HTTP Metadata
    2. 7.1. Property Representation
      1. 7.1.1. Basic Property Value Example
      2. 7.1.2. Property Name Only
      3. 7.1.3. Empty Property Values
      4. 7.1.4. Making Property Values Safe
        1. Encapsulation
        2. Character Escaping
      5. 7.1.5. Storing Property Value Text
      6. 7.1.6. Whitespace
      7. 7.1.7. Internationalization
      8. 7.1.8. XML-Valued Properties
      9. 7.1.9. Date and Time Properties
        1. Timestamp Interoperability Challenges
    3. 7.2. PROPFIND
      1. 7.2.1. PROPFIND Request
      2. 7.2.2. PROPFIND Response
      3. 7.2.3. Reporting Errors in PROPFIND Responses
      4. 7.2.4. Finding the Names of Properties
      5. 7.2.5. AllProp Is Not What It Seems
      6. 7.2.6. Large Response Bodies
    4. 7.3. PROPPATCH
      1. 7.3.1. PROPPATCH Request
      2. 7.3.2. Implementing Atomic Requests
      3. 7.3.3. PROPPATCH Response
      4. 7.3.4. PROPPATCH Response with Failures
      5. 7.3.5. PROPPATCH to Nonexistent Resource
    5. 7.4. How Properties Are Stored
    6. 7.5. Required Properties
      1. 7.5.1. creationdate
      2. 7.5.2. displayname
      3. 7.5.3. getcontentlanguage
      4. 7.5.4. getcontentlength
      5. 7.5.5. getcontenttype
      6. 7.5.6. getetag
      7. 7.5.7. getlastmodified
      8. 7.5.8. resourcetype
      9. 7.5.9. source
    7. 7.6. Summary
  12. 8. Lock Operations
    1. 8.1. Lock Tokens
    2. 8.2. LOCK Method
      1. 8.2.1. Creating a Lock
      2. 8.2.2. Locking a Collection
        1. Depth Infinity
        2. Depth 0
      3. 8.2.3. Creating Lock-Null Resources
      4. 8.2.4. Refreshing a Lock
      5. 8.2.5. Lock Timeout
      6. 8.2.6. Use of the Lock Owner Element
      7. 8.2.7. Special Status Codes for LOCK
    3. 8.3. UNLOCK Method
      1. 8.3.1. Removing Another User's Lock
      2. 8.3.2. Special Response Codes for UNLOCK
    4. 8.4. Using Locked Resources
      1. 8.4.1. Overwriting a Single Locked Resource
      2. 8.4.2. If Header Features
      3. 8.4.3. Untagged Token Lists
      4. 8.4.4. Untagged Token List and OR
      5. 8.4.5. Untagged Lists on Requests Covering Multiple Resources
      6. 8.4.6. Tagged Token Lists
      7. 8.4.7. If and Not
      8. 8.4.8. No-tag-list Productions
      9. 8.4.9. Tagged List Productions
      10. 8.4.10. Matching Tokens to Indirectly Locked Resources
      11. 8.4.11. Matching Tokens to Unmapped URLs
      12. 8.4.12. Adding a Resource to a Locked Collection
      13. 8.4.13. Comments on the If Header
        1. Confuses Two Purposes
        2. Complete Boolean Logic Not Possible
        3. Ignored Clauses
        4. Advanced Syntax Is Not Used Much
        5. Header May Be Too Long to Be Transmitted Correctly
    5. 8.5. Lock-Related Properties
      1. 8.5.1. lockdiscovery
      2. 8.5.2. supportedlock
    6. 8.6. Client Responsibilities
      1. 8.6.1. Why Client Software Must Store Lock Tokens
      2. 8.6.2. Renew Often, Renew Early, Unlock Promptly
      3. 8.6.3. Verifying Lock Persistence
      4. 8.6.4. Managing Deadlocks
      5. 8.6.5. Handling Lock-Null Resources
      6. 8.6.6. Using Shared Locks
        1. Advisory Locks
        2. Read Locks
        3. Sharing Locks Among Processes
        4. Custom Locking
    7. 8.7. Lock Interactions
      1. 8.7.1. Adding Resources
      2. 8.7.2. Modifying Locked Resources
      3. 8.7.3. Deleting
      4. 8.7.4. MOVE and Locks
    8. 8.8. Problems with Lock-Null Resources
      1. 8.8.1. Poor Implementation Support
      2. 8.8.2. Lock-Null Resources Behave Poorly in Name Collisions
      3. 8.8.3. Detecting Lock-Null Resource Creation
      4. 8.8.4. Lock-Null Resources Disappear in Collection Moves
      5. 8.8.5. Lock-Null Resources May Not Be Destination of a COPY
      6. 8.8.6. Solving Too Many Problems
        1. Overwriting Collections
        2. Reserving New Collection for Property Updates
        3. Cleaning Up Lock-Null Resources May Be Difficult
      7. 8.8.7. A Simpler Approach: Locked Empty Resources
    9. 8.9. Summary
  13. 9. Putting the Pieces Together
    1. 9.1. Scenario Walk-Through
    2. 9.2. Open Web Folder
      1. 9.2.1. Unauthenticated Request
        1. Interesting Standard Headers
        2. Nonstandard Translate Header
      2. 9.2.2. Authentication Challenge
        1. Authentication Challenge
        2. Error Response Body
      3. 9.2.3. Authenticated PROPFIND
      4. 9.2.4. Collection Properties Response
        1. Allprop Response
        2. Datatype Attribute and Namespace
        3. Cookies
      5. 9.2.5. Directory Contents Listing
        1. Depth
        2. Cookie
        3. Nonstandard Properties
      6. 9.2.6. Directory Contents Response
      7. 9.2.7. Navigation
    3. 9.3. Create a Folder
      1. 9.3.1. MKCOL
      2. 9.3.2. New Folder Properties
        1. String Escaping
      3. 9.3.3. Collection Name Change
    4. 9.4. Create a New File
      1. 9.4.1. LOCK Creates New Resource
        1. Owner
        2. Missing Content-Type Header
        3. User-Agent
        4. Two-Minute Lock
      2. 9.4.2. Creation of Lock-Null Resource
        1. 201. Created
        2. Lock Token Twice
        3. Timeout
      3. 9.4.3. First Upload Request
        1. Missing Content-Type
      4. 9.4.4. Server Saves File
      5. 9.4.5. Confirm File Upload
    5. 9.5. Editing a File
      1. 9.5.1. Automatic Lock Refresh
      2. 9.5.2. User Action to Save File
    6. 9.6. Close the File
      1. 9.6.1. UNLOCK
    7. 9.7. Copy to Publishing Directory
      1. 9.7.1. COPY File to Publish Location
      2. 9.7.2. Delete Working Copy
        1. Destroy Header
    8. 9.8. Publish Document
      1. 9.8.1. Browser Request for WebDAV Resource
      2. 9.8.2. Setting Publish Property
      3. 9.8.3. OPTIONS
        1. Keep-Alive
        2. Connection: TE, Keep-Alive
        3. TE: Trailers
      4. 9.8.4. OPTIONS Response
        1. DAV Header
        2. DASL Header
        3. MS-Author-Via Header
      5. 9.8.5. Setting a Property
        1. No Cookies
        2. No Prefixes
        3. Digest Details
      6. 9.8.6. PROPPATCH Response
    9. 9.9. Summary
  14. 10. WebDAV Products and Tools
    1. 10.1. Client Software
      1. Stand-Alone WebDAV Explorer
      2. Mounted Drive Client
      3. Authoring Applications Using WebDAV for Primary Storage
      4. Authoring Applications Using WebDAV to Publish
      5. Applications Using WebDAV to Store Custom Shared Data
      6. Site Management Tools
      7. 10.1.1. Microsoft Web Folders and Office
        1. Stand-Alone Web Folders
        2. Office 2000
        3. Other Applications
        4. How to Get Web Folders
        5. Web Folders Limitations
        6. Server Support for Web Folders
      8. 10.1.2. Windows XP WebDAV Redirector
      9. 10.1.3. Mac OS X WebDAV-FS
      10. 10.1.4. Adobe Authoring, Graphics, and Web Design Products
      11. 10.1.5. Xythos WebFile Client
      12. 10.1.6. kStore Explorer
      13. 10.1.7. Goliath for Macintosh
      14. 10.1.8. Dreamweaver 4
      15. 10.1.9. WebDrive
      16. 10.1.10. XML Spy
      17. 10.1.11. DAV Explorer
      18. 10.1.12. Davfs
      19. 10.1.13. Cadaver
      20. 10.1.14. DAVe
    2. 10.2. Server Software
      1. 10.2.1. Microsoft Internet Information Server
      2. 10.2.2. Apache and mod_dav
      3. 10.2.3. Microsoft Exchange 2000
        1. New Properties and Namespaces
        2. PUT Can Send Email
        3. POST Can Create Resources
        4. PROPPATCH Can Create Resources
        5. Data Types
        6. Subscription/Notification Support
        7. Ranged Row Requests
        8. SQL Search
        9. MKCOL Request Body
        10. Access Control
      4. 10.2.4. Xythos WebFile Server
      5. 10.2.5. DAV4J
      6. 10.2.6. Tamino WebDAV Server
      7. 10.2.7. Microsoft SharePoint Portal Server
      8. 10.2.8. Other Known Servers
    3. 10.3. Services
      1. 10.3.1. Apple iDisk
      2. 10.3.2. IBackup
      3. 10.3.3. My Docs Online
    4. 10.4. Compliance Tests
      1. 10.4.1. Litmus
    5. 10.5. Summary
  15. 11. Versioning
    1. 11.1. Introduction to Versioning
      1. 11.1.1. Simple Problems
      2. 11.1.2. Versioning and Backup Functionality
      3. 11.1.3. Basic Versioning Components
      4. 11.1.4. DeltaV Data Model
    2. 11.2. Core Versioning
      1. 11.2.1. Version-Controlled Resources
      2. 11.2.2. Versions
      3. 11.2.3. Core Versioning Model
      4. 11.2.4. Accessing Versions
      5. 11.2.5. Viewing All Versions
      6. 11.2.6. Turning on Versioning
    3. 11.3. Editing Version-Controlled Resources
      1. 11.3.1. CHECKOUT and CHECKIN
      2. 11.3.2. CHECKOUT and Checked-Out VCRs
      3. 11.3.3. Editing a Checked-Out Resource
      4. 11.3.4. CHECKIN and Checked-In VCRs
      5. 11.3.5. UNCHECKOUT
    4. 11.4. Labels
      1. 11.4.1. Managing Many Versions with Labeling
      2. 11.4.2. Modifying Label Values
      3. 11.4.3. The Label Header
    5. 11.5. Using Existing WebDAV Methods with Versioning
      1. 11.5.1. DELETE
      2. 11.5.2. Version History Resources
      3. 11.5.3. COPY
      4. 11.5.4. MOVE
    6. 11.6. Using Non-DeltaV Clients
      1. 11.6.1. Read Operations and UPDATE
      2. 11.6.2. Auto-Version: Enabling Write Operations
      3. 11.6.3. Locking
      4. 11.6.4. “Safe Save” Problems with Existing Clients
    7. 11.7. Version Trees
      1. 11.7.1. Forking
      2. 11.7.2. Creating Forks
        1. Using UPDATE
        2. Editing Predecessor-Set
      3. 11.7.3. Avoiding Forks
      4. 11.7.4. Simple Merge
      5. 11.7.5. Are Forks Permitted?
    8. 11.8. Multiple Checkouts with Working Resources
      1. 11.8.1. Creating Working Resources
      2. 11.8.2. Editing a Working Resource
      3. 11.8.3. CHECKIN a Working Resource
      4. 11.8.4. Working Resources Create Forks
      5. 11.8.5. Checking Out Other Versions
    9. 11.9. Checkout Determinism
      1. 11.9.1. How to Tell If a Checkout Exists
      2. 11.9.2. How to Tell If a Resource Can Be Checked Out
    10. 11.10. DeltaV Special Mechanisms
      1. 11.10.1. REPORT Method
      2. 11.10.2. Error Reporting
      3. 11.10.3. Feature Discovery by OPTIONS Body
      4. 11.10.4. Feature Discovery Properties
      5. 11.10.5. Live Property Requirements
        1. Configuration Live Properties
        2. Supporting Unsupported Live Properties
        3. Allprop Semantics Changed
    11. 11.11. Summary
  16. 12. Multifile Versioning
    1. 12.1. Workspaces
      1. 12.1.1. Workspace Model
      2. 12.1.2. Finding or Creating a Workspace
      3. 12.1.3. Linking Resources into Workspaces
      4. 12.1.4. Working in Workspaces
    2. 12.2. Change Sets
      1. 12.2.1. Checking Out to an Activity
      2. 12.2.2. Creating Activities
    3. 12.3. Branches
      1. 12.3.1. Switching Activities
      2. 12.3.2. Combining Atomic Checkin with Named Branches
    4. 12.4. MERGE
      1. 12.4.1. Merge Rules
      2. 12.4.2. Client-Managed Merge
      3. 12.4.3. Server-Managed Merge
      4. 12.4.4. How Content Is Combined in Merges
      5. 12.4.5. Merging, Activities, and Workspaces
    5. 12.5. History of Multiple Resources
      1. 12.5.1. Baselines
      2. 12.5.2. Configurations and Subconfigurations
      3. 12.5.3. Collection Membership Versioning
      4. 12.5.4. Working Collections
    6. 12.6. Other Feature Interactions
    7. 12.7. DeltaV Features and Packages
      1. 12.7.1. Basic Features
      2. 12.7.2. Advanced Features
      3. 12.7.3. Core Versioning Package
      4. 12.7.4. Client Workspace Package
      5. 12.7.5. Server Workspace Package
      6. 12.7.6. Feature Dependencies
    8. 12.8. Summary
  17. 13. Access Control
    1. 13.0.1. Prior Approaches
    2. 13.1. What Is Access Control?
      1. 13.1.1. Access Control Model
    3. 13.2. Getting Access Control Information
      1. 13.2.1. Principal URLs
      2. 13.2.2. Identifying a Resource Owner
      3. 13.2.3. Getting ACLs
      4. 13.2.4. Privileges Vary
      5. 13.2.5. Standard Privileges
      6. 13.2.6. Privilege Composition
      7. 13.2.7. Finding Current User's Permissions
    4. 13.3. Setting Access Control Information
      1. 13.3.1. Setting ACL
      2. 13.3.2. Semantic Complications
    5. 13.4. Principals
      1. 13.4.1. Finding Principal Information
      2. 13.4.2. Finding Group Membership
      3. 13.4.3. Shortcut for Displaying Principals from ACLs
      4. 13.4.4. Who Am I?
      5. 13.4.5. Browsing Principals
      6. 13.4.6. Searching Principals
    6. 13.5. Standardization Challenges
      1. 13.5.1. User Databases
      2. 13.5.2. Multiple Access Protocols
    7. 13.6. Summary
  18. 14. Custom WebDAV Applications
    1. 14.1. Online Photo Album
      1. 14.1.1. Application Overview
      2. 14.1.2. Existing Architecture
      3. 14.1.3. WebDAV for Photo Authoring
      4. 14.1.4. Gateway Model
      5. 14.1.5. Lessons Learned
        1. A Web-Based Service
        2. Authoring Applications Natively Supported
        3. Flexible Metadata Support
        4. Document-Oriented Storage
        5. Native Support for Document Management
    2. 14.2. Email and Calendaring
      1. 14.2.1. Web and Internet Standards in Exchange
      2. 14.2.2. “Webifying” Exchange 2000
      3. 14.2.3. OWA
      4. 14.2.4. How OWA Uses WebDAV
      5. 14.2.5. Hotmail and Web Infrastructure
      6. 14.2.6. Outlook Express
      7. 14.2.7. Scalability
      8. 14.2.8. Integration Challenges
      9. 14.2.9. Lessons Learned
        1. Web Addresses
        2. Lower Application Development Costs
        3. Web Infrastructure
        4. Document-Oriented Storage
        5. Flexible Metadata Support
        6. XML Stylesheets Work with WebDAV
        7. Support for Remote Document Management
        8. Support for Multiple Authors
        9. Stateless vs. Connection-Oriented
    3. 14.3. Presence and Instant Messaging
      1. 14.3.1. Instant-Messaging Requirements
        1. Sending Instant Messages
        2. File Sharing
        3. Multiple Clients
      2. 14.3.2. Presence
        1. Sensitivity of Presence Information
        2. Buddy Lists
      3. 14.3.3. Could WebDAV Do Instant Messaging?
      4. 14.3.4. Appropriate Use of WebDAV
        1. Storing Buddy Lists and Access Control
        2. File Sharing
        3. Storing Offline Messages
      5. 14.3.5. Lessons Learned
        1. Only Clients Make Requests in WebDAV
        2. WebDAV Can Be a Component of a Solution
        3. The Storage Model Is a Necessary Feature of WebDAV
        4. Compliance Means All Methods
    4. 14.4. Pacific National Laboratories
      1. 14.4.1. Overview
      2. 14.4.2. Example Problem-Solving Environment
      3. 14.4.3. Solution Requirements
      4. 14.4.4. Solution Choices
      5. 14.4.5. Mapping Database Schemas to WebDAV Storage
      6. 14.4.6. Results
      7. 14.4.7. Lessons Learned
        1. Higher Performance
        2. Greater Disk Space Required
        3. Lower Cost Than OODB
        4. Support for Web Access
        5. WebDAV Is Easy to Work With
        6. Security Was Maintained
        7. No Transaction Support
        8. Continual Improvement Possible
    5. 14.5. Other Application Ideas
    6. 14.6. Summary
  19. 15. Designing WebDAV Applications
    1. 15.1. Metadata Usage
      1. 15.1.1. Choosing a Namespace
      2. 15.1.2. Property Names
      3. 15.1.3. Property Values
        1. Complex Values
      4. 15.1.4. Property Location
      5. 15.1.5. Group Resources in Collections
      6. 15.1.6. Use WebDAV for Global Information
      7. 15.1.7. Handling Multiple Document Schemas
    2. 15.2. Performance Considerations
      1. 15.2.1. Minimizing Unnecessary Requests
      2. 15.2.2. Keeping Connections Alive
      3. 15.2.3. Multiple Connections
      4. 15.2.4. Minimizing Server Load
    3. 15.3. Security Considerations
      1. Basic Authentication
      2. Digest Authentication
      3. SSL and TLS
      4. Authorization and Access Control
    4. 15.4. Technology Considerations
      1. 15.4.1. Choice of Framework Software
      2. 15.4.2. Choice of XML Parser
      3. 15.4.3. Libraries and APIs
        1. Java
        2. Python
        3. Perl
      4. 15.4.4. XML Stylesheet Language and Transformations
        1. Displaying PROPFIND Results
        2. Transforming Incoming Documents
      5. 15.4.5. XMLHTTP
    5. 15.5. Deployment Considerations
      1. 15.5.1. Migrating Existing Repositories
        1. Migrating Data
        2. Wrapping an Existing Repository
      2. 15.5.2. Synchronizing Sites and Collections
    6. 15.6. Summary
  20. A. Microsoft and Windows Tips
    1. A.1. Supporting Legacy Windows Applications
    2. A.2. Internet Explorer Tips
      1. A.2.1. Open Web Folders with Link in IE
      2. A.2.2. Open Web Folders with Script in IE
      3. A.2.3. XMLHTTP in Web Page Scripts
      4. A.2.4. VBScript and XMLHTTP
      5. A.2.5. JavaScript and XMLHTTP
    3. A.3. Microsoft WebDAV
      1. A.3.1. Microsoft Row Extension to Range Header
      2. A.3.2. Property Name and Namespace Concatenation
      3. A.3.3. SQL SEARCH Syntax
        1. Building SQL Statements
  21. B. HTTP Status Codes
    1. B.1. Informational Status Codes
      1. B.1.1. 100 Continue
      2. B.1.2. 101 Switching Protocols
      3. B.1.3. 102 Processing
    2. B.2. Success Status Codes
      1. B.2.1. 200 OK
      2. B.2.2. 201 Created
      3. B.2.3. 202 Accepted
      4. B.2.4. 203 Non-Authoritative Information
      5. B.2.5. 204 No Content
      6. B.2.6. 205 Reset Content
      7. B.2.7. 206 Partial Content
      8. B.2.8. 207 Multi-Status
    3. B.3. Redirect Status Codes
      1. B.3.1. 300 Multiple Choices
      2. B.3.2. 301 Moved Permanently
      3. B.3.3. 302 Found or 302 Moved Temporarily
      4. B.3.4. 303 See Other
      5. B.3.5. 304 Not Modified
      6. B.3.6. 305 Use Proxy
      7. B.3.7. 306 (Unused)
      8. B.3.8. 307 Temporary Redirect
    4. B.4. Client Failure Status Codes
      1. B.4.1. 400 Bad Request
      2. B.4.2. 401 Unauthorized
      3. B.4.3. 402 Payment Required
      4. B.4.4. 403 Forbidden
      5. B.4.5. 404 Not Found
      6. B.4.6. 405 Method Not Allowed
      7. B.4.7. 406 Not Acceptable
      8. B.4.8. 407 Proxy Authentication Required
      9. B.4.9. 408 Request Time-out
      10. B.4.10. 409 Conflict
      11. B.4.11. 410 Gone
      12. B.4.12. 411 Length Required
      13. B.4.13. 412 Precondition Failed
      14. B.4.14. 413 Request Entity Too Large
      15. B.4.15. 414 Request-URI Too Large
      16. B.4.16. 415 Unsupported Media Type
      17. B.4.17. 416 Requested Range Not Satisfiable
      18. B.4.18. 417 Expectation Failed
      19. B.4.19. 418-421
      20. B.4.20. 422 Unprocessable Entity
      21. B.4.21. 423 Locked
    5. B.5. Server Failure Status Codes
      1. B.5.1. 500 Internal Server Error
      2. B.5.2. 501 Not Implemented
      3. B.5.3. 502 Bad Gateway
      4. B.5.4. 503 Service Unavailable
      5. B.5.5. 504 Gateway Timeout
      6. B.5.6. 505 HTTP Version Not Supported
      7. B.5.7. 507 Insufficient Storage
  22. References
    1. IETF Documents: RFCs
    2. Microsoft Support Articles