Network Working Group | M. Douglass |
Internet-Draft | Spherical Cow Group |
Intended status: Standards Track | April 17, 2016 |
Expires: October 19, 2016 |
DAV Server Information Object
draft-douglass-server-info-03
This specification describes a new XML object that can be retrieved from hosts to discover applications, features and limits for that host or domain.
This Internet-Draft is submitted in full conformance with the provisions of BCP 78 and BCP 79.
Internet-Drafts are working documents of the Internet Engineering Task Force (IETF). Note that other groups may also distribute working documents as Internet-Drafts. The list of current Internet-Drafts is at http://datatracker.ietf.org/drafts/current/.
Internet-Drafts are draft documents valid for a maximum of six months and may be updated, replaced, or obsoleted by other documents at any time. It is inappropriate to use Internet-Drafts as reference material or to cite them other than as "work in progress."
This Internet-Draft will expire on October 19, 2016.
Copyright (c) 2016 IETF Trust and the persons identified as the document authors. All rights reserved.
This document is subject to BCP 78 and the IETF Trust's Legal Provisions Relating to IETF Documents (http://trustee.ietf.org/license-info) in effect on the date of publication of this document. Please review these documents carefully, as they describe your rights and restrictions with respect to this document. Code Components extracted from this document must include Simplified BSD License text as described in Section 4.e of the Trust Legal Provisions and are provided without warranty as described in the Simplified BSD License.
Any given host on a network may support a number of applications. Each will have limits or optional features. The advertising and discovery of applications, features and limits is often through the use of properties and headers. As the number of applications and features grows the amount of data and complexity of the requests grows.
Additionally, headers and properties don't allow for caching mechanisms based on etags. A client has to fetch all the information and compare with its stored copies to determine if a application change has taken place.
This specification defines a new XML document type which can be retrieved from a host and is easily extended to allow the description of complex applications. The schema as described here only handles basic DAV applications. Other specifications will extend this specification to define elements for other DAV based applications.
The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", "SHOULD", "SHOULD NOT", "RECOMMENDED", "MAY", and "OPTIONAL" in this document are to be interpreted as described in [RFC2119].
An application running on one or more hosts at the network application layer and above. The application may provide data storage, manipulation, presentation, communication or other capabilities. The application may use a well defined protocol and is often implemented with a client-server relationship.
A application will usually implement one or more features which may be defined by standard specifications. Applications and features may also be constrained by various limits.
Examples of applications are
A feature is some functionality provided by a application. For example, a DAV based application may provide the versioning feature.
Applications need not support all features that are defined as an optional part of that application. Some features may depend on the authenticated state and/or the authorization of the authenticated principal.
Examples of features are
A host will make the document available through one or more methods. Depending upon the endpoint and method of retrieval the retrieved document may describe one or more applications.
If a document provides information for more than one application it SHOULD contain information allowing clients to obtain information about each individual application only. This allows a client to determine what the actual limits and features are for the specific application.
The document may be retrieved from the server by including the server-info-token header field with a value of "*" any request to the server.
The server MUST respond to such a request by including a LINK header field with a reltype of "server-info", a token parameter with the current token value and the url being the location of the document..
Following that a GET may be executed by the client against that URL, specifying a content type in the ACCEPT header field of "application/server-info+xml".
Clients SHOULD retrieve the document in the context of a session and applications SHOULD ensure the context is appropriate. Values in the returned document may differ depending on who is authenticated so a server SHOULD require authentication before returning server information for an authenticated application.
While server features may not change frequently it may be important for clients to react rapidly when server features or limits change. Polling for server feature changes is undesirable so this specification allows clients to check for such changes during normal operations.
Clients SHOULD include the server-info-token header field with the current stored value of the token from the document in requests to the server
The server MUST add the link header field to the response when the tokens do not match.
The server-info-token header field takes as a value the current value of the token element in the server-info document or the value "*".
This header field may be included in a request at any time a client feels appropriate.
The link header field is defined in [RFC5988]. The target IRI as defined by that specification will be the location of the server information document. The "reltype" parameter will have the value "server-info".
Additionally, there will be a "token" parameter which has a quoted token as the value.
This header field may be included in a response at any time a server feels appropriate.
The link header field MUST be returned in response to:
The link header field SHOULD be returned when a client
If the server returns a link header field as part of the response it is an indication to the client that it SHOULD fetch a new copy of the server information document.
Link: </dav/principals/.server-info>; rel="server-info"; token="7140903ee1b57d0752a7d8da774a398b10de5868"
The following is an example of a link header field - folded to fit on the page
This specification defines a new XML document type "server-info". All XML elements in this specification are in the DAV name space.
<?xml version="1.0" encoding="utf-8"?> <server-info xmlns="DAV"> <token>...</token> <server> <name>...</name> <version>...</version> </server> <features> ... </features> <applications> ... </applications> </server-info>
At the top level of the document is a "server-info" element which encloses a change token, an optional "features" element and an "applications" element
If a "features" element appears inside the "server-info" element then the features apply to all applications.
The optional "server" element appears once and contains a name and version for the server. The values for both those elements is server specific.
The "applications" element appears once and contains 0 or more "application" elements each of which provides information about a application.
NOTE: do the applications have to be on the same host? I think not.
The "application" element contains the name and information about the location of that application and how to obtain a application specific server-info document.
It may also contain a "features" element which lists features implemented by that application.
<applications> <application> <name>caldav</name> <features> <CALDAV:calendar-access /> <CS:sharing> <CS:no-scheduling /> </CS:sharing> </features> </application> </applications>
For example:
The "features" element contains 0 or more elements each specifying a feature supported by that application.
The "features" element may appear within the "server-info" element - in which case it applies to all applications or it may appear inside a "application" element in which case it only applies to that application.
When a single application is specified the features named SHOULD be accessible for the same authentication and authorization level.
A feature is specified by an element defined in this document or by an element defined in the specification for that feature.
WebDAV feature elements correspond to, but are not exactly the same as, the elements returned in the DAV header field.
Some features have no corresponding DAV header field element. This may be because the feature is not available on all resources. The occurrence of a such a feature simply advertises the availability of that feature on some resources.
For an application supporting this specification, the absence of a feature means that this feature is NOT supported on any resource.
<features> <DAV:class-1 /> <DAV:class-2 /> <DAV:access-control /> <CALDAV:calendar-access /> <CALDAV:calendar-availability /> <CALDAV:calendar-auto-schedule /> </features>
For example, a calendar application may return the following which specifies a global set of features:
All elements defined here are in the "DAV" namespace.
<!ELEMENT server-info (token, server-instance-info?, features?, applications?) >
<!ELEMENT token (#PCDATA) >
<!ELEMENT server-instance-info (server-name*, server-version*, server-link, server-contact) > * product name * product version * product bug tracker link (or just link) * system administrator contact ("mailto:", "tel:" an embedded vcard or a link to a vcard?) * operating system info (string like the result of "uname -a" on POSIX systems)
<!ELEMENT name (#PCDATA) >
<!ELEMENT version (#PCDATA) >
<!ELEMENT applications (application*) >
<!ELEMENT application (name, features) >
<!ELEMENT features ANY* >
Here we define the feature elements for features defined in the various DAV related specifications.
Specifications which extend this specification should define additions to this table. In addition, they may define the XML specification for that element.
Namespace | Name | Reference |
---|---|---|
DAV | class-1 | [RFC4918]: section 18.1 |
DAV | class-2 | [RFC4918]: section 18.2 |
DAV | class-3 | [RFC4918]: section 18.3 |
DAV | access-control | [RFC3744]: section 7.2 |
DAV | version-control | [RFC3253]: section 3 |
DAV | extended-mkcol | [RFC5689]: section 3.1 |
DAV | quota | [RFC4331] |
DAV | bind | [RFC5842] |
DAV | search | [RFC5323] |
DAV | sync-collection | [RFC6578] |
DAV | add-member | [RFC5995] |
<!ELEMENT class-1 >
<!ELEMENT class-2 >
<!ELEMENT class-3 >
<!ELEMENT access-control >
<!ELEMENT version-control >
<!ELEMENT extended-mkcol >
<!ELEMENT bind >
<!ELEMENT search >
<!ELEMENT quota >
<!ELEMENT sync-collection >
<!ELEMENT add-member >
Here we define the feature elements for features defined in the various CalDAV related specifications. All of these are under the CalDAV namespace
urn:ietf:params:xml:ns:caldav
Name | Reference |
---|---|
calendar-access | [RFC4791] |
calendar-auto-schedule | [RFC6638] |
calendar-no-timezone | RFC???? |
<!ELEMENT calendar-access >
<!ELEMENT calendar-auto-schedule >
<!ELEMENT calendar-no-timezone >
TBD.
Tag enabling synchronization Document location (section 3) server-info token in DAV header returned as part of OPTIONS response Clients that see that and do not have a server-info document for that application should do a propfind to discover document href. Authenticated v unauth Clients may fetch the si doc in an unauth mode. When they auth they must recheck their token and refetch if appropriate. Caching by intermediaries might be an issue Server info may vary by user-agent.
* product name * product version * product bug tracker link (or just link) * system administrator contact ("mailto:", "tel:" an embedded vcard or a link to a vcard?) * operating system info (string like the result of "uname -a" on POSIX systems)
Add something about rscale - calendar-rscale element
TBD.
Something about not sending server name + version. Opaque version code.
The link relation type "server-info" has been added to the Reference Types Registry defined in Section 6.2 of [RFC5988] wilt the following values
This specification is a result of discussions that took place within the Calendaring and Scheduling Consortium's CalDAV Technical Committee. The author thanks the participants of that group.