diff --git a/vendor/autoload.php b/vendor/autoload.php
index 4ab3c99bc..655527c54 100644
--- a/vendor/autoload.php
+++ b/vendor/autoload.php
@@ -4,4 +4,4 @@
require_once __DIR__ . '/composer' . '/autoload_real.php';
-return ComposerAutoloaderInitd0f40897631bfac5572c9d06d82344bf::getLoader();
+return ComposerAutoloaderInita478c0bdc9041edcc4f485e8fb39b90d::getLoader();
diff --git a/vendor/composer/ClassLoader.php b/vendor/composer/ClassLoader.php
index a71055531..88684c526 100644
--- a/vendor/composer/ClassLoader.php
+++ b/vendor/composer/ClassLoader.php
@@ -202,10 +202,11 @@ class ClassLoader
* Registers a set of PSR-4 directories for a given namespace,
* replacing any others previously set for this namespace.
*
- * @param string $prefix The prefix/namespace, with trailing '\\'
- * @param array|string $paths The PSR-4 base directories
+ * @param string $prefix The prefix/namespace, with trailing '\\'
+ * @param array|string $paths The PSR-4 base directories
*/
- public function setPsr4($prefix, $paths) {
+ public function setPsr4($prefix, $paths)
+ {
if (!$prefix) {
$this->fallbackDirsPsr4 = (array) $paths;
} else {
diff --git a/vendor/composer/autoload_namespaces.php b/vendor/composer/autoload_namespaces.php
index a3c1e111b..e64e0a875 100644
--- a/vendor/composer/autoload_namespaces.php
+++ b/vendor/composer/autoload_namespaces.php
@@ -12,5 +12,4 @@ return array(
'Sabre\\DAV' => array($vendorDir . '/sabre/dav/lib'),
'Sabre\\CardDAV' => array($vendorDir . '/sabre/dav/lib'),
'Sabre\\CalDAV' => array($vendorDir . '/sabre/dav/lib'),
- 'Monolog' => array($vendorDir . '/monolog/monolog/src'),
);
diff --git a/vendor/composer/autoload_real.php b/vendor/composer/autoload_real.php
index 33803553e..09fa3b8c0 100644
--- a/vendor/composer/autoload_real.php
+++ b/vendor/composer/autoload_real.php
@@ -2,7 +2,7 @@
// autoload_real.php @generated by Composer
-class ComposerAutoloaderInitd0f40897631bfac5572c9d06d82344bf
+class ComposerAutoloaderInita478c0bdc9041edcc4f485e8fb39b90d
{
private static $loader;
@@ -19,12 +19,9 @@ class ComposerAutoloaderInitd0f40897631bfac5572c9d06d82344bf
return self::$loader;
}
- spl_autoload_register(array('ComposerAutoloaderInitd0f40897631bfac5572c9d06d82344bf', 'loadClassLoader'), true, true);
+ spl_autoload_register(array('ComposerAutoloaderInita478c0bdc9041edcc4f485e8fb39b90d', 'loadClassLoader'), true, true);
self::$loader = $loader = new \Composer\Autoload\ClassLoader();
- spl_autoload_unregister(array('ComposerAutoloaderInitd0f40897631bfac5572c9d06d82344bf', 'loadClassLoader'));
-
- $vendorDir = dirname(__DIR__);
- $baseDir = dirname($vendorDir);
+ spl_autoload_unregister(array('ComposerAutoloaderInita478c0bdc9041edcc4f485e8fb39b90d', 'loadClassLoader'));
$map = require __DIR__ . '/autoload_namespaces.php';
foreach ($map as $namespace => $path) {
@@ -47,7 +44,7 @@ class ComposerAutoloaderInitd0f40897631bfac5572c9d06d82344bf
}
}
-function composerRequired0f40897631bfac5572c9d06d82344bf($file)
+function composerRequirea478c0bdc9041edcc4f485e8fb39b90d($file)
{
require $file;
}
diff --git a/vendor/composer/installed.json b/vendor/composer/installed.json
index bd9d342fb..42f46fb2c 100644
--- a/vendor/composer/installed.json
+++ b/vendor/composer/installed.json
@@ -1,49 +1,4 @@
[
- {
- "name": "monolog/monolog",
- "version": "1.0.2",
- "version_normalized": "1.0.2.0",
- "source": {
- "type": "git",
- "url": "https://github.com/Seldaek/monolog.git",
- "reference": "b704c49a3051536f67f2d39f13568f74615b9922"
- },
- "dist": {
- "type": "zip",
- "url": "https://api.github.com/repos/Seldaek/monolog/zipball/b704c49a3051536f67f2d39f13568f74615b9922",
- "reference": "b704c49a3051536f67f2d39f13568f74615b9922",
- "shasum": ""
- },
- "require": {
- "php": ">=5.3.0"
- },
- "time": "2011-10-24 09:39:02",
- "type": "library",
- "installation-source": "dist",
- "autoload": {
- "psr-0": {
- "Monolog": "src/"
- }
- },
- "notification-url": "https://packagist.org/downloads/",
- "license": [
- "MIT"
- ],
- "authors": [
- {
- "name": "Jordi Boggiano",
- "email": "j.boggiano@seld.be",
- "homepage": "http://seld.be",
- "role": "Developer"
- }
- ],
- "description": "Logging for PHP 5.3",
- "homepage": "http://github.com/Seldaek/monolog",
- "keywords": [
- "log",
- "logging"
- ]
- },
{
"name": "sabre/vobject",
"version": "2.1.4",
@@ -96,17 +51,17 @@
},
{
"name": "sabre/dav",
- "version": "1.8.9",
- "version_normalized": "1.8.9.0",
+ "version": "1.8.10",
+ "version_normalized": "1.8.10.0",
"source": {
"type": "git",
"url": "https://github.com/fruux/sabre-dav.git",
- "reference": "25e095469e44d195cd255bdce55ce473224558bc"
+ "reference": "0d064536ed3c7974e486b6ebb5b17ad7a974fe18"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/fruux/sabre-dav/zipball/25e095469e44d195cd255bdce55ce473224558bc",
- "reference": "25e095469e44d195cd255bdce55ce473224558bc",
+ "url": "https://api.github.com/repos/fruux/sabre-dav/zipball/0d064536ed3c7974e486b6ebb5b17ad7a974fe18",
+ "reference": "0d064536ed3c7974e486b6ebb5b17ad7a974fe18",
"shasum": ""
},
"require": {
@@ -127,15 +82,14 @@
},
"require-dev": {
"evert/phpdoc-md": "~0.0.7",
- "phing/phing": "2.4.14",
- "phpunit/phpunit": "3.7.*"
+ "phpunit/phpunit": "~4.0.0"
},
"suggest": {
"ext-apc": "*",
"ext-curl": "*",
"ext-pdo": "*"
},
- "time": "2014-02-26 22:17:11",
+ "time": "2014-05-16 00:14:02",
"bin": [
"bin/sabredav"
],
@@ -157,7 +111,7 @@
"authors": [
{
"name": "Evert Pot",
- "email": "evert@rooftopsolutions.nl",
+ "email": "me@evertpot.com",
"homepage": "http://evertpot.com/",
"role": "Developer"
}
diff --git a/vendor/sabre/dav/.travis.yml b/vendor/sabre/dav/.travis.yml
index baffa5b97..9c98702f0 100644
--- a/vendor/sabre/dav/.travis.yml
+++ b/vendor/sabre/dav/.travis.yml
@@ -17,6 +17,7 @@ services:
before_script:
- mysql -e 'create database sabredav'
+ - composer self-update
- composer install --prefer-source
# - echo "zend.enable_gc=0" >> `php --ini | grep "Loaded Configuration" | sed -e "s|.*:\s*||"`
diff --git a/vendor/sabre/dav/ChangeLog b/vendor/sabre/dav/ChangeLog
index e41a6c88a..92fe1a231 100644
--- a/vendor/sabre/dav/ChangeLog
+++ b/vendor/sabre/dav/ChangeLog
@@ -1,3 +1,7 @@
+1.8.10-stable (2014-05-15)
+ * The zip release ships with sabre/vobject 2.1.4.
+ * includes changes from version 1.7.12.
+
1.8.9-stable (2014-02-26)
* The zip release ships with sabre/vobject 2.1.3.
* includes changes from version 1.7.11.
@@ -57,6 +61,26 @@
* Added: The Proxy principal classes now both implement an interface, for
greater flexiblity.
+1.7.13-stable (????-??-??)
+ * Changed: Removed phing and went with a custom build script for now.
+
+1.7.12-stable (2014-05-15)
+ * The zip release ships with sabre/vobject 2.1.4.
+ * Updated: Issue #439. Lots of updates in PATCH support. The
+ Sabre_DAV_PartialUpdate_IFile interface is now deprecated and will be
+ removed in a future version.
+ * Fixed: Restoring old setting after changing
+ libxml_disable_entity_loader.
+ * Fixed: Issue #422: Preconditions were not being set on PUT on non-
+ existant files. Not really a chance for data-loss, but incorrect
+ nevertheless.
+ * Fixed: Issue #427: Now checking preconditions on DELETE requests.
+ * Fixed: Issue #428: Etag check with If: fails if the target is a
+ collection.
+ * Fixed: Issue #393: PATCH request with missing end-range was handled
+ incorrectly.
+ * Added: Sabre_DAV_Exception_LengthRequired to omit 411 errors.
+
1.7.11-stable (2014-02-26)
* The zip release ships with sabre/vobject 2.1.3.
* Fixed: Issue #407: large downloads failed.
diff --git a/vendor/sabre/dav/bin/build.php b/vendor/sabre/dav/bin/build.php
new file mode 100644
index 000000000..11cca1e61
--- /dev/null
+++ b/vendor/sabre/dav/bin/build.php
@@ -0,0 +1,137 @@
+ [
+ 'init', 'test', 'clean',
+ ],
+ 'markrelease' => [
+ 'init', 'test', 'clean',
+ ],
+ 'clean' => [],
+ 'test' => [
+ 'composerupdate',
+ ],
+ 'init' => [],
+ 'composerupdate' => [],
+ ];
+
+$default = 'buildzip';
+
+$baseDir = __DIR__ . '/../';
+chdir($baseDir);
+
+$currentTask = $default;
+if ($argc > 1) $currentTask = $argv[1];
+$version = null;
+if ($argc > 2) $version = $argv[2];
+
+if (!isset($tasks[$currentTask])) {
+ echo "Task not found: ", $currentTask, "\n";
+ die(1);
+}
+
+// Creating the dependency graph
+$newTaskList = [];
+$oldTaskList = [$currentTask => true];
+
+while(count($oldTaskList)>0) {
+
+ foreach($oldTaskList as $task=>$foo) {
+
+ if (!isset($tasks[$task])) {
+ echo "Dependency not found: " . $task, "\n";
+ die(1);
+ }
+ $dependencies = $tasks[$task];
+
+ $fullFilled = true;
+ foreach($dependencies as $dependency) {
+ if (isset($newTaskList[$dependency])) {
+ // Already in the fulfilled task list.
+ continue;
+ } else {
+ $oldTaskList[$dependency] = true;
+ $fullFilled = false;
+ }
+
+ }
+ if ($fullFilled) {
+ unset($oldTaskList[$task]);
+ $newTaskList[$task] = 1;
+ }
+
+ }
+
+}
+
+foreach(array_keys($newTaskList) as $task) {
+
+ echo "task: " . $task, "\n";
+ call_user_func($task);
+ echo "\n";
+
+}
+
+function init() {
+
+ global $version;
+ if (!$version) {
+ include __DIR__ . '/../vendor/autoload.php';
+ $version = Sabre\DAV\Version::VERSION;
+ }
+
+ echo " Building sabre/dav " . $version, "\n";
+
+}
+
+function clean() {
+
+ global $baseDir;
+ echo " Removing build files\n";
+ $outputDir = $baseDir . '/build/SabreDAV';
+ if (is_dir($outputDir)) {
+ system('rm -r ' . $baseDir . '/build/SabreDAV');
+ }
+
+}
+
+function composerupdate() {
+
+ global $baseDir;
+ echo " Updating composer packages to latest version\n\n";
+ system('cd ' . $baseDir . '; composer update --dev');
+}
+
+function test() {
+
+ global $baseDir;
+
+ echo " Running all unittests.\n";
+ echo " This may take a while.\n\n";
+ system(__DIR__ . '/phpunit --configuration ' . $baseDir . '/tests/phpunit.xml --stop-on-failure', $code);
+ if ($code != 0) {
+ echo "PHPUnit reported error code $code\n";
+ die(1);
+ }
+
+}
+
+function buildzip() {
+
+ global $baseDir, $version;
+ echo " Asking composer to download sabre/dav $version\n\n";
+ system("composer create-project --no-dev sabre/dav build/SabreDAV $version", $code);
+ if ($code!==0) {
+ echo "Composer reported error code $code\n";
+ die(1);
+ }
+ //
+
+ echo "\n";
+ echo "Zipping the sabredav distribution\n\n";
+ system('cd build; zip -qr sabredav-' . $version . '.zip SabreDAV');
+
+ echo "Done.";
+
+}
diff --git a/vendor/sabre/dav/build.xml b/vendor/sabre/dav/build.xml
deleted file mode 100644
index 0f70f8199..000000000
--- a/vendor/sabre/dav/build.xml
+++ /dev/null
@@ -1,72 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
- Running composer
-
-
-
-
-
-
-
-
-
-
-
- Creating Git release tag
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- Creating api documentation using PHP documentor
- Writing to ${sabredav.apidocspath}
-
-
-
-
-
-
-
-
-
- getProject()->setNewProperty('sabredav.version',\Sabre\DAV\Version::VERSION);
- $this->getProject()->setNewProperty('sabredav.stability',\Sabre\DAV\Version::STABILITY);
- $this->getProject()->setNewProperty('sabredav.ucstability',ucwords(Sabre\DAV\Version::STABILITY));
-
- }
-
- }
-
- ]]>
-
- SabreDAV version ${sabredav.version}
-
-
-
-
diff --git a/vendor/sabre/dav/docs/caldav-ctag.txt b/vendor/sabre/dav/docs/caldav-ctag.txt
deleted file mode 100644
index 4787ca260..000000000
--- a/vendor/sabre/dav/docs/caldav-ctag.txt
+++ /dev/null
@@ -1,336 +0,0 @@
-
-
-
-Calendar Server Extension C. Daboo
- Apple
- May 3, 2007
-
-
- Calendar Collection Entity Tag (CTag) in CalDAV
- caldav-ctag-02
-
-Abstract
-
- This specification defines an extension to CalDAV that provides a
- fast way for a client to determine whether the contents of a calendar
- collection may have changed.
-
-
-Table of Contents
-
- 1. Introduction . . . . . . . . . . . . . . . . . . . . . . . . . 2
- 2. Conventions Used in This Document . . . . . . . . . . . . . . . 2
- 3. Overview . . . . . . . . . . . . . . . . . . . . . . . . . . . 3
- 3.1. Server . . . . . . . . . . . . . . . . . . . . . . . . . . 3
- 3.2. Client . . . . . . . . . . . . . . . . . . . . . . . . . . 3
- 4. New features in CalDAV . . . . . . . . . . . . . . . . . . . . 3
- 4.1. getctag WebDAV Property . . . . . . . . . . . . . . . . . . 4
- 5. Security Considerations . . . . . . . . . . . . . . . . . . . . 4
- 6. IANA Considerations . . . . . . . . . . . . . . . . . . . . . . 5
- 7. Normative References . . . . . . . . . . . . . . . . . . . . . 5
- Appendix A. Acknowledgments . . . . . . . . . . . . . . . . . . . 5
- Appendix B. Change History . . . . . . . . . . . . . . . . . . . . 5
- Author's Address . . . . . . . . . . . . . . . . . . . . . . . . . 6
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-Daboo [Page 1]
-
- CalDAV Proxy May 2007
-
-
-1. Introduction
-
- In CalDAV [RFC4791] calendar data is stored in calendar collection
- resources. Clients need to "poll" calendar collections in order to
- find out what has changed since the last time they examined it.
- Currently that involves having to do a PROPFIND Depth:1 HTTP request,
- or a CALDAV:calendar-query REPORT request. When a calendar
- collection contains a large number of calendar resources those
- operations become expensive on the server.
-
- Calendar users often configure their clients to poll at short time
- intervals. So polling traffic to the server will be high, even
- though the frequency at which changes actually occur to a calendar is
- typically low.
-
- To improve on performance, this specification defines a new "calendar
- collection entity tag" (CTag) WebDAV property that is defined on
- calendar collections. When the calendar collection changes, the CTag
- value changes. Thus a client can cache the CTag at some point in
- time, then poll the collection only (i.e. PROPFIND Depth:0 HTTP
- requests) and determine if a change has happened based on the
- returned CTag value. If there is a change, it can then fall back to
- doing the full (Depth:1) poll of the collection to actually determine
- which resources in the collection changed.
-
- This extension also defines CTag's on CalDAV scheduling
- [I-D.desruisseaux-caldav-sched] Inbox and Outbox collections.
-
-
-2. Conventions Used in This Document
-
- 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].
-
- When XML element types in the namespaces "DAV:" and
- "urn:ietf:params:xml:ns:caldav" are referenced in this document
- outside of the context of an XML fragment, the string "DAV:" and
- "CALDAV:" will be prefixed to the element type names respectively.
-
- The namespace "http://calendarserver.org/ns/" is used for XML
- elements defined in this specification. When XML element types in
- this namespace are referenced in this document outside of the context
- of an XML fragment, the string "CS:" will be prefixed to the element
- type names respectively.
-
-
-
-
-
-
-Daboo [Page 2]
-
- CalDAV Proxy May 2007
-
-
-3. Overview
-
-3.1. Server
-
- For each calendar or scheduling Inbox or Outbox collection on the
- server, a new CS:getctag WebDAV property is present.
-
- The property value is an "opaque" token whose value is guaranteed to
- be unique over the lifetime of any calendar or scheduling Inbox or
- Outbox collection at a specific URI.
-
- Whenever a calendar resource is added to, modified or deleted from
- the calendar collection, the value of the CS:getctag property MUST
- change. Typically this change will occur when the DAV:getetag
- property on a child resource changes due to some protocol action. It
- could be the result of a change to the body or properties of the
- resource.
-
-3.2. Client
-
- The client starts off with an empty string as the initial value for
- the cached CTag of a calendar or scheduling Inbox or Outbox
- collection that it intends to synchronize with.
-
- When polling a calendar or scheduling Inbox or Outbox collection, the
- client issues a PROPFIND Depth:0 HTTP request, asking for the CS:
- getctag property to be returned.
-
- If the returned value of CS:getctag property matches the one
- currently cached for the calendar or scheduling Inbox or Outbox
- collection, then the collection contents have not changed and no
- further action is required until the next poll.
-
- If the returned value of CS:getctag property does not match the one
- found previously, then the contents of the calendar or scheduling
- Inbox or Outbox collection have changed. At that point the client
- should re-issue the PROPFIND Depth:1 request to get the collection
- changes in detail and the CS:getctag property value corresponding to
- the new state. The new CSgetctag property value should replace the
- one currently cached for that calendar or scheduling Inbox or Outbox
- collection.
-
-
-4. New features in CalDAV
-
-
-
-
-
-
-
-Daboo [Page 3]
-
- CalDAV Proxy May 2007
-
-
-4.1. getctag WebDAV Property
-
- Name: getctag
-
- Namespace: http://calendarserver.org/ns/
-
- Purpose: Specifies a "synchronization" token used to indicate when
- the contents of a calendar or scheduling Inbox or Outbox
- collection have changed.
-
- Conformance: This property MUST be defined on a calendar or
- scheduling Inbox or Outbox collection resource. It MUST be
- protected and SHOULD be returned by a PROPFIND DAV:allprop request
- (as defined in Section 12.14.1 of [RFC2518]).
-
- Description: The CS:getctag property allows clients to quickly
- determine if the contents of a calendar or scheduling Inbox or
- Outbox collection have changed since the last time a
- "synchronization" operation was done. The CS:getctag property
- value MUST change each time the contents of the calendar or
- scheduling Inbox or Outbox collection change, and each change MUST
- result in a value that is different from any other used with that
- collection URI.
-
- Definition:
-
-
-
- Example:
-
- ABCD-GUID-IN-THIS-COLLECTION-20070228T122324010340
-
-
-5. Security Considerations
-
- The CS:getctag property value changes whenever any resource in the
- collection or scheduling Inbox or Outbox changes. Thus a change to a
- resource that a user does not have read access to will result in a
- change in the CTag and the user will know that a change occurred.
- However, that user will not able to get additional details about
- exactly what changed as WebDAV ACLs [RFC3744] will prevent that. So
- this does expose the fact that there are potentially "hidden"
- resources in a calendar collection, but it does not expose any
- details about them.
-
-
-
-
-
-
-Daboo [Page 4]
-
- CalDAV Proxy May 2007
-
-
-6. IANA Considerations
-
- This document does not require any actions on the part of IANA.
-
-
-7. Normative References
-
- [I-D.desruisseaux-caldav-sched]
- Desruisseaux, B., "Scheduling Extensions to CalDAV",
- draft-desruisseaux-caldav-sched-03 (work in progress),
- January 2007.
-
- [RFC2119] Bradner, S., "Key words for use in RFCs to Indicate
- Requirement Levels", BCP 14, RFC 2119, March 1997.
-
- [RFC2518] Goland, Y., Whitehead, E., Faizi, A., Carter, S., and D.
- Jensen, "HTTP Extensions for Distributed Authoring --
- WEBDAV", RFC 2518, February 1999.
-
- [RFC3744] Clemm, G., Reschke, J., Sedlar, E., and J. Whitehead, "Web
- Distributed Authoring and Versioning (WebDAV) Access
- Control Protocol", RFC 3744, May 2004.
-
- [RFC4791] Daboo, C., Desruisseaux, B., and L. Dusseault,
- "Calendaring Extensions to WebDAV (CalDAV)", RFC 4791,
- March 2007.
-
-
-Appendix A. Acknowledgments
-
- This specification is the result of discussions between the Apple
- calendar server and client teams.
-
-
-Appendix B. Change History
-
- Changes from -01:
-
- 1. Updated to RFC4791 reference.
-
- 2. Added text indicating that ctag applies to schedule Inbox and
- Outbox as well.
-
- Changes from -00:
-
- 1. Relaxed requirement so that any type of change to a child
- resource can trigger a CTag change (similar behavior to ETag).
-
-
-
-
-Daboo [Page 5]
-
- CalDAV Proxy May 2007
-
-
-Author's Address
-
- Cyrus Daboo
- Apple Inc.
- 1 Infinite Loop
- Cupertino, CA 95014
- USA
-
- Email: cyrus@daboo.name
- URI: http://www.apple.com/
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-Daboo [Page 6]
-
diff --git a/vendor/sabre/dav/docs/caldav-notifications.txt b/vendor/sabre/dav/docs/caldav-notifications.txt
deleted file mode 100644
index 75c2e5e07..000000000
--- a/vendor/sabre/dav/docs/caldav-notifications.txt
+++ /dev/null
@@ -1,1568 +0,0 @@
-
-
-
-Calendar Server Extension C. Daboo
- Apple Inc.
- March 19, 2012
-
-
- CalDAV: Calendar User Notifications
-
-Abstract
-
- This specification defines an extension to CalDAV that allows the
- server to provide notifications to calendar users.
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-Daboo [Page 1]
-
- CalDAV User Notifications March 2012
-
-
-Table of Contents
-
- 1. Introduction . . . . . . . . . . . . . . . . . . . . . . . . . 3
- 2. Open Issues . . . . . . . . . . . . . . . . . . . . . . . . . 3
- 3. Conventions Used in This Document . . . . . . . . . . . . . . 3
- 4. Notifications . . . . . . . . . . . . . . . . . . . . . . . . 3
- 4.1. Additional Principal Properties . . . . . . . . . . . . . 4
- 4.1.1. CS:notification-URL Property . . . . . . . . . . . . . 5
- 4.2. Properties on Notification Resources . . . . . . . . . . . 5
- 4.2.1. CS:notificationtype Property . . . . . . . . . . . . . 5
- 4.3. XML Element Definitions . . . . . . . . . . . . . . . . . 6
- 4.3.1. CS:notifications . . . . . . . . . . . . . . . . . . . 6
- 4.3.2. CS:notification . . . . . . . . . . . . . . . . . . . 6
- 4.3.3. CS:dtstamp . . . . . . . . . . . . . . . . . . . . . . 7
- 5. Notification Definitions . . . . . . . . . . . . . . . . . . . 7
- 5.1. System Status Notification . . . . . . . . . . . . . . . . 7
- 5.1.1. CS:systemstatus Element Definition . . . . . . . . . . 8
- 5.2. Quota Notification . . . . . . . . . . . . . . . . . . . . 8
- 5.2.1. CS:quotastatus Element Definition . . . . . . . . . . 9
- 5.3. Resource Changes Notification . . . . . . . . . . . . . . 10
- 5.3.1. CS:resource-change Element Definition . . . . . . . . 11
- 5.3.2. CS:calendar-changes Element Definition . . . . . . . . 15
- 5.3.2.1. Handling Recurrences in CS:calendar-changes . . . 17
- 5.3.3. CS:deleted-details Element Definition . . . . . . . . 18
- 5.3.4. CS:notify-changes Property . . . . . . . . . . . . . . 20
- 6. Security Considerations . . . . . . . . . . . . . . . . . . . 20
- 7. IANA Considerations . . . . . . . . . . . . . . . . . . . . . 21
- 8. Acknowledgments . . . . . . . . . . . . . . . . . . . . . . . 21
- 9. References . . . . . . . . . . . . . . . . . . . . . . . . . . 21
- 9.1. Normative References . . . . . . . . . . . . . . . . . . . 21
- 9.2. Informative References . . . . . . . . . . . . . . . . . . 21
- Appendix A. Examples . . . . . . . . . . . . . . . . . . . . . . 21
- A.1. Resource Created . . . . . . . . . . . . . . . . . . . . . 21
- A.2. Resource Updated - Property Change . . . . . . . . . . . . 22
- A.3. Resource Updated - Parameter Change . . . . . . . . . . . 23
- A.4. Resource Updated - Multiple Instances Change . . . . . . . 23
- A.5. Resource Updated - Multiple User Change . . . . . . . . . 24
- A.6. Resource Deleted . . . . . . . . . . . . . . . . . . . . . 25
- A.7. Collection Created . . . . . . . . . . . . . . . . . . . . 26
- A.8. Collection Updated . . . . . . . . . . . . . . . . . . . . 26
- A.9. Collection Deleted . . . . . . . . . . . . . . . . . . . . 27
- Author's Address . . . . . . . . . . . . . . . . . . . . . . . . . 27
-
-
-
-
-
-
-
-
-
-Daboo [Page 2]
-
- CalDAV User Notifications March 2012
-
-
-1. Introduction
-
- CalDAV [RFC4791] provides a way for calendar users to store calendar
- data and exchange this data via scheduling operations. Based on the
- WebDAV [RFC4918] protocol, it also includes the ability to manage
- access to calendar data via the WebDAV ACL [RFC3744] extension.
-
- It is often useful for servers to communicate arbitrary information
- to calendar users, e.g., system status, message of the day, quota
- warnings, changes to shared resources made by others etc. This
- specification defines a generic "notification" mechanism that allows
- a server to do that. Whilst primarily aimed at CalDAV [RFC4791],
- this mechanism has been designed to be adaptable to WebDAV [RFC4918].
-
-
-2. Open Issues
-
- 1. Define specific child elements for system status notification,
- e.g. "server-maintenance-period", "server-read-only-period",
- "client-upgrade-required".
-
-
-3. Conventions Used in This Document
-
- 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].
-
- When XML element types in the namespaces "DAV:" and
- "urn:ietf:params:xml:ns:caldav" are referenced in this document
- outside of the context of an XML fragment, the string "DAV:" and
- "CALDAV:" will be prefixed to the element type names respectively.
-
- The namespace "http://calendarserver.org/ns/" is used for XML
- elements defined in this specification. When XML element types in
- that namespace are referenced in this document outside of the context
- of an XML fragment, the string "CS:" will be prefixed to the element
- type names.
-
-
-4. Notifications
-
- When this feature is available, a CS:notification-URL (Section 4.1.1)
- property appears on principal resources for those principals who are
- able to receive notifications. That property specifies a single DAV:
- href element whose content refers to a WebDAV collection resource.
- Notification "messages" are deposited into this collection and can be
- retrieved by clients and acted on accordingly.
-
-
-
-Daboo [Page 3]
-
- CalDAV User Notifications March 2012
-
-
- The notification collection referenced by the CS:notification-URL
- (Section 4.1.1) property MUST have a DAV:resourcetype property with
- DAV:collection and CS:notifications (Section 4.3.1) child elements.
-
- Notification "messages" are XML documents stored as resources in the
- notification collection. Each XML document contains a CS:
- notification (Section 4.3.2) element as its root. The root element
- contains a CS:dtstamp element, and one additional element which
- represents the type of notification being conveyed in the message.
- That child element will typically contain additional content that
- describes the notification.
-
- Each notification resource has a CS:notificationtype (Section 4.2.1)
- property which contains as its single child element an empty element
- that matches the child element of the notification resource XML
- document root. Any attributes on the child element in the XML
- document are also present in the property child element.
-
- Notifications are automatically generated by the server (perhaps in
- response to a action) with an appropriate resource stored in the
- notifications collection of the user to whom the notification is
- targeted. Clients SHOULD monitor the notification collection looking
- for new notification resources. When doing so, clients SHOULD look
- at the CS:notificationtype (Section 4.2.1) property to ensure that
- the notification is of a type that the client can handle. Once a
- client has handled the notification in whatever way is appropriate it
- SHOULD delete the notification resource. Clients SHOULD remove
- notifications being displayed to a user when the notification
- resource is removed from the notification collection, to enable the
- user to dismiss a notification on one device and have it
- automatically removed from others. Clients MUST ignore all
- notifications for types they do not recognize. Servers MAY delete
- notification resources on their own if they determine that the
- notifications are no longer relevant or valid. Servers MAY coalesce
- notifications as appropriate.
-
- Servers MUST prevent clients from adding resources in the
- notification collection.
-
-4.1. Additional Principal Properties
-
- This section defines new properties for WebDAV principal resources as
- defined in RFC3744 [RFC3744]. These properties are likely to be
- protected but the server MAY allow them to be written by appropriate
- users.
-
-
-
-
-
-
-Daboo [Page 4]
-
- CalDAV User Notifications March 2012
-
-
-4.1.1. CS:notification-URL Property
-
- Name: notification-URL
-
- Namespace: http://calendarserver.org/ns/
-
- Purpose: Identify the URL of the notification collection owned by
- the associated principal resource.
-
- Protected: This property SHOULD be protected.
-
- PROPFIND behavior: This property SHOULD NOT be returned by a
- PROPFIND allprop request (as defined in Section 14.2 of
- [RFC4918]).
-
- COPY/MOVE behavior: This property value SHOULD be preserved in COPY
- and MOVE operations.
-
- Description: This property is needed for a client to determine where
- the notification collection of the current user is located so that
- processing of notification messages can occur. If not present,
- then the associated calendar user is not enabled for notification
- messages on the server.
-
- Definition:
-
-
-
-4.2. Properties on Notification Resources
-
- The following new WebDAV properties are defined for notification
- resources.
-
-4.2.1. CS:notificationtype Property
-
- Name: notificationtype
-
- Namespace: http://calendarserver.org/ns/
-
- Purpose: Identify the type of notification of the corresponding
- resource.
-
- Protected: This property MUST be protected.
-
- PROPFIND behavior: This property SHOULD NOT be returned by a
- PROPFIND allprop request (as defined in Section 14.2 of
- [RFC4918]).
-
-
-
-
-Daboo [Page 5]
-
- CalDAV User Notifications March 2012
-
-
- COPY/MOVE behavior: This property value MUST be preserved in COPY
- and MOVE operations.
-
- Description: This property allows a client, via a PROPFIND Depth:1
- request, to quickly find notification messages that the client can
- handle in a notification collection. The single child element is
- the notification resource root element's child defining the
- notification itself. This element MUST be empty, though any
- attributes on the element in the notification resource MUST be
- present in the property element.
-
- Definition:
-
-
-
-
-4.3. XML Element Definitions
-
-4.3.1. CS:notifications
-
- Name: notifications
-
- Namespace: http://calendarserver.org/ns/
-
- Purpose: Indicates a notification collection.
-
- Description: This XML element is used in a DAV:resourcetype element
- to indicate that the corresponding resource is a notification
- collection.
-
- Definition:
-
-
-
-4.3.2. CS:notification
-
- Name: notification
-
- Namespace: http://calendarserver.org/ns/
-
- Purpose: Notification message root element.
-
- Description: The root element used in notification resources.
-
-
-
-
-
-
-
-Daboo [Page 6]
-
- CalDAV User Notifications March 2012
-
-
- Definition:
-
-
-
-
-4.3.3. CS:dtstamp
-
- Name: dtstamp
-
- Namespace: http://calendarserver.org/ns/
-
- Purpose: Date-time stamp.
-
- Description: Contains the date-time stamp corresponding to the
- creation of a notification message, using the format defined in
- [RFC3339], or the "compact" format without "-" and ":" characters
- between date and time elements, respectively.
-
- Definition:
-
-
-
-
-
-5. Notification Definitions
-
- This section defines a set of common notification types.
-
-5.1. System Status Notification
-
- The system status notification is used to convey a URI and/or textual
- description to the user. The assumption is that the URI points to a
- webpage where current system status is described in detail, with the
- provided description being a summary of that. A "type" attribute on
- the element is used to indicate the importance of the current status
- notification, and has the values "low", "medium" and "high",
- representing the increasing level of importance of the message
- respectively.
-
- Servers might have knowledge of specific calendar user language
- preferences, in which case it MAY localise the CS:description value
- as appropriate based on the calendar user accessing the notification,
- but if it does, it SHOULD include an xml:lang attribute on the CS:
- description element to indicate what language is being used.
-
-
-
-
-
-Daboo [Page 7]
-
- CalDAV User Notifications March 2012
-
-
-5.1.1. CS:systemstatus Element Definition
-
- Name: systemstatus
-
- Namespace: http://calendarserver.org/ns/
-
- Purpose: Indicates a system status notification.
-
- Description: This XML element is used in a CS:notification element
- to describe a system status notification.
-
- Definition:
-
-
-
-
-
-
-
-
- Example: This is an example of the body of a notification resource
- for an emergency system outage:
-
-
-
- 2011-12-09T11:12:53-05:00
-
- http://example.com/emergency_shutdown.html
- Emergency shutdown now
-
-
-
- Example: This is an example of the WebDAV property on the example
- notification resource above:
-
-
-
-
-
-
-5.2. Quota Notification
-
- The quota notification is used to convey information about the status
- of one or more quotas for the user. The notification contains
- elements for different types of quota being reported to the user. In
-
-
-
-Daboo [Page 8]
-
- CalDAV User Notifications March 2012
-
-
- some cases these may be warnings (e.g., a user getting to 80% of
- their quota limit), or in other cases errors (e.g., a user exceeding
- their quota).
-
-5.2.1. CS:quotastatus Element Definition
-
- Name: quotastatus
-
- Namespace: http://calendarserver.org/ns/
-
- Purpose: Indicates a quota status notification.
-
- Description: This XML element is used in a CS:notification element
- to describe a quota status notification. The CS:quota-percent-
- used element contains an integer greater than or equal to zero.
- If the value is greater than or equal to 100, then the user's
- quota has been reached or exceeded. The DAV:href element contains
- a URI for a webpage where the user can go to get further
- information about their quota status or take corrective action.
-
- Definition:
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- Example: This is an example of the body of a notification resource
- for a quota warning:
-
-
-
-
-
-
-
-
-
-
-
-
-Daboo [Page 9]
-
- CalDAV User Notifications March 2012
-
-
-
-
- 2011-12-09T11:12:53-05:00
-
-
-
- 80
- https://example.com/your-account.html
-
-
-
-
- Example: This is an example of the body of a notification resource
- for a quota that has been exceeded, and a count-based limit that
- is shown as a warning:
-
-
-
- 2011-12-09T11:12:53-05:00
-
-
-
- 102
- https://example.com/fix-account.html
-
-
-
- 82
- 4980
- https://example.com/buy-more-space.html
-
-
-
-
-5.3. Resource Changes Notification
-
- The resource change notification is used to inform the user of new,
- updated or deleted resources caused by changes made by someone else
- (note: servers MUST NOT generate notifications to users for changes
- they themselves make, though the possibility of an automated process
- acting on behalf of a user needs to be considered). This
- notification can be used by clients to show changes that a user can
- acknowledge in their own time. When the notification is present, it
- can be displayed on all devices a user is accessing their data from.
- When the user acknowledges and dismisses the notification on one
- device, other devices SHOULD also remove the notification when they
-
-
-
-Daboo [Page 10]
-
- CalDAV User Notifications March 2012
-
-
- next synchronize the notification collection.
-
- A new WebDAV property CS:notify-changes (Section 5.3.4) is defined
- for calendar collections. This allows users to enable or disable the
- sending of resource change notifications for the calendar and its
- child resources. Servers MUST allow users to set this property on a
- per-user basis on any calendars accessible to them. Servers MUST
- honor the chosen setting to enable or disable change notifications.
-
- Servers can send notifications for calendar object resources, and
- ones for calendar collections. Servers SHOULD coalesce notifications
- that refer to the same resource into a single notification resource,
- containing multiple CS:created, CS:updated or CS:deleted elements all
- with the same DAV:href child element value. Servers MAY coalesce
- changes to multiple resources into a change notification for the
- parent collection of those resources and use a CS:collection-changes
- element to indicate the number of individual resources that changed.
-
-5.3.1. CS:resource-change Element Definition
-
- Name: resource-change
-
- Namespace: http://calendarserver.org/ns/
-
- Purpose: Indicates that resources have been created, updated or
- deleted.
-
- Description: This XML element is used in a CS:notification element
- to describe a resource change notification. It can describe a
- change directly to a calendar object resource or to a calendar
- collection.
-
- When used for a calendar object resource change, it can contain
- one of the CS:created, or CS:deleted elements, or multiple CS:
- updated elements, which indicate a created, deleted or updated
- resource, respectively. The DAV:href element within those
- elements, contains the URI of the changed resource, optional
- information about who changed the resource and when that change
- was made (the CS:changed-by element), and information specific to
- the nature of the change. Servers SHOULD coalesce resource change
- notifications for the same resource into a single notification
- resource where possible. The CS:updated element optionally
- contains CS:content and/or DAV:prop elements to indicate a change
- to the body of the resource or resource WebDAV properties,
- respectively. The DAV:prop element MAY contain a list of property
- elements to indicate which properties changed. The CS:updated
- element can also contain zero or more CS:calendar-changes elements
- to list details of the changes. If no CS:calendar-changes element
-
-
-
-Daboo [Page 11]
-
- CalDAV User Notifications March 2012
-
-
- is present, the specific details are not provided, and clients
- will need to assume that some set of changes occurred, but the
- server is unwilling to disclose the full details. The CS:deleted
- element can also contain zero or more CS:deleted-details elements
- to list details of the deleted resource.
-
- When used for a calendar collection change, it can contain a CS:
- collection-changes element. The DAV:href element within that
- element, contains the URI of the changed calendar collection. The
- DAV:prop element indicates a change to WebDAV properties on the
- calendar collection resource. The CS:child-created, CS:child-
- updated, and CS:child-deleted elements each contain a positive
- integer value indicating how many child resources were added,
- updated or deleted in the collection, respectively.
-
- Definition:
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-Daboo [Page 12]
-
- CalDAV User Notifications March 2012
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- Example: This is an example of the body of a notification resource
- for changes where one resource has been created:
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-Daboo [Page 13]
-
- CalDAV User Notifications March 2012
-
-
-
-
- 2011-12-09T11:51:14-05:00
-
-
- http://example.com/cyrus/calendar/new.ics
-
- Cyrus Daboo
- /principals/cyrusdaboo
-
-
-
-
-
- Example: This is an example of the body of a notification resource
- for changes where a resource has been updated twice. One of the
- updated resources elements contains additional information
- indicating which recurrence instances in the iCalendar data were
- changed:
-
-
-
- 2011-12-09T11:51:14-05:00
-
-
- http://example.com/cyrus/calendar/event.ics
-
- Oliver
- Daboo
- mailto:oliver@example.com
-
-
-
- http://example.com/cyrus/calendar/event.ics
-
- Eleanor
- Daboo
- mailto:eleanor@example.com
-
-
-
-
-
-
-
-
-
-
-
-Daboo [Page 14]
-
- CalDAV User Notifications March 2012
-
-
- Example: This is an example of the body of a notification resource
- for changes where one resource has been deleted:
-
-
-
- 2011-12-09T11:51:14-05:00
-
-
- http://example.com/cyrus/calendar/old.ics
-
- Cyrus
- Daboo
- /principals/cyrusdaboo
-
-
-
-
-
- Example: This example is the same as the previous three, except that
- all the individual resource changes have been coalesced into a
- single notification about changes to the parent calendar
- collection:
-
-
-
- 2011-12-09T11:51:14-05:00
-
-
- http://example.com/cyrus/calendar/
- 1
- 2
- 1
-
-
-
-
-5.3.2. CS:calendar-changes Element Definition
-
- Name: calendar-changes
-
- Namespace: http://calendarserver.org/ns/
-
- Purpose: Indicates which portions of an calendar object resource
- have changed, or provides details of deleted calendar object
- resources.
-
-
-
-
-Daboo [Page 15]
-
- CalDAV User Notifications March 2012
-
-
- Description: This XML element is used in a CS:updated element to
- describe how a calendar object resource changed, or in a CS:
- deleted element to provide details of a deleted resource. It can
- identify the master instance, or individual recurrence instances,
- and for each indicate which iCalendar properties and parameters
- changed during the update for which the notification was
- generated. For details of handling recurrences please see
- Section 5.3.2.1.
-
- Definition:
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- Example: This example indicates that a non-recurring component, or
- the master component in a recurring component, was changed and
- that the change was to the "SUMMARY" iCalendar property.
-
-
-
-
-
-
-Daboo [Page 16]
-
- CalDAV User Notifications March 2012
-
-
-
-
-
-
-
-
-
-
-
- Example: This example indicates that an instance of a recurring
- component was changed and that the change was to the "DTSTART"
- iCalendar property.
-
-
-
- 20111215T160000Z
-
-
-
-
-
-
-5.3.2.1. Handling Recurrences in CS:calendar-changes
-
- Changes to recurring components can be complex. This section
- describes the possible set of changes that could occur, and what the
- CS:calendar-changes element will contain as a result.
-
- Master exists, unchanged override added In this case, a CS:
- recurrence element will be present, containing a CS:recurrence-id
- element with a value equal to the RECURRENCE-ID property value (in
- UTC) of the added component. A CS:added element will be present.
- There will not be any CS:removed or CS:changes elements.
-
- Master exists, changed override added In this case, a CS:recurrence
- element will be present, containing a CS:recurrence-id element
- with a value equal to the RECURRENCE-ID property value (in UTC) of
- the added component. Both CS:added and CS:changes elements will
- be present. There will not be a CS:removed element.
-
- Master exists, override changed In this case, a CS:recurrence
- element will be present, containing a CS:recurrence-id element
- with a value equal to the RECURRENCE-ID property value (in UTC) of
- the added component. A CS:changes element will be present. There
- will not be any CS:added or CS:removed elements.
-
-
-
-
-
-
-Daboo [Page 17]
-
- CalDAV User Notifications March 2012
-
-
- Master exists, override removed In this case, a CS:recurrence
- element will be present, containing a CS:recurrence-id element
- with a value equal to the RECURRENCE-ID property value (in UTC) of
- the added component. A CS:removed element will be present. There
- will not be a CS:added element. A CS:changes element will only be
- present if the removed component differs from the "derived" master
- instance.
-
- Master exists, override cancelled In this case, a CS:recurrence
- element will be present, containing a CS:recurrence-id element
- with a value equal to the RECURRENCE-ID property value (in UTC) of
- the added component. A CS:removed element will be present. There
- will not be any CS:added or CS:changes element. There will also
- be a CS:master element present, with an appropriate CS:changes
- element, likely covering a change to "RRULE" or addition of
- "EXDATE" properties.
-
- Master does not exist, override added In this case, a CS:recurrence
- element will be present, containing a CS:recurrence-id element
- with a value equal to the RECURRENCE-ID property value (in UTC) of
- the added component. A CS:added element will be present. There
- will not be a CS:removed or CS:changes element.
-
- Master does not exist, override changed In this case, a CS:
- recurrence element will be present, containing a CS:recurrence-id
- element with a value equal to the RECURRENCE-ID property value (in
- UTC) of the added component. A CS:changes element will be
- present. There will not be any CS:added or CS:removed elements.
-
- Master does not exist, override removed In this case, a CS:
- recurrence element will be present, containing a CS:recurrence-id
- element with a value equal to the RECURRENCE-ID property value (in
- UTC) of the added component. A CS:removed element will be
- present. There will not be any CS:added or CS:changes element.
-
-5.3.3. CS:deleted-details Element Definition
-
- Name: deleted-details
-
- Namespace: http://calendarserver.org/ns/
-
- Purpose: Provides summary information about a deleted resource or
- collection.
-
- Description: This XML element is used in a CS:deleted element to
- describe useful information about a deleted resource or
- collection, so clients can provide a meaningful notification
- message to users. This element has two variants: one for deletion
-
-
-
-Daboo [Page 18]
-
- CalDAV User Notifications March 2012
-
-
- of a calendar object resource, the other for deletion of a
- calendar collection.
-
- Definition:
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- Example: This example indicates deletion of a non-recurring event
- that was yet to occur at the time of deletion.
-
-
- VEVENT
- Birthday Party
-
- Holidays
-
-
-5.3.4. CS:notify-changes Property
-
- Name: notify-changes
-
- Namespace: http://calendarserver.org/ns/
-
- Purpose: Allows a user to specify whether resource change
- notifications are generated by the server.
-
- Protected: This property MUST NOT be protected.
-
- PROPFIND behavior: This property SHOULD NOT be returned by a
- PROPFIND allprop request (as defined in Section 14.2 of
- [RFC4918]).
-
- COPY/MOVE behavior: This property value MUST be preserved in COPY
- and MOVE operations.
-
- Description: This property allows a user to enable or disable the
- server generation of resource change notifications for the
- calendar collection, and all its child resources, on which the
- property resides. If the property is not present on a calendar
- collection, the client and server MUST assume that resource change
- notifications are enabled.
-
- Definition:
-
-
-
-
-
-
-
-
-6. Security Considerations
-
- Some notification mechanisms might allow a user to trigger a
- notification to be delivered to other users (e.g., an invitation to
- share a calendar). In such cases servers MUST ensure that suitable
- limits are placed on the number and frequency of such user generated
- notifications.
-
-
-
-Daboo [Page 20]
-
- CalDAV User Notifications March 2012
-
-
- TBD: More?
-
-
-7. IANA Considerations
-
- This document does not require any actions on the part of IANA.
-
-
-8. Acknowledgments
-
- This specification is the result of discussions between the various
- Apple calendar server and client teams.
-
-
-9. References
-
-9.1. Normative References
-
- [RFC2119] Bradner, S., "Key words for use in RFCs to Indicate
- Requirement Levels", BCP 14, RFC 2119, March 1997.
-
- [RFC3339] Klyne, G., Ed. and C. Newman, "Date and Time on the
- Internet: Timestamps", RFC 3339, July 2002.
-
- [RFC4918] Dusseault, L., "HTTP Extensions for Web Distributed
- Authoring and Versioning (WebDAV)", RFC 4918, June 2007.
-
-9.2. Informative References
-
- [RFC3744] Clemm, G., Reschke, J., Sedlar, E., and J. Whitehead, "Web
- Distributed Authoring and Versioning (WebDAV)
- Access Control Protocol", RFC 3744, May 2004.
-
- [RFC4791] Daboo, C., Desruisseaux, B., and L. Dusseault,
- "Calendaring Extensions to WebDAV (CalDAV)", RFC 4791,
- March 2007.
-
-
-Appendix A. Examples
-
- This section provides more detailed examples of resource change
- notifications for illustrative purposes only.
-
-A.1. Resource Created
-
- This is an example of the body of a notification resource where one
- resource has been created.
-
-
-
-
-Daboo [Page 21]
-
- CalDAV User Notifications March 2012
-
-
-
-
- 2011-12-09T11:51:14-05:00
-
-
- http://example.com/cyrus/calendar/new.ics
-
- Cyrus
- Daboo
- /principals/cyrusdaboo
-
-
-
-
-
-A.2. Resource Updated - Property Change
-
- This is an example of the body of a notification resource where one
- non-recurring event has had its "DTSTART" and "SUMMARY" iCalendar
- property values changed.
-
-
-
- 2011-12-09T11:51:14-05:00
-
-
- http://example.com/cyrus/calendar/new.ics
-
- Cyrus
- Daboo
- /principals/cyrusdaboo
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-Daboo [Page 22]
-
- CalDAV User Notifications March 2012
-
-
-A.3. Resource Updated - Parameter Change
-
- This is an example of the body of a notification resource where one
- non-recurring event has had the "PARTSTAT" iCalendar property
- parameter on an "ATTENDEE" property changed, and a "TRANSP" property
- added.
-
-
-
- 2011-12-09T11:51:14-05:00
-
-
- http://example.com/cyrus/calendar/new.ics
-
- Cyrus
- Daboo
- /principals/cyrusdaboo
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-A.4. Resource Updated - Multiple Instances Change
-
- This is an example of the body of a notification resource where two
- instances of a recurring event have their "DTSTART" and "SUMMARY"
- iCalendar property values changed.
-
-
-
-
-
-
-
-
-
-
-Daboo [Page 23]
-
- CalDAV User Notifications March 2012
-
-
-
-
- 2011-12-09T11:51:14-05:00
-
-
- http://example.com/cyrus/calendar/new.ics
-
- Cyrus
- Daboo
- /principals/cyrusdaboo
-
-
-
- 20120209T170000Z
-
-
-
-
-
-
- 20120210T170000Z
-
-
-
-
-
-
-
-
-
-
-A.5. Resource Updated - Multiple User Change
-
- This is an example of the body of a notification resource where two
- instances of a recurring event have their "DTSTART" and "SUMMARY"
- iCalendar property values changed. Each instance was changed by a
- different user.
-
-
-
-
-
-
-
-
-
-
-
-
-
-Daboo [Page 24]
-
- CalDAV User Notifications March 2012
-
-
-
-
- 2011-12-09T11:51:14-05:00
-
-
- http://example.com/cyrus/calendar/new.ics
-
- Cyrus
- Daboo
- /principals/cyrusdaboo
-
-
-
- 20120209T170000Z
-
-
-
-
-
-
-
-
- http://example.com/cyrus/calendar/new.ics
-
- Eric
- York
- /principals/ericyork
-
-
-
- 20120210T170000Z
-
-
-
-
-
-
-
-
-
-
-A.6. Resource Deleted
-
- This is an example of the body of a notification resource where one
- resource has been deleted. The resource was a VEVENT whose next
- occurrence was in the future on 20120210T170000Z.
-
-
-
-
-Daboo [Page 25]
-
- CalDAV User Notifications March 2012
-
-
-
-
- 2011-12-09T11:51:14-05:00
-
-
- http://example.com/cyrus/calendar/new.ics
-
- Cyrus
- Daboo
- /principals/cyrusdaboo
-
-
- VEVENT
- CalDAV Meeting
- 20120210T170000Z
-
-
-
-
-
-A.7. Collection Created
-
- This is an example of the body of a notification resource where a
- calendar collection has been created.
-
-
-
- 2011-12-09T11:51:14-05:00
-
-
- http://example.com/cyrus/new-calendar/
-
- Cyrus
- Daboo
- /principals/cyrusdaboo
-
-
-
-
-
-A.8. Collection Updated
-
- This is an example of the body of a notification resource where
- coalesced changes in a calendar collection are shown. In this case 1
- child resource was created, 2 updated, and 1 deleted.
-
-
-
-Daboo [Page 26]
-
- CalDAV User Notifications March 2012
-
-
-
-
- 2011-12-09T11:51:14-05:00
-
-
- http://example.com/cyrus/calendar/
- 1
- 2
- 1
-
-
-
-
-A.9. Collection Deleted
-
- This is an example of the body of a notification resource where a
- calendar collection has been deleted.
-
-
-
- 2011-12-09T11:51:14-05:00
-
-
- http://example.com/cyrus/old-calendar/
-
- Cyrus
- Daboo
- /principals/cyrusdaboo
-
-
- Holidays
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-Daboo [Page 27]
-
- CalDAV User Notifications March 2012
-
-
-Author's Address
-
- Cyrus Daboo
- Apple Inc.
- 1 Infinite Loop
- Cupertino, CA 95014
- USA
-
- Email: cyrus@daboo.name
- URI: http://www.apple.com/
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-Daboo [Page 28]
-
diff --git a/vendor/sabre/dav/docs/caldav-proxy.txt b/vendor/sabre/dav/docs/caldav-proxy.txt
deleted file mode 100644
index 2d96bfc82..000000000
--- a/vendor/sabre/dav/docs/caldav-proxy.txt
+++ /dev/null
@@ -1,560 +0,0 @@
-
-
-
-Calendar Server Extension C. Daboo
- Apple Computer
- May 3, 2007
-
-
- Calendar User Proxy Functionality in CalDAV
- caldav-cu-proxy-02
-
-Abstract
-
- This specification defines an extension to CalDAV that makes it easy
- for clients to setup and manage calendar user proxies, using the
- WebDAV Access Control List extension as a basis.
-
-
-Table of Contents
-
- 1. Introduction . . . . . . . . . . . . . . . . . . . . . . . . . 2
- 2. Conventions Used in This Document . . . . . . . . . . . . . . 2
- 3. Overview . . . . . . . . . . . . . . . . . . . . . . . . . . . 3
- 3.1. Server . . . . . . . . . . . . . . . . . . . . . . . . . . 3
- 3.2. Client . . . . . . . . . . . . . . . . . . . . . . . . . . 3
- 4. Open Issues . . . . . . . . . . . . . . . . . . . . . . . . . 4
- 5. New features in CalDAV . . . . . . . . . . . . . . . . . . . . 4
- 5.1. Proxy Principal Resource . . . . . . . . . . . . . . . . . 4
- 5.2. Privilege Provisioning . . . . . . . . . . . . . . . . . . 8
- 6. Security Considerations . . . . . . . . . . . . . . . . . . . 9
- 7. IANA Considerations . . . . . . . . . . . . . . . . . . . . . 9
- 8. Normative References . . . . . . . . . . . . . . . . . . . . . 9
- Appendix A. Acknowledgments . . . . . . . . . . . . . . . . . . . 9
- Appendix B. Change History . . . . . . . . . . . . . . . . . . . 10
- Author's Address . . . . . . . . . . . . . . . . . . . . . . . . . 10
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-Daboo [Page 1]
-
- CalDAV Proxy May 2007
-
-
-1. Introduction
-
- CalDAV [RFC4791] provides a way for calendar users to store calendar
- data and exchange this data via scheduling operations. Based on the
- WebDAV protocol [RFC2518], it also includes the ability to manage
- access to calendar data via the WebDAV ACL extension [RFC3744].
-
- It is often common for a calendar user to delegate some form of
- responsibility for their calendar and schedules to another calendar
- user (e.g., a boss allows an assistant to check a calendar or to send
- and accept scheduling invites on his behalf). The user handling the
- calendar data on behalf of someone else is often referred to as a
- "calendar user proxy".
-
- Whilst CalDAV does have fine-grained access control features that can
- be used to setup complex sharing and management of calendars, often
- the proxy behavior required is an "all-or-nothing" approach - i.e.
- the proxy has access to all the calendars or to no calendars (in
- which case they are of course not a proxy). So a simple way to
- manage access to an entire set of calendars and scheduling ability
- would be handy.
-
- In addition, calendar user agents will often want to display to a
- user who has proxy access to their calendars, or to whom they are
- acting as a proxy. Again, CalDAV's access control discovery and
- report features can be used to do that, but with fine-grained control
- that exists, it can be hard to tell who is a "real" proxy as opposed
- to someone just granted rights to some subset of calendars. Again, a
- simple way to discover proxy information would be handy.
-
-
-2. Conventions Used in This Document
-
- 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].
-
- When XML element types in the namespace "DAV:" are referenced in this
- document outside of the context of an XML fragment, the string "DAV:"
- will be prefixed to the element type names.
-
- When XML element types in the namespaces "DAV:" and
- "urn:ietf:params:xml:ns:caldav" are referenced in this document
- outside of the context of an XML fragment, the string "DAV:" and
- "CALDAV:" will be prefixed to the element type names respectively.
-
- The namespace "http://calendarserver.org/ns/" is used for XML
- elements defined in this specification. When XML element types in
-
-
-
-Daboo [Page 2]
-
- CalDAV Proxy May 2007
-
-
- this namespace are referenced in this document outside of the context
- of an XML fragment, the string "CS:" will be prefixed to the element
- type names respectively.
-
-
-3. Overview
-
-3.1. Server
-
- For each calendar user principal on the server, the server will
- generate two group principals - "proxy groups". One is used to hold
- the list of principals who have read-only proxy access to the main
- principal's calendars, the other holds the list of principals who
- have read-write and scheduling proxy access. NB these new group
- principals would have no equivalent in Open Directory.
-
- Privileges on each "proxy group" principal will be set so that the
- "owner" has the ability to change property values.
-
- The "proxy group" principals will be child resources of the user
- principal resource with specific resource types and thus are easy to
- discover. As a result the user principal resources will also be
- collection resources.
-
- When provisioning the calendar user home collection, the server will:
-
- a. Add an ACE to the calendar home collection giving the read-only
- "proxy group" inheritable read access.
-
- b. Add an ACE to the calendar home collection giving the read-write
- "proxy group" inheritable read-write access.
-
- c. Add an ACE to each of the calendar Inbox and Outbox collections
- giving the CALDAV:schedule privilege
- [I-D.desruisseaux-caldav-sched] to the read-write "proxy group".
-
-3.2. Client
-
- A client can see who the proxies are for the current principal by
- examining the principal resource for the two "proxy group" properties
- and then looking at the DAV:group-member-set property of each.
-
- The client can edit the list of proxies for the current principal by
- editing the DAV:group-member-set property on the relevant "proxy
- group" principal resource.
-
- The client can find out who the current principal is a proxy for by
- running a DAV:principal-match REPORT on the principal collection.
-
-
-
-Daboo [Page 3]
-
- CalDAV Proxy May 2007
-
-
- Alternatively, the client can find out who the current principal is a
- proxy for by examining the DAV:group-membership property on the
- current principal resource looking for membership in other users'
- "proxy groups".
-
-
-4. Open Issues
-
- 1. Do we want to separate read-write access to calendars vs the
- ability to schedule as a proxy?
-
- 2. We may want to restrict changing properties on the proxy group
- collections to just the DAV:group-member-set property?
-
- 3. There is no way for a proxy to be able to manage the list of
- proxies. We could allow the main calendar user DAV:write-acl on
- their "proxy group" principals, in which case they could grant
- others the right to modify the group membership.
-
- 4. Should the "proxy group" principals also be collections given
- that the regular principal resources will be?
-
-
-5. New features in CalDAV
-
-5.1. Proxy Principal Resource
-
- Each "regular" principal resource that needs to allow calendar user
- proxy support MUST be a collection resource. i.e. in addition to
- including the DAV:principal XML element in the DAV:resourcetype
- property on the resource, it MUST also include the DAV:collection XML
- element.
-
- Each "regular" principal resource MUST contain two child resources
- with names "calendar-proxy-read" and "calendar-proxy-write" (note
- that these are only suggested names - the server could choose any
- unique name for these). These resources are themselves principal
- resources that are groups contain the list of principals for calendar
- users who can act as a read-only or read-write proxy respectively.
-
- The server MUST include the CS:calendar-proxy-read or CS:calendar-
- proxy-write XML elements in the DAV:resourcetype property of the
- child resources, respectively. This allows clients to discover the
- "proxy group" principals by using a PROPFIND, Depth:1 request on the
- current user's principal resource and requesting the DAV:resourcetype
- property be returned. The element type declarations are:
-
-
-
-
-
-Daboo [Page 4]
-
- CalDAV Proxy May 2007
-
-
-
-
-
-
- The server MUST allow the "parent" principal to change the DAV:group-
- member-set property on each of the "child" "proxy group" principal
- resources. When a principal is listed as a member of the "child"
- resource, the server MUST include the "child" resource URI in the
- DAV:group-membership property on the included principal resource.
- Note that this is just "normal" behavior for a group principal.
-
- An example principal resource layout might be:
-
- + /
- + principals/
- + users/
- + cyrus/
- calendar-proxy-read
- calendar-proxy-write
- + red/
- calendar-proxy-read
- calendar-proxy-write
- + wilfredo/
- calendar-proxy-read
- calendar-proxy-write
-
- If the principal "cyrus" wishes to have the principal "red" act as a
- calendar user proxy on his behalf and have the ability to change
- items on his calendar or schedule meetings on his behalf, then he
- would add the principal resource URI for "red" to the DAV:group-
- member-set property of the principal resource /principals/users/
- cyrus/calendar-proxy-write, giving:
-
-
- /principals/users/red/
-
-
- The DAV:group-membership property on the resource /principals/users/
- red/ would be:
-
-
- /principals/users/cyrus/calendar-proxy-write
-
-
- If the principal "red" was also a read-only proxy for the principal
- "wilfredo", then the DA:group-membership property on the resource
- /principals/users/red/ would be:
-
-
-
-
-Daboo [Page 5]
-
- CalDAV Proxy May 2007
-
-
-
- /principals/users/cyrus/calendar-proxy-write
- /principals/users/wilfredo/calendar-proxy-read
-
-
- Thus a client can discover to which principals a particular principal
- is acting as a calendar user proxy for by examining the DAV:group-
- membership property.
-
- An alternative to discovering which principals a user can proxy as is
- to use the WebDAV ACL principal-match report, targeted at the
- principal collections available on the server.
-
- Example:
-
- >> Request <<
-
- REPORT /principals/ HTTP/1.1
- Host: cal.example.com
- Depth: 0
- Content-Type: application/xml; charset="utf-8"
- Content-Length: xxxx
- Authorization: Digest username="red",
- realm="cal.example.com", nonce="...",
- uri="/principals/", response="...", opaque="..."
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-Daboo [Page 6]
-
- CalDAV Proxy May 2007
-
-
- >> Response <<
-
- HTTP/1.1 207 Multi-Status
- Date: Fri, 10 Nov 2006 09:32:12 GMT
- Content-Type: application/xml; charset="utf-8"
- Content-Length: xxxx
-
-
-
-
- /principals/users/red/
-
-
-
-
-
-
-
- HTTP/1.1 200 OK
-
-
-
- /principals/users/cyrus/calendar-proxy-write
-
-
-
-
-
-
-
- HTTP/1.1 200 OK
-
-
-
- /principals/users/wilfredo/calendar-proxy-read
-
-
-
-
-
-
-
- HTTP/1.1 200 OK
-
-
-
-
-
-
-
-Daboo [Page 7]
-
- CalDAV Proxy May 2007
-
-
-5.2. Privilege Provisioning
-
- In order for a calendar user proxy to be able to access the calendars
- of the user they are proxying for the server MUST ensure that the
- privileges on the relevant calendars are setup accordingly:
-
- The DAV:read privilege MUST be granted for read-only and read-
- write calendar user proxy principals
-
- The DAV:write privilege MUST be granted for read-write calendar
- user proxy principals.
-
- Additionally, the CalDAV scheduling Inbox and Outbox calendar
- collections for the user allowing proxy access, MUST have the CALDAV:
- schedule privilege [I-D.desruisseaux-caldav-sched] granted for read-
- write calendar user proxy principals.
-
- Note that with a suitable repository layout, a server may be able to
- grant the appropriate privileges on a parent collection and ensure
- that all the contained collections and resources inherit that. For
- example, given the following repository layout:
-
- + /
- + calendars/
- + users/
- + cyrus/
- inbox
- outbox
- home
- work
- + red/
- inbox
- outbox
- work
- soccer
- + wilfredo/
- inbox
- outbox
- home
- work
- flying
-
- In order for the principal "red" to act as a read-write proxy for the
- principal "cyrus", the following WebDAV ACE will need to be granted
- on the resource /calendars/users/cyrus/ and all children of that
- resource:
-
-
-
-
-
-Daboo [Page 8]
-
- CalDAV Proxy May 2007
-
-
-
-
- /principals/users/cyrus/calendar-proxy-write
-
-
-
-
-
-
-
-6. Security Considerations
-
- TBD
-
-
-7. IANA Considerations
-
- This document does not require any actions on the part of IANA.
-
-
-8. Normative References
-
- [I-D.desruisseaux-caldav-sched]
- Desruisseaux, B., "Scheduling Extensions to CalDAV",
- draft-desruisseaux-caldav-sched-03 (work in progress),
- January 2007.
-
- [RFC2119] Bradner, S., "Key words for use in RFCs to Indicate
- Requirement Levels", BCP 14, RFC 2119, March 1997.
-
- [RFC2518] Goland, Y., Whitehead, E., Faizi, A., Carter, S., and D.
- Jensen, "HTTP Extensions for Distributed Authoring --
- WEBDAV", RFC 2518, February 1999.
-
- [RFC3744] Clemm, G., Reschke, J., Sedlar, E., and J. Whitehead, "Web
- Distributed Authoring and Versioning (WebDAV) Access
- Control Protocol", RFC 3744, May 2004.
-
- [RFC4791] Daboo, C., Desruisseaux, B., and L. Dusseault,
- "Calendaring Extensions to WebDAV (CalDAV)", RFC 4791,
- March 2007.
-
-
-Appendix A. Acknowledgments
-
- This specification is the result of discussions between the Apple
- calendar server and client teams.
-
-
-
-
-Daboo [Page 9]
-
- CalDAV Proxy May 2007
-
-
-Appendix B. Change History
-
- Changes from -00:
-
- 1. Updated to RFC 4791 reference.
-
- Changes from -00:
-
- 1. Added more details on actual CalDAV protocol changes.
-
- 2. Changed namespace from http://apple.com/ns/calendarserver/ to
- http://calendarserver.org/ns/.
-
- 3. Made "proxy group" principals child resources of their "owner"
- principals.
-
- 4. The "proxy group" principals now have their own resourcetype.
-
-
-Author's Address
-
- Cyrus Daboo
- Apple Computer, Inc.
- 1 Infinite Loop
- Cupertino, CA 95014
- USA
-
- Email: cyrus@daboo.name
- URI: http://www.apple.com/
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-Daboo [Page 10]
-
diff --git a/vendor/sabre/dav/docs/caldav-sharing.txt b/vendor/sabre/dav/docs/caldav-sharing.txt
deleted file mode 100644
index c69d6bbbe..000000000
--- a/vendor/sabre/dav/docs/caldav-sharing.txt
+++ /dev/null
@@ -1,1624 +0,0 @@
-
-
-
-Calendar Server Extension C. Daboo
- E. York
- Apple Inc.
- September 19, 2012
-
-
- Shared and Published Calendars in CalDAV
-
-Abstract
-
- This specification defines an extension to CalDAV that enables the
- sharing of calendars between users on a CalDAV server.
-
-
-Table of Contents
-
- 1. Introduction . . . . . . . . . . . . . . . . . . . . . . . . . 3
- 2. Conventions Used in This Document . . . . . . . . . . . . . . 3
- 3. Overview . . . . . . . . . . . . . . . . . . . . . . . . . . . 4
- 4. Notifications . . . . . . . . . . . . . . . . . . . . . . . . 5
- 4.1. Additional Principal Properties . . . . . . . . . . . . . 5
- 4.1.1. CS:notification-URL Property . . . . . . . . . . . . . 6
- 4.2. Properties on Notification Resources . . . . . . . . . . . 6
- 4.2.1. CS:notificationtype Property . . . . . . . . . . . . . 6
- 5. Shared Calendaring . . . . . . . . . . . . . . . . . . . . . . 7
- 5.1. Feature Discovery . . . . . . . . . . . . . . . . . . . . 7
- 5.2. Additional Properties for Calendars . . . . . . . . . . . 7
- 5.2.1. DAV:resourcetype Property . . . . . . . . . . . . . . 7
- 5.2.2. CS:invite Property . . . . . . . . . . . . . . . . . . 8
- 5.2.3. CS:allowed-sharing-modes Property . . . . . . . . . . 8
- 5.2.4. CS:shared-url Property . . . . . . . . . . . . . . . . 9
- 5.3. Sharer Actions on Shared Calendars . . . . . . . . . . . . 9
- 5.3.1. Sharing or Unsharing a Calendar . . . . . . . . . . . 9
- 5.3.2. Manipulating Sharees of a Shared Calendar . . . . . . 10
- 5.3.2.1. Example: Successful Sharee Add Request . . . . . . 11
- 5.3.2.2. Example: Successful Multiple Sharee Change
- Request . . . . . . . . . . . . . . . . . . . . . 11
- 5.4. Sharee Actions on Shared Calendars . . . . . . . . . . . . 12
- 5.4.1. Replying to a Sharing Invite . . . . . . . . . . . . . 12
- 5.4.2. Removing a Shared Calendar . . . . . . . . . . . . . . 13
- 5.5. General Considerations . . . . . . . . . . . . . . . . . . 13
- 5.5.1. Access Levels . . . . . . . . . . . . . . . . . . . . 13
- 5.5.2. Allowing or Disallowing Sharing . . . . . . . . . . . 13
- 5.5.3. Per-user WebDAV Properties . . . . . . . . . . . . . . 14
- 5.5.4. Per-user Calendar Data . . . . . . . . . . . . . . . . 14
- 5.5.5. Scheduling . . . . . . . . . . . . . . . . . . . . . . 15
- 6. XML Element Definitions . . . . . . . . . . . . . . . . . . . 16
- 6.1. CS:shared-owner . . . . . . . . . . . . . . . . . . . . . 16
-
-
-
-Daboo & York [Page 1]
-
- CalDAV Sharing and Publishing September 2012
-
-
- 6.2. CS:shared . . . . . . . . . . . . . . . . . . . . . . . . 17
- 6.3. CS:can-be-shared . . . . . . . . . . . . . . . . . . . . . 17
- 6.4. CS:can-be-published . . . . . . . . . . . . . . . . . . . 18
- 6.5. CS:user . . . . . . . . . . . . . . . . . . . . . . . . . 18
- 6.6. CS:invite-noresponse . . . . . . . . . . . . . . . . . . . 18
- 6.7. CS:invite-deleted . . . . . . . . . . . . . . . . . . . . 19
- 6.8. CS:invite-accepted . . . . . . . . . . . . . . . . . . . . 19
- 6.9. CS:invite-declined . . . . . . . . . . . . . . . . . . . . 19
- 6.10. CS:invite-invalid . . . . . . . . . . . . . . . . . . . . 20
- 6.11. CS:access . . . . . . . . . . . . . . . . . . . . . . . . 20
- 6.12. CS:read . . . . . . . . . . . . . . . . . . . . . . . . . 21
- 6.13. CS:read-write . . . . . . . . . . . . . . . . . . . . . . 21
- 6.14. CS:summary . . . . . . . . . . . . . . . . . . . . . . . . 21
- 6.15. CS:invite-notification . . . . . . . . . . . . . . . . . . 22
- 6.16. CS:uid . . . . . . . . . . . . . . . . . . . . . . . . . . 22
- 6.17. CS:hosturl . . . . . . . . . . . . . . . . . . . . . . . . 23
- 6.18. CS:organizer . . . . . . . . . . . . . . . . . . . . . . . 23
- 6.19. CS:common-name . . . . . . . . . . . . . . . . . . . . . . 23
- 6.20. CS:first-name . . . . . . . . . . . . . . . . . . . . . . 24
- 6.21. CS:last-name . . . . . . . . . . . . . . . . . . . . . . . 24
- 6.22. CS:invite-reply . . . . . . . . . . . . . . . . . . . . . 24
- 6.23. CS:in-reply-to . . . . . . . . . . . . . . . . . . . . . . 25
- 6.24. CS:notification . . . . . . . . . . . . . . . . . . . . . 25
- 6.25. CS:dtstamp . . . . . . . . . . . . . . . . . . . . . . . . 26
- 6.26. CS:share . . . . . . . . . . . . . . . . . . . . . . . . . 26
- 6.27. CS:set . . . . . . . . . . . . . . . . . . . . . . . . . . 26
- 6.28. CS:remove . . . . . . . . . . . . . . . . . . . . . . . . 27
- 6.29. CS:shared-as . . . . . . . . . . . . . . . . . . . . . . . 27
- 7. Security Considerations . . . . . . . . . . . . . . . . . . . 27
- 8. IANA Considerations . . . . . . . . . . . . . . . . . . . . . 27
- 9. Acknowledgments . . . . . . . . . . . . . . . . . . . . . . . 28
- 10. Normative References . . . . . . . . . . . . . . . . . . . . . 28
- Appendix A. Change History . . . . . . . . . . . . . . . . . . . 28
- Authors' Addresses . . . . . . . . . . . . . . . . . . . . . . . . 29
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-Daboo & York [Page 2]
-
- CalDAV Sharing and Publishing September 2012
-
-
-1. Introduction
-
- CalDAV [RFC4791] provides a way for calendar users to store calendar
- data and exchange this data via scheduling operations. Based on the
- WebDAV [RFC4918] protocol, it also includes the ability to manage
- access to calendar data via the WebDAV ACL [RFC3744] extension.
-
- WebDAV ACL [RFC3744] provides a way to manage fine-grained access
- controls on WebDAV resources. Whilst this could be used directly to
- manage sharing of calendars, experience has shown that client
- developers are averse to using it due to its complexity. Instead a
- simpler process for sharing calendars is preferred.
-
- This extension defines a way for individual calendar users to share
- calendars with other users. This is done via an "opt-in" process in
- which a sharing invite is sent from the sharer to a sharee, allowing
- the sharee to accept or decline. If the sharee accepts the sharing
- invite, the shared calendar is made available to them in their own
- calendar home collection (i.e., alongside their own personal
- calendars). HTTP POST operations are used to manage the sharing
- invitations and replies, and WebDAV properties are used to expose the
- state of shared calendars.
-
-
-2. Conventions Used in This Document
-
- 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].
-
- When XML element types in the namespaces "DAV:" and
- "urn:ietf:params:xml:ns:caldav" are referenced in this document
- outside of the context of an XML fragment, the string "DAV:" and
- "CALDAV:" will be prefixed to the element type names respectively.
-
- The namespace "http://calendarserver.org/ns/" is used for XML
- elements defined in this specification. When XML element types in
- that namespace are referenced in this document outside of the context
- of an XML fragment, the string "CS:" will be prefixed to the element
- type names.
-
- Terms Used:
-
- Sharer A calendar user who is sharing a calendar with other calendar
- users.
-
-
-
-
-
-
-Daboo & York [Page 3]
-
- CalDAV Sharing and Publishing September 2012
-
-
- Sharee A calendar user to whom a calendar has been shared.
-
- Sharing Invite A message sent by a sharer to a sharee to indicate
- the status of a shared calendar.
-
- Sharing Reply A message sent by a sharee to a sharer to indicate the
- status of a shared calendar.
-
-
-3. Overview
-
- This section provides a basic overview of this protocol by way of a
- simple use case of a sharer sharing a calendar with a single sharee.
-
- To share a calendar with another user, the sharer's client executes
- an HTTP POST request against the calendar collection resource for the
- calendar to be shared. The POST request body will contain details of
- the calendar user to whom the calendar is to be shared as well as the
- access right to be granted to them. If the request succeeds, a
- notification is sent to the sharee with details of the calendar being
- shared to them.
-
- The sharer's client will show the notification to the sharee and
- present them with the choice to accept or decline the invitation to
- the shared calendar. If the sharee chooses to decline, then nothing
- changes for that sharee. If the sharee chooses to accept, then the
- server automatically creates a new calendar collection resource in
- the sharee's calendar home collection, and ensures that calendar
- provides a mapping to the actual shared calendar of the sharer. Thus
- the shared calendar is available to the sharee as just another
- calendar in their calendar home. The server enforces the appropriare
- access privileges for the sharee.
-
- At any time, the sharer can inspect properties on the calendar
- collection being shared, and determine the accept/decline status of
- each sharee. Additional sharees can be added and existing ones
- removed. The access privileges for existing sharees can also be
- changed.
-
- Once a sharee has a shared calendar set to appear in their calendar
- home collection, they can remove it and decline the sharing invite by
- simply having their client issue an HTTP DELETE request on the shared
- calendar collection. That does not delete any calendar data, but
- rather simply removes the "link" to the sharer's calendar collection
- and sets the sharee's inviate status to declined.
-
-
-
-
-
-
-Daboo & York [Page 4]
-
- CalDAV Sharing and Publishing September 2012
-
-
-4. Notifications
-
- In order to facilitate the process of sharing invitations, this
- specification defines a new generic notification mechanism for CalDAV
- servers. When this feature is available, a CS:notification-URL
- (Section 4.1.1) property appears on principal resources for those
- principals who are able to receive notifications. That property
- specifies a single DAV:href element whose content refers to a WebDAV
- collection resource. Notification "messages" are deposited into this
- collection and can be retrieved by clients and acted on accordingly.
-
- The notification collection referenced by the CS:notification-URL
- (Section 4.1.1) property MUST have a DAV:resourcetype property with
- DAV:collection and CS:notification (Section 6.24) child elements.
-
- Notification "messages" are XML documents stored as resources in the
- notification collection. Each XML document contains a CS:
- notification (Section 6.24) element as its root. The root element
- contains a CS:dtstamp (Section 6.25) element, and one additional
- element which represents the type of notification being conveyed in
- the message. That child element will typically contain additional
- content that describes the notification.
-
- Each notification resource has a CS:notificationtype (Section 4.2.1)
- property which contains as its single child element an empty element
- that matches the child element of the notification resource XML
- document root. Any attributes on the child element in the XML
- document are also present in the property child element.
-
- Notifications are automatically generated by the server (perhaps in
- response to a client action) with an appropriate resource stored in
- the notifications collection of the user to whom the notification is
- targeted. Clients SHOULD monitor the notification collection looking
- for new notification resources. When doing so, clients SHOULD look
- at the CS:notificationtype (Section 4.2.1) property to ensure that
- the notification is of a type that the client can handle. Once a
- client has handled the notification in whatever way is appropriate it
- SHOULD delete the notification resource. Servers MAY delete
- notification resources on their own if they determine that the
- notifications are no longer relevant or valid. Servers MAY coalesce
- notifications as appropriate.
-
-4.1. Additional Principal Properties
-
- This section defines new properties for WebDAV principal resources as
- defined in RFC3744 [RFC3744]. These properties are likely to be
- protected but the server MAY allow them to be written by appropriate
- users.
-
-
-
-Daboo & York [Page 5]
-
- CalDAV Sharing and Publishing September 2012
-
-
-4.1.1. CS:notification-URL Property
-
- Name: notification-URL
-
- Namespace: http://calendarserver.org/ns/
-
- Purpose: Identify the URL of the notification collection owned by
- the associated principal resource.
-
- Protected: This property SHOULD be protected.
-
- PROPFIND behavior: This property SHOULD NOT be returned by a
- PROPFIND allprop request (as defined in Section 14.2 of
- [RFC4918]).
-
- COPY/MOVE behavior: This property value SHOULD be preserved in COPY
- and MOVE operations.
-
- Description: This property is needed for a client to determine where
- the notification collection of the current user is located so that
- processing of notification messages can occur. If not present,
- then the associated calendar user is not enabled for notification
- messages on the server.
-
- Definition:
-
-
-
-4.2. Properties on Notification Resources
-
- The following new WebDAV properties are defined for notification
- resources.
-
-4.2.1. CS:notificationtype Property
-
- Name: notificationtype
-
- Namespace: http://calendarserver.org/ns/
-
- Purpose: Identify the type of notification of the corresponding
- resource.
-
- Protected: This property MUST be protected.
-
- PROPFIND behavior: This property SHOULD NOT be returned by a
- PROPFIND allprop request (as defined in Section 14.2 of
- [RFC4918]).
-
-
-
-
-Daboo & York [Page 6]
-
- CalDAV Sharing and Publishing September 2012
-
-
- COPY/MOVE behavior: This property value MUST be preserved in COPY
- and MOVE operations.
-
- Description: This property allows a client, via a PROPFIND Depth:1
- request, to quickly find notification messages that the client can
- handle in a notification collection. The single child element is
- the notification resource root element's child defining the
- notification itself. This element MUST be empty, though any
- attributes on the element in the notification resource MUST be
- present in the property element.
-
- Definition:
-
-
-
-
-
-5. Shared Calendaring
-
-5.1. Feature Discovery
-
- A server that supports the features described in this document MUST
- include "calendarserver-sharing" as a field in the DAV response
- header from an OPTIONS request on any resource that supports these
- features.
-
-5.2. Additional Properties for Calendars
-
- The following new or modified WebDAV properties are defined for
- calendar collections and used to view or manipulate shared calendar
- features.
-
-5.2.1. DAV:resourcetype Property
-
- Calendar collections that are shared have addition elements listed in
- their DAV:resourcetype property in addition to DAV:collection and
- CALDAV:calendar.
-
- o CS:shared-owner (Section 6.1): used to indicate that the calendar
- is owned by the current user and is being shared by them.
-
- o CS:shared (Section 6.2): used to indicate that the calendar is
- owned by another user and is being shared to the current user.
-
-
-
-
-
-
-
-Daboo & York [Page 7]
-
- CalDAV Sharing and Publishing September 2012
-
-
-5.2.2. CS:invite Property
-
- Name: invite
-
- Namespace: http://calendarserver.org/ns/
-
- Purpose: Used to show to whom a calendar has been shared.
-
- Protected: This property MUST be protected.
-
- PROPFIND behavior: This property SHOULD NOT be returned by a
- PROPFIND allprop request (as defined in Section 14.2 of
- [RFC4918]).
-
- COPY/MOVE behavior: This property value MUST be preserved in COPY
- and MOVE operations.
-
- Description: This WebDAV property is present on a calendar
- collection resource that has been shared by the owner, or on the
- calendar collection resources of the sharees of the calendar. It
- provides a list of users to whom the calendar has been shared,
- along with the "status" of the sharing invites sent to each user.
- In addition, servers SHOULD include a CS:organizer XML element on
- calendar collection resources of the sharees to provide clients
- with a fast way to determine who the sharer is. A server's local
- privacy policy may prevent sharees from knowing about other
- sharees on a shared calendar. If that is so server will not
- include CS:user XML elements for other sharees.
-
- Definition:
-
-
-
-5.2.3. CS:allowed-sharing-modes Property
-
- Name: allowed-sharing-modes
-
- Namespace: http://calendarserver.org/ns/
-
- Purpose: Used to show which modes of sharing are supported on a
- calendar collection.
-
- Protected: This property MUST be protected.
-
- PROPFIND behavior: This property SHOULD NOT be returned by a
- PROPFIND allprop request (as defined in Section 14.2 of
- [RFC4918]).
-
-
-
-
-Daboo & York [Page 8]
-
- CalDAV Sharing and Publishing September 2012
-
-
- COPY/MOVE behavior: This property value MUST be preserved in COPY
- and MOVE operations.
-
- Description: This WebDAV property is present on a calendar
- collection resource that can been shared or published. It
- provides a list of options indicating what sharing modes are
- allowed as per Section 5.5.2.
-
- Definition:
-
-
-
-5.2.4. CS:shared-url Property
-
- Name: shared-url
-
- Namespace: http://calendarserver.org/ns/
-
- Purpose: Indicates the URL of the owner's copy of a shared calendar.
-
- Protected: This property MUST be protected.
-
- PROPFIND behavior: This property SHOULD NOT be returned by a
- PROPFIND allprop request (as defined in Section 14.2 of
- [RFC4918]).
-
- COPY/MOVE behavior: This property value MUST be preserved in COPY
- and MOVE operations.
-
- Description: This WebDAV property is present on a shared calendar
- collection resource that appears in a sharee's calendar home
- collection. Its content is a single DAV:href element whose value
- is the URL of the sharer's calendar being shared.
-
- Definition:
-
-
-
-5.3. Sharer Actions on Shared Calendars
-
-5.3.1. Sharing or Unsharing a Calendar
-
- To update an existing calendar to be shared, the sharer simply adds
- one or more sharees to the calendar collection as per Section 5.3.2.
- The server MUST update the DAV:resourcetype property on the calendar
- collection to ensure it contains a CS:shared-owner XML element to
- indicate the calendar collection is now shared.
-
-
-
-Daboo & York [Page 9]
-
- CalDAV Sharing and Publishing September 2012
-
-
- To unshare a calendar, the sharer simply removes all sharees to the
- CS:invite property of the calendar collection as per Section 5.3.2.
- The server MUST update the DAV:resourcetype property on the calendar
- collection to ensure it does not contain a CS:shared-owner XML
- element to indicate the calendar collection is not shared.
-
-5.3.2. Manipulating Sharees of a Shared Calendar
-
- The sharer of a shared calendar is able to manipulate the sharee list
- by issuing a POST request targeted at the calendar collection
- resource. The POST request MUST contain an XML document as its body
- with the root element being CS:share (Section 6.26).
-
- The CS:share (Section 6.26) element in the POST requests MUST contain
- one or more CS:set (Section 6.27) or CS:remove (Section 6.28)
- elements. For each CS:set (Section 6.27) element, the server MUST
- add the specified sharee access to the calendar. For each CS:remove
- (Section 6.28) element the server MUST remove the specified sharee
- access from the shared calendar. In each case the server MUST send a
- notification message to any sharees whose status is changed (added,
- modified or removed), indicating to them a change in status for the
- shared calendar. The server SHOULD NOT send notification messages to
- sharees whose status is unchanged.
-
- Sharee's are identified via a DAV:href element whose value is either
- a principal-URL for a sharee hosted on the same server, a calendar
- user address or email address. In the case of the later two, the
- sharee might not be a user on the same server - though in that case
- how invitations are sent or access enabled is out of scope for this
- specification. A server MAY change the sharee's "address" to any
- suitable alternative that it might prefer when returning the list of
- sharees via the CS:invite property (Section 5.2.2).
-
- The client MAY include a CS:common-name (Section 6.19) element in the
- CS:set (Section 6.27) element. When provided, the value represents
- the common name for the sharee, and is returned in the list of
- sharees via the CS:invite property (Section 5.2.2). The server MAY
- change this to a suitable alternative when it is able to match the
- sharee to a known user. If absent from the client request, the
- server SHOULD add a CS:common-name when it is able to match the
- sharee with a known user, and a common name for that user can be
- determined.
-
- When the sharee list on a shared calendar is changed, the server MUST
- send notifications to each sharee to update them on their current
- sharing status. This is accomplished by sending a CS:invite-
- notification (Section 6.15) notification to each sharee.
-
-
-
-
-Daboo & York [Page 10]
-
- CalDAV Sharing and Publishing September 2012
-
-
-5.3.2.1. Example: Successful Sharee Add Request
-
- This example shows how to add a single sharee (with calendar user
- address "mailto:eric@example.com") to a shared calendar with CS:read-
- write access.
-
- >> Request <<
-
- POST /calendars/users/cyrus/shared/ HTTP/1.1
- Host: calendar.example.com
- Content-Type: application/xml; charset="utf-8"
- Content-Length: xxxx
-
-
-
-
- mailto:eric@example.com
- Eric York
- Shared workspace
-
-
-
-
- >> Response <<
-
- HTTP/1.1 200 OK
- Cache-Control: no-cache
- Date: Sat, 11 Nov 2006 09:32:12 GMT
-
-5.3.2.2. Example: Successful Multiple Sharee Change Request
-
- This example shows how multiple sharee's can be manipulated in a
- single request. The sharee with calendar user address
- "mailto:eric@example.com" has their access downgraded to CS:read,
- whilst another sharee is removed from the access list entirely.
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-Daboo & York [Page 11]
-
- CalDAV Sharing and Publishing September 2012
-
-
- >> Request <<
-
- POST /calendars/users/cyrus/shared/ HTTP/1.1
- Host: calendar.example.com
- Content-Type: application/xml; charset="utf-8"
- Content-Length: xxxx
-
-
-
-
- mailto:eric@example.com
- Shared workspace
-
-
-
- mailto:wilfredo@example.com
-
-
-
- >> Response <<
-
- HTTP/1.1 200 OK
- Cache-Control: no-cache
- Date: Sat, 11 Nov 2006 09:32:12 GMT
-
-5.4. Sharee Actions on Shared Calendars
-
-5.4.1. Replying to a Sharing Invite
-
- When a sharee is invited to a shared calendar they can accept or
- decline the invite by issuing a POST request to the sharee's calendar
- home collection resource. The POST request MUST contain an XML
- document as its body with the root element being CS:invite-reply
- (Section 6.22).
-
- The CS:invite-reply (Section 6.22) element in the POST request
- specifies the sharee who is replying in the DAV:href element, the
- accept or decline action via the CS:invite-accepted or CS:invite-
- declined elements, the URL of the shared calendar in the CS:hosturl
- element, the unique identifier of the invite to which it is a reply
- in the CS:in-reply-to element, and an optional CS:summary element.
-
- The response to a POST request that accepts a shared calendar invite
- MUST be an XML document containing CS:shared-as (Section 6.29) as its
- root element. That root element contains a single DAV:href element
- whose content is the URI of the shared calendar in the sharee's
- calendar home created by the invite acceptance.
-
-
-
-Daboo & York [Page 12]
-
- CalDAV Sharing and Publishing September 2012
-
-
- When the sharee replies to an invite, the server SHOULD send a
- notification to the sharer to update them on the change in the sharee
- state. This is accomplished by sending a CS:invite-reply
- (Section 6.22) notification to the sharer.
-
-5.4.2. Removing a Shared Calendar
-
- To remove a shared calendar from a sharee's calendar home collection
- a DELETE request is targeted at the shared calendar URI. When such a
- request is received the server MUST remove the shared calendar from
- the sharee's calendar home and automatically update the sharee's
- status in the sharer's calendar's CS:invite property.
-
-5.5. General Considerations
-
-5.5.1. Access Levels
-
- Two levels of access ca be granted by a sharer to any sharee. These
- are governed by the CS:access element used in the CS:invite/CS:user
- element that specifies a shared user invite. CS:access contains a
- single empty element that defines the type of access granted:
-
- CS:read When present this indicates that sharees can read calendar
- data but cannot change it.
-
- CS:read-write When present this indicates that sharees can read and
- write calendar data.
-
-5.5.2. Allowing or Disallowing Sharing
-
- Servers MAY support calendar sharing on a per-calendar basis - e.g.,
- they could treat some calendars as always private (cannot be shared)
- or always public (always shared). As a result clients need a way to
- determine which calendar could be shared so they can enable or
- disable sharing options on a per-calendar basis.
-
- This specification adds a CS:allowed-sharing-modes (Section 5.2.3)
- WebDAV property which servers can return on calendar collection
- resources. This property contains XML elements that describe which
- sharing or publishing capabilities can be supported by the
- corresponding calendar collection:
-
- CS:can-be-shared (Section 6.3): when present indicates that the
- calendar collection can be shared. When not present, the calendar
- collection cannot be shared.
-
- CS:can-be-published (Section 6.4): when present indicates that the
- calendar collection can be published. When not present, the
-
-
-
-Daboo & York [Page 13]
-
- CalDAV Sharing and Publishing September 2012
-
-
- calendar collection cannot be published.
-
- When not present on a calendar collection, sharing or publishing of
- that calendar is not allowed. Clients SHOULD NOT attempt to use
- requests to enable sharing or publishing targeted at those calendar
- collections.
-
-5.5.3. Per-user WebDAV Properties
-
- Servers MUST support "per-user" WebDAV properties on shared calendar
- collections and MAY support them on calendar object resources within
- shared calendar collections. A "per-user" WebDAV property is one
- whose value can be set and retrieved independently by each user with
- appropriate access rights. e.g., user "A" changes the DAV:displayname
- property on a shared calendar in their calendar home to "My
- calendar", and user "B" changes the same property to "Shared" on the
- same shared calendar in their calendar home. When each user
- retrieves the property value they will see their own last stored
- value and not the value of the other user.
-
- For shared calendars, the server MUST allow all users to write "per-
- user" WebDAV properties on the shared calendar collection and MAY
- allow property writes on calendar object resources within the shared
- calendar collection. This is required even in the case where the
- sharee has been granted read access only (i.e., the ability to change
- calendar data is disallowed). This requirement ensures that sharees
- can always change "personal" properties such as calendar colors and
- display names.
-
- Servers MUST treat the following properties as "per-user":
-
- DAV:displayname
-
- CALDAV:calendar-description
-
- CALDAV:schedule-calendar-transp
-
- ICAL:calendar-color
-
- Servers MAY treat any dead property as per-user.
-
- Servers MUST NOT treat live properties as per-user.
-
-5.5.4. Per-user Calendar Data
-
- Servers MUST support "per-user" calendar data in calendar object
- resources stored in shared calendars. This allows each sharee and
- the sharer to store their own alarms and free busy transparency
-
-
-
-Daboo & York [Page 14]
-
- CalDAV Sharing and Publishing September 2012
-
-
- status without "interfering" with other users who also have access to
- the same calendar object resources.
-
- For calendaring object resources in shared calendar collections, the
- server MUST treat the following iCalendar data objects as per-user:
-
- TRANSP property
-
- VALARM component
-
- Servers MAY treat any non-standard X- iCalendar properties as per-
- user.
-
- When handling per-user data in recurring components, servers SHOULD
- eliminate overridden instances when returning iCalendar data to
- clients in the case where there are no differences between the
- overridden component and the instance that could be derived from the
- "master" recurrence component. For example, consider a daily
- recurring event, Monday through Friday, initially defined without any
- overridden instances, that is in a shared calendar. If user "A"
- overrides the Tuesday instance and adds their own "VALARM" component
- only, then when user "A" later retrieves the data again they would
- see that overridden instance, but when user "B" does so, they would
- not. This ensures that each user sees the most "compact"
- representation of the calendar data.
-
-5.5.5. Scheduling
-
- CalDAV Scheduling [RFC6638] defines how a CalDAV server carries out
- scheduling operations when calendar object resources are created,
- modified or deleted and include "ORGANIZER" and "ATTENDEE" iCalendar
- properties.
-
- When calendar object resources are created, modified or deleted in
- shared calendars by sharees, the following restrictions apply:
-
- 1. The "ORGANIZER" iCalendar property value in the iCalendar data
- MUST match a calendar user address of the sharer (owner) of the
- shared calendar. The DAV:owner WebDAV property MUST be present
- on a shared calendar and MUST provide a reference to a principal-
- URL of the sharer (owner) of the shared calendar. Clients can
- use this value to determine what the allowed "ORGANIZER"
- iCalendar property values are. The server MUST reject any
- attempt by a sharee to create an iCalendar component with an
- "ORGANIZER" property value other than the sharer (owner) of the
- shared calendar.
-
-
-
-
-
-Daboo & York [Page 15]
-
- CalDAV Sharing and Publishing September 2012
-
-
- 2. The server MUST reject any attempt by a sharee to MOVE a calendar
- object resource in a shared calendar to some other collection.
-
- 3. When a sharee is listed as an Attendee in a calendar object
- resource in a shared calendar, and write access is granted, the
- sharee is allowed to change not only iCalendar data related to
- the Organizer, but also data related to the Attendee. i.e., a
- sharee can change their own participation status on the
- "ATTENDEE" iCalendar property referring to them. Additionally,
- if the sharee is not listed as an Attendee, and write access is
- granted, the sharee can add themselves as an Attendee.
-
- 4. The default calendar collection defined in Section 6.3 of
- [RFC6638] MUST NOT be a calendar shared to the corresponding
- calendar user.
-
- Following are additional considerations for scheduling with shared
- calendars:
-
- 1. A scheduled iCalendar component could appear in more than one
- calendar collection within a sharee's calendar home if the sharee
- is an Attendee and the Organizer or other Attendees have shared a
- calendar with the sharee that includes their copies of the
- iCalendar component. It is important to note that the scheduled
- component in the shared calendar could have different access
- rights than the one in the sharee's owned calendar.
-
- 2. A scheduled iCalendar component appearing in a sharee's shared
- calendar could include the sharee as an Attendee. For recurring
- events, it is possible for the sharee to only be listed as an
- Attendee in some instances, as opposed to all. Clients will need
- to be aware of this when allowing sharee's to set their own
- participation status.
-
- In addition, when a shared calendar is first accepted by a sharee,
- the server SHOULD set the CALDAV:schedule-calendar-transp property to
- the value CALDAV:transparent to ensure newly accepted shared
- calendars do not contribute to the sharee's freebusy time until the
- sharee explicitly requests it.
-
-
-6. XML Element Definitions
-
-6.1. CS:shared-owner
-
-
-
-
-
-
-
-Daboo & York [Page 16]
-
- CalDAV Sharing and Publishing September 2012
-
-
- Name: shared-owner
-
- Namespace: http://calendarserver.org/ns/
-
- Purpose: Used to indicate that a calendar is being shared by the
- owner.
-
- Description: This property appears in the DAV:resourcetype property
- on the calendar collection resource shared by a sharer. See
- Section 5.2.
-
- Definition:
-
-
-
-6.2. CS:shared
-
- Name: shared
-
- Namespace: http://calendarserver.org/ns/
-
- Purpose: Used to indicate that a calendar is being shared to a
- sharee.
-
- Description: This property appears in the DAV:resourcetype property
- on a calendar collection resource that is shared to a sharee and
- appears in the sharee's calendar home collection. See
- Section 5.2.
-
- Definition:
-
-
-
-6.3. CS:can-be-shared
-
- Name: can-be-shared
-
- Namespace: http://calendarserver.org/ns/
-
- Purpose: Used to indicate that a calendar can be shared.
-
- Description: This element indicates that a calendar can be shared
- with other users. See Section 5.2.3
-
- Definition:
-
-
-
-
-
-
-Daboo & York [Page 17]
-
- CalDAV Sharing and Publishing September 2012
-
-
-6.4. CS:can-be-published
-
- Name: can-be-published
-
- Namespace: http://calendarserver.org/ns/
-
- Purpose: Used to indicate that a calendar can be published.
-
- Description: This element indicates that a calendar can be published
- to anyone. See Section 5.2.3
-
- Definition:
-
-
-
-6.5. CS:user
-
- Name: user
-
- Namespace: http://calendarserver.org/ns/
-
- Purpose: Used to show status of sharing invites sent to sharees.
-
- Description: This element provides the "status" of a sharing invite
- sent to a particular user. See Section 5.2.2.
-
- Definition:
-
-
-
-6.6. CS:invite-noresponse
-
- Name: invite-noresponse
-
- Namespace: http://calendarserver.org/ns/
-
- Purpose: Sharing invite status.
-
- Description: When used in a CS:user (Section 6.5) element, this
- element is used to indicate that the sharee has never replied to
- the corresponding sharing invite. When used in a CS:invite-
- notification (Section 6.15) element, this element is used to
- indicate to the sharee that a sharing reply is needed.
-
-
-
-
-
-
-Daboo & York [Page 18]
-
- CalDAV Sharing and Publishing September 2012
-
-
- Definition:
-
-
-
-6.7. CS:invite-deleted
-
- Name: invite-deleted
-
- Namespace: http://calendarserver.org/ns/
-
- Purpose: Sharing invite status.
-
- Description: When used in a CS:invite-notification (Section 6.15)
- element, this element is used to indicate to the sharee that a
- shared calendar has been unshared by the sharer.
-
- Definition:
-
-
-
-6.8. CS:invite-accepted
-
- Name: invite-accepted
-
- Namespace: http://calendarserver.org/ns/
-
- Purpose: Sharing invite status.
-
- Description: When used in a CS:user (Section 6.5) element, this
- element is used to indicate that the sharee has accepted the
- corresponding sharing invite. When used in a CS:invite-
- notification (Section 6.15) element, this element is used to
- indicate to the sharee that the sharing invite is an update for
- one they previously accepted.
-
- Definition:
-
-
-
-6.9. CS:invite-declined
-
- Name: invite-declined
-
- Namespace: http://calendarserver.org/ns/
-
-
-
-
-
-
-
-Daboo & York [Page 19]
-
- CalDAV Sharing and Publishing September 2012
-
-
- Purpose: Sharing invite status.
-
- Description: When used in a CS:user (Section 6.5) element, this
- element is used to indicate that the sharee has declined the
- corresponding sharing invite. When used in a CS:invite-
- notification (Section 6.15) element, this element is used to
- indicate to the sharee that the sharing invite is an update for
- one they previously declined.
-
- Definition:
-
-
-
-6.10. CS:invite-invalid
-
- Name: invite-invalid
-
- Namespace: http://calendarserver.org/ns/
-
- Purpose: Sharing invite status.
-
- Description: When used in a CS:user (Section 6.5) element, this
- element is used to indicate that the corresponding sharee is not a
- valid calendar user known to the server.
-
- Definition:
-
-
-
-6.11. CS:access
-
- Name: access
-
- Namespace: http://calendarserver.org/ns/
-
- Purpose: Shared calendar access level.
-
- Description: When used in a CS:user (Section 6.5) element, this
- element is used to indicate the sharing access level granted to
- the corresponding sharee.
-
- Definition:
-
-
-
-
-
-
-
-
-
-Daboo & York [Page 20]
-
- CalDAV Sharing and Publishing September 2012
-
-
-6.12. CS:read
-
- Name: read
-
- Namespace: http://calendarserver.org/ns/
-
- Purpose: Shared calendar access level privilege.
-
- Description: Indicates that the access level granted only allows
- sharees to read data in the shared calendar (though they can write
- per-user data (Section 5.5.4)).
-
- Definition:
-
-
-
-6.13. CS:read-write
-
- Name: read-write
-
- Namespace: http://calendarserver.org/ns/
-
- Purpose: Shared calendar access level privilege.
-
- Description: Indicates that the access level granted allows sharees
- to read and write all data in the shared calendar, with the
- exception of components that would trigger scheduling.
-
- Definition:
-
-
-
-6.14. CS:summary
-
- Name: summary
-
- Namespace: http://calendarserver.org/ns/
-
- Purpose: Summary or title of shared calendar.
-
- Description: A brief description of a shared calendar. This can be
- used by sharers to communicate the nature of a shared calendar to
- sharees, as well as used by sharees to indicate back to the sharer
- how each sharee is refering to the shared calendar.
-
-
-
-
-
-
-
-Daboo & York [Page 21]
-
- CalDAV Sharing and Publishing September 2012
-
-
- Definition:
-
-
-
-6.15. CS:invite-notification
-
- Name: invite-notification
-
- Namespace: http://calendarserver.org/ns/
-
- Purpose: A notification used as a shared calendar invite.
-
- Description: Defines a notification message sent automatically by
- the server when a sharer adds, changes or removes a sharee from a
- shared calendar. The DAV:href element specifies the calendar user
- address of the sharee to whom the message was sent. The CALDAV:
- supported-calendar-component-set is a copy of the matching WebDAV
- property on the sharers calendar collection, to allow clients to
- know what restrictions might apply to the shared calendar before
- accepting it.
-
- Definition:
-
-
-
-6.16. CS:uid
-
- Name: uid
-
- Namespace: http://calendarserver.org/ns/
-
- Purpose: Unique identifier.
-
- Description: A unique identifier for an invitation to a shared
- calendar.
-
- Definition:
-
-
-
-
-
-
-
-
-Daboo & York [Page 22]
-
- CalDAV Sharing and Publishing September 2012
-
-
-6.17. CS:hosturl
-
- Name: hosturl
-
- Namespace: http://calendarserver.org/ns/
-
- Purpose: Identifies the source URL of a shared calendar.
-
- Description: Contains a single DAV:href element that refers to the
- source of a shared calendar - i.e., the URL of the calendar shared
- by the sharer.
-
- Definition:
-
-
-
-6.18. CS:organizer
-
- Name: organizer
-
- Namespace: http://calendarserver.org/ns/
-
- Purpose: Identifies the sharer of a shared calendar.
-
- Description: Contains a single DAV:href element that identifies the
- calendar user address of the sharer of a shared calendar, and an
- optional CS:common-name element that matches that user, and an
- option CS:first-name, CS:last-name pair of elements that match
- that user. In some cases servers might have directory information
- that includes only the common name, or only the first or last
- name, and it is better to expose those directly to the client
- as-is rather than to try and split or combine the attributes to
- synthesize one set or the other.
-
- Definition:
-
-
-
-6.19. CS:common-name
-
- Name: common-name
-
- Namespace: http://calendarserver.org/ns/
-
-
-
-
-
-
-Daboo & York [Page 23]
-
- CalDAV Sharing and Publishing September 2012
-
-
- Purpose: The common name of a sharer or sharee.
-
- Description: The common name is optionally provided by a client when
- adding a sharee and optionally included (or modified) by the
- server when returning results for sharers or sharees and in
- notifications.
-
- Definition:
-
-
-
-6.20. CS:first-name
-
- Name: first-name
-
- Namespace: http://calendarserver.org/ns/
-
- Purpose: The first name of a sharer or sharee.
-
- Description: The first name is optionally included by the server
- when returning results for sharers or sharees and in
- notifications.
-
- Definition:
-
-
-
-6.21. CS:last-name
-
- Name: last-name
-
- Namespace: http://calendarserver.org/ns/
-
- Purpose: The last name of a sharer or sharee.
-
- Description: The last name is optionally included by the server when
- returning results for sharers or sharees and in notifications.
-
- Definition:
-
-
-
-6.22. CS:invite-reply
-
-
-
-
-
-
-
-
-Daboo & York [Page 24]
-
- CalDAV Sharing and Publishing September 2012
-
-
- Name: invite-reply
-
- Namespace: http://calendarserver.org/ns/
-
- Purpose: A notification used as a reply to a shared calendar invite.
-
- Description: Defines a notification message sent automatically by
- the server when a sharee replies to a shared calendar invite. The
- DAV:href element specifies the calendar user address of the sharee
- to whom the original invite message was sent.
-
- Definition:
-
-
-
-6.23. CS:in-reply-to
-
- Name: in-reply-to
-
- Namespace: http://calendarserver.org/ns/
-
- Purpose: Unique identifier.
-
- Description: Specifies the unique identifier of the inviate message
- that this notification message is a reply to.
-
- Definition:
-
-
-
-6.24. CS:notification
-
- Name: notification
-
- Namespace: http://calendarserver.org/ns/
-
- Purpose: Notification message root element.
-
- Description: The root element used in notification resources.
-
- Definition:
-
-
-
-
-
-
-Daboo & York [Page 25]
-
- CalDAV Sharing and Publishing September 2012
-
-
-6.25. CS:dtstamp
-
- Name: dtstamp
-
- Namespace: http://calendarserver.org/ns/
-
- Purpose: Date-time stamp.
-
- Description: Contains the date-time stamp corresponding to the
- creation of a notification message.
-
- Definition:
-
-
-
-6.26. CS:share
-
- Name: share
-
- Namespace: http://calendarserver.org/ns/
-
- Purpose: Describes changes to sharees.
-
- Description: The root element used in POST requests on calendars by
- sharers to manipulate the sharee list of a shared calendar.
-
- Definition:
-
-
-
-6.27. CS:set
-
- Name: set
-
- Namespace: http://calendarserver.org/ns/
-
- Purpose: Sets access for a sharee.
-
- Description: Used to add or modify sharee access to a shared
- calendar. The specified access to the shared calendar is given to
- the sharee.
-
- Definition:
-
-
-
-
-
-
-
-Daboo & York [Page 26]
-
- CalDAV Sharing and Publishing September 2012
-
-
-6.28. CS:remove
-
- Name: remove
-
- Namespace: http://calendarserver.org/ns/
-
- Purpose: Removes access for a sharee.
-
- Description: Used to remove sharee access to a shared calendar. All
- access to the shared calendar is removed for the sharee.
-
- Definition:
-
-
-
-6.29. CS:shared-as
-
- Name: shared-as
-
- Namespace: http://calendarserver.org/ns/
-
- Purpose: Identifies a shared calendar.
-
- Description: Returned by the server for a POST request by a sharee
- accepting a shared calendar invite. The DAV:href element
- specifies the URI of the calendar created by the acceptance.
-
- Definition:
-
-
-
-
-7. Security Considerations
-
- Per-user WebDAV properties and iCalendar data MUST only be accessible
- by the user that created them.
-
- Alarms set by the sharer SHOULD NOT be propagated to sharees by
- default. Clients SHOULD NOT automatically enable triggering of
- alarms on shared calendars that have just been accepted without
- confirmation by the user.
-
- TBD
-
-
-8. IANA Considerations
-
- This document does not require any actions on the part of IANA.
-
-
-
-Daboo & York [Page 27]
-
- CalDAV Sharing and Publishing September 2012
-
-
-9. Acknowledgments
-
- This specification is the result of discussions between the Apple
- calendar server and client teams.
-
-
-10. Normative References
-
- [RFC2119] Bradner, S., "Key words for use in RFCs to Indicate
- Requirement Levels", BCP 14, RFC 2119, March 1997.
-
- [RFC3744] Clemm, G., Reschke, J., Sedlar, E., and J. Whitehead, "Web
- Distributed Authoring and Versioning (WebDAV)
- Access Control Protocol", RFC 3744, May 2004.
-
- [RFC4791] Daboo, C., Desruisseaux, B., and L. Dusseault,
- "Calendaring Extensions to WebDAV (CalDAV)", RFC 4791,
- March 2007.
-
- [RFC4918] Dusseault, L., "HTTP Extensions for Web Distributed
- Authoring and Versioning (WebDAV)", RFC 4918, June 2007.
-
- [RFC6638] Daboo, C. and B. Desruisseaux, "Scheduling Extensions to
- CalDAV", RFC 6638, June 2012.
-
-
-Appendix A. Change History
-
- Changes in -03:
-
- 1. Fixed access element DTD.
-
- 2. Remove MKxxx and PROPPATCH mechanism for upgrading/downgrading
- shared state on a calendar collection. Instead the server
- implicitly sets the state based on whether there are any sharees
- or not..
-
- 3. Added CS:first-name and CS:last-name optional element to CS:
- organizer.
-
- 4. Added CALDAV:supported-calendar-component-set optional element to
- CS:invite-notification.
-
- Changes in -02:
-
- 1. Removed read-write-shared access mode - now a server that does
- not support shared scheduling should advertise that via a DAV
- header
-
-
-
-Daboo & York [Page 28]
-
- CalDAV Sharing and Publishing September 2012
-
-
- Changes in -01:
-
- 1. Added CS:shared-url property
-
- 2. Clarified that notifications are only required to be sent when
- sharee status is changed
-
-
-Authors' Addresses
-
- Cyrus Daboo
- Apple Inc.
- 1 Infinite Loop
- Cupertino, CA 95014
- USA
-
- Email: cyrus@daboo.name
- URI: http://www.apple.com/
-
-
- Eric York
- Apple Inc.
- 1 Infinite Loop
- Cupertino, CA 95014
- USA
-
- Email:
- URI: http://www.apple.com/
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-Daboo & York [Page 29]
-
diff --git a/vendor/sabre/dav/docs/draft-daboo-carddav-directory-gateway-02.txt b/vendor/sabre/dav/docs/draft-daboo-carddav-directory-gateway-02.txt
deleted file mode 100644
index 63aa8b29c..000000000
--- a/vendor/sabre/dav/docs/draft-daboo-carddav-directory-gateway-02.txt
+++ /dev/null
@@ -1,560 +0,0 @@
-
-
-
-Network Working Group C. Daboo
-Internet-Draft Apple Inc.
-Updates: XXXX-CardDAV August 24, 2010
-(if approved)
-Intended status: Standards Track
-Expires: February 25, 2011
-
-
- CardDAV Directory Gateway Extension
- draft-daboo-carddav-directory-gateway-02
-
-Abstract
-
- This document defines an extension to the vCard Extensions to WebDAV
- (CardDAV) protocol that allows a server to expose a directory as a
- read-only address book collection.
-
-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 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 February 25, 2011.
-
-Copyright Notice
-
- Copyright (c) 2010 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.
-
-
-
-Daboo Expires February 25, 2011 [Page 1]
-
-Internet-Draft CardDAV Directory Gateway Extension August 2010
-
-
-Table of Contents
-
- 1. Introduction and Overview . . . . . . . . . . . . . . . . . . 3
- 2. Conventions . . . . . . . . . . . . . . . . . . . . . . . . . 3
- 3. CARDDAV:directory-gateway Property . . . . . . . . . . . . . . 4
- 4. XML Element Definitions . . . . . . . . . . . . . . . . . . . 5
- 4.1. CARDDAV:directory . . . . . . . . . . . . . . . . . . . . 5
- 5. Client Guidelines . . . . . . . . . . . . . . . . . . . . . . 5
- 6. Server Guidelines . . . . . . . . . . . . . . . . . . . . . . 6
- 7. Security Considerations . . . . . . . . . . . . . . . . . . . 7
- 8. IANA Consideration . . . . . . . . . . . . . . . . . . . . . . 8
- 9. Acknowledgments . . . . . . . . . . . . . . . . . . . . . . . 8
- 10. References . . . . . . . . . . . . . . . . . . . . . . . . . . 8
- 10.1. Normative References . . . . . . . . . . . . . . . . . . . 8
- 10.2. Informative References . . . . . . . . . . . . . . . . . . 9
- Appendix A. Change History (to be removed prior to
- publication as an RFC) . . . . . . . . . . . . . . . 9
- Author's Address . . . . . . . . . . . . . . . . . . . . . . . . . 10
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-Daboo Expires February 25, 2011 [Page 2]
-
-Internet-Draft CardDAV Directory Gateway Extension August 2010
-
-
-1. Introduction and Overview
-
- The CardDAV [I-D.ietf-vcarddav-carddav] protocol defines a standard
- way of accessing, managing, and sharing contact information based on
- the vCard [RFC2426] format. Often, in an enterprise or service
- provider environment, a directory of all users hosted on the server
- (or elsewhere) is available (for example via Lightweight Directory
- Access Protocol (LDAP) [RFC4510] or some direct database access). It
- would be convenient for CardDAV clients if this directory were
- exposed as a "global" address book on the CardDAV server so it could
- be searched in the same way as personal address books are. This
- specification defines a "directory gateway" feature extension to
- CardDAV to enable this.
-
- This specification adds one new WebDAV property to principal
- resources that contains the URL to one or more directory gateway
- address book collection resources. It is important for clients to be
- able to distinguish this address book collection from others because
- there are specific limitations involved in using it as described
- below. To aid that, this specification defines an XML element that
- can be included as a child element of the DAV:resourcetype property
- of address book collections to identify them as directory gateways.
-
- Note that this feature is in no way intended to replace full
- directory access - it is meant to simply provide a convenient way for
- CardDAV clients to query contact-related attributes in directory
- records.
-
-
-2. Conventions
-
- 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].
-
- The term "protected" is used in the Conformance field of property
- definitions as defined in Section 15 of [RFC4918].
-
- This document uses XML DTD fragments ([W3C.REC-xml-20081126], Section
- 3.2) as a purely notational convention. WebDAV request and response
- bodies cannot be validated by a DTD due to the specific extensibility
- rules defined in Section 17 of [RFC4918] and due to the fact that all
- XML elements defined by this specification use the XML namespace name
- "DAV:". In particular:
-
- 1. element names use the "DAV:" namespace,
-
-
-
-
-
-Daboo Expires February 25, 2011 [Page 3]
-
-Internet-Draft CardDAV Directory Gateway Extension August 2010
-
-
- 2. element ordering is irrelevant unless explicitly stated,
-
- 3. extension elements (elements not already defined as valid child
- elements) may be added anywhere, except when explicitly stated
- otherwise,
-
- 4. extension attributes (attributes not already defined as valid for
- this element) may be added anywhere, except when explicitly
- stated otherwise.
-
- When XML element types in the namespaces "DAV:" and
- "urn:ietf:params:xml:ns:carddav" are referenced in this document
- outside of the context of an XML fragment, the strings "DAV:" and
- "CARDDAV:" will be prefixed to the element types, respectively.
-
-
-3. CARDDAV:directory-gateway Property
-
- Name: directory-gateway
-
- Namespace: urn:ietf:params:xml:ns:carddav
-
- Purpose: Identifies URLs of CardDAV address book collections acting
- as a directory gateway for the server.
-
- Protected: MUST be protected.
-
- allprop behavior: SHOULD NOT be returned by a PROPFIND DAV:allprop
- request.
-
- Description: The CARDDAV:directory-gateway identifies address book
- collection resources that are directory gateway address books for
- the server.
-
- Definition:
-
-
-
- Example:
-
-
- /directory
-
-
-
-
-
-
-
-
-Daboo Expires February 25, 2011 [Page 4]
-
-Internet-Draft CardDAV Directory Gateway Extension August 2010
-
-
-4. XML Element Definitions
-
-4.1. CARDDAV:directory
-
- Name: directory
-
- Namespace: urn:ietf:params:xml:ns:carddav
-
- Purpose: Used to indicate that an address book collection is a
- directory gateway.
-
- Description: This element appears in the DAV:resourcetype property
- on a address book collection resources that are directory
- gateways. Clients can use the presence of this element to
- identify directory gateway collections when doing PROPFINDs to
- list collection contents.
-
- Definition:
-
-
-
- Example:
-
-
-
-
-
-
-
-
-5. Client Guidelines
-
- Clients wishing to make use of directory gateway address books can
- request the CARDDAV:directory-gateway property (Section 3) when
- examining other properties on the principal resource for the user.
- If the property is not present, then the directory gateway feature is
- not supported by the server at that time.
-
- Clients can also detect the presence of directory gateway address
- book collections by retrieving the DAV:resourcetype property on
- collections that it lists, and look for the presence of the CARDDAV:
- directory element (Section 4.1).
-
- Since the directory being exposed via a directory gateway address
- book collection could be large, clients SHOULD limit the number of
- results returned in an CARDDAV:addressbook-query REPORT as defined in
- Section 8.6.1 of [I-D.ietf-vcarddav-carddav].
-
-
-
-Daboo Expires February 25, 2011 [Page 5]
-
-Internet-Draft CardDAV Directory Gateway Extension August 2010
-
-
- Clients MUST treat the directory gateway address book collection as a
- read-only collection, so HTTP methods that modify resource data or
- properties in the address book collection MUST NOT be used.
-
- Clients SHOULD NOT attempt to cache the entire contents of the
- directory gateway address book collection resource by retrieving all
- resources, or trying to examine all the properties of all resources
- (e.g., via a PROPFIND Depth:1 request). Instead, CARDDAV:
- addressbook-query REPORTs are used to search for specific address
- book object resources, and CARDDAV:multiget REPORTs and individual
- GET requests can be made to retrieve the actual vCard data for
- address book object resources found via a query.
-
- When presenting directory gateway collections to the user, clients
- SHOULD use the DAV:displayname property on the corresponding address
- book collections as the name of the directory gateway. This is
- important in the case where more than one directory gateway is
- available. Clients MAY also provide descriptive information about
- each directory gateway by examining the CARDDAV:addressbook-
- description property (see Section 6.2.1 of
- [I-D.ietf-vcarddav-carddav]) on the resource.
-
-
-6. Server Guidelines
-
- Servers wishing to expose a directory gateway as an address book
- collection MUST include the CARDDAV:directory-gateway property on all
- principal resources of users expected to use the feature.
-
- Since the directory being exposed via the directory gateway address
- book collection could be large, servers SHOULD truncate the number of
- results returned in an CARDDAV:addressbook-query REPORT as defined in
- Section 8.6.2 of [I-D.ietf-vcarddav-carddav]. In addition, servers
- SHOULD disallow requests that effectively enumerate the collection
- contents (e.g., PROPFIND Depth:1, trivial CARDDAV:addressbook-query,
- DAV:sync-collection REPORT).
-
- Servers need to expose the directory information as a set of address
- book object resources in the directory gateway address book
- collection resource. To do that, a mapping between the directory
- record format and the vCard data has to be applied. In general, only
- directory record attributes that have a direct equivalent in vCard
- SHOULD be mapped. It is up to individual implementations to
- determine which attributes to map. But in all cases servers MUST
- generate valid vCard data as returned to the client. In addition, as
- required by CardDAV, the UID vCard property MUST be present in the
- vCard data, and this value MUST be persistent from query to query for
- the same directory record.
-
-
-
-Daboo Expires February 25, 2011 [Page 6]
-
-Internet-Draft CardDAV Directory Gateway Extension August 2010
-
-
- Multiple directory sources could be available to the server. The
- server MAY use a single directory gateway resource to aggregate
- results from each directory source. When doing so care is needed
- when dealing with potential records that refer to the same entity.
- Servers MAY suppress any duplicates that they are able to determine
- themselves. Alternatively, multiple directory sources can be exposed
- as separate directory gateway resources.
-
- For any directory source, a server MAY expose multiple directory
- gateway resources where each represents a different query "scope" for
- the directory. Different scopes MAY be offered to different
- principals on the server. For example, the server might expose an
- entire company directory for searching as the resource "/directory-
- all" to all principals, but then provide "/directory-department-XYZ"
- as another directory gateway that has a search scope that implicitly
- limits the search results to just the "XYZ" department. Users in
- that department would then have a CARDDAV:directory-gateway property
- on their principal resource that included the "/directory-department-
- XYZ" resource. Users in other departments would have corresponding
- directory gateway resources available to them.
-
- Records in a directory can include data for more than just people,
- e.g, resources such as rooms or projectors, groups, computer systems
- etc. It is up to individual implementations to determine the most
- appropriate "scope" for the data returned via the directory gateway
- by filtering the appropriate record types. As above, servers could
- choose to expose people and resources under different directory
- gateway resources by implicitly limiting the search "scope" for each
- of those.
-
- Servers MAY apply implementation defined access rules to determine,
- on a per-user basis, what records are returned to a particularly user
- and the content of those records exposed via vCard data. This per-
- user behavior is in addition to the general security requirements
- detailed below.
-
- When multiple directory gateway collections are present, servers
- SHOULD provide a DAV:displayname property on each that disambiguates
- them. Servers MAY include a CARDDAV:addressbook-description property
- (see Section 6.2.1 of [I-D.ietf-vcarddav-carddav]) on each directory
- gateway resource to provide a description of the directory and any
- search "scope" that might be used, or any other useful information
- for users.
-
-
-7. Security Considerations
-
- Servers MUST ensure that client requests against the directory
-
-
-
-Daboo Expires February 25, 2011 [Page 7]
-
-Internet-Draft CardDAV Directory Gateway Extension August 2010
-
-
- gateway address book collection cannot use excessive resources (CPU,
- memory, network bandwidth etc), given that the directory could be
- large.
-
- Servers MUST take care not to expose sensitive directory record
- attributes in the vCard data via the directory gateway address book.
- In general only those properties that have direct correspondence in
- vCard SHOULD be exposed.
-
- Servers need to determine whether it is appropriate for the directory
- information to be available via CardDAV to unauthenticated users. If
- not, servers MUST ensure that unauthenticated users do not have
- access to the directory gateway address book object resource and its
- contents. If unauthenticated access is allowed, servers MAY choose
- to limit the set of vCard properties that are searchable or returned
- in the address book object resources when unauthenticated requests
- are made.
-
-
-8. IANA Consideration
-
- This document does not require any actions on the part of IANA.
-
-
-9. Acknowledgments
-
-
-10. References
-
-10.1. Normative References
-
- [I-D.ietf-vcarddav-carddav]
- Daboo, C., "vCard Extensions to WebDAV (CardDAV)",
- draft-ietf-vcarddav-carddav-10 (work in progress),
- November 2009.
-
- [RFC2119] Bradner, S., "Key words for use in RFCs to Indicate
- Requirement Levels", BCP 14, RFC 2119, March 1997.
-
- [RFC2426] Dawson, F. and T. Howes, "vCard MIME Directory Profile",
- RFC 2426, September 1998.
-
- [RFC4918] Dusseault, L., "HTTP Extensions for Web Distributed
- Authoring and Versioning (WebDAV)", RFC 4918, June 2007.
-
- [W3C.REC-xml-20081126]
- Paoli, J., Yergeau, F., Bray, T., Sperberg-McQueen, C.,
- and E. Maler, "Extensible Markup Language (XML) 1.0 (Fifth
-
-
-
-Daboo Expires February 25, 2011 [Page 8]
-
-Internet-Draft CardDAV Directory Gateway Extension August 2010
-
-
- Edition)", World Wide Web Consortium Recommendation REC-
- xml-20081126, November 2008,
- .
-
-10.2. Informative References
-
- [RFC4510] Zeilenga, K., "Lightweight Directory Access Protocol
- (LDAP): Technical Specification Road Map", RFC 4510,
- June 2006.
-
-
-Appendix A. Change History (to be removed prior to publication as an
- RFC)
-
- Changes in -02
-
- 1. Added CARDDAV:directory element for use in DAV:resourcetype
-
- 2. Allow CARDDAV:directory-gateway to be multi-valued
-
- 3. Explain how a server could implicit "scope" queries on different
- directory gateway resources
-
- Changes in -01
-
- 1. Remove duplicated text in a couple of sections
-
- 2. Add example of LDAP/generic database as possible directory
- "sources"
-
- 3. Add text to explain why the client needs to treat this as special
- and thus the need for a property
-
- 4. Added text to server guidelines indicating requirements for
- handling vCard UID properties
-
- 5. Added text to server guidelines explain that different record
- "types" may exist in the directory and the server is free to
- filter those as appropriate
-
- 6. Added text to server guidelines indicating that server are free
- to aggregate directory records from multiple sources
-
- 7. Added text to server guidelines indicating that servers are free
- to apply implementation defined access control to the returned
- data on a per-user basis
-
-
-
-
-
-Daboo Expires February 25, 2011 [Page 9]
-
-Internet-Draft CardDAV Directory Gateway Extension August 2010
-
-
-Author's Address
-
- Cyrus Daboo
- Apple Inc.
- 1 Infinite Loop
- Cupertino, CA 95014
- USA
-
- Email: cyrus@daboo.name
- URI: http://www.apple.com/
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-Daboo Expires February 25, 2011 [Page 10]
-
diff --git a/vendor/sabre/dav/docs/draft-desruisseaux-caldav-sched-10.txt b/vendor/sabre/dav/docs/draft-desruisseaux-caldav-sched-10.txt
deleted file mode 100644
index bcb2520f0..000000000
--- a/vendor/sabre/dav/docs/draft-desruisseaux-caldav-sched-10.txt
+++ /dev/null
@@ -1,5544 +0,0 @@
-
-
-
-Network Working Group C. Daboo
-Internet-Draft Apple Inc.
-Updates: 4791 (if approved) B. Desruisseaux
-Intended status: Standards Track Oracle
-Expires: March 10, 2012 September 7, 2011
-
-
- CalDAV Scheduling Extensions to WebDAV
- draft-desruisseaux-caldav-sched-10
-
-Abstract
-
- This document defines extensions to the CalDAV "calendar-access"
- feature to specify a standard way of performing scheduling
- transactions with iCalendar-based calendar components. This document
- defines the "calendar-auto-schedule" feature of CalDAV.
-
-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 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 March 10, 2012.
-
-Copyright Notice
-
- Copyright (c) 2011 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.
-
-
-
-Daboo & Desruisseaux Expires March 10, 2012 [Page 1]
-
-Internet-Draft CalDAV Scheduling Extensions September 2011
-
-
- This document may contain material from IETF Documents or IETF
- Contributions published or made publicly available before November
- 10, 2008. The person(s) controlling the copyright in some of this
- material may not have granted the IETF Trust the right to allow
- modifications of such material outside the IETF Standards Process.
- Without obtaining an adequate license from the person(s) controlling
- the copyright in such materials, this document may not be modified
- outside the IETF Standards Process, and derivative works of it may
- not be created outside the IETF Standards Process, except to format
- it for publication as an RFC or to translate it into languages other
- than English.
-
-Table of Contents
-
- 1. Introduction . . . . . . . . . . . . . . . . . . . . . . . . . 6
- 1.1. Terminology . . . . . . . . . . . . . . . . . . . . . . . 6
- 1.2. Approach . . . . . . . . . . . . . . . . . . . . . . . . . 7
- 1.3. Limitations . . . . . . . . . . . . . . . . . . . . . . . 7
- 1.4. Notational Conventions . . . . . . . . . . . . . . . . . . 8
- 1.5. XML Namespaces and Processing . . . . . . . . . . . . . . 8
- 2. Scheduling Process . . . . . . . . . . . . . . . . . . . . . . 10
- 3. Scheduling Support . . . . . . . . . . . . . . . . . . . . . . 11
- 3.1. Example OPTIONS Request . . . . . . . . . . . . . . . . . 11
- 4. Scheduling Collections . . . . . . . . . . . . . . . . . . . . 12
- 4.1. Scheduling Outbox Collection . . . . . . . . . . . . . . . 12
- 4.2. Scheduling Inbox Collection . . . . . . . . . . . . . . . 13
- 4.3. Calendaring Reports Extensions . . . . . . . . . . . . . . 15
- 5. Scheduling Transactions . . . . . . . . . . . . . . . . . . . 16
- 5.1. Identifying Scheduling Object Resources . . . . . . . . . 16
- 5.2. Handling Scheduling Object Resources . . . . . . . . . . . 16
- 5.2.1. Organizer Scheduling Object Resources . . . . . . . . 16
- 5.2.1.1. Create . . . . . . . . . . . . . . . . . . . . . . 17
- 5.2.1.2. Modify . . . . . . . . . . . . . . . . . . . . . . 18
- 5.2.1.3. Remove . . . . . . . . . . . . . . . . . . . . . . 20
- 5.2.2. Attendee Scheduling Object Resources . . . . . . . . . 20
- 5.2.2.1. Allowed Attendee Changes . . . . . . . . . . . . . 20
- 5.2.2.2. Create . . . . . . . . . . . . . . . . . . . . . . 21
- 5.2.2.3. Modify . . . . . . . . . . . . . . . . . . . . . . 22
- 5.2.2.4. Remove . . . . . . . . . . . . . . . . . . . . . . 23
- 5.2.3. HTTP Methods . . . . . . . . . . . . . . . . . . . . . 24
- 5.2.3.1. PUT . . . . . . . . . . . . . . . . . . . . . . . 24
- 5.2.3.2. COPY . . . . . . . . . . . . . . . . . . . . . . . 24
- 5.2.3.3. MOVE . . . . . . . . . . . . . . . . . . . . . . . 25
- 5.2.3.4. DELETE . . . . . . . . . . . . . . . . . . . . . . 26
- 5.2.4. Additional Method Preconditions . . . . . . . . . . . 26
- 5.2.4.1. CALDAV:unique-scheduling-object-resource
- Precondition . . . . . . . . . . . . . . . . . . . 26
- 5.2.4.2. CALDAV:same-organizer-in-all-components
-
-
-
-Daboo & Desruisseaux Expires March 10, 2012 [Page 2]
-
-Internet-Draft CalDAV Scheduling Extensions September 2011
-
-
- Precondition . . . . . . . . . . . . . . . . . . . 26
- 5.2.4.3. CALDAV:allowed-organizer-scheduling-object-chan
- Precondition . . . . . . . . . . . . . . . . . . . 27
- 5.2.4.4. CALDAV:allowed-attendee-scheduling-object-chang
- Precondition . . . . . . . . . . . . . . . . . . . 28
- 5.2.5. DTSTAMP and SEQUENCE Properties . . . . . . . . . . . 28
- 5.2.6. Restrict Recurrence Instances Sent to Attendees . . . 28
- 5.2.7. Forcing the Server to Send a Scheduling Message . . . 29
- 6. Processing Incoming Scheduling Messages . . . . . . . . . . . 30
- 6.1. Processing Organizer Requests, Additions, and
- Cancellations . . . . . . . . . . . . . . . . . . . . . . 30
- 6.2. Processing Attendee Replies . . . . . . . . . . . . . . . 31
- 6.3. Scheduling Messages as Notifications . . . . . . . . . . . 31
- 6.4. Default Calendar Collection . . . . . . . . . . . . . . . 31
- 6.4.1. Additional Method Preconditions . . . . . . . . . . . 32
- 6.4.1.1. CALDAV:default-calendar-needed Precondition . . . 32
- 6.4.1.2. CALDAV:valid-schedule-default-calendar-URL
- Precondition . . . . . . . . . . . . . . . . . . . 33
- 7. Request for Busy Time Information . . . . . . . . . . . . . . 34
- 7.1. Status Codes . . . . . . . . . . . . . . . . . . . . . . . 34
- 7.2. Additional Method Preconditions . . . . . . . . . . . . . 34
- 7.2.1. DAV:need-privileges Precondition . . . . . . . . . . . 34
- 7.2.2. CALDAV:supported-collection Precondition . . . . . . . 35
- 7.2.3. CALDAV:supported-calendar-data Precondition . . . . . 36
- 7.2.4. CALDAV:valid-calendar-data Precondition . . . . . . . 36
- 7.2.5. CALDAV:valid-scheduling-message Precondition . . . . . 37
- 7.2.6. CALDAV:valid-organizer Precondition . . . . . . . . . 37
- 7.2.7. CALDAV:max-resource-size Precondition . . . . . . . . 38
- 7.3. Response to a POST request . . . . . . . . . . . . . . . . 38
- 8. Avoiding Conflicts when Updating Scheduling Object
- Resources . . . . . . . . . . . . . . . . . . . . . . . . . . 40
- 8.1. PUT . . . . . . . . . . . . . . . . . . . . . . . . . . . 42
- 8.2. DELETE, COPY or MOVE . . . . . . . . . . . . . . . . . . . 42
- 9. Other Scheduling Considerations . . . . . . . . . . . . . . . 44
- 9.1. Attendee Participation Status . . . . . . . . . . . . . . 44
- 9.2. Schedule Status Values . . . . . . . . . . . . . . . . . . 45
- 10. Additional iCalendar Property Parameters . . . . . . . . . . . 49
- 10.1. Schedule Agent Parameter . . . . . . . . . . . . . . . . . 49
- 10.2. Schedule Force Send Parameter . . . . . . . . . . . . . . 50
- 10.3. Schedule Status Parameter . . . . . . . . . . . . . . . . 51
- 11. Additional Message Header Fields . . . . . . . . . . . . . . . 53
- 11.1. Schedule-Reply Request Header . . . . . . . . . . . . . . 53
- 11.2. Schedule-Tag Response Header . . . . . . . . . . . . . . . 53
- 11.3. If-Schedule-Tag-Match Request Header . . . . . . . . . . . 54
- 12. Additional WebDAV Properties . . . . . . . . . . . . . . . . . 55
- 12.1. CALDAV:schedule-calendar-transp Property . . . . . . . . . 55
- 12.2. CALDAV:schedule-default-calendar-URL Property . . . . . . 56
- 12.3. CALDAV:schedule-tag Property . . . . . . . . . . . . . . . 57
-
-
-
-Daboo & Desruisseaux Expires March 10, 2012 [Page 3]
-
-Internet-Draft CalDAV Scheduling Extensions September 2011
-
-
- 13. Scheduling Access Control . . . . . . . . . . . . . . . . . . 58
- 13.1. Scheduling Privileges . . . . . . . . . . . . . . . . . . 58
- 13.1.1. Privileges on Scheduling Inbox Collections . . . . . . 58
- 13.1.1.1. CALDAV:schedule-deliver Privilege . . . . . . . . 58
- 13.1.1.2. CALDAV:schedule-deliver-invite Privilege . . . . . 59
- 13.1.1.3. CALDAV:schedule-deliver-reply Privilege . . . . . 59
- 13.1.1.4. CALDAV:schedule-query-freebusy Privilege . . . . . 59
- 13.1.2. Privileges on Scheduling Outbox Collections . . . . . 59
- 13.1.2.1. CALDAV:schedule-send Privilege . . . . . . . . . . 59
- 13.1.2.2. CALDAV:schedule-send-invite Privilege . . . . . . 60
- 13.1.2.3. CALDAV:schedule-send-reply Privilege . . . . . . . 60
- 13.1.2.4. CALDAV:schedule-send-freebusy Privilege . . . . . 60
- 13.1.3. Aggregation of Scheduling Privileges . . . . . . . . . 60
- 13.2. Additional Principal Properties . . . . . . . . . . . . . 61
- 13.2.1. CALDAV:schedule-inbox-URL Property . . . . . . . . . . 61
- 13.2.2. CALDAV:schedule-outbox-URL Property . . . . . . . . . 62
- 13.2.3. CALDAV:calendar-user-address-set Property . . . . . . 62
- 13.2.4. CALDAV:calendar-user-type Property . . . . . . . . . . 63
- 14. XML Element Definitions . . . . . . . . . . . . . . . . . . . 65
- 14.1. CALDAV:schedule-response XML Element . . . . . . . . . . . 65
- 14.2. CALDAV:response XML Element . . . . . . . . . . . . . . . 65
- 14.3. CALDAV:recipient XML Element . . . . . . . . . . . . . . . 65
- 14.4. CALDAV:request-status XML Element . . . . . . . . . . . . 66
- 15. Security Considerations . . . . . . . . . . . . . . . . . . . 67
- 15.1. Verifying Scheduling Transactions . . . . . . . . . . . . 67
- 15.2. Verifying Busy Time Information Requests . . . . . . . . . 67
- 15.3. Privacy Issues . . . . . . . . . . . . . . . . . . . . . . 68
- 16. IANA Considerations . . . . . . . . . . . . . . . . . . . . . 69
- 16.1. Message Header Field Registrations . . . . . . . . . . . . 69
- 16.1.1. Schedule-Reply . . . . . . . . . . . . . . . . . . . . 69
- 16.1.2. Schedule-Tag . . . . . . . . . . . . . . . . . . . . . 69
- 16.1.3. If-Schedule-Tag-Match . . . . . . . . . . . . . . . . 69
- 16.2. iCalendar Property Parameter Registrations . . . . . . . . 70
- 16.3. iCalendar REQUEST-STATUS Value Registrations . . . . . . . 70
- 16.4. Additional iCalendar Elements Registries . . . . . . . . . 70
- 16.4.1. Schedule Agent Values Registry . . . . . . . . . . . . 70
- 16.4.2. Schedule Force Send Values Registry . . . . . . . . . 71
- 17. Acknowledgements . . . . . . . . . . . . . . . . . . . . . . . 72
- 18. References . . . . . . . . . . . . . . . . . . . . . . . . . . 73
- 18.1. Normative References . . . . . . . . . . . . . . . . . . . 73
- 18.2. Informative References . . . . . . . . . . . . . . . . . . 74
- Appendix A. Scheduling Privileges Summary . . . . . . . . . . . . 75
- A.1. Scheduling Inbox Privileges . . . . . . . . . . . . . . . 75
- A.2. Scheduling Outbox Privileges . . . . . . . . . . . . . . . 75
- Appendix B. Example Scheduling Transactions . . . . . . . . . . . 77
- B.1. Example: Organizer Inviting Multiple Attendees . . . . . . 77
- B.2. Example: Attendee Receiving an Invitation . . . . . . . . 79
- B.3. Example: Attendee Replying to an Invitation . . . . . . . 81
-
-
-
-Daboo & Desruisseaux Expires March 10, 2012 [Page 4]
-
-Internet-Draft CalDAV Scheduling Extensions September 2011
-
-
- B.4. Example: Organizer Receiving a Reply to an Invitation . . 83
- B.5. Example: Organizer Requesting Busy Time Information . . . 85
- B.6. Example: User Attempting to Invite Attendee on behalf
- of Organizer . . . . . . . . . . . . . . . . . . . . . . . 87
- B.7. Example: Attendee Declining an Instance of a Recurring
- Event . . . . . . . . . . . . . . . . . . . . . . . . . . 88
- B.8. Example: Attendee Removing an Instance of a Recurring
- Event . . . . . . . . . . . . . . . . . . . . . . . . . . 92
- Appendix C. Changes (to be removed by RFC Editor prior to
- publication) . . . . . . . . . . . . . . . . . . . . 95
- C.1. Changes in -10 . . . . . . . . . . . . . . . . . . . . . . 95
- C.2. Changes in -09 . . . . . . . . . . . . . . . . . . . . . . 95
- C.3. Changes in -08 . . . . . . . . . . . . . . . . . . . . . . 96
- C.4. Changes in -07 . . . . . . . . . . . . . . . . . . . . . . 97
- C.5. Changes in -06 . . . . . . . . . . . . . . . . . . . . . . 97
- C.6. Changes in -05 . . . . . . . . . . . . . . . . . . . . . . 98
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-Daboo & Desruisseaux Expires March 10, 2012 [Page 5]
-
-Internet-Draft CalDAV Scheduling Extensions September 2011
-
-
-1. Introduction
-
- This document specifies extensions to the CalDAV "calendar-access"
- [RFC4791] feature to enable scheduling of iCalendar-based [RFC5545]
- calendar components between Calendar Users. This extension leverages
- the scheduling methods defined in the iCalendar Transport-independent
- Interoperability Protocol (iTIP) [RFC5546] to permit Calendar Users
- to perform scheduling transactions such as schedule, reschedule,
- respond to scheduling request or cancel calendar components, as well
- as search for busy time information.
-
- Discussion of this Internet-Draft is taking place on the mailing list
- .
-
-1.1. Terminology
-
- This specification uses much of the same terminology as iCalendar
- [RFC5545], iTIP [RFC5546], WebDAV [RFC4918], and CalDAV [RFC4791].
- The following definitions are provided to aid the reader in
- understanding this specification.
-
- Calendar User (CU): An entity (often a human) that accesses calendar
- information [RFC3283].
-
- Calendar collection: A resource that acts as a container of
- references to child calendar object resources [RFC4791].
-
- Calendar object resource: A resource representing a calendar object
- (event, to-do, journal entry, or other calendar components)
- [RFC4791].
-
- Scheduling object resource: A calendar object resource contained in
- a calendar collection for which the server will take care of
- sending scheduling messages on behalf of the owner of the calendar
- collection.
-
- Organizer scheduling object resource: A scheduling object resource
- owned by an Organizer.
-
- Attendee scheduling object resource: A scheduling object resource
- owned by an Attendee.
-
- Automatic scheduling transaction: Add, change or remove operations
- on a scheduling object resource for which the server will deliver
- scheduling messages to other Calendar Users.
-
-
-
-
-
-
-Daboo & Desruisseaux Expires March 10, 2012 [Page 6]
-
-Internet-Draft CalDAV Scheduling Extensions September 2011
-
-
- Scheduling message: A calendar object that describes a scheduling
- transaction such as schedule, reschedule, reply, or cancel.
-
- Scheduling Outbox collection: A resource at which busy time
- information requests are targeted.
-
- Scheduling Inbox collection: A collection in which incoming
- scheduling messages are delivered.
-
-1.2. Approach
-
- iTIP [RFC5546] outlines a model where Calendar Users exchange
- scheduling messages with one another. Often times, clients are made
- responsible for generating and sending scheduling messages as well as
- processing incoming scheduling messages. This approach yields a
- number of problems, including:
-
- o For most updates to a calendar component, clients are responsible
- for sending appropriate scheduling messages to the Organizer or
- the Attendees.
-
- o The handling of incoming scheduling messages and the updates to
- calendars impacted by those messages only occurs when clients are
- active.
-
- o Due to the update latency, it is possible for calendars of
- different Calendar Users to reflect different, inaccurate states.
-
- This specification uses an alternative approach where the server is
- made responsible for sending scheduling messages and processing
- incoming scheduling messages. This approach frees the clients from
- the submission and processing of scheduling messages and ensures
- better consistency of calendar data across users' calendars. The
- operation of creating, modifying or deleting a calendar component in
- a calendar is enough to trigger the server to deliver the necessary
- scheduling messages to the appropriate Calendar Users.
-
-1.3. Limitations
-
- While the scheduling features described in this specification are
- based on iTIP [RFC5546], some of its more advanced features have
- deliberately been left out in order to keep this specification
- simple. In particular, the following iTIP [RFC5546] features are not
- covered: publishing, countering, delegating, refreshing and
- forwarding calendar components, as well as replacing the Organizer of
- a calendar component.
-
- The goal of this specification is to provide the essential scheduling
-
-
-
-Daboo & Desruisseaux Expires March 10, 2012 [Page 7]
-
-Internet-Draft CalDAV Scheduling Extensions September 2011
-
-
- features needed. It is expected that future extensions will be
- developed to address the more advanced features.
-
-1.4. Notational Conventions
-
- 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].
-
- The Augmented BNF (ABNF) syntax used by this document to specify the
- format definition of new iCalendar elements is defined in [RFC5234].
-
- The Augmented BNF (ABNF) syntax used by this document to specify the
- format definition of new message header fields to be used with the
- HTTP/1.1 protocol is described in Section 2.1 of [RFC2616]. Since
- this Augmented BNF uses the basic production rules provided in
- Section 2.2 of [RFC2616], these rules apply to this document as well.
-
- The term "protected" is used in the Conformance field of WebDAV
- property definitions as defined in Section 15 of [RFC4918].
-
-1.5. XML Namespaces and Processing
-
- This document uses XML DTD fragments ([W3C.REC-xml-20081126], Section
- 3.2) as a purely notational convention. WebDAV request and response
- bodies cannot be validated by a DTD due to the specific extensibility
- rules defined in Section 17 of [RFC4918] and due to the fact that all
- XML elements defined by that specification use the XML namespace name
- "DAV:". In particular:
-
- 1. element names use the "DAV:" namespace,
-
- 2. element ordering is irrelevant unless explicitly stated,
-
- 3. extension elements (elements not already defined as valid child
- elements) may be added anywhere, except when explicitly stated
- otherwise,
-
- 4. extension attributes (attributes not already defined as valid for
- this element) may be added anywhere, except when explicitly
- stated otherwise.
-
- The XML elements specified in this document are defined in the
- "urn:ietf:params:xml:ns:caldav" XML namespace registered by CalDAV
- [RFC4791].
-
- When XML element types in the namespaces "DAV:" and
- "urn:ietf:params:xml:ns:caldav" are referenced in this document
-
-
-
-Daboo & Desruisseaux Expires March 10, 2012 [Page 8]
-
-Internet-Draft CalDAV Scheduling Extensions September 2011
-
-
- outside of the context of an XML fragment, the strings "DAV:" and
- "CALDAV:" will be prefixed to the element types, respectively.
-
- This document inherits, and sometimes extends, DTD productions from
- Section 14 of [RFC4918].
-
- Also note that some CalDAV XML element names are identical to WebDAV
- XML element names, though their namespace differs. Care must be
- taken not to confuse the two sets of names.
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-Daboo & Desruisseaux Expires March 10, 2012 [Page 9]
-
-Internet-Draft CalDAV Scheduling Extensions September 2011
-
-
-2. Scheduling Process
-
- The process of scheduling an event between different parties often
- involves a series of steps with different actors playing particular
- roles during the whole process. Typically there is an event
- "Organizer" whose role is to schedule an event between one or more
- "Attendees", and this is done by sending out invitations and handling
- responses from each Attendee.
-
- This process can typically be broken down into two phases.
-
- In the first phase, the Organizer will query the busy time
- information of each Attendee to determine the most appropriate time
- for the event. This request is sometimes called a "freebusy" lookup.
-
- In the second phase, the Organizer sends out invitations to each
- Attendee using the time previously determined from the freebusy
- lookup. There then follows exchanges between Organizer and Attendees
- regarding the invitation. Some Attendees may choose to attend at the
- time proposed by the Organizer, others may decline to attend. The
- Organizer needs to process each of the replies from the Attendees and
- take appropriate action to confirm the event, reschedule it or
- perhaps cancel it.
-
- The user expectation as to how a calendaring and scheduling system
- should respond in each of these two phases is somewhat different. In
- the case of a freebusy lookup, users expect to get back results
- immediately so that they can then move on to the invitation phase as
- quickly as possible. In the case of invitations, it is expected that
- each Attendee will reply with their participation status in their own
- time, so delays in receiving replies are anticipated. Thus
- calendaring and scheduling systems should treat these two operational
- phases in different ways to accommodate the user expectations, which
- is what this specification does.
-
- While the scenario described above only covers the case of scheduling
- events between Calendar Users, and requesting busy time information,
- this specification also provides support for the scheduling of to-dos
- between Calendar Users. For the majority of the following
- discussion, scheduling of events and freebusy lookups will be
- discussed, as these are the more common operations.
-
-
-
-
-
-
-
-
-
-
-Daboo & Desruisseaux Expires March 10, 2012 [Page 10]
-
-Internet-Draft CalDAV Scheduling Extensions September 2011
-
-
-3. Scheduling Support
-
- A server that supports the features described in this document MUST
- include "calendar-auto-schedule" as a field in the DAV response
- header from an OPTIONS request on any resource that supports any
- scheduling actions, properties, privileges or methods.
-
- To advertise support for the CalDAV "calendar-auto-schedule" feature
- a server is REQUIRED to support and advertise support for the CalDAV
- "calendar-access" [RFC4791] feature.
-
-3.1. Example OPTIONS Request
-
- In this example, the OPTIONS response indicates that the server
- supports the "calendar-access" and "calendar-auto-schedule" features
- and that the resource "/home/cyrus/calendars/inbox/" supports the
- scheduling actions, properties, privileges and methods defined in
- this specification.
-
- >> Request <<
-
- OPTIONS /home/cyrus/calendars/inbox/ HTTP/1.1
- Host: cal.example.com
-
- >> Response <<
-
- HTTP/1.1 204 No Content
- Date: Thu, 31 Mar 2011 09:00:00 GMT
- Allow: OPTIONS, GET, HEAD, DELETE, TRACE, PROPFIND
- Allow: PROPPATCH, LOCK, UNLOCK, REPORT, ACL
- DAV: 1, 2, 3, access-control
- DAV: calendar-access, calendar-auto-schedule
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-Daboo & Desruisseaux Expires March 10, 2012 [Page 11]
-
-Internet-Draft CalDAV Scheduling Extensions September 2011
-
-
-4. Scheduling Collections
-
- This specification introduces new collection resource types that are
- used to manage scheduling object resources, and scheduling
- privileges, as well as provide scheduling functionality. It is the
- server's responsibility to create these collection resources, and
- clients have no way to create or delete them.
-
-4.1. Scheduling Outbox Collection
-
- A scheduling Outbox collection is used as the target for busy time
- information requests, and to manage privileges that apply to outgoing
- scheduling requests.
-
- A scheduling Outbox collection MUST report the DAV:collection and
- CALDAV:schedule-outbox XML elements in the value of the DAV:
- resourcetype property. The element type declaration for CALDAV:
- schedule-outbox is:
-
-
-
- Example:
-
-
-
-
-
-
- New WebDAV ACL [RFC3744] privileges can be set on the scheduling
- Outbox collection to control who is allowed to send scheduling
- messages on behalf of the Calendar User associated with the
- scheduling Outbox collection. See Section 13.1 for more details.
-
- A scheduling Outbox collection MUST NOT be a child (at any depth) of
- a calendar collection resource.
-
- The following WebDAV properties specified in CalDAV "calendar-access"
- [RFC4791] MAY also be defined on scheduling Outbox collections:
-
- CALDAV:supported-calendar-component-set - when present this
- indicates the allowed calendar component types for scheduling
- messages submitted to the scheduling Outbox collection with the
- POST method.
-
- CALDAV:supported-calendar-data - when present this indicates the
- allowed media types for scheduling messages submitted to the
- scheduling Outbox collection with the POST method.
-
-
-
-
-Daboo & Desruisseaux Expires March 10, 2012 [Page 12]
-
-Internet-Draft CalDAV Scheduling Extensions September 2011
-
-
- CALDAV:max-resource-size - when present this indicates the maximum
- size in octets of a resource that the server is willing to accept
- for scheduling messages submitted to the scheduling Outbox
- collection with the POST method.
-
- CALDAV:min-date-time - when present this indicates the earliest
- date and time (in UTC) that the server is willing to accept for
- any DATE or DATE-TIME value in scheduling messages submitted to
- the scheduling Outbox collection with the POST method.
-
- CALDAV:max-date-time - when present this indicates the latest date
- and time (in UTC) that the server is willing to accept for any
- DATE or DATE-TIME value in scheduling messages submitted to the
- scheduling Outbox collection with the POST method.
-
- CALDAV:max-attendees-per-instance - when present this indicates
- the maximum number of ATTENDEE properties in any instance of
- scheduling messages submitted to the scheduling Outbox collection
- with the POST method. Specifically, this limits the total number
- of Attendees whose freebusy information can be queried in a single
- request.
-
- The use of child resources in a scheduling Outbox collection is
- reserved for future revisions or extensions of this specification.
-
-4.2. Scheduling Inbox Collection
-
- A scheduling Inbox collection contains copies of incoming scheduling
- messages. These may be requests sent by an Organizer, or replies
- sent by an Attendee in response to a request. The scheduling Inbox
- collection is also used to manage scheduling privileges.
-
- A scheduling Inbox collection MUST report the DAV:collection and
- CALDAV:schedule-inbox XML elements in the value of the DAV:
- resourcetype property. The element type declaration for CALDAV:
- schedule-inbox is:
-
-
-
- Example:
-
-
-
-
-
-
- Scheduling Inbox collections MUST only contain calendar object
- resources that obey the restrictions specified in iTIP [RFC5546].
-
-
-
-Daboo & Desruisseaux Expires March 10, 2012 [Page 13]
-
-Internet-Draft CalDAV Scheduling Extensions September 2011
-
-
- Consequently, scheduling Inbox collections MUST NOT contain any types
- of collection resources. Restrictions defined in Section 4.1 of
- CalDAV "calendar-access" [RFC4791] on calendar object resources
- contained in calendar collections (e.g., "UID" uniqueness) do not
- apply to calendar object resources contained in a scheduling Inbox
- collection. Thus, multiple calendar object resources contained in a
- scheduling Inbox collection can have the same "UID" property value
- (i.e., multiple scheduling messages for the same calendar component).
-
- New WebDAV ACL [RFC3744] privileges can be set on the scheduling
- Inbox collection to control from whom the Calendar User associated
- with the scheduling Inbox collection will accept scheduling messages
- from. See Section 13.1 for more details.
-
- A scheduling Inbox collection MUST NOT be a child (at any depth) of a
- calendar collection resource.
-
- The following WebDAV properties specified in CalDAV "calendar-access"
- [RFC4791] MAY also be defined on scheduling Inbox collections:
-
- CALDAV:calendar-timezone - when present this contains a time zone
- that the server can use when calendar date-time operations are
- carried out, for example when a time-range CALDAV:calendar-query
- REPORT is targeted at a scheduling Inbox collection.
-
- CALDAV:supported-calendar-component-set - when present this
- indicates the allowed calendar component types for scheduling
- messages delivered to the scheduling Inbox collection.
-
- CALDAV:supported-calendar-data - when present this indicates the
- allowed media types for scheduling messages delivered to the
- scheduling Inbox collection.
-
- CALDAV:max-resource-size - when present this indicates the maximum
- size in octets of a resource that the server is willing to accept
- for scheduling messages delivered to the scheduling Inbox
- collection.
-
- CALDAV:min-date-time - when present this indicates the earliest
- date and time (in UTC) that the server is willing to accept for
- any DATE or DATE-TIME value in scheduling messages delivered to
- the scheduling Inbox collection.
-
- CALDAV:max-date-time - when present this indicates the latest date
- and time (in UTC) that the server is willing to accept for any
- DATE or DATE-TIME value in scheduling messages delivered to the
- scheduling Inbox collection.
-
-
-
-
-Daboo & Desruisseaux Expires March 10, 2012 [Page 14]
-
-Internet-Draft CalDAV Scheduling Extensions September 2011
-
-
- CALDAV:max-instances - when present this indicates the maximum
- number of recurrence instances in scheduling messages delivered to
- the scheduling Inbox collection.
-
- CALDAV:max-attendees-per-instance - when present this indicates
- the maximum number of ATTENDEE properties in any instance of
- scheduling messages delivered to the scheduling Inbox collection.
-
-4.3. Calendaring Reports Extensions
-
- This specification extends the CALDAV:calendar-query and CALDAV:
- calendar-multiget REPORTs to return results for calendar object
- resources in scheduling Inbox collections.
-
- When a CALDAV:calendar-query REPORT includes a time-range query and
- targets a scheduling Inbox collection, if any calendar object
- resources contain "VEVENT" calendar components that do not include a
- "DTSTART" iCalendar property (as allowed by iTIP [RFC5546]) then such
- components MUST always match the time-range query test.
-
- Note that the CALDAV:free-busy-query REPORT is not supported on
- scheduling Inbox collections.
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-Daboo & Desruisseaux Expires March 10, 2012 [Page 15]
-
-Internet-Draft CalDAV Scheduling Extensions September 2011
-
-
-5. Scheduling Transactions
-
- When a calendar object resource is created, modified or removed from
- a calendar collection, the server examines the calendar data and
- checks to see whether the data represents a scheduling object
- resource. If it does, the server will automatically attempt to
- deliver a scheduling message to the appropriate Calendar Users.
- Several types of scheduling operations can occur in this case,
- equivalent to iTIP "REQUEST", "REPLY", "CANCEL", and "ADD"
- operations.
-
-5.1. Identifying Scheduling Object Resources
-
- Calendar object resources on which the server performs automatic
- scheduling transactions are referred to as scheduling object
- resources. There are two types of scheduling object resources:
- organizer scheduling object resources, and attendee scheduling object
- resources.
-
- A calendar object resource is considered to be a valid organizer
- scheduling object resource if the "ORGANIZER" iCalendar property is
- present and set in all the calendar components to a value that
- matches one of the calendar user addresses of the owner of the
- calendar collection.
-
- A calendar object resource is considered to be a valid attendee
- scheduling object resource if the "ORGANIZER" iCalendar property is
- present and set in all the calendar components to the same value and
- doesn't match one of the calendar user addresses of the owner of the
- calendar collection, and at least one of the "ATTENDEE" iCalendar
- property values matches one of the calendar user addresses of the
- owner of the calendar collection.
-
- The creation of attendee scheduling object resources is typically
- done by the server, with the resource being created in an appropriate
- calendar collection (see Section 6.4).
-
-5.2. Handling Scheduling Object Resources
-
- The server's behavior when processing a scheduling object resource
- depends on whether it is owned by the Organizer or an Attendee
- specified in the calendar data.
-
-5.2.1. Organizer Scheduling Object Resources
-
- An Organizer can create, modify or remove a scheduling object
- resource. The create, modify and remove behaviors for the server are
- each described next, and the way these are invoked via HTTP requests
-
-
-
-Daboo & Desruisseaux Expires March 10, 2012 [Page 16]
-
-Internet-Draft CalDAV Scheduling Extensions September 2011
-
-
- is described in Section 5.2.3.
-
- The Organizer of a calendar component may also be an Attendee of that
- calendar component. In such cases the server MUST NOT send a
- scheduling message to the Attendee that matches the Organizer.
-
-5.2.1.1. Create
-
- When a scheduling object resource is created by the Organizer, the
- server will inspect each "ATTENDEE" property to determine if a
- scheduling message should be delivered to this Attendee according to
- the value of the "SCHEDULE-AGENT" property parameter (see
- Section 10.1) as described in the table below:
-
- +------------------+-------------+
- | SCHEDULE-AGENT | iTIP METHOD |
- +==================+=============+
- | SERVER (default) | REQUEST |
- +------------------+-------------+
- | CLIENT | -- |
- +------------------+-------------+
- | NONE | -- |
- +------------------+-------------+
-
- The attempt to deliver the scheduling message will either succeed or
- fail. In all cases, the server MUST add a "SCHEDULE-STATUS"
- iCalendar property parameter (see Section 10.3) to the "ATTENDEE"
- iCalendar property in the scheduling object resource being created,
- and set its value as described in Section 9.2. This will result in
- the created calendar object resource differing from the calendar data
- sent in the HTTP request. As a result clients MAY reload the
- calendar data from the server in order to update to the new server
- generated state information. Servers MUST NOT set the "SCHEDULE-
- STATUS" property parameter on the "ATTENDEE" property of Attendees
- for which it did not attempt to deliver a scheduling message.
-
- Restrictions:
-
- 1. The server SHOULD reject any attempt to set the "PARTSTAT"
- iCalendar property parameter value of the "ATTENDEE" iCalendar
- property of other users in the calendar object resource to a
- value other than "NEEDS-ACTION" if the "SCHEDULE-AGENT" property
- parameter value is not present or set to the value "SERVER".
-
- 2. The server MAY reject attempts to create a scheduling object
- resource that specifies a "UID" property value already specified
- in a scheduling object resource contained in another calendar
- collection of the Organizer.
-
-
-
-Daboo & Desruisseaux Expires March 10, 2012 [Page 17]
-
-Internet-Draft CalDAV Scheduling Extensions September 2011
-
-
- 3. The server MUST take into account scheduling privileges as
- described in Section 13.1 when handling the creation of a
- scheduling object resource.
-
- 4. Restrictions on calendar object resources defined in Section 4.1
- of [RFC4791] MUST also be enforced.
-
- The server MUST return an error with the CALDAV:allowed-organizer-
- scheduling-object-change precondition code (Section 5.2.4.3) when the
- Organizer attempts to change the iCalendar data in a manner that is
- forbidden.
-
-5.2.1.2. Modify
-
- When a scheduling object resource is modified by the Organizer, the
- server will inspect each "ATTENDEE" property in the new calendar data
- to determine which ones have the "SCHEDULE-AGENT" iCalendar property
- parameter. It will then need to compare this with the "ATTENDEE"
- properties in the existing calendar object resource that is being
- modified.
-
- For each Attendee in the old and new calendar data on a per-instance
- basis, and taking into account the addition or removal of Attendees,
- the server will determine whether to deliver a scheduling message to
- the Attendee. The following table determines whether the server
- needs to deliver a scheduling message, and if so which iTIP
- scheduling method to use. The values "SERVER", "CLIENT", and "NONE"
- in the top and left titles of the table refer to the "SCHEDULE-AGENT"
- parameter value of the "ATTENDEE" property, and the values ""
- and "" are used to cover the cases where the "ATTENDEE"
- property is not present (Old) or is being removed (New).
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-Daboo & Desruisseaux Expires March 10, 2012 [Page 18]
-
-Internet-Draft CalDAV Scheduling Extensions September 2011
-
-
- +---------------+-----------------------------------------------+
- | | New |
- | ATTENDEE +-----------+-----------+-----------+-----------+
- | | | SERVER | CLIENT | NONE |
- | | | (default) | | |
- +===+===========+===========+===========+===========+===========+
- | | | -- | REQUEST / | -- | -- |
- | | | | ADD | | |
- | +-----------+-----------+-----------+-----------+-----------+
- | | SERVER | CANCEL | REQUEST | CANCEL | CANCEL |
- | O | (default) | | | | |
- | l +-----------+-----------+-----------+-----------+-----------+
- | d | CLIENT | -- | REQUEST / | -- | -- |
- | | | | ADD | | |
- | +-----------+-----------+-----------+-----------+-----------+
- | | NONE | -- | REQUEST / | -- | -- |
- | | | | ADD | | |
- +---+-----------+-----------+-----------+-----------+-----------+
-
- The attempt to deliver the scheduling message will either succeed or
- fail. In all cases, the server MUST add a "SCHEDULE-STATUS"
- iCalendar property parameter to the "ATTENDEE" iCalendar property in
- the scheduling object resource being modified, and set its value as
- described in Section 9.2. This will result in the created calendar
- object resource differing from the calendar data sent in the HTTP
- request. As a result clients MAY reload the calendar data from the
- server in order to update to the new server generated state
- information.
-
- Restrictions:
-
- 1. The server MAY reject any attempt to set the "PARTSTAT" iCalendar
- property parameter value of the "ATTENDEE" iCalendar property of
- other users in the calendar object resource to a value other than
- "NEEDS-ACTION" if the "SCHEDULE-AGENT" property parameter value
- is not present or set to the value "SERVER".
-
- 2. The server MUST take into account scheduling privileges as
- described in Section 13.1 when handling the modification of a
- scheduling object resource.
-
- 3. Restrictions on calendar object resources defined in Section 4.1
- of [RFC4791] MUST also be enforced.
-
- The server MUST return an error with the CALDAV:allowed-organizer-
- scheduling-object-change precondition code (Section 5.2.4.3) when the
- Organizer attempts to change the iCalendar data in a manner that is
- forbidden.
-
-
-
-Daboo & Desruisseaux Expires March 10, 2012 [Page 19]
-
-Internet-Draft CalDAV Scheduling Extensions September 2011
-
-
-5.2.1.3. Remove
-
- When a scheduling object resource is removed by the Organizer, the
- server will inspect each "ATTENDEE" property in the scheduling object
- resource being removed to determine which ones have the "SCHEDULE-
- AGENT" iCalendar property parameter.
-
- For each Attendee the server will determine whether to attempt to
- deliver a scheduling message into the Attendee's scheduling Inbox
- collection, based on the table below:
-
- +------------------+-------------+
- | SCHEDULE-AGENT | iTIP METHOD |
- +==================+=============+
- | SERVER (default) | CANCEL |
- +------------------+-------------+
- | CLIENT | -- |
- +------------------+-------------+
- | NONE | -- |
- +------------------+-------------+
-
- Restrictions:
-
- 1. The server MUST take into account scheduling privileges as
- described in Section 13.1 when handling the deletion of a
- scheduling object resource.
-
-5.2.2. Attendee Scheduling Object Resources
-
- An Attendee can create, modify or remove a scheduling object resource
- by issuing HTTP requests with an appropriate method. The create,
- modify and remove behaviors for the server are each described next,
- and the way these are invoked via HTTP requests is described in
- Section 5.2.3.
-
-5.2.2.1. Allowed Attendee Changes
-
- Attendees are allowed to make some changes to a scheduling object
- resource, though key properties such as start time, end time,
- location, and summary are typically under the control of the
- Organizer.
-
- The server MUST allow Attendees to:
-
- 1. change their own "PARTSTAT" iCalendar property parameter value.
-
- 2. add, modify or remove any "TRANSP" iCalendar properties.
-
-
-
-
-Daboo & Desruisseaux Expires March 10, 2012 [Page 20]
-
-Internet-Draft CalDAV Scheduling Extensions September 2011
-
-
- 3. add, modify or remove any "PERCENT-COMPLETE" iCalendar
- properties.
-
- 4. add, modify or remove any "COMPLETED" iCalendar properties.
-
- 5. add, modify or remove any "VALARM" iCalendar components.
-
- 6. add, modify or remove the "CALSCALE" iCalendar property within
- the top-level "VCALENDAR" component.
-
- 7. modify the "PRODID" iCalendar property within the top-level
- "VCALENDAR" component.
-
- 8. add "EXDATE" iCalendar properties and possibly remove components
- for overridden recurrence instances.
-
- 9. add, modify or remove any "CREATED", "DTSTAMP" and "LAST-
- MODIFIED" iCalendar properties.
-
- 10. add, modify or remove "SCHEDULE-STATUS" iCalendar property
- parameters on "ATTENDEE" properties that have a "SCHEDULE-AGENT"
- parameter set to "CLIENT".
-
- 11. add new components to represent overridden recurrence instances,
- provided the only changes to the recurrence instance follow the
- rules above.
-
- The server MUST return an error with the CALDAV:allowed-attendee-
- scheduling-object-change precondition code (Section 5.2.4.4) when the
- Attendee attempts to change the iCalendar data in a manner forbidden
- by the server.
-
-5.2.2.2. Create
-
- Typically an Attendee does not create scheduling object resources, as
- scheduling messages delivered to them on the server are automatically
- processed by the server and placed on one of their calendars (see
- Section 6). However, in some cases a scheduling message may get
- delivered directly to the client, and the Attendee may wish to store
- that on the server. In that case the client creates a scheduling
- object resource in a suitable calendar belonging to the Attendee. It
- can then set the "SCHEDULE-AGENT" iCalendar property parameter on all
- "ORGANIZER" iCalendar properties in the resource to determine how the
- server treats the resource. The value of the "SCHEDULE-AGENT"
- iCalendar property parameter on all "ORGANIZER" iCalendar properties
- MUST be the same.
-
-
-
-
-
-Daboo & Desruisseaux Expires March 10, 2012 [Page 21]
-
-Internet-Draft CalDAV Scheduling Extensions September 2011
-
-
- +----------------+--------------------------------------------------+
- | SCHEDULE-AGENT | Action |
- +----------------+--------------------------------------------------+
- | SERVER | The server will attempt to process changes to |
- | (default) | the resource using the normal rules for attendee |
- | | scheduling object resources. |
- | | |
- | CLIENT | The server does no special processing of the |
- | | resource. The client is assumed to be handling |
- | | Attendee replies etc. |
- | | |
- | NONE | The server does no special processing of the |
- | | resource. |
- +----------------+--------------------------------------------------+
-
- In some cases a server may not be able to process an Attendee
- scheduling object resource that originated from another system (i.e.,
- where the server is unable to deliver scheduling messages to the
- Organizer). In such cases the server MUST add a "SCHEDULE-STATUS"
- iCalendar property parameter to all "ORGANIZER" iCalendar properties
- in the resource with a suitable value indicating a error.
-
-5.2.2.3. Modify
-
- When a scheduling object resource is modified by an Attendee, the
- server behavior depends on the value of the "SCHEDULE-AGENT"
- iCalendar property parameter on the "ORGANIZER" iCalendar properties:
-
- +----------------+--------------------------------------------------+
- | SCHEDULE-AGENT | Action |
- +----------------+--------------------------------------------------+
- | SERVER | The server will attempt to process the removal |
- | (default) | using the behavior listed below. |
- | | |
- | CLIENT | The server does no special processing of the |
- | | resource. The client is assumed to be handling |
- | | any Attendee replies etc. |
- | | |
- | NONE | The server does no special processing of the |
- | | resource. |
- +----------------+--------------------------------------------------+
-
- The server will inspect the changes by comparing the new scheduling
- object resource with the existing scheduling object resource.
-
- If the Attendee changes one or more "PARTSTAT" iCalendar property
- values on any component, or adds an overridden component with a
- changed "PARTSTAT" property, then the server MUST deliver an iTIP
-
-
-
-Daboo & Desruisseaux Expires March 10, 2012 [Page 22]
-
-Internet-Draft CalDAV Scheduling Extensions September 2011
-
-
- "REPLY" scheduling message to the Organizer to indicate the new
- participation status of the Attendee.
-
- If the Attendee adds an "EXDATE" property value to effectively remove
- a recurrence instance, the server MUST deliver an iTIP "REPLY"
- scheduling message to the Organizer to indicate that the Attendee has
- declined the instance (i.e., the Attendee's "PARTSTAT" iCalendar
- property parameter value is set to "DECLINED").
-
- The attempt to deliver the scheduling message will either succeed or
- fail. In all cases, the server MUST add a "SCHEDULE-STATUS"
- iCalendar property parameter to the "ORGANIZER" iCalendar property in
- the scheduling object resource being created, and set its value as
- described in Section 9.2. This will result in the created calendar
- object resource differing from the calendar data sent in the HTTP
- request. As a result clients MAY reload the calendar data from the
- server in order to update to the new server generated state
- information.
-
-5.2.2.4. Remove
-
- When a scheduling object resource is removed by an Attendee, the
- server behavior depends on the value of the "SCHEDULE-AGENT"
- iCalendar property parameter on the "ORGANIZER" iCalendar properties:
-
- +----------------+--------------------------------------------------+
- | SCHEDULE-AGENT | Action |
- +----------------+--------------------------------------------------+
- | SERVER | The server will attempt to process the removal |
- | (default) | using either behaviors (1) or (2) listed below. |
- | | |
- | CLIENT | The server does no special processing of the |
- | | resource. The client is assumed to be handling |
- | | any Attendee replies etc. |
- | | |
- | NONE | The server does no special processing of the |
- | | resource. |
- +----------------+--------------------------------------------------+
-
- 1. If the HTTP request contains a "Schedule-Reply" request header
- set to the value "T" or there is no "Schedule-Reply" request
- header, then the server MUST attempt to deliver a scheduling
- message to the Organizer indicating that the Attendee has a
- "PARTSTAT" iCalendar property parameter value set to "DECLINED".
- That is, the Attendee has chosen not to attend any instances. If
- the server is unable to deliver the scheduling message, the
- remove action MUST fail, and an appropriate "SCHEDULE-STATUS"
- iCalendar property parameter set on the "ORGANIZER" property in
-
-
-
-Daboo & Desruisseaux Expires March 10, 2012 [Page 23]
-
-Internet-Draft CalDAV Scheduling Extensions September 2011
-
-
- the scheduling object resource stored by the server.
-
- 2. If the HTTP request contains a "Schedule-Reply" request header
- set to the value "F", the server MUST NOT attempt to deliver a
- scheduling message. The resource is simply removed. This
- provides the client a way to silently remove unwanted scheduling
- messages.
-
-5.2.3. HTTP Methods
-
- This section describes how use of various HTTP methods on a
- scheduling object resource will cause a create, modify or remove
- action on that resource as described above. The use of these methods
- is subject to the restrictions in [RFC4791], in addition to what is
- described below.
-
-5.2.3.1. PUT
-
- When a PUT method request is received, the server will execute the
- following actions, provided all appropriate preconditions are met:
-
- +--------------------------+--------------------------+-------------+
- | Existing Destination | Resulting Destination | Server |
- | Resource | Resource | Action |
- +--------------------------+--------------------------+-------------+
- | None | Calendar object resource | None |
- | | | |
- | None | Scheduling object | Create |
- | | resource | |
- | | | |
- | Calendar object resource | Calendar object resource | None |
- | | | |
- | Calendar object resource | Scheduling object | Create |
- | | resource | |
- | | | |
- | Scheduling object | Calendar object resource | Remove |
- | resource | | |
- | | | |
- | Scheduling object | Scheduling object | Modify |
- | resource | resource | |
- +--------------------------+--------------------------+-------------+
-
-5.2.3.2. COPY
-
- When a COPY method request is received, the server will execute the
- following actions based on the source and destination collections in
- the request:
-
-
-
-
-Daboo & Desruisseaux Expires March 10, 2012 [Page 24]
-
-Internet-Draft CalDAV Scheduling Extensions September 2011
-
-
- +-------------------------+-------------------------+---------------+
- | Source Collection | Destination Collection | Server Action |
- +-------------------------+-------------------------+---------------+
- | Non-calendar collection | Non-calendar collection | None |
- | | | |
- | Non-calendar collection | Calendar collection | (1) |
- | | | |
- | Calendar collection | Non-calendar collection | None |
- | | | |
- | Calendar collection | Calendar collection | (2) |
- +-------------------------+-------------------------+---------------+
-
- Note 1. The same rules as used for PUT above are applied for the
- destination of the COPY request.
-
- Note 2. The server MAY reject this as per Section 5.2.4.1, otherwise
- None.
-
- The behavior of a COPY method request on a calendar collection is
- undefined.
-
-5.2.3.3. MOVE
-
- When a MOVE method request is received, the server will execute the
- following actions based on the source and destination collections in
- the request:
-
- +-------------------------+-------------------------+---------------+
- | Source Collection | Destination Collection | Server Action |
- +-------------------------+-------------------------+---------------+
- | Non-calendar collection | Non-calendar collection | None |
- | | | |
- | Non-calendar collection | Calendar collection | (1) |
- | | | |
- | Calendar collection | Non-calendar collection | (2) |
- | | | |
- | Calendar collection | Calendar collection | None |
- +-------------------------+-------------------------+---------------+
-
- Note 1. The same rules as used for PUT above are applied for the
- destination of the MOVE request.
-
- Note 2. The same rules as used for DELETE below are applied for the
- source of the MOVE request.
-
- The behavior of a MOVE method request on a calendar collection is
- undefined.
-
-
-
-
-Daboo & Desruisseaux Expires March 10, 2012 [Page 25]
-
-Internet-Draft CalDAV Scheduling Extensions September 2011
-
-
-5.2.3.4. DELETE
-
- When a DELETE method is targeted at a scheduling object resource the
- server will execute the Remove action.
-
- When a DELETE method is targeted at a calendar collection the server
- will execute the Remove action on all scheduling object resources
- contained in the calendar collection.
-
-5.2.4. Additional Method Preconditions
-
- This specification defines method preconditions (see Section 16 of
- WebDAV [RFC4918]), in addition to the ones in [RFC4791], to provide
- machine-parsable information in error responses.
-
-5.2.4.1. CALDAV:unique-scheduling-object-resource Precondition
-
- Name: unique-scheduling-object-resource
-
- Namespace: urn:ietf:params:xml:ns:caldav
-
- Apply to: PUT, COPY, and MOVE
-
- Use with: 403 Forbidden
-
- Purpose: (precondition) -- Servers MAY reject requests to create a
- scheduling object resource with an iCalendar "UID" property value
- already in use by another scheduling object resource owned by the
- same user in other calendar collections. Servers SHOULD report
- the URL of the scheduling object resource that is already making
- use of the same "UID" property value in the DAV:href element.
-
- Definition:
-
-
-
- Example:
-
-
- /home/bernard/calendars/personal/abc123.ics
-
-
-5.2.4.2. CALDAV:same-organizer-in-all-components Precondition
-
-
-
-
-
-
-
-Daboo & Desruisseaux Expires March 10, 2012 [Page 26]
-
-Internet-Draft CalDAV Scheduling Extensions September 2011
-
-
- Name: same-organizer-in-all-components
-
- Namespace: urn:ietf:params:xml:ns:caldav
-
- Apply to: PUT, COPY, and MOVE
-
- Use with: 403 Forbidden
-
- Purpose: (precondition) -- All the calendar components in a
- scheduling object resource MUST contain the same "ORGANIZER"
- property value when present.
-
- Definition:
-
-
-
- Example:
-
-
-
-5.2.4.3. CALDAV:allowed-organizer-scheduling-object-change Precondition
-
- Name: allowed-organizer-scheduling-object-change
-
- Namespace: urn:ietf:params:xml:ns:caldav
-
- Apply to: PUT, COPY, and MOVE
-
- Use with: 403 Forbidden
-
- Purpose: (precondition) -- Servers MAY impose restrictions on
- modifications allowed by an Organizer. For instance, servers MAY
- prevent the Organizer setting the "PARTSTAT" property parameter to
- a value other than "NEEDS-ACTION" if the corresponding "ATTENDEE"
- property has the "SCHEDULE-AGENT" property parameter set to
- "SERVER", or has no "SCHEDULE-AGENT" property parameter. See
- Section 5.2.1.
-
- Definition:
-
-
-
- Example:
-
-
-
-
-
-
-Daboo & Desruisseaux Expires March 10, 2012 [Page 27]
-
-Internet-Draft CalDAV Scheduling Extensions September 2011
-
-
-5.2.4.4. CALDAV:allowed-attendee-scheduling-object-change Precondition
-
- Name: allowed-attendee-scheduling-object-change
-
- Namespace: urn:ietf:params:xml:ns:caldav
-
- Apply to: PUT, COPY, and MOVE
-
- Use with: 403 Forbidden
-
- Purpose: (precondition) -- Servers MAY impose restrictions on
- modifications allowed by an Attendee. Attendee modifications that
- servers MUST allow are specified in Section 5.2.2.1.
-
- Definition:
-
-
-
- Example:
-
-
-
-5.2.5. DTSTAMP and SEQUENCE Properties
-
- Whenever the server generates a scheduling message for delivery to a
- Calendar User, it MUST ensure that a "DTSTAMP" iCalendar property is
- present and MUST set the value to the UTC time that the scheduling
- message was generated (as required by iCalendar).
-
- iTIP [RFC5546] places certain requirements on how the "SEQUENCE"
- iCalendar property value in scheduling messages changes. The server
- MUST ensure that for each type of scheduling operation, the
- "SEQUENCE" iCalendar property value is appropriately updated. If the
- client does not update the "SEQUENCE" iCalendar property itself when
- that is required, the server MUST update the property.
-
-5.2.6. Restrict Recurrence Instances Sent to Attendees
-
- When delivering scheduling messages for recurring calendar components
- to Attendees, servers MUST ensure that Attendees only get information
- about recurrence instances that explicitly include them as an
- Attendee.
-
- For example, if an Attendee is invited to a single recurrence
- instance of a recurring event, and no others, the scheduling object
- resource contained in the Organizer's calendar collection will
- contain an overridden instance in the form of a separate calendar
-
-
-
-Daboo & Desruisseaux Expires March 10, 2012 [Page 28]
-
-Internet-Draft CalDAV Scheduling Extensions September 2011
-
-
- component. That separate calendar component will include the
- "ATTENDEE" property referencing the "one-off" Attendee. That
- Attendee will not be listed in any other calendar components in the
- scheduling object resource. Any scheduling messages delivered to the
- Attendee will only contain information about this overridden
- instance.
-
- As another example, an Attendee could be excluded from one instance
- of a recurring event. In that case the scheduling object resource
- contained in the calendar collection of the Organizer will include an
- overridden instance with an "ATTENDEE" list that does not include the
- Attendee being excluded. The scheduling message that will be
- delivered to the Attendee will not specify the overridden instance
- but rather include an "EXDATE" property in the master recurring
- component defining the recurrence set.
-
-5.2.7. Forcing the Server to Send a Scheduling Message
-
- The iCalendar property parameter "SCHEDULE-FORCE-SEND" defined in
- Section 10.2 can be used by a Calendar User to force the server to
- send a scheduling message to an Attendee or the Organizer in a
- situation where the server would not normally send a scheduling
- message. For instance, an Organizer could use this property
- parameter to request an Attendee, that previously declined an
- invitation, to reconsider their participation status without being
- forced to modify the event.
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-Daboo & Desruisseaux Expires March 10, 2012 [Page 29]
-
-Internet-Draft CalDAV Scheduling Extensions September 2011
-
-
-6. Processing Incoming Scheduling Messages
-
- Scheduling operations can cause the delivery of a scheduling message
- into an Organizer's or Attendee's scheduling Inbox collection. In
- the former case the scheduling messages are replies from Attendees,
- in the latter case the scheduling messages are requests,
- cancellations or additions from the Organizer.
-
- Servers MUST automatically process incoming scheduling messages using
- the rules defined by [RFC5546], by creating or updating the
- corresponding scheduling object resources on calendars owned by the
- owner of the scheduling Inbox collection. In addition, the
- scheduling message is stored in the scheduling Inbox collection as an
- indicator to the client that a scheduling operation has taken place.
-
- The server MUST take into account privileges on the scheduling Inbox
- collection when processing incoming scheduling messages, to determine
- whether delivery of the scheduling message is allowed. Privileges on
- calendars containing any matching scheduling object resource are not
- considered in this case (i.e., a schedule message from another user
- can cause modifications to resources in calendar collections that the
- other user would not normally have read or write access to).
- Additionally, servers MUST take into account any scheduling Inbox
- collection preconditions (see Section 4.2) when delivering the
- scheduling message, and it MUST take into account the similar
- preconditions on any calendar collection which contains, or would
- contain, the corresponding scheduling object resource.
-
-6.1. Processing Organizer Requests, Additions, and Cancellations
-
- For a scheduling message sent by an Organizer, the server first tries
- to locate a corresponding scheduling object resource belonging to the
- Attendee. If no matching scheduling object resource exists, the
- server treats the scheduling message as a new message, otherwise it
- is treated as an update.
-
- In the case of a new message, the server MUST process the scheduling
- message and create a new scheduling object resource in an appropriate
- calendar collection for the Attendee.
-
- In the case of an update, the server MUST process the scheduling
- message and update the matching scheduling object resource belonging
- to the Attendee to reflect the changes sent by the Organizer.
-
- In each case, the scheduling message MUST only appear in the
- Attendee's scheduling Inbox collection once all automatic processing
- has been done.
-
-
-
-
-Daboo & Desruisseaux Expires March 10, 2012 [Page 30]
-
-Internet-Draft CalDAV Scheduling Extensions September 2011
-
-
-6.2. Processing Attendee Replies
-
- For a scheduling message reply sent by an Attendee, the server first
- locates the corresponding scheduling object resource belonging to the
- Organizer.
-
- The server MUST then update the "PARTSTAT" iCalendar property
- parameter value of each "ATTENDEE" iCalendar property in the
- scheduling object resource to match the changes indicated in the
- reply (taking into account the fact that an Attendee could have
- created a new overridden iCalendar component to indicate different
- participation status on one or more recurrence instances of a
- recurring event).
-
- The server MUST also update or add the "SCHEDULE-STATUS" property
- parameter on each matching "ATTENDEE" iCalendar property and set its
- value to that of the "REQUEST-STATUS" property in the reply, or to
- "2.0" if "REQUEST-STATUS" is not present (also taking into account
- recurrence instances). If there are multiple "REQUEST-STATUS"
- properties in the reply, the "SCHEDULE-STATUS" property parameter
- value is set to a comma-separated list of status codes, one from each
- "REQUEST-STATUS" property.
-
- The server SHOULD send scheduling messages to all the other Attendees
- indicating the change in participation status of the Attendee
- replying, subject to the recurrence requirements of Section 5.2.6.
-
- The scheduling message MUST only appear in the Organizer's scheduling
- Inbox collection once all automatic processing has been done.
-
-6.3. Scheduling Messages as Notifications
-
- Once the processing of an incoming scheduling message is completed by
- the server, the message is made available as a child resource in the
- scheduling Inbox collection of the Calendar User that received the
- message, to serve as a notification that a change has been made to
- the corresponding scheduling object resource. Scheduling messages
- are typically removed from the scheduling Inbox collection by the
- client once the calendar user has acknowledged the change.
-
-6.4. Default Calendar Collection
-
- The server is REQUIRED to process scheduling messages received for an
- Attendee by creating a new scheduling object resource in a calendar
- collection belonging to the Attendee, when one does not already
- exist. A Calendar User that is an Attendee in a scheduling operation
- MUST have at least one valid calendar collection available. If there
- is no valid calendar collection, then the server MUST reject the
-
-
-
-Daboo & Desruisseaux Expires March 10, 2012 [Page 31]
-
-Internet-Draft CalDAV Scheduling Extensions September 2011
-
-
- attempt to deliver the scheduling message to the Attendee.
-
- Servers MAY provide support for a default calendar collection, that
- is, the calendar collection in which new scheduling object resources
- will be created. The CALDAV:schedule-default-calendar-URL WebDAV
- property, which can be present on the scheduling Inbox collection of
- a Calendar User, specifies if this Calendar User has a default
- calendar collection. See Section 12.2.
-
- Servers SHOULD create new scheduling object resources in the default
- calendar collection, if the CALDAV:schedule-default-calendar-URL
- WebDAV property is set.
-
- Servers MAY allow clients to change the default calendar collection
- by changing the value of the CALDAV:schedule-default-calendar-URL
- WebDAV property on the scheduling Inbox collection. However, the
- servers MUST ensure that any new value for that property refers to a
- valid calendar collection belonging to the owner of the scheduling
- Inbox collection.
-
- Servers MUST reject any attempt to delete the default calendar
- collection.
-
-6.4.1. Additional Method Preconditions
-
- This specification defines additional method preconditions (see
- Section 16 of WebDAV [RFC4918]) to provide machine-parsable
- information in error responses.
-
-6.4.1.1. CALDAV:default-calendar-needed Precondition
-
- Name: default-calendar-needed
-
- Namespace: urn:ietf:params:xml:ns:caldav
-
- Apply to: DELETE
-
- Use with: 403 Forbidden
-
- Purpose: (precondition) -- The client attempted to delete the
- calendar collection currently referenced by the CALDAV:schedule-
- default-calendar-URL property, or attempted to remove the CALDAV:
- schedule-default-calendar-URL property on the scheduling Inbox
- collection on a server that doesn't allow such operations.
-
-
-
-
-
-
-
-Daboo & Desruisseaux Expires March 10, 2012 [Page 32]
-
-Internet-Draft CalDAV Scheduling Extensions September 2011
-
-
- Definition:
-
-
-
- Example:
-
-
-
-6.4.1.2. CALDAV:valid-schedule-default-calendar-URL Precondition
-
- Name: valid-schedule-default-calendar-URL
-
- Namespace: urn:ietf:params:xml:ns:caldav
-
- Apply to: PROPPATCH
-
- Use with: 403 Forbidden
-
- Purpose: (precondition) -- The client attempted to set the CALDAV:
- schedule-default-calendar-URL property to a DAV:href element that
- doesn't reference a valid calendar collection. Note: Servers that
- do not allow clients to change the CALDAV:schedule-default-
- calendar-URL property would simply return the DAV:cannot-modify-
- protected-property precondition defined in Section 16 of WebDAV
- [RFC4918].
-
- Definition:
-
-
-
- Example:
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-Daboo & Desruisseaux Expires March 10, 2012 [Page 33]
-
-Internet-Draft CalDAV Scheduling Extensions September 2011
-
-
-7. Request for Busy Time Information
-
- The POST method is used to request busy time information of one or
- more Calendar Users by submitting a request at the scheduling Outbox
- collection of the Calendar User requesting the information (the
- Organizer). To accomplish this, the request body of a POST method
- MUST contain a "VFREEBUSY" calendar component with the "METHOD"
- iCalendar property set to the value "REQUEST" as specified in Section
- 3.3.2 of iTIP [RFC5546]. The resource identified by the Request-URI
- MUST be a resource collection of type CALDAV:schedule-outbox
- (Section 4.1). The "ORGANIZER" property in the "VFREEBUSY" component
- MUST match that of the Calendar User who "owns" the Outbox
- collection.
-
-7.1. Status Codes
-
- The following are examples of response codes one would expect to be
- used for this method. However, unless explicitly prohibited, any
- 2/3/4/5xx series response code can be used in a response.
-
- 200 (OK) - The command succeeded.
-
- 204 (No Content) - The command succeeded.
-
- 400 (Bad Request) - The client has provided an invalid scheduling
- message.
-
- 403 (Forbidden) - The client cannot submit a scheduling message to
- the specified Request-URI.
-
- 404 (Not Found) - The URL in the Request-URI was not present.
-
- 423 (Locked) - The specified resource is locked and the client
- either is not a lock owner or the lock type requires a lock token
- to be submitted and the client did not submit it.
-
-7.2. Additional Method Preconditions
-
- This specification defines additional method preconditions for the
- POST method. Preconditions defined in WebDAV ACL [RFC3744] and
- CalDAV [RFC4791] that applies to the POST method are also listed here
- for completeness.
-
-7.2.1. DAV:need-privileges Precondition
-
-
-
-
-
-
-
-Daboo & Desruisseaux Expires March 10, 2012 [Page 34]
-
-Internet-Draft CalDAV Scheduling Extensions September 2011
-
-
- Name: need-privileges
-
- Namespace: DAV:
-
- Apply to: POST
-
- Use with: 403 Forbidden
-
- Purpose: (precondition) -- The currently authenticated user MUST be
- granted the CALDAV:schedule-send-freebusy privilege on the
- scheduling Outbox collection being targeted by the request.
-
- Definition:
-
-
-
-
- Example:
-
-
-
- /home/bernard/calendars/outbox/
-
-
-
-
-7.2.2. CALDAV:supported-collection Precondition
-
- Name: supported-collection
-
- Namespace: urn:ietf:params:xml:ns:caldav
-
- Apply to: POST
-
- Use with: 400 Bad Request
-
- Purpose: (precondition) -- The Request-URI MUST identify the
- location of a scheduling Outbox collection.
-
- Definition:
-
-
-
-
-
-
-
-
-
-
-Daboo & Desruisseaux Expires March 10, 2012 [Page 35]
-
-Internet-Draft CalDAV Scheduling Extensions September 2011
-
-
- Example:
-
-
-
-7.2.3. CALDAV:supported-calendar-data Precondition
-
- Name: supported-calendar-data
-
- Namespace: urn:ietf:params:xml:ns:caldav
-
- Apply to: POST
-
- Use with: 400 Bad Request
-
- Purpose: (precondition) -- The resource body submitted in the POST
- request MUST be a supported media type (e.g., text/calendar).
-
- Definition:
-
-
-
- Example:
-
-
-
-7.2.4. CALDAV:valid-calendar-data Precondition
-
- Name: valid-calendar-data
-
- Namespace: urn:ietf:params:xml:ns:caldav
-
- Apply to: POST
-
- Use with: 400 Bad Request
-
- Purpose: (precondition) -- The resource submitted in the POST
- request MUST be valid data for the media type being specified
- (e.g., a valid iCalendar object).
-
- Definition:
-
-
-
-
-
-
-
-
-
-
-Daboo & Desruisseaux Expires March 10, 2012 [Page 36]
-
-Internet-Draft CalDAV Scheduling Extensions September 2011
-
-
- Example:
-
-
-
-7.2.5. CALDAV:valid-scheduling-message Precondition
-
- Name: valid-scheduling-message
-
- Namespace: urn:ietf:params:xml:ns:caldav
-
- Apply to: POST
-
- Use with: 400 Bad Request
-
- Purpose: (precondition) -- The resource submitted in the POST
- request MUST obey all restrictions specified for the POST request
- (e.g., the scheduling message follow the restrictions of iTIP).
-
- Definition:
-
-
-
- Example:
-
-
-
-7.2.6. CALDAV:valid-organizer Precondition
-
- Name: valid-organizer
-
- Namespace: urn:ietf:params:xml:ns:caldav
-
- Apply to: POST
-
- Use with: 403 Forbidden
-
- Purpose: (precondition) -- The Calendar User identified by the
- "ORGANIZER" property in the POST request's scheduling message MUST
- be the Calendar User (or one of the Calendar Users) associated
- with the scheduling Outbox collection being targeted by the
- request;
-
- Definition:
-
-
-
-
-
-
-
-Daboo & Desruisseaux Expires March 10, 2012 [Page 37]
-
-Internet-Draft CalDAV Scheduling Extensions September 2011
-
-
- Example:
-
-
-
-7.2.7. CALDAV:max-resource-size Precondition
-
- Name: max-resource-size
-
- Namespace: urn:ietf:params:xml:ns:caldav
-
- Apply to: POST
-
- Use with: 403 Forbidden
-
- Purpose: (precondition) -- The resource submitted in the POST
- request MUST have a size in octets less than or equal to the value
- of the CALDAV:max-resource-size property (defined in Section 5.2.5
- of [RFC4791]) specified on the scheduling Outbox collection
- targeted by the request.
-
- Definition:
-
-
-
- Example:
-
-
-
-7.3. Response to a POST request
-
- A POST request can return freebusy information for one or more
- Calendar Users. Thus the response needs to contain separate status
- information for each recipient. This specification defines a new XML
- response body to convey multiple recipient status.
-
- A response to a POST method that indicates status for one or more
- recipients MUST be an XML document with a CALDAV:schedule-response
- XML element as its root element. This element MUST contain one
- CALDAV:response element for each recipient, with each of those
- containing elements that indicate which recipient they correspond to,
- the scheduling status for that recipient, any error codes and an
- optional description. See Section 14.1 for the detail on the child
- elements.
-
- In the case of a successful freebusy request, the CALDAV:response
- elements can also contain CALDAV:calendar-data elements which contain
- freebusy information (e.g., an iCalendar VFREEBUSY component)
- indicating the busy state of the corresponding recipient. See
-
-
-
-Daboo & Desruisseaux Expires March 10, 2012 [Page 38]
-
-Internet-Draft CalDAV Scheduling Extensions September 2011
-
-
- Appendix B.5 for an example freebusy request and response.
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-Daboo & Desruisseaux Expires March 10, 2012 [Page 39]
-
-Internet-Draft CalDAV Scheduling Extensions September 2011
-
-
-8. Avoiding Conflicts when Updating Scheduling Object Resources
-
- Because replies from Attendees and updates from Organizers are
- automatically processed by the server, clients might be in a
- situation where their copy of a calendar resource is different from
- the one currently on the server. When an Attendee or Organizer makes
- a change to the client's copy of the calendar resource, if the client
- writes the data to the server it could overwrite the changes already
- made there. Typically, clients use the ETag value and If-Match
- request headers to avoid the "lost update problem".
-
- Clients can also use ETag and If-Match to avoid this problem.
- However, when doing so the client will likely have to resolve the
- differences between the new resource and the original one, and the
- changes made by the Attendee or Organizer in the client. This can be
- a complicated comparison particularly when recurring components are
- present.
-
- Additionally, the data on the server may change frequently as
- Attendees change their participation status, triggering updates to
- the Organizer, and consequently other Attendees' copies of the
- scheduling object resource. If the ETag/If-Match behavior were used,
- clients would be forced to reconcile their cached copy of a
- scheduling object resource with the updated one on the server in
- order to attempt to write the user's changes back. This could lead
- to a race condition that can effectively result in a temporary denial
- of service when, for example, there is an event with a large Attendee
- list. A "storm" of updates will occur if Attendees all start
- responding at the same time, and this would prevent Attendees and the
- Organizer from being able to update their own copies of the
- scheduling object resource as the server copy is changing frequently.
-
- A solution is to have the server determine the best way to merge
- changes made on the server with changes being made by the client.
- For example, if an Attendee changes their participation status and
- triggers an update to the Organizer's copy of the event, but the
- Organizer also updates their cached copy of the event and attempts to
- write it back, rather than failing on a conditional If-Match when the
- Organizer writes their data, the server would instead take the
- changes made by the Organizer and apply the Attendee changes and
- store the result. Thus a form of "weak" ETag matching behavior is
- needed such that scheduling changes made automatically on the server
- do not invalidate the tag, so that when clients store data
- conditionally based on the tag value, the server knows it can apply
- the merge behavior.
-
- In order to do that, this specification introduces a new WebDAV
- resource property CALDAV:schedule-tag with a corresponding response
-
-
-
-Daboo & Desruisseaux Expires March 10, 2012 [Page 40]
-
-Internet-Draft CalDAV Scheduling Extensions September 2011
-
-
- header "Schedule-Tag", and a new "If-Schedule-Tag-Match" request
- header to allow client changes to be appropriately merged with server
- changes in the case where the changes on the server were the result
- of an "inconsequential" scheduling message update. An
- "inconsequential" scheduling message is one which simply updates the
- status information of Attendees due to a reply from an Attendee.
-
- Servers MUST support requests targeted at scheduling object resources
- using the "If-Schedule-Tag-Match" request header. Consequently, the
- server MUST support the "Schedule-Tag" response header and CALDAV:
- schedule-tag property for scheduling object resources. Servers MUST
- automatically resolve conflicts with "inconsequential" changes done
- to scheduling object resources when the "If-Schedule-Tag-Match"
- request header is specified.
-
- The If-Schedule-Tag-Match request header applies only to the Request-
- URI, and not to the Destination of a COPY or MOVE in the same way as
- the If-Match request header.
-
- Clients SHOULD use the If-Schedule-Tag-Match header on requests that
- update scheduling object resources.
-
- A response to any successful GET or PUT request targeting a
- scheduling object resource MUST include a Schedule-Tag response
- header with the value set to the same value as the CALDAV:schedule-
- tag WebDAV property of the resource.
-
- A response to any successful COPY or MOVE request that specifies a
- Destination request header targeting a scheduling object resource
- MUST include a Schedule-Tag response header with the value set to the
- same value as the CALDAV:schedule-tag WebDAV property of the resource
- identified in the Request-URI.
-
- The Schedule-Tag feature is designed to be used to address the
- problem of "inconsequential" changes on the server only. Normal ETag
- operations are used in all other cases, e.g., for synchronization.
-
- The value of the CALDAV:schedule-tag property changes according to
- these rules:
-
- o For an Organizer's copy of a scheduling object resource:
-
- 1. The server MUST NOT change the CALDAV:schedule-tag property
- value when the scheduling object resource is updated as the
- result of automatically processing a scheduling message reply
- from an Attendee. For instance, when an Attendee replies to
- the Organizer, the CALDAV:schedule-tag property is unchanged
- after the Organizer's scheduling object resource has been
-
-
-
-Daboo & Desruisseaux Expires March 10, 2012 [Page 41]
-
-Internet-Draft CalDAV Scheduling Extensions September 2011
-
-
- automatically updated by the server with the Attendee's new
- participation status.
-
- 2. The server MUST change CALDAV:schedule-tag property value when
- the scheduling object resource is changed directly via an HTTP
- request (e.g., PUT, COPY or MOVE).
-
- o For an Attendee's copy of a scheduling object resource:
-
- 1. The server MUST change the CALDAV:schedule-tag property value
- when the scheduling object resource is changed as the result
- of processing a scheduling message update from an Organizer
- that contains changes other than just the participation status
- of Attendees.
-
- 2. The server MUST NOT change the CALDAV:schedule-tag property
- value when the scheduling object resource is changed as the
- result of processing a scheduling message update from an
- Organizer that only specify changes in the participation
- status of Attendees. For instance, when Attendee "A" replies
- to Organizer "O", and Attendee "B" receives a scheduling
- message update from Organizer "O" with the new participation
- status of Attendee "A", the CALDAV:schedule-tag property of
- Attendee "B"s scheduling object resource MUST NOT be changed.
-
- 3. The server MUST change the CALDAV:schedule-tag property value
- when the scheduling object resource is changed directly via an
- HTTP request (e.g., PUT, COPY or MOVE).
-
-8.1. PUT
-
- Clients can use the If-Schedule-Tag-Match request header to do a PUT
- request that ensures that "inconsequential" changes on the server do
- not result in a precondition error. The value of the request header
- is set to the last Schedule-Tag value received for the resource being
- modified. If the value of the If-Schedule-Tag-Match header matches
- the current value of the CALDAV:schedule-tag property the server MUST
- take any "ATTENDEE" property changes for all Attendees other than the
- owner of the scheduling object resource and apply those to the new
- resource being stored. Otherwise, the server MUST fail the request
- with a 412 Precondition Failed status code.
-
-8.2. DELETE, COPY or MOVE
-
- Clients can use the If-Schedule-Tag-Match request header to do a
- DELETE, COPY or MOVE request that ensures that "inconsequential"
- changes on the server do not result in a precondition error. The
- value of the request header is set to the last Schedule-Tag value
-
-
-
-Daboo & Desruisseaux Expires March 10, 2012 [Page 42]
-
-Internet-Draft CalDAV Scheduling Extensions September 2011
-
-
- received for the resource being deleted. If the value of the If-
- Schedule-Tag-Match header matches the current value of the CALDAV:
- schedule-tag property the server performs the normal DELETE, COPY or
- MOVE request processing for the resource. Otherwise, the server MUST
- fail the request with a 412 Precondition Failed status code.
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-Daboo & Desruisseaux Expires March 10, 2012 [Page 43]
-
-Internet-Draft CalDAV Scheduling Extensions September 2011
-
-
-9. Other Scheduling Considerations
-
-9.1. Attendee Participation Status
-
- This section specifies additional requirements on the handling of the
- "PARTSTAT" property parameter when the "SCHEDULE-AGENT" property
- parameter on the corresponding "ATTENDEE" property is set to the
- value "SERVER" or is not present.
-
- Clients SHOULD, and servers MUST reset the "PARTSTAT" property
- parameter value of all "ATTENDEE" properties, except the one that
- corresponds to the Organizer, to "NEEDS-ACTION" when the Organizer
- reschedules an event.
-
- A reschedule of an event occurs when any "DTSTART", "DTEND",
- "DURATION", "DUE", "RRULE", "RDATE", or "EXDATE" property changes in
- a calendar component such that existing recurrence instances are
- impacted by the changes, as shown in the table below.
-
- +-----------+-------------------------------------------------------+
- | Property | Server Action |
- +-----------+-------------------------------------------------------+
- | DTSTART, | Any change to these properties MUST result in |
- | DTEND, | "PARTSTAT" being set to "NEEDS-ACTION" |
- | DURATION, | |
- | DUE | |
- | | |
- | | |
- | | |
- | RRULE | A change to or addition of this property that results |
- | | in the addition of new recurring instances or a |
- | | change in time for existing recurring instances MUST |
- | | result in "PARTSTAT" being reset to "NEEDS-ACTION" on |
- | | each affected component. |
- | | |
- | | |
- | | |
- | RDATE | A change to or addition of this property that results |
- | | in the addition of new recurring instances or a |
- | | change in time for existing recurring instances MUST |
- | | result in "PARTSTAT" being reset to "NEEDS-ACTION" on |
- | | each affected component. |
- | | |
- | | |
- | | |
-
-
-
-
-
-
-Daboo & Desruisseaux Expires March 10, 2012 [Page 44]
-
-Internet-Draft CalDAV Scheduling Extensions September 2011
-
-
- | EXDATE | A change to or removal of this property that results |
- | | in the re-instatement of recurring instances MUST |
- | | result in "PARTSTAT" being set to "NEEDS-ACTION" on |
- | | each affected component. |
- +-----------+-------------------------------------------------------+
-
- The server MAY allow the Organizer's client to change an Attendee's
- "PARTSTAT" property parameter value to "NEEDS-ACTION" at any other
- time (e.g., when the "LOCATION" property value changes, an Organizer
- might wish to re-invite Attendees who may be impacted by the change).
-
-9.2. Schedule Status Values
-
- When scheduling with an Attendee there are two types of status
- information that can be returned during the transaction. The first
- type of status information is a "delivery" status that indicates
- whether the scheduling message from the Organizer to the Attendee was
- delivered or not, or what the current status of delivery is. The
- second type of status information is a "reply" status corresponding
- to the Attendee's own "REQUEST-STATUS" information from the
- scheduling message reply that is sent back to the Organizer.
-
- Similarly, when an Attendee sends a reply back to the Organizer,
- there will be "delivery" status information for the scheduling
- message sent to the Organizer. However, there is no "REQUEST-STATUS"
- sent back by the Organizer, so there is no equivalent of the "reply"
- status as per scheduling messages to Attendees.
-
- The "delivery" status information on an "ORGANIZER" or "ATTENDEE"
- iCalendar property is conveyed in the "SCHEDULE-STATUS" property
- parameter value (Section 10.3). The status code value for "delivery"
- status can be one of the following:
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-Daboo & Desruisseaux Expires March 10, 2012 [Page 45]
-
-Internet-Draft CalDAV Scheduling Extensions September 2011
-
-
- +----------+--------------------------------------------------------+
- | Delivery | Description |
- | Status | |
- | Code | |
- +----------+--------------------------------------------------------+
- | 1.0 | The scheduling message is pending. i.e. the server is |
- | | still in the process of sending the message. The |
- | | status code value can be expected to change once the |
- | | server has completed its sending and delivery |
- | | attempts. |
- | | |
- | | |
- | | |
- | 1.1 | The scheduling message has been successfully sent. |
- | | However, the server does not have explicit information |
- | | about whether the scheduling message was successfully |
- | | delivered to the recipient. This state can occur with |
- | | "store and forward" style scheduling protocols such as |
- | | iMIP [RFC6047] (iTIP using email). |
- | | |
- | | |
- | | |
- | 1.2 | The scheduling message has been successfully |
- | | delivered. |
- | | |
- | | |
- | | |
- | 3.7 | The scheduling message was not delivered because the |
- | | server did not recognize the calendar user address as |
- | | a valid calendar user. Note that this code applies to |
- | | both Organizer and Attendee calendar user addresses. |
- | | |
- | | |
- | | |
- | 3.8 | The scheduling message was not delivered due to |
- | | insufficient privileges. Note that this code applies |
- | | to both privileges granted by both the Organizer and |
- | | Attendee calendar users. |
- | | |
- | | |
- | | |
- | 5.1 | The scheduling message was not delivered because the |
- | | server could not complete delivery of the message. |
- | | This is likely due to a temporary failure, and the |
- | | originator can try to send the message again at a |
- | | later time. |
- | | |
- | | |
-
-
-
-Daboo & Desruisseaux Expires March 10, 2012 [Page 46]
-
-Internet-Draft CalDAV Scheduling Extensions September 2011
-
-
- | 5.2 | The scheduling message was not delivered because the |
- | | server was not able to find a suitable way to deliver |
- | | the message. This is likely a permanent failure, and |
- | | the originator should not try to send the message |
- | | again, at least without verifying/correcting the |
- | | calendar user address of the recipient. |
- | | |
- | | |
- | | |
- | 5.3 | The scheduling message was not delivered and was |
- | | rejected because scheduling with that recipient is not |
- | | allowed. This is likely a permanent failure, and the |
- | | originator should not try to send the message again. |
- +----------+--------------------------------------------------------+
-
- The status code for "reply" status can be any of the valid iTIP
- [RFC5546] "REQUEST-STATUS" values.
-
- The 1.xx "REQUEST-STATUS" codes are new. This specification modifies
- item (2) of Section 3.6 of [RFC5546] by adding the following
- restriction:
-
- For a 1.xx code, all components MUST have exactly the same code.
-
- Definition of the new 1.xx codes is as follows:
-
-9.2.1. Status Code 1.0
-
- Status Code: 1.0
-
- Status Description: Pending.
-
- Status Exception Data: None.
-
- Description: Delivery of the iTIP message is pending.
-
-9.2.2. Status Code 1.1
-
- Status Code: 1.1
-
- Status Description: Sent.
-
- Status Exception Data: None.
-
- Description: The iTIP message has been sent, though no information
- about successful delivery is known.
-
-
-
-
-
-Daboo & Desruisseaux Expires March 10, 2012 [Page 47]
-
-Internet-Draft CalDAV Scheduling Extensions September 2011
-
-
-9.2.3. Status Code 1.2
-
- Status Code: 1.2
-
- Status Description: Delivered.
-
- Status Exception Data: None.
-
- Description: The iTIP message has been sent and delivered.
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-Daboo & Desruisseaux Expires March 10, 2012 [Page 48]
-
-Internet-Draft CalDAV Scheduling Extensions September 2011
-
-
-10. Additional iCalendar Property Parameters
-
- This specification defines additional iCalendar property parameters
- to support the CalDAV scheduling extensions.
-
-10.1. Schedule Agent Parameter
-
- Parameter Name: SCHEDULE-AGENT
-
- Purpose: To specify the agent expected to deliver scheduling
- messages to the corresponding Organizer or Attendee.
-
- Format Definition: This property parameter is defined by the
- following notation:
-
- scheduleagentparam = "SCHEDULE-AGENT" "="
- ("SERVER" ; The server handles scheduling
- / "CLIENT" ; The client handles scheduling
- / "NONE" ; No scheduling
- / x-name ; Experimental type
- / iana-token) ; Other IANA registered type
- ;
- ; Default is SERVER
-
- Description: This property parameter MAY be specified on "ORGANIZER"
- or "ATTENDEE" iCalendar properties. In the absence of this
- parameter, the value "SERVER" MUST be used for the default
- behavior. The value determines whether or not an automatic
- scheduling transaction on a server will cause a scheduling message
- to be sent to the corresponding Calendar User identified by the
- "ORGANIZER" or "ATTENDEE" property value. When the value "SERVER"
- is specified, or the parameter is absent, then it is the server's
- responsibility to send a scheduling message as part of an
- automatic scheduling transaction. When the value "CLIENT" is
- specified, that indicates that the client is handling scheduling
- messages with the Calendar User itself. When "NONE" is specified,
- no scheduling messages are being sent to the Calendar User.
-
- Servers MUST NOT include this parameter in any scheduling messages
- sent as the result of an automatic scheduling transaction.
-
- Clients MUST NOT include this parameter in any scheduling messages
- that they themselves send.
-
- The parameter value MUST be the same on every "ORGANIZER" property
- in a scheduling object resource.
-
-
-
-
-
-Daboo & Desruisseaux Expires March 10, 2012 [Page 49]
-
-Internet-Draft CalDAV Scheduling Extensions September 2011
-
-
- The parameter value MUST be the same on each "ATTENDEE" property
- whose values match in a scheduling object resource.
-
- Servers and clients MUST treat x-name and iana-token values they
- do not recognize the same way as they would the "NONE" value.
-
- Example:
-
- ORGANIZER;SCHEDULE-AGENT=SERVER:mailto:bernard@example.com
-
- ATTENDEE;SCHEDULE-AGENT=NONE:mailto:cyrus@example.com
-
-10.2. Schedule Force Send Parameter
-
- Parameter Name: SCHEDULE-FORCE-SEND
-
- Purpose: To force a scheduling message to be sent to the Calendar
- User specified by the property.
-
- Format Definition: This property parameter is defined by the
- following notation:
-
- scheduleforcesendparam = "SCHEDULE-FORCE-SEND" "="
- ("REQUEST" ; Force a "REQUEST"
- / "REPLY" ; Force a "REPLY"
- / iana-token) ; IANA registered method
-
- Description: This property parameter MAY be specified on "ATTENDEE"
- and "ORGANIZER" properties on which the "SCHEDULE-AGENT" property
- parameter is set to the value "SERVER" or is not specified. This
- property parameter is used to force a server to send a scheduling
- message to a specific Calendar User in situations where the server
- would not send a scheduling message otherwise (e.g., when no
- change that warrants the delivery of a new scheduling message was
- performed on the scheduling object resource). An Organizer MAY
- specify this parameter on an "ATTENDEE" property with the value
- "REQUEST" to force a "REQUEST" scheduling message to be sent to
- this Attendee. An Attendee MAY specify this parameter on the
- "ORGANIZER" with the value "REPLY" to force a "REPLY" scheduling
- message to be sent to the Organizer.
-
- Servers MUST NOT preserve this property parameter in scheduling
- object resources, nor include it in any scheduling messages sent
- as the result of an automatic scheduling transaction.
-
-
-
-
-
-
-
-Daboo & Desruisseaux Expires March 10, 2012 [Page 50]
-
-Internet-Draft CalDAV Scheduling Extensions September 2011
-
-
- Clients MUST NOT include this parameter in any scheduling messages
- that they themselves send.
-
- Servers MUST set the "SCHEDULE-STATUS" parameter of the "ATTENDEE"
- or "ORGANIZER" to 2.3 (i.e., "Success, invalid property parameter
- ignored", see Section 3.6 of [RFC5546]) when the "SCHEDULE-FORCE-
- SEND" parameter is set to a x-name or iana-token value they do not
- recognize.
-
- Example:
-
- ATTENDEE;SCHEDULE-FORCE-SEND=REQUEST:mailto:bernard@example.com
-
- ORGANIZER;SCHEDULE-FORCE-SEND=REPLY:mailto:cyrus@example.com
-
-10.3. Schedule Status Parameter
-
- Parameter Name: SCHEDULE-STATUS
-
- Purpose: To specify the status codes returned from processing of the
- most recent scheduling message sent to the corresponding Attendee,
- or received from the corresponding Organizer.
-
- Format Definition: This property parameter is defined by the
- following notation:
-
- schedulestatusparam = "SCHEDULE-STATUS" "="
- ( statcode
- / DQUOTE statcode *("," statcode) DQUOTE)
- ; "statcode" is defined in Section 3.8.8.3 of
- ; [RFC5545]. Value is a single
- ; "statcode" or a comma-separated list of "statcode" values.
-
- Description: This property parameter MAY be specified on the
- "ATTENDEE" and "ORGANIZER" properties.
-
- Servers MUST add this property parameter to any "ATTENDEE"
- properties corresponding to Calendar Users who were sent a
- scheduling message via an automatic scheduling transaction.
- Clients SHOULD NOT change or remove this parameter if it was
- provided by the server. In the case where the client is handling
- the scheduling, the client MAY add, change or remove this
- parameter to indicate the last scheduling message status it
- received.
-
-
-
-
-
-
-
-Daboo & Desruisseaux Expires March 10, 2012 [Page 51]
-
-Internet-Draft CalDAV Scheduling Extensions September 2011
-
-
- Servers MUST add this parameter to any "ORGANIZER" properties
- corresponding to Calendar Users who were sent a scheduling message
- reply by an Attendee via an automatic scheduling transaction.
- Clients SHOULD NOT change or remove this parameter if it was
- provided by the server. In the case where the client is handling
- the scheduling, the client MAY add, change or remove this
- parameter to indicate the last scheduling message status it
- received.
-
- Servers MUST NOT include this parameter in any scheduling messages
- sent as the result of an automatic scheduling transaction.
-
- Clients MUST NOT include this parameter in any scheduling messages
- that they themselves send.
-
- Suitable values for this property parameter are described in
- Section 9.2.
-
- Example:
-
- ATTENDEE;SCHEDULE-STATUS="2.0":mailto:bernard@example.com
-
- ATTENDEE;SCHEDULE-STATUS="2.0,2.4":mailto:cyrus@example.com
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-Daboo & Desruisseaux Expires March 10, 2012 [Page 52]
-
-Internet-Draft CalDAV Scheduling Extensions September 2011
-
-
-11. Additional Message Header Fields
-
- This specification defines additional HTTP request and response
- headers for use with CalDAV.
-
-11.1. Schedule-Reply Request Header
-
-
- Schedule-Reply = "Schedule-Reply" ":" ("T" | "F")
-
- Example:
-
- Schedule-Reply: F
-
- When an Attendee removes a scheduling object resource, and the
- Schedule-Reply header is not present, or present and set to the value
- "T", the server MUST send an appropriate reply scheduling message
- with the Attendee's "PARTSTAT" iCalendar property parameter value set
- to "DECLINED" as part of its normal automatic scheduling transaction
- processing.
-
- When the Schedule-Reply header is set to the value "F", the server
- MUST NOT send a scheduling message as part of its normal automatic
- scheduling transaction processing.
-
- The Schedule-Reply request header is used by a client to indicate to
- a server whether or not an automatic scheduling transaction should
- occur when an Attendee deletes a scheduling object resource. In
- particular it controls whether a reply scheduling message is sent to
- the Organizer as a result of the removal. There are situations in
- which unsolicited scheduling messages need to be silently removed (or
- ignored) for security or privacy reasons. This request header allows
- the scheduling object resource to be removed if such a need arises.
-
- All scheduling object resources MUST support the Schedule-Reply
- request header.
-
-11.2. Schedule-Tag Response Header
-
- The Schedule-Tag response header provides the current value of the
- CALDAV:schedule-tag property value. The behavior of this response
- header is described in Section 8.
-
- All scheduling object resources MUST support the Schedule-Tag header.
-
- Schedule-Tag = "Schedule-Tag" ":" opaque-tag
- ; "opaque-tag" is defined in Section 3.11 of [RFC2616]
-
-
-
-
-Daboo & Desruisseaux Expires March 10, 2012 [Page 53]
-
-Internet-Draft CalDAV Scheduling Extensions September 2011
-
-
- Example:
-
- Schedule-Tag: "12ab34-cd56ef"
-
-11.3. If-Schedule-Tag-Match Request Header
-
- The If-Schedule-Tag-Match request header field is used with a method
- to make it conditional. Clients can set this header to the value
- returned in the Schedule-Tag response header, or the CALDAV:schedule-
- tag property, of a scheduling object resource previously retrieved
- from the server to avoid overwriting "consequential" changes to the
- scheduling object resource.
-
- All scheduling object resources MUST support the If-Schedule-Tag-
- Match header.
-
- If-Schedule-Tag-Match = "If-Schedule-Tag-Match" ":" opaque-tag
- ; "opaque-tag" is defined in Section 3.11 of [RFC2616]
-
- Example:
-
- If-Schedule-Tag-Match: "12ab34-cd56ef"
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-Daboo & Desruisseaux Expires March 10, 2012 [Page 54]
-
-Internet-Draft CalDAV Scheduling Extensions September 2011
-
-
-12. Additional WebDAV Properties
-
- This specification defines the following new WebDAV properties for
- use with CalDAV.
-
-12.1. CALDAV:schedule-calendar-transp Property
-
- Name: schedule-calendar-transp
-
- Namespace: urn:ietf:params:xml:ns:caldav
-
- Purpose: Determines whether the calendar object resources in a
- calendar collection will affect the owner's freebusy.
-
- Protected: This property MAY be protected and SHOULD NOT be returned
- by a PROPFIND allprop request (as defined in Section 14.2 of
- [RFC4918]).
-
- COPY/MOVE behavior: This property value SHOULD be kept during a MOVE
- operation, and SHOULD be copied and preserved in a COPY.
-
- Description: This property SHOULD be defined on all calendar
- collections. If present, it contains one of two XML elements that
- indicate whether the calendar object resources in the calendar
- collection should contribute to the owner's freebusy or not. When
- the CALDAV:opaque element is used, all calendar object resources
- in the corresponding calendar collection MUST contribute to
- freebusy, assuming access privileges and other iCalendar
- properties allow it to. When the CALDAV:transparent XML element
- is used, the calendar object resources in the corresponding
- calendar collection MUST NOT contribute to freebusy.
-
- If this property is not present on a calendar collection, then the
- default value CALDAV:opaque MUST be assumed.
-
- Definition:
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-Daboo & Desruisseaux Expires March 10, 2012 [Page 55]
-
-Internet-Draft CalDAV Scheduling Extensions September 2011
-
-
- Example:
-
-
-
-
-
-12.2. CALDAV:schedule-default-calendar-URL Property
-
- Name: schedule-default-calendar-URL
-
- Namespace: urn:ietf:params:xml:ns:caldav
-
- Purpose: Specifies a default calendar for an Attendee where new
- scheduling object resources are created.
-
- Protected: This property MAY be protected in the case where a server
- does not support changing the default calendar, or does not
- support a default calendar.
-
- COPY/MOVE behavior: This property is only defined on a scheduling
- Inbox collection which cannot be moved or copied.
-
- Description: This property MAY be defined on a scheduling Inbox
- collection. If present, it contains zero or one DAV:href XML
- elements. When a DAV:href element is present, its value indicates
- a URL to a calendar collection that is used as the default
- calendar. When no DAV:href element is present, it indicates that
- there is no default calendar. In the absence of this property
- there is no default calendar. When there is no default calendar
- the server is free to choose the calendar in which a new
- scheduling object resource is created. See Section 6.4.
-
- Definition:
-
-
-
- Example:
-
-
- /home/cyrus/calendars/work/
-
-
-
-
-
-
-
-
-
-Daboo & Desruisseaux Expires March 10, 2012 [Page 56]
-
-Internet-Draft CalDAV Scheduling Extensions September 2011
-
-
-12.3. CALDAV:schedule-tag Property
-
- Name: schedule-tag
-
- Namespace: urn:ietf:params:xml:ns:caldav
-
- Purpose: Indicates whether a scheduling object resource has had a
- "consequential" change made to it.
-
- Value: opaque-tag (defined in Section 3.11 of [RFC2616])
-
- Protected: This property MUST be protected as only the server can
- update the value.
-
- COPY/MOVE behavior: This property is only defined on scheduling
- object resources. It MUST be preserved when a scheduling object
- resource is copied or moved and the resulting resource is also a
- scheduling object resource. If the source resource is not a
- scheduling object resource but the destination resource is, this
- property MUST be added to the destination resource.
-
- Description: The CALDAV:schedule-tag property MUST be defined on all
- scheduling object resources. This property is described in
- Section 8.
-
- Definition:
-
-
-
- Example:
-
- "12345-67890"
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-Daboo & Desruisseaux Expires March 10, 2012 [Page 57]
-
-Internet-Draft CalDAV Scheduling Extensions September 2011
-
-
-13. Scheduling Access Control
-
-13.1. Scheduling Privileges
-
- CalDAV servers MUST support and adhere to the requirements of WebDAV
- ACL [RFC3744]. Furthermore, CalDAV servers that advertise support
- for the "calendar-auto-schedule" feature MUST also support the
- scheduling privileges defined in this section.
-
- All the scheduling privileges MUST be non-abstract and MUST appear in
- the DAV:supported-privilege-set property of scheduling Outbox and
- Inbox collections on which they are defined.
-
- The tables specified in Appendix A clarify which scheduling methods
- (e.g., "REQUEST", "REPLY", etc.) are controlled by each scheduling
- privilege defined in this section.
-
-13.1.1. Privileges on Scheduling Inbox Collections
-
- This section defines new WebDAV ACL privileges that are for use on
- scheduling Inbox collections. These privileges determine whether
- delivery of scheduling messages from a calendar user is allowed by
- the calendar user who "owns" the scheduling Inbox collection. This
- allows calendar users to choose which other calendar users can
- schedule with them.
-
- Note that when a scheduling message is delivered to a calendar user,
- in addition to a scheduling object resource being created in the
- calendar user's scheduling Inbox collection, a new scheduling object
- resource might be created or an existing one updated in a calendar
- belonging to the calendar user. In that case, the ability to create
- or update the scheduling object resource in the calendar is
- controlled by the privileges assigned to the scheduling Inbox
- collection.
-
- The privileges defined in this section are ignored if applied to a
- resource other than a scheduling Inbox collection.
-
-13.1.1.1. CALDAV:schedule-deliver Privilege
-
- CALDAV:schedule-deliver is an aggregate privilege that contains all
- the scheduling privileges that control the processing and delivery of
- incoming scheduling messages, that is, CALDAV:schedule-deliver-invite
- and CALDAV:schedule-deliver-reply, as well as freebusy requests
- targeted at the owner of the scheduling Inbox collection, that is,
- CALDAV:schedule-query-freebusy.
-
-
-
-
-
-Daboo & Desruisseaux Expires March 10, 2012 [Page 58]
-
-Internet-Draft CalDAV Scheduling Extensions September 2011
-
-
-13.1.1.2. CALDAV:schedule-deliver-invite Privilege
-
- The CALDAV:schedule-deliver-invite privilege controls the processing
- and delivery of scheduling messages coming from an Organizer.
-
-
-
-13.1.1.3. CALDAV:schedule-deliver-reply Privilege
-
- The CALDAV:schedule-deliver-reply privilege controls the processing
- and delivery of scheduling messages coming from an Attendee.
-
-
-
-13.1.1.4. CALDAV:schedule-query-freebusy Privilege
-
- The CALDAV:schedule-query-freebusy privilege controls freebusy
- requests targeted at the owner of the scheduling Inbox collection.
-
-
-
-13.1.2. Privileges on Scheduling Outbox Collections
-
- This section defines new WebDAV ACL privileges that are defined for
- use on scheduling Outbox collections. These privileges determine
- which calendar users are allowed to send scheduling messages on
- behalf of the calendar user who "owns" the scheduling Outbox
- collection. This allows calendar users to choose other calendar
- users who can act on their behalf to send schedule messages to other
- calendar users (e.g. assistants working on behalf of their boss).
-
- The privileges defined in this section are ignored if applied to a
- resource other than a scheduling Outbox collection.
-
-13.1.2.1. CALDAV:schedule-send Privilege
-
- CALDAV:schedule-send is an aggregate privilege that contains all the
- scheduling privileges that control the use of methods that will cause
- scheduling messages to be delivered to other users, that is, CALDAV:
- schedule-send-invite and CALDAV:schedule-send-reply, as well as
- freebusy requests to be targeted at other users, that is, CALDAV:
- schedule-send-freebusy.
-
-
-
-
-
-
-
-
-
-Daboo & Desruisseaux Expires March 10, 2012 [Page 59]
-
-Internet-Draft CalDAV Scheduling Extensions September 2011
-
-
-13.1.2.2. CALDAV:schedule-send-invite Privilege
-
- The CALDAV:schedule-send-invite privilege controls the sending of
- scheduling messages by Organizers.
-
- Users granted the DAV:bind privilege on a calendar collection, or
- DAV:write privilege on scheduling object resources, will also need
- the CALDAV:schedule-send-invite privilege granted on the scheduling
- Outbox collection of the owner of the calendar collection or
- scheduling object resource in order to be allowed to create, modify
- or delete scheduling object resources in a way that will trigger the
- CalDAV server to deliver organizer scheduling messages to other
- calendar users.
-
-
-
-13.1.2.3. CALDAV:schedule-send-reply Privilege
-
- The CALDAV:schedule-send-reply privilege controls the sending of
- scheduling messages by Attendees.
-
- Users granted the DAV:bind privilege on a calendar collection, or
- DAV:write privilege on scheduling object resources, will also need
- the CALDAV:schedule-send-reply privilege granted on the scheduling
- Outbox collection of the owner of the calendar collection or
- scheduling object resource in order to be allowed to create, modify
- or delete scheduling object resources in a way that will trigger the
- CalDAV server to deliver attendee scheduling messages to other
- calendar users.
-
-
-
-13.1.2.4. CALDAV:schedule-send-freebusy Privilege
-
- The CALDAV:schedule-send-freebusy privilege controls the use of the
- POST method to submit scheduling messages that specify the scheduling
- method "REQUEST" with a "VFREEBUSY" calendar component.
-
-
-
-13.1.3. Aggregation of Scheduling Privileges
-
- Server implementations MUST aggregate the scheduling privileges as
- follows:
-
- DAV:all MUST contain CALDAV:schedule-send and CALDAV:schedule-
- deliver;
-
-
-
-
-Daboo & Desruisseaux Expires March 10, 2012 [Page 60]
-
-Internet-Draft CalDAV Scheduling Extensions September 2011
-
-
- CALDAV:schedule-send MUST contain CALDAV:schedule-send-invite,
- CALDAV:schedule-send-reply, and CALDAV:schedule-send-freebusy;
-
- CALDAV:schedule-deliver MUST contain CALDAV:schedule-deliver-
- invite, CALDAV:schedule-deliver-reply, and CALDAV:schedule-query-
- freebusy.
-
- The following diagram illustrates how scheduling privileges are
- aggregated according to the above requirements.
-
- [DAV:all] (aggregate)
- |
- +-- [CALDAV:schedule-deliver] (aggregate)
- | |
- | +-- [CALDAV:schedule-deliver-invite]
- | +-- [CALDAV:schedule-deliver-reply]
- | +-- [CALDAV:schedule-query-freebusy]
- |
- +-- [CALDAV:schedule-send] (aggregate)
- |
- +-- [CALDAV:schedule-send-invite]
- +-- [CALDAV:schedule-send-reply]
- +-- [CALDAV:schedule-send-freebusy]
-
-13.2. Additional Principal Properties
-
- This section defines new properties for WebDAV principal resources as
- defined in [RFC3744]. These properties are likely to be protected
- but the server MAY allow them to be written by appropriate users.
-
-13.2.1. CALDAV:schedule-inbox-URL Property
-
- Name: schedule-inbox-URL
-
- Namespace: urn:ietf:params:xml:ns:caldav
-
- Purpose: Identify the URL of the scheduling Inbox collection owned
- by the associated principal resource.
-
- Protected: This property MAY be protected.
-
- PROPFIND behavior: This property SHOULD NOT be returned by a
- PROPFIND allprop request (as defined in Section 14.2 of
- [RFC4918]).
-
-
-
-
-
-
-
-Daboo & Desruisseaux Expires March 10, 2012 [Page 61]
-
-Internet-Draft CalDAV Scheduling Extensions September 2011
-
-
- COPY/MOVE behavior: This property value SHOULD be preserved in COPY
- and MOVE operations.
-
- Description: This property is needed for a client to determine where
- the scheduling Inbox collection of the current user is located so
- that processing of scheduling messages can occur. If not present,
- then the associated calendar user is not enabled for reception of
- scheduling messages on the server.
-
- Definition:
-
-
-
-13.2.2. CALDAV:schedule-outbox-URL Property
-
- Name: schedule-outbox-URL
-
- Namespace: urn:ietf:params:xml:ns:caldav
-
- Purpose: Identify the URL of the scheduling Outbox collection owned
- by the associated principal resource.
-
- Protected: This property MAY be protected.
-
- PROPFIND behavior: This property SHOULD NOT be returned by a
- PROPFIND allprop request (as defined in Section 14.2 of
- [RFC4918]).
-
- COPY/MOVE behavior: This property value SHOULD be preserved in COPY
- and MOVE operations.
-
- Description: This property is needed for a client to determine where
- the scheduling Outbox collection of the current user is located so
- that sending of scheduling messages can occur. If not present,
- then the associated calendar user is not enabled for the sending
- of scheduling messages on the server.
-
- Definition:
-
-
-
-13.2.3. CALDAV:calendar-user-address-set Property
-
- Name: calendar-user-address-set
-
-
-
-
-
-
-
-Daboo & Desruisseaux Expires March 10, 2012 [Page 62]
-
-Internet-Draft CalDAV Scheduling Extensions September 2011
-
-
- Namespace: urn:ietf:params:xml:ns:caldav
-
- Purpose: Identify the calendar addresses of the associated principal
- resource.
-
- Protected: This property MAY be protected.
-
- PROPFIND behavior: This property SHOULD NOT be returned by a
- PROPFIND allprop request (as defined in Section 14.2 of
- [RFC4918]).
-
- COPY/MOVE behavior: This property value SHOULD be preserved in COPY
- and MOVE operations.
-
- Description: Support for this property is REQUIRED. This property
- is needed to map calendar user addresses in iCalendar data to
- principal resources and their associated scheduling Inbox and
- Outbox collections. In the event that a user has no well defined
- identifier for their calendar user address, the URI of their
- principal resource can be used. This property SHOULD be
- searchable using the DAV:principal-property-search REPORT. The
- DAV:principal-search-property-set REPORT SHOULD identify this
- property as such. If not present, then the associated calendar
- user is not enabled for scheduling on the server.
-
- Definition:
-
-
-
- Example:
-
-
- mailto:bernard@example.com
- mailto:bernard.desruisseaux@example.com
-
-
-13.2.4. CALDAV:calendar-user-type Property
-
- Name: calendar-user-type
-
- Namespace: urn:ietf:params:xml:ns:caldav
-
- Purpose: Identifies the calendar user type of the associated
- principal resource.
-
-
-
-
-
-
-Daboo & Desruisseaux Expires March 10, 2012 [Page 63]
-
-Internet-Draft CalDAV Scheduling Extensions September 2011
-
-
- Value: Same values allowed for the iCalendar "CUTYPE" property
- parameter defined in Section 3.2.3 of [RFC5545].
-
- Protected: This property MAY be protected.
-
- PROPFIND behavior: This property SHOULD NOT be returned by a
- PROPFIND allprop request (as defined in Section 14.2 of
- [RFC4918]).
-
- COPY/MOVE behavior: This property value SHOULD be preserved in COPY
- and MOVE operations.
-
- Description: Clients can query principal resources in order to
- lookup attendees available on the server. When doing this, it is
- useful to know, or restrict the query to, certain types of
- calendar user (e.g., only search for "people", or only search for
- "rooms"). This property MAY be defined on principal resources to
- indicate the type of calendar user associated with the principal
- resource. Its value is the same as the iCalendar "CUTYPE"
- property parameter that can be used on "ATTENDEE" properties.
- This property SHOULD be searchable using the DAV:principal-
- property-search REPORT. The DAV:principal-search-property-set
- REPORT SHOULD identify this property as such.
-
- Definition:
-
-
-
- Example:
-
- INDIVIDUAL<
- /C:calendar-user-type>
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-Daboo & Desruisseaux Expires March 10, 2012 [Page 64]
-
-Internet-Draft CalDAV Scheduling Extensions September 2011
-
-
-14. XML Element Definitions
-
-14.1. CALDAV:schedule-response XML Element
-
- Name: schedule-response
-
- Namespace: urn:ietf:params:xml:ns:caldav
-
- Purpose: Contains the set of responses for a POST method request.
-
- Description: See Section 7.3.
-
- Definition:
-
-
-
-14.2. CALDAV:response XML Element
-
- Name: response
-
- Namespace: urn:ietf:params:xml:ns:caldav
-
- Purpose: Contains a single response for a POST method request.
-
- Description: See Section 7.3.
-
- Definition:
-
-
-
-
-
-14.3. CALDAV:recipient XML Element
-
- Name: recipient
-
- Namespace: urn:ietf:params:xml:ns:caldav
-
- Purpose: The calendar user address that the enclosing response for a
- POST method request is for.
-
-
-
-
-
-Daboo & Desruisseaux Expires March 10, 2012 [Page 65]
-
-Internet-Draft CalDAV Scheduling Extensions September 2011
-
-
- Description: See Section 7.3.
-
- Definition:
-
-
-
-14.4. CALDAV:request-status XML Element
-
- Name: request-status
-
- Namespace: urn:ietf:params:xml:ns:caldav
-
- Purpose: The iTIP "REQUEST-STATUS" property value for this response.
-
- Description: See Section 7.3.
-
- Definition:
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-Daboo & Desruisseaux Expires March 10, 2012 [Page 66]
-
-Internet-Draft CalDAV Scheduling Extensions September 2011
-
-
-15. Security Considerations
-
- The process of scheduling involves the sending and receiving of
- scheduling messages. As a result, the security problems related to
- messaging in general are relevant here. In particular the
- authenticity of the scheduling messages needs to be verified.
- Servers and clients MUST use an HTTP connection protected with TLS as
- defined in [RFC2818] for all scheduling transactions.
-
-15.1. Verifying Scheduling Transactions
-
- When handling a scheduling transaction:
-
- Servers MUST verify that the principal associated with the DAV:
- owner of the calendar collection in which a scheduling object
- resource is being manipulated contains a CALDAV:schedule-outbox-
- URL property value.
-
- Servers MUST verify that the currently authenticated user has the
- CALDAV:schedule-send privilege, or a suitable sub-privilege
- aggregated under this privilege, on the scheduling Outbox
- collection of the DAV:owner of the calendar collection in which a
- scheduling object resource is being manipulated.
-
- Servers MUST only deliver scheduling messages to recipients when
- the CALDAV:schedule-deliver privilege, or a suitable sub-privilege
- aggregated under this privilege, is granted on the recipient's
- scheduling Inbox collection for the principal associated with the
- DAV:owner of the calendar collection in which a scheduling object
- resource is being manipulated.
-
- To prevent impersonation of calendar users, the server MUST verify
- that the "ORGANIZER" property in an organizer scheduling object
- resource matches one of the calendar user addresses of the DAV:
- owner of the calendar collection in which the resource is stored.
-
- To prevent spoofing of an existing scheduling object resource,
- servers MUST verify that the "UID" iCalendar property value in a
- new scheduling object resource does not match that of an existing
- scheduling object resource with a different "ORGANIZER" property
- value.
-
-15.2. Verifying Busy Time Information Requests
-
- When handling a POST request on a scheduling Outbox collection:
-
-
-
-
-
-
-Daboo & Desruisseaux Expires March 10, 2012 [Page 67]
-
-Internet-Draft CalDAV Scheduling Extensions September 2011
-
-
- Servers MUST verify that the principal associated with the
- calendar user address specified in the "ORGANIZER" property of the
- scheduling message data in the request contains a CALDAV:schedule-
- outbox-URL property value that matches the scheduling Outbox
- collection targeted by the request.
-
- Servers MUST verify that the currently authenticated user has the
- CALDAV:schedule-send privilege, or a sub-privilege aggregated
- under this privilege, on the scheduling Outbox collection targeted
- by the request.
-
- Servers MUST only return valid freebusy information for recipients
- when the CALDAV:schedule-deliver privilege, or a sub-privilege
- aggregated under this privilege, is granted on the recipient's
- scheduling Inbox collection for the principal associated with the
- DAV:owner of the scheduling Outbox collection targeted by the
- request.
-
-15.3. Privacy Issues
-
- As noted in Section 11.1, Attendees can use the Schedule-Reply
- request header with the value set to "F" to prevent notification to
- an Organizer that a scheduling object resource was deleted. This
- allows Attendees to remove unwanted scheduling messages without any
- response to the Organizer.
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-Daboo & Desruisseaux Expires March 10, 2012 [Page 68]
-
-Internet-Draft CalDAV Scheduling Extensions September 2011
-
-
-16. IANA Considerations
-
-16.1. Message Header Field Registrations
-
- The message header fields below should be added to the Permanent
- Message Header Field Registry (see [RFC3864]).
-
-16.1.1. Schedule-Reply
-
- Header field name: Schedule-Reply
-
- Applicable protocol: http
-
- Status: standard
-
- Author/Change controller: IETF
-
- Specification document(s): this specification (Section 11.1)
-
- Related information: none
-
-16.1.2. Schedule-Tag
-
- Header field name: Schedule-Tag
-
- Applicable protocol: http
-
- Status: standard
-
- Author/Change controller: IETF
-
- Specification document(s): this specification (Section 11.2)
-
- Related information: none
-
-16.1.3. If-Schedule-Tag-Match
-
- Header field name: If-Schedule-Tag-Match
-
- Applicable protocol: http
-
- Status: standard
-
- Author/Change controller: IETF
-
- Specification document(s): this specification (Section 11.3)
-
- Related information: none
-
-
-
-Daboo & Desruisseaux Expires March 10, 2012 [Page 69]
-
-Internet-Draft CalDAV Scheduling Extensions September 2011
-
-
-16.2. iCalendar Property Parameter Registrations
-
- The following iCalendar property parameters should be added to the
- iCalendar Property Parameter Registry defined in Section 8.3.3 of
- [RFC5545].
-
- +---------------------+---------+-----------------------+
- | Parameter | Status | Reference |
- +---------------------+---------+-----------------------+
- | SCHEDULE-AGENT | Current | RFCXXXX, Section 10.1 |
- | | | |
- | SCHEDULE-STATUS | Current | RFCXXXX, Section 10.3 |
- | | | |
- | SCHEDULE-FORCE-SEND | Current | RFCXXXX, Section 10.2 |
- +---------------------+---------+-----------------------+
-
-16.3. iCalendar REQUEST-STATUS Value Registrations
-
- The following iCalendar "REQUEST-STATUS" values should be added to
- the iCalendar REQUEST-STATUS Value Registry defined in Section 7.3 of
- [RFC5546].
-
- +-------------+---------+-------------------------+
- | Status Code | Status | Reference |
- +-------------+---------+-------------------------+
- | 1.0 | Current | RFC XXXX, Section 9.2.1 |
- | | | |
- | 1.1 | Current | RFC XXXX, Section 9.2.2 |
- | | | |
- | 1.2 | Current | RFC XXXX, Section 9.2.3 |
- +-------------+---------+-------------------------+
-
-16.4. Additional iCalendar Elements Registries
-
- This specification adds two new IANA registries for iCalendar
- elements. Additional codes MAY be used, provided the process
- described in Section 8.2.1 of [RFC5545] is used to register them.
-
-16.4.1. Schedule Agent Values Registry
-
- The following table has been used to initialize the schedule agent
- values registry.
-
-
-
-
-
-
-
-
-
-Daboo & Desruisseaux Expires March 10, 2012 [Page 70]
-
-Internet-Draft CalDAV Scheduling Extensions September 2011
-
-
- +----------------+---------+------------------------+
- | Schedule Agent | Status | Reference |
- +----------------+---------+------------------------+
- | SERVER | Current | RFC XXXX, Section 10.1 |
- | | | |
- | CLIENT | Current | RFC XXXX, Section 10.1 |
- | | | |
- | NONE | Current | RFC XXXX, Section 10.1 |
- +----------------+---------+------------------------+
-
-16.4.2. Schedule Force Send Values Registry
-
- The following table has been used to initialize the schedule send
- values registry.
-
- +---------------------+---------+------------------------+
- | Schedule Force Send | Status | Reference |
- +---------------------+---------+------------------------+
- | REQUEST | Current | RFC XXXX, Section 10.2 |
- | | | |
- | REPLY | Current | RFC XXXX, Section 10.2 |
- +---------------------+---------+------------------------+
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-Daboo & Desruisseaux Expires March 10, 2012 [Page 71]
-
-Internet-Draft CalDAV Scheduling Extensions September 2011
-
-
-17. Acknowledgements
-
- The authors would like to thank the following individuals for
- contributing their ideas and support for writing this specification:
- Mike Douglass, Lisa Dusseault, Helge Hess, Arnaud Quillaud, Julian F.
- Reschke, Wilfredo Sanchez Vega, Simon Vaillancourt, and Jim
- Whitehead.
-
- The authors would also like to thank the Calendaring and Scheduling
- Consortium for advice with this specification, and for organizing
- interoperability testing events to help refine it.
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-Daboo & Desruisseaux Expires March 10, 2012 [Page 72]
-
-Internet-Draft CalDAV Scheduling Extensions September 2011
-
-
-18. References
-
-18.1. Normative References
-
- [RFC2119] Bradner, S., "Key words for use in RFCs to
- Indicate Requirement Levels", BCP 14,
- RFC 2119, March 1997.
-
- [RFC2616] Fielding, R., Gettys, J., Mogul, J., Frystyk,
- H., Masinter, L., Leach, P., and T. Berners-
- Lee, "Hypertext Transfer Protocol --
- HTTP/1.1", RFC 2616, June 1999.
-
- [RFC2818] Rescorla, E., "HTTP Over TLS", RFC 2818,
- May 2000.
-
- [RFC3744] Clemm, G., Reschke, J., Sedlar, E., and J.
- Whitehead, "Web Distributed Authoring and
- Versioning (WebDAV) Access Control Protocol",
- RFC 3744, May 2004.
-
- [RFC3864] Klyne, G., Nottingham, M., and J. Mogul,
- "Registration Procedures for Message Header
- Fields", BCP 90, RFC 3864, September 2004.
-
- [RFC4791] Daboo, C., Desruisseaux, B., and L.
- Dusseault, "Calendaring Extensions to WebDAV
- (CalDAV)", RFC 4791, March 2007.
-
- [RFC4918] Dusseault, L., "HTTP Extensions for Web
- Distributed Authoring and Versioning
- (WebDAV)", RFC 4918, June 2007.
-
- [RFC5234] Crocker, D. and P. Overell, "Augmented BNF
- for Syntax Specifications: ABNF", STD 68,
- RFC 5234, January 2008.
-
- [RFC5545] Desruisseaux, B., "Internet Calendaring and
- Scheduling Core Object Specification
- (iCalendar)", RFC 5545, September 2009.
-
- [RFC5546] Daboo, C., "iCalendar Transport-Independent
- Interoperability Protocol (iTIP)", RFC 5546,
- December 2009.
-
- [W3C.REC-xml-20081126] Paoli, J., Yergeau, F., Bray, T., Sperberg-
- McQueen, C., and E. Maler, "Extensible Markup
- Language (XML) 1.0 (Fifth Edition)", World
-
-
-
-Daboo & Desruisseaux Expires March 10, 2012 [Page 73]
-
-Internet-Draft CalDAV Scheduling Extensions September 2011
-
-
- Wide Web Consortium Recommendation REC-xml-
- 20081126, November 2008,
- .
-
-18.2. Informative References
-
- [RFC3283] Mahoney, B., Babics, G., and A. Taler, "Guide
- to Internet Calendaring", RFC 3283,
- June 2002.
-
- [RFC6047] Melnikov, A., "iCalendar Message-Based
- Interoperability Protocol (iMIP)", RFC 6047,
- December 2010.
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-Daboo & Desruisseaux Expires March 10, 2012 [Page 74]
-
-Internet-Draft CalDAV Scheduling Extensions September 2011
-
-
-Appendix A. Scheduling Privileges Summary
-
-A.1. Scheduling Inbox Privileges
-
- The following tables specify which scheduling privileges grant the
- right to a calendar user to deliver a scheduling message to the
- scheduling Inbox collection of another calendar user. The
- appropriate behavior depends on the calendar component type as well
- as the scheduling "METHOD" specified in the scheduling message.
-
- +--------------------------------+
- | METHOD for VEVENT and VTODO |
- +-----------------------------+---------+-------+-----+--------+
- | Scheduling Inbox Privilege | REQUEST | REPLY | ADD | CANCEL |
- +-----------------------------+---------+-------+-----+--------+
- | schedule-deliver | * | * | * | * |
- | schedule-deliver-invite | * | | * | * |
- | schedule-deliver-reply | | * | | |
- | schedule-query-freebusy | | | | |
- +-----------------------------+---------+-------+-----+--------+
-
-
- +----------------------+
- | METHOD for VFREEBUSY |
- +-----------------------------+----------------------+
- | Scheduling Inbox Privilege | REQUEST |
- +-----------------------------+----------------------+
- | schedule-deliver | * |
- | schedule-deliver-invite | |
- | schedule-deliver-reply | |
- | schedule-query-freebusy | * |
- +-----------------------------+----------------------+
-
-A.2. Scheduling Outbox Privileges
-
- The following tables specify which scheduling privileges grant the
- right to a Calendar User to perform busy time information requests
- and to submit scheduling messages to other Calendar Users as the
- result of a scheduling transaction. The appropriate behavior depends
- on the calendar component type as well as the scheduling "METHOD"
- specified in the scheduling message.
-
-
-
-
-
-
-
-
-
-
-Daboo & Desruisseaux Expires March 10, 2012 [Page 75]
-
-Internet-Draft CalDAV Scheduling Extensions September 2011
-
-
- +--------------------------------+
- | METHOD for VEVENT and VTODO |
- +-----------------------------+---------+-------+-----+--------+
- | Scheduling Outbox Privilege | REQUEST | REPLY | ADD | CANCEL |
- +-----------------------------+---------+-------+-----+--------+
- | schedule-send | * | * | * | * |
- | schedule-send-invite | * | | * | * |
- | schedule-send-reply | | * | | |
- | schedule-send-freebusy | | | | |
- +-----------------------------+---------+-------+-----+--------+
-
-
- +----------------------+
- | METHOD for VFREEBUSY |
- +-----------------------------+----------------------+
- | Scheduling Outbox Privilege | REQUEST |
- +-----------------------------+----------------------+
- | schedule-send | * |
- | schedule-send-invite | |
- | schedule-send-reply | |
- | schedule-send-freebusy | * |
- +-----------------------------+----------------------+
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-Daboo & Desruisseaux Expires March 10, 2012 [Page 76]
-
-Internet-Draft CalDAV Scheduling Extensions September 2011
-
-
-Appendix B. Example Scheduling Transactions
-
- This section describes some example scheduling transactions that give
- a general idea of how scheduling is carried out between CalDAV
- clients and servers from the perspective of meeting Organizers and
- Attendees.
-
- In the following examples the requests and responses are incomplete
- and are only for illustrative purposes. In particular, HTTP
- authentication headers and behaviors are not shown, even though they
- are required in normal operation.
-
-B.1. Example: Organizer Inviting Multiple Attendees
-
- In the following example, Cyrus invites Wilfredo, Bernard and Mike to
- a single instance event by simply creating a new scheduling object
- resource in one of his calendar collection by using the PUT method.
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-Daboo & Desruisseaux Expires March 10, 2012 [Page 77]
-
-Internet-Draft CalDAV Scheduling Extensions September 2011
-
-
- >> Request <<
-
- PUT /home/cyrus/calendars/work/9263504FD3AD.ics HTTP/1.1
- Host: cal.example.com
- Content-Type: text/calendar; charset="utf-8"
- Content-Length: xxxx
- If-None-Match: *
-
- BEGIN:VCALENDAR
- VERSION:2.0
- PRODID:-//Example Corp.//CalDAV Client//EN
- BEGIN:VEVENT
- UID:9263504FD3AD
- SEQUENCE:0
- DTSTAMP:20090602T185254Z
- DTSTART:20090602T160000Z
- DTEND:20090602T170000Z
- TRANSP:OPAQUE
- SUMMARY:Lunch
- ORGANIZER;CN="Cyrus Daboo":mailto:cyrus@example.com
- ATTENDEE;CN="Cyrus Daboo";CUTYPE=INDIVIDUAL;PARTSTAT=ACCEPTED:
- mailto:cyrus@example.com
- ATTENDEE;CN="Wilfredo Sanchez Vega";CUTYPE=INDIVIDUAL;PARTSTAT
- =NEEDS-ACTION;ROLE=REQ-PARTICIPANT;RSVP=TRUE:mailto:wilfredo@
- example.com
- ATTENDEE;CN="Bernard Desruisseaux";CUTYPE=INDIVIDUAL;PARTSTAT=
- NEEDS-ACTION;ROLE=REQ-PARTICIPANT;RSVP=TRUE:mailto:bernard@ex
- ample.net
- ATTENDEE;CN="Mike Douglass";CUTYPE=INDIVIDUAL;PARTSTAT=NEEDS-A
- CTION;RSVP=TRUE:mailto:mike@example.org
- END:VEVENT
- END:VCALENDAR
-
- >> Response <<
-
- HTTP/1.1 201 Created
- Content-Length: 0
- Date: Tue, 02 Jun 2009 18:52:54 GMT
- Last-Modified: Tue, 02 Jun 2009 18:52:54 GMT
- ETag: "d85561cfe74a4e785eb4639451b434fb"
- Schedule-Tag: "488177c8-2ea7-4176-a6cb-fab8cfccdea2"
-
- Once the event creation has been completed, Cyrus's client will
- retrieve the event back from the server to get the schedule status of
- each Attendee. In this example, the server reports that a scheduling
- message was delivered to Wilfredo, a scheduling message is still
- pending for Bernard, and the server was unable to deliver a
- scheduling message to Mike.
-
-
-
-Daboo & Desruisseaux Expires March 10, 2012 [Page 78]
-
-Internet-Draft CalDAV Scheduling Extensions September 2011
-
-
- >> Request <<
-
- GET /home/cyrus/calendars/work/9263504FD3AD.ics HTTP/1.1
- Host: cal.example.com
-
- >> Response <<
-
- HTTP/1.1 200 OK
- Date: Tue, 02 Jun 2009 18:52:58 GMT
- Last-Modified: Tue, 02 Jun 2009 18:52:58 GMT
- ETag: "eb897deabc8939589da116714bc99265"
- Schedule-Tag: "488177c8-2ea7-4176-a6cb-fab8cfccdea2"
- Content-Type: text/calendar; charset="utf-8"
- Content-Length: xxxx
-
- BEGIN:VCALENDAR
- VERSION:2.0
- PRODID:-//Example Corp.//CalDAV Server//EN
- BEGIN:VEVENT
- UID:9263504FD3AD
- SEQUENCE:0
- DTSTAMP:20090602T185300Z
- DTSTART:20090602T160000Z
- DTEND:20090602T170000Z
- TRANSP:OPAQUE
- SUMMARY:Lunch
- ORGANIZER;CN="Cyrus Daboo":mailto:cyrus@example.com
- ATTENDEE;CN="Cyrus Daboo";CUTYPE=INDIVIDUAL;PARTSTAT=ACCEPTED:
- mailto:cyrus@example.com
- ATTENDEE;CN="Wilfredo Sanchez Vega";CUTYPE=INDIVIDUAL;PARTSTAT
- =NEEDS-ACTION;ROLE=REQ-PARTICIPANT;RSVP=TRUE;SCHEDULE-STATUS=
- 1.2:mailto:wilfredo@e
- xample.com
- ATTENDEE;CN="Bernard Desruisseaux";CUTYPE=INDIVIDUAL;PARTSTAT=
- NEEDS-ACTION;ROLE=REQ-PARTICIPANT;RSVP=TRUE;SCHEDULE-STATUS=
- 1.0:mailto:bernard@example.net
- ATTENDEE;CN="Mike Douglass";CUTYPE=INDIVIDUAL;PARTSTAT=NEEDS-A
- CTION;RSVP=TRUE;SCHEDULE-STATUS=3.7:mailto:mike@example.org
- END:VEVENT
- END:VCALENDAR
-
-B.2. Example: Attendee Receiving an Invitation
-
- In the following example, Wilfredo's client retrieves and deletes the
- new scheduling message that appeared in his scheduling Inbox
- collection after the server automatically processed it and created a
- new scheduling object resource in his default calendar collection.
-
-
-
-
-Daboo & Desruisseaux Expires March 10, 2012 [Page 79]
-
-Internet-Draft CalDAV Scheduling Extensions September 2011
-
-
- >> Request <<
-
- GET /home/wilfredo/calendars/inbox/27d93fc0a58c.ics HTTP/1.1
- Host: cal.example.com
-
- >> Response <<
-
- HTTP/1.1 200 OK
- Date: Tue, 02 Jun 2009 18:59:58 GMT
- Last-Modified: Tue, 02 Jun 2009 18:59:58 GMT
- ETag: "da116714bc9926c89395895eb897deab"
- Content-Type: text/calendar; charset="utf-8"
- Content-Length: xxxx
-
- BEGIN:VCALENDAR
- VERSION:2.0
- PRODID:-//Example Corp.//CalDAV Server//EN
- METHOD:REQUEST
- BEGIN:VEVENT
- UID:9263504FD3AD
- SEQUENCE:0
- DTSTAMP:20090602T185254Z
- DTSTART:20090602T160000Z
- DTEND:20090602T170000Z
- TRANSP:OPAQUE
- SUMMARY:Lunch
- ORGANIZER;CN="Cyrus Daboo":mailto:cyrus@example.com
- ATTENDEE;CN="Cyrus Daboo";CUTYPE=INDIVIDUAL;PARTSTAT=ACCEPTED:
- mailto:cyrus@example.com
- ATTENDEE;CN="Wilfredo Sanchez Vega";CUTYPE=INDIVIDUAL;PARTSTAT
- =NEEDS-ACTION;ROLE=REQ-PARTICIPANT;RSVP=TRUE:mailto:wilfredo@
- example.com
- ATTENDEE;CN="Bernard Desruisseaux";CUTYPE=INDIVIDUAL;PARTSTAT=
- NEEDS-ACTION;ROLE=REQ-PARTICIPANT;RSVP=TRUE:mailto:bernard@ex
- ample.net
- ATTENDEE;CN="Mike Douglass";CUTYPE=INDIVIDUAL;PARTSTAT=NEEDS-A
- CTION;RSVP=TRUE:mailto:mike@example.org
- END:VEVENT
- END:VCALENDAR
-
- >> Request <<
-
- DELETE /home/wilfredo/calendars/inbox/27d93fc0a58c.ics HTTP/1.1
- Host: cal.example.com
-
-
-
-
-
-
-
-Daboo & Desruisseaux Expires March 10, 2012 [Page 80]
-
-Internet-Draft CalDAV Scheduling Extensions September 2011
-
-
- >> Response <<
-
- HTTP/1.1 204 No Content
- Date: Tue, 02 Jun 2009 20:40:36 GMT
-
-B.3. Example: Attendee Replying to an Invitation
-
- In the following example, Wilfredo's accepts Cyrus's invitation and
- sets a reminder on the event.
-
- >> Request <<
-
- PUT /home/wilfredo/calendars/work/BB64861C2228.ics HTTP/1.1
- Host: cal.example.com
- If-Schedule-Tag-Match: "e78f23ed-0188-4bab-938d-2aeb3324c7e8"
- Content-Type: text/calendar; charset="utf-8"
- Content-Length: xxxx
-
- BEGIN:VCALENDAR
- VERSION:2.0
- PRODID:-//Example Corp.//CalDAV Client//EN
- BEGIN:VEVENT
- UID:9263504FD3AD
- SEQUENCE:0
- DTSTAMP:20090602T185254Z
- DTSTART:20090602T160000Z
- DTEND:20090602T170000Z
- TRANSP:OPAQUE
- SUMMARY:Lunch
- ORGANIZER;CN="Cyrus Daboo":mailto:cyrus@example.com
- ATTENDEE;CN="Cyrus Daboo";CUTYPE=INDIVIDUAL;PARTSTAT=ACCEPTED:
- mailto:cyrus@example.com
- ATTENDEE;CN="Wilfredo Sanchez Vega";CUTYPE=INDIVIDUAL;PARTSTAT
- =ACCEPTED;ROLE=REQ-PARTICIPANT;RSVP=TRUE:mailto:wilfredo@exam
- ple.com
- ATTENDEE;CN="Bernard Desruisseaux";CUTYPE=INDIVIDUAL;PARTSTAT=
- NEEDS-ACTION;ROLE=REQ-PARTICIPANT;RSVP=TRUE:mailto:bernard@ex
- ample.net
- ATTENDEE;CN="Mike Douglass";CUTYPE=INDIVIDUAL;PARTSTAT=NEEDS-A
- CTION;RSVP=TRUE:mailto:mike@example.org
- BEGIN:VALARM
- TRIGGER:-PT15M
- ACTION:DISPLAY
- DESCRIPTION:Reminder
- END:VALARM
- END:VEVENT
- END:VCALENDAR
-
-
-
-
-Daboo & Desruisseaux Expires March 10, 2012 [Page 81]
-
-Internet-Draft CalDAV Scheduling Extensions September 2011
-
-
- >> Response <<
-
- HTTP/1.1 200 OK
- Content-Length: 0
- Date: Tue, 02 Jun 2009 18:57:54 GMT
- Last-Modified: Tue, 02 Jun 2009 18:57:54 GMT
- ETag: "eb4639451b434fbd85561cfe74a4e785"
- Schedule-Tag: "8893ee45-eb9d-428f-b53c-c777daf19e41"
-
- Once the event modification has been completed, Wilfredo's client
- will retrieve the event back from the server to get the schedule
- status of the Organizer.
-
- >> Request <<
-
- GET /home/wilfredo/calendars/work/BB64861C2228.ics HTTP/1.1
- Host: cal.example.com
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-Daboo & Desruisseaux Expires March 10, 2012 [Page 82]
-
-Internet-Draft CalDAV Scheduling Extensions September 2011
-
-
- >> Response <<
-
- HTTP/1.1 200 OK
- Date: Tue, 02 Jun 2009 19:03:03 GMT
- Last-Modified: Tue, 02 Jun 2009 19:02:21 GMT
- ETag: "5eb897deabda116714bc9926c8939589"
- Schedule-Tag: "8893ee45-eb9d-428f-b53c-c777daf19e41"
- Content-Type: text/calendar; charset="utf-8"
- Content-Length: xxxx
-
- BEGIN:VCALENDAR
- VERSION:2.0
- PRODID:-//Example Corp.//CalDAV Client//EN
- BEGIN:VEVENT
- UID:9263504FD3AD
- SEQUENCE:0
- DTSTAMP:20090602T190221Z
- DTSTART:20090602T160000Z
- DTEND:20090602T170000Z
- TRANSP:OPAQUE
- SUMMARY:Lunch
- ORGANIZER;CN="Cyrus Daboo";SCHEDULE-STATUS=1.2:mailto:cyrus@ex
- ample.com
- ATTENDEE;CN="Cyrus Daboo";CUTYPE=INDIVIDUAL;PARTSTAT=ACCEPTED:
- mailto:cyrus@example.com
- ATTENDEE;CN="Wilfredo Sanchez Vega";CUTYPE=INDIVIDUAL;PARTSTAT
- =ACCEPTED;ROLE=REQ-PARTICIPANT;RSVP=TRUE:mailto:wilfredo@exam
- ple.com
- ATTENDEE;CN="Bernard Desruisseaux";CUTYPE=INDIVIDUAL;PARTSTAT=
- NEEDS-ACTION;ROLE=REQ-PARTICIPANT;RSVP=TRUE:mailto:bernard@ex
- ample.net
- ATTENDEE;CN="Mike Douglass";CUTYPE=INDIVIDUAL;PARTSTAT=NEEDS-A
- CTION;RSVP=TRUE:mailto:mike@example.org
- BEGIN:VALARM
- TRIGGER:-PT15M
- ACTION:DISPLAY
- DESCRIPTION:Reminder
- END:VALARM
- END:VEVENT
- END:VCALENDAR
-
-B.4. Example: Organizer Receiving a Reply to an Invitation
-
- On reception of Wilfredo's reply, Cyrus's server will automatically
- update Cyrus's scheduling object resource, make Wilfredo's scheduling
- message available in Cyrus's scheduling Inbox collection, and deliver
- an updated scheduling message to Bernard to share Wilfredo's updated
- participation status. In this example, Cyrus's client retrieves and
-
-
-
-Daboo & Desruisseaux Expires March 10, 2012 [Page 83]
-
-Internet-Draft CalDAV Scheduling Extensions September 2011
-
-
- deletes this scheduling message in his scheduling Inbox collection.
-
- >> Request <<
-
- GET /home/cyrus/calendars/inbox/c0a58c27d93f.ics HTTP/1.1
- Host: cal.example.com
-
- >> Response <<
-
- HTTP/1.1 200 OK
- Date: Tue, 02 Jun 2009 19:05:02 GMT
- Last-Modified: Tue, 02 Jun 2009 19:04:20 GMT
- ETag: "9265eb897deabc8939589da116714bc9"
- Content-Type: text/calendar; charset="utf-8"
- Content-Length: xxxx
-
- BEGIN:VCALENDAR
- VERSION:2.0
- PRODID:-//Example Corp.//CalDAV Server//EN
- METHOD:REPLY
- BEGIN:VEVENT
- UID:9263504FD3AD
- SEQUENCE:0
- DTSTAMP:20090602T185754Z
- DTSTART:20090602T160000Z
- DTEND:20090602T170000Z
- ORGANIZER;CN="Cyrus Daboo":mailto:cyrus@example.com
- ATTENDEE;CN="Wilfredo Sanchez Vega";PARTSTAT=ACCEPTED:mailto:w
- ilfredo@example.com
- REQUEST-STATUS:2.0;Success
- END:VEVENT
- END:VCALENDAR
-
- >> Request <<
-
- DELETE /home/cyrus/calendars/inbox/c0a58c27d93f.ics HTTP/1.1
- Host: cal.example.com
-
- >> Response <<
-
- HTTP/1.1 204 No Content
- Date: Tue, 02 Jun 2009 19:05:05 GMT
-
- Cyrus's client then retrieves the event back from the server with
- Wilfredo's updated participation status.
-
-
-
-
-
-
-Daboo & Desruisseaux Expires March 10, 2012 [Page 84]
-
-Internet-Draft CalDAV Scheduling Extensions September 2011
-
-
- >> Request <<
-
- GET /home/cyrus/calendars/work/9263504FD3AD.ics HTTP/1.1
- Host: cal.example.com
-
- >> Response <<
-
- HTTP/1.1 200 OK
- Date: Tue, 02 Jun 2009 19:05:02 GMT
- Last-Modified: Tue, 02 Jun 2009 19:04:20 GMT
- ETag: "eb897deabc8939589da116714bc99265"
- Schedule-Tag: "132cab27-1fe3-67ab-de13-abd348d1dee3"
- Content-Type: text/calendar; charset="utf-8"
- Content-Length: xxxx
-
- BEGIN:VCALENDAR
- VERSION:2.0
- PRODID:-//Example Corp.//CalDAV Server//EN
- BEGIN:VEVENT
- UID:9263504FD3AD
- SEQUENCE:0
- DTSTAMP:20090602T190420Z
- DTSTART:20090602T160000Z
- DTEND:20090602T170000Z
- TRANSP:OPAQUE
- SUMMARY:Lunch
- ORGANIZER;CN="Cyrus Daboo":mailto:cyrus@example.com
- ATTENDEE;CN="Cyrus Daboo";CUTYPE=INDIVIDUAL;PARTSTAT=ACCEPTED:
- mailto:cyrus@example.com
- ATTENDEE;CN="Wilfredo Sanchez Vega";CUTYPE=INDIVIDUAL;PARTSTAT
- =ACCEPTED;ROLE=REQ-PARTICIPANT;RSVP=TRUE;SCHEDULE-STATUS=2.0:
- mailto:wilfredo@example.com
- ATTENDEE;CN="Bernard Desruisseaux";CUTYPE=INDIVIDUAL;PARTSTAT=
- NEEDS-ACTION;ROLE=REQ-PARTICIPANT;RSVP=TRUE;SCHEDULE-STATUS=1
- .0:mailto:bernard@example.net
- ATTENDEE;CN="Mike Douglass";CUTYPE=INDIVIDUAL;PARTSTAT=NEEDS-A
- CTION;RSVP=TRUE;SCHEDULE-STATUS=3.7:mailto:mike@example.org
- END:VEVENT
- END:VCALENDAR
-
-B.5. Example: Organizer Requesting Busy Time Information
-
- In this example, Cyrus requests the busy time information of
- Wilfredo, Bernard and Mike.
-
-
-
-
-
-
-
-Daboo & Desruisseaux Expires March 10, 2012 [Page 85]
-
-Internet-Draft CalDAV Scheduling Extensions September 2011
-
-
- >> Request <<
-
- POST /home/cyrus/calendars/outbox/ HTTP/1.1
- Host: cal.example.com
- Content-Type: text/calendar; charset="utf-8"
- Content-Length: xxxx
-
- BEGIN:VCALENDAR
- VERSION:2.0
- PRODID:-//Example Corp.//CalDAV Client//EN
- METHOD:REQUEST
- BEGIN:VFREEBUSY
- UID:4FD3AD926350
- DTSTAMP:20090602T190420Z
- DTSTART:20090602T000000Z
- DTEND:20090604T000000Z
- ORGANIZER;CN="Cyrus Daboo":mailto:cyrus@example.com
- ATTENDEE;CN="Wilfredo Sanchez Vega":mailto:wilfredo@example.com
- ATTENDEE;CN="Bernard Desruisseaux":mailto:bernard@example.net
- ATTENDEE;CN="Mike Douglass":mailto:mike@example.org
- END:VFREEBUSY
- END:VCALENDAR
-
- >> Response <<
-
- HTTP/1.1 200 OK
- Date: Tue, 02 Jun 2009 20:07:34 GMT
- Content-Type: application/xml; charset="utf-8"
- Content-Length: xxxx
-
-
-
-
-
- mailto:wilfredo@example.com
-
- 2.0;Success
- BEGIN:VCALENDAR
- VERSION:2.0
- PRODID:-//Example Corp.//CalDAV Server//EN
- METHOD:REPLY
- BEGIN:VFREEBUSY
- UID:4FD3AD926350
- DTSTAMP:20090602T200733Z
- DTSTART:20090602T000000Z
- DTEND:20090604T000000Z
- ORGANIZER;CN="Cyrus Daboo":mailto:cyrus@example.com
-
-
-
-Daboo & Desruisseaux Expires March 10, 2012 [Page 86]
-
-Internet-Draft CalDAV Scheduling Extensions September 2011
-
-
- ATTENDEE;CN="Wilfredo Sanchez Vega":mailto:wilfredo@example.com
- FREEBUSY;FBTYPE=BUSY:20090602T110000Z/20090602T120000Z
- FREEBUSY;FBTYPE=BUSY:20090603T170000Z/20090603T180000Z
- END:VFREEBUSY
- END:VCALENDAR
-
-
-
-
- mailto:bernard@example.net
-
- 2.0;Success
- BEGIN:VCALENDAR
- VERSION:2.0
- PRODID:-//Example Corp.//CalDAV Server//EN
- METHOD:REPLY
- BEGIN:VFREEBUSY
- UID:4FD3AD926350
- DTSTAMP:20090602T200733Z
- DTSTART:20090602T000000Z
- DTEND:20090604T000000Z
- ORGANIZER;CN="Cyrus Daboo":mailto:cyrus@example.com
- ATTENDEE;CN="Bernard Desruisseaux":mailto:bernard@example.net
- FREEBUSY;FBTYPE=BUSY:20090602T150000Z/20090602T160000Z
- FREEBUSY;FBTYPE=BUSY:20090603T090000Z/20090603T100000Z
- FREEBUSY;FBTYPE=BUSY:20090603T180000Z/20090603T190000Z
- END:VFREEBUSY
- END:VCALENDAR
-
-
-
-
- mailto:mike@example.org
-
- 3.7;Invalid calendar user
-
-
-
-B.6. Example: User Attempting to Invite Attendee on behalf of Organizer
-
- In the following example, Cyrus attempts to create, on behalf of
- Wilfredo, an event with Bernard specified as an Attendee. The
- request fails since Wilfredo didn't grant Cyrus the right to invite
- other Calendar Users on his behalf.
-
-
-
-
-
-
-
-Daboo & Desruisseaux Expires March 10, 2012 [Page 87]
-
-Internet-Draft CalDAV Scheduling Extensions September 2011
-
-
- >> Request <<
-
- PUT /home/wilfredo/calendars/work/def456.ics HTTP/1.1
- Host: cal.example.com
- Content-Type: text/calendar; charset="utf-8"
- Content-Length: xxxx
- If-None-Match: *
-
- BEGIN:VCALENDAR
- VERSION:2.0
- PRODID:-//Example Corp.//CalDAV Client//EN
- BEGIN:VEVENT
- UID:3504F926D3AD
- SEQUENCE:0
- DTSTAMP:20090602T190221Z
- DTSTART:20090602T230000Z
- DTEND:20090603T000000Z
- TRANSP:OPAQUE
- SUMMARY:Dinner
- ORGANIZER;CN="Wilfredo Sanchez Vega":mailto:wilfredo@example.com
- ATTENDEE;CN="Wilfredo Sanchez Vega";CUTYPE=INDIVIDUAL;PARTSTAT=A
- CCEPTED:mailto:wilfredo@example.com
- ATTENDEE;CN="Bernard Desruisseaux";CUTYPE=INDIVIDUAL;PARTSTAT=NE
- EDS-ACTION;ROLE=REQ-PARTICIPANT;RSVP=TRUE:mailto:bernard@exampl
- e.net
- END:VEVENT
- END:VCALENDAR
-
- >> Response <<
-
- HTTP/1.1 403 Forbidden
- Content-Type: application/xml; charset="utf-8"
- Content-Length: xxxx
-
-
-
-
- /home/wilfredo/calendars/outbox/
-
-
-
-
-
-B.7. Example: Attendee Declining an Instance of a Recurring Event
-
- In the following example, Bernard declines the second recurrence
- instance of a daily recurring event he's been invited to by Cyrus.
-
-
-
-
-Daboo & Desruisseaux Expires March 10, 2012 [Page 88]
-
-Internet-Draft CalDAV Scheduling Extensions September 2011
-
-
- >> Request <<
-
- PUT /home/bernard/calendars/work/4FD3AD926350.ics HTTP/1.1
- Host: cal.example.com
- Content-Type: text/calendar; charset="utf-8"
- Content-Length: xxxx
- If-Schedule-Tag-Match: "7775FB30-7534-489E-A79A-0EA147B933EB"
-
- BEGIN:VCALENDAR
- VERSION:2.0
- PRODID:-//Example Corp.//CalDAV Client//EN
- BEGIN:VTIMEZONE
- TZID:America/Montreal
- BEGIN:STANDARD
- DTSTART:20071104T020000
- RRULE:FREQ=YEARLY;BYMONTH=11;BYDAY=1SU
- TZNAME:EST
- TZOFFSETFROM:-0400
- TZOFFSETTO:-0500
- END:STANDARD
- BEGIN:DAYLIGHT
- DTSTART:20070311T020000
- RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=2SU
- TZNAME:EDT
- TZOFFSETFROM:-0500
- TZOFFSETTO:-0400
- END:DAYLIGHT
- END:VTIMEZONE
- BEGIN:VEVENT
- UID:9263504FD3AD
- SEQUENCE:0
- DTSTAMP:20090602T185254Z
- DTSTART;TZID=America/Montreal:20090601T150000
- DTEND;TZID=America/Montreal:20090601T160000
- RRULE:FREQ=DAILY;INTERVAL=1;COUNT=5
- TRANSP:OPAQUE
- SUMMARY:Review Internet-Draft
- ORGANIZER;CN="Cyrus Daboo":mailto:cyrus@example.com
- ATTENDEE;CN="Cyrus Daboo";CUTYPE=INDIVIDUAL;PARTSTAT=ACCEPTED:
- mailto:cyrus@example.com
- ATTENDEE;CN="Bernard Desruisseaux";CUTYPE=INDIVIDUAL;PARTSTAT=
- ACCEPTED;ROLE=REQ-PARTICIPANT;RSVP=TRUE:mailto:bernard@exampl
- e.net
- END:VEVENT
- BEGIN:VEVENT
- UID:9263504FD3AD
- SEQUENCE:0
- DTSTAMP:20090603T183823Z
-
-
-
-Daboo & Desruisseaux Expires March 10, 2012 [Page 89]
-
-Internet-Draft CalDAV Scheduling Extensions September 2011
-
-
- RECURRENCE-ID;TZID=America/Montreal:20090602T150000
- DTSTART;TZID=America/Montreal:20090602T150000
- DTEND;TZID=America/Montreal:20090602T160000
- TRANSP:TRANSPARENT
- SUMMARY:Review Internet-Draft
- ORGANIZER;CN="Cyrus Daboo":mailto:cyrus@example.com
- ATTENDEE;CN="Cyrus Daboo";CUTYPE=INDIVIDUAL;PARTSTAT=ACCEPTED:
- mailto:cyrus@example.com
- ATTENDEE;CN="Bernard Desruisseaux";CUTYPE=INDIVIDUAL;PARTSTAT=
- DECLINED;ROLE=REQ-PARTICIPANT;RSVP=TRUE:mailto:bernard@exampl
- e.net
- END:VEVENT
- END:VCALENDAR
-
- >> Response <<
-
- HTTP/1.1 200 OK
- Content-Length: 0
- Date: Tue, 02 Jun 2009 18:52:54 GMT
- Last-Modified: Tue, 02 Jun 2009 18:52:54 GMT
- ETag: "d85561cfe74a4e785eb4639451b434fb"
- Schedule-Tag: "488177c8-2ea7-4176-a6cb-fab8cfccdea2"
-
- Bernard's participation status update will cause his server to
- deliver a scheduling message to Cyrus. Cyrus's client will find the
- following reply message from Bernard in Cyrus's scheduling Inbox
- collection:
-
- >> Request <<
-
- GET /home/cyrus/calendars/inbox/9263504FD3AD.ics HTTP/1.1
- Host: cal.example.com
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-Daboo & Desruisseaux Expires March 10, 2012 [Page 90]
-
-Internet-Draft CalDAV Scheduling Extensions September 2011
-
-
- >> Response <<
-
- HTTP/1.1 200 OK
- Date: Tue, 02 Jun 2009 18:52:58 GMT
- Last-Modified: Tue, 02 Jun 2009 18:52:58 GMT
- ETag: "eb897deabc8939589da116714bc99265"
- Content-Type: text/calendar; charset="utf-8"
- Content-Length: xxxx
-
- BEGIN:VCALENDAR
- VERSION:2.0
- PRODID:-//Example Corp.//CalDAV Client//EN
- METHOD:REPLY
- BEGIN:VTIMEZONE
- TZID:America/Montreal
- BEGIN:STANDARD
- DTSTART:20071104T020000
- RRULE:FREQ=YEARLY;BYMONTH=11;BYDAY=1SU
- TZNAME:EST
- TZOFFSETFROM:-0400
- TZOFFSETTO:-0500
- END:STANDARD
- BEGIN:DAYLIGHT
- DTSTART:20070311T020000
- RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=2SU
- TZNAME:EDT
- TZOFFSETFROM:-0500
- TZOFFSETTO:-0400
- END:DAYLIGHT
- END:VTIMEZONE
- BEGIN:VEVENT
- UID:9263504FD3AD
- SEQUENCE:0
- DTSTAMP:20090603T183823Z
- RECURRENCE-ID;TZID=America/Montreal:20090602T150000
- DTSTART;TZID=America/Montreal:20090602T150000
- DTEND;TZID=America/Montreal:20090602T160000
- SUMMARY:Review Internet-Draft
- ORGANIZER;CN="Cyrus Daboo":mailto:cyrus@example.com
- ATTENDEE;CN="Bernard Desruisseaux";PARTSTAT=DECLINED:
- mailto:bernard@example.net
- REQUEST-STATUS:2.0;Success
- END:VEVENT
- END:VCALENDAR
-
-
-
-
-
-
-
-Daboo & Desruisseaux Expires March 10, 2012 [Page 91]
-
-Internet-Draft CalDAV Scheduling Extensions September 2011
-
-
-B.8. Example: Attendee Removing an Instance of a Recurring Event
-
- In the following example, Bernard removes from his calendar the third
- recurrence instance of a daily recurring event he's been invited to
- by Cyrus. This is accomplished by the addition of an "EXDATE"
- property to the scheduling object resource stored by Bernard.
-
- >> Request <<
-
- PUT /home/bernard/calendars/work/4FD3AD926350.ics HTTP/1.1
- Host: cal.example.com
- Content-Type: text/calendar; charset="utf-8"
- Content-Length: xxxx
- If-Schedule-Tag-Match: "488177c8-2ea7-4176-a6cb-fab8cfccdea2"
-
- BEGIN:VCALENDAR
- VERSION:2.0
- PRODID:-//Example Corp.//CalDAV Client//EN
- BEGIN:VTIMEZONE
- TZID:America/Montreal
- BEGIN:STANDARD
- DTSTART:20071104T020000
- RRULE:FREQ=YEARLY;BYMONTH=11;BYDAY=1SU
- TZNAME:EST
- TZOFFSETFROM:-0400
- TZOFFSETTO:-0500
- END:STANDARD
- BEGIN:DAYLIGHT
- DTSTART:20070311T020000
- RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=2SU
- TZNAME:EDT
- TZOFFSETFROM:-0500
- TZOFFSETTO:-0400
- END:DAYLIGHT
- END:VTIMEZONE
- BEGIN:VEVENT
- UID:9263504FD3AD
- SEQUENCE:0
- DTSTAMP:20090602T185254Z
- DTSTART;TZID=America/Montreal:20090601T150000
- DTEND;TZID=America/Montreal:20090601T160000
- RRULE:FREQ=DAILY;INTERVAL=1;COUNT=5
- EXDATE;TZID=America/Montreal:20090603T150000
- TRANSP:OPAQUE
- SUMMARY:Review Internet-Draft
- ORGANIZER;CN="Cyrus Daboo":mailto:cyrus@example.com
- ATTENDEE;CN="Cyrus Daboo";CUTYPE=INDIVIDUAL;PARTSTAT=ACCEPTED:
- mailto:cyrus@example.com
-
-
-
-Daboo & Desruisseaux Expires March 10, 2012 [Page 92]
-
-Internet-Draft CalDAV Scheduling Extensions September 2011
-
-
- ATTENDEE;CN="Bernard Desruisseaux";CUTYPE=INDIVIDUAL;PARTSTAT=
- ACCEPTED;ROLE=REQ-PARTICIPANT;RSVP=TRUE:mailto:bernard@exampl
- e.net
- END:VEVENT
- BEGIN:VEVENT
- UID:9263504FD3AD
- SEQUENCE:0
- DTSTAMP:20090603T183823Z
- RECURRENCE-ID;TZID=America/Montreal:20090602T150000
- DTSTART;TZID=America/Montreal:20090602T150000
- DTEND;TZID=America/Montreal:20090602T160000
- TRANSP:TRANSPARENT
- SUMMARY:Review Internet-Draft
- ORGANIZER;CN="Cyrus Daboo":mailto:cyrus@example.com
- ATTENDEE;CN="Cyrus Daboo";CUTYPE=INDIVIDUAL;PARTSTAT=ACCEPTED:
- mailto:cyrus@example.com
- ATTENDEE;CN="Bernard Desruisseaux";CUTYPE=INDIVIDUAL;PARTSTAT=
- DECLINED;ROLE=REQ-PARTICIPANT;RSVP=TRUE:mailto:bernard@exampl
- e.net
- END:VEVENT
- END:VCALENDAR
-
- Bernard's deletion of a recurrence instance will cause his server to
- deliver a scheduling message to Cyrus. Cyrus's client will find the
- following reply message from Bernard in Cyrus's scheduling Inbox
- collection:
-
- >> Request <<
-
- GET /home/cyrus/calendars/inbox/6504923FD3AD.ics HTTP/1.1
- Host: cal.example.com
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-Daboo & Desruisseaux Expires March 10, 2012 [Page 93]
-
-Internet-Draft CalDAV Scheduling Extensions September 2011
-
-
- >> Response <<
-
- HTTP/1.1 200 OK
- Date: Tue, 02 Jun 2009 18:52:58 GMT
- Last-Modified: Tue, 02 Jun 2009 18:52:58 GMT
- ETag: "eb897deabc8939589da116714bc99265"
- Content-Type: text/calendar; charset="utf-8"
- Content-Length: xxxx
-
- BEGIN:VCALENDAR
- VERSION:2.0
- PRODID:-//Example Corp.//CalDAV Client//EN
- METHOD:REPLY
- BEGIN:VTIMEZONE
- TZID:America/Montreal
- BEGIN:STANDARD
- DTSTART:20071104T020000
- RRULE:FREQ=YEARLY;BYMONTH=11;BYDAY=1SU
- TZNAME:EST
- TZOFFSETFROM:-0400
- TZOFFSETTO:-0500
- END:STANDARD
- BEGIN:DAYLIGHT
- DTSTART:20070311T020000
- RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=2SU
- TZNAME:EDT
- TZOFFSETFROM:-0500
- TZOFFSETTO:-0400
- END:DAYLIGHT
- END:VTIMEZONE
- BEGIN:VEVENT
- UID:9263504FD3AD
- SEQUENCE:0
- DTSTAMP:20090603T183823Z
- RECURRENCE-ID;TZID=America/Montreal:20090603T150000
- DTSTART;TZID=America/Montreal:20090603T150000
- DTEND;TZID=America/Montreal:20090603T160000
- SUMMARY:Review Internet-Draft
- ORGANIZER;CN="Cyrus Daboo":mailto:cyrus@example.com
- ATTENDEE;CN="Bernard Desruisseaux";PARTSTAT=DECLINED:
- mailto:bernard@example.net
- REQUEST-STATUS:2.0;Success
- END:VEVENT
- END:VCALENDAR
-
-
-
-
-
-
-
-Daboo & Desruisseaux Expires March 10, 2012 [Page 94]
-
-Internet-Draft CalDAV Scheduling Extensions September 2011
-
-
-Appendix C. Changes (to be removed by RFC Editor prior to publication)
-
-C.1. Changes in -10
-
- a. Updated to RFC 6047 reference.
-
- b. Various minor clarifications to behavior and terminology done.
-
- c. Clarified that Inbox/Outbox are the server's responsibility to
- create.
-
- d. Changed MAY to SHOULD for server rejecting organizer PARTSTAT
- changes of attendees.
-
- e. Allow COMPLETED as a valid attendee change.
-
- f. Allow SCHEDULE-STATUS as a valid attendee change on SCHEDULE-
- AGENT=CLIENT attendee properties.
-
- g. COPY or MOVE on a calendar collection now declared to be
- undefined.
-
- h. Changed pre-condition error codes from 409 to 403.
-
- i. Clarified that rules 5546 must be used when server processes
- incoming scheduling messages.
-
- j. default-calendar-delete-allowed -> default-calendar-needed.
-
- k. Clarified that SCHEDULE-AGENT must be the same on all matching
- properties.
-
- l. Added more text justifying the need for calendar-user-type
- property.
-
-C.2. Changes in -09
-
- a. Fixed some examples.
-
- b. Tweaked XML conventions.
-
- c. Removed description in SCHEDULE-STATUS example values.
-
- d. Tweaked 3.7 and 3.8 SCHEDULE-STATUS description to indicate it
- applies to the Organizer as well as Attendee.
-
- e. Updated to RFC 5545 reference.
-
-
-
-
-Daboo & Desruisseaux Expires March 10, 2012 [Page 95]
-
-Internet-Draft CalDAV Scheduling Extensions September 2011
-
-
- f. AD Review: clarified text about inbox resource deletion being
- acknowledgment of change.
-
- g. AD Review: clarified description of freebusy Outbox POST.
-
- h. AD Review: registered new 1.xx request-status codes and added new
- restriction on usage as per iTIP.
-
- i. AD Review: changes SHOULD NOT to MUST NOT for new property
- parameters when clients send scheduling messages.
-
- j. AD Review: CALDAV:schedule-calendar-transp now preserved during
- COPY.
-
- k. AD Review: changed CALDAV- to CALDAV: in acl descriptions.
-
- l. AD Review: fixed various minor typos.
-
- m. AD Review: Added text to new principal properties to indicate
- that if they are not present, then the user is not enabled for
- the various scheduling operations.
-
- n. AD Review: clarified use of CALDAV:calendar-data element in
- CALDAV:response element.
-
- o. AD Review: made reference to 5545 IANA registry procedures for
- the two new element registries.
-
- p. AD Review: Fixed description of B5. example.
-
- q. Fixed SCHEDULE-AGENT/SCHEDULE-STATUS behavior for Attendee
- replies.
-
-C.3. Changes in -08
-
- a. Added "Updates 4791".
-
- b. XML conventions changed to match that in CardDAV spec.
-
- c. Reworded child response behavior for Outbox.
-
- d. Reworded "octet size".
-
- e. If-Schedule-Match descriptions changed to remove implication that
- it is purely a conditional operation.
-
- f. Schedule-Reply header descriptions generalized to resource
- removal rather than just HTTP DELETE.
-
-
-
-Daboo & Desruisseaux Expires March 10, 2012 [Page 96]
-
-Internet-Draft CalDAV Scheduling Extensions September 2011
-
-
- g. Fixed various examples.
-
-C.4. Changes in -07
-
- a. Restructured document.
-
- b. Clarified that CALDAV:schedule-calendar-transp only applies to
- calendar collection.
-
- c. Removed CALDAV:schedule-state property on scheduling messages in
- the scheduling Inbox collection.
-
- d. Added conditional requests on scheduling object resources.
-
- e. Added section on handling of PARTSTAT.
-
- f. Added SCHEDULE-FORCE-SEND iCalendar property parameter.
-
- g. Added clarification on child resources in scheduling Outbox
- collections.
-
- h. Clarified Attendee changes that server MUST allow, and removed
- restrictions on changes that Attendee MUST NOT do.
-
- i. Added Example Scheduling Transactions appendix.
-
- j. Scheduling privileges are no longer required to be non-abstract.
-
- k. Removed handling of REFRESH requests.
-
- l. Removed handling of VJOURNAL components.
-
- m. Completed IANA Considerations section.
-
- n. Added references to RFC3283 and RFC5234.
-
- o. Updated references to iCalendar, iTIP and iMIP.
-
-C.5. Changes in -06
-
- a. Removed distinction between scheduling calendar collections and
- basic calendar collections - now just have calendar collections.
-
- b. Clients now "MAY" reload data rather than "SHOULD" reload data.
-
- c. Fixed in examples.
-
-
-
-
-
-Daboo & Desruisseaux Expires March 10, 2012 [Page 97]
-
-Internet-Draft CalDAV Scheduling Extensions September 2011
-
-
- d. Removed CALDAV:attachments-allowed precondition on POST to Outbox
- as that is no longer relevant.
-
- e. Added CALDAV:default-calendar-delete-allowed precondition for
- DELETE.
-
- f. Relaxed MUST->MAY for Organizer setting PARTSTAT value.
-
- g. Tweaked restrictions on Create/Modify to emphasize that 4791
- restrictions also apply.
-
- h. Added comment that 'opaque' is the default when the CALDAV:
- schedule-calendar-transp property is not present.
-
- i. Description of Schedule-Reply header changed to reflect that it
- is only relevant for Attendees.
-
- j. Minor typos fixed.
-
-C.6. Changes in -05
-
- This draft has changed substantially since the -04 version. The
- primary reason for this change was implementation experience from a
- number of vendors who implemented products based on the earlier
- drafts. Experience showed that the client/server interaction was not
- reliable in keeping scheduling messages synchronized between
- organizer and attendees. In addition the latency in updates due to
- clients being offline proved unacceptable to users. These issues led
- to the redesign of this specification to support a server-based
- processing model that eliminates all the problems seen previously.
- Whilst this adds significant complexity to the server in that it
- needs to be a full blown iTIP processing agent, it does remove a lot
- of the same complexity from clients, opening up the possibility of
- supporting complex scheduling behaviors even with "thin" clients.
-
- In the judgement of the authors, we consider this new specification
- to be a substantial improvement over the old one and believe it
- represents a stronger protocol that will lead to better
- interoperability.
-
-
-
-
-
-
-
-
-
-
-
-
-Daboo & Desruisseaux Expires March 10, 2012 [Page 98]
-
-Internet-Draft CalDAV Scheduling Extensions September 2011
-
-
-Authors' Addresses
-
- Cyrus Daboo
- Apple Inc.
- 1 Infinite Loop
- Cupertino, CA 95014
- USA
-
- EMail: cyrus@daboo.name
- URI: http://www.apple.com/
-
-
- Bernard Desruisseaux
- Oracle Corporation
- 600 Blvd. de Maisonneuve West
- Suite 1900
- Montreal, QC H3A 3J2
- CANADA
-
- EMail: bernard.desruisseaux@oracle.com
- URI: http://www.oracle.com/
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-Daboo & Desruisseaux Expires March 10, 2012 [Page 99]
-
diff --git a/vendor/sabre/dav/docs/draft-ietf-httpbis-p1-messaging-11.txt b/vendor/sabre/dav/docs/draft-ietf-httpbis-p1-messaging-11.txt
deleted file mode 100644
index c0d449877..000000000
--- a/vendor/sabre/dav/docs/draft-ietf-httpbis-p1-messaging-11.txt
+++ /dev/null
@@ -1,5152 +0,0 @@
-
-
-
-HTTPbis Working Group R. Fielding, Ed.
-Internet-Draft Day Software
-Obsoletes: 2616 (if approved) J. Gettys
-Updates: 2817 (if approved) Alcatel-Lucent
-Intended status: Standards Track J. Mogul
-Expires: February 5, 2011 HP
- H. Frystyk
- Microsoft
- L. Masinter
- Adobe Systems
- P. Leach
- Microsoft
- T. Berners-Lee
- W3C/MIT
- Y. Lafon, Ed.
- W3C
- J. Reschke, Ed.
- greenbytes
- August 4, 2010
-
-
- HTTP/1.1, part 1: URIs, Connections, and Message Parsing
- draft-ietf-httpbis-p1-messaging-11
-
-Abstract
-
- The Hypertext Transfer Protocol (HTTP) is an application-level
- protocol for distributed, collaborative, hypertext information
- systems. HTTP has been in use by the World Wide Web global
- information initiative since 1990. This document is Part 1 of the
- seven-part specification that defines the protocol referred to as
- "HTTP/1.1" and, taken together, obsoletes RFC 2616. Part 1 provides
- an overview of HTTP and its associated terminology, defines the
- "http" and "https" Uniform Resource Identifier (URI) schemes, defines
- the generic message syntax and parsing requirements for HTTP message
- frames, and describes general security concerns for implementations.
-
-Editorial Note (To be removed by RFC Editor)
-
- Discussion of this draft should take place on the HTTPBIS working
- group mailing list (ietf-http-wg@w3.org). The current issues list is
- at and related
- documents (including fancy diffs) can be found at
- .
-
- The changes in this draft are summarized in Appendix D.12.
-
-Status of This Memo
-
-
-
-Fielding, et al. Expires February 5, 2011 [Page 1]
-
-Internet-Draft HTTP/1.1, Part 1 August 2010
-
-
- 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 February 5, 2011.
-
-Copyright Notice
-
- Copyright (c) 2010 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.
-
- This document may contain material from IETF Documents or IETF
- Contributions published or made publicly available before November
- 10, 2008. The person(s) controlling the copyright in some of this
- material may not have granted the IETF Trust the right to allow
- modifications of such material outside the IETF Standards Process.
- Without obtaining an adequate license from the person(s) controlling
- the copyright in such materials, this document may not be modified
- outside the IETF Standards Process, and derivative works of it may
- not be created outside the IETF Standards Process, except to format
- it for publication as an RFC or to translate it into languages other
- than English.
-
-Table of Contents
-
- 1. Introduction . . . . . . . . . . . . . . . . . . . . . . . . . 6
- 1.1. Requirements . . . . . . . . . . . . . . . . . . . . . . . 7
- 1.2. Syntax Notation . . . . . . . . . . . . . . . . . . . . . 7
- 1.2.1. ABNF Extension: #rule . . . . . . . . . . . . . . . . 7
-
-
-
-Fielding, et al. Expires February 5, 2011 [Page 2]
-
-Internet-Draft HTTP/1.1, Part 1 August 2010
-
-
- 1.2.2. Basic Rules . . . . . . . . . . . . . . . . . . . . . 8
- 1.2.3. ABNF Rules defined in other Parts of the
- Specification . . . . . . . . . . . . . . . . . . . . 10
- 2. HTTP-related architecture . . . . . . . . . . . . . . . . . . 10
- 2.1. Client/Server Messaging . . . . . . . . . . . . . . . . . 10
- 2.2. Intermediaries . . . . . . . . . . . . . . . . . . . . . . 12
- 2.3. Caches . . . . . . . . . . . . . . . . . . . . . . . . . . 13
- 2.4. Transport Independence . . . . . . . . . . . . . . . . . . 14
- 2.5. HTTP Version . . . . . . . . . . . . . . . . . . . . . . . 14
- 2.6. Uniform Resource Identifiers . . . . . . . . . . . . . . . 16
- 2.6.1. http URI scheme . . . . . . . . . . . . . . . . . . . 16
- 2.6.2. https URI scheme . . . . . . . . . . . . . . . . . . . 18
- 2.6.3. http and https URI Normalization and Comparison . . . 18
- 3. HTTP Message . . . . . . . . . . . . . . . . . . . . . . . . . 19
- 3.1. Message Parsing Robustness . . . . . . . . . . . . . . . . 20
- 3.2. Header Fields . . . . . . . . . . . . . . . . . . . . . . 20
- 3.3. Message Body . . . . . . . . . . . . . . . . . . . . . . . 22
- 3.4. General Header Fields . . . . . . . . . . . . . . . . . . 25
- 4. Request . . . . . . . . . . . . . . . . . . . . . . . . . . . 26
- 4.1. Request-Line . . . . . . . . . . . . . . . . . . . . . . . 26
- 4.1.1. Method . . . . . . . . . . . . . . . . . . . . . . . . 26
- 4.1.2. request-target . . . . . . . . . . . . . . . . . . . . 27
- 4.2. The Resource Identified by a Request . . . . . . . . . . . 29
- 4.3. Effective Request URI . . . . . . . . . . . . . . . . . . 29
- 5. Response . . . . . . . . . . . . . . . . . . . . . . . . . . . 31
- 5.1. Status-Line . . . . . . . . . . . . . . . . . . . . . . . 31
- 5.1.1. Status Code and Reason Phrase . . . . . . . . . . . . 31
- 6. Protocol Parameters . . . . . . . . . . . . . . . . . . . . . 32
- 6.1. Date/Time Formats: Full Date . . . . . . . . . . . . . . . 32
- 6.2. Transfer Codings . . . . . . . . . . . . . . . . . . . . . 34
- 6.2.1. Chunked Transfer Coding . . . . . . . . . . . . . . . 35
- 6.2.2. Compression Codings . . . . . . . . . . . . . . . . . 37
- 6.2.3. Transfer Coding Registry . . . . . . . . . . . . . . . 38
- 6.3. Product Tokens . . . . . . . . . . . . . . . . . . . . . . 39
- 6.4. Quality Values . . . . . . . . . . . . . . . . . . . . . . 39
- 7. Connections . . . . . . . . . . . . . . . . . . . . . . . . . 39
- 7.1. Persistent Connections . . . . . . . . . . . . . . . . . . 39
- 7.1.1. Purpose . . . . . . . . . . . . . . . . . . . . . . . 40
- 7.1.2. Overall Operation . . . . . . . . . . . . . . . . . . 40
- 7.1.3. Proxy Servers . . . . . . . . . . . . . . . . . . . . 42
- 7.1.4. Practical Considerations . . . . . . . . . . . . . . . 44
- 7.2. Message Transmission Requirements . . . . . . . . . . . . 45
- 7.2.1. Persistent Connections and Flow Control . . . . . . . 45
- 7.2.2. Monitoring Connections for Error Status Messages . . . 45
- 7.2.3. Use of the 100 (Continue) Status . . . . . . . . . . . 46
- 7.2.4. Client Behavior if Server Prematurely Closes
- Connection . . . . . . . . . . . . . . . . . . . . . . 48
- 8. Miscellaneous notes that might disappear . . . . . . . . . . . 49
-
-
-
-Fielding, et al. Expires February 5, 2011 [Page 3]
-
-Internet-Draft HTTP/1.1, Part 1 August 2010
-
-
- 8.1. Scheme aliases considered harmful . . . . . . . . . . . . 49
- 8.2. Use of HTTP for proxy communication . . . . . . . . . . . 49
- 8.3. Interception of HTTP for access control . . . . . . . . . 49
- 8.4. Use of HTTP by other protocols . . . . . . . . . . . . . . 49
- 8.5. Use of HTTP by media type specification . . . . . . . . . 49
- 9. Header Field Definitions . . . . . . . . . . . . . . . . . . . 49
- 9.1. Connection . . . . . . . . . . . . . . . . . . . . . . . . 49
- 9.2. Content-Length . . . . . . . . . . . . . . . . . . . . . . 50
- 9.3. Date . . . . . . . . . . . . . . . . . . . . . . . . . . . 51
- 9.3.1. Clockless Origin Server Operation . . . . . . . . . . 52
- 9.4. Host . . . . . . . . . . . . . . . . . . . . . . . . . . . 52
- 9.5. TE . . . . . . . . . . . . . . . . . . . . . . . . . . . . 53
- 9.6. Trailer . . . . . . . . . . . . . . . . . . . . . . . . . 54
- 9.7. Transfer-Encoding . . . . . . . . . . . . . . . . . . . . 55
- 9.8. Upgrade . . . . . . . . . . . . . . . . . . . . . . . . . 55
- 9.8.1. Upgrade Token Registry . . . . . . . . . . . . . . . . 56
- 9.9. Via . . . . . . . . . . . . . . . . . . . . . . . . . . . 57
- 10. IANA Considerations . . . . . . . . . . . . . . . . . . . . . 59
- 10.1. Header Field Registration . . . . . . . . . . . . . . . . 59
- 10.2. URI Scheme Registration . . . . . . . . . . . . . . . . . 59
- 10.3. Internet Media Type Registrations . . . . . . . . . . . . 59
- 10.3.1. Internet Media Type message/http . . . . . . . . . . . 59
- 10.3.2. Internet Media Type application/http . . . . . . . . . 61
- 10.4. Transfer Coding Registry . . . . . . . . . . . . . . . . . 62
- 10.5. Upgrade Token Registration . . . . . . . . . . . . . . . . 62
- 11. Security Considerations . . . . . . . . . . . . . . . . . . . 62
- 11.1. Personal Information . . . . . . . . . . . . . . . . . . . 63
- 11.2. Abuse of Server Log Information . . . . . . . . . . . . . 63
- 11.3. Attacks Based On File and Path Names . . . . . . . . . . . 63
- 11.4. DNS Spoofing . . . . . . . . . . . . . . . . . . . . . . . 63
- 11.5. Proxies and Caching . . . . . . . . . . . . . . . . . . . 64
- 11.6. Denial of Service Attacks on Proxies . . . . . . . . . . . 65
- 12. Acknowledgments . . . . . . . . . . . . . . . . . . . . . . . 65
- 13. References . . . . . . . . . . . . . . . . . . . . . . . . . . 66
- 13.1. Normative References . . . . . . . . . . . . . . . . . . . 66
- 13.2. Informative References . . . . . . . . . . . . . . . . . . 68
- Appendix A. Tolerant Applications . . . . . . . . . . . . . . . . 70
- Appendix B. Compatibility with Previous Versions . . . . . . . . 71
- B.1. Changes from HTTP/1.0 . . . . . . . . . . . . . . . . . . 71
- B.1.1. Changes to Simplify Multi-homed Web Servers and
- Conserve IP Addresses . . . . . . . . . . . . . . . . 72
- B.2. Compatibility with HTTP/1.0 Persistent Connections . . . . 72
- B.3. Changes from RFC 2616 . . . . . . . . . . . . . . . . . . 73
- Appendix C. Collected ABNF . . . . . . . . . . . . . . . . . . . 74
- Appendix D. Change Log (to be removed by RFC Editor before
- publication) . . . . . . . . . . . . . . . . . . . . 78
- D.1. Since RFC2616 . . . . . . . . . . . . . . . . . . . . . . 78
- D.2. Since draft-ietf-httpbis-p1-messaging-00 . . . . . . . . . 78
-
-
-
-Fielding, et al. Expires February 5, 2011 [Page 4]
-
-Internet-Draft HTTP/1.1, Part 1 August 2010
-
-
- D.3. Since draft-ietf-httpbis-p1-messaging-01 . . . . . . . . . 80
- D.4. Since draft-ietf-httpbis-p1-messaging-02 . . . . . . . . . 81
- D.5. Since draft-ietf-httpbis-p1-messaging-03 . . . . . . . . . 81
- D.6. Since draft-ietf-httpbis-p1-messaging-04 . . . . . . . . . 82
- D.7. Since draft-ietf-httpbis-p1-messaging-05 . . . . . . . . . 82
- D.8. Since draft-ietf-httpbis-p1-messaging-06 . . . . . . . . . 83
- D.9. Since draft-ietf-httpbis-p1-messaging-07 . . . . . . . . . 84
- D.10. Since draft-ietf-httpbis-p1-messaging-08 . . . . . . . . . 84
- D.11. Since draft-ietf-httpbis-p1-messaging-09 . . . . . . . . . 85
- D.12. Since draft-ietf-httpbis-p1-messaging-10 . . . . . . . . . 85
- Index . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 86
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-Fielding, et al. Expires February 5, 2011 [Page 5]
-
-Internet-Draft HTTP/1.1, Part 1 August 2010
-
-
-1. Introduction
-
- The Hypertext Transfer Protocol (HTTP) is an application-level
- request/response protocol that uses extensible semantics and MIME-
- like message payloads for flexible interaction with network-based
- hypertext information systems. HTTP relies upon the Uniform Resource
- Identifier (URI) standard [RFC3986] to indicate request targets and
- relationships between resources. Messages are passed in a format
- similar to that used by Internet mail [RFC5322] and the Multipurpose
- Internet Mail Extensions (MIME) [RFC2045] (see Appendix A of [Part3]
- for the differences between HTTP and MIME messages).
-
- HTTP is a generic interface protocol for information systems. It is
- designed to hide the details of how a service is implemented by
- presenting a uniform interface to clients that is independent of the
- types of resources provided. Likewise, servers do not need to be
- aware of each client's purpose: an HTTP request can be considered in
- isolation rather than being associated with a specific type of client
- or a predetermined sequence of application steps. The result is a
- protocol that can be used effectively in many different contexts and
- for which implementations can evolve independently over time.
-
- HTTP is also designed for use as an intermediation protocol for
- translating communication to and from non-HTTP information systems.
- HTTP proxies and gateways can provide access to alternative
- information services by translating their diverse protocols into a
- hypertext format that can be viewed and manipulated by clients in the
- same way as HTTP services.
-
- One consequence of HTTP flexibility is that the protocol cannot be
- defined in terms of what occurs behind the interface. Instead, we
- are limited to defining the syntax of communication, the intent of
- received communication, and the expected behavior of recipients. If
- the communication is considered in isolation, then successful actions
- ought to be reflected in corresponding changes to the observable
- interface provided by servers. However, since multiple clients might
- act in parallel and perhaps at cross-purposes, we cannot require that
- such changes be observable beyond the scope of a single response.
-
- This document is Part 1 of the seven-part specification of HTTP,
- defining the protocol referred to as "HTTP/1.1" and obsoleting
- [RFC2616]. Part 1 describes the architectural elements that are used
- or referred to in HTTP, defines the "http" and "https" URI schemes,
- describes overall network operation and connection management, and
- defines HTTP message framing and forwarding requirements. Our goal
- is to define all of the mechanisms necessary for HTTP message
- handling that are independent of message semantics, thereby defining
- the complete set of requirements for message parsers and message-
-
-
-
-Fielding, et al. Expires February 5, 2011 [Page 6]
-
-Internet-Draft HTTP/1.1, Part 1 August 2010
-
-
- forwarding intermediaries.
-
-1.1. Requirements
-
- 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 implementation is not compliant if it fails to satisfy one or more
- of the "MUST" or "REQUIRED" level requirements for the protocols it
- implements. An implementation that satisfies all the "MUST" or
- "REQUIRED" level and all the "SHOULD" level requirements for its
- protocols is said to be "unconditionally compliant"; one that
- satisfies all the "MUST" level requirements but not all the "SHOULD"
- level requirements for its protocols is said to be "conditionally
- compliant".
-
-1.2. Syntax Notation
-
- This specification uses the Augmented Backus-Naur Form (ABNF)
- notation of [RFC5234].
-
- The following core rules are included by reference, as defined in
- [RFC5234], Appendix B.1: ALPHA (letters), CR (carriage return), CRLF
- (CR LF), CTL (controls), DIGIT (decimal 0-9), DQUOTE (double quote),
- HEXDIG (hexadecimal 0-9/A-F/a-f), LF (line feed), OCTET (any 8-bit
- sequence of data), SP (space), VCHAR (any visible [USASCII]
- character), and WSP (whitespace).
-
- As a syntactic convention, ABNF rule names prefixed with "obs-"
- denote "obsolete" grammar rules that appear for historical reasons.
-
-1.2.1. ABNF Extension: #rule
-
- The #rule extension to the ABNF rules of [RFC5234] is used to improve
- readability.
-
- A construct "#" is defined, similar to "*", for defining comma-
- delimited lists of elements. The full form is "#element"
- indicating at least and at most elements, each separated by a
- single comma (",") and optional whitespace (OWS, Section 1.2.2).
-
- Thus,
-
- 1#element => element *( OWS "," OWS element )
-
-
-
-
-
-
-Fielding, et al. Expires February 5, 2011 [Page 7]
-
-Internet-Draft HTTP/1.1, Part 1 August 2010
-
-
- and:
-
- #element => [ 1#element ]
-
- and for n >= 1 and m > 1:
-
- #element => element *( OWS "," OWS element )
-
- For compatibility with legacy list rules, recipients SHOULD accept
- empty list elements. In other words, consumers would follow the list
- productions:
-
- #element => [ ( "," / element ) *( OWS "," [ OWS element ] ) ]
-
- 1#element => *( "," OWS ) element *( OWS "," [ OWS element ] )
-
- Note that empty elements do not contribute to the count of elements
- present, though.
-
- For example, given these ABNF productions:
-
- example-list = 1#example-list-elmt
- example-list-elmt = token ; see Section 1.2.2
-
- Then these are valid values for example-list (not including the
- double quotes, which are present for delimitation only):
-
- "foo,bar"
- " foo ,bar,"
- " foo , ,bar,charlie "
- "foo ,bar, charlie "
-
- But these values would be invalid, as at least one non-empty element
- is required:
-
- ""
- ","
- ", ,"
-
- Appendix C shows the collected ABNF, with the list rules expanded as
- explained above.
-
-1.2.2. Basic Rules
-
- HTTP/1.1 defines the sequence CR LF as the end-of-line marker for all
- protocol elements other than the message-body (see Appendix A for
- tolerant applications).
-
-
-
-
-Fielding, et al. Expires February 5, 2011 [Page 8]
-
-Internet-Draft HTTP/1.1, Part 1 August 2010
-
-
- This specification uses three rules to denote the use of linear
- whitespace: OWS (optional whitespace), RWS (required whitespace), and
- BWS ("bad" whitespace).
-
- The OWS rule is used where zero or more linear whitespace characters
- might appear. OWS SHOULD either not be produced or be produced as a
- single SP character. Multiple OWS characters that occur within
- field-content SHOULD be replaced with a single SP before interpreting
- the field value or forwarding the message downstream.
-
- RWS is used when at least one linear whitespace character is required
- to separate field tokens. RWS SHOULD be produced as a single SP
- character. Multiple RWS characters that occur within field-content
- SHOULD be replaced with a single SP before interpreting the field
- value or forwarding the message downstream.
-
- BWS is used where the grammar allows optional whitespace for
- historical reasons but senders SHOULD NOT produce it in messages.
- HTTP/1.1 recipients MUST accept such bad optional whitespace and
- remove it before interpreting the field value or forwarding the
- message downstream.
-
-
- OWS = *( [ obs-fold ] WSP )
- ; "optional" whitespace
- RWS = 1*( [ obs-fold ] WSP )
- ; "required" whitespace
- BWS = OWS
- ; "bad" whitespace
- obs-fold = CRLF
- ; see Section 3.2
-
- Many HTTP/1.1 header field values consist of words (token or quoted-
- string) separated by whitespace or special characters. These special
- characters MUST be in a quoted string to be used within a parameter
- value (as defined in Section 6.2).
-
- word = token / quoted-string
-
- token = 1*tchar
-
- tchar = "!" / "#" / "$" / "%" / "&" / "'" / "*"
- / "+" / "-" / "." / "^" / "_" / "`" / "|" / "~"
- / DIGIT / ALPHA
- ; any VCHAR, except special
-
- special = "(" / ")" / "<" / ">" / "@" / ","
- / ";" / ":" / "\" / DQUOTE / "/" / "["
-
-
-
-Fielding, et al. Expires February 5, 2011 [Page 9]
-
-Internet-Draft HTTP/1.1, Part 1 August 2010
-
-
- / "]" / "?" / "=" / "{" / "}"
-
- A string of text is parsed as a single word if it is quoted using
- double-quote marks.
-
- quoted-string = DQUOTE *( qdtext / quoted-pair ) DQUOTE
- qdtext = OWS / %x21 / %x23-5B / %x5D-7E / obs-text
- ; OWS / / obs-text
- obs-text = %x80-FF
-
- The backslash character ("\") can be used as a single-character
- quoting mechanism within quoted-string constructs:
-
- quoted-pair = "\" ( WSP / VCHAR / obs-text )
-
- Producers SHOULD NOT escape characters that do not require escaping
- (i.e., other than DQUOTE and the backslash character).
-
-1.2.3. ABNF Rules defined in other Parts of the Specification
-
- The ABNF rules below are defined in other parts:
-
- request-header =
- response-header =
-
-
- MIME-Version =
-
-
- Cache-Control =
- Pragma =
- Warning =
-
-2. HTTP-related architecture
-
- HTTP was created for the World Wide Web architecture and has evolved
- over time to support the scalability needs of a worldwide hypertext
- system. Much of that architecture is reflected in the terminology
- and syntax productions used to define HTTP.
-
-2.1. Client/Server Messaging
-
- HTTP is a stateless request/response protocol that operates by
- exchanging messages across a reliable transport or session-layer
- connection. An HTTP "client" is a program that establishes a
- connection to a server for the purpose of sending one or more HTTP
- requests. An HTTP "server" is a program that accepts connections in
- order to service HTTP requests by sending HTTP responses.
-
-
-
-Fielding, et al. Expires February 5, 2011 [Page 10]
-
-Internet-Draft HTTP/1.1, Part 1 August 2010
-
-
- Note that the terms client and server refer only to the roles that
- these programs perform for a particular connection. The same program
- might act as a client on some connections and a server on others. We
- use the term "user agent" to refer to the program that initiates a
- request, such as a WWW browser, editor, or spider (web-traversing
- robot), and the term "origin server" to refer to the program that can
- originate authoritative responses to a request. For general
- requirements, we use the term "sender" to refer to whichever
- component sent a given message and the term "recipient" to refer to
- any component that receives the message.
-
- Most HTTP communication consists of a retrieval request (GET) for a
- representation of some resource identified by a URI. In the simplest
- case, this might be accomplished via a single bidirectional
- connection (===) between the user agent (UA) and the origin server
- (O).
-
- request >
- UA ======================================= O
- < response
-
- A client sends an HTTP request to the server in the form of a request
- message (Section 4), beginning with a method, URI, and protocol
- version, followed by MIME-like header fields containing request
- modifiers, client information, and payload metadata, an empty line to
- indicate the end of the header section, and finally the payload body
- (if any).
-
- A server responds to the client's request by sending an HTTP response
- message (Section 5), beginning with a status line that includes the
- protocol version, a success or error code, and textual reason phrase,
- followed by MIME-like header fields containing server information,
- resource metadata, and payload metadata, an empty line to indicate
- the end of the header section, and finally the payload body (if any).
-
- The following example illustrates a typical message exchange for a
- GET request on the URI "http://www.example.com/hello.txt":
-
- client request:
-
- GET /hello.txt HTTP/1.1
- User-Agent: curl/7.16.3 libcurl/7.16.3 OpenSSL/0.9.7l zlib/1.2.3
- Host: www.example.com
- Accept: */*
-
-
-
-
-
-
-
-Fielding, et al. Expires February 5, 2011 [Page 11]
-
-Internet-Draft HTTP/1.1, Part 1 August 2010
-
-
- server response:
-
- HTTP/1.1 200 OK
- Date: Mon, 27 Jul 2009 12:28:53 GMT
- Server: Apache
- Last-Modified: Wed, 22 Jul 2009 19:15:56 GMT
- ETag: "34aa387-d-1568eb00"
- Accept-Ranges: bytes
- Content-Length: 14
- Vary: Accept-Encoding
- Content-Type: text/plain
-
- Hello World!
-
-2.2. Intermediaries
-
- A more complicated situation occurs when one or more intermediaries
- are present in the request/response chain. There are three common
- forms of intermediary: proxy, gateway, and tunnel. In some cases, a
- single intermediary might act as an origin server, proxy, gateway, or
- tunnel, switching behavior based on the nature of each request.
-
- > > > >
- UA =========== A =========== B =========== C =========== O
- < < < <
-
- The figure above shows three intermediaries (A, B, and C) between the
- user agent and origin server. A request or response message that
- travels the whole chain will pass through four separate connections.
- Some HTTP communication options might apply only to the connection
- with the nearest, non-tunnel neighbor, only to the end-points of the
- chain, or to all connections along the chain. Although the diagram
- is linear, each participant might be engaged in multiple,
- simultaneous communications. For example, B might be receiving
- requests from many clients other than A, and/or forwarding requests
- to servers other than C, at the same time that it is handling A's
- request.
-
- We use the terms "upstream" and "downstream" to describe various
- requirements in relation to the directional flow of a message: all
- messages flow from upstream to downstream. Likewise, we use the
- terms "inbound" and "outbound" to refer to directions in relation to
- the request path: "inbound" means toward the origin server and
- "outbound" means toward the user agent.
-
- A "proxy" is a message forwarding agent that is selected by the
- client, usually via local configuration rules, to receive requests
- for some type(s) of absolute URI and attempt to satisfy those
-
-
-
-Fielding, et al. Expires February 5, 2011 [Page 12]
-
-Internet-Draft HTTP/1.1, Part 1 August 2010
-
-
- requests via translation through the HTTP interface. Some
- translations are minimal, such as for proxy requests for "http" URIs,
- whereas other requests might require translation to and from entirely
- different application-layer protocols. Proxies are often used to
- group an organization's HTTP requests through a common intermediary
- for the sake of security, annotation services, or shared caching.
-
- A "gateway" (a.k.a., "reverse proxy") is a receiving agent that acts
- as a layer above some other server(s) and translates the received
- requests to the underlying server's protocol. Gateways are often
- used for load balancing or partitioning HTTP services across multiple
- machines. Unlike a proxy, a gateway receives requests as if it were
- the origin server for the target resource; the requesting client will
- not be aware that it is communicating with a gateway. A gateway
- communicates with the client as if the gateway is the origin server
- and thus is subject to all of the requirements on origin servers for
- that connection. A gateway communicates with inbound servers using
- any protocol it desires, including private extensions to HTTP that
- are outside the scope of this specification.
-
- A "tunnel" acts as a blind relay between two connections without
- changing the messages. Once active, a tunnel is not considered a
- party to the HTTP communication, though the tunnel might have been
- initiated by an HTTP request. A tunnel ceases to exist when both
- ends of the relayed connection are closed. Tunnels are used to
- extend a virtual connection through an intermediary, such as when
- transport-layer security is used to establish private communication
- through a shared firewall proxy.
-
-2.3. Caches
-
- A "cache" is a local store of previous response messages and the
- subsystem that controls its message storage, retrieval, and deletion.
- A cache stores cacheable responses in order to reduce the response
- time and network bandwidth consumption on future, equivalent
- requests. Any client or server MAY employ a cache, though a cache
- cannot be used by a server while it is acting as a tunnel.
-
- The effect of a cache is that the request/response chain is shortened
- if one of the participants along the chain has a cached response
- applicable to that request. The following illustrates the resulting
- chain if B has a cached copy of an earlier response from O (via C)
- for a request which has not been cached by UA or A.
-
- > >
- UA =========== A =========== B - - - - - - C - - - - - - O
- < <
-
-
-
-
-Fielding, et al. Expires February 5, 2011 [Page 13]
-
-Internet-Draft HTTP/1.1, Part 1 August 2010
-
-
- A response is "cacheable" if a cache is allowed to store a copy of
- the response message for use in answering subsequent requests. Even
- when a response is cacheable, there might be additional constraints
- placed by the client or by the origin server on when that cached
- response can be used for a particular request. HTTP requirements for
- cache behavior and cacheable responses are defined in Section 2 of
- [Part6].
-
- There are a wide variety of architectures and configurations of
- caches and proxies deployed across the World Wide Web and inside
- large organizations. These systems include national hierarchies of
- proxy caches to save transoceanic bandwidth, systems that broadcast
- or multicast cache entries, organizations that distribute subsets of
- cached data via optical media, and so on.
-
-2.4. Transport Independence
-
- HTTP systems are used in a wide variety of environments, from
- corporate intranets with high-bandwidth links to long-distance
- communication over low-power radio links and intermittent
- connectivity.
-
- HTTP communication usually takes place over TCP/IP connections. The
- default port is TCP 80
- (), but other ports can
- be used. This does not preclude HTTP from being implemented on top
- of any other protocol on the Internet, or on other networks. HTTP
- only presumes a reliable transport; any protocol that provides such
- guarantees can be used; the mapping of the HTTP/1.1 request and
- response structures onto the transport data units of the protocol in
- question is outside the scope of this specification.
-
- In HTTP/1.0, most implementations used a new connection for each
- request/response exchange. In HTTP/1.1, a connection might be used
- for one or more request/response exchanges, although connections
- might be closed for a variety of reasons (see Section 7.1).
-
-2.5. HTTP Version
-
- HTTP uses a "." numbering scheme to indicate versions
- of the protocol. The protocol versioning policy is intended to allow
- the sender to indicate the format of a message and its capacity for
- understanding further HTTP communication, rather than the features
- obtained via that communication. No change is made to the version
- number for the addition of message components which do not affect
- communication behavior or which only add to extensible field values.
- The number is incremented when the changes made to the
- protocol add features which do not change the general message parsing
-
-
-
-Fielding, et al. Expires February 5, 2011 [Page 14]
-
-Internet-Draft HTTP/1.1, Part 1 August 2010
-
-
- algorithm, but which might add to the message semantics and imply
- additional capabilities of the sender. The number is
- incremented when the format of a message within the protocol is
- changed. See [RFC2145] for a fuller explanation.
-
- The version of an HTTP message is indicated by an HTTP-Version field
- in the first line of the message. HTTP-Version is case-sensitive.
-
- HTTP-Version = HTTP-Prot-Name "/" 1*DIGIT "." 1*DIGIT
- HTTP-Prot-Name = %x48.54.54.50 ; "HTTP", case-sensitive
-
- Note that the major and minor numbers MUST be treated as separate
- integers and that each MAY be incremented higher than a single digit.
- Thus, HTTP/2.4 is a lower version than HTTP/2.13, which in turn is
- lower than HTTP/12.3. Leading zeros MUST be ignored by recipients
- and MUST NOT be sent.
-
- An application that sends a request or response message that includes
- HTTP-Version of "HTTP/1.1" MUST be at least conditionally compliant
- with this specification. Applications that are at least
- conditionally compliant with this specification SHOULD use an HTTP-
- Version of "HTTP/1.1" in their messages, and MUST do so for any
- message that is not compatible with HTTP/1.0. For more details on
- when to send specific HTTP-Version values, see [RFC2145].
-
- The HTTP version of an application is the highest HTTP version for
- which the application is at least conditionally compliant.
-
- Proxy and gateway applications need to be careful when forwarding
- messages in protocol versions different from that of the application.
- Since the protocol version indicates the protocol capability of the
- sender, a proxy/gateway MUST NOT send a message with a version
- indicator which is greater than its actual version. If a higher
- version request is received, the proxy/gateway MUST either downgrade
- the request version, or respond with an error, or switch to tunnel
- behavior.
-
- Due to interoperability problems with HTTP/1.0 proxies discovered
- since the publication of [RFC2068], caching proxies MUST, gateways
- MAY, and tunnels MUST NOT upgrade the request to the highest version
- they support. The proxy/gateway's response to that request MUST be
- in the same major version as the request.
-
- Note: Converting between versions of HTTP might involve
- modification of header fields required or forbidden by the
- versions involved.
-
-
-
-
-
-Fielding, et al. Expires February 5, 2011 [Page 15]
-
-Internet-Draft HTTP/1.1, Part 1 August 2010
-
-
-2.6. Uniform Resource Identifiers
-
- Uniform Resource Identifiers (URIs) [RFC3986] are used throughout
- HTTP as the means for identifying resources. URI references are used
- to target requests, indicate redirects, and define relationships.
- HTTP does not limit what a resource might be; it merely defines an
- interface that can be used to interact with a resource via HTTP.
- More information on the scope of URIs and resources can be found in
- [RFC3986].
-
- This specification adopts the definitions of "URI-reference",
- "absolute-URI", "relative-part", "port", "host", "path-abempty",
- "path-absolute", "query", and "authority" from [RFC3986]. In
- addition, we define a partial-URI rule for protocol elements that
- allow a relative URI without a fragment.
-
- URI-reference =
- absolute-URI =
- relative-part =
- authority =
- path-abempty =
- path-absolute =
- port =
- query =
- uri-host =
-
- partial-URI = relative-part [ "?" query ]
-
- Each protocol element in HTTP that allows a URI reference will
- indicate in its ABNF production whether the element allows only a URI
- in absolute form (absolute-URI), any relative reference (relative-
- ref), or some other subset of the URI-reference grammar. Unless
- otherwise indicated, URI references are parsed relative to the
- request target (the default base URI for both the request and its
- corresponding response).
-
-2.6.1. http URI scheme
-
- The "http" URI scheme is hereby defined for the purpose of minting
- identifiers according to their association with the hierarchical
- namespace governed by a potential HTTP origin server listening for
- TCP connections on a given port. The HTTP server is identified via
- the generic syntax's authority component, which includes a host
- identifier and optional TCP port, and the remainder of the URI is
- considered to be identifying data corresponding to a resource for
- which that server might provide an HTTP interface.
-
- http-URI = "http:" "//" authority path-abempty [ "?" query ]
-
-
-
-Fielding, et al. Expires February 5, 2011 [Page 16]
-
-Internet-Draft HTTP/1.1, Part 1 August 2010
-
-
- The host identifier within an authority component is defined in
- [RFC3986], Section 3.2.2. If host is provided as an IP literal or
- IPv4 address, then the HTTP server is any listener on the indicated
- TCP port at that IP address. If host is a registered name, then that
- name is considered an indirect identifier and the recipient might use
- a name resolution service, such as DNS, to find the address of a
- listener for that host. The host MUST NOT be empty; if an "http" URI
- is received with an empty host, then it MUST be rejected as invalid.
- If the port subcomponent is empty or not given, then TCP port 80 is
- assumed (the default reserved port for WWW services).
-
- Regardless of the form of host identifier, access to that host is not
- implied by the mere presence of its name or address. The host might
- or might not exist and, even when it does exist, might or might not
- be running an HTTP server or listening to the indicated port. The
- "http" URI scheme makes use of the delegated nature of Internet names
- and addresses to establish a naming authority (whatever entity has
- the ability to place an HTTP server at that Internet name or address)
- and allows that authority to determine which names are valid and how
- they might be used.
-
- When an "http" URI is used within a context that calls for access to
- the indicated resource, a client MAY attempt access by resolving the
- host to an IP address, establishing a TCP connection to that address
- on the indicated port, and sending an HTTP request message to the
- server containing the URI's identifying data as described in
- Section 4. If the server responds to that request with a non-interim
- HTTP response message, as described in Section 5, then that response
- is considered an authoritative answer to the client's request.
-
- Although HTTP is independent of the transport protocol, the "http"
- scheme is specific to TCP-based services because the name delegation
- process depends on TCP for establishing authority. An HTTP service
- based on some other underlying connection protocol would presumably
- be identified using a different URI scheme, just as the "https"
- scheme (below) is used for servers that require an SSL/TLS transport
- layer on a connection. Other protocols might also be used to provide
- access to "http" identified resources --- it is only the
- authoritative interface used for mapping the namespace that is
- specific to TCP.
-
- The URI generic syntax for authority also includes a deprecated
- userinfo subcomponent ([RFC3986], Section 3.2.1) for including user
- authentication information in the URI. The userinfo subcomponent
- (and its "@" delimiter) MUST NOT be used in an "http" URI. URI
- reference recipients SHOULD parse for the existence of userinfo and
- treat its presence as an error, likely indicating that the deprecated
- subcomponent is being used to obscure the authority for the sake of
-
-
-
-Fielding, et al. Expires February 5, 2011 [Page 17]
-
-Internet-Draft HTTP/1.1, Part 1 August 2010
-
-
- phishing attacks.
-
-2.6.2. https URI scheme
-
- The "https" URI scheme is hereby defined for the purpose of minting
- identifiers according to their association with the hierarchical
- namespace governed by a potential HTTP origin server listening for
- SSL/TLS-secured connections on a given TCP port.
-
- All of the requirements listed above for the "http" scheme are also
- requirements for the "https" scheme, except that a default TCP port
- of 443 is assumed if the port subcomponent is empty or not given, and
- the TCP connection MUST be secured for privacy through the use of
- strong encryption prior to sending the first HTTP request.
-
- https-URI = "https:" "//" authority path-abempty [ "?" query ]
-
- Unlike the "http" scheme, responses to "https" identified requests
- are never "public" and thus are ineligible for shared caching. Their
- default is "private" and might be further constrained via use of the
- Cache-Control header field.
-
- Resources made available via the "https" scheme have no shared
- identity with the "http" scheme even if their resource identifiers
- only differ by the single "s" in the scheme name. They are different
- services governed by different authorities. However, some extensions
- to HTTP that apply to entire host domains, such as the Cookie
- protocol, do allow one service to effect communication with the other
- services based on host domain matching.
-
- The process for authoritative access to an "https" identified
- resource is defined in [RFC2818].
-
-2.6.3. http and https URI Normalization and Comparison
-
- Since the "http" and "https" schemes conform to the URI generic
- syntax, such URIs are normalized and compared according to the
- algorithm defined in [RFC3986], Section 6, using the defaults
- described above for each scheme.
-
- If the port is equal to the default port for a scheme, the normal
- form is to elide the port subcomponent. Likewise, an empty path
- component is equivalent to an absolute path of "/", so the normal
- form is to provide a path of "/" instead. The scheme and host are
- case-insensitive and normally provided in lowercase; all other
- components are compared in a case-sensitive manner. Characters other
- than those in the "reserved" set are equivalent to their percent-
- encoded octets (see [RFC3986], Section 2.1): the normal form is to
-
-
-
-Fielding, et al. Expires February 5, 2011 [Page 18]
-
-Internet-Draft HTTP/1.1, Part 1 August 2010
-
-
- not encode them.
-
- For example, the following three URIs are equivalent:
-
- http://example.com:80/~smith/home.html
- http://EXAMPLE.com/%7Esmith/home.html
- http://EXAMPLE.com:/%7esmith/home.html
-
- [[TODO-not-here: This paragraph does not belong here. --roy]] If
- path-abempty is the empty string (i.e., there is no slash "/" path
- separator following the authority), then the "http" URI MUST be given
- as "/" when used as a request-target (Section 4.1.2). If a proxy
- receives a host name which is not a fully qualified domain name, it
- MAY add its domain to the host name it received. If a proxy receives
- a fully qualified domain name, the proxy MUST NOT change the host
- name.
-
-3. HTTP Message
-
- All HTTP/1.1 messages consist of a start-line followed by a sequence
- of characters in a format similar to the Internet Message Format
- [RFC5322]: zero or more header fields (collectively referred to as
- the "headers" or the "header section"), an empty line indicating the
- end of the header section, and an optional message-body.
-
- An HTTP message can either be a request from client to server or a
- response from server to client. Syntactically, the two types of
- message differ only in the start-line, which is either a Request-Line
- (for requests) or a Status-Line (for responses), and in the algorithm
- for determining the length of the message-body (Section 3.3). In
- theory, a client could receive requests and a server could receive
- responses, distinguishing them by their different start-line formats,
- but in practice servers are implemented to only expect a request (a
- response is interpreted as an unknown or invalid request method) and
- clients are implemented to only expect a response.
-
- HTTP-message = start-line
- *( header-field CRLF )
- CRLF
- [ message-body ]
- start-line = Request-Line / Status-Line
-
- Whitespace (WSP) MUST NOT be sent between the start-line and the
- first header field. The presence of whitespace might be an attempt
- to trick a noncompliant implementation of HTTP into ignoring that
- field or processing the next line as a new request, either of which
- might result in security issues when implementations within the
- request chain interpret the same message differently. HTTP/1.1
-
-
-
-Fielding, et al. Expires February 5, 2011 [Page 19]
-
-Internet-Draft HTTP/1.1, Part 1 August 2010
-
-
- servers MUST reject such a message with a 400 (Bad Request) response.
-
-3.1. Message Parsing Robustness
-
- In the interest of robustness, servers SHOULD ignore at least one
- empty line received where a Request-Line is expected. In other
- words, if the server is reading the protocol stream at the beginning
- of a message and receives a CRLF first, it SHOULD ignore the CRLF.
-
- Some old HTTP/1.0 client implementations generate an extra CRLF after
- a POST request as a lame workaround for some early server
- applications that failed to read message-body content that was not
- terminated by a line-ending. An HTTP/1.1 client MUST NOT preface or
- follow a request with an extra CRLF. If terminating the request
- message-body with a line-ending is desired, then the client MUST
- include the terminating CRLF octets as part of the message-body
- length.
-
- The normal procedure for parsing an HTTP message is to read the
- start-line into a structure, read each header field into a hash table
- by field name until the empty line, and then use the parsed data to
- determine if a message-body is expected. If a message-body has been
- indicated, then it is read as a stream until an amount of octets
- equal to the message-body length is read or the connection is closed.
- Care must be taken to parse an HTTP message as a sequence of octets
- in an encoding that is a superset of US-ASCII. Attempting to parse
- HTTP as a stream of Unicode characters in a character encoding like
- UTF-16 might introduce security flaws due to the differing ways that
- such parsers interpret invalid characters.
-
- HTTP allows the set of defined header fields to be extended without
- changing the protocol version (see Section 10.1). However, such
- fields might not be recognized by a downstream recipient and might be
- stripped by non-transparent intermediaries. Unrecognized header
- fields MUST be forwarded by transparent proxies and SHOULD be ignored
- by a recipient.
-
-3.2. Header Fields
-
- Each HTTP header field consists of a case-insensitive field name
- followed by a colon (":"), optional whitespace, and the field value.
-
- header-field = field-name ":" OWS [ field-value ] OWS
- field-name = token
- field-value = *( field-content / OWS )
- field-content = *( WSP / VCHAR / obs-text )
-
- No whitespace is allowed between the header field name and colon.
-
-
-
-Fielding, et al. Expires February 5, 2011 [Page 20]
-
-Internet-Draft HTTP/1.1, Part 1 August 2010
-
-
- For security reasons, any request message received containing such
- whitespace MUST be rejected with a response code of 400 (Bad
- Request). A proxy MUST remove any such whitespace from a response
- message before forwarding the message downstream.
-
- A field value MAY be preceded by optional whitespace (OWS); a single
- SP is preferred. The field value does not include any leading or
- trailing white space: OWS occurring before the first non-whitespace
- character of the field value or after the last non-whitespace
- character of the field value is ignored and SHOULD be removed before
- further processing (as this does not change the meaning of the header
- field).
-
- The order in which header fields with differing field names are
- received is not significant. However, it is "good practice" to send
- header fields that contain control data first, such as Host on
- requests and Date on responses, so that implementations can decide
- when not to handle a message as early as possible. A server MUST
- wait until the entire header section is received before interpreting
- a request message, since later header fields might include
- conditionals, authentication credentials, or deliberately misleading
- duplicate header fields that would impact request processing.
-
- Multiple header fields with the same field name MUST NOT be sent in a
- message unless the entire field value for that header field is
- defined as a comma-separated list [i.e., #(values)]. Multiple header
- fields with the same field name can be combined into one "field-name:
- field-value" pair, without changing the semantics of the message, by
- appending each subsequent field value to the combined field value in
- order, separated by a comma. The order in which header fields with
- the same field name are received is therefore significant to the
- interpretation of the combined field value; a proxy MUST NOT change
- the order of these field values when forwarding a message.
-
- Note: The "Set-Cookie" header as implemented in practice (as
- opposed to how it is specified in [RFC2109]) can occur multiple
- times, but does not use the list syntax, and thus cannot be
- combined into a single line. (See Appendix A.2.3 of [Kri2001] for
- details.) Also note that the Set-Cookie2 header specified in
- [RFC2965] does not share this problem.
-
- Historically, HTTP header field values could be extended over
- multiple lines by preceding each extra line with at least one space
- or horizontal tab character (line folding). This specification
- deprecates such line folding except within the message/http media
- type (Section 10.3.1). HTTP/1.1 senders MUST NOT produce messages
- that include line folding (i.e., that contain any field-content that
- matches the obs-fold rule) unless the message is intended for
-
-
-
-Fielding, et al. Expires February 5, 2011 [Page 21]
-
-Internet-Draft HTTP/1.1, Part 1 August 2010
-
-
- packaging within the message/http media type. HTTP/1.1 recipients
- SHOULD accept line folding and replace any embedded obs-fold
- whitespace with a single SP prior to interpreting the field value or
- forwarding the message downstream.
-
- Historically, HTTP has allowed field content with text in the ISO-
- 8859-1 [ISO-8859-1] character encoding and supported other character
- sets only through use of [RFC2047] encoding. In practice, most HTTP
- header field values use only a subset of the US-ASCII character
- encoding [USASCII]. Newly defined header fields SHOULD limit their
- field values to US-ASCII characters. Recipients SHOULD treat other
- (obs-text) octets in field content as opaque data.
-
- Comments can be included in some HTTP header fields by surrounding
- the comment text with parentheses. Comments are only allowed in
- fields containing "comment" as part of their field value definition.
-
- comment = "(" *( ctext / quoted-cpair / comment ) ")"
- ctext = OWS / %x21-27 / %x2A-5B / %x5D-7E / obs-text
- ; OWS / / obs-text
-
- The backslash character ("\") can be used as a single-character
- quoting mechanism within comment constructs:
-
- quoted-cpair = "\" ( WSP / VCHAR / obs-text )
-
- Producers SHOULD NOT escape characters that do not require escaping
- (i.e., other than the backslash character "\" and the parentheses "("
- and ")").
-
-3.3. Message Body
-
- The message-body (if any) of an HTTP message is used to carry the
- payload body associated with the request or response.
-
- message-body = *OCTET
-
- The message-body differs from the payload body only when a transfer-
- coding has been applied, as indicated by the Transfer-Encoding header
- field (Section 9.7). When one or more transfer-codings are applied
- to a payload in order to form the message-body, the Transfer-Encoding
- header field MUST contain the list of transfer-codings applied.
- Transfer-Encoding is a property of the message, not of the payload,
- and thus MAY be added or removed by any implementation along the
- request/response chain under the constraints found in Section 6.2.
-
- The rules for when a message-body is allowed in a message differ for
- requests and responses.
-
-
-
-Fielding, et al. Expires February 5, 2011 [Page 22]
-
-Internet-Draft HTTP/1.1, Part 1 August 2010
-
-
- The presence of a message-body in a request is signaled by the
- inclusion of a Content-Length or Transfer-Encoding header field in
- the request's header fields, even if the request method does not
- define any use for a message-body. This allows the request message
- framing algorithm to be independent of method semantics.
-
- For response messages, whether or not a message-body is included with
- a message is dependent on both the request method and the response
- status code (Section 5.1.1). Responses to the HEAD request method
- never include a message-body because the associated response header
- fields (e.g., Transfer-Encoding, Content-Length, etc.) only indicate
- what their values would have been if the method had been GET. All
- 1xx (Informational), 204 (No Content), and 304 (Not Modified)
- responses MUST NOT include a message-body. All other responses do
- include a message-body, although the body MAY be of zero length.
-
- The length of the message-body is determined by one of the following
- (in order of precedence):
-
- 1. Any response to a HEAD request and any response with a status
- code of 100-199, 204, or 304 is always terminated by the first
- empty line after the header fields, regardless of the header
- fields present in the message, and thus cannot contain a message-
- body.
-
- 2. If a Transfer-Encoding header field (Section 9.7) is present and
- the "chunked" transfer-coding (Section 6.2) is the final
- encoding, the message-body length is determined by reading and
- decoding the chunked data until the transfer-coding indicates the
- data is complete.
-
- If a Transfer-Encoding header field is present in a response and
- the "chunked" transfer-coding is not the final encoding, the
- message-body length is determined by reading the connection until
- it is closed by the server. If a Transfer-Encoding header field
- is present in a request and the "chunked" transfer-coding is not
- the final encoding, the message-body length cannot be determined
- reliably; the server MUST respond with the 400 (Bad Request)
- status code and then close the connection.
-
- If a message is received with both a Transfer-Encoding header
- field and a Content-Length header field, the Transfer-Encoding
- overrides the Content-Length. Such a message might indicate an
- attempt to perform request or response smuggling (bypass of
- security-related checks on message routing or content) and thus
- ought to be handled as an error. The provided Content-Length
- MUST be removed, prior to forwarding the message downstream, or
- replaced with the real message-body length after the transfer-
-
-
-
-Fielding, et al. Expires February 5, 2011 [Page 23]
-
-Internet-Draft HTTP/1.1, Part 1 August 2010
-
-
- coding is decoded.
-
- 3. If a message is received without Transfer-Encoding and with
- either multiple Content-Length header fields or a single Content-
- Length header field with an invalid value, then the message
- framing is invalid and MUST be treated as an error to prevent
- request or response smuggling. If this is a request message, the
- server MUST respond with a 400 (Bad Request) status code and then
- close the connection. If this is a response message received by
- a proxy or gateway, the proxy or gateway MUST discard the
- received response, send a 502 (Bad Gateway) status code as its
- downstream response, and then close the connection. If this is a
- response message received by a user-agent, the message-body
- length is determined by reading the connection until it is
- closed; an error SHOULD be indicated to the user.
-
- 4. If a valid Content-Length header field (Section 9.2) is present
- without Transfer-Encoding, its decimal value defines the message-
- body length in octets. If the actual number of octets sent in
- the message is less than the indicated Content-Length, the
- recipient MUST consider the message to be incomplete and treat
- the connection as no longer usable. If the actual number of
- octets sent in the message is more than the indicated Content-
- Length, the recipient MUST only process the message-body up to
- the field value's number of octets; the remainder of the message
- MUST either be discarded or treated as the next message in a
- pipeline. For the sake of robustness, a user-agent MAY attempt
- to detect and correct such an error in message framing if it is
- parsing the response to the last request on on a connection and
- the connection has been closed by the server.
-
- 5. If this is a request message and none of the above are true, then
- the message-body length is zero (no message-body is present).
-
- 6. Otherwise, this is a response message without a declared message-
- body length, so the message-body length is determined by the
- number of octets received prior to the server closing the
- connection.
-
- Since there is no way to distinguish a successfully completed, close-
- delimited message from a partially-received message interrupted by
- network failure, implementations SHOULD use encoding or length-
- delimited messages whenever possible. The close-delimiting feature
- exists primarily for backwards compatibility with HTTP/1.0.
-
- A server MAY reject a request that contains a message-body but not a
- Content-Length by responding with 411 (Length Required).
-
-
-
-
-Fielding, et al. Expires February 5, 2011 [Page 24]
-
-Internet-Draft HTTP/1.1, Part 1 August 2010
-
-
- Unless a transfer-coding other than "chunked" has been applied, a
- client that sends a request containing a message-body SHOULD use a
- valid Content-Length header field if the message-body length is known
- in advance, rather than the "chunked" encoding, since some existing
- services respond to "chunked" with a 411 (Length Required) status
- code even though they understand the chunked encoding. This is
- typically because such services are implemented via a gateway that
- requires a content-length in advance of being called and the server
- is unable or unwilling to buffer the entire request before
- processing.
-
- A client that sends a request containing a message-body MUST include
- a valid Content-Length header field if it does not know the server
- will handle HTTP/1.1 (or later) requests; such knowledge can be in
- the form of specific user configuration or by remembering the version
- of a prior received response.
-
- Request messages that are prematurely terminated, possibly due to a
- cancelled connection or a server-imposed time-out exception, MUST
- result in closure of the connection; sending an HTTP/1.1 error
- response prior to closing the connection is OPTIONAL. Response
- messages that are prematurely terminated, usually by closure of the
- connection prior to receiving the expected number of octets or by
- failure to decode a transfer-encoded message-body, MUST be recorded
- as incomplete. A user agent MUST NOT render an incomplete response
- message-body as if it were complete (i.e., some indication must be
- given to the user that an error occurred). Cache requirements for
- incomplete responses are defined in Section 2.1.1 of [Part6].
-
- A server MUST read the entire request message-body or close the
- connection after sending its response, since otherwise the remaining
- data on a persistent connection would be misinterpreted as the next
- request. Likewise, a client MUST read the entire response message-
- body if it intends to reuse the same connection for a subsequent
- request. Pipelining multiple requests on a connection is described
- in Section 7.1.2.2.
-
-3.4. General Header Fields
-
- There are a few header fields which have general applicability for
- both request and response messages, but which do not apply to the
- payload being transferred. These header fields apply only to the
- message being transmitted.
-
-
-
-
-
-
-
-
-Fielding, et al. Expires February 5, 2011 [Page 25]
-
-Internet-Draft HTTP/1.1, Part 1 August 2010
-
-
- general-header = Cache-Control ; [Part6], Section 3.2
- / Connection ; Section 9.1
- / Date ; Section 9.3
- / Pragma ; [Part6], Section 3.4
- / Trailer ; Section 9.6
- / Transfer-Encoding ; Section 9.7
- / Upgrade ; Section 9.8
- / Via ; Section 9.9
- / Warning ; [Part6], Section 3.6
- / MIME-Version ; [Part3], Appendix A.1
-
- General-header field names can be extended reliably only in
- combination with a change in the protocol version. However, new or
- experimental header fields might be given the semantics of general
- header fields if all parties in the communication recognize them to
- be general-header fields.
-
-4. Request
-
- A request message from a client to a server includes, within the
- first line of that message, the method to be applied to the resource,
- the identifier of the resource, and the protocol version in use.
-
- Request = Request-Line ; Section 4.1
- *( header-field CRLF ) ; Section 3.2
- CRLF
- [ message-body ] ; Section 3.3
-
-4.1. Request-Line
-
- The Request-Line begins with a method token, followed by the request-
- target and the protocol version, and ending with CRLF. The elements
- are separated by SP characters. No CR or LF is allowed except in the
- final CRLF sequence.
-
- Request-Line = Method SP request-target SP HTTP-Version CRLF
-
-4.1.1. Method
-
- The Method token indicates the method to be performed on the resource
- identified by the request-target. The method is case-sensitive.
-
- Method = token
-
-
-
-
-
-
-
-
-Fielding, et al. Expires February 5, 2011 [Page 26]
-
-Internet-Draft HTTP/1.1, Part 1 August 2010
-
-
-4.1.2. request-target
-
- The request-target identifies the resource upon which to apply the
- request.
-
- request-target = "*"
- / absolute-URI
- / ( path-absolute [ "?" query ] )
- / authority
-
- The four options for request-target are dependent on the nature of
- the request.
-
- The asterisk "*" means that the request does not apply to a
- particular resource, but to the server itself, and is only allowed
- when the method used does not necessarily apply to a resource. One
- example would be
-
- OPTIONS * HTTP/1.1
-
- The absolute-URI form is REQUIRED when the request is being made to a
- proxy. The proxy is requested to forward the request or service it
- from a valid cache, and return the response. Note that the proxy MAY
- forward the request on to another proxy or directly to the server
- specified by the absolute-URI. In order to avoid request loops, a
- proxy MUST be able to recognize all of its server names, including
- any aliases, local variations, and the numeric IP address. An
- example Request-Line would be:
-
- GET http://www.example.org/pub/WWW/TheProject.html HTTP/1.1
-
- To allow for transition to absolute-URIs in all requests in future
- versions of HTTP, all HTTP/1.1 servers MUST accept the absolute-URI
- form in requests, even though HTTP/1.1 clients will only generate
- them in requests to proxies.
-
- The authority form is only used by the CONNECT method (Section 7.9 of
- [Part2]).
-
- The most common form of request-target is that used to identify a
- resource on an origin server or gateway. In this case the absolute
- path of the URI MUST be transmitted (see Section 2.6.1, path-
- absolute) as the request-target, and the network location of the URI
- (authority) MUST be transmitted in a Host header field. For example,
- a client wishing to retrieve the resource above directly from the
- origin server would create a TCP connection to port 80 of the host
- "www.example.org" and send the lines:
-
-
-
-
-Fielding, et al. Expires February 5, 2011 [Page 27]
-
-Internet-Draft HTTP/1.1, Part 1 August 2010
-
-
- GET /pub/WWW/TheProject.html HTTP/1.1
- Host: www.example.org
-
- followed by the remainder of the Request. Note that the absolute
- path cannot be empty; if none is present in the original URI, it MUST
- be given as "/" (the server root).
-
- If a proxy receives a request without any path in the request-target
- and the method specified is capable of supporting the asterisk form
- of request-target, then the last proxy on the request chain MUST
- forward the request with "*" as the final request-target.
-
- For example, the request
-
- OPTIONS http://www.example.org:8001 HTTP/1.1
-
- would be forwarded by the proxy as
-
- OPTIONS * HTTP/1.1
- Host: www.example.org:8001
-
- after connecting to port 8001 of host "www.example.org".
-
- The request-target is transmitted in the format specified in
- Section 2.6.1. If the request-target is percent-encoded ([RFC3986],
- Section 2.1), the origin server MUST decode the request-target in
- order to properly interpret the request. Servers SHOULD respond to
- invalid request-targets with an appropriate status code.
-
- A transparent proxy MUST NOT rewrite the "path-absolute" part of the
- received request-target when forwarding it to the next inbound
- server, except as noted above to replace a null path-absolute with
- "/" or "*".
-
- Note: The "no rewrite" rule prevents the proxy from changing the
- meaning of the request when the origin server is improperly using
- a non-reserved URI character for a reserved purpose. Implementors
- need to be aware that some pre-HTTP/1.1 proxies have been known to
- rewrite the request-target.
-
- HTTP does not place a pre-defined limit on the length of a request-
- target. A server MUST be prepared to receive URIs of unbounded
- length and respond with the 414 (URI Too Long) status code if the
- received request-target would be longer than the server wishes to
- handle (see Section 8.4.15 of [Part2]).
-
- Various ad-hoc limitations on request-target length are found in
- practice. It is RECOMMENDED that all HTTP senders and recipients
-
-
-
-Fielding, et al. Expires February 5, 2011 [Page 28]
-
-Internet-Draft HTTP/1.1, Part 1 August 2010
-
-
- support request-target lengths of 8000 or more octets.
-
- Note: Fragments ([RFC3986], Section 3.5) are not part of the
- request-target and thus will not be transmitted in an HTTP
- request.
-
-4.2. The Resource Identified by a Request
-
- The exact resource identified by an Internet request is determined by
- examining both the request-target and the Host header field.
-
- An origin server that does not allow resources to differ by the
- requested host MAY ignore the Host header field value when
- determining the resource identified by an HTTP/1.1 request. (But see
- Appendix B.1.1 for other requirements on Host support in HTTP/1.1.)
-
- An origin server that does differentiate resources based on the host
- requested (sometimes referred to as virtual hosts or vanity host
- names) MUST use the following rules for determining the requested
- resource on an HTTP/1.1 request:
-
- 1. If request-target is an absolute-URI, the host is part of the
- request-target. Any Host header field value in the request MUST
- be ignored.
-
- 2. If the request-target is not an absolute-URI, and the request
- includes a Host header field, the host is determined by the Host
- header field value.
-
- 3. If the host as determined by rule 1 or 2 is not a valid host on
- the server, the response MUST be a 400 (Bad Request) error
- message.
-
- Recipients of an HTTP/1.0 request that lacks a Host header field MAY
- attempt to use heuristics (e.g., examination of the URI path for
- something unique to a particular host) in order to determine what
- exact resource is being requested.
-
-4.3. Effective Request URI
-
- HTTP requests often do not carry the absolute URI ([RFC3986], Section
- 4.3) for the target resource; instead, the URI needs to be inferred
- from the request-target, Host header field, and connection context.
- The result of this process is called the "effective request URI".
- The "target resource" is the resource identified by the effective
- request URI.
-
- If the request-target is an absolute-URI, then the effective request
-
-
-
-Fielding, et al. Expires February 5, 2011 [Page 29]
-
-Internet-Draft HTTP/1.1, Part 1 August 2010
-
-
- URI is the request-target.
-
- If the request-target uses the path-absolute (plus optional query)
- syntax or if it is just the asterisk "*", then the effective request
- URI is constructed by concatenating
-
- o the scheme name: "http" if the request was received over an
- insecure TCP connection, or "https" when received over a SSL/
- TLS-secured TCP connection,
-
- o the character sequence "://",
-
- o the authority component, as specified in the Host header
- (Section 9.4) and determined by the rules in Section 4.2,
- [[effrequri-nohost: Do we need to include the handling of missing
- hosts in HTTP/1.0 messages, as described in Section 4.2? -- See
- --jre]] and
-
- o the request-target obtained from the Request-Line, unless the
- request-target is just the asterisk "*".
-
- Otherwise, when request-target uses the authority form, the effective
- Request URI is undefined.
-
- Example 1: the effective request URI for the message
-
- GET /pub/WWW/TheProject.html HTTP/1.1
- Host: www.example.org:8080
-
- (received over an insecure TCP connection) is "http", plus "://",
- plus the authority component "www.example.org:8080", plus the
- request-target "/pub/WWW/TheProject.html", thus
- "http://www.example.org:8080/pub/WWW/TheProject.html".
-
- Example 2: the effective request URI for the message
-
- GET * HTTP/1.1
- Host: www.example.org
-
- (received over an SSL/TLS secured TCP connection) is "https", plus
- "://", plus the authority component "www.example.org", thus
- "https://www.example.org".
-
- Effective request URIs are compared using the rules described in
- Section 2.6.3, except that empty path components MUST NOT be treated
- as equivalent to an absolute path of "/".
-
-
-
-
-
-Fielding, et al. Expires February 5, 2011 [Page 30]
-
-Internet-Draft HTTP/1.1, Part 1 August 2010
-
-
-5. Response
-
- After receiving and interpreting a request message, a server responds
- with an HTTP response message.
-
- Response = Status-Line ; Section 5.1
- *( header-field CRLF ) ; Section 3.2
- CRLF
- [ message-body ] ; Section 3.3
-
-5.1. Status-Line
-
- The first line of a Response message is the Status-Line, consisting
- of the protocol version followed by a numeric status code and its
- associated textual phrase, with each element separated by SP
- characters. No CR or LF is allowed except in the final CRLF
- sequence.
-
- Status-Line = HTTP-Version SP Status-Code SP Reason-Phrase CRLF
-
-5.1.1. Status Code and Reason Phrase
-
- The Status-Code element is a 3-digit integer result code of the
- attempt to understand and satisfy the request. These codes are fully
- defined in Section 8 of [Part2]. The Reason Phrase exists for the
- sole purpose of providing a textual description associated with the
- numeric status code, out of deference to earlier Internet application
- protocols that were more frequently used with interactive text
- clients. A client SHOULD ignore the content of the Reason Phrase.
-
- The first digit of the Status-Code defines the class of response.
- The last two digits do not have any categorization role. There are 5
- values for the first digit:
-
- o 1xx: Informational - Request received, continuing process
-
- o 2xx: Success - The action was successfully received, understood,
- and accepted
-
- o 3xx: Redirection - Further action must be taken in order to
- complete the request
-
- o 4xx: Client Error - The request contains bad syntax or cannot be
- fulfilled
-
- o 5xx: Server Error - The server failed to fulfill an apparently
- valid request
-
-
-
-
-Fielding, et al. Expires February 5, 2011 [Page 31]
-
-Internet-Draft HTTP/1.1, Part 1 August 2010
-
-
- Status-Code = 3DIGIT
- Reason-Phrase = *( WSP / VCHAR / obs-text )
-
-6. Protocol Parameters
-
-6.1. Date/Time Formats: Full Date
-
- HTTP applications have historically allowed three different formats
- for date/time stamps. However, the preferred format is a fixed-
- length subset of that defined by [RFC1123]:
-
- Sun, 06 Nov 1994 08:49:37 GMT ; RFC 1123
-
- The other formats are described here only for compatibility with
- obsolete implementations.
-
- Sunday, 06-Nov-94 08:49:37 GMT ; obsolete RFC 850 format
- Sun Nov 6 08:49:37 1994 ; ANSI C's asctime() format
-
- HTTP/1.1 clients and servers that parse a date value MUST accept all
- three formats (for compatibility with HTTP/1.0), though they MUST
- only generate the RFC 1123 format for representing HTTP-date values
- in header fields. See Appendix A for further information.
-
- All HTTP date/time stamps MUST be represented in Greenwich Mean Time
- (GMT), without exception. For the purposes of HTTP, GMT is exactly
- equal to UTC (Coordinated Universal Time). This is indicated in the
- first two formats by the inclusion of "GMT" as the three-letter
- abbreviation for time zone, and MUST be assumed when reading the
- asctime format. HTTP-date is case sensitive and MUST NOT include
- additional whitespace beyond that specifically included as SP in the
- grammar.
-
- HTTP-date = rfc1123-date / obs-date
-
- Preferred format:
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-Fielding, et al. Expires February 5, 2011 [Page 32]
-
-Internet-Draft HTTP/1.1, Part 1 August 2010
-
-
- rfc1123-date = day-name "," SP date1 SP time-of-day SP GMT
-
- day-name = %x4D.6F.6E ; "Mon", case-sensitive
- / %x54.75.65 ; "Tue", case-sensitive
- / %x57.65.64 ; "Wed", case-sensitive
- / %x54.68.75 ; "Thu", case-sensitive
- / %x46.72.69 ; "Fri", case-sensitive
- / %x53.61.74 ; "Sat", case-sensitive
- / %x53.75.6E ; "Sun", case-sensitive
-
- date1 = day SP month SP year
- ; e.g., 02 Jun 1982
-
- day = 2DIGIT
- month = %x4A.61.6E ; "Jan", case-sensitive
- / %x46.65.62 ; "Feb", case-sensitive
- / %x4D.61.72 ; "Mar", case-sensitive
- / %x41.70.72 ; "Apr", case-sensitive
- / %x4D.61.79 ; "May", case-sensitive
- / %x4A.75.6E ; "Jun", case-sensitive
- / %x4A.75.6C ; "Jul", case-sensitive
- / %x41.75.67 ; "Aug", case-sensitive
- / %x53.65.70 ; "Sep", case-sensitive
- / %x4F.63.74 ; "Oct", case-sensitive
- / %x4E.6F.76 ; "Nov", case-sensitive
- / %x44.65.63 ; "Dec", case-sensitive
- year = 4DIGIT
-
- GMT = %x47.4D.54 ; "GMT", case-sensitive
-
- time-of-day = hour ":" minute ":" second
- ; 00:00:00 - 23:59:59
-
- hour = 2DIGIT
- minute = 2DIGIT
- second = 2DIGIT
-
- The semantics of day-name, day, month, year, and time-of-day are the
- same as those defined for the RFC 5322 constructs with the
- corresponding name ([RFC5322], Section 3.3).
-
- Obsolete formats:
-
- obs-date = rfc850-date / asctime-date
-
-
-
-
-
-
-
-Fielding, et al. Expires February 5, 2011 [Page 33]
-
-Internet-Draft HTTP/1.1, Part 1 August 2010
-
-
- rfc850-date = day-name-l "," SP date2 SP time-of-day SP GMT
- date2 = day "-" month "-" 2DIGIT
- ; day-month-year (e.g., 02-Jun-82)
-
- day-name-l = %x4D.6F.6E.64.61.79 ; "Monday", case-sensitive
- / %x54.75.65.73.64.61.79 ; "Tuesday", case-sensitive
- / %x57.65.64.6E.65.73.64.61.79 ; "Wednesday", case-sensitive
- / %x54.68.75.72.73.64.61.79 ; "Thursday", case-sensitive
- / %x46.72.69.64.61.79 ; "Friday", case-sensitive
- / %x53.61.74.75.72.64.61.79 ; "Saturday", case-sensitive
- / %x53.75.6E.64.61.79 ; "Sunday", case-sensitive
-
-
- asctime-date = day-name SP date3 SP time-of-day SP year
- date3 = month SP ( 2DIGIT / ( SP 1DIGIT ))
- ; month day (e.g., Jun 2)
-
- Note: Recipients of date values are encouraged to be robust in
- accepting date values that might have been sent by non-HTTP
- applications, as is sometimes the case when retrieving or posting
- messages via proxies/gateways to SMTP or NNTP.
-
- Note: HTTP requirements for the date/time stamp format apply only
- to their usage within the protocol stream. Clients and servers
- are not required to use these formats for user presentation,
- request logging, etc.
-
-6.2. Transfer Codings
-
- Transfer-coding values are used to indicate an encoding
- transformation that has been, can be, or might need to be applied to
- a payload body in order to ensure "safe transport" through the
- network. This differs from a content coding in that the transfer-
- coding is a property of the message rather than a property of the
- representation that is being transferred.
-
- transfer-coding = "chunked" ; Section 6.2.1
- / "compress" ; Section 6.2.2.1
- / "deflate" ; Section 6.2.2.2
- / "gzip" ; Section 6.2.2.3
- / transfer-extension
- transfer-extension = token *( OWS ";" OWS transfer-parameter )
-
- Parameters are in the form of attribute/value pairs.
-
- transfer-parameter = attribute BWS "=" BWS value
- attribute = token
- value = word
-
-
-
-Fielding, et al. Expires February 5, 2011 [Page 34]
-
-Internet-Draft HTTP/1.1, Part 1 August 2010
-
-
- All transfer-coding values are case-insensitive. HTTP/1.1 uses
- transfer-coding values in the TE header field (Section 9.5) and in
- the Transfer-Encoding header field (Section 9.7).
-
- Transfer-codings are analogous to the Content-Transfer-Encoding
- values of MIME, which were designed to enable safe transport of
- binary data over a 7-bit transport service ([RFC2045], Section 6).
- However, safe transport has a different focus for an 8bit-clean
- transfer protocol. In HTTP, the only unsafe characteristic of
- message-bodies is the difficulty in determining the exact message
- body length (Section 3.3), or the desire to encrypt data over a
- shared transport.
-
- A server that receives a request message with a transfer-coding it
- does not understand SHOULD respond with 501 (Not Implemented) and
- then close the connection. A server MUST NOT send transfer-codings
- to an HTTP/1.0 client.
-
-6.2.1. Chunked Transfer Coding
-
- The chunked encoding modifies the body of a message in order to
- transfer it as a series of chunks, each with its own size indicator,
- followed by an OPTIONAL trailer containing header fields. This
- allows dynamically produced content to be transferred along with the
- information necessary for the recipient to verify that it has
- received the full message.
-
- Chunked-Body = *chunk
- last-chunk
- trailer-part
- CRLF
-
- chunk = chunk-size *WSP [ chunk-ext ] CRLF
- chunk-data CRLF
- chunk-size = 1*HEXDIG
- last-chunk = 1*("0") *WSP [ chunk-ext ] CRLF
-
- chunk-ext = *( ";" *WSP chunk-ext-name
- [ "=" chunk-ext-val ] *WSP )
- chunk-ext-name = token
- chunk-ext-val = token / quoted-str-nf
- chunk-data = 1*OCTET ; a sequence of chunk-size octets
- trailer-part = *( header-field CRLF )
-
- quoted-str-nf = DQUOTE *( qdtext-nf / quoted-pair ) DQUOTE
- ; like quoted-string, but disallowing line folding
- qdtext-nf = WSP / %x21 / %x23-5B / %x5D-7E / obs-text
- ; WSP / / obs-text
-
-
-
-Fielding, et al. Expires February 5, 2011 [Page 35]
-
-Internet-Draft HTTP/1.1, Part 1 August 2010
-
-
- The chunk-size field is a string of hex digits indicating the size of
- the chunk-data in octets. The chunked encoding is ended by any chunk
- whose size is zero, followed by the trailer, which is terminated by
- an empty line.
-
- The trailer allows the sender to include additional HTTP header
- fields at the end of the message. The Trailer header field can be
- used to indicate which header fields are included in a trailer (see
- Section 9.6).
-
- A server using chunked transfer-coding in a response MUST NOT use the
- trailer for any header fields unless at least one of the following is
- true:
-
- 1. the request included a TE header field that indicates "trailers"
- is acceptable in the transfer-coding of the response, as
- described in Section 9.5; or,
-
- 2. the server is the origin server for the response, the trailer
- fields consist entirely of optional metadata, and the recipient
- could use the message (in a manner acceptable to the origin
- server) without receiving this metadata. In other words, the
- origin server is willing to accept the possibility that the
- trailer fields might be silently discarded along the path to the
- client.
-
- This requirement prevents an interoperability failure when the
- message is being received by an HTTP/1.1 (or later) proxy and
- forwarded to an HTTP/1.0 recipient. It avoids a situation where
- compliance with the protocol would have necessitated a possibly
- infinite buffer on the proxy.
-
- A process for decoding the "chunked" transfer-coding can be
- represented in pseudo-code as:
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-Fielding, et al. Expires February 5, 2011 [Page 36]
-
-Internet-Draft HTTP/1.1, Part 1 August 2010
-
-
- length := 0
- read chunk-size, chunk-ext (if any) and CRLF
- while (chunk-size > 0) {
- read chunk-data and CRLF
- append chunk-data to decoded-body
- length := length + chunk-size
- read chunk-size and CRLF
- }
- read header-field
- while (header-field not empty) {
- append header-field to existing header fields
- read header-field
- }
- Content-Length := length
- Remove "chunked" from Transfer-Encoding
-
- All HTTP/1.1 applications MUST be able to receive and decode the
- "chunked" transfer-coding and MUST ignore chunk-ext extensions they
- do not understand.
-
- Since "chunked" is the only transfer-coding required to be understood
- by HTTP/1.1 recipients, it plays a crucial role in delimiting
- messages on a persistent connection. Whenever a transfer-coding is
- applied to a payload body in a request, the final transfer-coding
- applied MUST be "chunked". If a transfer-coding is applied to a
- response payload body, then either the final transfer-coding applied
- MUST be "chunked" or the message MUST be terminated by closing the
- connection. When the "chunked" transfer-coding is used, it MUST be
- the last transfer-coding applied to form the message-body. The
- "chunked" transfer-coding MUST NOT be applied more than once in a
- message-body.
-
-6.2.2. Compression Codings
-
- The codings defined below can be used to compress the payload of a
- message.
-
- Note: Use of program names for the identification of encoding
- formats is not desirable and is discouraged for future encodings.
- Their use here is representative of historical practice, not good
- design.
-
- Note: For compatibility with previous implementations of HTTP,
- applications SHOULD consider "x-gzip" and "x-compress" to be
- equivalent to "gzip" and "compress" respectively.
-
-
-
-
-
-
-Fielding, et al. Expires February 5, 2011 [Page 37]
-
-Internet-Draft HTTP/1.1, Part 1 August 2010
-
-
-6.2.2.1. Compress Coding
-
- The "compress" format is produced by the common UNIX file compression
- program "compress". This format is an adaptive Lempel-Ziv-Welch
- coding (LZW).
-
-6.2.2.2. Deflate Coding
-
- The "deflate" format is defined as the "deflate" compression
- mechanism (described in [RFC1951]) used inside the "zlib" data format
- ([RFC1950]).
-
- Note: Some incorrect implementations send the "deflate" compressed
- data without the zlib wrapper.
-
-6.2.2.3. Gzip Coding
-
- The "gzip" format is produced by the file compression program "gzip"
- (GNU zip), as described in [RFC1952]. This format is a Lempel-Ziv
- coding (LZ77) with a 32 bit CRC.
-
-6.2.3. Transfer Coding Registry
-
- The HTTP Transfer Coding Registry defines the name space for the
- transfer coding names.
-
- Registrations MUST include the following fields:
-
- o Name
-
- o Description
-
- o Pointer to specification text
-
- Names of transfer codings MUST NOT overlap with names of content
- codings (Section 2.2 of [Part3]), unless the encoding transformation
- is identical (as it is the case for the compression codings defined
- in Section 6.2.2).
-
- Values to be added to this name space require a specification (see
- "Specification Required" in Section 4.1 of [RFC5226]), and MUST
- conform to the purpose of transfer coding defined in this section.
-
- The registry itself is maintained at
- .
-
-
-
-
-
-
-Fielding, et al. Expires February 5, 2011 [Page 38]
-
-Internet-Draft HTTP/1.1, Part 1 August 2010
-
-
-6.3. Product Tokens
-
- Product tokens are used to allow communicating applications to
- identify themselves by software name and version. Most fields using
- product tokens also allow sub-products which form a significant part
- of the application to be listed, separated by whitespace. By
- convention, the products are listed in order of their significance
- for identifying the application.
-
- product = token ["/" product-version]
- product-version = token
-
- Examples:
-
- User-Agent: CERN-LineMode/2.15 libwww/2.17b3
- Server: Apache/0.8.4
-
- Product tokens SHOULD be short and to the point. They MUST NOT be
- used for advertising or other non-essential information. Although
- any token character MAY appear in a product-version, this token
- SHOULD only be used for a version identifier (i.e., successive
- versions of the same product SHOULD only differ in the product-
- version portion of the product value).
-
-6.4. Quality Values
-
- Both transfer codings (TE request header, Section 9.5) and content
- negotiation (Section 5 of [Part3]) use short "floating point" numbers
- to indicate the relative importance ("weight") of various negotiable
- parameters. A weight is normalized to a real number in the range 0
- through 1, where 0 is the minimum and 1 the maximum value. If a
- parameter has a quality value of 0, then content with this parameter
- is "not acceptable" for the client. HTTP/1.1 applications MUST NOT
- generate more than three digits after the decimal point. User
- configuration of these values SHOULD also be limited in this fashion.
-
- qvalue = ( "0" [ "." 0*3DIGIT ] )
- / ( "1" [ "." 0*3("0") ] )
-
- Note: "Quality values" is a misnomer, since these values merely
- represent relative degradation in desired quality.
-
-7. Connections
-
-7.1. Persistent Connections
-
-
-
-
-
-
-Fielding, et al. Expires February 5, 2011 [Page 39]
-
-Internet-Draft HTTP/1.1, Part 1 August 2010
-
-
-7.1.1. Purpose
-
- Prior to persistent connections, a separate TCP connection was
- established to fetch each URL, increasing the load on HTTP servers
- and causing congestion on the Internet. The use of inline images and
- other associated data often requires a client to make multiple
- requests of the same server in a short amount of time. Analysis of
- these performance problems and results from a prototype
- implementation are available [Pad1995] [Spe]. Implementation
- experience and measurements of actual HTTP/1.1 implementations show
- good results [Nie1997]. Alternatives have also been explored, for
- example, T/TCP [Tou1998].
-
- Persistent HTTP connections have a number of advantages:
-
- o By opening and closing fewer TCP connections, CPU time is saved in
- routers and hosts (clients, servers, proxies, gateways, tunnels,
- or caches), and memory used for TCP protocol control blocks can be
- saved in hosts.
-
- o HTTP requests and responses can be pipelined on a connection.
- Pipelining allows a client to make multiple requests without
- waiting for each response, allowing a single TCP connection to be
- used much more efficiently, with much lower elapsed time.
-
- o Network congestion is reduced by reducing the number of packets
- caused by TCP opens, and by allowing TCP sufficient time to
- determine the congestion state of the network.
-
- o Latency on subsequent requests is reduced since there is no time
- spent in TCP's connection opening handshake.
-
- o HTTP can evolve more gracefully, since errors can be reported
- without the penalty of closing the TCP connection. Clients using
- future versions of HTTP might optimistically try a new feature,
- but if communicating with an older server, retry with old
- semantics after an error is reported.
-
- HTTP implementations SHOULD implement persistent connections.
-
-7.1.2. Overall Operation
-
- A significant difference between HTTP/1.1 and earlier versions of
- HTTP is that persistent connections are the default behavior of any
- HTTP connection. That is, unless otherwise indicated, the client
- SHOULD assume that the server will maintain a persistent connection,
- even after error responses from the server.
-
-
-
-
-Fielding, et al. Expires February 5, 2011 [Page 40]
-
-Internet-Draft HTTP/1.1, Part 1 August 2010
-
-
- Persistent connections provide a mechanism by which a client and a
- server can signal the close of a TCP connection. This signaling
- takes place using the Connection header field (Section 9.1). Once a
- close has been signaled, the client MUST NOT send any more requests
- on that connection.
-
-7.1.2.1. Negotiation
-
- An HTTP/1.1 server MAY assume that a HTTP/1.1 client intends to
- maintain a persistent connection unless a Connection header including
- the connection-token "close" was sent in the request. If the server
- chooses to close the connection immediately after sending the
- response, it SHOULD send a Connection header including the
- connection-token "close".
-
- An HTTP/1.1 client MAY expect a connection to remain open, but would
- decide to keep it open based on whether the response from a server
- contains a Connection header with the connection-token close. In
- case the client does not want to maintain a connection for more than
- that request, it SHOULD send a Connection header including the
- connection-token close.
-
- If either the client or the server sends the close token in the
- Connection header, that request becomes the last one for the
- connection.
-
- Clients and servers SHOULD NOT assume that a persistent connection is
- maintained for HTTP versions less than 1.1 unless it is explicitly
- signaled. See Appendix B.2 for more information on backward
- compatibility with HTTP/1.0 clients.
-
- In order to remain persistent, all messages on the connection MUST
- have a self-defined message length (i.e., one not defined by closure
- of the connection), as described in Section 3.3.
-
-7.1.2.2. Pipelining
-
- A client that supports persistent connections MAY "pipeline" its
- requests (i.e., send multiple requests without waiting for each
- response). A server MUST send its responses to those requests in the
- same order that the requests were received.
-
- Clients which assume persistent connections and pipeline immediately
- after connection establishment SHOULD be prepared to retry their
- connection if the first pipelined attempt fails. If a client does
- such a retry, it MUST NOT pipeline before it knows the connection is
- persistent. Clients MUST also be prepared to resend their requests
- if the server closes the connection before sending all of the
-
-
-
-Fielding, et al. Expires February 5, 2011 [Page 41]
-
-Internet-Draft HTTP/1.1, Part 1 August 2010
-
-
- corresponding responses.
-
- Clients SHOULD NOT pipeline requests using non-idempotent methods or
- non-idempotent sequences of methods (see Section 7.1.2 of [Part2]).
- Otherwise, a premature termination of the transport connection could
- lead to indeterminate results. A client wishing to send a non-
- idempotent request SHOULD wait to send that request until it has
- received the response status line for the previous request.
-
-7.1.3. Proxy Servers
-
- It is especially important that proxies correctly implement the
- properties of the Connection header field as specified in
- Section 9.1.
-
- The proxy server MUST signal persistent connections separately with
- its clients and the origin servers (or other proxy servers) that it
- connects to. Each persistent connection applies to only one
- transport link.
-
- A proxy server MUST NOT establish a HTTP/1.1 persistent connection
- with an HTTP/1.0 client (but see Section 19.7.1 of [RFC2068] for
- information and discussion of the problems with the Keep-Alive header
- implemented by many HTTP/1.0 clients).
-
-7.1.3.1. End-to-end and Hop-by-hop Headers
-
- For the purpose of defining the behavior of caches and non-caching
- proxies, we divide HTTP headers into two categories:
-
- o End-to-end headers, which are transmitted to the ultimate
- recipient of a request or response. End-to-end headers in
- responses MUST be stored as part of a cache entry and MUST be
- transmitted in any response formed from a cache entry.
-
- o Hop-by-hop headers, which are meaningful only for a single
- transport-level connection, and are not stored by caches or
- forwarded by proxies.
-
- The following HTTP/1.1 headers are hop-by-hop headers:
-
- o Connection
-
- o Keep-Alive
-
- o Proxy-Authenticate
-
-
-
-
-
-Fielding, et al. Expires February 5, 2011 [Page 42]
-
-Internet-Draft HTTP/1.1, Part 1 August 2010
-
-
- o Proxy-Authorization
-
- o TE
-
- o Trailer
-
- o Transfer-Encoding
-
- o Upgrade
-
- All other headers defined by HTTP/1.1 are end-to-end headers.
-
- Other hop-by-hop headers MUST be listed in a Connection header
- (Section 9.1).
-
-7.1.3.2. Non-modifiable Headers
-
- Some features of HTTP/1.1, such as Digest Authentication, depend on
- the value of certain end-to-end headers. A transparent proxy SHOULD
- NOT modify an end-to-end header unless the definition of that header
- requires or specifically allows that.
-
- A transparent proxy MUST NOT modify any of the following fields in a
- request or response, and it MUST NOT add any of these fields if not
- already present:
-
- o Content-Location
-
- o Content-MD5
-
- o ETag
-
- o Last-Modified
-
- A transparent proxy MUST NOT modify any of the following fields in a
- response:
-
- o Expires
-
- but it MAY add any of these fields if not already present. If an
- Expires header is added, it MUST be given a field-value identical to
- that of the Date header in that response.
-
- A proxy MUST NOT modify or add any of the following fields in a
- message that contains the no-transform cache-control directive, or in
- any request:
-
-
-
-
-
-Fielding, et al. Expires February 5, 2011 [Page 43]
-
-Internet-Draft HTTP/1.1, Part 1 August 2010
-
-
- o Content-Encoding
-
- o Content-Range
-
- o Content-Type
-
- A non-transparent proxy MAY modify or add these fields to a message
- that does not include no-transform, but if it does so, it MUST add a
- Warning 214 (Transformation applied) if one does not already appear
- in the message (see Section 3.6 of [Part6]).
-
- Warning: Unnecessary modification of end-to-end headers might
- cause authentication failures if stronger authentication
- mechanisms are introduced in later versions of HTTP. Such
- authentication mechanisms MAY rely on the values of header fields
- not listed here.
-
- A transparent proxy MUST preserve the message payload ([Part3]),
- though it MAY change the message-body through application or removal
- of a transfer-coding (Section 6.2).
-
-7.1.4. Practical Considerations
-
- Servers will usually have some time-out value beyond which they will
- no longer maintain an inactive connection. Proxy servers might make
- this a higher value since it is likely that the client will be making
- more connections through the same server. The use of persistent
- connections places no requirements on the length (or existence) of
- this time-out for either the client or the server.
-
- When a client or server wishes to time-out it SHOULD issue a graceful
- close on the transport connection. Clients and servers SHOULD both
- constantly watch for the other side of the transport close, and
- respond to it as appropriate. If a client or server does not detect
- the other side's close promptly it could cause unnecessary resource
- drain on the network.
-
- A client, server, or proxy MAY close the transport connection at any
- time. For example, a client might have started to send a new request
- at the same time that the server has decided to close the "idle"
- connection. From the server's point of view, the connection is being
- closed while it was idle, but from the client's point of view, a
- request is in progress.
-
- This means that clients, servers, and proxies MUST be able to recover
- from asynchronous close events. Client software SHOULD reopen the
- transport connection and retransmit the aborted sequence of requests
- without user interaction so long as the request sequence is
-
-
-
-Fielding, et al. Expires February 5, 2011 [Page 44]
-
-Internet-Draft HTTP/1.1, Part 1 August 2010
-
-
- idempotent (see Section 7.1.2 of [Part2]). Non-idempotent methods or
- sequences MUST NOT be automatically retried, although user agents MAY
- offer a human operator the choice of retrying the request(s).
- Confirmation by user-agent software with semantic understanding of
- the application MAY substitute for user confirmation. The automatic
- retry SHOULD NOT be repeated if the second sequence of requests
- fails.
-
- Servers SHOULD always respond to at least one request per connection,
- if at all possible. Servers SHOULD NOT close a connection in the
- middle of transmitting a response, unless a network or client failure
- is suspected.
-
- Clients (including proxies) SHOULD limit the number of simultaneous
- connections that they maintain to a given server (including proxies).
-
- Previous revisions of HTTP gave a specific number of connections as a
- ceiling, but this was found to be impractical for many applications.
- As a result, this specification does not mandate a particular maximum
- number of connections, but instead encourages clients to be
- conservative when opening multiple connections.
-
- In particular, while using multiple connections avoids the "head-of-
- line blocking" problem (whereby a request that takes significant
- server-side processing and/or has a large payload can block
- subsequent requests on the same connection), each connection used
- consumes server resources (sometimes significantly), and furthermore
- using multiple connections can cause undesirable side effects in
- congested networks.
-
- Note that servers might reject traffic that they deem abusive,
- including an excessive number of connections from a client.
-
-7.2. Message Transmission Requirements
-
-7.2.1. Persistent Connections and Flow Control
-
- HTTP/1.1 servers SHOULD maintain persistent connections and use TCP's
- flow control mechanisms to resolve temporary overloads, rather than
- terminating connections with the expectation that clients will retry.
- The latter technique can exacerbate network congestion.
-
-7.2.2. Monitoring Connections for Error Status Messages
-
- An HTTP/1.1 (or later) client sending a message-body SHOULD monitor
- the network connection for an error status code while it is
- transmitting the request. If the client sees an error status code,
- it SHOULD immediately cease transmitting the body. If the body is
-
-
-
-Fielding, et al. Expires February 5, 2011 [Page 45]
-
-Internet-Draft HTTP/1.1, Part 1 August 2010
-
-
- being sent using a "chunked" encoding (Section 6.2), a zero length
- chunk and empty trailer MAY be used to prematurely mark the end of
- the message. If the body was preceded by a Content-Length header,
- the client MUST close the connection.
-
-7.2.3. Use of the 100 (Continue) Status
-
- The purpose of the 100 (Continue) status code (see Section 8.1.1 of
- [Part2]) is to allow a client that is sending a request message with
- a request body to determine if the origin server is willing to accept
- the request (based on the request headers) before the client sends
- the request body. In some cases, it might either be inappropriate or
- highly inefficient for the client to send the body if the server will
- reject the message without looking at the body.
-
- Requirements for HTTP/1.1 clients:
-
- o If a client will wait for a 100 (Continue) response before sending
- the request body, it MUST send an Expect request-header field
- (Section 9.2 of [Part2]) with the "100-continue" expectation.
-
- o A client MUST NOT send an Expect request-header field (Section 9.2
- of [Part2]) with the "100-continue" expectation if it does not
- intend to send a request body.
-
- Because of the presence of older implementations, the protocol allows
- ambiguous situations in which a client might send "Expect: 100-
- continue" without receiving either a 417 (Expectation Failed) or a
- 100 (Continue) status code. Therefore, when a client sends this
- header field to an origin server (possibly via a proxy) from which it
- has never seen a 100 (Continue) status code, the client SHOULD NOT
- wait for an indefinite period before sending the request body.
-
- Requirements for HTTP/1.1 origin servers:
-
- o Upon receiving a request which includes an Expect request-header
- field with the "100-continue" expectation, an origin server MUST
- either respond with 100 (Continue) status code and continue to
- read from the input stream, or respond with a final status code.
- The origin server MUST NOT wait for the request body before
- sending the 100 (Continue) response. If it responds with a final
- status code, it MAY close the transport connection or it MAY
- continue to read and discard the rest of the request. It MUST NOT
- perform the requested method if it returns a final status code.
-
- o An origin server SHOULD NOT send a 100 (Continue) response if the
- request message does not include an Expect request-header field
- with the "100-continue" expectation, and MUST NOT send a 100
-
-
-
-Fielding, et al. Expires February 5, 2011 [Page 46]
-
-Internet-Draft HTTP/1.1, Part 1 August 2010
-
-
- (Continue) response if such a request comes from an HTTP/1.0 (or
- earlier) client. There is an exception to this rule: for
- compatibility with [RFC2068], a server MAY send a 100 (Continue)
- status code in response to an HTTP/1.1 PUT or POST request that
- does not include an Expect request-header field with the "100-
- continue" expectation. This exception, the purpose of which is to
- minimize any client processing delays associated with an
- undeclared wait for 100 (Continue) status code, applies only to
- HTTP/1.1 requests, and not to requests with any other HTTP-version
- value.
-
- o An origin server MAY omit a 100 (Continue) response if it has
- already received some or all of the request body for the
- corresponding request.
-
- o An origin server that sends a 100 (Continue) response MUST
- ultimately send a final status code, once the request body is
- received and processed, unless it terminates the transport
- connection prematurely.
-
- o If an origin server receives a request that does not include an
- Expect request-header field with the "100-continue" expectation,
- the request includes a request body, and the server responds with
- a final status code before reading the entire request body from
- the transport connection, then the server SHOULD NOT close the
- transport connection until it has read the entire request, or
- until the client closes the connection. Otherwise, the client
- might not reliably receive the response message. However, this
- requirement is not be construed as preventing a server from
- defending itself against denial-of-service attacks, or from badly
- broken client implementations.
-
- Requirements for HTTP/1.1 proxies:
-
- o If a proxy receives a request that includes an Expect request-
- header field with the "100-continue" expectation, and the proxy
- either knows that the next-hop server complies with HTTP/1.1 or
- higher, or does not know the HTTP version of the next-hop server,
- it MUST forward the request, including the Expect header field.
-
- o If the proxy knows that the version of the next-hop server is
- HTTP/1.0 or lower, it MUST NOT forward the request, and it MUST
- respond with a 417 (Expectation Failed) status code.
-
- o Proxies SHOULD maintain a cache recording the HTTP version numbers
- received from recently-referenced next-hop servers.
-
-
-
-
-
-Fielding, et al. Expires February 5, 2011 [Page 47]
-
-Internet-Draft HTTP/1.1, Part 1 August 2010
-
-
- o A proxy MUST NOT forward a 100 (Continue) response if the request
- message was received from an HTTP/1.0 (or earlier) client and did
- not include an Expect request-header field with the "100-continue"
- expectation. This requirement overrides the general rule for
- forwarding of 1xx responses (see Section 8.1 of [Part2]).
-
-7.2.4. Client Behavior if Server Prematurely Closes Connection
-
- If an HTTP/1.1 client sends a request which includes a request body,
- but which does not include an Expect request-header field with the
- "100-continue" expectation, and if the client is not directly
- connected to an HTTP/1.1 origin server, and if the client sees the
- connection close before receiving a status line from the server, the
- client SHOULD retry the request. If the client does retry this
- request, it MAY use the following "binary exponential backoff"
- algorithm to be assured of obtaining a reliable response:
-
- 1. Initiate a new connection to the server
-
- 2. Transmit the request-headers
-
- 3. Initialize a variable R to the estimated round-trip time to the
- server (e.g., based on the time it took to establish the
- connection), or to a constant value of 5 seconds if the round-
- trip time is not available.
-
- 4. Compute T = R * (2**N), where N is the number of previous retries
- of this request.
-
- 5. Wait either for an error response from the server, or for T
- seconds (whichever comes first)
-
- 6. If no error response is received, after T seconds transmit the
- body of the request.
-
- 7. If client sees that the connection is closed prematurely, repeat
- from step 1 until the request is accepted, an error response is
- received, or the user becomes impatient and terminates the retry
- process.
-
- If at any point an error status code is received, the client
-
- o SHOULD NOT continue and
-
- o SHOULD close the connection if it has not completed sending the
- request message.
-
-
-
-
-
-Fielding, et al. Expires February 5, 2011 [Page 48]
-
-Internet-Draft HTTP/1.1, Part 1 August 2010
-
-
-8. Miscellaneous notes that might disappear
-
-8.1. Scheme aliases considered harmful
-
- [[TBD-aliases-harmful: describe why aliases like webcal are
- harmful.]]
-
-8.2. Use of HTTP for proxy communication
-
- [[TBD-proxy-other: Configured to use HTTP to proxy HTTP or other
- protocols.]]
-
-8.3. Interception of HTTP for access control
-
- [[TBD-intercept: Interception of HTTP traffic for initiating access
- control.]]
-
-8.4. Use of HTTP by other protocols
-
- [[TBD-profiles: Profiles of HTTP defined by other protocol.
- Extensions of HTTP like WebDAV.]]
-
-8.5. Use of HTTP by media type specification
-
- [[TBD-hypertext: Instructions on composing HTTP requests via
- hypertext formats.]]
-
-9. Header Field Definitions
-
- This section defines the syntax and semantics of HTTP/1.1 header
- fields related to message framing and transport protocols.
-
-9.1. Connection
-
- The "Connection" general-header field allows the sender to specify
- options that are desired for that particular connection and MUST NOT
- be communicated by proxies over further connections.
-
- The Connection header's value has the following grammar:
-
- Connection = "Connection" ":" OWS Connection-v
- Connection-v = 1#connection-token
- connection-token = token
-
- HTTP/1.1 proxies MUST parse the Connection header field before a
- message is forwarded and, for each connection-token in this field,
- remove any header field(s) from the message with the same name as the
- connection-token. Connection options are signaled by the presence of
-
-
-
-Fielding, et al. Expires February 5, 2011 [Page 49]
-
-Internet-Draft HTTP/1.1, Part 1 August 2010
-
-
- a connection-token in the Connection header field, not by any
- corresponding additional header field(s), since the additional header
- field might not be sent if there are no parameters associated with
- that connection option.
-
- Message headers listed in the Connection header MUST NOT include end-
- to-end headers, such as Cache-Control.
-
- HTTP/1.1 defines the "close" connection option for the sender to
- signal that the connection will be closed after completion of the
- response. For example,
-
- Connection: close
-
- in either the request or the response header fields indicates that
- the connection SHOULD NOT be considered "persistent" (Section 7.1)
- after the current request/response is complete.
-
- An HTTP/1.1 client that does not support persistent connections MUST
- include the "close" connection option in every request message.
-
- An HTTP/1.1 server that does not support persistent connections MUST
- include the "close" connection option in every response message that
- does not have a 1xx (Informational) status code.
-
- A system receiving an HTTP/1.0 (or lower-version) message that
- includes a Connection header MUST, for each connection-token in this
- field, remove and ignore any header field(s) from the message with
- the same name as the connection-token. This protects against
- mistaken forwarding of such header fields by pre-HTTP/1.1 proxies.
- See Appendix B.2.
-
-9.2. Content-Length
-
- The "Content-Length" header field indicates the size of the message-
- body, in decimal number of octets, for any message other than a
- response to the HEAD method or a response with a status code of 304.
- In the case of responses to the HEAD method, it indicates the size of
- the payload body (not including any potential transfer-coding) that
- would have been sent had the request been a GET. In the case of the
- 304 (Not Modified) response, it indicates the size of the payload
- body (not including any potential transfer-coding) that would have
- been sent in a 200 (OK) response.
-
- Content-Length = "Content-Length" ":" OWS 1*Content-Length-v
- Content-Length-v = 1*DIGIT
-
- An example is
-
-
-
-Fielding, et al. Expires February 5, 2011 [Page 50]
-
-Internet-Draft HTTP/1.1, Part 1 August 2010
-
-
- Content-Length: 3495
-
- Implementations SHOULD use this field to indicate the message-body
- length when no transfer-coding is being applied and the payload's
- body length can be determined prior to being transferred.
- Section 3.3 describes how recipients determine the length of a
- message-body.
-
- Any Content-Length greater than or equal to zero is a valid value.
-
- Note that the use of this field in HTTP is significantly different
- from the corresponding definition in MIME, where it is an optional
- field used within the "message/external-body" content-type.
-
-9.3. Date
-
- The "Date" general-header field represents the date and time at which
- the message was originated, having the same semantics as the
- Origination Date Field (orig-date) defined in Section 3.6.1 of
- [RFC5322]. The field value is an HTTP-date, as described in
- Section 6.1; it MUST be sent in rfc1123-date format.
-
- Date = "Date" ":" OWS Date-v
- Date-v = HTTP-date
-
- An example is
-
- Date: Tue, 15 Nov 1994 08:12:31 GMT
-
- Origin servers MUST include a Date header field in all responses,
- except in these cases:
-
- 1. If the response status code is 100 (Continue) or 101 (Switching
- Protocols), the response MAY include a Date header field, at the
- server's option.
-
- 2. If the response status code conveys a server error, e.g., 500
- (Internal Server Error) or 503 (Service Unavailable), and it is
- inconvenient or impossible to generate a valid Date.
-
- 3. If the server does not have a clock that can provide a reasonable
- approximation of the current time, its responses MUST NOT include
- a Date header field. In this case, the rules in Section 9.3.1
- MUST be followed.
-
- A received message that does not have a Date header field MUST be
- assigned one by the recipient if the message will be cached by that
- recipient or gatewayed via a protocol which requires a Date. An HTTP
-
-
-
-Fielding, et al. Expires February 5, 2011 [Page 51]
-
-Internet-Draft HTTP/1.1, Part 1 August 2010
-
-
- implementation without a clock MUST NOT cache responses without
- revalidating them on every use. An HTTP cache, especially a shared
- cache, SHOULD use a mechanism, such as NTP [RFC1305], to synchronize
- its clock with a reliable external standard.
-
- Clients SHOULD only send a Date header field in messages that include
- a payload, as is usually the case for PUT and POST requests, and even
- then it is optional. A client without a clock MUST NOT send a Date
- header field in a request.
-
- The HTTP-date sent in a Date header SHOULD NOT represent a date and
- time subsequent to the generation of the message. It SHOULD
- represent the best available approximation of the date and time of
- message generation, unless the implementation has no means of
- generating a reasonably accurate date and time. In theory, the date
- ought to represent the moment just before the payload is generated.
- In practice, the date can be generated at any time during the message
- origination without affecting its semantic value.
-
-9.3.1. Clockless Origin Server Operation
-
- Some origin server implementations might not have a clock available.
- An origin server without a clock MUST NOT assign Expires or Last-
- Modified values to a response, unless these values were associated
- with the resource by a system or user with a reliable clock. It MAY
- assign an Expires value that is known, at or before server
- configuration time, to be in the past (this allows "pre-expiration"
- of responses without storing separate Expires values for each
- resource).
-
-9.4. Host
-
- The "Host" request-header field specifies the Internet host and port
- number of the resource being requested, allowing the origin server or
- gateway to differentiate between internally-ambiguous URLs, such as
- the root "/" URL of a server for multiple host names on a single IP
- address.
-
- The Host field value MUST represent the naming authority of the
- origin server or gateway given by the original URL obtained from the
- user or referring resource (generally an http URI, as described in
- Section 2.6.1).
-
- Host = "Host" ":" OWS Host-v
- Host-v = uri-host [ ":" port ] ; Section 2.6.1
-
- A "host" without any trailing port information implies the default
- port for the service requested (e.g., "80" for an HTTP URL). For
-
-
-
-Fielding, et al. Expires February 5, 2011 [Page 52]
-
-Internet-Draft HTTP/1.1, Part 1 August 2010
-
-
- example, a request on the origin server for
- would properly include:
-
- GET /pub/WWW/ HTTP/1.1
- Host: www.example.org
-
- A client MUST include a Host header field in all HTTP/1.1 request
- messages. If the requested URI does not include an Internet host
- name for the service being requested, then the Host header field MUST
- be given with an empty value. An HTTP/1.1 proxy MUST ensure that any
- request message it forwards does contain an appropriate Host header
- field that identifies the service being requested by the proxy. All
- Internet-based HTTP/1.1 servers MUST respond with a 400 (Bad Request)
- status code to any HTTP/1.1 request message which lacks a Host header
- field.
-
- See Sections 4.2 and B.1.1 for other requirements relating to Host.
-
-9.5. TE
-
- The "TE" request-header field indicates what extension transfer-
- codings it is willing to accept in the response, and whether or not
- it is willing to accept trailer fields in a chunked transfer-coding.
-
- Its value consists of the keyword "trailers" and/or a comma-separated
- list of extension transfer-coding names with optional accept
- parameters (as described in Section 6.2).
-
- TE = "TE" ":" OWS TE-v
- TE-v = #t-codings
- t-codings = "trailers" / ( transfer-extension [ te-params ] )
- te-params = OWS ";" OWS "q=" qvalue *( te-ext )
- te-ext = OWS ";" OWS token [ "=" word ]
-
- The presence of the keyword "trailers" indicates that the client is
- willing to accept trailer fields in a chunked transfer-coding, as
- defined in Section 6.2.1. This keyword is reserved for use with
- transfer-coding values even though it does not itself represent a
- transfer-coding.
-
- Examples of its use are:
-
- TE: deflate
- TE:
- TE: trailers, deflate;q=0.5
-
- The TE header field only applies to the immediate connection.
- Therefore, the keyword MUST be supplied within a Connection header
-
-
-
-Fielding, et al. Expires February 5, 2011 [Page 53]
-
-Internet-Draft HTTP/1.1, Part 1 August 2010
-
-
- field (Section 9.1) whenever TE is present in an HTTP/1.1 message.
-
- A server tests whether a transfer-coding is acceptable, according to
- a TE field, using these rules:
-
- 1. The "chunked" transfer-coding is always acceptable. If the
- keyword "trailers" is listed, the client indicates that it is
- willing to accept trailer fields in the chunked response on
- behalf of itself and any downstream clients. The implication is
- that, if given, the client is stating that either all downstream
- clients are willing to accept trailer fields in the forwarded
- response, or that it will attempt to buffer the response on
- behalf of downstream recipients.
-
- Note: HTTP/1.1 does not define any means to limit the size of a
- chunked response such that a client can be assured of buffering
- the entire response.
-
- 2. If the transfer-coding being tested is one of the transfer-
- codings listed in the TE field, then it is acceptable unless it
- is accompanied by a qvalue of 0. (As defined in Section 6.4, a
- qvalue of 0 means "not acceptable".)
-
- 3. If multiple transfer-codings are acceptable, then the acceptable
- transfer-coding with the highest non-zero qvalue is preferred.
- The "chunked" transfer-coding always has a qvalue of 1.
-
- If the TE field-value is empty or if no TE field is present, the only
- transfer-coding is "chunked". A message with no transfer-coding is
- always acceptable.
-
-9.6. Trailer
-
- The "Trailer" general-header field indicates that the given set of
- header fields is present in the trailer of a message encoded with
- chunked transfer-coding.
-
- Trailer = "Trailer" ":" OWS Trailer-v
- Trailer-v = 1#field-name
-
- An HTTP/1.1 message SHOULD include a Trailer header field in a
- message using chunked transfer-coding with a non-empty trailer.
- Doing so allows the recipient to know which header fields to expect
- in the trailer.
-
- If no Trailer header field is present, the trailer SHOULD NOT include
- any header fields. See Section 6.2.1 for restrictions on the use of
- trailer fields in a "chunked" transfer-coding.
-
-
-
-Fielding, et al. Expires February 5, 2011 [Page 54]
-
-Internet-Draft HTTP/1.1, Part 1 August 2010
-
-
- Message header fields listed in the Trailer header field MUST NOT
- include the following header fields:
-
- o Transfer-Encoding
-
- o Content-Length
-
- o Trailer
-
-9.7. Transfer-Encoding
-
- The "Transfer-Encoding" general-header field indicates what transfer-
- codings (if any) have been applied to the message body. It differs
- from Content-Encoding (Section 2.2 of [Part3]) in that transfer-
- codings are a property of the message (and therefore are removed by
- intermediaries), whereas content-codings are not.
-
- Transfer-Encoding = "Transfer-Encoding" ":" OWS
- Transfer-Encoding-v
- Transfer-Encoding-v = 1#transfer-coding
-
- Transfer-codings are defined in Section 6.2. An example is:
-
- Transfer-Encoding: chunked
-
- If multiple encodings have been applied to a representation, the
- transfer-codings MUST be listed in the order in which they were
- applied. Additional information about the encoding parameters MAY be
- provided by other header fields not defined by this specification.
-
- Many older HTTP/1.0 applications do not understand the Transfer-
- Encoding header.
-
-9.8. Upgrade
-
- The "Upgrade" general-header field allows the client to specify what
- additional communication protocols it would like to use, if the
- server chooses to switch protocols. Additionally, the server MUST
- use the Upgrade header field within a 101 (Switching Protocols)
- response to indicate which protocol(s) are being switched to.
-
- Upgrade = "Upgrade" ":" OWS Upgrade-v
- Upgrade-v = 1#product
-
- For example,
-
- Upgrade: HTTP/2.0, SHTTP/1.3, IRC/6.9, RTA/x11
-
-
-
-
-Fielding, et al. Expires February 5, 2011 [Page 55]
-
-Internet-Draft HTTP/1.1, Part 1 August 2010
-
-
- The Upgrade header field is intended to provide a simple mechanism
- for transition from HTTP/1.1 to some other, incompatible protocol.
- It does so by allowing the client to advertise its desire to use
- another protocol, such as a later version of HTTP with a higher major
- version number, even though the current request has been made using
- HTTP/1.1. This eases the difficult transition between incompatible
- protocols by allowing the client to initiate a request in the more
- commonly supported protocol while indicating to the server that it
- would like to use a "better" protocol if available (where "better" is
- determined by the server, possibly according to the nature of the
- method and/or resource being requested).
-
- The Upgrade header field only applies to switching application-layer
- protocols upon the existing transport-layer connection. Upgrade
- cannot be used to insist on a protocol change; its acceptance and use
- by the server is optional. The capabilities and nature of the
- application-layer communication after the protocol change is entirely
- dependent upon the new protocol chosen, although the first action
- after changing the protocol MUST be a response to the initial HTTP
- request containing the Upgrade header field.
-
- The Upgrade header field only applies to the immediate connection.
- Therefore, the upgrade keyword MUST be supplied within a Connection
- header field (Section 9.1) whenever Upgrade is present in an HTTP/1.1
- message.
-
- The Upgrade header field cannot be used to indicate a switch to a
- protocol on a different connection. For that purpose, it is more
- appropriate to use a 301, 302, 303, or 305 redirection response.
-
- This specification only defines the protocol name "HTTP" for use by
- the family of Hypertext Transfer Protocols, as defined by the HTTP
- version rules of Section 2.5 and future updates to this
- specification. Additional tokens can be registered with IANA using
- the registration procedure defined below.
-
-9.8.1. Upgrade Token Registry
-
- The HTTP Upgrade Token Registry defines the name space for product
- tokens used to identify protocols in the Upgrade header field. Each
- registered token is associated with contact information and an
- optional set of specifications that details how the connection will
- be processed after it has been upgraded.
-
- Registrations are allowed on a First Come First Served basis as
- described in Section 4.1 of [RFC5226]. The specifications need not
- be IETF documents or be subject to IESG review. Registrations are
- subject to the following rules:
-
-
-
-Fielding, et al. Expires February 5, 2011 [Page 56]
-
-Internet-Draft HTTP/1.1, Part 1 August 2010
-
-
- 1. A token, once registered, stays registered forever.
-
- 2. The registration MUST name a responsible party for the
- registration.
-
- 3. The registration MUST name a point of contact.
-
- 4. The registration MAY name a set of specifications associated with
- that token. Such specifications need not be publicly available.
-
- 5. The responsible party MAY change the registration at any time.
- The IANA will keep a record of all such changes, and make them
- available upon request.
-
- 6. The responsible party for the first registration of a "product"
- token MUST approve later registrations of a "version" token
- together with that "product" token before they can be registered.
-
- 7. If absolutely required, the IESG MAY reassign the responsibility
- for a token. This will normally only be used in the case when a
- responsible party cannot be contacted.
-
-9.9. Via
-
- The "Via" general-header field MUST be used by gateways and proxies
- to indicate the intermediate protocols and recipients between the
- user agent and the server on requests, and between the origin server
- and the client on responses. It is analogous to the "Received" field
- defined in Section 3.6.7 of [RFC5322] and is intended to be used for
- tracking message forwards, avoiding request loops, and identifying
- the protocol capabilities of all senders along the request/response
- chain.
-
- Via = "Via" ":" OWS Via-v
- Via-v = 1#( received-protocol RWS received-by
- [ RWS comment ] )
- received-protocol = [ protocol-name "/" ] protocol-version
- protocol-name = token
- protocol-version = token
- received-by = ( uri-host [ ":" port ] ) / pseudonym
- pseudonym = token
-
- The received-protocol indicates the protocol version of the message
- received by the server or client along each segment of the request/
- response chain. The received-protocol version is appended to the Via
- field value when the message is forwarded so that information about
- the protocol capabilities of upstream applications remains visible to
- all recipients.
-
-
-
-Fielding, et al. Expires February 5, 2011 [Page 57]
-
-Internet-Draft HTTP/1.1, Part 1 August 2010
-
-
- The protocol-name is optional if and only if it would be "HTTP". The
- received-by field is normally the host and optional port number of a
- recipient server or client that subsequently forwarded the message.
- However, if the real host is considered to be sensitive information,
- it MAY be replaced by a pseudonym. If the port is not given, it MAY
- be assumed to be the default port of the received-protocol.
-
- Multiple Via field values represent each proxy or gateway that has
- forwarded the message. Each recipient MUST append its information
- such that the end result is ordered according to the sequence of
- forwarding applications.
-
- Comments MAY be used in the Via header field to identify the software
- of the recipient proxy or gateway, analogous to the User-Agent and
- Server header fields. However, all comments in the Via field are
- optional and MAY be removed by any recipient prior to forwarding the
- message.
-
- For example, a request message could be sent from an HTTP/1.0 user
- agent to an internal proxy code-named "fred", which uses HTTP/1.1 to
- forward the request to a public proxy at p.example.net, which
- completes the request by forwarding it to the origin server at
- www.example.com. The request received by www.example.com would then
- have the following Via header field:
-
- Via: 1.0 fred, 1.1 p.example.net (Apache/1.1)
-
- Proxies and gateways used as a portal through a network firewall
- SHOULD NOT, by default, forward the names and ports of hosts within
- the firewall region. This information SHOULD only be propagated if
- explicitly enabled. If not enabled, the received-by host of any host
- behind the firewall SHOULD be replaced by an appropriate pseudonym
- for that host.
-
- For organizations that have strong privacy requirements for hiding
- internal structures, a proxy MAY combine an ordered subsequence of
- Via header field entries with identical received-protocol values into
- a single such entry. For example,
-
- Via: 1.0 ricky, 1.1 ethel, 1.1 fred, 1.0 lucy
-
- could be collapsed to
-
- Via: 1.0 ricky, 1.1 mertz, 1.0 lucy
-
- Applications SHOULD NOT combine multiple entries unless they are all
- under the same organizational control and the hosts have already been
- replaced by pseudonyms. Applications MUST NOT combine entries which
-
-
-
-Fielding, et al. Expires February 5, 2011 [Page 58]
-
-Internet-Draft HTTP/1.1, Part 1 August 2010
-
-
- have different received-protocol values.
-
-10. IANA Considerations
-
-10.1. Header Field Registration
-
- The Message Header Field Registry located at shall be
- updated with the permanent registrations below (see [RFC3864]):
-
- +-------------------+----------+----------+-------------+
- | Header Field Name | Protocol | Status | Reference |
- +-------------------+----------+----------+-------------+
- | Connection | http | standard | Section 9.1 |
- | Content-Length | http | standard | Section 9.2 |
- | Date | http | standard | Section 9.3 |
- | Host | http | standard | Section 9.4 |
- | TE | http | standard | Section 9.5 |
- | Trailer | http | standard | Section 9.6 |
- | Transfer-Encoding | http | standard | Section 9.7 |
- | Upgrade | http | standard | Section 9.8 |
- | Via | http | standard | Section 9.9 |
- +-------------------+----------+----------+-------------+
-
- The change controller is: "IETF (iesg@ietf.org) - Internet
- Engineering Task Force".
-
-10.2. URI Scheme Registration
-
- The entries for the "http" and "https" URI Schemes in the registry
- located at shall
- be updated to point to Sections 2.6.1 and 2.6.2 of this document (see
- [RFC4395]).
-
-10.3. Internet Media Type Registrations
-
- This document serves as the specification for the Internet media
- types "message/http" and "application/http". The following is to be
- registered with IANA (see [RFC4288]).
-
-10.3.1. Internet Media Type message/http
-
- The message/http type can be used to enclose a single HTTP request or
- response message, provided that it obeys the MIME restrictions for
- all "message" types regarding line length and encodings.
-
-
-
-
-
-
-Fielding, et al. Expires February 5, 2011 [Page 59]
-
-Internet-Draft HTTP/1.1, Part 1 August 2010
-
-
- Type name: message
-
- Subtype name: http
-
- Required parameters: none
-
- Optional parameters: version, msgtype
-
- version: The HTTP-Version number of the enclosed message (e.g.,
- "1.1"). If not present, the version can be determined from the
- first line of the body.
-
- msgtype: The message type -- "request" or "response". If not
- present, the type can be determined from the first line of the
- body.
-
- Encoding considerations: only "7bit", "8bit", or "binary" are
- permitted
-
- Security considerations: none
-
- Interoperability considerations: none
-
- Published specification: This specification (see Section 10.3.1).
-
- Applications that use this media type:
-
- Additional information:
-
- Magic number(s): none
-
- File extension(s): none
-
- Macintosh file type code(s): none
-
- Person and email address to contact for further information: See
- Authors Section.
-
- Intended usage: COMMON
-
- Restrictions on usage: none
-
- Author/Change controller: IESG
-
-
-
-
-
-
-
-
-Fielding, et al. Expires February 5, 2011 [Page 60]
-
-Internet-Draft HTTP/1.1, Part 1 August 2010
-
-
-10.3.2. Internet Media Type application/http
-
- The application/http type can be used to enclose a pipeline of one or
- more HTTP request or response messages (not intermixed).
-
- Type name: application
-
- Subtype name: http
-
- Required parameters: none
-
- Optional parameters: version, msgtype
-
- version: The HTTP-Version number of the enclosed messages (e.g.,
- "1.1"). If not present, the version can be determined from the
- first line of the body.
-
- msgtype: The message type -- "request" or "response". If not
- present, the type can be determined from the first line of the
- body.
-
- Encoding considerations: HTTP messages enclosed by this type are in
- "binary" format; use of an appropriate Content-Transfer-Encoding
- is required when transmitted via E-mail.
-
- Security considerations: none
-
- Interoperability considerations: none
-
- Published specification: This specification (see Section 10.3.2).
-
- Applications that use this media type:
-
- Additional information:
-
- Magic number(s): none
-
- File extension(s): none
-
- Macintosh file type code(s): none
-
- Person and email address to contact for further information: See
- Authors Section.
-
- Intended usage: COMMON
-
-
-
-
-
-
-Fielding, et al. Expires February 5, 2011 [Page 61]
-
-Internet-Draft HTTP/1.1, Part 1 August 2010
-
-
- Restrictions on usage: none
-
- Author/Change controller: IESG
-
-10.4. Transfer Coding Registry
-
- The registration procedure for HTTP Transfer Codings is now defined
- by Section 6.2.3 of this document.
-
- The HTTP Transfer Codings Registry located at
- shall be updated
- with the registrations below:
-
- +----------+--------------------------------------+-----------------+
- | Name | Description | Reference |
- +----------+--------------------------------------+-----------------+
- | chunked | Transfer in a series of chunks | Section 6.2.1 |
- | compress | UNIX "compress" program method | Section 6.2.2.1 |
- | deflate | "deflate" compression mechanism | Section 6.2.2.2 |
- | | ([RFC1951]) used inside the "zlib" | |
- | | data format ([RFC1950]) | |
- | gzip | Same as GNU zip [RFC1952] | Section 6.2.2.3 |
- +----------+--------------------------------------+-----------------+
-
-10.5. Upgrade Token Registration
-
- The registration procedure for HTTP Upgrade Tokens -- previously
- defined in Section 7.2 of [RFC2817] -- is now defined by
- Section 9.8.1 of this document.
-
- The HTTP Status Code Registry located at
- shall be
- updated with the registration below:
-
- +-------+---------------------------+-------------------------------+
- | Value | Description | Reference |
- +-------+---------------------------+-------------------------------+
- | HTTP | Hypertext Transfer | Section 2.5 of this |
- | | Protocol | specification |
- +-------+---------------------------+-------------------------------+
-
-11. Security Considerations
-
- This section is meant to inform application developers, information
- providers, and users of the security limitations in HTTP/1.1 as
- described by this document. The discussion does not include
- definitive solutions to the problems revealed, though it does make
- some suggestions for reducing security risks.
-
-
-
-Fielding, et al. Expires February 5, 2011 [Page 62]
-
-Internet-Draft HTTP/1.1, Part 1 August 2010
-
-
-11.1. Personal Information
-
- HTTP clients are often privy to large amounts of personal information
- (e.g., the user's name, location, mail address, passwords, encryption
- keys, etc.), and SHOULD be very careful to prevent unintentional
- leakage of this information. We very strongly recommend that a
- convenient interface be provided for the user to control
- dissemination of such information, and that designers and
- implementors be particularly careful in this area. History shows
- that errors in this area often create serious security and/or privacy
- problems and generate highly adverse publicity for the implementor's
- company.
-
-11.2. Abuse of Server Log Information
-
- A server is in the position to save personal data about a user's
- requests which might identify their reading patterns or subjects of
- interest. This information is clearly confidential in nature and its
- handling can be constrained by law in certain countries. People
- using HTTP to provide data are responsible for ensuring that such
- material is not distributed without the permission of any individuals
- that are identifiable by the published results.
-
-11.3. Attacks Based On File and Path Names
-
- Implementations of HTTP origin servers SHOULD be careful to restrict
- the documents returned by HTTP requests to be only those that were
- intended by the server administrators. If an HTTP server translates
- HTTP URIs directly into file system calls, the server MUST take
- special care not to serve files that were not intended to be
- delivered to HTTP clients. For example, UNIX, Microsoft Windows, and
- other operating systems use ".." as a path component to indicate a
- directory level above the current one. On such a system, an HTTP
- server MUST disallow any such construct in the request-target if it
- would otherwise allow access to a resource outside those intended to
- be accessible via the HTTP server. Similarly, files intended for
- reference only internally to the server (such as access control
- files, configuration files, and script code) MUST be protected from
- inappropriate retrieval, since they might contain sensitive
- information. Experience has shown that minor bugs in such HTTP
- server implementations have turned into security risks.
-
-11.4. DNS Spoofing
-
- Clients using HTTP rely heavily on the Domain Name Service, and are
- thus generally prone to security attacks based on the deliberate mis-
- association of IP addresses and DNS names. Clients need to be
- cautious in assuming the continuing validity of an IP number/DNS name
-
-
-
-Fielding, et al. Expires February 5, 2011 [Page 63]
-
-Internet-Draft HTTP/1.1, Part 1 August 2010
-
-
- association.
-
- In particular, HTTP clients SHOULD rely on their name resolver for
- confirmation of an IP number/DNS name association, rather than
- caching the result of previous host name lookups. Many platforms
- already can cache host name lookups locally when appropriate, and
- they SHOULD be configured to do so. It is proper for these lookups
- to be cached, however, only when the TTL (Time To Live) information
- reported by the name server makes it likely that the cached
- information will remain useful.
-
- If HTTP clients cache the results of host name lookups in order to
- achieve a performance improvement, they MUST observe the TTL
- information reported by DNS.
-
- If HTTP clients do not observe this rule, they could be spoofed when
- a previously-accessed server's IP address changes. As network
- renumbering is expected to become increasingly common [RFC1900], the
- possibility of this form of attack will grow. Observing this
- requirement thus reduces this potential security vulnerability.
-
- This requirement also improves the load-balancing behavior of clients
- for replicated servers using the same DNS name and reduces the
- likelihood of a user's experiencing failure in accessing sites which
- use that strategy.
-
-11.5. Proxies and Caching
-
- By their very nature, HTTP proxies are men-in-the-middle, and
- represent an opportunity for man-in-the-middle attacks. Compromise
- of the systems on which the proxies run can result in serious
- security and privacy problems. Proxies have access to security-
- related information, personal information about individual users and
- organizations, and proprietary information belonging to users and
- content providers. A compromised proxy, or a proxy implemented or
- configured without regard to security and privacy considerations,
- might be used in the commission of a wide range of potential attacks.
-
- Proxy operators need to protect the systems on which proxies run as
- they would protect any system that contains or transports sensitive
- information. In particular, log information gathered at proxies
- often contains highly sensitive personal information, and/or
- information about organizations. Log information needs to be
- carefully guarded, and appropriate guidelines for use need to be
- developed and followed. (Section 11.2).
-
- Proxy implementors need to consider the privacy and security
- implications of their design and coding decisions, and of the
-
-
-
-Fielding, et al. Expires February 5, 2011 [Page 64]
-
-Internet-Draft HTTP/1.1, Part 1 August 2010
-
-
- configuration options they provide to proxy operators (especially the
- default configuration).
-
- Users of a proxy need to be aware that proxies are no trustworthier
- than the people who run them; HTTP itself cannot solve this problem.
-
- The judicious use of cryptography, when appropriate, might suffice to
- protect against a broad range of security and privacy attacks. Such
- cryptography is beyond the scope of the HTTP/1.1 specification.
-
-11.6. Denial of Service Attacks on Proxies
-
- They exist. They are hard to defend against. Research continues.
- Beware.
-
-12. Acknowledgments
-
- HTTP has evolved considerably over the years. It has benefited from
- a large and active developer community--the many people who have
- participated on the www-talk mailing list--and it is that community
- which has been most responsible for the success of HTTP and of the
- World-Wide Web in general. Marc Andreessen, Robert Cailliau, Daniel
- W. Connolly, Bob Denny, John Franks, Jean-Francois Groff, Phillip M.
- Hallam-Baker, Hakon W. Lie, Ari Luotonen, Rob McCool, Lou Montulli,
- Dave Raggett, Tony Sanders, and Marc VanHeyningen deserve special
- recognition for their efforts in defining early aspects of the
- protocol.
-
- This document has benefited greatly from the comments of all those
- participating in the HTTP-WG. In addition to those already
- mentioned, the following individuals have contributed to this
- specification:
-
- Gary Adams, Harald Tveit Alvestrand, Keith Ball, Brian Behlendorf,
- Paul Burchard, Maurizio Codogno, Josh Cohen, Mike Cowlishaw, Roman
- Czyborra, Michael A. Dolan, Daniel DuBois, David J. Fiander, Alan
- Freier, Marc Hedlund, Greg Herlihy, Koen Holtman, Alex Hopmann, Bob
- Jernigan, Shel Kaphan, Rohit Khare, John Klensin, Martijn Koster,
- Alexei Kosut, David M. Kristol, Daniel LaLiberte, Ben Laurie, Paul J.
- Leach, Albert Lunde, John C. Mallery, Jean-Philippe Martin-Flatin,
- Mitra, David Morris, Gavin Nicol, Ross Patterson, Bill Perry, Jeffrey
- Perry, Scott Powers, Owen Rees, Luigi Rizzo, David Robinson, Marc
- Salomon, Rich Salz, Allan M. Schiffman, Jim Seidman, Chuck Shotton,
- Eric W. Sink, Simon E. Spero, Richard N. Taylor, Robert S. Thau, Bill
- (BearHeart) Weinman, Francois Yergeau, Mary Ellen Zurko.
-
- Thanks to the "cave men" of Palo Alto. You know who you are.
-
-
-
-
-Fielding, et al. Expires February 5, 2011 [Page 65]
-
-Internet-Draft HTTP/1.1, Part 1 August 2010
-
-
- Jim Gettys (the editor of [RFC2616]) wishes particularly to thank Roy
- Fielding, the editor of [RFC2068], along with John Klensin, Jeff
- Mogul, Paul Leach, Dave Kristol, Koen Holtman, John Franks, Josh
- Cohen, Alex Hopmann, Scott Lawrence, and Larry Masinter for their
- help. And thanks go particularly to Jeff Mogul and Scott Lawrence
- for performing the "MUST/MAY/SHOULD" audit.
-
- The Apache Group, Anselm Baird-Smith, author of Jigsaw, and Henrik
- Frystyk implemented RFC 2068 early, and we wish to thank them for the
- discovery of many of the problems that this document attempts to
- rectify.
-
- This specification makes heavy use of the augmented BNF and generic
- constructs defined by David H. Crocker for [RFC5234]. Similarly, it
- reuses many of the definitions provided by Nathaniel Borenstein and
- Ned Freed for MIME [RFC2045]. We hope that their inclusion in this
- specification will help reduce past confusion over the relationship
- between HTTP and Internet mail message formats.
-
-13. References
-
-13.1. Normative References
-
- [ISO-8859-1] International Organization for Standardization,
- "Information technology -- 8-bit single-byte coded
- graphic character sets -- Part 1: Latin alphabet No.
- 1", ISO/IEC 8859-1:1998, 1998.
-
- [Part2] Fielding, R., Ed., Gettys, J., Mogul, J., Frystyk, H.,
- Masinter, L., Leach, P., Berners-Lee, T., Lafon, Y.,
- Ed., and J. Reschke, Ed., "HTTP/1.1, part 2: Message
- Semantics", draft-ietf-httpbis-p2-semantics-11 (work in
- progress), August 2010.
-
- [Part3] Fielding, R., Ed., Gettys, J., Mogul, J., Frystyk, H.,
- Masinter, L., Leach, P., Berners-Lee, T., Lafon, Y.,
- Ed., and J. Reschke, Ed., "HTTP/1.1, part 3: Message
- Payload and Content Negotiation",
- draft-ietf-httpbis-p3-payload-11 (work in progress),
- August 2010.
-
- [Part6] Fielding, R., Ed., Gettys, J., Mogul, J., Frystyk, H.,
- Masinter, L., Leach, P., Berners-Lee, T., Lafon, Y.,
- Ed., Nottingham, M., Ed., and J. Reschke, Ed.,
- "HTTP/1.1, part 6: Caching",
- draft-ietf-httpbis-p6-cache-11 (work in progress),
- August 2010.
-
-
-
-
-Fielding, et al. Expires February 5, 2011 [Page 66]
-
-Internet-Draft HTTP/1.1, Part 1 August 2010
-
-
- [RFC1950] Deutsch, L. and J-L. Gailly, "ZLIB Compressed Data
- Format Specification version 3.3", RFC 1950, May 1996.
-
- RFC 1950 is an Informational RFC, thus it might be less
- stable than this specification. On the other hand,
- this downward reference was present since the
- publication of RFC 2068 in 1997 ([RFC2068]), therefore
- it is unlikely to cause problems in practice. See also
- [BCP97].
-
- [RFC1951] Deutsch, P., "DEFLATE Compressed Data Format
- Specification version 1.3", RFC 1951, May 1996.
-
- RFC 1951 is an Informational RFC, thus it might be less
- stable than this specification. On the other hand,
- this downward reference was present since the
- publication of RFC 2068 in 1997 ([RFC2068]), therefore
- it is unlikely to cause problems in practice. See also
- [BCP97].
-
- [RFC1952] Deutsch, P., Gailly, J-L., Adler, M., Deutsch, L., and
- G. Randers-Pehrson, "GZIP file format specification
- version 4.3", RFC 1952, May 1996.
-
- RFC 1952 is an Informational RFC, thus it might be less
- stable than this specification. On the other hand,
- this downward reference was present since the
- publication of RFC 2068 in 1997 ([RFC2068]), therefore
- it is unlikely to cause problems in practice. See also
- [BCP97].
-
- [RFC2119] Bradner, S., "Key words for use in RFCs to Indicate
- Requirement Levels", BCP 14, RFC 2119, March 1997.
-
- [RFC3986] Berners-Lee, T., Fielding, R., and L. Masinter,
- "Uniform Resource Identifier (URI): Generic Syntax",
- RFC 3986, STD 66, January 2005.
-
- [RFC5234] Crocker, D., Ed. and P. Overell, "Augmented BNF for
- Syntax Specifications: ABNF", STD 68, RFC 5234,
- January 2008.
-
- [USASCII] American National Standards Institute, "Coded Character
- Set -- 7-bit American Standard Code for Information
- Interchange", ANSI X3.4, 1986.
-
-
-
-
-
-
-Fielding, et al. Expires February 5, 2011 [Page 67]
-
-Internet-Draft HTTP/1.1, Part 1 August 2010
-
-
-13.2. Informative References
-
- [BCP97] Klensin, J. and S. Hartman, "Handling Normative
- References to Standards-Track Documents", BCP 97,
- RFC 4897, June 2007.
-
- [Kri2001] Kristol, D., "HTTP Cookies: Standards, Privacy, and
- Politics", ACM Transactions on Internet Technology Vol.
- 1, #2, November 2001,
- .
-
- [Nie1997] Frystyk, H., Gettys, J., Prud'hommeaux, E., Lie, H.,
- and C. Lilley, "Network Performance Effects of
- HTTP/1.1, CSS1, and PNG", ACM Proceedings of the ACM
- SIGCOMM '97 conference on Applications, technologies,
- architectures, and protocols for computer communication
- SIGCOMM '97, September 1997,
- .
-
- [Pad1995] Padmanabhan, V. and J. Mogul, "Improving HTTP Latency",
- Computer Networks and ISDN Systems v. 28, pp. 25-35,
- December 1995,
- .
-
- [RFC1123] Braden, R., "Requirements for Internet Hosts -
- Application and Support", STD 3, RFC 1123,
- October 1989.
-
- [RFC1305] Mills, D., "Network Time Protocol (Version 3)
- Specification, Implementation", RFC 1305, March 1992.
-
- [RFC1900] Carpenter, B. and Y. Rekhter, "Renumbering Needs Work",
- RFC 1900, February 1996.
-
- [RFC1945] Berners-Lee, T., Fielding, R., and H. Nielsen,
- "Hypertext Transfer Protocol -- HTTP/1.0", RFC 1945,
- May 1996.
-
- [RFC2045] Freed, N. and N. Borenstein, "Multipurpose Internet
- Mail Extensions (MIME) Part One: Format of Internet
- Message Bodies", RFC 2045, November 1996.
-
- [RFC2047] Moore, K., "MIME (Multipurpose Internet Mail
- Extensions) Part Three: Message Header Extensions for
- Non-ASCII Text", RFC 2047, November 1996.
-
- [RFC2068] Fielding, R., Gettys, J., Mogul, J., Nielsen, H., and
- T. Berners-Lee, "Hypertext Transfer Protocol --
-
-
-
-Fielding, et al. Expires February 5, 2011 [Page 68]
-
-Internet-Draft HTTP/1.1, Part 1 August 2010
-
-
- HTTP/1.1", RFC 2068, January 1997.
-
- [RFC2109] Kristol, D. and L. Montulli, "HTTP State Management
- Mechanism", RFC 2109, February 1997.
-
- [RFC2145] Mogul, J., Fielding, R., Gettys, J., and H. Nielsen,
- "Use and Interpretation of HTTP Version Numbers",
- RFC 2145, May 1997.
-
- [RFC2616] Fielding, R., Gettys, J., Mogul, J., Frystyk, H.,
- Masinter, L., Leach, P., and T. Berners-Lee, "Hypertext
- Transfer Protocol -- HTTP/1.1", RFC 2616, June 1999.
-
- [RFC2817] Khare, R. and S. Lawrence, "Upgrading to TLS Within
- HTTP/1.1", RFC 2817, May 2000.
-
- [RFC2818] Rescorla, E., "HTTP Over TLS", RFC 2818, May 2000.
-
- [RFC2965] Kristol, D. and L. Montulli, "HTTP State Management
- Mechanism", RFC 2965, October 2000.
-
- [RFC3864] Klyne, G., Nottingham, M., and J. Mogul, "Registration
- Procedures for Message Header Fields", BCP 90,
- RFC 3864, September 2004.
-
- [RFC4288] Freed, N. and J. Klensin, "Media Type Specifications
- and Registration Procedures", BCP 13, RFC 4288,
- December 2005.
-
- [RFC4395] Hansen, T., Hardie, T., and L. Masinter, "Guidelines
- and Registration Procedures for New URI Schemes",
- BCP 115, RFC 4395, February 2006.
-
- [RFC5226] Narten, T. and H. Alvestrand, "Guidelines for Writing
- an IANA Considerations Section in RFCs", BCP 26,
- RFC 5226, May 2008.
-
- [RFC5322] Resnick, P., "Internet Message Format", RFC 5322,
- October 2008.
-
- [Spe] Spero, S., "Analysis of HTTP Performance Problems",
- .
-
- [Tou1998] Touch, J., Heidemann, J., and K. Obraczka, "Analysis of
- HTTP Performance", ISI Research Report ISI/RR-98-463,
- Aug 1998, .
-
- (original report dated Aug. 1996)
-
-
-
-Fielding, et al. Expires February 5, 2011 [Page 69]
-
-Internet-Draft HTTP/1.1, Part 1 August 2010
-
-
-Appendix A. Tolerant Applications
-
- Although this document specifies the requirements for the generation
- of HTTP/1.1 messages, not all applications will be correct in their
- implementation. We therefore recommend that operational applications
- be tolerant of deviations whenever those deviations can be
- interpreted unambiguously.
-
- Clients SHOULD be tolerant in parsing the Status-Line and servers
- SHOULD be tolerant when parsing the Request-Line. In particular,
- they SHOULD accept any amount of WSP characters between fields, even
- though only a single SP is required.
-
- The line terminator for header fields is the sequence CRLF. However,
- we recommend that applications, when parsing such headers, recognize
- a single LF as a line terminator and ignore the leading CR.
-
- The character set of a representation SHOULD be labeled as the lowest
- common denominator of the character codes used within that
- representation, with the exception that not labeling the
- representation is preferred over labeling the representation with the
- labels US-ASCII or ISO-8859-1. See [Part3].
-
- Additional rules for requirements on parsing and encoding of dates
- and other potential problems with date encodings include:
-
- o HTTP/1.1 clients and caches SHOULD assume that an RFC-850 date
- which appears to be more than 50 years in the future is in fact in
- the past (this helps solve the "year 2000" problem).
-
- o Although all date formats are specified to be case-sensitive,
- recipients SHOULD match day, week and timezone names case-
- insensitively.
-
- o An HTTP/1.1 implementation MAY internally represent a parsed
- Expires date as earlier than the proper value, but MUST NOT
- internally represent a parsed Expires date as later than the
- proper value.
-
- o All expiration-related calculations MUST be done in GMT. The
- local time zone MUST NOT influence the calculation or comparison
- of an age or expiration time.
-
- o If an HTTP header incorrectly carries a date value with a time
- zone other than GMT, it MUST be converted into GMT using the most
- conservative possible conversion.
-
-
-
-
-
-Fielding, et al. Expires February 5, 2011 [Page 70]
-
-Internet-Draft HTTP/1.1, Part 1 August 2010
-
-
-Appendix B. Compatibility with Previous Versions
-
- HTTP has been in use by the World-Wide Web global information
- initiative since 1990. The first version of HTTP, later referred to
- as HTTP/0.9, was a simple protocol for hypertext data transfer across
- the Internet with only a single method and no metadata. HTTP/1.0, as
- defined by [RFC1945], added a range of request methods and MIME-like
- messaging that could include metadata about the data transferred and
- modifiers on the request/response semantics. However, HTTP/1.0 did
- not sufficiently take into consideration the effects of hierarchical
- proxies, caching, the need for persistent connections, or name-based
- virtual hosts. The proliferation of incompletely-implemented
- applications calling themselves "HTTP/1.0" further necessitated a
- protocol version change in order for two communicating applications
- to determine each other's true capabilities.
-
- HTTP/1.1 remains compatible with HTTP/1.0 by including more stringent
- requirements that enable reliable implementations, adding only those
- new features that will either be safely ignored by an HTTP/1.0
- recipient or only sent when communicating with a party advertising
- compliance with HTTP/1.1.
-
- It is beyond the scope of a protocol specification to mandate
- compliance with previous versions. HTTP/1.1 was deliberately
- designed, however, to make supporting previous versions easy. It is
- worth noting that, at the time of composing this specification, we
- would expect general-purpose HTTP/1.1 servers to:
-
- o understand any valid request in the format of HTTP/1.0 and 1.1;
-
- o respond appropriately with a message in the same major version
- used by the client.
-
- And we would expect HTTP/1.1 clients to:
-
- o understand any valid response in the format of HTTP/1.0 or 1.1.
-
- For most implementations of HTTP/1.0, each connection is established
- by the client prior to the request and closed by the server after
- sending the response. Some implementations implement the Keep-Alive
- version of persistent connections described in Section 19.7.1 of
- [RFC2068].
-
-B.1. Changes from HTTP/1.0
-
- This section summarizes major differences between versions HTTP/1.0
- and HTTP/1.1.
-
-
-
-
-Fielding, et al. Expires February 5, 2011 [Page 71]
-
-Internet-Draft HTTP/1.1, Part 1 August 2010
-
-
-B.1.1. Changes to Simplify Multi-homed Web Servers and Conserve IP
- Addresses
-
- The requirements that clients and servers support the Host request-
- header, report an error if the Host request-header (Section 9.4) is
- missing from an HTTP/1.1 request, and accept absolute URIs
- (Section 4.1.2) are among the most important changes defined by this
- specification.
-
- Older HTTP/1.0 clients assumed a one-to-one relationship of IP
- addresses and servers; there was no other established mechanism for
- distinguishing the intended server of a request than the IP address
- to which that request was directed. The changes outlined above will
- allow the Internet, once older HTTP clients are no longer common, to
- support multiple Web sites from a single IP address, greatly
- simplifying large operational Web servers, where allocation of many
- IP addresses to a single host has created serious problems. The
- Internet will also be able to recover the IP addresses that have been
- allocated for the sole purpose of allowing special-purpose domain
- names to be used in root-level HTTP URLs. Given the rate of growth
- of the Web, and the number of servers already deployed, it is
- extremely important that all implementations of HTTP (including
- updates to existing HTTP/1.0 applications) correctly implement these
- requirements:
-
- o Both clients and servers MUST support the Host request-header.
-
- o A client that sends an HTTP/1.1 request MUST send a Host header.
-
- o Servers MUST report a 400 (Bad Request) error if an HTTP/1.1
- request does not include a Host request-header.
-
- o Servers MUST accept absolute URIs.
-
-B.2. Compatibility with HTTP/1.0 Persistent Connections
-
- Some clients and servers might wish to be compatible with some
- previous implementations of persistent connections in HTTP/1.0
- clients and servers. Persistent connections in HTTP/1.0 are
- explicitly negotiated as they are not the default behavior. HTTP/1.0
- experimental implementations of persistent connections are faulty,
- and the new facilities in HTTP/1.1 are designed to rectify these
- problems. The problem was that some existing HTTP/1.0 clients might
- send Keep-Alive to a proxy server that doesn't understand Connection,
- which would then erroneously forward it to the next inbound server,
- which would establish the Keep-Alive connection and result in a hung
- HTTP/1.0 proxy waiting for the close on the response. The result is
- that HTTP/1.0 clients must be prevented from using Keep-Alive when
-
-
-
-Fielding, et al. Expires February 5, 2011 [Page 72]
-
-Internet-Draft HTTP/1.1, Part 1 August 2010
-
-
- talking to proxies.
-
- However, talking to proxies is the most important use of persistent
- connections, so that prohibition is clearly unacceptable. Therefore,
- we need some other mechanism for indicating a persistent connection
- is desired, which is safe to use even when talking to an old proxy
- that ignores Connection. Persistent connections are the default for
- HTTP/1.1 messages; we introduce a new keyword (Connection: close) for
- declaring non-persistence. See Section 9.1.
-
- The original HTTP/1.0 form of persistent connections (the Connection:
- Keep-Alive and Keep-Alive header) is documented in Section 19.7.1 of
- [RFC2068].
-
-B.3. Changes from RFC 2616
-
- Empty list elements in list productions have been deprecated.
- (Section 1.2.1)
-
- Rules about implicit linear whitespace between certain grammar
- productions have been removed; now it's only allowed when
- specifically pointed out in the ABNF. The NUL character is no longer
- allowed in comment and quoted-string text. The quoted-pair rule no
- longer allows escaping control characters other than HTAB. Non-ASCII
- content in header fields and reason phrase has been obsoleted and
- made opaque (the TEXT rule was removed) (Section 1.2.2)
-
- Clarify that HTTP-Version is case sensitive. (Section 2.5)
-
- Remove reference to non-existent identity transfer-coding value
- tokens. (Sections 6.2 and 3.3)
-
- Require that invalid whitespace around field-names be rejected.
- (Section 3.2)
-
- Update use of abs_path production from RFC1808 to the path-absolute +
- query components of RFC3986. (Section 4.1.2)
-
- Clarification that the chunk length does not include the count of the
- octets in the chunk header and trailer. Furthermore disallowed line
- folding in chunk extensions. (Section 6.2.1)
-
- Remove hard limit of two connections per server. (Section 7.1.4)
-
- Clarify exactly when close connection options must be sent.
- (Section 9.1)
-
-Appendix C. Collected ABNF
-
-
-
-Fielding, et al. Expires February 5, 2011 [Page 73]
-
-Internet-Draft HTTP/1.1, Part 1 August 2010
-
-
- BWS = OWS
-
- Cache-Control =
- Chunked-Body = *chunk last-chunk trailer-part CRLF
- Connection = "Connection:" OWS Connection-v
- Connection-v = *( "," OWS ) connection-token *( OWS "," [ OWS
- connection-token ] )
- Content-Length = "Content-Length:" OWS 1*Content-Length-v
- Content-Length-v = 1*DIGIT
-
- Date = "Date:" OWS Date-v
- Date-v = HTTP-date
-
- GMT = %x47.4D.54 ; GMT
-
- HTTP-Prot-Name = %x48.54.54.50 ; HTTP
- HTTP-Version = HTTP-Prot-Name "/" 1*DIGIT "." 1*DIGIT
- HTTP-date = rfc1123-date / obs-date
- HTTP-message = start-line *( header-field CRLF ) CRLF [ message-body
- ]
- Host = "Host:" OWS Host-v
- Host-v = uri-host [ ":" port ]
-
- MIME-Version =
- Method = token
-
- OWS = *( [ obs-fold ] WSP )
-
- Pragma =
-
- RWS = 1*( [ obs-fold ] WSP )
- Reason-Phrase = *( WSP / VCHAR / obs-text )
- Request = Request-Line *( header-field CRLF ) CRLF [ message-body ]
- Request-Line = Method SP request-target SP HTTP-Version CRLF
- Response = Status-Line *( header-field CRLF ) CRLF [ message-body ]
-
- Status-Code = 3DIGIT
- Status-Line = HTTP-Version SP Status-Code SP Reason-Phrase CRLF
-
- TE = "TE:" OWS TE-v
- TE-v = [ ( "," / t-codings ) *( OWS "," [ OWS t-codings ] ) ]
- Trailer = "Trailer:" OWS Trailer-v
- Trailer-v = *( "," OWS ) field-name *( OWS "," [ OWS field-name ] )
- Transfer-Encoding = "Transfer-Encoding:" OWS Transfer-Encoding-v
- Transfer-Encoding-v = *( "," OWS ) transfer-coding *( OWS "," [ OWS
- transfer-coding ] )
-
- URI-reference =
-
-
-
-Fielding, et al. Expires February 5, 2011 [Page 74]
-
-Internet-Draft HTTP/1.1, Part 1 August 2010
-
-
- Upgrade = "Upgrade:" OWS Upgrade-v
- Upgrade-v = *( "," OWS ) product *( OWS "," [ OWS product ] )
-
- Via = "Via:" OWS Via-v
- Via-v = *( "," OWS ) received-protocol RWS received-by [ RWS comment
- ] *( OWS "," [ OWS received-protocol RWS received-by [ RWS comment ]
- ] )
-
- Warning =
-
- absolute-URI =
- asctime-date = day-name SP date3 SP time-of-day SP year
- attribute = token
- authority =
-
- chunk = chunk-size *WSP [ chunk-ext ] CRLF chunk-data CRLF
- chunk-data = 1*OCTET
- chunk-ext = *( ";" *WSP chunk-ext-name [ "=" chunk-ext-val ] *WSP )
- chunk-ext-name = token
- chunk-ext-val = token / quoted-str-nf
- chunk-size = 1*HEXDIG
- comment = "(" *( ctext / quoted-cpair / comment ) ")"
- connection-token = token
- ctext = OWS / %x21-27 ; '!'-'''
- / %x2A-5B ; '*'-'['
- / %x5D-7E ; ']'-'~'
- / obs-text
-
- date1 = day SP month SP year
- date2 = day "-" month "-" 2DIGIT
- date3 = month SP ( 2DIGIT / ( SP DIGIT ) )
- day = 2DIGIT
- day-name = %x4D.6F.6E ; Mon
- / %x54.75.65 ; Tue
- / %x57.65.64 ; Wed
- / %x54.68.75 ; Thu
- / %x46.72.69 ; Fri
- / %x53.61.74 ; Sat
- / %x53.75.6E ; Sun
- day-name-l = %x4D.6F.6E.64.61.79 ; Monday
- / %x54.75.65.73.64.61.79 ; Tuesday
- / %x57.65.64.6E.65.73.64.61.79 ; Wednesday
- / %x54.68.75.72.73.64.61.79 ; Thursday
- / %x46.72.69.64.61.79 ; Friday
- / %x53.61.74.75.72.64.61.79 ; Saturday
- / %x53.75.6E.64.61.79 ; Sunday
-
- field-content = *( WSP / VCHAR / obs-text )
-
-
-
-Fielding, et al. Expires February 5, 2011 [Page 75]
-
-Internet-Draft HTTP/1.1, Part 1 August 2010
-
-
- field-name = token
- field-value = *( field-content / OWS )
-
- general-header = Cache-Control / Connection / Date / Pragma / Trailer
- / Transfer-Encoding / Upgrade / Via / Warning / MIME-Version
-
- header-field = field-name ":" OWS [ field-value ] OWS
- hour = 2DIGIT
- http-URI = "http://" authority path-abempty [ "?" query ]
- https-URI = "https://" authority path-abempty [ "?" query ]
-
- last-chunk = 1*"0" *WSP [ chunk-ext ] CRLF
-
- message-body = *OCTET
- minute = 2DIGIT
- month = %x4A.61.6E ; Jan
- / %x46.65.62 ; Feb
- / %x4D.61.72 ; Mar
- / %x41.70.72 ; Apr
- / %x4D.61.79 ; May
- / %x4A.75.6E ; Jun
- / %x4A.75.6C ; Jul
- / %x41.75.67 ; Aug
- / %x53.65.70 ; Sep
- / %x4F.63.74 ; Oct
- / %x4E.6F.76 ; Nov
- / %x44.65.63 ; Dec
-
- obs-date = rfc850-date / asctime-date
- obs-fold = CRLF
- obs-text = %x80-FF
-
- partial-URI = relative-part [ "?" query ]
- path-abempty =
- path-absolute =
- port =
- product = token [ "/" product-version ]
- product-version = token
- protocol-name = token
- protocol-version = token
- pseudonym = token
-
- qdtext = OWS / "!" / %x23-5B ; '#'-'['
- / %x5D-7E ; ']'-'~'
- / obs-text
- qdtext-nf = WSP / "!" / %x23-5B ; '#'-'['
- / %x5D-7E ; ']'-'~'
- / obs-text
-
-
-
-Fielding, et al. Expires February 5, 2011 [Page 76]
-
-Internet-Draft HTTP/1.1, Part 1 August 2010
-
-
- query =
- quoted-cpair = "\" ( WSP / VCHAR / obs-text )
- quoted-pair = "\" ( WSP / VCHAR / obs-text )
- quoted-str-nf = DQUOTE *( qdtext-nf / quoted-pair ) DQUOTE
- quoted-string = DQUOTE *( qdtext / quoted-pair ) DQUOTE
- qvalue = ( "0" [ "." *3DIGIT ] ) / ( "1" [ "." *3"0" ] )
-
- received-by = ( uri-host [ ":" port ] ) / pseudonym
- received-protocol = [ protocol-name "/" ] protocol-version
- relative-part =
- request-header =
- request-target = "*" / absolute-URI / ( path-absolute [ "?" query ] )
- / authority
- response-header =
- rfc1123-date = day-name "," SP date1 SP time-of-day SP GMT
- rfc850-date = day-name-l "," SP date2 SP time-of-day SP GMT
-
- second = 2DIGIT
- special = "(" / ")" / "<" / ">" / "@" / "," / ";" / ":" / "\" /
- DQUOTE / "/" / "[" / "]" / "?" / "=" / "{" / "}"
- start-line = Request-Line / Status-Line
-
- t-codings = "trailers" / ( transfer-extension [ te-params ] )
- tchar = "!" / "#" / "$" / "%" / "&" / "'" / "*" / "+" / "-" / "." /
- "^" / "_" / "`" / "|" / "~" / DIGIT / ALPHA
- te-ext = OWS ";" OWS token [ "=" word ]
- te-params = OWS ";" OWS "q=" qvalue *te-ext
- time-of-day = hour ":" minute ":" second
- token = 1*tchar
- trailer-part = *( header-field CRLF )
- transfer-coding = "chunked" / "compress" / "deflate" / "gzip" /
- transfer-extension
- transfer-extension = token *( OWS ";" OWS transfer-parameter )
- transfer-parameter = attribute BWS "=" BWS value
-
- uri-host =
-
- value = word
-
- word = token / quoted-string
-
- year = 4DIGIT
-
-
-
-
-
-
-
-
-
-Fielding, et al. Expires February 5, 2011 [Page 77]
-
-Internet-Draft HTTP/1.1, Part 1 August 2010
-
-
- ABNF diagnostics:
-
- ; Chunked-Body defined but not used
- ; Content-Length defined but not used
- ; HTTP-message defined but not used
- ; Host defined but not used
- ; Request defined but not used
- ; Response defined but not used
- ; TE defined but not used
- ; URI-reference defined but not used
- ; general-header defined but not used
- ; http-URI defined but not used
- ; https-URI defined but not used
- ; partial-URI defined but not used
- ; request-header defined but not used
- ; response-header defined but not used
- ; special defined but not used
-
-Appendix D. Change Log (to be removed by RFC Editor before publication)
-
-D.1. Since RFC2616
-
- Extracted relevant partitions from [RFC2616].
-
-D.2. Since draft-ietf-httpbis-p1-messaging-00
-
- Closed issues:
-
- o : "HTTP Version
- should be case sensitive"
- ()
-
- o : "'unsafe'
- characters" ()
-
- o : "Chunk Size
- Definition" ()
-
- o : "Message Length"
- ()
-
- o : "Media Type
- Registrations" ()
-
- o : "URI includes
- query" ()
-
-
-
-
-
-Fielding, et al. Expires February 5, 2011 [Page 78]
-
-Internet-Draft HTTP/1.1, Part 1 August 2010
-
-
- o : "No close on
- 1xx responses" ()
-
- o : "Remove
- 'identity' token references"
- ()
-
- o : "Import query
- BNF"
-
- o : "qdtext BNF"
-
- o : "Normative and
- Informative references"
-
- o : "RFC2606
- Compliance"
-
- o : "RFC977
- reference"
-
- o : "RFC1700
- references"
-
- o : "inconsistency
- in date format explanation"
-
- o : "Date reference
- typo"
-
- o : "Informative
- references"
-
- o : "ISO-8859-1
- Reference"
-
- o : "Normative up-
- to-date references"
-
- Other changes:
-
- o Update media type registrations to use RFC4288 template.
-
- o Use names of RFC4234 core rules DQUOTE and WSP, fix broken ABNF
- for chunk-data (work in progress on
- )
-
-
-
-
-
-Fielding, et al. Expires February 5, 2011 [Page 79]
-
-Internet-Draft HTTP/1.1, Part 1 August 2010
-
-
-D.3. Since draft-ietf-httpbis-p1-messaging-01
-
- Closed issues:
-
- o : "Bodies on GET
- (and other) requests"
-
- o : "Updating to
- RFC4288"
-
- o : "Status Code
- and Reason Phrase"
-
- o : "rel_path not
- used"
-
- Ongoing work on ABNF conversion
- ():
-
- o Get rid of duplicate BNF rule names ("host" -> "uri-host",
- "trailer" -> "trailer-part").
-
- o Avoid underscore character in rule names ("http_URL" -> "http-
- URL", "abs_path" -> "path-absolute").
-
- o Add rules for terms imported from URI spec ("absoluteURI",
- "authority", "path-absolute", "port", "query", "relativeURI",
- "host) -- these will have to be updated when switching over to
- RFC3986.
-
- o Synchronize core rules with RFC5234.
-
- o Get rid of prose rules that span multiple lines.
-
- o Get rid of unused rules LOALPHA and UPALPHA.
-
- o Move "Product Tokens" section (back) into Part 1, as "token" is
- used in the definition of the Upgrade header.
-
- o Add explicit references to BNF syntax and rules imported from
- other parts of the specification.
-
- o Rewrite prose rule "token" in terms of "tchar", rewrite prose rule
- "TEXT".
-
-
-
-
-
-
-
-Fielding, et al. Expires February 5, 2011 [Page 80]
-
-Internet-Draft HTTP/1.1, Part 1 August 2010
-
-
-D.4. Since draft-ietf-httpbis-p1-messaging-02
-
- Closed issues:
-
- o : "HTTP-date vs.
- rfc1123-date"
-
- o : "WS in quoted-
- pair"
-
- Ongoing work on IANA Message Header Registration
- ():
-
- o Reference RFC 3984, and update header registrations for headers
- defined in this document.
-
- Ongoing work on ABNF conversion
- ():
-
- o Replace string literals when the string really is case-sensitive
- (HTTP-Version).
-
-D.5. Since draft-ietf-httpbis-p1-messaging-03
-
- Closed issues:
-
- o : "Connection
- closing"
-
- o : "Move
- registrations and registry information to IANA Considerations"
-
- o : "need new URL
- for PAD1995 reference"
-
- o : "IANA
- Considerations: update HTTP URI scheme registration"
-
- o : "Cite HTTPS
- URI scheme definition"
-
- o : "List-type
- headers vs Set-Cookie"
-
- Ongoing work on ABNF conversion
- ():
-
-
-
-
-
-Fielding, et al. Expires February 5, 2011 [Page 81]
-
-Internet-Draft HTTP/1.1, Part 1 August 2010
-
-
- o Replace string literals when the string really is case-sensitive
- (HTTP-Date).
-
- o Replace HEX by HEXDIG for future consistence with RFC 5234's core
- rules.
-
-D.6. Since draft-ietf-httpbis-p1-messaging-04
-
- Closed issues:
-
- o : "Out-of-date
- reference for URIs"
-
- o : "RFC 2822 is
- updated by RFC 5322"
-
- Ongoing work on ABNF conversion
- ():
-
- o Use "/" instead of "|" for alternatives.
-
- o Get rid of RFC822 dependency; use RFC5234 plus extensions instead.
-
- o Only reference RFC 5234's core rules.
-
- o Introduce new ABNF rules for "bad" whitespace ("BWS"), optional
- whitespace ("OWS") and required whitespace ("RWS").
-
- o Rewrite ABNFs to spell out whitespace rules, factor out header
- value format definitions.
-
-D.7. Since draft-ietf-httpbis-p1-messaging-05
-
- Closed issues:
-
- o : "Header LWS"
-
- o : "Sort 1.3
- Terminology"
-
- o : "RFC2047
- encoded words"
-
- o : "Character
- Encodings in TEXT"
-
- o : "Line Folding"
-
-
-
-
-Fielding, et al. Expires February 5, 2011 [Page 82]
-
-Internet-Draft HTTP/1.1, Part 1 August 2010
-
-
- o : "OPTIONS * and
- proxies"
-
- o : "Reason-Phrase
- BNF"
-
- o : "Use of TEXT"
-
- o : "Join
- "Differences Between HTTP Entities and RFC 2045 Entities"?"
-
- o : "RFC822
- reference left in discussion of date formats"
-
- Final work on ABNF conversion
- ():
-
- o Rewrite definition of list rules, deprecate empty list elements.
-
- o Add appendix containing collected and expanded ABNF.
-
- Other changes:
-
- o Rewrite introduction; add mostly new Architecture Section.
-
- o Move definition of quality values from Part 3 into Part 1; make TE
- request header grammar independent of accept-params (defined in
- Part 3).
-
-D.8. Since draft-ietf-httpbis-p1-messaging-06
-
- Closed issues:
-
- o : "base for
- numeric protocol elements"
-
- o : "comment ABNF"
-
- Partly resolved issues:
-
- o : "205 Bodies"
- (took out language that implied that there might be methods for
- which a request body MUST NOT be included)
-
- o : "editorial
- improvements around HTTP-date"
-
-
-
-
-
-Fielding, et al. Expires February 5, 2011 [Page 83]
-
-Internet-Draft HTTP/1.1, Part 1 August 2010
-
-
-D.9. Since draft-ietf-httpbis-p1-messaging-07
-
- Closed issues:
-
- o : "Repeating
- single-value headers"
-
- o : "increase
- connection limit"
-
- o : "IP addresses
- in URLs"
-
- o : "take over
- HTTP Upgrade Token Registry"
-
- o : "CR and LF in
- chunk extension values"
-
- o : "HTTP/0.9
- support"
-
- o : "pick IANA
- policy (RFC5226) for Transfer Coding / Content Coding"
-
- o : "move
- definitions of gzip/deflate/compress to part 1"
-
- o : "disallow
- control characters in quoted-pair"
-
- Partly resolved issues:
-
- o : "update IANA
- requirements wrt Transfer-Coding values" (add the IANA
- Considerations subsection)
-
-D.10. Since draft-ietf-httpbis-p1-messaging-08
-
- Closed issues:
-
- o : "header
- parsing, treatment of leading and trailing OWS"
-
- Partly resolved issues:
-
- o : "Placement of
- 13.5.1 and 13.5.2"
-
-
-
-Fielding, et al. Expires February 5, 2011 [Page 84]
-
-Internet-Draft HTTP/1.1, Part 1 August 2010
-
-
- o : "use of term
- "word" when talking about header structure"
-
-D.11. Since draft-ietf-httpbis-p1-messaging-09
-
- Closed issues:
-
- o : "Clarification
- of the term 'deflate'"
-
- o : "OPTIONS * and
- proxies"
-
- o : "MIME-Version
- not listed in P1, general header fields"
-
- o : "IANA registry
- for content/transfer encodings"
-
- o : "Case-
- sensitivity of HTTP-date"
-
- o : "use of term
- "word" when talking about header structure"
-
- Partly resolved issues:
-
- o : "Term for the
- requested resource's URI"
-
-D.12. Since draft-ietf-httpbis-p1-messaging-10
-
- Closed issues:
-
- o : "Connection
- Closing"
-
- o : "Delimiting
- messages with multipart/byteranges"
-
- o : "Handling
- multiple Content-Length headers"
-
- o : "Clarify
- entity / representation / variant terminology"
-
- o : "consider
- removing the 'changes from 2068' sections"
-
-
-
-Fielding, et al. Expires February 5, 2011 [Page 85]
-
-Internet-Draft HTTP/1.1, Part 1 August 2010
-
-
- Partly resolved issues:
-
- o : "HTTP(s) URI
- scheme definitions"
-
-Index
-
- A
- application/http Media Type 61
-
- B
- browser 10
-
- C
- cache 13
- cacheable 14
- chunked (Coding Format) 35
- client 10
- Coding Format
- chunked 35
- compress 38
- deflate 38
- gzip 38
- compress (Coding Format) 38
- connection 10
- Connection header 49
- Content-Length header 50
-
- D
- Date header 51
- deflate (Coding Format) 38
- downstream 12
-
- E
- effective request URI 29
-
- G
- gateway 13
- Grammar
- absolute-URI 16
- ALPHA 7
- asctime-date 34
- attribute 34
- authority 16
- BWS 9
- chunk 35
- chunk-data 35
- chunk-ext 35
-
-
-
-Fielding, et al. Expires February 5, 2011 [Page 86]
-
-Internet-Draft HTTP/1.1, Part 1 August 2010
-
-
- chunk-ext-name 35
- chunk-ext-val 35
- chunk-size 35
- Chunked-Body 35
- comment 22
- Connection 49
- connection-token 49
- Connection-v 49
- Content-Length 50
- Content-Length-v 50
- CR 7
- CRLF 7
- ctext 22
- CTL 7
- Date 51
- Date-v 51
- date1 33
- date2 34
- date3 34
- day 33
- day-name 33
- day-name-l 33
- DIGIT 7
- DQUOTE 7
- extension-code 32
- extension-method 26
- field-content 20
- field-name 20
- field-value 20
- general-header 26
- GMT 33
- header-field 20
- HEXDIG 7
- Host 52
- Host-v 52
- hour 33
- HTTP-date 32
- HTTP-message 19
- HTTP-Prot-Name 15
- http-URI 16
- HTTP-Version 15
- https-URI 18
- last-chunk 35
- LF 7
- message-body 22
- Method 26
- minute 33
- month 33
-
-
-
-Fielding, et al. Expires February 5, 2011 [Page 87]
-
-Internet-Draft HTTP/1.1, Part 1 August 2010
-
-
- obs-date 33
- obs-text 10
- OCTET 7
- OWS 9
- path-absolute 16
- port 16
- product 39
- product-version 39
- protocol-name 57
- protocol-version 57
- pseudonym 57
- qdtext 10
- qdtext-nf 35
- query 16
- quoted-cpair 22
- quoted-pair 10
- quoted-str-nf 35
- quoted-string 10
- qvalue 39
- Reason-Phrase 32
- received-by 57
- received-protocol 57
- Request 26
- Request-Line 26
- request-target 27
- Response 31
- rfc850-date 34
- rfc1123-date 33
- RWS 9
- second 33
- SP 7
- special 9
- Status-Code 32
- Status-Line 31
- t-codings 53
- tchar 9
- TE 53
- te-ext 53
- te-params 53
- TE-v 53
- time-of-day 33
- token 9
- Trailer 54
- trailer-part 35
- Trailer-v 54
- transfer-coding 34
- Transfer-Encoding 55
- Transfer-Encoding-v 55
-
-
-
-Fielding, et al. Expires February 5, 2011 [Page 88]
-
-Internet-Draft HTTP/1.1, Part 1 August 2010
-
-
- transfer-extension 34
- transfer-parameter 34
- Upgrade 55
- Upgrade-v 55
- uri-host 16
- URI-reference 16
- value 34
- VCHAR 7
- Via 57
- Via-v 57
- word 9
- WSP 7
- year 33
- gzip (Coding Format) 38
-
- H
- header field 19
- header section 19
- Headers
- Connection 49
- Content-Length 50
- Date 51
- Host 52
- TE 53
- Trailer 54
- Transfer-Encoding 55
- Upgrade 55
- Via 57
- headers 19
- Host header 52
- http URI scheme 16
- https URI scheme 18
-
- I
- inbound 12
- intermediary 12
-
- M
- Media Type
- application/http 61
- message/http 59
- message 11
- message/http Media Type 59
-
- O
- origin server 10
- outbound 12
-
-
-
-
-Fielding, et al. Expires February 5, 2011 [Page 89]
-
-Internet-Draft HTTP/1.1, Part 1 August 2010
-
-
- P
- proxy 12
-
- R
- request 11
- resource 16
- response 11
- reverse proxy 13
-
- S
- server 10
- spider 10
-
- T
- target resource 29
- TE header 53
- Trailer header 54
- Transfer-Encoding header 55
- tunnel 13
-
- U
- Upgrade header 55
- upstream 12
- URI scheme
- http 16
- https 18
- user agent 10
-
- V
- Via header 57
-
-Authors' Addresses
-
- Roy T. Fielding (editor)
- Day Software
- 23 Corporate Plaza DR, Suite 280
- Newport Beach, CA 92660
- USA
-
- Phone: +1-949-706-5300
- Fax: +1-949-706-5305
- EMail: fielding@gbiv.com
- URI: http://roy.gbiv.com/
-
-
-
-
-
-
-
-
-Fielding, et al. Expires February 5, 2011 [Page 90]
-
-Internet-Draft HTTP/1.1, Part 1 August 2010
-
-
- Jim Gettys
- Alcatel-Lucent Bell Labs
- 21 Oak Knoll Road
- Carlisle, MA 01741
- USA
-
- EMail: jg@freedesktop.org
- URI: http://gettys.wordpress.com/
-
-
- Jeffrey C. Mogul
- Hewlett-Packard Company
- HP Labs, Large Scale Systems Group
- 1501 Page Mill Road, MS 1177
- Palo Alto, CA 94304
- USA
-
- EMail: JeffMogul@acm.org
-
-
- Henrik Frystyk Nielsen
- Microsoft Corporation
- 1 Microsoft Way
- Redmond, WA 98052
- USA
-
- EMail: henrikn@microsoft.com
-
-
- Larry Masinter
- Adobe Systems, Incorporated
- 345 Park Ave
- San Jose, CA 95110
- USA
-
- EMail: LMM@acm.org
- URI: http://larry.masinter.net/
-
-
- Paul J. Leach
- Microsoft Corporation
- 1 Microsoft Way
- Redmond, WA 98052
-
- EMail: paulle@microsoft.com
-
-
-
-
-
-
-Fielding, et al. Expires February 5, 2011 [Page 91]
-
-Internet-Draft HTTP/1.1, Part 1 August 2010
-
-
- Tim Berners-Lee
- World Wide Web Consortium
- MIT Computer Science and Artificial Intelligence Laboratory
- The Stata Center, Building 32
- 32 Vassar Street
- Cambridge, MA 02139
- USA
-
- EMail: timbl@w3.org
- URI: http://www.w3.org/People/Berners-Lee/
-
-
- Yves Lafon (editor)
- World Wide Web Consortium
- W3C / ERCIM
- 2004, rte des Lucioles
- Sophia-Antipolis, AM 06902
- France
-
- EMail: ylafon@w3.org
- URI: http://www.raubacapeu.net/people/yves/
-
-
- Julian F. Reschke (editor)
- greenbytes GmbH
- Hafenweg 16
- Muenster, NW 48155
- Germany
-
- Phone: +49 251 2807760
- Fax: +49 251 2807761
- EMail: julian.reschke@greenbytes.de
- URI: http://greenbytes.de/tech/webdav/
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-Fielding, et al. Expires February 5, 2011 [Page 92]
-
diff --git a/vendor/sabre/dav/docs/draft-ietf-httpbis-p4-conditional-11.txt b/vendor/sabre/dav/docs/draft-ietf-httpbis-p4-conditional-11.txt
deleted file mode 100644
index 2dd1b7fc2..000000000
--- a/vendor/sabre/dav/docs/draft-ietf-httpbis-p4-conditional-11.txt
+++ /dev/null
@@ -1,1512 +0,0 @@
-
-
-
-HTTPbis Working Group R. Fielding, Ed.
-Internet-Draft Day Software
-Obsoletes: 2616 (if approved) J. Gettys
-Intended status: Standards Track Alcatel-Lucent
-Expires: February 5, 2011 J. Mogul
- HP
- H. Frystyk
- Microsoft
- L. Masinter
- Adobe Systems
- P. Leach
- Microsoft
- T. Berners-Lee
- W3C/MIT
- Y. Lafon, Ed.
- W3C
- J. Reschke, Ed.
- greenbytes
- August 4, 2010
-
-
- HTTP/1.1, part 4: Conditional Requests
- draft-ietf-httpbis-p4-conditional-11
-
-Abstract
-
- The Hypertext Transfer Protocol (HTTP) is an application-level
- protocol for distributed, collaborative, hypermedia information
- systems. HTTP has been in use by the World Wide Web global
- information initiative since 1990. This document is Part 4 of the
- seven-part specification that defines the protocol referred to as
- "HTTP/1.1" and, taken together, obsoletes RFC 2616. Part 4 defines
- request header fields for indicating conditional requests and the
- rules for constructing responses to those requests.
-
-Editorial Note (To be removed by RFC Editor)
-
- Discussion of this draft should take place on the HTTPBIS working
- group mailing list (ietf-http-wg@w3.org). The current issues list is
- at and related
- documents (including fancy diffs) can be found at
- .
-
- The changes in this draft are summarized in Appendix C.12.
-
-Status of This Memo
-
- This Internet-Draft is submitted in full conformance with the
-
-
-
-Fielding, et al. Expires February 5, 2011 [Page 1]
-
-Internet-Draft HTTP/1.1, Part 4 August 2010
-
-
- 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 February 5, 2011.
-
-Copyright Notice
-
- Copyright (c) 2010 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.
-
- This document may contain material from IETF Documents or IETF
- Contributions published or made publicly available before November
- 10, 2008. The person(s) controlling the copyright in some of this
- material may not have granted the IETF Trust the right to allow
- modifications of such material outside the IETF Standards Process.
- Without obtaining an adequate license from the person(s) controlling
- the copyright in such materials, this document may not be modified
- outside the IETF Standards Process, and derivative works of it may
- not be created outside the IETF Standards Process, except to format
- it for publication as an RFC or to translate it into languages other
- than English.
-
-
-
-
-
-
-
-
-
-
-
-Fielding, et al. Expires February 5, 2011 [Page 2]
-
-Internet-Draft HTTP/1.1, Part 4 August 2010
-
-
-Table of Contents
-
- 1. Introduction . . . . . . . . . . . . . . . . . . . . . . . . . 4
- 1.1. Requirements . . . . . . . . . . . . . . . . . . . . . . . 4
- 1.2. Syntax Notation . . . . . . . . . . . . . . . . . . . . . 4
- 1.2.1. Core Rules . . . . . . . . . . . . . . . . . . . . . . 5
- 1.2.2. ABNF Rules defined in other Parts of the
- Specification . . . . . . . . . . . . . . . . . . . . 5
- 2. Entity-Tags . . . . . . . . . . . . . . . . . . . . . . . . . 5
- 2.1. Example: Entity-tags varying on Content-Negotiated
- Resources . . . . . . . . . . . . . . . . . . . . . . . . 6
- 3. Status Code Definitions . . . . . . . . . . . . . . . . . . . 7
- 3.1. 304 Not Modified . . . . . . . . . . . . . . . . . . . . . 7
- 3.2. 412 Precondition Failed . . . . . . . . . . . . . . . . . 7
- 4. Weak and Strong Validators . . . . . . . . . . . . . . . . . . 8
- 5. Rules for When to Use Entity-tags and Last-Modified Dates . . 10
- 6. Header Field Definitions . . . . . . . . . . . . . . . . . . . 12
- 6.1. ETag . . . . . . . . . . . . . . . . . . . . . . . . . . . 12
- 6.2. If-Match . . . . . . . . . . . . . . . . . . . . . . . . . 13
- 6.3. If-Modified-Since . . . . . . . . . . . . . . . . . . . . 14
- 6.4. If-None-Match . . . . . . . . . . . . . . . . . . . . . . 16
- 6.5. If-Unmodified-Since . . . . . . . . . . . . . . . . . . . 17
- 6.6. Last-Modified . . . . . . . . . . . . . . . . . . . . . . 18
- 7. IANA Considerations . . . . . . . . . . . . . . . . . . . . . 18
- 7.1. Status Code Registration . . . . . . . . . . . . . . . . . 19
- 7.2. Header Field Registration . . . . . . . . . . . . . . . . 19
- 8. Security Considerations . . . . . . . . . . . . . . . . . . . 19
- 9. Acknowledgments . . . . . . . . . . . . . . . . . . . . . . . 19
- 10. References . . . . . . . . . . . . . . . . . . . . . . . . . . 19
- 10.1. Normative References . . . . . . . . . . . . . . . . . . . 19
- 10.2. Informative References . . . . . . . . . . . . . . . . . . 20
- Appendix A. Changes from RFC 2616 . . . . . . . . . . . . . . . . 20
- Appendix B. Collected ABNF . . . . . . . . . . . . . . . . . . . 21
- Appendix C. Change Log (to be removed by RFC Editor before
- publication) . . . . . . . . . . . . . . . . . . . . 21
- C.1. Since RFC2616 . . . . . . . . . . . . . . . . . . . . . . 21
- C.2. Since draft-ietf-httpbis-p4-conditional-00 . . . . . . . . 22
- C.3. Since draft-ietf-httpbis-p4-conditional-01 . . . . . . . . 22
- C.4. Since draft-ietf-httpbis-p4-conditional-02 . . . . . . . . 22
- C.5. Since draft-ietf-httpbis-p4-conditional-03 . . . . . . . . 22
- C.6. Since draft-ietf-httpbis-p4-conditional-04 . . . . . . . . 23
- C.7. Since draft-ietf-httpbis-p4-conditional-05 . . . . . . . . 23
- C.8. Since draft-ietf-httpbis-p4-conditional-06 . . . . . . . . 23
- C.9. Since draft-ietf-httpbis-p4-conditional-07 . . . . . . . . 23
- C.10. Since draft-ietf-httpbis-p4-conditional-08 . . . . . . . . 23
- C.11. Since draft-ietf-httpbis-p4-conditional-09 . . . . . . . . 23
- C.12. Since draft-ietf-httpbis-p4-conditional-10 . . . . . . . . 24
- Index . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 24
-
-
-
-Fielding, et al. Expires February 5, 2011 [Page 3]
-
-Internet-Draft HTTP/1.1, Part 4 August 2010
-
-
-1. Introduction
-
- This document defines HTTP/1.1 response metadata for indicating
- potential changes to payload content, including modification time
- stamps and opaque entity-tags, and the HTTP conditional request
- mechanisms that allow preconditions to be placed on a request method.
- Conditional GET requests allow for efficient cache updates. Other
- conditional request methods are used to protect against overwriting
- or misunderstanding the state of a resource that has been changed
- unbeknownst to the requesting client.
-
- This document is currently disorganized in order to minimize the
- changes between drafts and enable reviewers to see the smaller errata
- changes. The next draft will reorganize the sections to better
- reflect the content. In particular, the sections on resource
- metadata will be discussed first and then followed by each
- conditional request-header, concluding with a definition of
- precedence and the expectation of ordering strong validator checks
- before weak validator checks. It is likely that more content from
- [Part6] will migrate to this part, where appropriate. The current
- mess reflects how widely dispersed these topics and associated
- requirements had become in [RFC2616].
-
-1.1. Requirements
-
- 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 implementation is not compliant if it fails to satisfy one or more
- of the "MUST" or "REQUIRED" level requirements for the protocols it
- implements. An implementation that satisfies all the "MUST" or
- "REQUIRED" level and all the "SHOULD" level requirements for its
- protocols is said to be "unconditionally compliant"; one that
- satisfies all the "MUST" level requirements but not all the "SHOULD"
- level requirements for its protocols is said to be "conditionally
- compliant".
-
-1.2. Syntax Notation
-
- This specification uses the ABNF syntax defined in Section 1.2 of
- [Part1] (which extends the syntax defined in [RFC5234] with a list
- rule). Appendix B shows the collected ABNF, with the list rule
- expanded.
-
- The following core rules are included by reference, as defined in
- [RFC5234], Appendix B.1: ALPHA (letters), CR (carriage return), CRLF
- (CR LF), CTL (controls), DIGIT (decimal 0-9), DQUOTE (double quote),
-
-
-
-Fielding, et al. Expires February 5, 2011 [Page 4]
-
-Internet-Draft HTTP/1.1, Part 4 August 2010
-
-
- HEXDIG (hexadecimal 0-9/A-F/a-f), LF (line feed), OCTET (any 8-bit
- sequence of data), SP (space), VCHAR (any visible USASCII character),
- and WSP (whitespace).
-
-1.2.1. Core Rules
-
- The core rules below are defined in Section 1.2.2 of [Part1]:
-
- quoted-string =
- OWS =
-
-1.2.2. ABNF Rules defined in other Parts of the Specification
-
- The ABNF rules below are defined in other parts:
-
- HTTP-date =
-
-2. Entity-Tags
-
- Entity-tags are used for comparing two or more representations of the
- same resource. HTTP/1.1 uses entity-tags in the ETag (Section 6.1),
- If-Match (Section 6.2), If-None-Match (Section 6.4), and If-Range
- (Section 5.3 of [Part5]) header fields. The definition of how they
- are used and compared as cache validators is in Section 4. An
- entity-tag consists of an opaque quoted string, possibly prefixed by
- a weakness indicator.
-
- entity-tag = [ weak ] opaque-tag
- weak = %x57.2F ; "W/", case-sensitive
- opaque-tag = quoted-string
-
- A "strong entity-tag" MAY be shared by two representations of a
- resource only if they are equivalent by octet equality.
-
- A "weak entity-tag", indicated by the "W/" prefix, MAY be shared by
- two representations of a resource only if the representations are
- equivalent and could be substituted for each other with no
- significant change in semantics. A weak entity-tag can only be used
- for weak comparison.
-
- An entity-tag MUST be unique across all versions of all
- representations associated with a particular resource. A given
- entity-tag value MAY be used for representations obtained by requests
- on different URIs. The use of the same entity-tag value in
- conjunction with representations obtained by requests on different
- URIs does not imply the equivalence of those representations.
-
-
-
-
-
-Fielding, et al. Expires February 5, 2011 [Page 5]
-
-Internet-Draft HTTP/1.1, Part 4 August 2010
-
-
-2.1. Example: Entity-tags varying on Content-Negotiated Resources
-
- Consider a resource that is subject to content negotiation (Section 5
- of [Part3]), and where the representations returned upon a GET
- request vary based on the Accept-Encoding request header field
- (Section 6.3 of [Part3]):
-
- >> Request:
-
- GET /index HTTP/1.1
- Host: www.example.com
- Accept-Encoding: gzip
-
-
- In this case, the response might or might not use the gzip content
- coding. If it does not, the response might look like:
-
- >> Response:
-
- HTTP/1.1 200 OK
- Date: Thu, 26 Mar 2010 00:05:00 GMT
- ETag: "123-a"
- Content-Length: 70
- Vary: Accept-Encoding
- Content-Type: text/plain
-
- Hello World!
- Hello World!
- Hello World!
- Hello World!
- Hello World!
-
- An alternative representation that does use gzip content coding would
- be:
-
- >> Response:
-
- HTTP/1.1 200 OK
- Date: Thu, 26 Mar 2010 00:05:00 GMT
- ETag: "123-b"
- Content-Length: 43
- Vary: Accept-Encoding
- Content-Type: text/plain
- Content-Encoding: gzip
-
- ...binary data...
-
-
-
-
-
-Fielding, et al. Expires February 5, 2011 [Page 6]
-
-Internet-Draft HTTP/1.1, Part 4 August 2010
-
-
- Note: Content codings are a property of the representation, so
- therefore an entity-tag of an encoded representation must be
- distinct from an unencoded representation to prevent conflicts
- during cache updates and range requests. In contrast, transfer
- codings (Section 6.2 of [Part1]) apply only during message
- transfer and do not require distinct entity-tags.
-
-3. Status Code Definitions
-
-3.1. 304 Not Modified
-
- If the client has performed a conditional GET request and access is
- allowed, but the document has not been modified, the server SHOULD
- respond with this status code. The 304 response MUST NOT contain a
- message-body, and thus is always terminated by the first empty line
- after the header fields.
-
- A 304 response MUST include a Date header field (Section 9.3 of
- [Part1]) unless its omission is required by Section 9.3.1 of [Part1].
- If a 200 response to the same request would have included any of the
- header fields Cache-Control, Content-Location, ETag, Expires, Last-
- Modified, or Vary, then those same header fields MUST be sent in a
- 304 response.
-
- Since the goal of a 304 response is to minimize information transfer
- when the recipient already has one or more cached representations,
- the response SHOULD NOT include representation metadata other than
- the above listed fields unless said metadata exists for the purpose
- of guiding cache updates (e.g., future HTTP extensions).
-
- If a 304 response includes an entity-tag that indicates a
- representation not currently cached, then the recipient MUST NOT use
- the 304 to update its own cache. If that conditional request
- originated with an outbound client, such as a user agent with its own
- cache sending a conditional GET to a shared proxy, then the 304
- response MAY be forwarded to the outbound client. Otherwise,
- disregard the response and repeat the request without the
- conditional.
-
- If a cache uses a received 304 response to update a cache entry, the
- cache MUST update the entry to reflect any new field values given in
- the response.
-
-3.2. 412 Precondition Failed
-
- The precondition given in one or more of the request-header fields
- evaluated to false when it was tested on the server. This response
- code allows the client to place preconditions on the current resource
-
-
-
-Fielding, et al. Expires February 5, 2011 [Page 7]
-
-Internet-Draft HTTP/1.1, Part 4 August 2010
-
-
- metadata (header field data) and thus prevent the requested method
- from being applied to a resource other than the one intended.
-
-4. Weak and Strong Validators
-
- Since both origin servers and caches will compare two validators to
- decide if they represent the same or different representations, one
- normally would expect that if the representation (including both
- representation header fields and representation body) changes in any
- way, then the associated validator would change as well. If this is
- true, then we call this validator a "strong validator".
-
- However, there might be cases when a server prefers to change the
- validator only on semantically significant changes, and not when
- insignificant aspects of the representation change. A validator that
- does not always change when the representation changes is a "weak
- validator".
-
- An entity-tag is normally a strong validator, but the protocol
- provides a mechanism to tag an entity-tag as "weak". One can think
- of a strong validator as one that changes whenever the sequence of
- bits in a representation changes, while a weak value changes whenever
- the meaning of a representation changes. Alternatively, one can
- think of a strong validator as part of an identifier for a specific
- representation, whereas a weak validator is part of an identifier for
- a set of semantically equivalent representations.
-
- Note: One example of a strong validator is an integer that is
- incremented in stable storage every time a representation is
- changed.
-
- A representation's modification time, if defined with only one-
- second resolution, could be a weak validator, since it is possible
- that the representation might be modified twice during a single
- second.
-
- Support for weak validators is optional. However, weak validators
- allow for more efficient caching of equivalent objects; for
- example, a hit counter on a site is probably good enough if it is
- updated every few days or weeks, and any value during that period
- is likely "good enough" to be equivalent.
-
- A "use" of a validator is either when a client generates a request
- and includes the validator in a validating header field, or when a
- server compares two validators.
-
- Strong validators are usable in any context. Weak validators are
- only usable in contexts that do not depend on exact equality of a
-
-
-
-Fielding, et al. Expires February 5, 2011 [Page 8]
-
-Internet-Draft HTTP/1.1, Part 4 August 2010
-
-
- representation. For example, either kind is usable for a normal
- conditional GET. However, only a strong validator is usable for a
- sub-range retrieval, since otherwise the client might end up with an
- internally inconsistent representation.
-
- Clients MUST NOT use weak validators in range requests ([Part5]).
-
- The only function that HTTP/1.1 defines on validators is comparison.
- There are two validator comparison functions, depending on whether
- the comparison context allows the use of weak validators or not:
-
- o The strong comparison function: in order to be considered equal,
- both opaque-tags MUST be identical character-by-character, and
- both MUST NOT be weak.
-
- o The weak comparison function: in order to be considered equal,
- both opaque-tags MUST be identical character-by-character, but
- either or both of them MAY be tagged as "weak" without affecting
- the result.
-
- The example below shows the results for a set of entity-tag pairs,
- and both the weak and strong comparison function results:
-
- +--------+--------+-------------------+-----------------+
- | ETag 1 | ETag 2 | Strong Comparison | Weak Comparison |
- +--------+--------+-------------------+-----------------+
- | W/"1" | W/"1" | no match | match |
- | W/"1" | W/"2" | no match | no match |
- | W/"1" | "1" | no match | match |
- | "1" | "1" | match | match |
- +--------+--------+-------------------+-----------------+
-
- An entity-tag is strong unless it is explicitly tagged as weak.
- Section 2 gives the syntax for entity-tags.
-
- A Last-Modified time, when used as a validator in a request, is
- implicitly weak unless it is possible to deduce that it is strong,
- using the following rules:
-
- o The validator is being compared by an origin server to the actual
- current validator for the representation and,
-
- o That origin server reliably knows that the associated
- representation did not change twice during the second covered by
- the presented validator.
-
- or
-
-
-
-
-Fielding, et al. Expires February 5, 2011 [Page 9]
-
-Internet-Draft HTTP/1.1, Part 4 August 2010
-
-
- o The validator is about to be used by a client in an If-Modified-
- Since or If-Unmodified-Since header, because the client has a
- cache entry for the associated representation, and
-
- o That cache entry includes a Date value, which gives the time when
- the origin server sent the original response, and
-
- o The presented Last-Modified time is at least 60 seconds before the
- Date value.
-
- or
-
- o The validator is being compared by an intermediate cache to the
- validator stored in its cache entry for the representation, and
-
- o That cache entry includes a Date value, which gives the time when
- the origin server sent the original response, and
-
- o The presented Last-Modified time is at least 60 seconds before the
- Date value.
-
- This method relies on the fact that if two different responses were
- sent by the origin server during the same second, but both had the
- same Last-Modified time, then at least one of those responses would
- have a Date value equal to its Last-Modified time. The arbitrary 60-
- second limit guards against the possibility that the Date and Last-
- Modified values are generated from different clocks, or at somewhat
- different times during the preparation of the response. An
- implementation MAY use a value larger than 60 seconds, if it is
- believed that 60 seconds is too short.
-
- If a client wishes to perform a sub-range retrieval on a value for
- which it has only a Last-Modified time and no opaque validator, it
- MAY do this only if the Last-Modified time is strong in the sense
- described here.
-
- A cache or origin server receiving a conditional range request
- ([Part5]) MUST use the strong comparison function to evaluate the
- condition.
-
- These rules allow HTTP/1.1 caches and clients to safely perform sub-
- range retrievals on values that have been obtained from HTTP/1.0
- servers.
-
-5. Rules for When to Use Entity-tags and Last-Modified Dates
-
- We adopt a set of rules and recommendations for origin servers,
- clients, and caches regarding when various validator types ought to
-
-
-
-Fielding, et al. Expires February 5, 2011 [Page 10]
-
-Internet-Draft HTTP/1.1, Part 4 August 2010
-
-
- be used, and for what purposes.
-
- HTTP/1.1 origin servers:
-
- o SHOULD send an entity-tag validator unless it is not feasible to
- generate one.
-
- o MAY send a weak entity-tag instead of a strong entity-tag, if
- performance considerations support the use of weak entity-tags, or
- if it is unfeasible to send a strong entity-tag.
-
- o SHOULD send a Last-Modified value if it is feasible to send one,
- unless the risk of a breakdown in semantic transparency that could
- result from using this date in an If-Modified-Since header would
- lead to serious problems.
-
- In other words, the preferred behavior for an HTTP/1.1 origin server
- is to send both a strong entity-tag and a Last-Modified value.
-
- In order to be legal, a strong entity-tag MUST change whenever the
- associated representation changes in any way. A weak entity-tag
- SHOULD change whenever the associated representation changes in a
- semantically significant way.
-
- Note: In order to provide semantically transparent caching, an
- origin server must avoid reusing a specific strong entity-tag
- value for two different representations, or reusing a specific
- weak entity-tag value for two semantically different
- representations. Cache entries might persist for arbitrarily long
- periods, regardless of expiration times, so it might be
- inappropriate to expect that a cache will never again attempt to
- validate an entry using a validator that it obtained at some point
- in the past.
-
- HTTP/1.1 clients:
-
- o MUST use that entity-tag in any cache-conditional request (using
- If-Match or If-None-Match) if an entity-tag has been provided by
- the origin server.
-
- o SHOULD use the Last-Modified value in non-subrange cache-
- conditional requests (using If-Modified-Since) if only a Last-
- Modified value has been provided by the origin server.
-
- o MAY use the Last-Modified value in subrange cache-conditional
- requests (using If-Unmodified-Since) if only a Last-Modified value
- has been provided by an HTTP/1.0 origin server. The user agent
- SHOULD provide a way to disable this, in case of difficulty.
-
-
-
-Fielding, et al. Expires February 5, 2011 [Page 11]
-
-Internet-Draft HTTP/1.1, Part 4 August 2010
-
-
- o SHOULD use both validators in cache-conditional requests if both
- an entity-tag and a Last-Modified value have been provided by the
- origin server. This allows both HTTP/1.0 and HTTP/1.1 caches to
- respond appropriately.
-
- An HTTP/1.1 origin server, upon receiving a conditional request that
- includes both a Last-Modified date (e.g., in an If-Modified-Since or
- If-Unmodified-Since header field) and one or more entity-tags (e.g.,
- in an If-Match, If-None-Match, or If-Range header field) as cache
- validators, MUST NOT return a response status code of 304 (Not
- Modified) unless doing so is consistent with all of the conditional
- header fields in the request.
-
- An HTTP/1.1 caching proxy, upon receiving a conditional request that
- includes both a Last-Modified date and one or more entity-tags as
- cache validators, MUST NOT return a locally cached response to the
- client unless that cached response is consistent with all of the
- conditional header fields in the request.
-
- Note: The general principle behind these rules is that HTTP/1.1
- servers and clients ought to transmit as much non-redundant
- information as is available in their responses and requests.
- HTTP/1.1 systems receiving this information will make the most
- conservative assumptions about the validators they receive.
-
- HTTP/1.0 clients and caches will ignore entity-tags. Generally,
- last-modified values received or used by these systems will
- support transparent and efficient caching, and so HTTP/1.1 origin
- servers should provide Last-Modified values. In those rare cases
- where the use of a Last-Modified value as a validator by an
- HTTP/1.0 system could result in a serious problem, then HTTP/1.1
- origin servers should not provide one.
-
-6. Header Field Definitions
-
- This section defines the syntax and semantics of HTTP/1.1 header
- fields related to conditional requests.
-
-6.1. ETag
-
- The "ETag" response-header field provides the current value of the
- entity-tag (see Section 2) for one representation of the target
- resource. An entity-tag is intended for use as a resource-local
- identifier for differentiating between representations of the same
- resource that vary over time or via content negotiation (see
- Section 4).
-
- ETag = "ETag" ":" OWS ETag-v
-
-
-
-Fielding, et al. Expires February 5, 2011 [Page 12]
-
-Internet-Draft HTTP/1.1, Part 4 August 2010
-
-
- ETag-v = entity-tag
-
- Examples:
-
- ETag: "xyzzy"
- ETag: W/"xyzzy"
- ETag: ""
-
- An entity-tag provides an "opaque" cache validator that allows for
- more reliable validation than modification dates in situations where
- it is inconvenient to store modification dates, where the one-second
- resolution of HTTP date values is not sufficient, or where the origin
- server wishes to avoid certain paradoxes that might arise from the
- use of modification dates.
-
- The principle behind entity-tags is that only the service author
- knows the semantics of a resource well enough to select an
- appropriate cache validation mechanism, and the specification of any
- validator comparison function more complex than byte-equality would
- open up a can of worms. Thus, comparisons of any other headers
- (except Last-Modified, for compatibility with HTTP/1.0) are never
- used for purposes of validating a cache entry.
-
-6.2. If-Match
-
- The "If-Match" request-header field is used to make a request method
- conditional. A client that has one or more representations
- previously obtained from the resource can verify that one of those
- representations is current by including a list of their associated
- entity-tags in the If-Match header field.
-
- This allows efficient updates of cached information with a minimum
- amount of transaction overhead. It is also used when updating
- resources, to prevent inadvertent modification of the wrong version
- of a resource. As a special case, the value "*" matches any current
- representation of the resource.
-
- If-Match = "If-Match" ":" OWS If-Match-v
- If-Match-v = "*" / 1#entity-tag
-
- If any of the entity-tags match the entity-tag of the representation
- that would have been returned in the response to a similar GET
- request (without the If-Match header) on that resource, or if "*" is
- given and any current representation exists for that resource, then
- the server MAY perform the requested method as if the If-Match header
- field did not exist.
-
- If none of the entity-tags match, or if "*" is given and no current
-
-
-
-Fielding, et al. Expires February 5, 2011 [Page 13]
-
-Internet-Draft HTTP/1.1, Part 4 August 2010
-
-
- representation exists, the server MUST NOT perform the requested
- method, and MUST return a 412 (Precondition Failed) response. This
- behavior is most useful when the client wants to prevent an updating
- method, such as PUT, from modifying a resource that has changed since
- the client last retrieved it.
-
- If the request would, without the If-Match header field, result in
- anything other than a 2xx or 412 status code, then the If-Match
- header MUST be ignored.
-
- The meaning of "If-Match: *" is that the method SHOULD be performed
- if the representation selected by the origin server (or by a cache,
- possibly using the Vary mechanism, see Section 3.5 of [Part6])
- exists, and MUST NOT be performed if the representation does not
- exist.
-
- A request intended to update a resource (e.g., a PUT) MAY include an
- If-Match header field to signal that the request method MUST NOT be
- applied if the representation corresponding to the If-Match value (a
- single entity-tag) is no longer a representation of that resource.
- This allows the user to indicate that they do not wish the request to
- be successful if the resource has been changed without their
- knowledge. Examples:
-
- If-Match: "xyzzy"
- If-Match: "xyzzy", "r2d2xxxx", "c3piozzzz"
- If-Match: *
-
- The result of a request having both an If-Match header field and
- either an If-None-Match or an If-Modified-Since header fields is
- undefined by this specification.
-
-6.3. If-Modified-Since
-
- The "If-Modified-Since" request-header field is used to make a
- request method conditional by date: if the representation that would
- have been transferred in a 200 response to a GET request has not been
- modified since the time specified in this field, then do not perform
- the method; instead, respond as detailed below.
-
- If-Modified-Since = "If-Modified-Since" ":" OWS
- If-Modified-Since-v
- If-Modified-Since-v = HTTP-date
-
- An example of the field is:
-
- If-Modified-Since: Sat, 29 Oct 1994 19:43:31 GMT
-
-
-
-
-Fielding, et al. Expires February 5, 2011 [Page 14]
-
-Internet-Draft HTTP/1.1, Part 4 August 2010
-
-
- A GET method with an If-Modified-Since header and no Range header
- requests that the representation be transferred only if it has been
- modified since the date given by the If-Modified-Since header. The
- algorithm for determining this includes the following cases:
-
- 1. If the request would normally result in anything other than a 200
- (OK) status code, or if the passed If-Modified-Since date is
- invalid, the response is exactly the same as for a normal GET. A
- date which is later than the server's current time is invalid.
-
- 2. If the representation has been modified since the If-Modified-
- Since date, the response is exactly the same as for a normal GET.
-
- 3. If the representation has not been modified since a valid If-
- Modified-Since date, the server SHOULD return a 304 (Not
- Modified) response.
-
- The purpose of this feature is to allow efficient updates of cached
- information with a minimum amount of transaction overhead.
-
- Note: The Range request-header field modifies the meaning of If-
- Modified-Since; see Section 5.4 of [Part5] for full details.
-
- Note: If-Modified-Since times are interpreted by the server, whose
- clock might not be synchronized with the client.
-
- Note: When handling an If-Modified-Since header field, some
- servers will use an exact date comparison function, rather than a
- less-than function, for deciding whether to send a 304 (Not
- Modified) response. To get best results when sending an If-
- Modified-Since header field for cache validation, clients are
- advised to use the exact date string received in a previous Last-
- Modified header field whenever possible.
-
- Note: If a client uses an arbitrary date in the If-Modified-Since
- header instead of a date taken from the Last-Modified header for
- the same request, the client needs to be aware that this date is
- interpreted in the server's understanding of time. Unsynchronized
- clocks and rounding problems, due to the different encodings of
- time between the client and server, are concerns. This includes
- the possibility of race conditions if the document has changed
- between the time it was first requested and the If-Modified-Since
- date of a subsequent request, and the possibility of clock-skew-
- related problems if the If-Modified-Since date is derived from the
- client's clock without correction to the server's clock.
- Corrections for different time bases between client and server are
- at best approximate due to network latency.
-
-
-
-
-Fielding, et al. Expires February 5, 2011 [Page 15]
-
-Internet-Draft HTTP/1.1, Part 4 August 2010
-
-
- The result of a request having both an If-Modified-Since header field
- and either an If-Match or an If-Unmodified-Since header fields is
- undefined by this specification.
-
-6.4. If-None-Match
-
- The "If-None-Match" request-header field is used to make a request
- method conditional. A client that has one or more representations
- previously obtained from the resource can verify that none of those
- representations is current by including a list of their associated
- entity-tags in the If-None-Match header field.
-
- This allows efficient updates of cached information with a minimum
- amount of transaction overhead. It is also used to prevent a method
- (e.g., PUT) from inadvertently modifying an existing resource when
- the client believes that the resource does not exist.
-
- As a special case, the value "*" matches any current representation
- of the resource.
-
- If-None-Match = "If-None-Match" ":" OWS If-None-Match-v
- If-None-Match-v = "*" / 1#entity-tag
-
- If any of the entity-tags match the entity-tag of the representation
- that would have been returned in the response to a similar GET
- request (without the If-None-Match header) on that resource, or if
- "*" is given and any current representation exists for that resource,
- then the server MUST NOT perform the requested method, unless
- required to do so because the resource's modification date fails to
- match that supplied in an If-Modified-Since header field in the
- request. Instead, if the request method was GET or HEAD, the server
- SHOULD respond with a 304 (Not Modified) response, including the
- cache-related header fields (particularly ETag) of one of the
- representations that matched. For all other request methods, the
- server MUST respond with a 412 (Precondition Failed) status code.
-
- If none of the entity-tags match, then the server MAY perform the
- requested method as if the If-None-Match header field did not exist,
- but MUST also ignore any If-Modified-Since header field(s) in the
- request. That is, if no entity-tags match, then the server MUST NOT
- return a 304 (Not Modified) response.
-
- If the request would, without the If-None-Match header field, result
- in anything other than a 2xx or 304 status code, then the If-None-
- Match header MUST be ignored. (See Section 5 for a discussion of
- server behavior when both If-Modified-Since and If-None-Match appear
- in the same request.)
-
-
-
-
-Fielding, et al. Expires February 5, 2011 [Page 16]
-
-Internet-Draft HTTP/1.1, Part 4 August 2010
-
-
- The meaning of "If-None-Match: *" is that the method MUST NOT be
- performed if the representation selected by the origin server (or by
- a cache, possibly using the Vary mechanism, see Section 3.5 of
- [Part6]) exists, and SHOULD be performed if the representation does
- not exist. This feature is intended to be useful in preventing races
- between PUT operations.
-
- Examples:
-
- If-None-Match: "xyzzy"
- If-None-Match: W/"xyzzy"
- If-None-Match: "xyzzy", "r2d2xxxx", "c3piozzzz"
- If-None-Match: W/"xyzzy", W/"r2d2xxxx", W/"c3piozzzz"
- If-None-Match: *
-
- The result of a request having both an If-None-Match header field and
- either an If-Match or an If-Unmodified-Since header fields is
- undefined by this specification.
-
-6.5. If-Unmodified-Since
-
- The "If-Unmodified-Since" request-header field is used to make a
- request method conditional. If the representation that would have
- been transferred in a 200 response to a GET request on the same
- resource has not been modified since the time specified in this
- field, the server SHOULD perform the requested operation as if the
- If-Unmodified-Since header were not present.
-
- If the representation has been modified since the specified time, the
- server MUST NOT perform the requested operation, and MUST return a
- 412 (Precondition Failed).
-
- If-Unmodified-Since = "If-Unmodified-Since" ":" OWS
- If-Unmodified-Since-v
- If-Unmodified-Since-v = HTTP-date
-
- An example of the field is:
-
- If-Unmodified-Since: Sat, 29 Oct 1994 19:43:31 GMT
-
- If the request normally (i.e., without the If-Unmodified-Since
- header) would result in anything other than a 2xx or 412 status code,
- the If-Unmodified-Since header SHOULD be ignored.
-
- If the specified date is invalid, the header is ignored.
-
- The result of a request having both an If-Unmodified-Since header
- field and either an If-None-Match or an If-Modified-Since header
-
-
-
-Fielding, et al. Expires February 5, 2011 [Page 17]
-
-Internet-Draft HTTP/1.1, Part 4 August 2010
-
-
- fields is undefined by this specification.
-
-6.6. Last-Modified
-
- The "Last-Modified" header field indicates the date and time at which
- the origin server believes the representation was last modified.
-
- Last-Modified = "Last-Modified" ":" OWS Last-Modified-v
- Last-Modified-v = HTTP-date
-
- An example of its use is
-
- Last-Modified: Tue, 15 Nov 1994 12:45:26 GMT
-
- The exact meaning of this header field depends on the implementation
- of the origin server and the nature of the original resource. For
- files, it might be just the file system last-modified time. For
- representations with dynamically included parts, it might be the most
- recent of the set of last-modify times for its component parts. For
- database gateways, it might be the last-update time stamp of the
- record. For virtual objects, it might be the last time the internal
- state changed.
-
- An origin server MUST NOT send a Last-Modified date which is later
- than the server's time of message origination. In such cases, where
- the resource's last modification would indicate some time in the
- future, the server MUST replace that date with the message
- origination date.
-
- An origin server SHOULD obtain the Last-Modified value of the
- representation as close as possible to the time that it generates the
- Date value of its response. This allows a recipient to make an
- accurate assessment of the representation's modification time,
- especially if the representation changes near the time that the
- response is generated.
-
- HTTP/1.1 servers SHOULD send Last-Modified whenever feasible.
-
- The Last-Modified header field value is often used as a cache
- validator. In simple terms, a cache entry is considered to be valid
- if the representation has not been modified since the Last-Modified
- value.
-
-7. IANA Considerations
-
-
-
-
-
-
-
-Fielding, et al. Expires February 5, 2011 [Page 18]
-
-Internet-Draft HTTP/1.1, Part 4 August 2010
-
-
-7.1. Status Code Registration
-
- The HTTP Status Code Registry located at
- shall be updated
- with the registrations below:
-
- +-------+---------------------+-------------+
- | Value | Description | Reference |
- +-------+---------------------+-------------+
- | 304 | Not Modified | Section 3.1 |
- | 412 | Precondition Failed | Section 3.2 |
- +-------+---------------------+-------------+
-
-7.2. Header Field Registration
-
- The Message Header Field Registry located at shall be
- updated with the permanent registrations below (see [RFC3864]):
-
- +---------------------+----------+----------+-------------+
- | Header Field Name | Protocol | Status | Reference |
- +---------------------+----------+----------+-------------+
- | ETag | http | standard | Section 6.1 |
- | If-Match | http | standard | Section 6.2 |
- | If-Modified-Since | http | standard | Section 6.3 |
- | If-None-Match | http | standard | Section 6.4 |
- | If-Unmodified-Since | http | standard | Section 6.5 |
- | Last-Modified | http | standard | Section 6.6 |
- +---------------------+----------+----------+-------------+
-
- The change controller is: "IETF (iesg@ietf.org) - Internet
- Engineering Task Force".
-
-8. Security Considerations
-
- No additional security considerations have been identified beyond
- those applicable to HTTP in general [Part1].
-
-9. Acknowledgments
-
-10. References
-
-10.1. Normative References
-
- [Part1] Fielding, R., Ed., Gettys, J., Mogul, J., Frystyk, H.,
- Masinter, L., Leach, P., Berners-Lee, T., Lafon, Y., Ed.,
- and J. Reschke, Ed., "HTTP/1.1, part 1: URIs, Connections,
- and Message Parsing", draft-ietf-httpbis-p1-messaging-11
-
-
-
-Fielding, et al. Expires February 5, 2011 [Page 19]
-
-Internet-Draft HTTP/1.1, Part 4 August 2010
-
-
- (work in progress), August 2010.
-
- [Part3] Fielding, R., Ed., Gettys, J., Mogul, J., Frystyk, H.,
- Masinter, L., Leach, P., Berners-Lee, T., Lafon, Y., Ed.,
- and J. Reschke, Ed., "HTTP/1.1, part 3: Message Payload
- and Content Negotiation", draft-ietf-httpbis-p3-payload-11
- (work in progress), August 2010.
-
- [Part5] Fielding, R., Ed., Gettys, J., Mogul, J., Frystyk, H.,
- Masinter, L., Leach, P., Berners-Lee, T., Lafon, Y., Ed.,
- and J. Reschke, Ed., "HTTP/1.1, part 5: Range Requests and
- Partial Responses", draft-ietf-httpbis-p5-range-11 (work
- in progress), August 2010.
-
- [Part6] Fielding, R., Ed., Gettys, J., Mogul, J., Frystyk, H.,
- Masinter, L., Leach, P., Berners-Lee, T., Lafon, Y., Ed.,
- Nottingham, M., Ed., and J. Reschke, Ed., "HTTP/1.1, part
- 6: Caching", draft-ietf-httpbis-p6-cache-11 (work in
- progress), August 2010.
-
- [RFC2119] Bradner, S., "Key words for use in RFCs to Indicate
- Requirement Levels", BCP 14, RFC 2119, March 1997.
-
- [RFC5234] Crocker, D., Ed. and P. Overell, "Augmented BNF for Syntax
- Specifications: ABNF", STD 68, RFC 5234, January 2008.
-
-10.2. Informative References
-
- [RFC2616] Fielding, R., Gettys, J., Mogul, J., Frystyk, H.,
- Masinter, L., Leach, P., and T. Berners-Lee, "Hypertext
- Transfer Protocol -- HTTP/1.1", RFC 2616, June 1999.
-
- [RFC3864] Klyne, G., Nottingham, M., and J. Mogul, "Registration
- Procedures for Message Header Fields", BCP 90, RFC 3864,
- September 2004.
-
-Appendix A. Changes from RFC 2616
-
- Allow weak entity-tags in all requests except range requests
- (Sections 4 and 6.4).
-
-
-
-
-
-
-
-
-
-
-
-Fielding, et al. Expires February 5, 2011 [Page 20]
-
-Internet-Draft HTTP/1.1, Part 4 August 2010
-
-
-Appendix B. Collected ABNF
-
- ETag = "ETag:" OWS ETag-v
- ETag-v = entity-tag
-
- HTTP-date =
-
- If-Match = "If-Match:" OWS If-Match-v
- If-Match-v = "*" / ( *( "," OWS ) entity-tag *( OWS "," [ OWS
- entity-tag ] ) )
- If-Modified-Since = "If-Modified-Since:" OWS If-Modified-Since-v
- If-Modified-Since-v = HTTP-date
- If-None-Match = "If-None-Match:" OWS If-None-Match-v
- If-None-Match-v = "*" / ( *( "," OWS ) entity-tag *( OWS "," [ OWS
- entity-tag ] ) )
- If-Unmodified-Since = "If-Unmodified-Since:" OWS
- If-Unmodified-Since-v
- If-Unmodified-Since-v = HTTP-date
-
- Last-Modified = "Last-Modified:" OWS Last-Modified-v
- Last-Modified-v = HTTP-date
-
- OWS =
-
- entity-tag = [ weak ] opaque-tag
-
- opaque-tag = quoted-string
-
- quoted-string =
-
- weak = %x57.2F ; W/
-
- ABNF diagnostics:
-
- ; ETag defined but not used
- ; If-Match defined but not used
- ; If-Modified-Since defined but not used
- ; If-None-Match defined but not used
- ; If-Unmodified-Since defined but not used
- ; Last-Modified defined but not used
-
-Appendix C. Change Log (to be removed by RFC Editor before publication)
-
-C.1. Since RFC2616
-
- Extracted relevant partitions from [RFC2616].
-
-
-
-
-
-Fielding, et al. Expires February 5, 2011 [Page 21]
-
-Internet-Draft HTTP/1.1, Part 4 August 2010
-
-
-C.2. Since draft-ietf-httpbis-p4-conditional-00
-
- Closed issues:
-
- o : "Normative and
- Informative references"
-
- Other changes:
-
- o Move definitions of 304 and 412 condition codes from Part2.
-
-C.3. Since draft-ietf-httpbis-p4-conditional-01
-
- Ongoing work on ABNF conversion
- ():
-
- o Add explicit references to BNF syntax and rules imported from
- other parts of the specification.
-
-C.4. Since draft-ietf-httpbis-p4-conditional-02
-
- Closed issues:
-
- o : "Weak ETags on
- non-GET requests"
-
- Ongoing work on IANA Message Header Registration
- ():
-
- o Reference RFC 3984, and update header registrations for headers
- defined in this document.
-
-C.5. Since draft-ietf-httpbis-p4-conditional-03
-
- Closed issues:
-
- o : "Examples for
- ETag matching"
-
- o : "'entity
- value' undefined"
-
- o : "bogus 2068
- Date header reference"
-
-
-
-
-
-
-
-Fielding, et al. Expires February 5, 2011 [Page 22]
-
-Internet-Draft HTTP/1.1, Part 4 August 2010
-
-
-C.6. Since draft-ietf-httpbis-p4-conditional-04
-
- Ongoing work on ABNF conversion
- ():
-
- o Use "/" instead of "|" for alternatives.
-
- o Introduce new ABNF rules for "bad" whitespace ("BWS"), optional
- whitespace ("OWS") and required whitespace ("RWS").
-
- o Rewrite ABNFs to spell out whitespace rules, factor out header
- value format definitions.
-
-C.7. Since draft-ietf-httpbis-p4-conditional-05
-
- Final work on ABNF conversion
- ():
-
- o Add appendix containing collected and expanded ABNF, reorganize
- ABNF introduction.
-
-C.8. Since draft-ietf-httpbis-p4-conditional-06
-
- Closed issues:
-
- o : "case-
- sensitivity of etag weakness indicator"
-
-C.9. Since draft-ietf-httpbis-p4-conditional-07
-
- Closed issues:
-
- o : "Weak ETags on
- non-GET requests" (If-Match still was defined to require strong
- matching)
-
- o : "move IANA
- registrations for optional status codes"
-
-C.10. Since draft-ietf-httpbis-p4-conditional-08
-
- No significant changes.
-
-C.11. Since draft-ietf-httpbis-p4-conditional-09
-
- No significant changes.
-
-
-
-
-
-Fielding, et al. Expires February 5, 2011 [Page 23]
-
-Internet-Draft HTTP/1.1, Part 4 August 2010
-
-
-C.12. Since draft-ietf-httpbis-p4-conditional-10
-
- Closed issues:
-
- o : "Clarify
- 'Requested Variant'"
-
- o : "Clarify
- entity / representation / variant terminology"
-
- o : "consider
- removing the 'changes from 2068' sections"
-
-Index
-
- 3
- 304 Not Modified (status code) 7
-
- 4
- 412 Precondition Failed (status code) 7
-
- E
- ETag header 12
-
- G
- Grammar
- entity-tag 5
- ETag 12
- ETag-v 12
- If-Match 13
- If-Match-v 13
- If-Modified-Since 14
- If-Modified-Since-v 14
- If-None-Match 16
- If-None-Match-v 16
- If-Unmodified-Since 17
- If-Unmodified-Since-v 17
- Last-Modified 18
- Last-Modified-v 18
- opaque-tag 5
- weak 5
-
- H
- Headers
- ETag 12
- If-Match 13
- If-Modified-Since 14
- If-None-Match 16
-
-
-
-Fielding, et al. Expires February 5, 2011 [Page 24]
-
-Internet-Draft HTTP/1.1, Part 4 August 2010
-
-
- If-Unmodified-Since 17
- Last-Modified 18
-
- I
- If-Match header 13
- If-Modified-Since header 14
- If-None-Match header 16
- If-Unmodified-Since header 17
-
- L
- Last-Modified header 18
-
- S
- Status Codes
- 304 Not Modified 7
- 412 Precondition Failed 7
-
-Authors' Addresses
-
- Roy T. Fielding (editor)
- Day Software
- 23 Corporate Plaza DR, Suite 280
- Newport Beach, CA 92660
- USA
-
- Phone: +1-949-706-5300
- Fax: +1-949-706-5305
- EMail: fielding@gbiv.com
- URI: http://roy.gbiv.com/
-
-
- Jim Gettys
- Alcatel-Lucent Bell Labs
- 21 Oak Knoll Road
- Carlisle, MA 01741
- USA
-
- EMail: jg@freedesktop.org
- URI: http://gettys.wordpress.com/
-
-
-
-
-
-
-
-
-
-
-
-
-Fielding, et al. Expires February 5, 2011 [Page 25]
-
-Internet-Draft HTTP/1.1, Part 4 August 2010
-
-
- Jeffrey C. Mogul
- Hewlett-Packard Company
- HP Labs, Large Scale Systems Group
- 1501 Page Mill Road, MS 1177
- Palo Alto, CA 94304
- USA
-
- EMail: JeffMogul@acm.org
-
-
- Henrik Frystyk Nielsen
- Microsoft Corporation
- 1 Microsoft Way
- Redmond, WA 98052
- USA
-
- EMail: henrikn@microsoft.com
-
-
- Larry Masinter
- Adobe Systems, Incorporated
- 345 Park Ave
- San Jose, CA 95110
- USA
-
- EMail: LMM@acm.org
- URI: http://larry.masinter.net/
-
-
- Paul J. Leach
- Microsoft Corporation
- 1 Microsoft Way
- Redmond, WA 98052
-
- EMail: paulle@microsoft.com
-
-
- Tim Berners-Lee
- World Wide Web Consortium
- MIT Computer Science and Artificial Intelligence Laboratory
- The Stata Center, Building 32
- 32 Vassar Street
- Cambridge, MA 02139
- USA
-
- EMail: timbl@w3.org
- URI: http://www.w3.org/People/Berners-Lee/
-
-
-
-
-Fielding, et al. Expires February 5, 2011 [Page 26]
-
-Internet-Draft HTTP/1.1, Part 4 August 2010
-
-
- Yves Lafon (editor)
- World Wide Web Consortium
- W3C / ERCIM
- 2004, rte des Lucioles
- Sophia-Antipolis, AM 06902
- France
-
- EMail: ylafon@w3.org
- URI: http://www.raubacapeu.net/people/yves/
-
-
- Julian F. Reschke (editor)
- greenbytes GmbH
- Hafenweg 16
- Muenster, NW 48155
- Germany
-
- Phone: +49 251 2807760
- Fax: +49 251 2807761
- EMail: julian.reschke@greenbytes.de
- URI: http://greenbytes.de/tech/webdav/
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-Fielding, et al. Expires February 5, 2011 [Page 27]
-
diff --git a/vendor/sabre/dav/docs/draft-ietf-httpbis-p5-range-11.txt b/vendor/sabre/dav/docs/draft-ietf-httpbis-p5-range-11.txt
deleted file mode 100644
index 1ef7b0946..000000000
--- a/vendor/sabre/dav/docs/draft-ietf-httpbis-p5-range-11.txt
+++ /dev/null
@@ -1,1512 +0,0 @@
-
-
-
-HTTPbis Working Group R. Fielding, Ed.
-Internet-Draft Day Software
-Obsoletes: 2616 (if approved) J. Gettys
-Intended status: Standards Track Alcatel-Lucent
-Expires: February 5, 2011 J. Mogul
- HP
- H. Frystyk
- Microsoft
- L. Masinter
- Adobe Systems
- P. Leach
- Microsoft
- T. Berners-Lee
- W3C/MIT
- Y. Lafon, Ed.
- W3C
- J. Reschke, Ed.
- greenbytes
- August 4, 2010
-
-
- HTTP/1.1, part 5: Range Requests and Partial Responses
- draft-ietf-httpbis-p5-range-11
-
-Abstract
-
- The Hypertext Transfer Protocol (HTTP) is an application-level
- protocol for distributed, collaborative, hypermedia information
- systems. HTTP has been in use by the World Wide Web global
- information initiative since 1990. This document is Part 5 of the
- seven-part specification that defines the protocol referred to as
- "HTTP/1.1" and, taken together, obsoletes RFC 2616. Part 5 defines
- range-specific requests and the rules for constructing and combining
- responses to those requests.
-
-Editorial Note (To be removed by RFC Editor)
-
- Discussion of this draft should take place on the HTTPBIS working
- group mailing list (ietf-http-wg@w3.org). The current issues list is
- at and related
- documents (including fancy diffs) can be found at
- .
-
- The changes in this draft are summarized in Appendix D.12.
-
-Status of This Memo
-
- This Internet-Draft is submitted in full conformance with the
-
-
-
-Fielding, et al. Expires February 5, 2011 [Page 1]
-
-Internet-Draft HTTP/1.1, Part 5 August 2010
-
-
- 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 February 5, 2011.
-
-Copyright Notice
-
- Copyright (c) 2010 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.
-
- This document may contain material from IETF Documents or IETF
- Contributions published or made publicly available before November
- 10, 2008. The person(s) controlling the copyright in some of this
- material may not have granted the IETF Trust the right to allow
- modifications of such material outside the IETF Standards Process.
- Without obtaining an adequate license from the person(s) controlling
- the copyright in such materials, this document may not be modified
- outside the IETF Standards Process, and derivative works of it may
- not be created outside the IETF Standards Process, except to format
- it for publication as an RFC or to translate it into languages other
- than English.
-
-
-
-
-
-
-
-
-
-
-
-Fielding, et al. Expires February 5, 2011 [Page 2]
-
-Internet-Draft HTTP/1.1, Part 5 August 2010
-
-
-Table of Contents
-
- 1. Introduction . . . . . . . . . . . . . . . . . . . . . . . . . 5
- 1.1. Requirements . . . . . . . . . . . . . . . . . . . . . . . 5
- 1.2. Syntax Notation . . . . . . . . . . . . . . . . . . . . . 5
- 1.2.1. Core Rules . . . . . . . . . . . . . . . . . . . . . . 6
- 1.2.2. ABNF Rules defined in other Parts of the
- Specification . . . . . . . . . . . . . . . . . . . . 6
- 2. Range Units . . . . . . . . . . . . . . . . . . . . . . . . . 6
- 2.1. Range Specifier Registry . . . . . . . . . . . . . . . . . 6
- 3. Status Code Definitions . . . . . . . . . . . . . . . . . . . 7
- 3.1. 206 Partial Content . . . . . . . . . . . . . . . . . . . 7
- 3.2. 416 Requested Range Not Satisfiable . . . . . . . . . . . 8
- 4. Combining Ranges . . . . . . . . . . . . . . . . . . . . . . . 8
- 5. Header Field Definitions . . . . . . . . . . . . . . . . . . . 8
- 5.1. Accept-Ranges . . . . . . . . . . . . . . . . . . . . . . 9
- 5.2. Content-Range . . . . . . . . . . . . . . . . . . . . . . 9
- 5.3. If-Range . . . . . . . . . . . . . . . . . . . . . . . . . 11
- 5.4. Range . . . . . . . . . . . . . . . . . . . . . . . . . . 12
- 5.4.1. Byte Ranges . . . . . . . . . . . . . . . . . . . . . 12
- 5.4.2. Range Retrieval Requests . . . . . . . . . . . . . . . 14
- 6. IANA Considerations . . . . . . . . . . . . . . . . . . . . . 15
- 6.1. Status Code Registration . . . . . . . . . . . . . . . . . 15
- 6.2. Header Field Registration . . . . . . . . . . . . . . . . 15
- 6.3. Range Specifier Registration . . . . . . . . . . . . . . . 16
- 7. Security Considerations . . . . . . . . . . . . . . . . . . . 16
- 8. Acknowledgments . . . . . . . . . . . . . . . . . . . . . . . 16
- 9. References . . . . . . . . . . . . . . . . . . . . . . . . . . 16
- 9.1. Normative References . . . . . . . . . . . . . . . . . . . 16
- 9.2. Informative References . . . . . . . . . . . . . . . . . . 17
- Appendix A. Internet Media Type multipart/byteranges . . . . . . 17
- Appendix B. Compatibility with Previous Versions . . . . . . . . 20
- B.1. Changes from RFC 2616 . . . . . . . . . . . . . . . . . . 20
- Appendix C. Collected ABNF . . . . . . . . . . . . . . . . . . . 20
- Appendix D. Change Log (to be removed by RFC Editor before
- publication) . . . . . . . . . . . . . . . . . . . . 21
- D.1. Since RFC2616 . . . . . . . . . . . . . . . . . . . . . . 21
- D.2. Since draft-ietf-httpbis-p5-range-00 . . . . . . . . . . . 21
- D.3. Since draft-ietf-httpbis-p5-range-01 . . . . . . . . . . . 22
- D.4. Since draft-ietf-httpbis-p5-range-02 . . . . . . . . . . . 22
- D.5. Since draft-ietf-httpbis-p5-range-03 . . . . . . . . . . . 22
- D.6. Since draft-ietf-httpbis-p5-range-04 . . . . . . . . . . . 22
- D.7. Since draft-ietf-httpbis-p5-range-05 . . . . . . . . . . . 22
- D.8. Since draft-ietf-httpbis-p5-range-06 . . . . . . . . . . . 23
- D.9. Since draft-ietf-httpbis-p5-range-07 . . . . . . . . . . . 23
- D.10. Since draft-ietf-httpbis-p5-range-08 . . . . . . . . . . . 23
- D.11. Since draft-ietf-httpbis-p5-range-09 . . . . . . . . . . . 23
- D.12. Since draft-ietf-httpbis-p5-range-10 . . . . . . . . . . . 23
-
-
-
-Fielding, et al. Expires February 5, 2011 [Page 3]
-
-Internet-Draft HTTP/1.1, Part 5 August 2010
-
-
- Index . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 24
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-Fielding, et al. Expires February 5, 2011 [Page 4]
-
-Internet-Draft HTTP/1.1, Part 5 August 2010
-
-
-1. Introduction
-
- HTTP clients often encounter interrupted data transfers as a result
- of cancelled requests or dropped connections. When a cache has
- stored a partial representation, it is desirable to request the
- remainder of that representation in a subsequent request rather than
- transfer the entire representation. There are also a number of Web
- applications that benefit from being able to request only a subset of
- a larger representation, such as a single page of a very large
- document or only part of an image to be rendered by a device with
- limited local storage.
-
- This document defines HTTP/1.1 range requests, partial responses, and
- the multipart/byteranges media type. The protocol for range requests
- is an OPTIONAL feature of HTTP, designed so resources or recipients
- that do not implement this feature can respond as if it is a normal
- GET request without impacting interoperability. Partial responses
- are indicated by a distinct status code to not be mistaken for full
- responses by intermediate caches that might not implement the
- feature.
-
- Although the HTTP range request mechanism is designed to allow for
- extensible range types, this specification only defines requests for
- byte ranges.
-
-1.1. Requirements
-
- 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 implementation is not compliant if it fails to satisfy one or more
- of the "MUST" or "REQUIRED" level requirements for the protocols it
- implements. An implementation that satisfies all the "MUST" or
- "REQUIRED" level and all the "SHOULD" level requirements for its
- protocols is said to be "unconditionally compliant"; one that
- satisfies all the "MUST" level requirements but not all the "SHOULD"
- level requirements for its protocols is said to be "conditionally
- compliant".
-
-1.2. Syntax Notation
-
- This specification uses the ABNF syntax defined in Section 1.2 of
- [Part1] (which extends the syntax defined in [RFC5234] with a list
- rule). Appendix C shows the collected ABNF, with the list rule
- expanded.
-
- The following core rules are included by reference, as defined in
-
-
-
-Fielding, et al. Expires February 5, 2011 [Page 5]
-
-Internet-Draft HTTP/1.1, Part 5 August 2010
-
-
- [RFC5234], Appendix B.1: ALPHA (letters), CR (carriage return), CRLF
- (CR LF), CTL (controls), DIGIT (decimal 0-9), DQUOTE (double quote),
- HEXDIG (hexadecimal 0-9/A-F/a-f), LF (line feed), OCTET (any 8-bit
- sequence of data), SP (space), VCHAR (any visible USASCII character),
- and WSP (whitespace).
-
-1.2.1. Core Rules
-
- The core rules below are defined in Section 1.2.2 of [Part1]:
-
- token =
- OWS =
-
-1.2.2. ABNF Rules defined in other Parts of the Specification
-
- The ABNF rules below are defined in other parts:
-
- HTTP-date =
-
-
- entity-tag =
-
-2. Range Units
-
- HTTP/1.1 allows a client to request that only part (a range of) the
- representation be included within the response. HTTP/1.1 uses range
- units in the Range (Section 5.4) and Content-Range (Section 5.2)
- header fields. A representation can be broken down into subranges
- according to various structural units.
-
- range-unit = bytes-unit / other-range-unit
- bytes-unit = "bytes"
- other-range-unit = token
-
- HTTP/1.1 has been designed to allow implementations of applications
- that do not depend on knowledge of ranges. The only range unit
- defined by HTTP/1.1 is "bytes". Additional specifiers can be defined
- as described in Section 2.1.
-
- If a range unit is not understood in a request, a server MUST ignore
- the whole Range header (Section 5.4). If a range unit is not
- understood in a response, an intermediary SHOULD pass the response to
- the client; a client MUST fail.
-
-2.1. Range Specifier Registry
-
- The HTTP Ranger Specifier Registry defines the name space for the
- range specifier names.
-
-
-
-Fielding, et al. Expires February 5, 2011 [Page 6]
-
-Internet-Draft HTTP/1.1, Part 5 August 2010
-
-
- Registrations MUST include the following fields:
-
- o Name
-
- o Description
-
- o Pointer to specification text
-
- Values to be added to this name space are subject to IETF review
- ([RFC5226], Section 4.1).
-
- The registry itself is maintained at
- .
-
-3. Status Code Definitions
-
-3.1. 206 Partial Content
-
- The server has fulfilled the partial GET request for the resource.
- The request MUST have included a Range header field (Section 5.4)
- indicating the desired range, and MAY have included an If-Range
- header field (Section 5.3) to make the request conditional.
-
- The response MUST include the following header fields:
-
- o Either a Content-Range header field (Section 5.2) indicating the
- range included with this response, or a multipart/byteranges
- Content-Type including Content-Range fields for each part. If a
- Content-Length header field is present in the response, its value
- MUST match the actual number of octets transmitted in the message-
- body.
-
- o Date
-
- o Cache-Control, ETag, Expires, Content-Location, Last-Modified,
- and/or Vary, if the header field would have been sent in a 200
- response to the same request
-
- If the 206 response is the result of an If-Range request, the
- response SHOULD NOT include other representation header fields.
- Otherwise, the response MUST include all of the representation header
- fields that would have been returned with a 200 (OK) response to the
- same request.
-
- A cache MUST NOT combine a 206 response with other previously cached
- content if the ETag or Last-Modified headers do not match exactly,
- see Section 4.
-
-
-
-
-Fielding, et al. Expires February 5, 2011 [Page 7]
-
-Internet-Draft HTTP/1.1, Part 5 August 2010
-
-
- A cache that does not support the Range and Content-Range headers
- MUST NOT cache 206 (Partial Content) responses. Furthermore, if a
- response uses a range unit that is not understood by the cache, then
- it MUST NOT be cached either.
-
-3.2. 416 Requested Range Not Satisfiable
-
- A server SHOULD return a response with this status code if a request
- included a Range request-header field (Section 5.4), and none of the
- ranges-specifier values in this field overlap the current extent of
- the selected resource, and the request did not include an If-Range
- request-header field (Section 5.3). (For byte-ranges, this means
- that the first-byte-pos of all of the byte-range-spec values were
- greater than the current length of the selected resource.)
-
- When this status code is returned for a byte-range request, the
- response SHOULD include a Content-Range header field specifying the
- current length of the representation (see Section 5.2). This
- response MUST NOT use the multipart/byteranges content-type.
-
-4. Combining Ranges
-
- A response might transfer only a subrange of a representation, either
- because the request included one or more Range specifications, or
- because a connection closed prematurely. After several such
- transfers, a cache might have received several ranges of the same
- representation.
-
- If a cache has a stored non-empty set of subranges for a
- representation, and an incoming response transfers another subrange,
- the cache MAY combine the new subrange with the existing set if both
- the following conditions are met:
-
- o Both the incoming response and the cache entry have a cache
- validator.
-
- o The two cache validators match using the strong comparison
- function (see Section 4 of [Part4]).
-
- If either requirement is not met, the cache MUST use only the most
- recent partial response (based on the Date values transmitted with
- every response, and using the incoming response if these values are
- equal or missing), and MUST discard the other partial information.
-
-5. Header Field Definitions
-
- This section defines the syntax and semantics of HTTP/1.1 header
- fields related to range requests and partial responses.
-
-
-
-Fielding, et al. Expires February 5, 2011 [Page 8]
-
-Internet-Draft HTTP/1.1, Part 5 August 2010
-
-
-5.1. Accept-Ranges
-
- The "Accept-Ranges" response-header field allows a resource to
- indicate its acceptance of range requests.
-
- Accept-Ranges = "Accept-Ranges" ":" OWS Accept-Ranges-v
- Accept-Ranges-v = acceptable-ranges
- acceptable-ranges = 1#range-unit / "none"
-
- Origin servers that accept byte-range requests MAY send
-
- Accept-Ranges: bytes
-
- but are not required to do so. Clients MAY generate range requests
- without having received this header for the resource involved. Range
- units are defined in Section 2.
-
- Servers that do not accept any kind of range request for a resource
- MAY send
-
- Accept-Ranges: none
-
- to advise the client not to attempt a range request.
-
-5.2. Content-Range
-
- The "Content-Range" header field is sent with a partial
- representation to specify where in the full representation the
- payload body is intended to be applied.
-
- Range units are defined in Section 2.
-
- Content-Range = "Content-Range" ":" OWS Content-Range-v
- Content-Range-v = content-range-spec
-
- content-range-spec = byte-content-range-spec
- / other-content-range-spec
- byte-content-range-spec = bytes-unit SP
- byte-range-resp-spec "/"
- ( instance-length / "*" )
-
- byte-range-resp-spec = (first-byte-pos "-" last-byte-pos)
- / "*"
-
- instance-length = 1*DIGIT
-
- other-content-range-spec = other-range-unit SP
- other-range-resp-spec
-
-
-
-Fielding, et al. Expires February 5, 2011 [Page 9]
-
-Internet-Draft HTTP/1.1, Part 5 August 2010
-
-
- other-range-resp-spec = *CHAR
-
- The header SHOULD indicate the total length of the full
- representation, unless this length is unknown or difficult to
- determine. The asterisk "*" character means that the instance-length
- is unknown at the time when the response was generated.
-
- Unlike byte-ranges-specifier values (see Section 5.4.1), a byte-
- range-resp-spec MUST only specify one range, and MUST contain
- absolute byte positions for both the first and last byte of the
- range.
-
- A byte-content-range-spec with a byte-range-resp-spec whose last-
- byte-pos value is less than its first-byte-pos value, or whose
- instance-length value is less than or equal to its last-byte-pos
- value, is invalid. The recipient of an invalid byte-content-range-
- spec MUST ignore it and any content transferred along with it.
-
- In the case of a byte range request: A server sending a response with
- status code 416 (Requested range not satisfiable) SHOULD include a
- Content-Range field with a byte-range-resp-spec of "*". The
- instance-length specifies the current length of the selected
- resource. A response with status code 206 (Partial Content) MUST NOT
- include a Content-Range field with a byte-range-resp-spec of "*".
-
- Examples of byte-content-range-spec values, assuming that the
- representation contains a total of 1234 bytes:
-
- o The first 500 bytes:
-
- bytes 0-499/1234
-
- o The second 500 bytes:
-
- bytes 500-999/1234
-
- o All except for the first 500 bytes:
-
- bytes 500-1233/1234
-
- o The last 500 bytes:
-
- bytes 734-1233/1234
-
- When an HTTP message includes the content of a single range (for
- example, a response to a request for a single range, or to a request
- for a set of ranges that overlap without any holes), this content is
- transmitted with a Content-Range header, and a Content-Length header
-
-
-
-Fielding, et al. Expires February 5, 2011 [Page 10]
-
-Internet-Draft HTTP/1.1, Part 5 August 2010
-
-
- showing the number of bytes actually transferred. For example,
-
- HTTP/1.1 206 Partial Content
- Date: Wed, 15 Nov 1995 06:25:24 GMT
- Last-Modified: Wed, 15 Nov 1995 04:58:08 GMT
- Content-Range: bytes 21010-47021/47022
- Content-Length: 26012
- Content-Type: image/gif
-
- When an HTTP message includes the content of multiple ranges (for
- example, a response to a request for multiple non-overlapping
- ranges), these are transmitted as a multipart message. The multipart
- media type used for this purpose is "multipart/byteranges" as defined
- in Appendix A.
-
- A response to a request for a single range MUST NOT be sent using the
- multipart/byteranges media type. A response to a request for
- multiple ranges, whose result is a single range, MAY be sent as a
- multipart/byteranges media type with one part. A client that cannot
- decode a multipart/byteranges message MUST NOT ask for multiple
- ranges in a single request.
-
- When a client requests multiple ranges in one request, the server
- SHOULD return them in the order that they appeared in the request.
-
- If the server ignores a byte-range-spec because it is syntactically
- invalid, the server SHOULD treat the request as if the invalid Range
- header field did not exist. (Normally, this means return a 200
- response containing the full representation).
-
- If the server receives a request (other than one including an If-
- Range request-header field) with an unsatisfiable Range request-
- header field (that is, all of whose byte-range-spec values have a
- first-byte-pos value greater than the current length of the selected
- resource), it SHOULD return a response code of 416 (Requested range
- not satisfiable) (Section 3.2).
-
- Note: Clients cannot depend on servers to send a 416 (Requested
- range not satisfiable) response instead of a 200 (OK) response for
- an unsatisfiable Range request-header, since not all servers
- implement this request-header.
-
-5.3. If-Range
-
- If a client has a partial copy of a representation in its cache, and
- wishes to have an up-to-date copy of the entire representation in its
- cache, it could use the Range request-header with a conditional GET
- (using either or both of If-Unmodified-Since and If-Match.) However,
-
-
-
-Fielding, et al. Expires February 5, 2011 [Page 11]
-
-Internet-Draft HTTP/1.1, Part 5 August 2010
-
-
- if the condition fails because the representation has been modified,
- the client would then have to make a second request to obtain the
- entire current representation.
-
- The "If-Range" request-header field allows a client to "short-
- circuit" the second request. Informally, its meaning is "if the
- representation is unchanged, send me the part(s) that I am missing;
- otherwise, send me the entire new representation".
-
- If-Range = "If-Range" ":" OWS If-Range-v
- If-Range-v = entity-tag / HTTP-date
-
- If the client has no entity-tag for a representation, but does have a
- Last-Modified date, it MAY use that date in an If-Range header. (The
- server can distinguish between a valid HTTP-date and any form of
- entity-tag by examining no more than two characters.) The If-Range
- header SHOULD only be used together with a Range header, and MUST be
- ignored if the request does not include a Range header, or if the
- server does not support the sub-range operation.
-
- If the entity-tag given in the If-Range header matches the current
- cache validator for the representation, then the server SHOULD
- provide the specified sub-range of the representation using a 206
- (Partial Content) response. If the cache validator does not match,
- then the server SHOULD return the entire representation using a 200
- (OK) response.
-
-5.4. Range
-
-5.4.1. Byte Ranges
-
- Since all HTTP representations are transferred as sequences of bytes,
- the concept of a byte range is meaningful for any HTTP
- representation. (However, not all clients and servers need to
- support byte-range operations.)
-
- Byte range specifications in HTTP apply to the sequence of bytes in
- the representation body (not necessarily the same as the message-
- body).
-
- A byte range operation MAY specify a single range of bytes, or a set
- of ranges within a single representation.
-
- byte-ranges-specifier = bytes-unit "=" byte-range-set
- byte-range-set = 1#( byte-range-spec / suffix-byte-range-spec )
- byte-range-spec = first-byte-pos "-" [ last-byte-pos ]
- first-byte-pos = 1*DIGIT
- last-byte-pos = 1*DIGIT
-
-
-
-Fielding, et al. Expires February 5, 2011 [Page 12]
-
-Internet-Draft HTTP/1.1, Part 5 August 2010
-
-
- The first-byte-pos value in a byte-range-spec gives the byte-offset
- of the first byte in a range. The last-byte-pos value gives the
- byte-offset of the last byte in the range; that is, the byte
- positions specified are inclusive. Byte offsets start at zero.
-
- If the last-byte-pos value is present, it MUST be greater than or
- equal to the first-byte-pos in that byte-range-spec, or the byte-
- range-spec is syntactically invalid. The recipient of a byte-range-
- set that includes one or more syntactically invalid byte-range-spec
- values MUST ignore the header field that includes that byte-range-
- set.
-
- If the last-byte-pos value is absent, or if the value is greater than
- or equal to the current length of the representation body, last-byte-
- pos is taken to be equal to one less than the current length of the
- representation in bytes.
-
- By its choice of last-byte-pos, a client can limit the number of
- bytes retrieved without knowing the size of the representation.
-
- suffix-byte-range-spec = "-" suffix-length
- suffix-length = 1*DIGIT
-
- A suffix-byte-range-spec is used to specify the suffix of the
- representation body, of a length given by the suffix-length value.
- (That is, this form specifies the last N bytes of a representation.)
- If the representation is shorter than the specified suffix-length,
- the entire representation is used.
-
- If a syntactically valid byte-range-set includes at least one byte-
- range-spec whose first-byte-pos is less than the current length of
- the representation, or at least one suffix-byte-range-spec with a
- non-zero suffix-length, then the byte-range-set is satisfiable.
- Otherwise, the byte-range-set is unsatisfiable. If the byte-range-
- set is unsatisfiable, the server SHOULD return a response with a 416
- (Requested range not satisfiable) status code. Otherwise, the server
- SHOULD return a response with a 206 (Partial Content) status code
- containing the satisfiable ranges of the representation.
-
- Examples of byte-ranges-specifier values (assuming a representation
- of length 10000):
-
- o The first 500 bytes (byte offsets 0-499, inclusive):
-
- bytes=0-499
-
-
-
-
-
-
-Fielding, et al. Expires February 5, 2011 [Page 13]
-
-Internet-Draft HTTP/1.1, Part 5 August 2010
-
-
- o The second 500 bytes (byte offsets 500-999, inclusive):
-
- bytes=500-999
-
- o The final 500 bytes (byte offsets 9500-9999, inclusive):
-
- bytes=-500
-
- Or:
-
- bytes=9500-
-
- o The first and last bytes only (bytes 0 and 9999):
-
- bytes=0-0,-1
-
- o Several legal but not canonical specifications of the second 500
- bytes (byte offsets 500-999, inclusive):
-
- bytes=500-600,601-999
- bytes=500-700,601-999
-
-5.4.2. Range Retrieval Requests
-
- The "Range" request-header field defines the GET method (conditional
- or not) to request one or more sub-ranges of the response
- representation body, instead of the entire representation body.
-
- Range = "Range" ":" OWS Range-v
- Range-v = byte-ranges-specifier
- / other-ranges-specifier
- other-ranges-specifier = other-range-unit "=" other-range-set
- other-range-set = 1*CHAR
-
- A server MAY ignore the Range header. However, HTTP/1.1 origin
- servers and intermediate caches ought to support byte ranges when
- possible, since Range supports efficient recovery from partially
- failed transfers, and supports efficient partial retrieval of large
- representations.
-
- If the server supports the Range header and the specified range or
- ranges are appropriate for the representation:
-
- o The presence of a Range header in an unconditional GET modifies
- what is returned if the GET is otherwise successful. In other
- words, the response carries a status code of 206 (Partial Content)
- instead of 200 (OK).
-
-
-
-
-Fielding, et al. Expires February 5, 2011 [Page 14]
-
-Internet-Draft HTTP/1.1, Part 5 August 2010
-
-
- o The presence of a Range header in a conditional GET (a request
- using one or both of If-Modified-Since and If-None-Match, or one
- or both of If-Unmodified-Since and If-Match) modifies what is
- returned if the GET is otherwise successful and the condition is
- true. It does not affect the 304 (Not Modified) response returned
- if the conditional is false.
-
- In some cases, it might be more appropriate to use the If-Range
- header (see Section 5.3) in addition to the Range header.
-
- If a proxy that supports ranges receives a Range request, forwards
- the request to an inbound server, and receives an entire
- representation in reply, it SHOULD only return the requested range to
- its client. It SHOULD store the entire received response in its
- cache if that is consistent with its cache allocation policies.
-
-6. IANA Considerations
-
-6.1. Status Code Registration
-
- The HTTP Status Code Registry located at
- shall be updated
- with the registrations below:
-
- +-------+---------------------------------+-------------+
- | Value | Description | Reference |
- +-------+---------------------------------+-------------+
- | 206 | Partial Content | Section 3.1 |
- | 416 | Requested Range Not Satisfiable | Section 3.2 |
- +-------+---------------------------------+-------------+
-
-6.2. Header Field Registration
-
- The Message Header Field Registry located at shall be
- updated with the permanent registrations below (see [RFC3864]):
-
- +-------------------+----------+----------+-------------+
- | Header Field Name | Protocol | Status | Reference |
- +-------------------+----------+----------+-------------+
- | Accept-Ranges | http | standard | Section 5.1 |
- | Content-Range | http | standard | Section 5.2 |
- | If-Range | http | standard | Section 5.3 |
- | Range | http | standard | Section 5.4 |
- +-------------------+----------+----------+-------------+
-
- The change controller is: "IETF (iesg@ietf.org) - Internet
- Engineering Task Force".
-
-
-
-Fielding, et al. Expires February 5, 2011 [Page 15]
-
-Internet-Draft HTTP/1.1, Part 5 August 2010
-
-
-6.3. Range Specifier Registration
-
- The registration procedure for HTTP Range Specifiers is defined by
- Section 2.1 of this document.
-
- The HTTP Range Specifier Registry shall be created at
- and be
- populated with the registrations below:
-
- +----------------------+-------------------+----------------------+
- | Range Specifier Name | Description | Reference |
- +----------------------+-------------------+----------------------+
- | bytes | a range of octets | (this specification) |
- +----------------------+-------------------+----------------------+
-
- The change controller is: "IETF (iesg@ietf.org) - Internet
- Engineering Task Force".
-
-7. Security Considerations
-
- No additional security considerations have been identified beyond
- those applicable to HTTP in general [Part1].
-
-8. Acknowledgments
-
- Most of the specification of ranges is based on work originally done
- by Ari Luotonen and John Franks, with additional input from Steve
- Zilles, Daniel W. Connolly, Roy T. Fielding, Jim Gettys, Martin
- Hamilton, Koen Holtman, Shel Kaplan, Paul Leach, Alex Lopez-Ortiz,
- Larry Masinter, Jeff Mogul, Lou Montulli, David W. Morris, Luigi
- Rizzo, and Bill Weihl.
-
-9. References
-
-9.1. Normative References
-
- [Part1] Fielding, R., Ed., Gettys, J., Mogul, J., Frystyk, H.,
- Masinter, L., Leach, P., Berners-Lee, T., Lafon, Y., Ed.,
- and J. Reschke, Ed., "HTTP/1.1, part 1: URIs, Connections,
- and Message Parsing", draft-ietf-httpbis-p1-messaging-11
- (work in progress), August 2010.
-
- [Part4] Fielding, R., Ed., Gettys, J., Mogul, J., Frystyk, H.,
- Masinter, L., Leach, P., Berners-Lee, T., Lafon, Y., Ed.,
- and J. Reschke, Ed., "HTTP/1.1, part 4: Conditional
- Requests", draft-ietf-httpbis-p4-conditional-11 (work in
- progress), August 2010.
-
-
-
-
-Fielding, et al. Expires February 5, 2011 [Page 16]
-
-Internet-Draft HTTP/1.1, Part 5 August 2010
-
-
- [RFC2046] Freed, N. and N. Borenstein, "Multipurpose Internet Mail
- Extensions (MIME) Part Two: Media Types", RFC 2046,
- November 1996.
-
- [RFC2119] Bradner, S., "Key words for use in RFCs to Indicate
- Requirement Levels", BCP 14, RFC 2119, March 1997.
-
- [RFC5234] Crocker, D., Ed. and P. Overell, "Augmented BNF for Syntax
- Specifications: ABNF", STD 68, RFC 5234, January 2008.
-
-9.2. Informative References
-
- [RFC2616] Fielding, R., Gettys, J., Mogul, J., Frystyk, H.,
- Masinter, L., Leach, P., and T. Berners-Lee, "Hypertext
- Transfer Protocol -- HTTP/1.1", RFC 2616, June 1999.
-
- [RFC3864] Klyne, G., Nottingham, M., and J. Mogul, "Registration
- Procedures for Message Header Fields", BCP 90, RFC 3864,
- September 2004.
-
- [RFC4288] Freed, N. and J. Klensin, "Media Type Specifications and
- Registration Procedures", BCP 13, RFC 4288, December 2005.
-
- [RFC5226] Narten, T. and H. Alvestrand, "Guidelines for Writing an
- IANA Considerations Section in RFCs", BCP 26, RFC 5226,
- May 2008.
-
-Appendix A. Internet Media Type multipart/byteranges
-
- When an HTTP 206 (Partial Content) response message includes the
- content of multiple ranges (a response to a request for multiple non-
- overlapping ranges), these are transmitted as a multipart message-
- body ([RFC2046], Section 5.1). The media type for this purpose is
- called "multipart/byteranges". The following is to be registered
- with IANA [RFC4288].
-
- Note: Despite the name "multipart/byteranges" is not limited to
- the byte ranges only.
-
- The multipart/byteranges media type includes one or more parts, each
- with its own Content-Type and Content-Range fields. The required
- boundary parameter specifies the boundary string used to separate
- each body-part.
-
-
-
-
-
-
-
-
-Fielding, et al. Expires February 5, 2011 [Page 17]
-
-Internet-Draft HTTP/1.1, Part 5 August 2010
-
-
- Type name: multipart
-
- Subtype name: byteranges
-
- Required parameters: boundary
-
- Optional parameters: none
-
- Encoding considerations: only "7bit", "8bit", or "binary" are
- permitted
-
- Security considerations: none
-
- Interoperability considerations: none
-
- Published specification: This specification (see Appendix A).
-
- Applications that use this media type:
-
- Additional information:
-
- Magic number(s): none
-
- File extension(s): none
-
- Macintosh file type code(s): none
-
- Person and email address to contact for further information: See
- Authors Section.
-
- Intended usage: COMMON
-
- Restrictions on usage: none
-
- Author/Change controller: IESG
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-Fielding, et al. Expires February 5, 2011 [Page 18]
-
-Internet-Draft HTTP/1.1, Part 5 August 2010
-
-
- For example:
-
- HTTP/1.1 206 Partial Content
- Date: Wed, 15 Nov 1995 06:25:24 GMT
- Last-Modified: Wed, 15 Nov 1995 04:58:08 GMT
- Content-type: multipart/byteranges; boundary=THIS_STRING_SEPARATES
-
- --THIS_STRING_SEPARATES
- Content-type: application/pdf
- Content-range: bytes 500-999/8000
-
- ...the first range...
- --THIS_STRING_SEPARATES
- Content-type: application/pdf
- Content-range: bytes 7000-7999/8000
-
- ...the second range
- --THIS_STRING_SEPARATES--
-
- Other example:
-
- HTTP/1.1 206 Partial Content
- Date: Tue, 14 Nov 1995 06:25:24 GMT
- Last-Modified: Tue, 14 July 04:58:08 GMT
- Content-type: multipart/byteranges; boundary=THIS_STRING_SEPARATES
-
- --THIS_STRING_SEPARATES
- Content-type: video/example
- Content-range: exampleunit 1.2-4.3/25
-
- ...the first range...
- --THIS_STRING_SEPARATES
- Content-type: video/example
- Content-range: exampleunit 11.2-14.3/25
-
- ...the second range
- --THIS_STRING_SEPARATES--
-
- Notes:
-
- 1. Additional CRLFs MAY precede the first boundary string in the
- body.
-
- 2. Although [RFC2046] permits the boundary string to be quoted, some
- existing implementations handle a quoted boundary string
- incorrectly.
-
-
-
-
-
-Fielding, et al. Expires February 5, 2011 [Page 19]
-
-Internet-Draft HTTP/1.1, Part 5 August 2010
-
-
- 3. A number of browsers and servers were coded to an early draft of
- the byteranges specification to use a media type of multipart/
- x-byteranges, which is almost, but not quite compatible with the
- version documented in HTTP/1.1.
-
-Appendix B. Compatibility with Previous Versions
-
-B.1. Changes from RFC 2616
-
- Clarify that it is not ok to use a weak cache validator in a 206
- response. (Section 3.1)
-
- Clarify that multipart/byteranges can consist of a single part.
- (Appendix A)
-
-Appendix C. Collected ABNF
-
- Accept-Ranges = "Accept-Ranges:" OWS Accept-Ranges-v
- Accept-Ranges-v = acceptable-ranges
-
- Content-Range = "Content-Range:" OWS Content-Range-v
- Content-Range-v = content-range-spec
-
- HTTP-date =
-
- If-Range = "If-Range:" OWS If-Range-v
- If-Range-v = entity-tag / HTTP-date
-
- OWS =
-
- Range = "Range:" OWS Range-v
- Range-v = byte-ranges-specifier / other-ranges-specifier
-
- acceptable-ranges = ( *( "," OWS ) range-unit *( OWS "," [ OWS
- range-unit ] ) ) / "none"
-
- byte-content-range-spec = bytes-unit SP byte-range-resp-spec "/" (
- instance-length / "*" )
- byte-range-resp-spec = ( first-byte-pos "-" last-byte-pos ) / "*"
- byte-range-set = ( *( "," OWS ) byte-range-spec ) / (
- suffix-byte-range-spec *( OWS "," [ ( OWS byte-range-spec ) /
- suffix-byte-range-spec ] ) )
- byte-range-spec = first-byte-pos "-" [ last-byte-pos ]
- byte-ranges-specifier = bytes-unit "=" byte-range-set
- bytes-unit = "bytes"
-
- content-range-spec = byte-content-range-spec /
- other-content-range-spec
-
-
-
-Fielding, et al. Expires February 5, 2011 [Page 20]
-
-Internet-Draft HTTP/1.1, Part 5 August 2010
-
-
- entity-tag =
-
- first-byte-pos = 1*DIGIT
-
- instance-length = 1*DIGIT
-
- last-byte-pos = 1*DIGIT
-
- other-content-range-spec = other-range-unit SP other-range-resp-spec
- other-range-resp-spec = *CHAR
- other-range-set = 1*CHAR
- other-range-unit = token
- other-ranges-specifier = other-range-unit "=" other-range-set
-
- range-unit = bytes-unit / other-range-unit
-
- suffix-byte-range-spec = "-" suffix-length
- suffix-length = 1*DIGIT
-
- token =
-
- ABNF diagnostics:
-
- ; Accept-Ranges defined but not used
- ; Content-Range defined but not used
- ; If-Range defined but not used
- ; Range defined but not used
-
-Appendix D. Change Log (to be removed by RFC Editor before publication)
-
-D.1. Since RFC2616
-
- Extracted relevant partitions from [RFC2616].
-
-D.2. Since draft-ietf-httpbis-p5-range-00
-
- Closed issues:
-
- o : "Cache
- validators in 206 responses"
- ()
-
- o : "Normative and
- Informative references"
-
- o : "Normative up-
- to-date references"
-
-
-
-
-Fielding, et al. Expires February 5, 2011 [Page 21]
-
-Internet-Draft HTTP/1.1, Part 5 August 2010
-
-
-D.3. Since draft-ietf-httpbis-p5-range-01
-
- Closed issues:
-
- o : "Updating to
- RFC4288"
-
- Ongoing work on ABNF conversion
- ():
-
- o Add explicit references to BNF syntax and rules imported from
- other parts of the specification.
-
-D.4. Since draft-ietf-httpbis-p5-range-02
-
- Ongoing work on IANA Message Header Registration
- ():
-
- o Reference RFC 3984, and update header registrations for headers
- defined in this document.
-
-D.5. Since draft-ietf-httpbis-p5-range-03
-
-D.6. Since draft-ietf-httpbis-p5-range-04
-
- Closed issues:
-
- o : "multipart/
- byteranges minimum number of parts"
-
- Ongoing work on ABNF conversion
- ():
-
- o Use "/" instead of "|" for alternatives.
-
- o Introduce new ABNF rules for "bad" whitespace ("BWS"), optional
- whitespace ("OWS") and required whitespace ("RWS").
-
- o Rewrite ABNFs to spell out whitespace rules, factor out header
- value format definitions.
-
-D.7. Since draft-ietf-httpbis-p5-range-05
-
- Closed issues:
-
- o : "State base
- for *-byte-pos and suffix-length"
-
-
-
-
-Fielding, et al. Expires February 5, 2011 [Page 22]
-
-Internet-Draft HTTP/1.1, Part 5 August 2010
-
-
- Ongoing work on Custom Ranges
- ():
-
- o Remove bias in favor of byte ranges; allow custom ranges in ABNF.
-
- Final work on ABNF conversion
- ():
-
- o Add appendix containing collected and expanded ABNF, reorganize
- ABNF introduction.
-
-D.8. Since draft-ietf-httpbis-p5-range-06
-
- Closed issues:
-
- o : "base for
- numeric protocol elements"
-
-D.9. Since draft-ietf-httpbis-p5-range-07
-
- Closed issues:
-
- o Fixed discrepancy in the If-Range definition about allowed
- validators.
-
- o : "multipart/
- byteranges for custom range units"
-
- o : "range unit
- missing from other-ranges-specifier in Range header"
-
- o : "move IANA
- registrations for optional status codes"
-
-D.10. Since draft-ietf-httpbis-p5-range-08
-
- No significant changes.
-
-D.11. Since draft-ietf-httpbis-p5-range-09
-
- No significant changes.
-
-D.12. Since draft-ietf-httpbis-p5-range-10
-
- Closed issues:
-
- o : "Clarify
- 'Requested Variant'"
-
-
-
-Fielding, et al. Expires February 5, 2011 [Page 23]
-
-Internet-Draft HTTP/1.1, Part 5 August 2010
-
-
- o : "Clarify
- entity / representation / variant terminology"
-
- o : "consider
- removing the 'changes from 2068' sections"
-
- Ongoing work on Custom Ranges
- ():
-
- o Add IANA registry.
-
-Index
-
- 2
- 206 Partial Content (status code) 7
-
- 4
- 416 Requested Range Not Satisfiable (status code) 8
-
- A
- Accept-Ranges header 9
-
- C
- Content-Range header 9
-
- G
- Grammar
- Accept-Ranges 9
- Accept-Ranges-v 9
- acceptable-ranges 9
- byte-content-range-spec 9
- byte-range-resp-spec 9
- byte-range-set 12
- byte-range-spec 12
- byte-ranges-specifier 12
- bytes-unit 6
- Content-Range 9
- content-range-spec 9
- Content-Range-v 9
- first-byte-pos 12
- If-Range 12
- If-Range-v 12
- instance-length 9
- last-byte-pos 12
- other-range-unit 6
- Range 14
- range-unit 6
- ranges-specifier 12
-
-
-
-Fielding, et al. Expires February 5, 2011 [Page 24]
-
-Internet-Draft HTTP/1.1, Part 5 August 2010
-
-
- suffix-byte-range-spec 13
- suffix-length 13
-
- H
- Headers
- Accept-Ranges 9
- Content-Range 9
- If-Range 11
- Range 12
-
- I
- If-Range header 11
-
- M
- Media Type
- multipart/byteranges 17
- multipart/x-byteranges 20
- multipart/byteranges Media Type 17
- multipart/x-byteranges Media Type 20
-
- R
- Range header 12
-
- S
- Status Codes
- 206 Partial Content 7
- 416 Requested Range Not Satisfiable 8
-
-Authors' Addresses
-
- Roy T. Fielding (editor)
- Day Software
- 23 Corporate Plaza DR, Suite 280
- Newport Beach, CA 92660
- USA
-
- Phone: +1-949-706-5300
- Fax: +1-949-706-5305
- EMail: fielding@gbiv.com
- URI: http://roy.gbiv.com/
-
-
-
-
-
-
-
-
-
-
-
-Fielding, et al. Expires February 5, 2011 [Page 25]
-
-Internet-Draft HTTP/1.1, Part 5 August 2010
-
-
- Jim Gettys
- Alcatel-Lucent Bell Labs
- 21 Oak Knoll Road
- Carlisle, MA 01741
- USA
-
- EMail: jg@freedesktop.org
- URI: http://gettys.wordpress.com/
-
-
- Jeffrey C. Mogul
- Hewlett-Packard Company
- HP Labs, Large Scale Systems Group
- 1501 Page Mill Road, MS 1177
- Palo Alto, CA 94304
- USA
-
- EMail: JeffMogul@acm.org
-
-
- Henrik Frystyk Nielsen
- Microsoft Corporation
- 1 Microsoft Way
- Redmond, WA 98052
- USA
-
- EMail: henrikn@microsoft.com
-
-
- Larry Masinter
- Adobe Systems, Incorporated
- 345 Park Ave
- San Jose, CA 95110
- USA
-
- EMail: LMM@acm.org
- URI: http://larry.masinter.net/
-
-
- Paul J. Leach
- Microsoft Corporation
- 1 Microsoft Way
- Redmond, WA 98052
-
- EMail: paulle@microsoft.com
-
-
-
-
-
-
-Fielding, et al. Expires February 5, 2011 [Page 26]
-
-Internet-Draft HTTP/1.1, Part 5 August 2010
-
-
- Tim Berners-Lee
- World Wide Web Consortium
- MIT Computer Science and Artificial Intelligence Laboratory
- The Stata Center, Building 32
- 32 Vassar Street
- Cambridge, MA 02139
- USA
-
- EMail: timbl@w3.org
- URI: http://www.w3.org/People/Berners-Lee/
-
-
- Yves Lafon (editor)
- World Wide Web Consortium
- W3C / ERCIM
- 2004, rte des Lucioles
- Sophia-Antipolis, AM 06902
- France
-
- EMail: ylafon@w3.org
- URI: http://www.raubacapeu.net/people/yves/
-
-
- Julian F. Reschke (editor)
- greenbytes GmbH
- Hafenweg 16
- Muenster, NW 48155
- Germany
-
- Phone: +49 251 2807760
- Fax: +49 251 2807761
- EMail: julian.reschke@greenbytes.de
- URI: http://greenbytes.de/tech/webdav/
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-Fielding, et al. Expires February 5, 2011 [Page 27]
-
diff --git a/vendor/sabre/dav/docs/draft-ietf-httpbis-p6-cache-11.txt b/vendor/sabre/dav/docs/draft-ietf-httpbis-p6-cache-11.txt
deleted file mode 100644
index 35b875615..000000000
--- a/vendor/sabre/dav/docs/draft-ietf-httpbis-p6-cache-11.txt
+++ /dev/null
@@ -1,2352 +0,0 @@
-
-
-
-HTTPbis Working Group R. Fielding, Ed.
-Internet-Draft Day Software
-Obsoletes: 2616 (if approved) J. Gettys
-Intended status: Standards Track Alcatel-Lucent
-Expires: February 5, 2011 J. Mogul
- HP
- H. Frystyk
- Microsoft
- L. Masinter
- Adobe Systems
- P. Leach
- Microsoft
- T. Berners-Lee
- W3C/MIT
- Y. Lafon, Ed.
- W3C
- M. Nottingham, Ed.
-
- J. Reschke, Ed.
- greenbytes
- August 4, 2010
-
-
- HTTP/1.1, part 6: Caching
- draft-ietf-httpbis-p6-cache-11
-
-Abstract
-
- The Hypertext Transfer Protocol (HTTP) is an application-level
- protocol for distributed, collaborative, hypermedia information
- systems. This document is Part 6 of the seven-part specification
- that defines the protocol referred to as "HTTP/1.1" and, taken
- together, obsoletes RFC 2616. Part 6 defines requirements on HTTP
- caches and the associated header fields that control cache behavior
- or indicate cacheable response messages.
-
-Editorial Note (To be removed by RFC Editor)
-
- Discussion of this draft should take place on the HTTPBIS working
- group mailing list (ietf-http-wg@w3.org). The current issues list is
- at and related
- documents (including fancy diffs) can be found at
- .
-
- The changes in this draft are summarized in Appendix C.12.
-
-Status of This Memo
-
-
-
-
-Fielding, et al. Expires February 5, 2011 [Page 1]
-
-Internet-Draft HTTP/1.1, Part 6 August 2010
-
-
- 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 February 5, 2011.
-
-Copyright Notice
-
- Copyright (c) 2010 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.
-
- This document may contain material from IETF Documents or IETF
- Contributions published or made publicly available before November
- 10, 2008. The person(s) controlling the copyright in some of this
- material may not have granted the IETF Trust the right to allow
- modifications of such material outside the IETF Standards Process.
- Without obtaining an adequate license from the person(s) controlling
- the copyright in such materials, this document may not be modified
- outside the IETF Standards Process, and derivative works of it may
- not be created outside the IETF Standards Process, except to format
- it for publication as an RFC or to translate it into languages other
- than English.
-
-Table of Contents
-
- 1. Introduction . . . . . . . . . . . . . . . . . . . . . . . . . 5
- 1.1. Purpose . . . . . . . . . . . . . . . . . . . . . . . . . 5
- 1.2. Terminology . . . . . . . . . . . . . . . . . . . . . . . 5
- 1.3. Requirements . . . . . . . . . . . . . . . . . . . . . . . 6
-
-
-
-Fielding, et al. Expires February 5, 2011 [Page 2]
-
-Internet-Draft HTTP/1.1, Part 6 August 2010
-
-
- 1.4. Syntax Notation . . . . . . . . . . . . . . . . . . . . . 7
- 1.4.1. Core Rules . . . . . . . . . . . . . . . . . . . . . . 7
- 1.4.2. ABNF Rules defined in other Parts of the
- Specification . . . . . . . . . . . . . . . . . . . . 7
- 2. Cache Operation . . . . . . . . . . . . . . . . . . . . . . . 7
- 2.1. Response Cacheability . . . . . . . . . . . . . . . . . . 7
- 2.1.1. Storing Partial and Incomplete Responses . . . . . . . 8
- 2.2. Constructing Responses from Caches . . . . . . . . . . . . 9
- 2.3. Freshness Model . . . . . . . . . . . . . . . . . . . . . 10
- 2.3.1. Calculating Freshness Lifetime . . . . . . . . . . . . 11
- 2.3.2. Calculating Age . . . . . . . . . . . . . . . . . . . 12
- 2.3.3. Serving Stale Responses . . . . . . . . . . . . . . . 13
- 2.4. Validation Model . . . . . . . . . . . . . . . . . . . . . 14
- 2.5. Request Methods that Invalidate . . . . . . . . . . . . . 14
- 2.6. Shared Caching of Authenticated Responses . . . . . . . . 15
- 2.7. Caching Negotiated Responses . . . . . . . . . . . . . . . 16
- 2.8. Combining Responses . . . . . . . . . . . . . . . . . . . 16
- 3. Header Field Definitions . . . . . . . . . . . . . . . . . . . 17
- 3.1. Age . . . . . . . . . . . . . . . . . . . . . . . . . . . 17
- 3.2. Cache-Control . . . . . . . . . . . . . . . . . . . . . . 18
- 3.2.1. Request Cache-Control Directives . . . . . . . . . . . 18
- 3.2.2. Response Cache-Control Directives . . . . . . . . . . 20
- 3.2.3. Cache Control Extensions . . . . . . . . . . . . . . . 22
- 3.3. Expires . . . . . . . . . . . . . . . . . . . . . . . . . 24
- 3.4. Pragma . . . . . . . . . . . . . . . . . . . . . . . . . . 24
- 3.5. Vary . . . . . . . . . . . . . . . . . . . . . . . . . . . 25
- 3.6. Warning . . . . . . . . . . . . . . . . . . . . . . . . . 26
- 4. History Lists . . . . . . . . . . . . . . . . . . . . . . . . 28
- 5. IANA Considerations . . . . . . . . . . . . . . . . . . . . . 28
- 5.1. Cache Directive Registry . . . . . . . . . . . . . . . . . 28
- 5.2. Header Field Registration . . . . . . . . . . . . . . . . 29
- 6. Security Considerations . . . . . . . . . . . . . . . . . . . 29
- 7. Acknowledgments . . . . . . . . . . . . . . . . . . . . . . . 30
- 8. References . . . . . . . . . . . . . . . . . . . . . . . . . . 30
- 8.1. Normative References . . . . . . . . . . . . . . . . . . . 30
- 8.2. Informative References . . . . . . . . . . . . . . . . . . 31
- Appendix A. Changes from RFC 2616 . . . . . . . . . . . . . . . . 31
- Appendix B. Collected ABNF . . . . . . . . . . . . . . . . . . . 31
- Appendix C. Change Log (to be removed by RFC Editor before
- publication) . . . . . . . . . . . . . . . . . . . . 33
- C.1. Since RFC2616 . . . . . . . . . . . . . . . . . . . . . . 33
- C.2. Since draft-ietf-httpbis-p6-cache-00 . . . . . . . . . . . 33
- C.3. Since draft-ietf-httpbis-p6-cache-01 . . . . . . . . . . . 34
- C.4. Since draft-ietf-httpbis-p6-cache-02 . . . . . . . . . . . 34
- C.5. Since draft-ietf-httpbis-p6-cache-03 . . . . . . . . . . . 34
- C.6. Since draft-ietf-httpbis-p6-cache-04 . . . . . . . . . . . 34
- C.7. Since draft-ietf-httpbis-p6-cache-05 . . . . . . . . . . . 35
- C.8. Since draft-ietf-httpbis-p6-cache-06 . . . . . . . . . . . 35
-
-
-
-Fielding, et al. Expires February 5, 2011 [Page 3]
-
-Internet-Draft HTTP/1.1, Part 6 August 2010
-
-
- C.9. Since draft-ietf-httpbis-p6-cache-07 . . . . . . . . . . . 35
- C.10. Since draft-ietf-httpbis-p6-cache-08 . . . . . . . . . . . 36
- C.11. Since draft-ietf-httpbis-p6-cache-09 . . . . . . . . . . . 36
- C.12. Since draft-ietf-httpbis-p6-cache-10 . . . . . . . . . . . 37
- Index . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 37
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-Fielding, et al. Expires February 5, 2011 [Page 4]
-
-Internet-Draft HTTP/1.1, Part 6 August 2010
-
-
-1. Introduction
-
- HTTP is typically used for distributed information systems, where
- performance can be improved by the use of response caches. This
- document defines aspects of HTTP/1.1 related to caching and reusing
- response messages.
-
-1.1. Purpose
-
- An HTTP cache is a local store of response messages and the subsystem
- that controls its message storage, retrieval, and deletion. A cache
- stores cacheable responses in order to reduce the response time and
- network bandwidth consumption on future, equivalent requests. Any
- client or server MAY employ a cache, though a cache cannot be used by
- a server that is acting as a tunnel.
-
- Caching would be useless if it did not significantly improve
- performance. The goal of caching in HTTP/1.1 is to reuse a prior
- response message to satisfy a current request. In some cases, a
- stored response can be reused without the need for a network request,
- reducing latency and network round-trips; a "freshness" mechanism is
- used for this purpose (see Section 2.3). Even when a new request is
- required, it is often possible to reuse all or parts of the payload
- of a prior response to satisfy the request, thereby reducing network
- bandwidth usage; a "validation" mechanism is used for this purpose
- (see Section 2.4).
-
-1.2. Terminology
-
- This specification uses a number of terms to refer to the roles
- played by participants in, and objects of, HTTP caching.
-
- cacheable
-
- A response is cacheable if a cache is allowed to store a copy of
- the response message for use in answering subsequent requests.
- Even when a response is cacheable, there might be additional
- constraints on whether a cache can use the cached copy to satisfy
- a particular request.
-
- explicit expiration time
-
- The time at which the origin server intends that a representation
- no longer be returned by a cache without further validation.
-
-
-
-
-
-
-
-Fielding, et al. Expires February 5, 2011 [Page 5]
-
-Internet-Draft HTTP/1.1, Part 6 August 2010
-
-
- heuristic expiration time
-
- An expiration time assigned by a cache when no explicit expiration
- time is available.
-
- age
-
- The age of a response is the time since it was sent by, or
- successfully validated with, the origin server.
-
- first-hand
-
- A response is first-hand if the freshness model is not in use;
- i.e., its age is 0.
-
- freshness lifetime
-
- The length of time between the generation of a response and its
- expiration time.
-
- fresh
-
- A response is fresh if its age has not yet exceeded its freshness
- lifetime.
-
- stale
-
- A response is stale if its age has passed its freshness lifetime
- (either explicit or heuristic).
-
- validator
-
- A protocol element (e.g., an entity-tag or a Last-Modified time)
- that is used to find out whether a stored response has an
- equivalent copy of a representation.
-
- shared cache
-
- A cache that is accessible to more than one user. A non-shared
- cache is dedicated to a single user.
-
-1.3. Requirements
-
- 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 implementation is not compliant if it fails to satisfy one or more
-
-
-
-Fielding, et al. Expires February 5, 2011 [Page 6]
-
-Internet-Draft HTTP/1.1, Part 6 August 2010
-
-
- of the "MUST" or "REQUIRED" level requirements for the protocols it
- implements. An implementation that satisfies all the "MUST" or
- "REQUIRED" level and all the "SHOULD" level requirements for its
- protocols is said to be "unconditionally compliant"; one that
- satisfies all the "MUST" level requirements but not all the "SHOULD"
- level requirements for its protocols is said to be "conditionally
- compliant".
-
-1.4. Syntax Notation
-
- This specification uses the ABNF syntax defined in Section 1.2 of
- [Part1] (which extends the syntax defined in [RFC5234] with a list
- rule). Appendix B shows the collected ABNF, with the list rule
- expanded.
-
- The following core rules are included by reference, as defined in
- [RFC5234], Appendix B.1: ALPHA (letters), CR (carriage return), CRLF
- (CR LF), CTL (controls), DIGIT (decimal 0-9), DQUOTE (double quote),
- HEXDIG (hexadecimal 0-9/A-F/a-f), LF (line feed), OCTET (any 8-bit
- sequence of data), SP (space), VCHAR (any visible USASCII character),
- and WSP (whitespace).
-
-1.4.1. Core Rules
-
- The core rules below are defined in Section 1.2.2 of [Part1]:
-
- quoted-string =
- token =
- OWS =
-
-1.4.2. ABNF Rules defined in other Parts of the Specification
-
- The ABNF rules below are defined in other parts:
-
- field-name =
- HTTP-date =
- port =
- pseudonym =
- uri-host =
-
-2. Cache Operation
-
-2.1. Response Cacheability
-
- A cache MUST NOT store a response to any request, unless:
-
- o The request method is understood by the cache and defined as being
- cacheable, and
-
-
-
-Fielding, et al. Expires February 5, 2011 [Page 7]
-
-Internet-Draft HTTP/1.1, Part 6 August 2010
-
-
- o the response status code is understood by the cache, and
-
- o the "no-store" cache directive (see Section 3.2) does not appear
- in request or response headers, and
-
- o the "private" cache response directive (see Section 3.2.2 does not
- appear in the response, if the cache is shared, and
-
- o the "Authorization" header (see Section 3.1 of [Part7]) does not
- appear in the request, if the cache is shared, unless the response
- explicitly allows it (see Section 2.6), and
-
- o the response either:
-
- * contains an Expires header (see Section 3.3), or
-
- * contains a max-age response cache directive (see
- Section 3.2.2), or
-
- * contains a s-maxage response cache directive and the cache is
- shared, or
-
- * contains a Cache Control Extension (see Section 3.2.3) that
- allows it to be cached, or
-
- * has a status code that can be served with heuristic freshness
- (see Section 2.3.1.1).
-
- In this context, a cache has "understood" a request method or a
- response status code if it recognises it and implements any cache-
- specific behaviour. In particular, 206 Partial Content responses
- cannot be cached by an implementation that does not handle partial
- content (see Section 2.1.1).
-
- Note that in normal operation, most caches will not store a response
- that has neither a cache validator nor an explicit expiration time,
- as such responses are not usually useful to store. However, caches
- are not prohibited from storing such responses.
-
-2.1.1. Storing Partial and Incomplete Responses
-
- A cache that receives an incomplete response (for example, with fewer
- bytes of data than specified in a Content-Length header) can store
- the response, but MUST treat it as a partial response [Part5].
- Partial responses can be combined as described in Section 4 of
- [Part5]; the result might be a full response or might still be
- partial. A cache MUST NOT return a partial response to a client
- without explicitly marking it as such using the 206 (Partial Content)
-
-
-
-Fielding, et al. Expires February 5, 2011 [Page 8]
-
-Internet-Draft HTTP/1.1, Part 6 August 2010
-
-
- status code.
-
- A cache that does not support the Range and Content-Range headers
- MUST NOT store incomplete or partial responses.
-
-2.2. Constructing Responses from Caches
-
- For a presented request, a cache MUST NOT return a stored response,
- unless:
-
- o The presented effective request URI (Section 4.3 of [Part1]) and
- that of the stored response match, and
-
- o the request method associated with the stored response allows it
- to be used for the presented request, and
-
- o selecting request-headers nominated by the stored response (if
- any) match those presented (see Section 2.7), and
-
- o the presented request and stored response are free from directives
- that would prevent its use (see Section 3.2 and Section 3.4), and
-
- o the stored response is either:
-
- * fresh (see Section 2.3), or
-
- * allowed to be served stale (see Section 2.3.3), or
-
- * successfully validated (see Section 2.4).
-
- When a stored response is used to satisfy a request without
- validation, caches MUST include a single Age header field
- (Section 3.1) in the response with a value equal to the stored
- response's current_age; see Section 2.3.2.
-
- Requests with methods that are unsafe (Section 7.1.1 of [Part2]) MUST
- be written through the cache to the origin server; i.e., a cache must
- not reply to such a request before having forwarded the request and
- having received a corresponding response.
-
- Also, note that unsafe requests might invalidate already stored
- responses; see Section 2.5.
-
- Caches MUST use the most recent response (as determined by the Date
- header) when more than one suitable response is stored. They can
- also forward a request with "Cache-Control: max-age=0" or "Cache-
- Control: no-cache" to disambiguate which response to use.
-
-
-
-
-Fielding, et al. Expires February 5, 2011 [Page 9]
-
-Internet-Draft HTTP/1.1, Part 6 August 2010
-
-
-2.3. Freshness Model
-
- When a response is "fresh" in the cache, it can be used to satisfy
- subsequent requests without contacting the origin server, thereby
- improving efficiency.
-
- The primary mechanism for determining freshness is for an origin
- server to provide an explicit expiration time in the future, using
- either the Expires header (Section 3.3) or the max-age response cache
- directive (Section 3.2.2). Generally, origin servers will assign
- future explicit expiration times to responses in the belief that the
- representation is not likely to change in a semantically significant
- way before the expiration time is reached.
-
- If an origin server wishes to force a cache to validate every
- request, it can assign an explicit expiration time in the past to
- indicate that the response is already stale. Compliant caches will
- validate the cached response before reusing it for subsequent
- requests.
-
- Since origin servers do not always provide explicit expiration times,
- HTTP caches MAY assign heuristic expiration times when explicit times
- are not specified, employing algorithms that use other header values
- (such as the Last-Modified time) to estimate a plausible expiration
- time. The HTTP/1.1 specification does not provide specific
- algorithms, but does impose worst-case constraints on their results.
-
- The calculation to determine if a response is fresh is:
-
- response_is_fresh = (freshness_lifetime > current_age)
-
- The freshness_lifetime is defined in Section 2.3.1; the current_age
- is defined in Section 2.3.2.
-
- Additionally, clients might need to influence freshness calculation.
- They can do this using several request cache directives, with the
- effect of either increasing or loosening constraints on freshness.
- See Section 3.2.1.
-
- [[ISSUE-no-req-for-directives: there are not requirements directly
- applying to cache-request-directives and freshness.]]
-
- Note that freshness applies only to cache operation; it cannot be
- used to force a user agent to refresh its display or reload a
- resource. See Section 4 for an explanation of the difference between
- caches and history mechanisms.
-
-
-
-
-
-Fielding, et al. Expires February 5, 2011 [Page 10]
-
-Internet-Draft HTTP/1.1, Part 6 August 2010
-
-
-2.3.1. Calculating Freshness Lifetime
-
- A cache can calculate the freshness lifetime (denoted as
- freshness_lifetime) of a response by using the first match of:
-
- o If the cache is shared and the s-maxage response cache directive
- (Section 3.2.2) is present, use its value, or
-
- o If the max-age response cache directive (Section 3.2.2) is
- present, use its value, or
-
- o If the Expires response header (Section 3.3) is present, use its
- value minus the value of the Date response header, or
-
- o Otherwise, no explicit expiration time is present in the response.
- A heuristic freshness lifetime might be applicable; see
- Section 2.3.1.1.
-
- Note that this calculation is not vulnerable to clock skew, since all
- of the information comes from the origin server.
-
-2.3.1.1. Calculating Heuristic Freshness
-
- If no explicit expiration time is present in a stored response that
- has a status code whose definition allows heuristic freshness to be
- used (including the following in Section 8 of [Part2]: 200, 203, 206,
- 300, 301 and 410), a heuristic expiration time MAY be calculated.
- Heuristics MUST NOT be used for response status codes that do not
- explicitly allow it.
-
- When a heuristic is used to calculate freshness lifetime, the cache
- SHOULD attach a Warning header with a 113 warn-code to the response
- if its current_age is more than 24 hours and such a warning is not
- already present.
-
- Also, if the response has a Last-Modified header (Section 6.6 of
- [Part4]), the heuristic expiration value SHOULD be no more than some
- fraction of the interval since that time. A typical setting of this
- fraction might be 10%.
-
- Note: RFC 2616 ([RFC2616], Section 13.9) required that caches do
- not calculate heuristic freshness for URLs with query components
- (i.e., those containing '?'). In practice, this has not been
- widely implemented. Therefore, servers are encouraged to send
- explicit directives (e.g., Cache-Control: no-cache) if they wish
- to preclude caching.
-
-
-
-
-
-Fielding, et al. Expires February 5, 2011 [Page 11]
-
-Internet-Draft HTTP/1.1, Part 6 August 2010
-
-
-2.3.2. Calculating Age
-
- HTTP/1.1 uses the Age response-header to convey the estimated age of
- the response message when obtained from a cache. The Age field value
- is the cache's estimate of the amount of time since the response was
- generated or validated by the origin server. In essence, the Age
- value is the sum of the time that the response has been resident in
- each of the caches along the path from the origin server, plus the
- amount of time it has been in transit along network paths.
-
- The following data is used for the age calculation:
-
- age_value
-
- The term "age_value" denotes the value of the Age header
- (Section 3.1), in a form appropriate for arithmetic operation; or
- 0, if not available.
-
- date_value
-
- HTTP/1.1 requires origin servers to send a Date header, if
- possible, with every response, giving the time at which the
- response was generated. The term "date_value" denotes the value
- of the Date header, in a form appropriate for arithmetic
- operations. See Section 9.3 of [Part1] for the definition of the
- Date header, and for requirements regarding responses without a
- Date response header.
-
- now
-
- The term "now" means "the current value of the clock at the host
- performing the calculation". Hosts that use HTTP, but especially
- hosts running origin servers and caches, SHOULD use NTP
- ([RFC1305]) or some similar protocol to synchronize their clocks
- to a globally accurate time standard.
-
- request_time
-
- The current value of the clock at the host at the time the request
- resulting in the stored response was made.
-
- response_time
-
- The current value of the clock at the host at the time the
- response was received.
-
- A response's age can be calculated in two entirely independent ways:
-
-
-
-
-Fielding, et al. Expires February 5, 2011 [Page 12]
-
-Internet-Draft HTTP/1.1, Part 6 August 2010
-
-
- 1. the "apparent_age": response_time minus date_value, if the local
- clock is reasonably well synchronized to the origin server's
- clock. If the result is negative, the result is replaced by
- zero.
-
- 2. the "corrected_age_value", if all of the caches along the
- response path implement HTTP/1.1; note this value MUST be
- interpreted relative to the time the request was initiated, not
- the time that the response was received.
-
-
- apparent_age = max(0, response_time - date_value);
-
- response_delay = response_time - request_time;
- corrected_age_value = age_value + response_delay;
-
- These are combined as
-
- corrected_initial_age = max(apparent_age, corrected_age_value);
-
- The current_age of a stored response can then be calculated by adding
- the amount of time (in seconds) since the stored response was last
- validated by the origin server to the corrected_initial_age.
-
- resident_time = now - response_time;
- current_age = corrected_initial_age + resident_time;
-
-2.3.3. Serving Stale Responses
-
- A "stale" response is one that either has explicit expiry information
- or is allowed to have heuristic expiry calculated, but is not fresh
- according to the calculations in Section 2.3.
-
- Caches MUST NOT return a stale response if it is prohibited by an
- explicit in-protocol directive (e.g., by a "no-store" or "no-cache"
- cache directive, a "must-revalidate" cache-response-directive, or an
- applicable "s-maxage" or "proxy-revalidate" cache-response-directive;
- see Section 3.2.2).
-
- Caches SHOULD NOT return stale responses unless they are disconnected
- (i.e., it cannot contact the origin server or otherwise find a
- forward path) or otherwise explicitly allowed (e.g., the max-stale
- request directive; see Section 3.2.1).
-
- Stale responses SHOULD have a Warning header with the 110 warn-code
- (see Section 3.6). Likewise, the 112 warn-code SHOULD be sent on
- stale responses if the cache is disconnected.
-
-
-
-
-Fielding, et al. Expires February 5, 2011 [Page 13]
-
-Internet-Draft HTTP/1.1, Part 6 August 2010
-
-
- If a cache receives a first-hand response (either an entire response,
- or a 304 (Not Modified) response) that it would normally forward to
- the requesting client, and the received response is no longer fresh,
- the cache SHOULD forward it to the requesting client without adding a
- new Warning (but without removing any existing Warning headers). A
- cache SHOULD NOT attempt to validate a response simply because that
- response became stale in transit.
-
-2.4. Validation Model
-
- When a cache has one or more stored responses for a requested URI,
- but cannot serve any of them (e.g., because they are not fresh, or
- one cannot be selected; see Section 2.7), it can use the conditional
- request mechanism [Part4] in the forwarded request to give the origin
- server an opportunity to both select a valid stored response to be
- used, and to update it. This process is known as "validating" or
- "revalidating" the stored response.
-
- When sending such a conditional request, the cache SHOULD add an If-
- Modified-Since header whose value is that of the Last-Modified header
- from the selected (see Section 2.7) stored response, if available.
-
- Additionally, the cache SHOULD add an If-None-Match header whose
- value is that of the ETag header(s) from all responses stored for the
- requested URI, if present. However, if any of the stored responses
- contains only partial content, its entity-tag SHOULD NOT be included
- in the If-None-Match header field unless the request is for a range
- that would be fully satisfied by that stored response.
-
- A 304 (Not Modified) response status code indicates that the stored
- response can be updated and reused; see Section 2.8.
-
- A full response (i.e., one with a response body) indicates that none
- of the stored responses nominated in the conditional request is
- suitable. Instead, the full response SHOULD be used to satisfy the
- request and MAY replace the stored response.
-
- If a cache receives a 5xx response while attempting to validate a
- response, it MAY either forward this response to the requesting
- client, or act as if the server failed to respond. In the latter
- case, it MAY return a previously stored response (see Section 2.3.3).
-
-2.5. Request Methods that Invalidate
-
- Because unsafe methods (Section 7.1.1 of [Part2]) have the potential
- for changing state on the origin server, intervening caches can use
- them to keep their contents up-to-date.
-
-
-
-
-Fielding, et al. Expires February 5, 2011 [Page 14]
-
-Internet-Draft HTTP/1.1, Part 6 August 2010
-
-
- The following HTTP methods MUST cause a cache to invalidate the
- effective Request URI (Section 4.3 of [Part1]) as well as the URI(s)
- in the Location and Content-Location headers (if present):
-
- o PUT
-
- o DELETE
-
- o POST
-
- An invalidation based on a URI from a Location or Content-Location
- header MUST NOT be performed if the host part of that URI differs
- from the host part in the effective request URI (Section 4.3 of
- [Part1]). This helps prevent denial of service attacks.
-
- A cache that passes through requests for methods it does not
- understand SHOULD invalidate the effective request URI (Section 4.3
- of [Part1]).
-
- Here, "invalidate" means that the cache will either remove all stored
- responses related to the effective request URI, or will mark these as
- "invalid" and in need of a mandatory validation before they can be
- returned in response to a subsequent request.
-
- Note that this does not guarantee that all appropriate responses are
- invalidated. For example, the request that caused the change at the
- origin server might not have gone through the cache where a response
- is stored.
-
-2.6. Shared Caching of Authenticated Responses
-
- Shared caches MUST NOT use a cached response to a request with an
- Authorization header (Section 3.1 of [Part7]) to satisfy any
- subsequent request unless a cache directive that allows such
- responses to be stored is present in the response.
-
- In this specification, the following Cache-Control response
- directives (Section 3.2.2) have such an effect: must-revalidate,
- public, s-maxage.
-
- Note that cached responses that contain the "must-revalidate" and/or
- "s-maxage" response directives are not allowed to be served stale
- (Section 2.3.3) by shared caches. In particular, a response with
- either "max-age=0, must-revalidate" or "s-maxage=0" cannot be used to
- satisfy a subsequent request without revalidating it on the origin
- server.
-
-
-
-
-
-Fielding, et al. Expires February 5, 2011 [Page 15]
-
-Internet-Draft HTTP/1.1, Part 6 August 2010
-
-
-2.7. Caching Negotiated Responses
-
- When a cache receives a request that can be satisfied by a stored
- response that has a Vary header field (Section 3.5), it MUST NOT use
- that response unless all of the selecting request-headers nominated
- by the Vary header match in both the original request (i.e., that
- associated with the stored response), and the presented request.
-
- The selecting request-headers from two requests are defined to match
- if and only if those in the first request can be transformed to those
- in the second request by applying any of the following:
-
- o adding or removing whitespace, where allowed in the header's
- syntax
-
- o combining multiple message-header fields with the same field name
- (see Section 3.2 of [Part1])
-
- o normalizing both header values in a way that is known to have
- identical semantics, according to the header's specification
- (e.g., re-ordering field values when order is not significant;
- case-normalization, where values are defined to be case-
- insensitive)
-
- If (after any normalization that might take place) a header field is
- absent from a request, it can only match another request if it is
- also absent there.
-
- A Vary header field-value of "*" always fails to match, and
- subsequent requests to that resource can only be properly interpreted
- by the origin server.
-
- The stored response with matching selecting request-headers is known
- as the selected response.
-
- If no selected response is available, the cache MAY forward the
- presented request to the origin server in a conditional request; see
- Section 2.4.
-
-2.8. Combining Responses
-
- When a cache receives a 304 (Not Modified) response or a 206 (Partial
- Content) response (in this section, the "new" response"), it needs to
- created an updated response by combining the stored response with the
- new one, so that the updated response can be used to satisfy the
- request, and potentially update the cached response.
-
- If the new response contains an ETag, it identifies the stored
-
-
-
-Fielding, et al. Expires February 5, 2011 [Page 16]
-
-Internet-Draft HTTP/1.1, Part 6 August 2010
-
-
- response to use. [[TODO-mention-CL: might need language about
- Content-Location here]][[TODO-select-for-combine: Shouldn't this be
- the selected response?]]
-
- If the new response's status code is 206 (partial content), both the
- stored and new responses MUST have validators, and those validators
- MUST match using the strong comparison function (see Section 4 of
- [Part4]). Otherwise, the responses MUST NOT be combined.
-
- The stored response headers are used as those of the updated
- response, except that
-
- o any stored Warning headers with warn-code 1xx (see Section 3.6)
- MUST be deleted.
-
- o any stored Warning headers with warn-code 2xx MUST be retained.
-
- o any other headers provided in the new response MUST replace all
- instances of the corresponding headers from the stored response.
-
- The updated response headers MUST be used to replace those of the
- stored response in cache (unless the stored response is removed from
- cache). In the case of a 206 response, the combined representation
- MAY be stored.
-
-3. Header Field Definitions
-
- This section defines the syntax and semantics of HTTP/1.1 header
- fields related to caching.
-
-3.1. Age
-
- The "Age" response-header field conveys the sender's estimate of the
- amount of time since the response was generated or successfully
- validated at the origin server. Age values are calculated as
- specified in Section 2.3.2.
-
- Age = "Age" ":" OWS Age-v
- Age-v = delta-seconds
-
- Age field-values are non-negative integers, representing time in
- seconds.
-
- delta-seconds = 1*DIGIT
-
- If a cache receives a value larger than the largest positive integer
- it can represent, or if any of its age calculations overflows, it
- MUST transmit an Age header with a field-value of 2147483648 (2^31).
-
-
-
-Fielding, et al. Expires February 5, 2011 [Page 17]
-
-Internet-Draft HTTP/1.1, Part 6 August 2010
-
-
- Caches SHOULD use an arithmetic type of at least 31 bits of range.
-
- The presence of an Age header field in a response implies that a
- response is not first-hand. However, the converse is not true, since
- HTTP/1.0 caches might not implement the Age header field.
-
-3.2. Cache-Control
-
- The "Cache-Control" general-header field is used to specify
- directives for caches along the request/response chain. Such cache
- directives are unidirectional in that the presence of a directive in
- a request does not imply that the same directive is to be given in
- the response.
-
- HTTP/1.1 caches MUST obey the requirements of the Cache-Control
- directives defined in this section. See Section 3.2.3 for
- information about how Cache-Control directives defined elsewhere are
- handled.
-
- Note: HTTP/1.0 caches might not implement Cache-Control and might
- only implement Pragma: no-cache (see Section 3.4).
-
- Cache directives MUST be passed through by a proxy or gateway
- application, regardless of their significance to that application,
- since the directives might be applicable to all recipients along the
- request/response chain. It is not possible to target a directive to
- a specific cache.
-
- Cache-Control = "Cache-Control" ":" OWS Cache-Control-v
- Cache-Control-v = 1#cache-directive
-
- cache-directive = cache-request-directive
- / cache-response-directive
-
- cache-extension = token [ "=" ( token / quoted-string ) ]
-
-3.2.1. Request Cache-Control Directives
-
- cache-request-directive =
- "no-cache"
- / "no-store"
- / "max-age" "=" delta-seconds
- / "max-stale" [ "=" delta-seconds ]
- / "min-fresh" "=" delta-seconds
- / "no-transform"
- / "only-if-cached"
- / cache-extension
-
-
-
-
-Fielding, et al. Expires February 5, 2011 [Page 18]
-
-Internet-Draft HTTP/1.1, Part 6 August 2010
-
-
- no-cache
-
- The no-cache request directive indicates that a stored response
- MUST NOT be used to satisfy the request without successful
- validation on the origin server.
-
- no-store
-
- The no-store request directive indicates that a cache MUST NOT
- store any part of either this request or any response to it. This
- directive applies to both non-shared and shared caches. "MUST NOT
- store" in this context means that the cache MUST NOT intentionally
- store the information in non-volatile storage, and MUST make a
- best-effort attempt to remove the information from volatile
- storage as promptly as possible after forwarding it.
-
- This directive is NOT a reliable or sufficient mechanism for
- ensuring privacy. In particular, malicious or compromised caches
- might not recognize or obey this directive, and communications
- networks might be vulnerable to eavesdropping.
-
- max-age
-
- The max-age request directive indicates that the client is willing
- to accept a response whose age is no greater than the specified
- time in seconds. Unless the max-stale request directive is also
- present, the client is not willing to accept a stale response.
-
- max-stale
-
- The max-stale request directive indicates that the client is
- willing to accept a response that has exceeded its expiration
- time. If max-stale is assigned a value, then the client is
- willing to accept a response that has exceeded its expiration time
- by no more than the specified number of seconds. If no value is
- assigned to max-stale, then the client is willing to accept a
- stale response of any age.
-
- min-fresh
-
- The min-fresh request directive indicates that the client is
- willing to accept a response whose freshness lifetime is no less
- than its current age plus the specified time in seconds. That is,
- the client wants a response that will still be fresh for at least
- the specified number of seconds.
-
-
-
-
-
-
-Fielding, et al. Expires February 5, 2011 [Page 19]
-
-Internet-Draft HTTP/1.1, Part 6 August 2010
-
-
- no-transform
-
- The no-transform request directive indicates that an intermediate
- cache or proxy MUST NOT change the Content-Encoding, Content-Range
- or Content-Type request headers, nor the request representation.
-
- only-if-cached
-
- The only-if-cached request directive indicates that the client
- only wishes to return a stored response. If it receives this
- directive, a cache SHOULD either respond using a stored response
- that is consistent with the other constraints of the request, or
- respond with a 504 (Gateway Timeout) status code. If a group of
- caches is being operated as a unified system with good internal
- connectivity, such a request MAY be forwarded within that group of
- caches.
-
-3.2.2. Response Cache-Control Directives
-
- cache-response-directive =
- "public"
- / "private" [ "=" DQUOTE 1#field-name DQUOTE ]
- / "no-cache" [ "=" DQUOTE 1#field-name DQUOTE ]
- / "no-store"
- / "no-transform"
- / "must-revalidate"
- / "proxy-revalidate"
- / "max-age" "=" delta-seconds
- / "s-maxage" "=" delta-seconds
- / cache-extension
-
- public
-
- The public response directive indicates that the response MAY be
- cached, even if it would normally be non-cacheable or cacheable
- only within a non-shared cache. (See also Authorization, Section
- 3.1 of [Part7], for additional details.)
-
- private
-
- The private response directive indicates that the response message
- is intended for a single user and MUST NOT be stored by a shared
- cache. A private (non-shared) cache MAY store the response.
-
- If the private response directive specifies one or more field-
- names, this requirement is limited to the field-values associated
- with the listed response headers. That is, the specified field-
- names(s) MUST NOT be stored by a shared cache, whereas the
-
-
-
-Fielding, et al. Expires February 5, 2011 [Page 20]
-
-Internet-Draft HTTP/1.1, Part 6 August 2010
-
-
- remainder of the response message MAY be.
-
- Note: This usage of the word private only controls where the
- response can be stored; it cannot ensure the privacy of the
- message content. Also, private response directives with field-
- names are often handled by implementations as if an unqualified
- private directive was received; i.e., the special handling for the
- qualified form is not widely implemented.
-
- no-cache
-
- The no-cache response directive indicates that the response MUST
- NOT be used to satisfy a subsequent request without successful
- validation on the origin server. This allows an origin server to
- prevent a cache from using it to satisfy a request without
- contacting it, even by caches that have been configured to return
- stale responses.
-
- If the no-cache response directive specifies one or more field-
- names, this requirement is limited to the field-values associated
- with the listed response headers. That is, the specified field-
- name(s) MUST NOT be sent in the response to a subsequent request
- without successful validation on the origin server. This allows
- an origin server to prevent the re-use of certain header fields in
- a response, while still allowing caching of the rest of the
- response.
-
- Note: Most HTTP/1.0 caches will not recognize or obey this
- directive. Also, no-cache response directives with field-names
- are often handled by implementations as if an unqualified no-cache
- directive was received; i.e., the special handling for the
- qualified form is not widely implemented.
-
- no-store
-
- The no-store response directive indicates that a cache MUST NOT
- store any part of either the immediate request or response. This
- directive applies to both non-shared and shared caches. "MUST NOT
- store" in this context means that the cache MUST NOT intentionally
- store the information in non-volatile storage, and MUST make a
- best-effort attempt to remove the information from volatile
- storage as promptly as possible after forwarding it.
-
- This directive is NOT a reliable or sufficient mechanism for
- ensuring privacy. In particular, malicious or compromised caches
- might not recognize or obey this directive, and communications
- networks might be vulnerable to eavesdropping.
-
-
-
-
-Fielding, et al. Expires February 5, 2011 [Page 21]
-
-Internet-Draft HTTP/1.1, Part 6 August 2010
-
-
- must-revalidate
-
- The must-revalidate response directive indicates that once it has
- become stale, the response MUST NOT be used to satisfy subsequent
- requests without successful validation on the origin server.
-
- The must-revalidate directive is necessary to support reliable
- operation for certain protocol features. In all circumstances an
- HTTP/1.1 cache MUST obey the must-revalidate directive; in
- particular, if the cache cannot reach the origin server for any
- reason, it MUST generate a 504 (Gateway Timeout) response.
-
- Servers SHOULD send the must-revalidate directive if and only if
- failure to validate a request on the representation could result
- in incorrect operation, such as a silently unexecuted financial
- transaction.
-
- proxy-revalidate
-
- The proxy-revalidate response directive has the same meaning as
- the must-revalidate response directive, except that it does not
- apply to non-shared caches.
-
- max-age
-
- The max-age response directive indicates that response is to be
- considered stale after its age is greater than the specified
- number of seconds.
-
- s-maxage
-
- The s-maxage response directive indicates that, in shared caches,
- the maximum age specified by this directive overrides the maximum
- age specified by either the max-age directive or the Expires
- header. The s-maxage directive also implies the semantics of the
- proxy-revalidate response directive.
-
- no-transform
-
- The no-transform response directive indicates that an intermediate
- cache or proxy MUST NOT change the Content-Encoding, Content-Range
- or Content-Type response headers, nor the response representation.
-
-3.2.3. Cache Control Extensions
-
- The Cache-Control header field can be extended through the use of one
- or more cache-extension tokens, each with an optional value.
- Informational extensions (those that do not require a change in cache
-
-
-
-Fielding, et al. Expires February 5, 2011 [Page 22]
-
-Internet-Draft HTTP/1.1, Part 6 August 2010
-
-
- behavior) can be added without changing the semantics of other
- directives. Behavioral extensions are designed to work by acting as
- modifiers to the existing base of cache directives. Both the new
- directive and the standard directive are supplied, such that
- applications that do not understand the new directive will default to
- the behavior specified by the standard directive, and those that
- understand the new directive will recognize it as modifying the
- requirements associated with the standard directive. In this way,
- extensions to the cache-control directives can be made without
- requiring changes to the base protocol.
-
- This extension mechanism depends on an HTTP cache obeying all of the
- cache-control directives defined for its native HTTP-version, obeying
- certain extensions, and ignoring all directives that it does not
- understand.
-
- For example, consider a hypothetical new response directive called
- "community" that acts as a modifier to the private directive. We
- define this new directive to mean that, in addition to any non-shared
- cache, any cache that is shared only by members of the community
- named within its value may cache the response. An origin server
- wishing to allow the UCI community to use an otherwise private
- response in their shared cache(s) could do so by including
-
- Cache-Control: private, community="UCI"
-
- A cache seeing this header field will act correctly even if the cache
- does not understand the community cache-extension, since it will also
- see and understand the private directive and thus default to the safe
- behavior.
-
- Unrecognized cache directives MUST be ignored; it is assumed that any
- cache directive likely to be unrecognized by an HTTP/1.1 cache will
- be combined with standard directives (or the response's default
- cacheability) such that the cache behavior will remain minimally
- correct even if the cache does not understand the extension(s).
-
- The HTTP Cache Directive Registry defines the name space for the
- cache directives.
-
- Registrations MUST include the following fields:
-
- o Cache Directive Name
-
- o Pointer to specification text
-
- Values to be added to this name space are subject to IETF review
- ([RFC5226], Section 4.1).
-
-
-
-Fielding, et al. Expires February 5, 2011 [Page 23]
-
-Internet-Draft HTTP/1.1, Part 6 August 2010
-
-
- The registry itself is maintained at
- .
-
-3.3. Expires
-
- The "Expires" header field gives the date/time after which the
- response is considered stale. See Section 2.3 for further discussion
- of the freshness model.
-
- The presence of an Expires field does not imply that the original
- resource will change or cease to exist at, before, or after that
- time.
-
- The field-value is an absolute date and time as defined by HTTP-date
- in Section 6.1 of [Part1]; it MUST be sent in rfc1123-date format.
-
- Expires = "Expires" ":" OWS Expires-v
- Expires-v = HTTP-date
-
- For example
-
- Expires: Thu, 01 Dec 1994 16:00:00 GMT
-
- Note: If a response includes a Cache-Control field with the max-
- age directive (see Section 3.2.2), that directive overrides the
- Expires field. Likewise, the s-maxage directive overrides Expires
- in shared caches.
-
- HTTP/1.1 servers SHOULD NOT send Expires dates more than one year in
- the future.
-
- HTTP/1.1 clients and caches MUST treat other invalid date formats,
- especially including the value "0", as in the past (i.e., "already
- expired").
-
-3.4. Pragma
-
- The "Pragma" general-header field is used to include implementation-
- specific directives that might apply to any recipient along the
- request/response chain. All pragma directives specify optional
- behavior from the viewpoint of the protocol; however, some systems
- MAY require that behavior be consistent with the directives.
-
- Pragma = "Pragma" ":" OWS Pragma-v
- Pragma-v = 1#pragma-directive
- pragma-directive = "no-cache" / extension-pragma
- extension-pragma = token [ "=" ( token / quoted-string ) ]
-
-
-
-
-Fielding, et al. Expires February 5, 2011 [Page 24]
-
-Internet-Draft HTTP/1.1, Part 6 August 2010
-
-
- When the no-cache directive is present in a request message, an
- application SHOULD forward the request toward the origin server even
- if it has a cached copy of what is being requested. This pragma
- directive has the same semantics as the no-cache response directive
- (see Section 3.2.2) and is defined here for backward compatibility
- with HTTP/1.0. Clients SHOULD include both header fields when a no-
- cache request is sent to a server not known to be HTTP/1.1 compliant.
- HTTP/1.1 caches SHOULD treat "Pragma: no-cache" as if the client had
- sent "Cache-Control: no-cache".
-
- Note: Because the meaning of "Pragma: no-cache" as a response-
- header field is not actually specified, it does not provide a
- reliable replacement for "Cache-Control: no-cache" in a response.
-
- This mechanism is deprecated; no new Pragma directives will be
- defined in HTTP.
-
-3.5. Vary
-
- The "Vary" response-header field conveys the set of request-header
- fields that were used to select the representation.
-
- Caches use this information, in part, to determine whether a stored
- response can be used to satisfy a given request; see Section 2.7.
- determines, while the response is fresh, whether a cache is permitted
- to use the response to reply to a subsequent request without
- validation; see Section 2.7.
-
- In uncacheable or stale responses, the Vary field value advises the
- user agent about the criteria that were used to select the
- representation.
-
- Vary = "Vary" ":" OWS Vary-v
- Vary-v = "*" / 1#field-name
-
- The set of header fields named by the Vary field value is known as
- the selecting request-headers.
-
- Servers SHOULD include a Vary header field with any cacheable
- response that is subject to server-driven negotiation. Doing so
- allows a cache to properly interpret future requests on that resource
- and informs the user agent about the presence of negotiation on that
- resource. A server MAY include a Vary header field with a non-
- cacheable response that is subject to server-driven negotiation,
- since this might provide the user agent with useful information about
- the dimensions over which the response varies at the time of the
- response.
-
-
-
-
-Fielding, et al. Expires February 5, 2011 [Page 25]
-
-Internet-Draft HTTP/1.1, Part 6 August 2010
-
-
- A Vary field value of "*" signals that unspecified parameters not
- limited to the request-headers (e.g., the network address of the
- client), play a role in the selection of the response representation;
- therefore, a cache cannot determine whether this response is
- appropriate. The "*" value MUST NOT be generated by a proxy server.
-
- The field-names given are not limited to the set of standard request-
- header fields defined by this specification. Field names are case-
- insensitive.
-
-3.6. Warning
-
- The "Warning" general-header field is used to carry additional
- information about the status or transformation of a message that
- might not be reflected in the message. This information is typically
- used to warn about possible incorrectness introduced by caching
- operations or transformations applied to the payload of the message.
-
- Warnings can be used for other purposes, both cache-related and
- otherwise. The use of a warning, rather than an error status code,
- distinguishes these responses from true failures.
-
- Warning headers can in general be applied to any message, however
- some warn-codes are specific to caches and can only be applied to
- response messages.
-
- Warning = "Warning" ":" OWS Warning-v
- Warning-v = 1#warning-value
-
- warning-value = warn-code SP warn-agent SP warn-text
- [SP warn-date]
-
- warn-code = 3DIGIT
- warn-agent = ( uri-host [ ":" port ] ) / pseudonym
- ; the name or pseudonym of the server adding
- ; the Warning header, for use in debugging
- warn-text = quoted-string
- warn-date = DQUOTE HTTP-date DQUOTE
-
- Multiple warnings can be attached to a response (either by the origin
- server or by a cache), including multiple warnings with the same code
- number, only differing in warn-text.
-
- When this occurs, the user agent SHOULD inform the user of as many of
- them as possible, in the order that they appear in the response.
-
- Systems that generate multiple Warning headers SHOULD order them with
- this user agent behavior in mind. New Warning headers SHOULD be
-
-
-
-Fielding, et al. Expires February 5, 2011 [Page 26]
-
-Internet-Draft HTTP/1.1, Part 6 August 2010
-
-
- added after any existing Warning headers.
-
- Warnings are assigned three digit warn-codes. The first digit
- indicates whether the Warning is required to be deleted from a stored
- response after validation:
-
- o 1xx Warnings describe the freshness or validation status of the
- response, and so MUST be deleted by caches after validation. They
- can only be generated by a cache when validating a cached entry,
- and MUST NOT be generated in any other situation.
-
- o 2xx Warnings describe some aspect of the representation that is
- not rectified by a validation (for example, a lossy compression of
- the representation) and MUST NOT be deleted by caches after
- validation, unless a full response is returned, in which case they
- MUST be.
-
- If an implementation sends a message with one or more Warning headers
- to a receiver whose version is HTTP/1.0 or lower, then the sender
- MUST include in each warning-value a warn-date that matches the Date
- header in the message.
-
- If an implementation receives a message with a warning-value that
- includes a warn-date, and that warn-date is different from the Date
- value in the response, then that warning-value MUST be deleted from
- the message before storing, forwarding, or using it. (preventing the
- consequences of naive caching of Warning header fields.) If all of
- the warning-values are deleted for this reason, the Warning header
- MUST be deleted as well.
-
- The following warn-codes are defined by this specification, each with
- a recommended warn-text in English, and a description of its meaning.
-
- 110 Response is stale
-
- SHOULD be included whenever the returned response is stale.
-
- 111 Revalidation failed
-
- SHOULD be included if a cache returns a stale response because an
- attempt to validate the response failed, due to an inability to
- reach the server.
-
- 112 Disconnected operation
-
- SHOULD be included if the cache is intentionally disconnected from
- the rest of the network for a period of time.
-
-
-
-
-Fielding, et al. Expires February 5, 2011 [Page 27]
-
-Internet-Draft HTTP/1.1, Part 6 August 2010
-
-
- 113 Heuristic expiration
-
- SHOULD be included if the cache heuristically chose a freshness
- lifetime greater than 24 hours and the response's age is greater
- than 24 hours.
-
- 199 Miscellaneous warning
-
- The warning text can include arbitrary information to be presented
- to a human user, or logged. A system receiving this warning MUST
- NOT take any automated action, besides presenting the warning to
- the user.
-
- 214 Transformation applied
-
- MUST be added by an intermediate proxy if it applies any
- transformation to the representation, such as changing the
- content-coding, media-type, or modifying the representation data,
- unless this Warning code already appears in the response.
-
- 299 Miscellaneous persistent warning
-
- The warning text can include arbitrary information to be presented
- to a human user, or logged. A system receiving this warning MUST
- NOT take any automated action.
-
-4. History Lists
-
- User agents often have history mechanisms, such as "Back" buttons and
- history lists, that can be used to redisplay a representation
- retrieved earlier in a session.
-
- The freshness model (Section 2.3) does not necessarily apply to
- history mechanisms. I.e., a history mechanism can display a previous
- representation even if it has expired.
-
- This does not prohibit the history mechanism from telling the user
- that a view might be stale, or from honoring cache directives (e.g.,
- Cache-Control: no-store).
-
-5. IANA Considerations
-
-5.1. Cache Directive Registry
-
- The registration procedure for HTTP Cache Directives is defined by
- Section 3.2.3 of this document.
-
- The HTTP Cache Directive Registry shall be created at
-
-
-
-Fielding, et al. Expires February 5, 2011 [Page 28]
-
-Internet-Draft HTTP/1.1, Part 6 August 2010
-
-
- and be
- populated with the registrations below:
-
- +------------------------+------------------------------+
- | Cache Directive | Reference |
- +------------------------+------------------------------+
- | max-age | Section 3.2.1, Section 3.2.2 |
- | max-stale | Section 3.2.1 |
- | min-fresh | Section 3.2.1 |
- | must-revalidate | Section 3.2.2 |
- | no-cache | Section 3.2.1, Section 3.2.2 |
- | no-store | Section 3.2.1, Section 3.2.2 |
- | no-transform | Section 3.2.1, Section 3.2.2 |
- | only-if-cached | Section 3.2.1 |
- | private | Section 3.2.2 |
- | proxy-revalidate | Section 3.2.2 |
- | public | Section 3.2.2 |
- | s-maxage | Section 3.2.2 |
- | stale-if-error | [RFC5861], Section 4 |
- | stale-while-revalidate | [RFC5861], Section 3 |
- +------------------------+------------------------------+
-
-5.2. Header Field Registration
-
- The Message Header Field Registry located at shall be
- updated with the permanent registrations below (see [RFC3864]):
-
- +-------------------+----------+----------+-------------+
- | Header Field Name | Protocol | Status | Reference |
- +-------------------+----------+----------+-------------+
- | Age | http | standard | Section 3.1 |
- | Cache-Control | http | standard | Section 3.2 |
- | Expires | http | standard | Section 3.3 |
- | Pragma | http | standard | Section 3.4 |
- | Vary | http | standard | Section 3.5 |
- | Warning | http | standard | Section 3.6 |
- +-------------------+----------+----------+-------------+
-
- The change controller is: "IETF (iesg@ietf.org) - Internet
- Engineering Task Force".
-
-6. Security Considerations
-
- Caches expose additional potential vulnerabilities, since the
- contents of the cache represent an attractive target for malicious
- exploitation. Because cache contents persist after an HTTP request
- is complete, an attack on the cache can reveal information long after
-
-
-
-Fielding, et al. Expires February 5, 2011 [Page 29]
-
-Internet-Draft HTTP/1.1, Part 6 August 2010
-
-
- a user believes that the information has been removed from the
- network. Therefore, cache contents need to be protected as sensitive
- information.
-
-7. Acknowledgments
-
- Much of the content and presentation of the caching design is due to
- suggestions and comments from individuals including: Shel Kaphan,
- Paul Leach, Koen Holtman, David Morris, and Larry Masinter.
-
-8. References
-
-8.1. Normative References
-
- [Part1] Fielding, R., Ed., Gettys, J., Mogul, J., Frystyk, H.,
- Masinter, L., Leach, P., Berners-Lee, T., Lafon, Y., Ed.,
- and J. Reschke, Ed., "HTTP/1.1, part 1: URIs, Connections,
- and Message Parsing", draft-ietf-httpbis-p1-messaging-11
- (work in progress), August 2010.
-
- [Part2] Fielding, R., Ed., Gettys, J., Mogul, J., Frystyk, H.,
- Masinter, L., Leach, P., Berners-Lee, T., Lafon, Y., Ed.,
- and J. Reschke, Ed., "HTTP/1.1, part 2: Message
- Semantics", draft-ietf-httpbis-p2-semantics-11 (work in
- progress), August 2010.
-
- [Part4] Fielding, R., Ed., Gettys, J., Mogul, J., Frystyk, H.,
- Masinter, L., Leach, P., Berners-Lee, T., Lafon, Y., Ed.,
- and J. Reschke, Ed., "HTTP/1.1, part 4: Conditional
- Requests", draft-ietf-httpbis-p4-conditional-11 (work in
- progress), August 2010.
-
- [Part5] Fielding, R., Ed., Gettys, J., Mogul, J., Frystyk, H.,
- Masinter, L., Leach, P., Berners-Lee, T., Lafon, Y., Ed.,
- and J. Reschke, Ed., "HTTP/1.1, part 5: Range Requests and
- Partial Responses", draft-ietf-httpbis-p5-range-11 (work
- in progress), August 2010.
-
- [Part7] Fielding, R., Ed., Gettys, J., Mogul, J., Frystyk, H.,
- Masinter, L., Leach, P., Berners-Lee, T., Lafon, Y., Ed.,
- and J. Reschke, Ed., "HTTP/1.1, part 7: Authentication",
- draft-ietf-httpbis-p7-auth-11 (work in progress),
- August 2010.
-
- [RFC2119] Bradner, S., "Key words for use in RFCs to Indicate
- Requirement Levels", BCP 14, RFC 2119, March 1997.
-
- [RFC5234] Crocker, D., Ed. and P. Overell, "Augmented BNF for Syntax
-
-
-
-Fielding, et al. Expires February 5, 2011 [Page 30]
-
-Internet-Draft HTTP/1.1, Part 6 August 2010
-
-
- Specifications: ABNF", STD 68, RFC 5234, January 2008.
-
-8.2. Informative References
-
- [RFC1305] Mills, D., "Network Time Protocol (Version 3)
- Specification, Implementation", RFC 1305, March 1992.
-
- [RFC2616] Fielding, R., Gettys, J., Mogul, J., Frystyk, H.,
- Masinter, L., Leach, P., and T. Berners-Lee, "Hypertext
- Transfer Protocol -- HTTP/1.1", RFC 2616, June 1999.
-
- [RFC3864] Klyne, G., Nottingham, M., and J. Mogul, "Registration
- Procedures for Message Header Fields", BCP 90, RFC 3864,
- September 2004.
-
- [RFC5226] Narten, T. and H. Alvestrand, "Guidelines for Writing an
- IANA Considerations Section in RFCs", BCP 26, RFC 5226,
- May 2008.
-
- [RFC5861] Nottingham, M., "HTTP Cache-Control Extensions for Stale
- Content", RFC 5861, April 2010.
-
-Appendix A. Changes from RFC 2616
-
- Make the specified age calculation algorithm less conservative.
- (Section 2.3.2)
-
- Remove requirement to consider Content-Location in successful
- responses in order to determine the appropriate response to use.
- (Section 2.4)
-
- Clarify denial of service attack avoidance requirement.
- (Section 2.5)
-
- Do not mention RFC 2047 encoding and multiple languages in Warning
- headers anymore, as these aspects never were implemented.
- (Section 3.6)
-
-Appendix B. Collected ABNF
-
- Age = "Age:" OWS Age-v
- Age-v = delta-seconds
-
- Cache-Control = "Cache-Control:" OWS Cache-Control-v
- Cache-Control-v = *( "," OWS ) cache-directive *( OWS "," [ OWS
- cache-directive ] )
-
- Expires = "Expires:" OWS Expires-v
-
-
-
-Fielding, et al. Expires February 5, 2011 [Page 31]
-
-Internet-Draft HTTP/1.1, Part 6 August 2010
-
-
- Expires-v = HTTP-date
-
- HTTP-date =
-
- OWS =
-
- Pragma = "Pragma:" OWS Pragma-v
- Pragma-v = *( "," OWS ) pragma-directive *( OWS "," [ OWS
- pragma-directive ] )
-
- Vary = "Vary:" OWS Vary-v
- Vary-v = "*" / ( *( "," OWS ) field-name *( OWS "," [ OWS field-name
- ] ) )
-
- Warning = "Warning:" OWS Warning-v
- Warning-v = *( "," OWS ) warning-value *( OWS "," [ OWS warning-value
- ] )
-
- cache-directive = cache-request-directive / cache-response-directive
- cache-extension = token [ "=" ( token / quoted-string ) ]
- cache-request-directive = "no-cache" / "no-store" / ( "max-age="
- delta-seconds ) / ( "max-stale" [ "=" delta-seconds ] ) / (
- "min-fresh=" delta-seconds ) / "no-transform" / "only-if-cached" /
- cache-extension
- cache-response-directive = "public" / ( "private" [ "=" DQUOTE *( ","
- OWS ) field-name *( OWS "," [ OWS field-name ] ) DQUOTE ] ) / (
- "no-cache" [ "=" DQUOTE *( "," OWS ) field-name *( OWS "," [ OWS
- field-name ] ) DQUOTE ] ) / "no-store" / "no-transform" /
- "must-revalidate" / "proxy-revalidate" / ( "max-age=" delta-seconds
- ) / ( "s-maxage=" delta-seconds ) / cache-extension
-
- delta-seconds = 1*DIGIT
-
- extension-pragma = token [ "=" ( token / quoted-string ) ]
-
- field-name =
-
- port =
- pragma-directive = "no-cache" / extension-pragma
- pseudonym =
-
- quoted-string =
-
- token =
-
- uri-host =
-
- warn-agent = ( uri-host [ ":" port ] ) / pseudonym
-
-
-
-Fielding, et al. Expires February 5, 2011 [Page 32]
-
-Internet-Draft HTTP/1.1, Part 6 August 2010
-
-
- warn-code = 3DIGIT
- warn-date = DQUOTE HTTP-date DQUOTE
- warn-text = quoted-string
- warning-value = warn-code SP warn-agent SP warn-text [ SP warn-date
- ]
-
- ABNF diagnostics:
-
- ; Age defined but not used
- ; Cache-Control defined but not used
- ; Expires defined but not used
- ; Pragma defined but not used
- ; Vary defined but not used
- ; Warning defined but not used
-
-Appendix C. Change Log (to be removed by RFC Editor before publication)
-
-C.1. Since RFC2616
-
- Extracted relevant partitions from [RFC2616].
-
-C.2. Since draft-ietf-httpbis-p6-cache-00
-
- Closed issues:
-
- o : "Trailer"
- ()
-
- o : "Invalidation
- after Update or Delete"
- ()
-
- o : "Normative and
- Informative references"
-
- o : "Date reference
- typo"
-
- o : "Connection
- header text"
-
- o : "Informative
- references"
-
- o : "ISO-8859-1
- Reference"
-
-
-
-
-
-Fielding, et al. Expires February 5, 2011 [Page 33]
-
-Internet-Draft HTTP/1.1, Part 6 August 2010
-
-
- o : "Normative up-
- to-date references"
-
- o : "typo in
- 13.2.2"
-
- Other changes:
-
- o Use names of RFC4234 core rules DQUOTE and HTAB (work in progress
- on )
-
-C.3. Since draft-ietf-httpbis-p6-cache-01
-
- Closed issues:
-
- o : "rel_path not
- used"
-
- Other changes:
-
- o Get rid of duplicate BNF rule names ("host" -> "uri-host") (work
- in progress on )
-
- o Add explicit references to BNF syntax and rules imported from
- other parts of the specification.
-
-C.4. Since draft-ietf-httpbis-p6-cache-02
-
- Ongoing work on IANA Message Header Registration
- ():
-
- o Reference RFC 3984, and update header registrations for headers
- defined in this document.
-
-C.5. Since draft-ietf-httpbis-p6-cache-03
-
- Closed issues:
-
- o : "Vary header
- classification"
-
-C.6. Since draft-ietf-httpbis-p6-cache-04
-
- Ongoing work on ABNF conversion
- ():
-
- o Use "/" instead of "|" for alternatives.
-
-
-
-
-Fielding, et al. Expires February 5, 2011 [Page 34]
-
-Internet-Draft HTTP/1.1, Part 6 August 2010
-
-
- o Introduce new ABNF rules for "bad" whitespace ("BWS"), optional
- whitespace ("OWS") and required whitespace ("RWS").
-
- o Rewrite ABNFs to spell out whitespace rules, factor out header
- value format definitions.
-
-C.7. Since draft-ietf-httpbis-p6-cache-05
-
- This is a total rewrite of this part of the specification.
-
- Affected issues:
-
- o : "Definition of
- 1xx Warn-Codes"
-
- o : "Placement of
- 13.5.1 and 13.5.2"
-
- o : "The role of
- Warning and Semantic Transparency in Caching"
-
- o : "Methods and
- Caching"
-
- In addition: Final work on ABNF conversion
- ():
-
- o Add appendix containing collected and expanded ABNF, reorganize
- ABNF introduction.
-
-C.8. Since draft-ietf-httpbis-p6-cache-06
-
- Closed issues:
-
- o : "base for
- numeric protocol elements"
-
- Affected issues:
-
- o : Vary and non-
- existant headers
-
-C.9. Since draft-ietf-httpbis-p6-cache-07
-
- Closed issues:
-
- o