Foreword
This specification updates RFC5545 to add the value DELETED to the STATUS property.
This specification also adds values to the Preferences Registry defined in RFC7240 to add the subscribe-enhanced-get and limit preferences and to the link relations directory defined in RFC8288.
The Calendaring and Scheduling Consortium (“CalConnect”) is a global non-profit organization with the aim to facilitate interoperability of collaborative technologies and tools through open standards.
CalConnect works closely with international and regional partners, of which the full list is available on our website ( https://www.calconnect.org/about/liaisons-and-relationships).
The procedures used to develop this document and those intended for its further maintenance are described in the CalConnect Directives.
In particular the different approval criteria needed for the different types of CalConnect documents should be noted. This document was drafted in accordance with the editorial rules of the CalConnect Directives.
Attention is drawn to the possibility that some elements of this document may be the subject of patent rights. CalConnect shall not be held responsible for identifying any or all such patent rights. Details of any patent rights identified during the development of the document will be provided in the Introduction.
Any trade name used in this document is information given for the convenience of users and does not constitute an endorsement.
This document was prepared by Technical Committee FREEBUSY.
Introduction
Currently, clients subscribe to calendar feeds as an iCalendar file which is often published as a resource accessible using the unofficial ‘webcal’ URI scheme.
The only available option for updating that resource is the usual HTTP polling of cached resources using section=8.8.2 Last-Modified or section=8.8.3 Etag.
There is the usual tension between clients wishing to see a timely response to changes and servers not wishing to be overloaded by frequent requests for possibly large amounts of data.
This specification introduces an approach whereby clients can discover a more performant access method. Given the location of the resource as an iCalendar file, the client can perform a HEAD request on the resource and inspect the returned headers which will offer a number of alternative access methods.
Given that many clients and servers already support CalDAV this provides an easy upgrade path for those clients. Additionally, an enhanced GET protocol is specified here to allow a lightweight implementation.
The use of subscription upgrade may help reduce load on servers, but perhaps more importantly it allows mobile devices to use a more efficient update mechanism, reducing data transferred and presumably improving battery life.
CalConnect Standard: Calendaring and scheduling — Calendar subscription upgrades
1. Scope
This document provides a mechanism to allow subscribers to calendar feeds to upgrade to a more performant protocol.
2. Normative references
The following documents are referred to in the text in such a way that some or all of their content constitutes requirements of this document. For dated references, only the edition cited applies. For undated references, the latest edition of the referenced document (including any amendments) applies.
IETF RFC 2518, Y. GOLAND, E. WHITEHEAD, A. FAIZI, S. CARTER and D. JENSEN. HTTP Extensions for Distributed Authoring — WEBDAV. 1999. RFC Publisher. https://www.rfc-editor.org/info/rfc2518.
IETF RFC 3864, G. KLYNE, M. NOTTINGHAM and J. MOGUL. Registration Procedures for Message Header Fields. 2004. RFC Publisher. https://www.rfc-editor.org/info/rfc3864.
IETF RFC 3986, T. BERNERS-LEE, R. FIELDING and L. MASINTER. Uniform Resource Identifier (URI): Generic Syntax. 2005. RFC Publisher. https://www.rfc-editor.org/info/rfc3986.
IETF RFC 4791, C. DABOO, B. DESRUISSEAUX and L. DUSSEAULT. Calendaring Extensions to WebDAV (CalDAV). 2007. RFC Publisher. https://www.rfc-editor.org/info/rfc4791.
IETF RFC 5545, B. DESRUISSEAUX (ed.). Internet Calendaring and Scheduling Core Object Specification (iCalendar). 2009. RFC Publisher. https://www.rfc-editor.org/info/rfc5545.
IETF RFC 5546, C. DABOO (ed.). iCalendar Transport-Independent Interoperability Protocol (iTIP). 2009. RFC Publisher. https://www.rfc-editor.org/info/rfc5546.
IETF RFC 6047, A. MELNIKOV (ed.). iCalendar Message-Based Interoperability Protocol (iMIP). 2010. RFC Publisher. https://www.rfc-editor.org/info/rfc6047.
IETF RFC 6638, C. DABOO and B. DESRUISSEAUX. Scheduling Extensions to CalDAV. 2012. RFC Publisher. https://www.rfc-editor.org/info/rfc6638.
IETF RFC 8288, M. NOTTINGHAM. Web Linking. 2017. RFC Publisher. https://www.rfc-editor.org/info/rfc8288.
IETF RFC 7240, J. SNELL. Prefer Header for HTTP. 2014. RFC Publisher. https://www.rfc-editor.org/info/rfc7240.
3. Discovering alternative access methods
The advertising of other access points is achieved through the use of the LINK header as defined in IETF RFC 8288. New link relation types are defined in this specification — each being associated with a protocol or protocol subset.
These LINK headers will be delivered when a client carries out a HEAD request targeting the URL of the resource.
EXAMPLE
This is an example of a HEAD request and the response from a server that supports the enhanced GET method.
>> Request <<
HEAD /caldata/events.ics HTTP/1.1
Host: example.com
Accept: text/calendar
>> Response <<
HTTP/1.1 200 OK
Content-Length: xxxx
Link: <https://example.com/subscribe/events.ics>;
rel="subscribe-enhanced-get"
Note that the target for an upgraded service may be the same as for the initial resource.
4. Enhanced GET
4.1. General
This is a lightweight protocol which allows simple clients to efficiently discover and download changes in the targeted resource.
It has many similarities to IETF RFC 6578 WebDAV sync and for a server could be implemented as an extension of the specification.
In this protocol the client MUST include the Prefer header field preference “subscribe-enhanced-get”. If a sync token is available it is passed as a Sync-Token header field.
The resource is treated as a set of individual events each of which may be updated or deleted separately. Note that a recurring event and its overrides are treated as a single entity. The client will first fetch the entire iCalendar file. On subsequent requests it uses the Prefer header field and a Sync-Token header field to indicate that it wants a set of changes since the last fetch.
If no Sync-Token header field is supplied the server MUST respond with a full set of data and SHOULD set the Preference-Applied header field and a new Sync-Token header field value.
If the token is valid, it SHOULD return with a set of changed entities and MUST set the Preference-Applied header field and a new Sync-Token header field value.
When a server receives an invalid token it MUST return a 409 status (Conflict). The server MAY choose to return an error message in the body.
The client MUST respond to this error by discarding the cached data and restarting the interaction from scratch, i.e. retrieve the full set of data then poll for updates.
In the absence of a Prefer header field, the server MAY include the Sync-Token header field. This can act as a signal to the client that the server supports the enhanced-get protocol.
4.2. Deletions
When an entity (VEVENT, VTODO or other valid top-level component) is deleted from the source data the server needs to be able to inform a client of the deletion. This specification introduces a new value “DELETED” for the IETF RFC 5545, Section 3.8.1.11 STATUS property.
On the first enhanced GET after the entity has been deleted a skeleton, but valid, entity will be returned with STATUS: DELETED. The receiving client is free to remove the entity or update its STATUS property.
On subsequent fetches the entity will not be returned.
As noted above, the skeleton entity returned must be a valid component as defined by the specifications. For example, a VEVENT MUST contain the DTSTAMP, DTSTART and UID properties as well as the STATUS: DELETED property. The DTSTAMP and DTSTART may be generated and the UID MUST be the UID of the deleted entity.
4.3. Paging the response
A client may explicitly request a limit on the size of the response by specifying the Prefer header field preference “limit=n” where n is the number of components.
When a server receives a request specifying such a limit it SHOULD limit the response to that number of components. If the limit causes a truncation in the response the server should respond with a Preference-Applied header specifying the limit that was applied and return a sync token which may be used to retrieve the next batch of data.
This allows the client to immediately resubmit a request for the next batch using the updated token.
A server MAY choose to limit the response size. The behavior MUST be as if the client had provided a preference for that size - allowing the client to retrieve the full set of data in batches.
Note that the process above assumes that the current position in the resource is encoded in some way within the sync token.
4.4. Caching of responses
To enable proper caching of responses the server SHOULD provide a Vary header field defined in section=7.1.4 in responses that names the Prefer and Sync-Token header fields along with any other that are appropriate.
See IETF RFC 7240, Section 2 for a brief comment on use of Vary and Prefer.
4.5. Examples
EXAMPLE 1
This is an example of the initial request and response from a server that supports the enhanced GET method. Note the use of the Vary header so a caching proxy can key off the client’s Sync-Token and preference.
>> Request <<
GET /events.ics HTTP/1.1
Host: example.com
Accept: text/calendar
Prefer: subscribe-enhanced-get
>> Response <<
HTTP/1.1 200 OK
Content-Length: xxxx
Sync-Token: "data:,1234567"
Preference-Applied: subscribe-enhanced-get
Vary: Prefer, Sync-Token
BEGIN:VCALENDAR:
? /* full feed */
END:VCALENDAR
EXAMPLE 2
This is an example of the subsequent request and response when no changes have occurred.
>> Request <<
GET /events.ics HTTP/1.1
Host: example.com
Accept: text/calendar
Prefer: subscribe-enhanced-get
Sync-Token: "data:,1234567"
>> Response <<
HTTP/1.1 304 Not Modified
Content-Length: 0
Sync-Token: "data:,1234567"
Preference-Applied: subscribe-enhanced-get
Vary: Prefer, Sync-Token
EXAMPLE 3
This is an example of the subsequent request and response for an old or invalid token.
>> Request <<
GET /events.ics HTTP/1.1
Host: example.com
Accept: text/calendar
Sync-Token: "data:,1234567"
Prefer: subscribe-enhanced-get
>> Response <<
HTTP/1.1 409 Conflict
Content-Length: xxxx
Preference-Applied: subscribe-enhanced-get
EXAMPLE 4
This is an example of the subsequent request and response when changes have occurred.
>> Request <<
GET /events.ics HTTP/1.1
Host: example.com
Accept: text/calendar
Sync-Token: "data:,1234567"
Prefer: subscribe-enhanced-get
>> Response <<
HTTP/1.1 200 OK
Content-Type: text/calendar
Vary: Prefer, Sync-Token
Sync-Token: "data:,4567890"
Preference-Applied: subscribe-enhanced-get
BEGIN:VCALENDAR:
... only new/changed events
... deleted events have STATUS:DELETED
END:VCALENDAR
5. Changes to the iCalendar specifications
This specification updates IETF RFC 5545 to add the value DELETED to the STATUS property.
5.1. Redefined Status property
Property name
STATUS
Purpose
This property defines the overall status or confirmation for the calendar component.
Value Type
TEXT
Property Parameters
IANA and non-standard property parameters can be specified on this property.
Conformance
This property can be specified once in “VEVENT”, “VTODO”, or “VJOURNAL” calendar components.
Description
In a group-scheduled calendar component, the property is used by the “Organizer” to provide a confirmation of the event to the “Attendees”. For example in a “VEVENT” calendar component, the “Organizer” can indicate that a meeting is tentative, confirmed, or cancelled. In a “VTODO” calendar component, the “Organizer” can indicate that an action item needs action, is completed, is in process or being worked on, or has been cancelled. In a “VJOURNAL” calendar component, the “Organizer” can indicate that a journal entry is draft, final, or has been cancelled or removed.
Format Definition
This property is defined by the following notation:
status = "STATUS" statparam ":" statvalue CRLF
statparam = *(";" other-param)
statvalue = (statvalue-event
/ statvalue-todo
/ statvalue-jour)
statvalue-event = "TENTATIVE" ;Indicates event is tentative.
/ "CONFIRMED" ;Indicates event is definite.
/ "CANCELLED" ;Indicates event was cancelled.
/ "DELETED" ;Indicates event was deleted.
;Status values for a "VEVENT"
statvalue-todo = "NEEDS-ACTION" ;Indicates to-do needs action.
/ "COMPLETED" ;Indicates to-do completed.
/ "IN-PROCESS" ;Indicates to-do in process of.
/ "CANCELLED" ;Indicates to-do was cancelled.
/ "DELETED" ;Indicates to-do was deleted.
;Status values for "VTODO".
statvalue-jour = "DRAFT" ;Indicates journal is draft.
/ "FINAL" ;Indicates journal is final.
/ "CANCELLED" ;Indicates journal is removed.
/ "DELETED" ;Indicates journal was deleted.
;Status values for "VJOURNAL".
Figure 1
Example
EXAMPLE 1
The following is an example of this property for a “VEVENT” calendar component:
STATUS:TENTATIVE
EXAMPLE 2
The following is an example of this property for a “VTODO” calendar component:
STATUS:NEEDS-ACTION
EXAMPLE 3
The following is an example of this property for a “VJOURNAL” calendar component:
STATUS:DRAFT
6. Header Field: Sync-Token
This specification defines a new header field Sync-Token for use by the enhanced GET method.
Sync-Token = DQUOTE URI DQUOTE
Figure 2
The value MUST be a URI. This will generally be a data URI representing an opaque token. Client MUST not attempt to interpret the data URI value.
EXAMPLE
This is an example of the Sync-Token header field:
Sync-Token: "data:,1234567"
7. New Prefer header field preferences
7.1. Preference subscribe-enhanced-get
This indicates that the client expects the server to handle the GET method according to the specifications for enhanced get.
pref-subscribe-enhanced-get = "subscribe-enhanced-get"
Figure 3
7.2. Preference limit
This preference parameter provides a limit on the number of components returned for enhanced get.
pref-limit = "limit" BWS "=" BWS 1*DIGIT
Figure 4
8. Link relations
8.1. General
This clause defines a number of new link relations required to facilitate subscription upgrades.
8.2. subscribe-caldav
This specifies an access point which is a full implementation of caldav but requires no authentication. The end point allows the full range of reports as defined by the CalDAV specification.
The client MUST follow the specification to determine exactly what operations are allowed on the access point — for example to determine if DAV:sync-collection is supported.
The URL MAY include some form of token to allow write access to the targeted collection. The client must check its permissions to determine whether it has been granted write access.
8.3. subscribe-caldav-auth
This specifies an access point which is a full implementation of caldav and requires authentication. This may allow read-write access to the resource.
The client MUST follow the specification to determine exactly what operations are allowed on the access point — for example to determine if DAV:sync-collection is supported.
8.4. subscribe-webdav-sync
This specifies an access point which supports only webdav sync.
This allows the client to issue a DAV:sync-collection report on the resource to obtain updates.
The client MUST follow that specification.
8.5. subscribe-enhanced-get
This specifies an access point which supports the enhanced GET protocol defined in Clause 4.
The client and server MUST follow the protocol as defined in Clause 4.
9. Security Considerations
Applications using these properties need to be aware of the risks entailed in using the URIs provided as values. See IETF RFC 3986 for a discussion of the security considerations relating to URIs.
10. Privacy Considerations
Properties with a “URI” value type can expose their users to privacy leaks as any network access of the URI data can be tracked. Clients SHOULD NOT automatically download data referenced by the URI without explicit instruction from users. This specification does not introduce any additional privacy concerns beyond those described in IETF RFC 5545.
11. IANA Considerations
11.1. Sync-Token HTTP Header Field Registration
This specification updates the “Message Headers” registry entry for “Sync-Token” in IETF RFC 3864 to refer to this document.
Header Field Name: Sync-Token
Protocol: http
Status: standard
Reference: <this-document>
Figure 5
11.2. Preference Registrations
The following preferences have been added to the HTTP Preferences Registry defined in IETF RFC 7240
Preference
subscribe-enhanced-get
Value
None.
Description
Marks the interaction as enhanced get and provides the optional sync-token and page size.
Reference
this document
Preference
limit
Value
An integer page size.
Description
Provide a limit on the number of components in the response.
Reference
this document
11.3. Link Relation Registrations
The following link relation values have been added to the Reference Types Registry defined in IETF RFC 8288, Section 6.2.2:
Table 1
Relation Name | Description | Reference |
---|---|---|
subscribe-caldav | Current | |
subscribe-caldav_auth | Current | |
subscribe-webdav-sync | Current | |
subscribe-enhanced_get | Current |
11.4. New and updated iCalendar Elements Registration
This specification updates IETF RFC 5545 by adding and updating a number of elements according to the procedures and templates specified in IETF RFC 5545, Section 8.2.
11.4.1. Initialization of the Status registry
This specification updates IETF RFC 5545 by adding a Status value registry to the iCalendar Elements registry located here: https://www.iana.org/assignments/icalendar> and initializing it as per IETF RFC 5545.
Table 2 — Initial Status Value Registry
Name | Status | Reference |
---|---|---|
CANCELLED | Current | |
COMPLETED | Current | |
CONFIRMED | Current | |
DRAFT | Current | |
FINAL | Current | |
IN-PROCESS | Current | |
NEEDS-ACTION | Current | |
TENTATIVE | Current |
11.4.2. Update of the Status registry
This specification further updates the Status registry with the additional DELETED value defined in this document.
Table 3 — Updated Status Value Registry
Value | Status | Reference |
---|---|---|
DELETED | Current | This Spec, Clause 4.2 |
12. Acknowledgements
The author would like to thank the members of the CalConnect Calendar Sharing technical committee and the following individuals for contributing their ideas and support:
Marten Gajda, Ken Murchison, Garry Shutler
Bibliography
[1] IETF RFC 6578, C. DABOO and A. QUILLAUD. Collection Synchronization for Web Distributed Authoring and Versioning (WebDAV). 2012. RFC Publisher. https://www.rfc-editor.org/info/rfc6578.