idnits 2.17.1 draft-douglass-subscription-upgrade-02.txt: Checking boilerplate required by RFC 5378 and the IETF Trust (see https://trustee.ietf.org/license-info): ---------------------------------------------------------------------------- No issues found here. Checking nits according to https://www.ietf.org/id-info/1id-guidelines.txt: ---------------------------------------------------------------------------- No issues found here. Checking nits according to https://www.ietf.org/id-info/checklist : ---------------------------------------------------------------------------- ** There are 4 instances of too long lines in the document, the longest one being 44 characters in excess of 72. -- The draft header indicates that this document updates RFC5988, but the abstract doesn't seem to mention this, which it should. Miscellaneous warnings: ---------------------------------------------------------------------------- == The copyright year in the IETF Trust and authors Copyright Line does not match the current year == Line 216 has weird spacing: '...minimal sig...' (Using the creation date from RFC5988, updated by this document, for RFC5378 checks: 2006-06-19) -- The document seems to lack a disclaimer for pre-RFC5378 work, but may have content which was first submitted before 10 November 2008. If you have contacted all the original authors and they are all willing to grant the BCP78 rights to the IETF Trust, then this is fine, and you can ignore this comment. If not, you may need to add the pre-RFC5378 disclaimer. (See the Legal Provisions document at https://trustee.ietf.org/license-info for more information.) -- The document date (September 5, 2017) is 2424 days in the past. Is this intentional? -- Found something which looks like a code comment -- if you have code sections in the document, please surround them with '' and '' lines. Checking references for intended status: Proposed Standard ---------------------------------------------------------------------------- (See RFCs 3967 and 4897 for information about using normative references to lower-maturity documents in RFCs) == Unused Reference: 'I-D.ietf-calext-extensions' is defined on line 352, but no explicit reference was found in the text == Unused Reference: 'RFC2434' is defined on line 361, but no explicit reference was found in the text == Unused Reference: 'RFC3688' is defined on line 366, but no explicit reference was found in the text == Unused Reference: 'RFC4589' is defined on line 375, but no explicit reference was found in the text == Unused Reference: 'RFC5546' is defined on line 384, but no explicit reference was found in the text ** Obsolete normative reference: RFC 2434 (Obsoleted by RFC 5226) ** Obsolete normative reference: RFC 5988 (Obsoleted by RFC 8288) Summary: 3 errors (**), 0 flaws (~~), 7 warnings (==), 4 comments (--). Run idnits with the --verbose option for more detailed information about the items above. -------------------------------------------------------------------------------- 2 Network Working Group M. Douglass 3 Internet-Draft Spherical Cow Group 4 Updates: 5988 (if approved) September 5, 2017 5 Intended status: Standards Track 6 Expires: March 9, 2018 8 Calendar subscription upgrades 9 draft-douglass-subscription-upgrade-02 11 Abstract 13 This specification introduces an approach to allow subscribers to 14 calendar feeds to upgrade to a more performant protocol. 16 Status of This Memo 18 This Internet-Draft is submitted in full conformance with the 19 provisions of BCP 78 and BCP 79. 21 Internet-Drafts are working documents of the Internet Engineering 22 Task Force (IETF). Note that other groups may also distribute 23 working documents as Internet-Drafts. The list of current Internet- 24 Drafts is at https://datatracker.ietf.org/drafts/current/. 26 Internet-Drafts are draft documents valid for a maximum of six months 27 and may be updated, replaced, or obsoleted by other documents at any 28 time. It is inappropriate to use Internet-Drafts as reference 29 material or to cite them other than as "work in progress." 31 This Internet-Draft will expire on March 9, 2018. 33 Copyright Notice 35 Copyright (c) 2017 IETF Trust and the persons identified as the 36 document authors. All rights reserved. 38 This document is subject to BCP 78 and the IETF Trust's Legal 39 Provisions Relating to IETF Documents 40 (https://trustee.ietf.org/license-info) in effect on the date of 41 publication of this document. Please review these documents 42 carefully, as they describe your rights and restrictions with respect 43 to this document. Code Components extracted from this document must 44 include Simplified BSD License text as described in Section 4.e of 45 the Trust Legal Provisions and are provided without warranty as 46 described in the Simplified BSD License. 48 Table of Contents 50 1. Introduction . . . . . . . . . . . . . . . . . . . . . . . . 2 51 1.1. Conventions Used in This Document . . . . . . . . . . . . 3 52 2. Enhanced GET . . . . . . . . . . . . . . . . . . . . . . . . 3 53 2.1. Introduction . . . . . . . . . . . . . . . . . . . . . . 3 54 2.2. Deletions . . . . . . . . . . . . . . . . . . . . . . . . 3 55 2.3. Examples . . . . . . . . . . . . . . . . . . . . . . . . 3 56 3. Changes to the iCalendar specifications . . . . . . . . . . . 6 57 4. Discovering alternative access methods . . . . . . . . . . . 6 58 5. Link relation subscribe-caldav . . . . . . . . . . . . . . . 6 59 6. Link relation subscribe-caldav-auth . . . . . . . . . . . . . 7 60 7. Link relation subscribe-webdav-sync . . . . . . . . . . . . . 7 61 8. Link relation subscribe-enhanced-get . . . . . . . . . . . . 7 62 9. Security Considerations . . . . . . . . . . . . . . . . . . . 7 63 10. Privacy Considerations . . . . . . . . . . . . . . . . . . . 7 64 11. IANA Considerations . . . . . . . . . . . . . . . . . . . . . 8 65 11.1. Link Relation Registrations . . . . . . . . . . . . . . 8 66 12. Acknowledgements . . . . . . . . . . . . . . . . . . . . . . 8 67 13. Normative References . . . . . . . . . . . . . . . . . . . . 8 68 Appendix A. Open issues . . . . . . . . . . . . . . . . . . . . 9 69 Appendix B. Change log . . . . . . . . . . . . . . . . . . . . . 9 70 Author's Address . . . . . . . . . . . . . . . . . . . . . . . . 10 72 1. Introduction 74 Currently clients subscribe to calendar feeds as an ics file which is 75 often published as a resource accessible using the unofficial 76 'webcal' scheme. 78 The only available option for updating that resource is the usual 79 HTTP polling of cached resources using Etags. 81 There is the usual tension between clients wishing to see a timely 82 response to changes and servers not wishing to be overloaded by 83 frequent requests for possibly large amounts of data. 85 This specification introduces an approach whereby clients can 86 discover a more performant access method. Given the location of the 87 resource as an ics file, the client can perfom an OPTIONS request on 88 the resource and inspect the returned headers which will offer a 89 number of alternative access methods. 91 Given that many clients already support CalDAV this provides an easy 92 upgrade path for those clients. CalDAV and DAV subsets are specified 93 here to allow lighter weight implementations. 95 1.1. Conventions Used in This Document 97 The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", 98 "SHOULD", "SHOULD NOT", "RECOMMENDED", "NOT RECOMMENDED", "MAY", and 99 "OPTIONAL" in this document are to be interpreted as described in 100 [RFC2119]. 102 2. Enhanced GET 104 2.1. Introduction 106 This is a lightweight protocol which allows simple clients to 107 efficiently discover and download changes in the targeted resource. 109 It has many similarities to WebDAV sync and for a server could be 110 implemented as an extension of the specification. 112 In this protocol the Etag is used as the sync change token. By 113 adding the If-None-Match header field to the vary header field we can 114 ensure intermediate caching proxies will be able to cache different 115 versions of the data. 117 The resource is treated as a set of individual events each of which 118 may be updated or deleted separately. The client will first fetch 119 the entire ics file. On subsequent requests it uses the Prefer 120 header with a value of "return=minimal" to indicate that it wants a 121 set of changes since the last fetch. 123 2.2. Deletions 125 When an entity (VEVENT, VTODO or other valid top-level component) is 126 deleted from the source data the server needs to be able to inform a 127 client of the deletion. This specification introduces a new value 128 for the STATUS property of DELETED. 130 On the first conditional GET after the entity has been deleted a 131 skeleton, but valid, entity will be returned with STATUS: DELETED. 132 The receiving client is free to remove the entity or update it's 133 STATUS property. 135 On subsequent conditional fetches the entity will not be returned. 137 2.3. Examples 139 This is an example of the initial request and response from a server 140 that supports the extended GET protocol. 142 >> Request << 144 GET /events.ics HTTP/1.1 145 Host: example.com 146 Accept: text/calendar 148 >> Response << 150 HTTP/1.1 200 OK 151 Content-Length: xxxx 152 ETag: "1234" current ETag (for conditional GET) 153 Vary: Prefer, If-None-Match so caching proxy can key off of client?s ETag (sync token) and preference 155 BEGIN:VCALENDAR: 156 ? /* full feed */ 157 END:VCALENDAR 159 This is an example of the subsequent request and response when no 160 changes have occurred. The Accept header field indicates that a 161 VPATCH format is most desirable but simple text/calendar is 162 acceptable. 164 >> Request << 166 GET /events.ics HTTP/1.1 167 Host: example.com 168 Accept: text/calendar; q=0.5, component=VPATCH, text/calendar; 169 If-None-Match: ?1234? conditional request 170 Prefer: return=minimal 172 >> Response << 174 HTTP/1.1 304 Not Modified 175 Content-Length: 0 176 ETag: ?1234? 177 Vary: Prefer, If-None-Match 179 This is an example of the subsequent request and response when no 180 changes have occurred. The Accept header field indicates that a 181 VPATCH format is most desirable but simple text/calendar is 182 acceptable. 184 >> Request << 186 GET /events.ics HTTP/1.1 187 Host: example.com 188 Accept: text/calendar; q=0.5, component=VPATCH, text/calendar; 189 If-None-Match: "1234" conditional request 190 Prefer: return=minimal 192 >> Response << 194 HTTP/1.1 304 Not Modified 195 Content-Length: 0 196 ETag: "1234" 197 Vary: Prefer, If-None-Match 199 This is an example of the subsequent request and response when 200 changes have occurred and the server can create the minimal format. 202 >> Request << 204 GET /events.ics HTTP/1.1 205 Host: example.com 206 Accept: text/calendar; q=0.5, component=VPATCH, text/calendar; 207 If-None-Match: "1234" conditional request 208 Prefer: return=minimal 210 >> Response << 212 HTTP/1.1 200 OK 213 Content-Type: text/calendar 214 Content-Length: xxxx 215 ETag: "5678" current ETag (for conditional GET) 216 Preference-Applied: return=minimal signals to client that stream is changes only 217 Vary: Prefer, If-None-Match so caching proxy can key off of client?s ETag (sync token) and preference 219 BEGIN:VCALENDAR: 220 ... only new/changed events 221 ... when not returning VPATCH, deleted events have STATUS:DELETED 222 END:VCALENDAR 224 This is an example of the subsequent request and response when 225 changes have occurred and the server cannot create the minimal format 226 - perhaps because of an old or invalid token. Note there is no 227 Preference-Applied header field. 229 >> Request << 231 GET /events.ics HTTP/1.1 232 Host: example.com 233 Accept: text/calendar; q=0.5, component=VPATCH, text/calendar; 234 If-None-Match: "1234" conditional request 235 Prefer: return=minimal 237 >> Response << 239 HTTP/1.1 200 OK 240 Content-Type: text/calendar 241 Content-Length: xxxx 242 ETag: "5678" current ETag (for conditional GET) 243 Vary: Prefer, If-None-Match so caching proxy can key off of client?s ETag (sync token) and preference 245 BEGIN:VCALENDAR: 246 ... full set of data 247 END:VCALENDAR 249 3. Changes to the iCalendar specifications 251 This specification does not require any changes to [RFC5545] or its 252 extensions. However it does introduce the use of some properties to 253 provide more information about the resource, for example the time 254 range it covers. 256 4. Discovering alternative access methods 258 The advertising of other access points is achieved through the use of 259 the LINK header as defined in [RFC5988]. New link relation types are 260 defined in this specification - each being associated with a protocol 261 or protocol subset. 263 These LINK headers will be delivered when a client carries out an 264 OPTIONS request targeting the URL of the resource. 266 5. Link relation subscribe-caldav 268 This specifies an access point which is a full implementation of 269 caldav but requires no authentication. The end point allows the full 270 range of reports as defined by the CalDAV specification. 272 The client MUST follow the specification to determine exactly what 273 operations are allowed on the access point - for example to determine 274 if sync-report is supported. 276 The URL MAY include some form of token to allow write access to the 277 targeted collection. The client must check it's permissions to 278 determine whether or not it has been granted write access. 280 6. Link relation subscribe-caldav-auth 282 This specifies an access point which is a full implementation of 283 caldav and requires authentication. This may allow read-write access 284 to the resource. 286 The client MUST follow the specification to determine exactly what 287 operations are allowed on the access point - for example to determine 288 if sync-report is supported. 290 7. Link relation subscribe-webdav-sync 292 This specifies an access point which supports only webdav sync. 294 This allows the client to issue a sync-report on the resource to 295 obtain updates. 297 NOTE: say something about initial startup - use ics to populate? 298 Initial token? 300 The client MUST follow that specification. 302 8. Link relation subscribe-enhanced-get 304 This specifies an access point which supports something new. 306 The client MUST follow that specification. 308 9. Security Considerations 310 Applications using these properties need to be aware of the risks 311 entailed in using the URIs provided as values. See [RFC3986] for a 312 discussion of the security considerations relating to URIs. 314 10. Privacy Considerations 316 Properties with a "URI" value type can expose their users to privacy 317 leaks as any network access of the URI data can be tracked. Clients 318 SHOULD NOT automatically download data referenced by the URI without 319 explicit instruction from users. This specification does not 320 introduce any additional privacy concerns beyond those described in 321 [RFC5545]. 323 11. IANA Considerations 325 11.1. Link Relation Registrations 327 This document defines the following new iCalendar properties to be 328 added to the registry defined in Section 8.2.3 of [RFC5545]: 330 +------------------------+-------------+--------------------+ 331 | Relation Name | Description | Reference | 332 +------------------------+-------------+--------------------+ 333 | subscribe-caldav | Current | RFCXXXX, Section 5 | 334 | subscribe-caldav_auth | Current | RFCXXXX, Section 6 | 335 | subscribe-webdav-sync | Current | RFCXXXX, Section 7 | 336 | subscribe-enhanced_get | Current | RFCXXXX, Section 8 | 337 +------------------------+-------------+--------------------+ 339 12. Acknowledgements 341 The author would also like to thank the members of the Calendaring 342 and Scheduling Consortium Calendar Sharing technical committee and 343 the following individuals for contributing their ideas and support: 345 ... 347 The authors would also like to thank the Calendaring and Scheduling 348 Consortium for advice with this specification. 350 13. Normative References 352 [I-D.ietf-calext-extensions] 353 Daboo, C., "New Properties for iCalendar", draft-ietf- 354 calext-extensions-05 (work in progress), August 2016. 356 [RFC2119] Bradner, S., "Key words for use in RFCs to Indicate 357 Requirement Levels", BCP 14, RFC 2119, 358 DOI 10.17487/RFC2119, March 1997, 359 . 361 [RFC2434] Narten, T. and H. Alvestrand, "Guidelines for Writing an 362 IANA Considerations Section in RFCs", RFC 2434, 363 DOI 10.17487/RFC2434, October 1998, 364 . 366 [RFC3688] Mealling, M., "The IETF XML Registry", BCP 81, RFC 3688, 367 DOI 10.17487/RFC3688, January 2004, 368 . 370 [RFC3986] Berners-Lee, T., Fielding, R., and L. Masinter, "Uniform 371 Resource Identifier (URI): Generic Syntax", STD 66, 372 RFC 3986, DOI 10.17487/RFC3986, January 2005, 373 . 375 [RFC4589] Schulzrinne, H. and H. Tschofenig, "Location Types 376 Registry", RFC 4589, DOI 10.17487/RFC4589, July 2006, 377 . 379 [RFC5545] Desruisseaux, B., Ed., "Internet Calendaring and 380 Scheduling Core Object Specification (iCalendar)", 381 RFC 5545, DOI 10.17487/RFC5545, September 2009, 382 . 384 [RFC5546] Daboo, C., Ed., "iCalendar Transport-Independent 385 Interoperability Protocol (iTIP)", RFC 5546, 386 DOI 10.17487/RFC5546, December 2009, 387 . 389 [RFC5988] Nottingham, M., "Web Linking", RFC 5988, 390 DOI 10.17487/RFC5988, October 2010, 391 . 393 [W3C.REC-xml-20060816] 394 Bray, T., Paoli, J., Sperberg-McQueen, M., Maler, E., and 395 F. Yergeau, "Extensible Markup Language (XML) 1.0 (Fourth 396 Edition)", World Wide Web Consortium Recommendation REC- 397 xml-20060816, August 2006, 398 . 400 Appendix A. Open issues 402 restype values: Need to determine what if any registry of resource 403 types already exists and use that. 405 Appendix B. Change log 407 v01 2017-07-28 MD 409 o Examples 411 o More text for extended get. Talk about deletions. 413 v01 2017-02-17 MD 415 o Add text about OPTIONS 417 o Add text abut read/write CalDAV 418 v00 2017-02-15 MD 420 o First pass 422 Author's Address 424 Michael Douglass 425 Spherical Cow Group 426 226 3rd Street 427 Troy, NY 12180 428 USA 430 Email: mdouglass@sphericalcowgroup.com 431 URI: http://sphericalcowgroup.com