Internet-Draft Serverside Subscriptions May 2022
Douglass Expires 19 November 2022 [Page]
Workgroup:
Calendaring Extensions
Internet-Draft:
:
Updates:
RFC 4791, 10.17487/RFC4791 (if approved)
Published:
Intended Status:
Standards Track
Expires:
Author:
M. Douglass
Bedework

Serverside Subscriptions

Abstract

This specification provides a mechanism whereby subscriptions to external resources can be handled by the server.

This specification updates [RFC4791] to add new properties for the MKCOL request.

Open Issues

invitations

Any reason not to allow them?

Status of This Memo

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 https://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 19 November 2022.

Table of Contents

1. Acknowledgements

The author would also like to thank the members of the Calendaring and Scheduling Consortium Calendar Sharing technical committee and the following individuals for contributing their ideas and support.

...

The authors would also like to thank CalConnect, the Calendaring and Scheduling Consortium, for advice with this specification.

2. Introduction

The motivation for this specification was initially to handle external subscriptions to calendar data. However, any resource which allows subscriptions might make use of this specification.

Currently subscriptions to calendar feeds are handled by calendar clients. There are a number of disadvantages to this approach: users have to subscribe from multiple devices and the subscription cannot affect scheduling handled by the server.

This specification defines a mechanism whereby the server will subscribe to the feed and make it visible in the user's home.

The advantages are popular feeds can be cached by the server and the user only has to make a single subscription.

2.1. Conventions Used in This Document

The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", "SHOULD", "SHOULD NOT", "RECOMMENDED", "NOT RECOMMENDED", "MAY", and "OPTIONAL" in this document are to be interpreted as described in [RFC2119].

3. CalDAV Subscriptions

3.1. Request

A client will subscribe to a URL by performing a MKCOL request with resource type elements of at least DAV:collection and DAV:subscription. For a calendar subscription there will also be a caldav calendar element.

This is an example of the MKCOL request and response from a server that supports extended MKCOL.

>> Request <<

POST /caldav/user/mike/calendars/parrots HTTP/1.1
Host: example.com
Content-Type: text/calendar; component=VEVENT; method=REQUEST
Content-Length: xxxx

<?xml version="1.0" encoding="utf-8" ?>
<D:mkcol xmlns:D="DAV:"
         xmlns:C="urn:ietf:params:xml:ns:caldav">
  <D:set>
    <D:prop>
      <D:resourcetype>
        <D:collection/>
        <C:calendar/>
        <D:subscription/>
      </D:resourcetype>
      <D:displayname>Parrot Events</D:displayname>
      <D:subscription-href
          >http://example.org/parrot-events.ics<
          /D:subscription-href>
      <D:subscription-deletions-suppressed
          >true</D:subscription-deletions-suppressed>
      <D:subscription-suggested-refresh-interval
          >PT1H</D:subscription-suggested-refresh-interval>
    </D:prop>
  </D:set>
</D:mkcol>

>> Response <<

HTTP/1.1 200 OK

4. New DAV and CALDAV properties

4.1. DAV:subscription

Name

subscription

Namespace

DAV

Purpose

To indicate that the resource is a subscription to an external resource which is managed by the server.

Conformance

When this is specified the request MUST also contain at least a DAV:subscription-href element as defined in this specification.

Description

The DAV:specification resource type element is used to indicate a collection that is a subscription. A subscription MUST report the DAV:subscription XML element in the value of the DAV: resourcetype property.

Definition
<!ELEMENT subscription empty>

4.2. DAV:subscription-href

Name

subscription-href

Namespace

DAV

Purpose

Provides the url for the external subscription.

Conformance

This property MUST be defined on any collection which has a resource-type containing a DAV:subscription element.

Definition
<!ELEMENT vpoll-max-items (#PCDATA)>
PCDATA value: a url
Example
<D:subscription-href xmlns:D="DAV"
>https://example.com/events.ics</D:subscription-href>

4.3. DAV:subscription-deletions-suppressed

Name

subscription-deletions-suppressed

Namespace

DAV

Purpose

To indicate that resources that no longer appear in the feed should be retained by the server.

Conformance

This property MAY be defined on any subscription.

Description

Many feeds provide only the current active set of resources. For example, a calendar feed may only contain events from the current date onwards - while many subscribers would like to retain a copy of all events received over time.

This property indicates that the server SHOULD retain resources that disappear from the feed. Services MAY define some mechanism to indicate that a particular resource SHOULD be removed. For example this specification suggests setting a status of DELETED on a calendar event.

Definition
<!ELEMENT subscription-deletions-suppressed empty>

4.4. DAV:subscription-disabled

Name

subscription-disabled

Namespace

DAV

Purpose

To indicate that subscription has been disabled.

Conformance

This property MUST be reported for any disabled subscription.

Description

A server MAY choose to disable a subscription if there is an excessive number of errors when attempting to synchronize with the target This property indicates to the client that the subscription has been disabled.

There is no explicit action that can be taken to reenable a subscription. However, on subsequent requests a client may indicate a refresh is desired which MAY have the effect of reenabling the subscription.

Definition
<!ELEMENT subscription-enabled empty>

4.5. DAV:subscription-next-refresh-interval

Name

subscription-next-refresh-interval

Namespace

DAV

Purpose

To indicate the time interval till the next refresh of a subscription.

Conformance

This property MUST be reported for any active subscription.

Description

This provides a time period to the next refresh. It uses the period format defined in [RFC3339].

Definition
<!ELEMENT subscription-next-refresh-interval (#PCDATA)>
PCDATA value: a duration value
Example
<D:subscription-next-refresh-interval xmlns:D="DAV"
>PT30M</D:subscription-next-refresh-interval>

4.6. DAV:subscription-suggested-refresh-interval

Name

subscription-suggested-refresh-interval

Namespace

DAV

Purpose

To indicate the desired time interval between refreshes of a subscription.

Conformance

This property MUST be reported for any active subscription.

Description

This provides a suggested time period between refresh. It uses the period format defined in RFC 3339.

Definition
<!ELEMENT subscription-suggested-refresh-interval (#PCDATA)>
PCDATA value: a duration value
Example
<D:subscription-suggested-refresh-interval xmlns:D="DAV"
>PT30M</D:subscription-suggested-refresh-interval>

5. Refreshing and Reenabling the subscription

When creating the subscription the client may indicate to the server a desired refresh interval using the subscription-suggested-refresh-interval property.

The client may indicate to the server that a refresh of the data is desired by using the PROPPATCH method to set the subscription-next-refresh-interval to 0, e.g. "PT0S".

A server MAY choose to always ignore the attempted refresh or to ignore the patch if it appears too often.

If the server decides to initiate a refresh it MAY choose to respond with a 102 HTTP status indicating that it is still waiting for the data or a 202 HTTP status to indicate the request was accepted.

6. Response Delays

Implementations of this feature may have an outboard or background process handling the actual synchronization of the data. The target may be hosted on a slow service or the data may be very large.

All these factors may lead to a significant delay in having data ready for delivery to the client.

The following approaches are more or less appropriate for handling requests:

Return with available data

This is the normal behavior. The subscription looks like a regular collection so the server can respond to the normal requests with whatever data is available.

Wait for completion

If the synchronization process is active the server may just choose to wait. This risks a request timeout if the data synchronization takes a significant amount of time.

Return 102 status(es)

The server may choose to wait but periodically send a 102 response to keep the connection alive.

Return 202 status

This is probably the best response. There is no need to indicate where the client should go to retrieve the data. All it needs to do is retry the operation after an appropriate delay.

7. CalDAV service Considerations

As mentioned above, this feature is particularly useful for CalDAV servers and clients. There are some specific considerations.

7.1. Deleted events

If subscription-deletions-suppressed is specified then the server SHOULD retain all events. However, the server MAY choose to remove old events once they become older than the CALDAV:min-date-time property as specified in Section 5.2.6 of [RFC4791].

7.2. CalDAV restrictions

A server SHOULD apply all appropriate restrictions on events obtained from a subscription. In particular the CALDAV:min-date-time and CALDAV:max-date-time properties as specified in Section 5.2.6 of [RFC4791] and Section 5.2.7 of [RFC4791] SHOULD be applied.

Additionally the CALDAV:max-resource-size property restricts the size of events and the CALDAV:max-instances property the number of instances.

7.3. Invitations in Subscriptions

Any reason not to allow them?

8. Security Considerations

Servers implementing this feature need to be aware of the risks entailed in using the URIs provided as values to subscription-href. See [RFC3986] for a discussion of the security considerations relating to URIs.

9. 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 [RFC5545].

10. IANA Considerations

11. References

11.1. Normative References

[RFC2119]
Bradner, S., "Key words for use in RFCs to Indicate Requirement Levels", IETF, DOI 10.17487/RFC2119, BCP 14, RFC 2119, , <https://www.rfc-editor.org/info/rfc2119>.
[RFC2434]
Narten, T. and H. Alvestrand, "Guidelines for Writing an IANA Considerations Section in RFCs", IETF, DOI 10.17487/RFC2434, RFC 2434, , <https://www.rfc-editor.org/info/rfc2434>.
[RFC2518]
Goland, Y., Whitehead, E., Faizi, A., Carter, S., and D. Jensen, "HTTP Extensions for Distributed Authoring - WEBDAV", IETF, DOI 10.17487/RFC2518, RFC 2518, , <https://www.rfc-editor.org/info/rfc2518>.
[RFC3339]
Klyne, G. and C. Newman, "Date and Time on the Internet: Timestamps", IETF, DOI 10.17487/RFC3339, RFC 3339, , <https://www.rfc-editor.org/info/rfc3339>.
[RFC3688]
Mealling, M., "The IETF XML Registry", IETF, DOI 10.17487/RFC3688, BCP 81, RFC 3688, , <https://www.rfc-editor.org/info/rfc3688>.
[RFC3986]
Berners-Lee, T., Fielding, R., and L. Masinter, "Uniform Resource Identifier (URI): Generic Syntax", IETF, STD 66, DOI 10.17487/RFC3986, BCP 66, RFC 3986, , <https://www.rfc-editor.org/info/rfc3986>.
[RFC4791]
Daboo, C., Desruisseaux, B., and L. Dusseault, "Calendaring Extensions to WebDAV (CalDAV)", IETF, DOI 10.17487/RFC4791, RFC 4791, , <https://www.rfc-editor.org/info/rfc4791>.
[RFC5545]
Desruisseaux, B., "Internet Calendaring and Scheduling Core Object Specification (iCalendar)", IETF, DOI 10.17487/RFC5545, RFC 5545, , <https://www.rfc-editor.org/info/rfc5545>.
[RFC5546]
Daboo, C., "iCalendar Transport-Independent Interoperability Protocol (iTIP)", IETF, DOI 10.17487/RFC5546, RFC 5546, , <https://www.rfc-editor.org/info/rfc5546>.
[RFC5988]
Nottingham, M., "Web Linking", IETF, DOI 10.17487/RFC5988, RFC 5988, , <https://www.rfc-editor.org/info/rfc5988>.
[RFC7240]
Snell, J., "Prefer Header for HTTP", IETF, DOI 10.17487/RFC7240, RFC 7240, , <https://www.rfc-editor.org/info/rfc7240>.
[W3C.REC-xml-20060816]
Maler, E., Yergeau, F., Paoli, J., Sperberg-McQueen, M., and T. Bray, "Extensible Markup Language (XML) 1.0 (Fourth Edition)", W3C REC-xml-20060816, W3C REC REC-xml-20060816, , <https://www.w3.org/TR/2006/REC-xml-20060816/>.

Author's Address

Michael Douglass
Bedework
226 3rd Street
Troy, NY 12180
United States of America