draft-ietf-webdav-redirectref-protocol-01.txt | draft-ietf-webdav-redirectref-protocol-02.txt | |||
---|---|---|---|---|
WEBDAV Working Group J. Slein, Xerox | WEBDAV Working Group J. Slein, Xerox | |||
INTERNET DRAFT E.J. Whitehead Jr., UC Irvine | INTERNET DRAFT E.J. Whitehead Jr., UC Irvine | |||
<draft-ietf-webdav-redirectref-protocol-01.txt> J. Davis, CourseNet | <draft-ietf-webdav-redirectref-protocol-02.txt> J. Davis, CourseNet | |||
G. Clemm, Rational | G. Clemm, Rational | |||
C. Fay, FileNet | C. Fay, FileNet | |||
J. Crawford, IBM | J. Crawford, IBM | |||
T. Chihaya, DataChannel | December 17, 1999 | |||
October 15, 1999 | Expires June 17, 2000 | |||
Expires April 15, 2000 | ||||
WebDAV Redirect Reference Resources | WebDAV Redirect Reference Resources | |||
Status of this Memo | Status of this Memo | |||
This document is an Internet-Draft and is in full conformance with all | This document is an Internet-Draft and is in full conformance with all | |||
provisions of Section 10 of RFC2026. Internet-Drafts are working | provisions of Section 10 of RFC2026. Internet-Drafts are working | |||
documents of the Internet Engineering Task Force (IETF), its areas, and | documents of the Internet Engineering Task Force (IETF), its areas, and | |||
its working groups. Note that other groups may also distribute working | its working groups. Note that other groups may also distribute working | |||
documents as Internet-Drafts. | documents as Internet-Drafts. | |||
skipping to change at line 42 | skipping to change at line 41 | |||
Distribution of this document is unlimited. Please send comments to the | Distribution of this document is unlimited. Please send comments to the | |||
Distributed Authoring and Versioning (WebDAV) working group at <w3c- | Distributed Authoring and Versioning (WebDAV) working group at <w3c- | |||
dist-auth@w3.org>, which may be joined by sending a message with subject | dist-auth@w3.org>, which may be joined by sending a message with subject | |||
"subscribe" to <w3c-dist-auth-request@w3.org>. | "subscribe" to <w3c-dist-auth-request@w3.org>. | |||
Discussions of the WEBDAV working group are archived at URL: | Discussions of the WEBDAV working group are archived at URL: | |||
<http://lists.w3.org/Archives/Public/w3c-dist-auth/>. | <http://lists.w3.org/Archives/Public/w3c-dist-auth/>. | |||
Abstract | Abstract | |||
The WebDAV Distributed Authoring Protocol provides basic support for | This is one of a pair of specifications that extend the WebDAV | |||
collections, offering the ability to create and list unordered | Distributed Authoring Protocol to enable clients to create new access | |||
collections. | paths to existing resources. The two protocol extensions have very | |||
different characteristics that make them useful for different sorts of | ||||
applications. | ||||
This specification is one of a group of three specifications that | The present specification defines redirect reference resources. A | |||
supplement the WebDAV Distributed Authoring Protocol to increase the | redirect reference resource is a resource whose default response is an | |||
power of WebDAV collections. This specification defines redirect | HTTP/1.1 302 (Found) status code, redirecting the client to a different | |||
reference resources, one mechanism for allowing a single resource to | resource, the target resource. A redirect reference makes it possible | |||
appear in more than one collection. A redirect reference resource is a | to access the target resource indirectly, through any URI mapped to the | |||
resource in one collection that responds to most requests by redirecting | redirect reference resource. There are no integrity guarantees | |||
the request (using an HTTP 1.1 302 Found response) to a different | associated with redirect reference resources. | |||
resource, possibly in a different collection. "WebDAV Bindings"[B] | ||||
defines bindings, another approach to allowing a single resource to be | ||||
accessed from multiple collections. "WebDAV Ordered Collections | ||||
Protocol"[OC] provides ordered collections. | ||||
Table of Contents | The related specification, RFC xxxx, defines bindings, and the BIND | |||
method for creating them. Creating a new binding to a resource | ||||
indirectly creates one or more new URIs mapped to that resource, which | ||||
can then be used to access it. Servers are required to insure the | ||||
integrity of any bindings that they allow to be created. | ||||
1 Notational Conventions.......................................3 | Table of Contents | |||
2 Introduction.................................................3 | 1 Notational Conventions........................................3 | |||
3 Terminology..................................................5 | 2 Introduction..................................................3 | |||
4 Overview of Redirect Reference Resources.....................5 | 3 Terminology...................................................4 | |||
5 Creating a Redirect Reference Resource.......................6 | 4 Overview of Redirect Reference Resources......................5 | |||
5.1 MKRESOURCE...................................................6 | 5 Creating a Redirect Reference Resource........................6 | |||
5.2 Status Codes.................................................8 | 5.1 MKRESOURCE....................................................6 | |||
5.3 Example: Creating a Redirect Reference Resource with | 5.2 Example: Creating a Redirect Reference Resource with | |||
MKRESOURCE...................................................8 | MKRESOURCE....................................................7 | |||
6 Operations on Redirect Reference Resources...................8 | 6 Operations on Redirect Reference Resources....................8 | |||
6.1 Example: GET on a Redirect Reference Resource................9 | 6.1 Example: GET on a Redirect Reference Resource.................9 | |||
6.2 Example: PUT on a Redirect Reference Resource with | 6.2 Example: PUT on a Redirect Reference Resource with Apply-To- | |||
"Passthrough: F"............................................10 | Redirect-Ref..................................................9 | |||
6.3 Example: PROPPATCH on a Redirect Reference Resource.........10 | 6.3 Example: PROPPATCH on a Redirect Reference Resource..........10 | |||
7 Operations on Collections That Contain Redirect Reference | 7 Operations on Collections That Contain Redirect Reference | |||
Resources...................................................11 | Resources....................................................10 | |||
7.1 MOVE and DELETE on Collections That Contain Redirect | 7.1 MOVE and DELETE on Collections That Contain Redirect | |||
References..................................................12 | References...................................................11 | |||
7.2 LOCK on a Collection That Contains Redirect References......12 | 7.2 LOCK on a Collection That Contains Redirect References.......11 | |||
7.3 Example: PROPFIND on a Collection with Redirect Reference | 7.3 Example: PROPFIND on a Collection with Redirect Reference | |||
Resources...................................................12 | Resources....................................................12 | |||
7.4 Example: PROPFIND with Passthrough: F on a Collection with | 7.4 Example: PROPFIND with Apply-To-Redirect-Ref on a Collection | |||
Redirect Reference Resources................................13 | with Redirect Reference Resources............................13 | |||
7.5 Example: COPY on a Collection That Contains a Redirect | 7.5 Example: COPY on a Collection That Contains a Redirect | |||
Reference Resource..........................................15 | Reference Resource...........................................15 | |||
7.6 Example: LOCK on a Collection That Contains a Redirect | 7.6 Example: LOCK on a Collection That Contains a Redirect | |||
Reference Resource, with Passthrough: T.....................16 | Reference Resource...........................................15 | |||
8 Operations on Targets of Redirect Reference Resources.......17 | 8 Operations on Targets of Redirect Reference Resources........17 | |||
9 Relative URIs in DAV:reftarget..............................17 | 9 Relative URIs in DAV:reftarget...............................17 | |||
9.1 Example: Resolving a Relative URI in a MKRESOURCE Request...18 | 9.1 Example: Resolving a Relative URI in a MKRESOURCE Request....17 | |||
9.2 Example: Resolving a Relative URI in a Multi-Status Response.18 | 9.2 Example: Resolving a Relative URI in a Multi-Status Response.18 | |||
10 Redirect References to Collections..........................19 | 10 Redirect References to Collections...........................19 | |||
11 Status Codes................................................20 | 11 Headers......................................................20 | |||
11.1 509 Dangling References Forbidden...........................20 | 11.1 Redirect-Ref Response Header.................................20 | |||
12 Headers.....................................................20 | 11.2 Apply-To-Redirect-Ref Request Header.........................20 | |||
12.1 Redirect-Ref Response Header................................20 | 12 Properties...................................................20 | |||
12.2 Passthrough Request Header..................................20 | 12.1 reftarget Property...........................................20 | |||
13 Properties..................................................21 | 12.2 location Pseudo-Property.....................................20 | |||
13.1 reftarget Property..........................................21 | 13 XML Elements.................................................21 | |||
13.2 location Pseudo-Property....................................21 | 13.1 redirectref XML Element......................................21 | |||
14 XML Elements................................................21 | 14 Extensions to the DAV:response XML Element for Multi-Status | |||
14.1 redirectref XML Element.....................................21 | Responses....................................................21 | |||
15 Extensions to the DAV:response XML Element for Multi-Status | 15 Capability Discovery.........................................21 | |||
Responses...................................................22 | 15.1 Example: Discovery of Support for Redirect Reference | |||
16 Capability Discovery........................................22 | Resources....................................................22 | |||
16.1 Example: Discovery of Support for Redirect Reference | 16 Security Considerations......................................22 | |||
Resources...................................................22 | 16.1 Privacy Concerns.............................................22 | |||
17 Security Considerations.....................................23 | 16.2 Redirect Loops...............................................22 | |||
17.1 Privacy Concerns............................................23 | 16.3 Redirect Reference Resources and Denial of Service...........23 | |||
17.2 Redirect Loops..............................................23 | 16.4 Private Locations May Be Revealed............................23 | |||
17.3 Redirect Reference Resources and Denial of Service..........23 | 17 Internationalization Considerations..........................23 | |||
17.4 Private Locations May Be Revealed...........................23 | 18 IANA Considerations..........................................24 | |||
18 Internationalization Considerations.........................24 | 19 Copyright....................................................24 | |||
19 IANA Considerations.........................................24 | 20 Intellectual Property........................................24 | |||
20 Copyright...................................................24 | ||||
21 Intellectual Property.......................................24 | ||||
22 Acknowledgements............................................25 | 21 Acknowledgements.............................................24 | |||
23 References..................................................25 | 22 References...................................................24 | |||
24 Authors' Addresses..........................................25 | 23 Authors' Addresses...........................................25 | |||
25 Appendices..................................................26 | 24 Appendices...................................................25 | |||
25.1 Appendix 1: Extensions to the WebDAV Document Type | 24.1 Appendix 1: Extensions to the WebDAV Document Type | |||
Definition..................................................26 | Definition...................................................25 | |||
1 Notational Conventions | 1 Notational Conventions | |||
Since this document describes a set of extensions to the WebDAV | Since this document describes a set of extensions to the WebDAV | |||
Distributed Authoring Protocol [WebDAV], itself an extension to the | Distributed Authoring Protocol [WebDAV], itself an extension to the | |||
HTTP/1.1 protocol, the augmented BNF used here to describe protocol | HTTP/1.1 protocol, the augmented BNF used here to describe protocol | |||
elements is exactly the same as described in Section 2.1 of [HTTP]. | elements is exactly the same as described in Section 2.1 of [HTTP]. | |||
Since this augmented BNF uses the basic production rules provided in | Since this augmented BNF uses the basic production rules provided in | |||
Section 2.2 of [HTTP], these rules apply to this document as well. | Section 2.2 of [HTTP], these rules apply to this document as well. | |||
The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", | The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", | |||
"SHOULD", "SHOULD NOT", "RECOMMENDED", "MAY", and "OPTIONAL" in this | "SHOULD", "SHOULD NOT", "RECOMMENDED", "MAY", and "OPTIONAL" in this | |||
document are to be interpreted as described in [RFC2119]. | document are to be interpreted as described in [RFC2119]. | |||
2 Introduction | 2 Introduction | |||
The simple collections that the WebDAV Distributed Authoring Protocol | This is one of a pair of specifications that extend the WebDAV | |||
specification supports are powerful enough to be widely useful. They | Distributed Authoring Protocol to enable clients to create new access | |||
provide for the hierarchical organization of resources, with mechanisms | paths to existing resources. This capability is useful for several | |||
for creating and deleting collections, copying and moving them, locking | reasons: | |||
them, adding members to them and removing members from them, and getting | ||||
listings of their members. Delete, copy, move, list, and lock | ||||
operations can be applied recursively, so that a client can operate on | ||||
whole hierarchies with a single request. | ||||
This specification is one of a family of three specifications that build | ||||
on the infrastructure defined in [HTTP] and [WebDAV] to extend the | ||||
capabilities of collections. The companion specification "WebDAV | ||||
Ordered Collections Protocol"[OC] defines protocol extensions to support | ||||
ordered collections. The present specification and the companion | ||||
specification "WebDAV Bindings"[B] define mechanisms for allowing the | ||||
same resource to appear in multiple collections. This capability is | ||||
useful for several reasons: | ||||
Organizing resources into hierarchies places them into smaller | URIs of WebDAV-compliant resources are hierarchical and correspond to a | |||
groupings, known as collections, which are more easily browsed and | hierarchy of collections in resource space. The WebDAV Distributed | |||
manipulated than a flat namespace. However, hierarchies require | Authoring Protocol makes it possible to organize these resources into | |||
categorization decisions that locate resources at a single location in | hierarchies, placing them into groupings, known as collections, which | |||
the hierarchy, a drawback when a resource has multiple valid categories. | are more easily browsed and manipulated than a single flat collection. | |||
For example, in a hierarchy of vehicle descriptions containing | However, hierarchies require categorization decisions that locate | |||
collections for cars and boats, a description of a combination car/boat | resources at a single location in the hierarchy, a drawback when a | |||
vehicle could belong in either collection. Ideally, the description | resource has multiple valid categories. For example, in a hierarchy of | |||
should be accessible from both. | vehicle descriptions containing collections for cars and boats, a | |||
description of a combination car/boat vehicle could belong in either | ||||
collection. Ideally, the description should be accessible from both. | ||||
Allowing clients to create new URIs that access the existing resource | ||||
lets them put that resource into multiple collections. | ||||
Hierarchies also make resource sharing more difficult, since resources | Hierarchies also make resource sharing more difficult, since resources | |||
that have utility across many collections are still forced into a single | that have utility across many collections are still forced into a single | |||
collection. For example, the mathematics department at one university | collection. For example, the mathematics department at one university | |||
might create a collection of information on fractals that contains | might create a collection of information on fractals that contains | |||
bindings to some local resources, but also provides access to some | bindings to some local resources, but also provides access to some | |||
resources at other universities. For many reasons, it may be | resources at other universities. For many reasons, it may be | |||
undesirable to make physical copies of the shared resources on the local | undesirable to make physical copies of the shared resources on the local | |||
server - to conserve disk space, to respect copyright constraints, or to | server: to conserve disk space, to respect copyright constraints, or to | |||
make any changes in the shared resources visible automatically. | make any changes in the shared resources visible automatically. Being | |||
able to create new access paths to existing resources in other | ||||
collections or even on other servers is useful for this sort of case. | ||||
The BIND method defined in [B] provides one mechanism for allowing a | The redirect reference resources defined here provide a mechanism for | |||
single resource to appear in multiple collections. It lets clients | creating alternative access paths to existing resources. A redirect | |||
associate a new URI with an existing resource. This URI can then be | ||||
used to submit requests to the resource. Since URIs in WebDAV are | ||||
hierarchical, and correspond to a hierarchy of collections in resource | ||||
space, the BIND method also has the effect of adding the resource to a | ||||
collection. As new URIs are associated with the resource, it appears in | ||||
additional collections. | ||||
The redirect reference resources defined here are a different mechanism | reference resource is a resource in one collection whose purpose is to | |||
for allowing a single resource to appear in multiple collections. A | forward requests to another resource (its target), usually in a | |||
redirect reference resource is a resource in one collection whose | different collection. In this way, it allows clients to submit requests | |||
purpose is to forward requests to another resource (its target), usually | to the target resource from another collection. It redirects most | |||
in a different collection. In this way, it allows clients to submit | requests to the target resource using the HTTP 302 (Found) status code, | |||
requests to the target resource from another collection. It redirects | thereby providing a form of mediated access to the target resource. | |||
most requests to the target resource using the HTTP 302 (Found) status | ||||
code, thereby providing a form of mediated access to the target | ||||
resource. | ||||
These two approaches to allowing clients to add a single resource to | The companion specification, RFC xxxx, defines the BIND method, a | |||
multiple collections have very different characteristics: | different mechanism for allowing clients to create alternative access | |||
paths to existing WebDAV-compliant resources. The BIND method lets | ||||
clients associate a new URI with an existing WebDAV resource. This URI | ||||
can then be used to submit requests to the resource. Since URIs of | ||||
WebDAV-compliant resources are hierarchical, and correspond to a | ||||
hierarchy of collections in resource space, the BIND method also has the | ||||
effect of adding the resource to a collection. As new URIs are | ||||
associated with the resource, it appears in additional collections. | ||||
A redirect reference is a resource, and so can have properties of its | Redirect references and bindings have very different characteristics: | |||
own. Such information as who created the reference, when, and why can | ||||
be stored on the redirect reference resource. Since redirect references | A redirect reference is a resource, and so can have properties and a | |||
are implemented using HTTP 302 responses, it generally takes two round | body of its own. Properties of a redirect reference resource can | |||
trips to submit a request to the intended resource. Servers are not | contain such information as who created the reference, when, and why. | |||
required to enforce the integrity of redirect references. Redirect | Since redirect reference resources are implemented using HTTP 302 | |||
references work equally well for local resources and for resources that | responses, it generally takes two round trips to submit a request to the | |||
reside on a different server from the reference. | intended resource. Servers are not required to enforce the integrity of | |||
redirect references. Redirect references work equally well for local | ||||
resources and for resources that reside on a different server from the | ||||
reference. | ||||
By contrast, a BIND request does not create a new resource, but simply | By contrast, a BIND request does not create a new resource, but simply | |||
makes available a new URI for submitting requests to an existing | makes available a new URI for submitting requests to an existing | |||
resource. The new URI can be used like any other URI to submit a | resource. The new URI is indistinguishable from any other URI when | |||
request to a resource. Only one round trip is needed to submit a | submitting a request to a resource. Only one round trip is needed to | |||
request to the intended target. Servers are required to enforce the | submit a request to the intended target. Servers are required to | |||
integrity of the relationships between the new URIs clients create and | enforce the integrity of the relationships between the new URIs and the | |||
the resources associated with them. Consequently, it is unlikely that | resources associated with them. Consequently, it may be very costly for | |||
servers will support BIND requests that cross server boundaries. | servers to support BIND requests that cross server boundaries. | |||
The remainder of this document is structured as follows: Section 3 | The remainder of this document is structured as follows: Section 3 | |||
defines terms that will be used throughout the specification. Section 4 | defines terms that will be used throughout the specification. Section 4 | |||
provides an overview of redirect reference resources. Section 5 | provides an overview of redirect reference resources. Section 5 | |||
discusses how to create a redirect reference resource. Section 6 | discusses how to create a redirect reference resource. Section 6 | |||
defines the semantics of existing methods when applied to redirect | defines the semantics of existing methods when applied to redirect | |||
reference resources, and Section 7 discusses their semantics when | reference resources, and Section 7 discusses their semantics when | |||
applied to collections that contain redirect reference resources. | applied to collections that contain redirect reference resources. | |||
Sections 8 through 10 discuss several other issues raised by the | Sections 8 through 10 discuss several other issues raised by the | |||
existence of redirect reference resources. Sections 11 through 15 | existence of redirect reference resources. Sections 11 through 14 | |||
define the new status codes, headers, properties, and XML elements | define the new headers, properties, and XML elements required to support | |||
redirect reference resources. Section 15 discusses capability | ||||
required to support redirect reference resources. Section 16 discusses | discovery. Sections 16 through 18 present the security, | |||
capability discovery. Sections 17 through 19 present the security, | ||||
internationalization, and IANA concerns raised by this specification. | internationalization, and IANA concerns raised by this specification. | |||
The remaining sections provide a variety of supporting information. | The remaining sections provide a variety of supporting information. | |||
3 Terminology | 3 Terminology | |||
The terminology used here follows and extends that in the WebDAV | The terminology used here follows and extends that in the WebDAV | |||
Distributed Authoring Protocol specification [WebDAV]. Definitions of | Distributed Authoring Protocol specification [WebDAV]. Definitions of | |||
the terms resource, Uniform Resource Identifier (URI), and Uniform | the terms resource, Uniform Resource Identifier (URI), and Uniform | |||
Resource Locator (URL) are provided in [URI]. | Resource Locator (URL) are provided in [URI]. | |||
skipping to change at line 272 | skipping to change at line 263 | |||
A resource that is not a reference to another resource. | A resource that is not a reference to another resource. | |||
Target Resource | Target Resource | |||
The resource to which requests are forwarded by a reference | The resource to which requests are forwarded by a reference | |||
resource. | resource. | |||
4 Overview of Redirect Reference Resources | 4 Overview of Redirect Reference Resources | |||
For all operations submitted to a redirect reference resource, the | For all operations submitted to a redirect reference resource, the | |||
default response is a 302 (Found), accompanied by the Redirect-Ref | default response is a 302 (Found), accompanied by the Redirect-Ref | |||
header (defined in Section 12.1 below) and the Location header set to | header (defined in Section 11.1 below) and the Location header set to | |||
the URI of the target resource. With this information, the client can | the URI of the target resource. With this information, the client can | |||
resubmit the request to the URI of the target resource. | resubmit the request to the URI of the target resource. | |||
A redirect reference resource never automatically forwards requests to | A redirect reference resource never automatically forwards requests to | |||
its target resource. It is this characteristic that distinguishes | its target resource. It is this characteristic that distinguishes | |||
redirect reference resource from direct reference resources and from | redirect reference resource from direct reference resources and from | |||
bindings. It is also what insures that redirect reference resources | bindings. It is also what insures that redirect reference resources | |||
will be simple to implement and that cross-server references will be | will be simple to implement and that cross-server references will be | |||
possible. If the redirect reference resource were required to forward | possible. If the redirect reference resource were required to forward | |||
requests automatically, the server would need proxy capabilities in | requests automatically, the server would need proxy capabilities in | |||
order to support cross-server references. | order to support cross-server references. | |||
If the client is aware that it is operating on a redirect reference | If the client is aware that it is operating on a redirect reference | |||
resource, it can resolve the reference by retrieving the reference | resource, it can resolve the reference by retrieving the reference | |||
resource's DAV:reftarget property (defined in Section 13.1 below), whose | resource's DAV:reftarget property (defined in Section 12.1 below), whose | |||
value contains the URI of the target resource. It can then submit | value contains the URI of the target resource. It can then submit | |||
requests to the target resource. | requests to the target resource. | |||
A redirect reference resource is a new type of resource. To distinguish | A redirect reference resource is a new type of resource. To distinguish | |||
redirect reference resources from non-reference resources, a new value | redirect reference resources from non-reference resources, a new value | |||
of the DAV:resourcetype property (defined in [WebDAV]), DAV:redirectref, | of the DAV:resourcetype property (defined in [WebDAV]), DAV:redirectref, | |||
is defined in Section 14.1 below. | is defined in Section 13.1 below. | |||
Since a redirect reference resource is a resource, it is possible to | Since a redirect reference resource is a resource, it can have its own | |||
apply methods to the reference resource rather than to its target | properties and body, and methods can be applied to the reference | |||
resource. The Passthrough request header (defined in Section 12.2 | resource as well as to its target resource. The Apply-To-Redirect-Ref | |||
below) is provided so that referencing-aware clients can control whether | request header (defined in Section 11.2 below) is provided so that | |||
an operation is applied to the redirect reference resource or to its | referencing-aware clients can control whether an operation is applied to | |||
target resource. The Passthrough header can be used with most requests | the redirect reference resource or to its target resource. The Apply- | |||
to redirect reference resources. This header is particularly useful | To-Redirect-Ref header can be used with most requests to redirect | |||
with PROPFIND, to retrieve the reference resource's own properties. | reference resources. This header is particularly useful with PROPFIND, | |||
to retrieve the reference resource's own properties. | ||||
5 Creating a Redirect Reference Resource | 5 Creating a Redirect Reference Resource | |||
The MKRESOURCE method is used to create new redirect reference | The MKRESOURCE method is used to create new redirect reference | |||
resources. The values of two properties must be set in the body of the | resources. As defined in Section 5.1, MKRESOURCE can be used to create | |||
a resource of any type other than standard data containers and | ||||
collections. In order to create a redirect reference resource using | ||||
MKRESOURCE, the values of two properties must be set in the body of the | ||||
MKRESOURCE request. The value of DAV:resourcetype MUST be set to | MKRESOURCE request. The value of DAV:resourcetype MUST be set to | |||
DAV:redirectref, a new value of DAV:resourcetype defined in Section | DAV:redirectref, a new value of DAV:resourcetype defined in Section | |||
14.1. The value of DAV:reftarget MUST be set to the URI of the target | 13.1. The value of DAV:reftarget MUST be set to the URI of the target | |||
resource. | resource. | |||
Used in this way, the MKRESOURCE method creates a redirect reference | Used in this way, the MKRESOURCE method creates a redirect reference | |||
resource whose target is identified by the DAV:reftarget property. It | resource whose target is identified by the DAV:reftarget property. It | |||
creates a new binding between the new redirect reference resource and | creates a new binding between the new redirect reference resource and | |||
the last path segment of the Request-URI. The new binding is added to | the last path segment of the Request-URI. The new binding is added to | |||
its parent collection, identified by the Request-URI minus its trailing | its parent collection, identified by the Request-URI minus its trailing | |||
slash (if present) and final segment. | slash (if present) and final segment. | |||
5.1 MKRESOURCE | 5.1 MKRESOURCE | |||
The MKRESOURCE method requests the creation of a resource and | The MKRESOURCE method requests the creation of a resource and | |||
initialization of its properties. It allows resources other than | initialization of its properties. It allows resources other than | |||
standard data containers and collections to be created and their | standard data containers and collections to be created and their | |||
properties initialized in one atomic operation. | properties initialized in one atomic operation. | |||
Preconditions: | Preconditions: | |||
If the Overwrite header is not present or is set to 'F', a resource MUST | A resource MUST NOT exist at the Request-URI. | |||
NOT exist at the Request-URI. | ||||
Marshalling: | Request Marshalling: | |||
The location of the new resource to be created is specified by the | The location of the new resource to be created is specified by the | |||
Request-URI. The Overwrite header MAY be specified. The request body | Request-URI. | |||
of the MKRESOURCE method is the same as the request body for PROPPATCH, | ||||
that is, it MUST contain the DAV:propertyupdate XML element defined in | ||||
Section 12.13 of [WebDAV]. | ||||
Semantics: | The request body of the MKRESOURCE method MUST consist of the | |||
DAV:propertyupdate XML element defined in Section 12.13 of [WebDAV]. | ||||
Creation of the resource and initialization of its properties MUST both | Postconditions: | |||
occur, or neither occurs. Property initialization is carried out using | ||||
PROPPATCH semantics. The type of resource to create is specified by the | ||||
DAV:resourcetype property. If the DAV:resourcetype property is not | ||||
specified, the resource created will be a standard data container. | ||||
If the Overwrite header is set to 'T' and MKRESOURCE is applied to an | If the response status code is 201, a new resource exists at the | |||
existing resource, the existing resource is deleted using DELETE | ||||
semantics prior to MKRESOURCE processing. If deletion or resource | ||||
creation cannot be completed, the entire operation fails and the | ||||
existing resource MUST be left unaffected. Since existing resources are | ||||
deleted, MKRESOURCE cannot be used to change the DAV:resourcetype of a | ||||
resource. | ||||
Postconditions: | Request-URI. | |||
After the successful execution of MKRESOURCE, a new resource exists. | The body of the new resource is empty. | |||
The body of the new resource is empty, while the initial values of the | ||||
properties of the new resource are those specified in the property | The properties of the new resource are as specified by the | |||
update directives in the request body. | DAV:propertyupdate request body, using PROPPATCH semantics. If the | |||
DAV:propertyupdate does not specify a DAV:resourcetype, the resource | ||||
will be a standard data container. | ||||
If the response status code is not 201, then a new resource is not | ||||
created at the Request-URI, and any existing resource at the Request-URI | ||||
is unaffected. | ||||
Response Marshalling: | Response Marshalling: | |||
Results from a MKRESOURCE request SHOULD NOT be cached, as MKRESOURCE | Responses from a MKRESOURCE request SHOULD NOT be cached, as MKRESOURCE | |||
has non-idempotent semantics. | has non-idempotent semantics. | |||
The following status codes can be expected in responses to MKRESOURCE: | The following status codes can be expected in responses to MKRESOURCE: | |||
201 (Created): The new resource was successfully created. | 201 (Created): The new resource was successfully created. | |||
207 (Multi-Status): This response is generated if (1) the deletion of a | 207 (Multi-Status): This response is generated if an error was | |||
resource other than the one identified by the Request-URI could not be | encountered while initializing the properties of the resource, in which | |||
completed, in which case the response is as defined in Section 8.6.2 of | case the response is as defined in Section 8.2.1 of [WebDAV]. | |||
[WebDAV], or (2) an error was encountered while initializing the | ||||
properties of the resource, in which case the response is as defined in | ||||
Section 8.2.1 of [WebDAV]. | ||||
403 (Forbidden): The server does not allow the creation of the requested | 403 (Forbidden): The server does not allow the creation of the requested | |||
resource type at the requested location, or the parent collection of the | resource type at the requested location, or the parent collection of the | |||
Request-URI exists but cannot accept members. | Request-URI exists but cannot accept members. | |||
409 (Conflict): A resource cannot be created at the Request-URI until | 409 (Conflict): A resource cannot be created at the Request-URI because | |||
one or more intermediate collections have been created. | the parent collection for the resource does not exist, or because there | |||
is already a resource at that request-URL. | ||||
412 (Precondition Failed): The Overwrite header is not present or is set | ||||
to 'F', and a resource exists at the Request-URI. | ||||
423 (Locked): A locked resource exists at the Request-URI and the lock | 423 (Locked): The Request-URI is locked, and the lock token was not | |||
token was not passed in with the request. | passed with the request. | |||
507 (Insufficient Storage): The server does not have sufficient space to | 507 (Insufficient Storage): The server does not have sufficient space to | |||
record the state of the resource. | record the state of the resource. | |||
5.2 Status Codes | 5.2 Example: Creating a Redirect Reference Resource with MKRESOURCE | |||
In addition to the common status codes returned by MKRESOURCE, the | ||||
following special case can arise when creating a redirect reference | ||||
resource: | ||||
509 (Dangling References Forbidden): Some servers may have a policy that | ||||
forbids dangling references. These servers will respond with 509 if | ||||
there is no resource at the location specified in the DAV:reftarget | ||||
property. | ||||
5.3 Example: Creating a Redirect Reference Resource with MKRESOURCE | ||||
>> Request: | >> Request: | |||
MKRESOURCE /~whitehead/dav/spec08.ref HTTP/1.1 | MKRESOURCE /~whitehead/dav/spec08.ref HTTP/1.1 | |||
Host: www.ics.uci.edu | Host: www.ics.uci.edu | |||
Content-Type: text/xml; charset="utf-8" | Content-Type: text/xml; charset="utf-8" | |||
Content-Length: xxx | Content-Length: xxx | |||
<?xml version="1.0" encoding="utf-8" ?> | <?xml version="1.0" encoding="utf-8" ?> | |||
<D:propertyupdate xmlns:D="DAV:"> | <D:propertyupdate xmlns:D="DAV:"> | |||
skipping to change at line 447 | skipping to change at line 420 | |||
DAV:resourcetype property is set to DAV:redirectref. | DAV:resourcetype property is set to DAV:redirectref. | |||
6 Operations on Redirect Reference Resources | 6 Operations on Redirect Reference Resources | |||
Although non-referencing-aware clients cannot create reference | Although non-referencing-aware clients cannot create reference | |||
resources, they should be able to submit requests through the reference | resources, they should be able to submit requests through the reference | |||
resources created by reference-aware WebDAV clients. They should be | resources created by reference-aware WebDAV clients. They should be | |||
able to follow any references to their targets. To make this possible, | able to follow any references to their targets. To make this possible, | |||
a server that receives any request made via a redirect reference | a server that receives any request made via a redirect reference | |||
resource MUST return a 302 (Found) status code, unless the request | resource MUST return a 302 (Found) status code, unless the request | |||
includes a Passthrough header with a value of "F". The client and server | includes an Apply-To-Redirect-Ref header. The client and server MUST | |||
MUST follow [HTTP] Section 10.3.3 "302 Found," but with these additional | follow [HTTP] Section 10.3.3 "302 Found," but with these additional | |||
rules: | rules: | |||
o The Location response header MUST contain the absolute target URI of | o The Location response header MUST contain an absolute URI that | |||
the reference resource. | identifies the target of the reference resource. | |||
o The response MUST include the Redirect-Ref header. This header | o The response MUST include the Redirect-Ref header. This header | |||
allows reference-aware WebDAV clients to recognize the resource as a | allows reference-aware WebDAV clients to recognize the resource as a | |||
reference resource and understand the reason for the redirection. | reference resource and understand the reason for the redirection. | |||
A reference-aware WebDAV client can act on this response in one of two | A reference-aware WebDAV client can act on this response in one of two | |||
ways. It can, like a non-referencing client, resubmit the request to | ways. It can, like a non-referencing client, resubmit the request to | |||
the URI in the Location header in order to operate on the target | the URI in the Location header in order to operate on the target | |||
resource. Alternatively, it can resubmit the request to the URI of the | resource. Alternatively, it can resubmit the request to the URI of the | |||
redirect reference resource with the Passthrough header set to "F" in | redirect reference resource with the Apply-To-Redirect-Ref header in | |||
order to operate on the reference resource itself. If the Passthrough | order to operate on the reference resource itself. If the Apply-To- | |||
header is present with a value of "F", the request MUST be applied to | Redirect-Ref header is present, the request MUST be applied to the | |||
the reference resource itself, and a 302 response MUST NOT be returned. | reference resource itself, and a 302 response MUST NOT be returned. | |||
A reference-aware client may know before submitting its request that the | A reference-aware client may know before submitting its request that the | |||
Request-URI identifies a redirect reference resource. In this case, if | Request-URI identifies a redirect reference resource. In this case, if | |||
the client wants to apply the method to the reference resource, it can | the client wants to apply the method to the reference resource, it can | |||
save the round trip caused by the 302 response by using "Passthrough: F" | save the round trip caused by the 302 response by using an Apply-To- | |||
in its initial request to the URI. | Redirect-Ref header in its initial request to the URI. | |||
A few methods need additional explanation: | A few methods need additional explanation: | |||
"Passthrough: F" can be used with GET or HEAD to retrieve the entity | The Apply-To-Redirect-Ref header can be used with GET or HEAD to | |||
headers of a redirect reference resource. When "Passthrough: F" is used | retrieve the entity headers of a redirect reference resource. When | |||
with GET or HEAD, the Redirect-Ref entity header MUST be returned, along | ||||
with all HTTP headers that make sense for reference resources (for | ||||
example, Cache-Control, Age, ETag, Expires, and Last-Modified). | ||||
"Passthrough: F" can be used with PUT to replace the redirect reference | Apply-To-Redirect-Ref is used with GET or HEAD, the Redirect-Ref entity | |||
resource with a non-reference resource. | header MUST be returned, along with all HTTP headers that make sense for | |||
reference resources (for example, Cache-Control, Age, ETag, Expires, and | ||||
Last-Modified). | ||||
Clients MUST NOT use "Passthrough: F" with POST. Since a reference | A redirect reference resource MAY have a body, though none is defined | |||
resource cannot accept another entity as its subordinate, an attempt to | for it in this specification. The PUT method can be used, with Apply- | |||
POST to a reference resource with "Passthrough: F" will also fail. If a | To-Redirect-Ref, to create or replace the body of a redirect reference | |||
server receives a POST request with "Passthrough: F" on a redirect | resource. | |||
reference resource, it MUST fail the request with a 400 (Bad Request) | ||||
status code. | ||||
Since MKCOL and MKRESOURCE fail when applied to existing resources, if | Since MKCOL and MKRESOURCE fail when applied to existing resources, if | |||
the client attempts to resubmit the request to the target resource, the | the client attempts to resubmit the request to the target resource, the | |||
request MUST fail (unless the reference resource is a dangling | request MUST fail (unless the reference resource is a dangling | |||
reference). Similarly, if the client attempts to resubmit the request | reference). Similarly, if the client attempts to resubmit the request | |||
to the reference resource with "Passthrough: F", the request MUST fail. | to the reference resource with an Apply-To-Redirect-Ref header, the | |||
request MUST fail. | ||||
Since ORDERPATCH applies only to collections, an ORDERPATCH request with | Since ORDERPATCH applies only to collections, an ORDERPATCH request with | |||
a Passthrough header with the value "F" on a redirect reference resource | an Apply-To-Redirect-Ref header on a redirect reference resource MUST | |||
MUST fail. | fail. | |||
6.1 Example: GET on a Redirect Reference Resource | 6.1 Example: GET on a Redirect Reference Resource | |||
>> Request: | >> Request: | |||
GET /bar.html HTTP/1.1 | GET /bar.html HTTP/1.1 | |||
Host: www.foo.com | Host: www.foo.com | |||
>> Response: | >> Response: | |||
HTTP/1.1 302 Found | HTTP/1.1 302 Found | |||
Location: http://www.svr.com/Internet/xxspec08.html | Location: http://www.svr.com/Internet/xxspec08.html | |||
Redirect-Ref: | Redirect-Ref: | |||
Since /bar.html is a redirect reference resource and the Passthrough | Since /bar.html is a redirect reference resource and the Apply-To- | |||
header is not included in the request, the response is a 302 (Found). | Redirect-Ref header is not included in the request, the response is a | |||
The Redirect-Ref header informs a reference-aware client that this is | 302 (Found). The Redirect-Ref header informs a reference-aware client | |||
not an ordinary HTTP 1.1 redirect, but is a redirect reference resource. | that this is not an ordinary HTTP 1.1 redirect, but is a redirect | |||
The URI of the target resource is provided in the Location header so | reference resource. The URI of the target resource is provided in the | |||
that the client can resubmit the request to the target resource. | Location header so that the client can resubmit the request to the | |||
target resource. | ||||
6.2 Example: PUT on a Redirect Reference Resource with "Passthrough: F" | 6.2 Example: PUT on a Redirect Reference Resource with Apply-To- | |||
Redirect-Ref | ||||
>> Request: | >> Request: | |||
PUT /bar.html HTTP/1.1 | PUT /bar.html HTTP/1.1 | |||
Host: www.foo.com | Host: www.foo.com | |||
Passthrough: F | Apply-To-Redirect-Ref: | |||
Content-Type: text/xml; charset="utf-8" | Content-Type: text/xml; charset="utf-8" | |||
Content-Length: xxxx | Content-Length: xxxx | |||
. . . some content . . . | . . . some content . . . | |||
>> Response: | >> Response: | |||
HTTP/1.1 200 OK | HTTP/1.1 200 OK | |||
Although /bar.html is a redirect reference resource, the presence of the | Although /bar.html is a redirect reference resource, the presence of the | |||
"Passthrough: F" header prevents a 302 response, and instead causes the | Apply-To-Redirect-Ref header prevents a 302 response, and instead causes | |||
request to be applied to the reference resource. The result in this | the request to be applied to the reference resource. The result in this | |||
case is that the reference resource is replaced by a non-reference | case is that the reference resource is replaced by a non-reference | |||
resource having the content submitted with the request. | resource having the content submitted with the request. | |||
6.3 Example: PROPPATCH on a Redirect Reference Resource | 6.3 Example: PROPPATCH on a Redirect Reference Resource | |||
>> Request: | Request: | |||
PROPPATCH /bar.html HTTP/1.1 | PROPPATCH /bar.html HTTP/1.1 | |||
Host: www.foo.com | Host: www.foo.com | |||
Content-Type: text/xml; charset="utf-8" | Content-Type: text/xml; charset="utf-8" | |||
Content-Length: xxxx | Content-Length: xxxx | |||
<?xml version="1.0" encoding="utf-8" ?> | <?xml version="1.0" encoding="utf-8" ?> | |||
<D:propertyupdate xmlns:D="DAV:" | <D:propertyupdate xmlns:D="DAV:" | |||
xmlns:Z="http://www.w3.com/standards/z39.50/"> | xmlns:Z="http://www.w3.com/standards/z39.50/"> | |||
<D:set> | <D:set> | |||
skipping to change at line 568 | skipping to change at line 541 | |||
<Z:Author>Jim Whitehead</Z:Author> | <Z:Author>Jim Whitehead</Z:Author> | |||
<Z:Author>Roy Fielding</Z:Author> | <Z:Author>Roy Fielding</Z:Author> | |||
</Z:authors> | </Z:authors> | |||
</D:prop> | </D:prop> | |||
</D:set> | </D:set> | |||
<D:remove> | <D:remove> | |||
<D:prop><Z:Copyright-Owner/></D:prop> | <D:prop><Z:Copyright-Owner/></D:prop> | |||
</D:remove> | </D:remove> | |||
</D:propertyupdate> | </D:propertyupdate> | |||
>> Response: | Response: | |||
HTTP/1.1 302 Found | HTTP/1.1 302 Found | |||
Location: http://www.svr.com/Internet/xxspec08.html | Location: http://www.svr.com/Internet/xxspec08.html | |||
Redirect-Ref: | Redirect-Ref: | |||
Since /bar.html is a redirect reference resource and the Passthrough | Since /bar.html is a redirect reference resource and the Apply-To- | |||
header is not included in the request, the response is a 302 (Found). | Redirect-Ref header is not included in the request, the response is a | |||
The Redirect-Ref header informs a reference-aware client that this is | 302 (Found). The Redirect-Ref header informs a reference-aware client | |||
not an ordinary HTTP 1.1 redirect, but is a redirect reference resource. | that this is not an ordinary HTTP 1.1 redirect, but is a redirect | |||
The URI of the target resource is provided in the Location header so | reference resource. The URI of the target resource is provided in the | |||
that the client can resubmit the request to the target resource. | Location header so that the client can resubmit the request to the | |||
target resource. | ||||
7 Operations on Collections That Contain Redirect Reference Resources | 7 Operations on Collections That Contain Redirect Reference Resources | |||
A URI of a redirect reference resource can be an internal member URI of | A URI of a redirect reference resource can be an internal member URI of | |||
a collection just as the URI of a non-reference resource can. Any | a collection just as the URI of a non-reference resource can. Any | |||
operation on a collection with Depth: 1 or Depth: infinity applies to | operation on a collection with Depth: 1 or Depth: infinity applies to | |||
redirect reference resources in the collection just as it applies to any | redirect reference resources in the collection just as it applies to any | |||
other resources in the collection. The methods that can accept a Depth | other resources in the collection. The methods that can accept a Depth | |||
header are PROPFIND, COPY, MOVE, DELETE, and LOCK. | header are PROPFIND, COPY, MOVE, DELETE, and LOCK. | |||
Consistent with the rules in Section 6, the response for each redirect | Consistent with the rules in Section 6, the response for each redirect | |||
reference encountered while processing a collection MUST be a 302 | reference encountered while processing a collection MUST be a 302 | |||
(Found) unless a Passthrough header with the value "F" is included with | (Found) unless a Apply-To-Redirect-Ref header is included with the | |||
the request. The overall response will therefore be a 207 (Multi- | request. The overall response will therefore be a 207 (Multi-Status). | |||
Status). Since a Location header and Redirect-Ref header cannot be | Since a Location header and Redirect-Ref header cannot be returned for | |||
returned for each redirect reference encountered, the same information | each redirect reference encountered, the same information is provided | |||
must be provided using properties in the response elements for those | using properties in the response elements for those resources. The | |||
resources. The DAV:location pseudo-property and the DAV:resourcetype | DAV:location pseudo-property and the DAV:resourcetype property MUST be | |||
property MUST be included with the 302 status code. This necessitates | included with the 302 status code. This necessitates an extension to | |||
an extension to the syntax of the DAV:response element that was defined | the syntax of the DAV:response element that was defined in [WebDAV]. | |||
in [WebDAV]. The extension is defined in Section 15 below. | The extension is defined in Section 14 below. | |||
A referencing-aware client can tell from the DAV:resourcetype property | A referencing-aware client can tell from the DAV:resourcetype property | |||
that the collection contains a redirect reference resource. The | that the collection contains a redirect reference resource. The | |||
DAV:location pseudo-property contains the absolute URI of the target | DAV:location pseudo-property contains the absolute URI of the target | |||
resource. A referencing-aware client can either use the URI value of | resource. A referencing-aware client can either use the URI value of | |||
the DAV:location pseudo-property to resubmit its request to the target | the DAV:location pseudo-property to resubmit its request to the target | |||
resource, or it can submit the request to the redirect reference | resource, or it can submit the request to the redirect reference | |||
resource with "Passthrough: F". | resource with Apply-To-Redirect-Ref. | |||
It is recommended that future editors of [WebDAV] define the | It is recommended that future editors of [WebDAV] define the | |||
DAV:location pseudo-property in [WebDAV], so that non-referencing | DAV:location pseudo-property in [WebDAV], so that non-referencing | |||
clients will also be able to use the response to operate on the target | clients will also be able to use the response to operate on the target | |||
resource. (This will also enable clients to operate on traditional | resource. (This will also enable clients to operate on traditional | |||
HTTP/1.1 302 responses in Multi-Status responses.) Until then, non- | HTTP/1.1 302 responses in Multi-Status responses.) Until then, non- | |||
referencing clients will not be able to process 302 responses from | referencing clients will not be able to process 302 responses from | |||
redirect reference resources encountered while processing a collection. | redirect reference resources encountered while processing a collection. | |||
The Passthrough header (defined in Section 12.2) MAY be used with any | The Apply-To-Redirect-Ref header (defined in Section 11.2) MAY be used | |||
request on a collection. If present, it will be applied to all redirect | with any request on a collection. If present, it will be applied to all | |||
reference resources encountered while processing the collection. | redirect reference resources encountered while processing the | |||
collection. | ||||
7.1 MOVE and DELETE on Collections That Contain Redirect References | 7.1 MOVE and DELETE on Collections That Contain Redirect References | |||
DELETE removes the binding that corresponds to the Request-URI. MOVE | DELETE removes the binding that corresponds to the Request-URI. MOVE | |||
removes that binding and creates a new binding to the same resource. In | removes that binding and creates a new binding to the same resource. In | |||
cases where DELETE and MOVE are applied to a collection, these | cases where DELETE and MOVE are applied to a collection, these | |||
operations affect all the descendents of the collection, but they do so | operations affect all the descendents of the collection, but they do so | |||
indirectly. There is no need to visit each descendent in order to | indirectly. There is no need to visit each descendent in order to | |||
process the request. Consequently, even if there are redirect reference | process the request. Consequently, even if there are redirect reference | |||
resources in a tree that is being deleted or moved, there will be no 302 | resources in a tree that is being deleted or moved, there will be no 302 | |||
responses from the redirect reference resources. | responses from the redirect reference resources. | |||
7.2 LOCK on a Collection That Contains Redirect References | 7.2 LOCK on a Collection That Contains Redirect References | |||
LOCK poses special problems because it is atomic. An attempt to lock | LOCK poses special problems because it is atomic. An attempt to lock | |||
(with Depth: infinity) a collection that contains redirect references | (with Depth: infinity) a collection that contains redirect references | |||
will always fail. The Multi-Status response will contain a 302 response | will always fail. The Multi-Status response will contain a 302 response | |||
for each redirect reference. | for each redirect reference. | |||
Reference-aware clients can lock the collection by using Passthrough: F, | Reference-aware clients can lock the collection by using Apply-To- | |||
and, if desired, lock the targets of the redirect references | ||||
individually. | Redirect-Ref, and, if desired, lock the targets of the redirect | |||
references individually. | ||||
Non-referencing clients must resort to locking each resource | Non-referencing clients must resort to locking each resource | |||
individually. | individually. | |||
7.3 Example: PROPFIND on a Collection with Redirect Reference Resources | 7.3 Example: PROPFIND on a Collection with Redirect Reference Resources | |||
Suppose a PROPFIND request with Depth = infinity is submitted to the | Suppose a PROPFIND request with Depth = infinity is submitted to the | |||
following collection, with the members shown here: | following collection, with the members shown here: | |||
http://www.svr.com/MyCollection/ | http://www.svr.com/MyCollection/ | |||
skipping to change at line 715 | skipping to change at line 690 | |||
<D:status>HTTP/1.1 302 Found</D:status> | <D:status>HTTP/1.1 302 Found</D:status> | |||
<D:prop> | <D:prop> | |||
<D:location> | <D:location> | |||
<D:href>http://www.inac.gc.ca/art/inuit/</D:href> | <D:href>http://www.inac.gc.ca/art/inuit/</D:href> | |||
</D:location> | </D:location> | |||
<D:resourcetype><D:redirectref/></D:resourcetype> | <D:resourcetype><D:redirectref/></D:resourcetype> | |||
</D:prop> | </D:prop> | |||
</D:response> | </D:response> | |||
</D:multistatus> | </D:multistatus> | |||
In this example the Depth header is set to infinity, and the Passthrough | In this example the Depth header is set to infinity, and the Apply-To- | |||
header is not used. The collection contains one URI that identifies a | Redirect-Ref header is not used. The collection contains one URI that | |||
redirect reference resource. The response element for the redirect | identifies a redirect reference resource. The response element for the | |||
reference resource has a status of 302 (Found), and includes a DAV:prop | redirect reference resource has a status of 302 (Found), and includes a | |||
element with the DAV:location pseudo-property and the DAV:resourcetype | DAV:prop element with the DAV:location pseudo-property and the | |||
property to allow clients to retrieve the properties of its target | DAV:resourcetype property to allow clients to retrieve the properties of | |||
resource. (The response element for the redirect reference resource | its target resource. (The response element for the redirect reference | |||
does not include the requested properties. The client can submit | resource does not include the requested properties. The client can | |||
another PROPFIND request to the URI in the DAV:location pseudo-property | submit another PROPFIND request to the URI in the DAV:location pseudo- | |||
to retrieve those properties.) | property to retrieve those properties.) | |||
7.4 Example: PROPFIND with Passthrough: F on a Collection with Redirect | ||||
Reference Resources | 7.4 Example: PROPFIND with Apply-To-Redirect-Ref on a Collection with | |||
Redirect Reference Resources | ||||
Suppose a PROPFIND request with Passthrough = F and Depth = infinity is | Suppose a PROPFIND request with Apply-To-Redirect-Ref and Depth = | |||
submitted to the following collection, with the members shown here: | infinity is submitted to the following collection, with the members | |||
shown here: | ||||
/MyCollection/ | /MyCollection/ | |||
(non-reference resource) diary.html | (non-reference resource) diary.html | |||
(redirect reference resource) nunavut | (redirect reference resource) nunavut | |||
>> Request: | >> Request: | |||
PROPFIND /MyCollection/ HTTP/1.1 | PROPFIND /MyCollection/ HTTP/1.1 | |||
Host: www.svr.com | Host: www.svr.com | |||
Depth: infinity | Depth: infinity | |||
Passthrough: F | Apply-To-Redirect-Ref: | |||
Content-Type: text/xml | Content-Type: text/xml | |||
Content-Length: xxxx | Content-Length: xxxx | |||
<?xml version="1.0" ?> | <?xml version="1.0" ?> | |||
<D:propfind xmlns:D="DAV:"> | <D:propfind xmlns:D="DAV:"> | |||
<D:prop> | <D:prop> | |||
<D:resourcetype/> | <D:resourcetype/> | |||
<D:reftarget/> | <D:reftarget/> | |||
</D:prop> | </D:prop> | |||
</D:propfind> | </D:propfind> | |||
skipping to change at line 802 | skipping to change at line 777 | |||
<D:resourcetype><D:redirectref/></D:resourcetype> | <D:resourcetype><D:redirectref/></D:resourcetype> | |||
<D:reftarget> | <D:reftarget> | |||
<D:href>http://www.inac.gc.ca/art/inuit/</D:href> | <D:href>http://www.inac.gc.ca/art/inuit/</D:href> | |||
</D:reftarget> | </D:reftarget> | |||
</D:prop> | </D:prop> | |||
<D:status>HTTP/1.1 200 OK</D:status> | <D:status>HTTP/1.1 200 OK</D:status> | |||
</D:propstat> | </D:propstat> | |||
</D:response> | </D:response> | |||
</D:multistatus> | </D:multistatus> | |||
Since the Passthrough header has the value "F", the response shows the | Since the Apply-To-Redirect-Ref header is present, the response shows | |||
properties of the redirect reference resource in the collection rather | the properties of the redirect reference resource in the collection | |||
than the properties of its target. The value of the Passthrough header | rather than the properties of its target. The Apply-To-Redirect-Ref | |||
also prevents a 302 response from being returned for the redirect | header also prevents a 302 response from being returned for the redirect | |||
reference resource. | reference resource. | |||
7.5 Example: COPY on a Collection That Contains a Redirect Reference | 7.5 Example: COPY on a Collection That Contains a Redirect Reference | |||
Resource | Resource | |||
Suppose a COPY request is submitted to the following collection, with | Suppose a COPY request is submitted to the following collection, with | |||
the members shown: | the members shown: | |||
/MyCollection/ | /MyCollection/ | |||
(non-reference resource) diary.html | (non-reference resource) diary.html | |||
(redirect reference resource) nunavut with target | (redirect reference resource) nunavut with target | |||
/Someplace/nunavut.map | /Someplace/nunavut.map | |||
>> Request: | >> Request: | |||
COPY /MyCollection/ HTTP/1.1 | COPY /MyCollection/ HTTP/1.1 | |||
Host: www.svr.com | Host: www.svr.com | |||
Depth: infinity | ||||
Destination: http://www.svr.com/OtherCollection/ | Destination: http://www.svr.com/OtherCollection/ | |||
>> Response: | >> Response: | |||
HTTP/1.1 207 Multi-Status | HTTP/1.1 207 Multi-Status | |||
Content-Type: text/xml; charset="utf-8" | Content-Type: text/xml; charset="utf-8" | |||
Content-Length: xxx | Content-Length: xxx | |||
<?xml version="1.0" encoding="utf-8" ?> | <?xml version="1.0" encoding="utf-8" ?> | |||
<D:multistatus xmlns:D="DAV:"> | <D:multistatus xmlns:D="DAV:"> | |||
skipping to change at line 856 | skipping to change at line 832 | |||
In this case, since /MyCollection/nunavut is a redirect reference | In this case, since /MyCollection/nunavut is a redirect reference | |||
resource, the COPY operation was only a partial success. The redirect | resource, the COPY operation was only a partial success. The redirect | |||
reference resource was not copied, but a 302 response was returned for | reference resource was not copied, but a 302 response was returned for | |||
it. So the resulting collection is as follows: | it. So the resulting collection is as follows: | |||
/OtherCollection/ | /OtherCollection/ | |||
(non-reference resource) diary.html | (non-reference resource) diary.html | |||
7.6 Example: LOCK on a Collection That Contains a Redirect Reference | 7.6 Example: LOCK on a Collection That Contains a Redirect Reference | |||
Resource, with Passthrough: T | Resource | |||
Suppose a LOCK request is submitted to the following collection, with | Suppose a LOCK request is submitted to the following collection, with | |||
the members shown: | the members shown: | |||
/MyCollection/ | /MyCollection/ | |||
(non-reference resource) diary.html | (non-reference resource) diary.html | |||
(redirect reference resource) nunavut | (redirect reference resource) nunavut | |||
>> Request: | >> Request: | |||
LOCK /MyCollection/ HTTP/1.1 | LOCK /MyCollection/ HTTP/1.1 | |||
Host: www.svr.com | Host: www.svr.com | |||
Passthrough: T | ||||
Content-Type: text/xml | Content-Type: text/xml | |||
Content-Length: nnnn | Content-Length: nnnn | |||
Authorizaton: Digest username="jas", | Authorizaton: Digest username="jas", | |||
realm=jas@webdav.sb.aol.com, nonce=". . . ", | realm=jas@webdav.sb.aol.com, nonce=". . . ", | |||
uri="/MyCollection/tuva", | uri="/MyCollection/tuva", | |||
response=". . . ", opaque=". . . " | response=". . . ", opaque=". . . " | |||
<?xml version="1.0" ?> | <?xml version="1.0" ?> | |||
<D:lockinfo xmlns:D="DAV:"> | <D:lockinfo xmlns:D="DAV:"> | |||
<D:lockscope><D:exclusive/></D:lockscope> | <D:lockscope><D:exclusive/></D:lockscope> | |||
skipping to change at line 918 | skipping to change at line 892 | |||
<D:status>HTTP/1.1 302 Found</D:status> | <D:status>HTTP/1.1 302 Found</D:status> | |||
<D:prop> | <D:prop> | |||
<D:location> | <D:location> | |||
<D:href>http://www.inac.gc.ca/art/inuit/</D:href> | <D:href>http://www.inac.gc.ca/art/inuit/</D:href> | |||
</D:location> | </D:location> | |||
<D:resourcetype><D:redirectref/></D:resourcetype> | <D:resourcetype><D:redirectref/></D:resourcetype> | |||
</D:prop> | </D:prop> | |||
</D:response> | </D:response> | |||
</D:multistatus> | </D:multistatus> | |||
The "Passthrough: T" header caused the server to return a 302 response | The server returns a 302 response code for the redirect reference | |||
code for the redirect reference resource in the collection. | ||||
Consequently, neither the collection nor any of the resources identified | resource in the collection. Consequently, neither the collection nor | |||
by its internal member URIs were locked. A referencing-aware client can | any of the resources identified by its internal member URIs were locked. | |||
submit a separate LOCK request to the URI in the DAV:location pseudo- | A referencing-aware client can submit a separate LOCK request to the URI | |||
property returned for the redirect reference resource, and can resubmit | in the DAV:location pseudo-property returned for the redirect reference | |||
the LOCK request with "Passthrough: F" to the collection. At that point | resource, and can resubmit the LOCK request with the Apply-To-Redirect- | |||
both the reference resource and its target resource will be locked (as | Ref header to the collection. At that point both the reference resource | |||
well as the collection and all the resources identified by its other | and its target resource will be locked (as well as the collection and | |||
members). | all the resources identified by its other members). | |||
8 Operations on Targets of Redirect Reference Resources | 8 Operations on Targets of Redirect Reference Resources | |||
Operations on targets of redirect reference resources have no effect on | Operations on targets of redirect reference resources have no effect on | |||
the reference resource. | the reference resource. | |||
9 Relative URIs in DAV:reftarget | 9 Relative URIs in DAV:reftarget | |||
The URI in the href in a DAV:reftarget property MAY be a relative URI. | The URI in the href in a DAV:reftarget property MAY be a relative URI. | |||
In this case, the base URI to be used for resolving the relative URI to | In this case, the base URI to be used for resolving the relative URI to | |||
skipping to change at line 995 | skipping to change at line 968 | |||
Then, following the rules in [URI] Section 5, the relative URI in | Then, following the rules in [URI] Section 5, the relative URI in | |||
DAV:reftarget resolves to the absolute URI | DAV:reftarget resolves to the absolute URI | |||
http://www.somehost.edu/north/mapcollection/inuvik.gif. | http://www.somehost.edu/north/mapcollection/inuvik.gif. | |||
9.2 Example: Resolving a Relative URI in a Multi-Status Response | 9.2 Example: Resolving a Relative URI in a Multi-Status Response | |||
>> Request: | >> Request: | |||
PROPFIND /geog/ HTTP/1.1 | PROPFIND /geog/ HTTP/1.1 | |||
Host: www.xxsvr.com | Host: www.xxsvr.com | |||
Passthrough: F | Apply-To-Redirect-Ref: | |||
Depth: 1 | Depth: 1 | |||
Content-Type: text/xml | Content-Type: text/xml | |||
Content-Length: nnn | Content-Length: nnn | |||
<?xml version="1.0" ?> | <?xml version="1.0" ?> | |||
<D:propfind xmlns:D="DAV:"> | <D:propfind xmlns:D="DAV:"> | |||
<D:prop> | <D:prop> | |||
<D:resourcetype/> | <D:resourcetype/> | |||
<D:reftarget/> | <D:reftarget/> | |||
</D:prop> | </D:prop> | |||
skipping to change at line 1088 | skipping to change at line 1060 | |||
In this case the client must follow up three separate 302 responses | In this case the client must follow up three separate 302 responses | |||
before finally reaching the target resource. The server responds to the | before finally reaching the target resource. The server responds to the | |||
initial request with a 302 with Location: /a/y/z.html, and the client | initial request with a 302 with Location: /a/y/z.html, and the client | |||
resubmits the request to /a/y/z.html. The server responds to this | resubmits the request to /a/y/z.html. The server responds to this | |||
request with a 302 with Location: /b/z.html, and the client resubmits | request with a 302 with Location: /b/z.html, and the client resubmits | |||
the request to /b/z.html. The server responds to this request with a | the request to /b/z.html. The server responds to this request with a | |||
302 with Location: /c/d.html, and the client resubmits the request to | 302 with Location: /c/d.html, and the client resubmits the request to | |||
/c/d.html. This final request succeeds. | /c/d.html. This final request succeeds. | |||
11 Status Codes | 11 Headers | |||
11.1 509 Dangling References Forbidden | ||||
The server has a policy forbidding dangling references, and the request | ||||
would have created a dangling reference. For example, if there is no | ||||
resource at the location specified by the DAV:reftarget property of a | ||||
MKRESOURCE request, the request would create a dangling reference. | ||||
12 Headers | ||||
12.1 Redirect-Ref Response Header | 11.1 Redirect-Ref Response Header | |||
Redirect-Ref = "Redirect-Ref:" | Redirect-Ref = "Redirect-Ref:" | |||
The Redirect-Ref header is used in all 302 responses from redirect | The Redirect-Ref header is used in all 302 responses from redirect | |||
reference resources. Its presence informs reference-aware clients that | reference resources. Its presence informs reference-aware clients that | |||
the response is not a plain HTTP/1.1 redirect, but is a response from a | the response is not a plain HTTP/1.1 redirect, but is a response from a | |||
redirect reference resource. | redirect reference resource. | |||
12.2 Passthrough Request Header | 11.2 Apply-To-Redirect-Ref Request Header | |||
Passthrough = "Passthrough" ":" ("T" | "F") | ||||
The optional Passthrough header can be used on any request to a redirect | Apply-To-Redirect-Ref = "Apply-To-Redirect-Ref" ":" | |||
reference resource. If the Passthrough header has the value "F", the | ||||
request MUST be applied to the reference resource itself, and a 302 | ||||
response MUST NOT be returned. If the Passthrough header has the value | ||||
"T", a 302 response MUST be returned, with the URI of the target | The optional Apply-To-Redirect-Ref header can be used on any request to | |||
resource in the Location header and the Redirect-Ref header. | a redirect reference resource. When it is used, the request MUST be | |||
applied to the reference resource itself, and a 302 response MUST NOT be | ||||
returned. | ||||
If the Passthrough header is used on a request to any other sort of | If the Apply-To-Redirect-Ref header is used on a request to any other | |||
resource besides a reference resource, the server SHOULD ignore it. If | sort of resource besides a redirect reference resource, the server | |||
the Passthrough header with the value "F" appears in a POST or | SHOULD ignore it. | |||
ORDERPATCH request to a reference resource, the server MUST respond with | ||||
a 400 (Bad Request). | ||||
13 Properties | 12 Properties | |||
13.1 reftarget Property | 12.1 reftarget Property | |||
Name: reftarget | Name: reftarget | |||
Namespace: DAV: | Namespace: DAV: | |||
Purpose: A property of redirect reference resources that provides an | Purpose: A property of redirect reference resources that provides an | |||
efficient way for clients to discover the URI of the target | efficient way for clients to discover the URI of the target | |||
resource. This is a read-only property after its initial | resource. This is a read-only property after its initial | |||
creation. Its value can only be set in a MKRESOURCE request. | creation. Its value can only be set in a MKRESOURCE request. | |||
Value: href containing the URI of the target resource. This value | Value: href containing the URI of the target resource. This value | |||
MAY be a relative URI. The reftarget property can occur in | MAY be a relative URI. The reftarget property can occur in | |||
the entity bodies of MKRESOURCE requests and of responses to | the entity bodies of MKRESOURCE requests and of responses to | |||
PROPFIND requests. | PROPFIND requests. | |||
<!ELEMENT reftarget href > | <!ELEMENT reftarget href > | |||
13.2 location Pseudo-Property | 12.2 location Pseudo-Property | |||
Name: location | Name: location | |||
Namespace: DAV: | Namespace: DAV: | |||
Purpose: For use with 302 (Found) response codes in Multi-Status | Purpose: For use with 302 (Found) response codes in Multi-Status | |||
responses. It contains the absolute URI of the temporary | responses. It contains the absolute URI of the temporary | |||
location of the resource. In the context of redirect | location of the resource. In the context of redirect | |||
reference resources, this value is the absolute URI of the | reference resources, this value is the absolute URI of the | |||
target resource. It is analogous to the Location header in | target resource. It is analogous to the Location header in | |||
HTTP 302 responses defined in [HTTP] Section 10.3.3 "302 | HTTP 302 responses defined in [HTTP] Section 10.3.3 "302 | |||
Found." Including the location pseudo-property in a Multi- | Found." Including the location pseudo-property in a Multi- | |||
Status response requires an extension to the syntax of the | Status response requires an extension to the syntax of the | |||
DAV:response element defined in [WebDAV], which is defined | DAV:response element defined in [WebDAV], which is defined | |||
in Section 15 below. This pseudo-property is not expected | in Section 14 below. This pseudo-property is not expected | |||
to be stored on the reference resource. It is modeled as a | to be stored on the reference resource. It is modeled as a | |||
property only so that it can be returned inside a DAV:prop | property only so that it can be returned inside a DAV:prop | |||
element in a Multi-Status response. | element in a Multi-Status response. | |||
Value: href containing the absolute URI of the target resource. | Value: href containing the absolute URI of the target resource. | |||
<!ELEMENT location href > | <!ELEMENT location href > | |||
14 XML Elements | 13 XML Elements | |||
14.1 redirectref XML Element | 13.1 redirectref XML Element | |||
Name: redirectref | Name: redirectref | |||
Namespace: DAV: | Namespace: DAV: | |||
Purpose: Used as the value of the DAV:resourcetype property to | Purpose: Used as the value of the DAV:resourcetype property to | |||
specify that the resource type is a redirect reference | specify that the resource type is a redirect reference | |||
resource. | resource. | |||
<!ELEMENT redirectref EMPTY > | <!ELEMENT redirectref EMPTY > | |||
15 Extensions to the DAV:response XML Element for Multi-Status Responses | 14 Extensions to the DAV:response XML Element for Multi-Status Responses | |||
As described in Sections 7 and 0, the DAV:location pseudo-property and | As described in Section 7, the DAV:location pseudo-property and the | |||
the DAV:reftype property may be returned in the DAV:response element of | DAV:resourcetype property may be returned in the DAV:response element of | |||
a 207 Multi-Status response, to allow clients to resubmit their requests | a 207 Multi-Status response, to allow clients to resubmit their requests | |||
to the target resource of a redirect reference resource. | to the target resource of a redirect reference resource. | |||
Whenever these properties are included in a Multi-Status response, they | Whenever these properties are included in a Multi-Status response, they | |||
are placed in a DAV:prop element associated with the href to which they | are placed in a DAV:prop element associated with the href to which they | |||
apply. This structure provides a framework for future extensions by | apply. This structure provides a framework for future extensions by | |||
other standards that may need to include additional properties in their | other standards that may need to include additional properties in their | |||
responses. | responses. | |||
Consequently, the definition of the DAV:response XML element changes to | Consequently, the definition of the DAV:response XML element changes to | |||
the following: | the following: | |||
<!ELEMENT response (href, ((href*, status, prop?) | (propstat+)), | <!ELEMENT response (href, ((href*, status, prop?) | (propstat+)), | |||
responsedescription?) > | responsedescription?) > | |||
16 Capability Discovery | 15 Capability Discovery | |||
Sections 9.1 and 15 of [WebDAV] describe the use of compliance classes | Sections 9.1 and 15 of [WebDAV] describe the use of compliance classes | |||
with the DAV header in responses to OPTIONS, to indicate which parts of | with the DAV header in responses to OPTIONS, to indicate which parts of | |||
the Web Distributed Authoring protocols the resource supports. This | the WebDAV Distributed Authoring protocols the resource supports. This | |||
specification defines an OPTIONAL extension to [WebDAV]. It defines a | specification defines an OPTIONAL extension to [WebDAV]. It defines a | |||
new compliance class, called redirectrefs, for use with the DAV header | new compliance class, called redirectrefs, for use with the DAV header | |||
in responses to OPTIONS requests. If a resource does support redirect | in responses to OPTIONS requests. If a resource does support redirect | |||
references, its response to an OPTIONS request MUST indicate that it | references, its response to an OPTIONS request may indicate that it | |||
does, by listing the new redirectrefs compliance class in the DAV | does, by listing the new redirectrefs compliance class in the DAV | |||
header. It MUST also list the MKRESOURCE method as one it supports. | headerand by listing the MKRESOURCE method as one it supports. | |||
When responding to an OPTIONS request, any type of resource can include | When responding to an OPTIONS request, any type of resource can include | |||
redirectrefs in the value of the DAV header. Doing so indicates that | redirectrefs in the value of the DAV header. Doing so indicates that | |||
the server permits a redirect reference resource at the request URI. | the server permits a redirect reference resource at the request URI. | |||
16.1 Example: Discovery of Support for Redirect Reference Resources | 15.1 Example: Discovery of Support for Redirect Reference Resources | |||
>> Request: | >> Request: | |||
OPTIONS /somecollection/someresource HTTP/1.1 | OPTIONS /somecollection/someresource HTTP/1.1 | |||
HOST: somehost.org | HOST: somehost.org | |||
>> Response: | >> Response: | |||
HTTP/1.1 200 OK | HTTP/1.1 200 OK | |||
Date: Tue, 20 Jan 1998 20:52:29 GMT | Date: Tue, 20 Jan 1998 20:52:29 GMT | |||
skipping to change at line 1239 | skipping to change at line 1196 | |||
DAV: 1, 2, redirectrefs | DAV: 1, 2, redirectrefs | |||
The DAV header in the response indicates that the resource | The DAV header in the response indicates that the resource | |||
/somecollection/someresource is level 1 and level 2 compliant, as | /somecollection/someresource is level 1 and level 2 compliant, as | |||
defined in [WebDAV]. In addition, /somecollection/someresource supports | defined in [WebDAV]. In addition, /somecollection/someresource supports | |||
redirect reference resources. The Allow header indicates that | redirect reference resources. The Allow header indicates that | |||
MKRESOURCE requests can be submitted to /somecollection/someresource. | MKRESOURCE requests can be submitted to /somecollection/someresource. | |||
The Public header shows that other Request-URIs on the server support | The Public header shows that other Request-URIs on the server support | |||
additional methods. | additional methods. | |||
17 Security Considerations | 16 Security Considerations | |||
This section is provided to make WebDAV applications aware of the | This section is provided to make WebDAV applications aware of the | |||
security implications of this protocol. | security implications of this protocol. | |||
All of the security considerations of HTTP/1.1 and the WebDAV | All of the security considerations of HTTP/1.1 and the WebDAV | |||
Distributed Authoring Protocol specification also apply to this protocol | Distributed Authoring Protocol specification also apply to this protocol | |||
specification. In addition, redirect reference resources introduce | specification. In addition, redirect reference resources introduce | |||
several new security concerns and increase the risk of some existing | several new security concerns and increase the risk of some existing | |||
threats. These issues are detailed below. | threats. These issues are detailed below. | |||
17.1 Privacy Concerns | 16.1 Privacy Concerns | |||
By creating redirect reference resources on a trusted server, it is | By creating redirect reference resources on a trusted server, it is | |||
possible for a hostile agent to induce users to send private information | possible for a hostile agent to induce users to send private information | |||
to a target on a different server. This risk is mitigated somewhat, | to a target on a different server. This risk is mitigated somewhat, | |||
since clients are required to notify the user of the redirection for any | since clients are required to notify the user of the redirection for any | |||
request other than GET or HEAD. (See [HTTP], Section 10.3.3 302 Found.) | request other than GET or HEAD. (See [HTTP], Section 10.3.3 302 Found.) | |||
17.2 Redirect Loops | 16.2 Redirect Loops | |||
Although redirect loops were already possible in HTTP 1.1, the | Although redirect loops were already possible in HTTP 1.1, the | |||
introduction of the MKRESOURCE method creates a new avenue for clients | introduction of the MKRESOURCE method creates a new avenue for clients | |||
to create loops accidentally or maliciously. If the reference resource | to create loops accidentally or maliciously. If the reference resource | |||
and its target are on the same server, the server may be able to detect | and its target are on the same server, the server may be able to detect | |||
MKRESOURCE requests that would create loops. See also [HTTP], Section | MKRESOURCE requests that would create loops. See also [HTTP], Section | |||
10.3 "Redirection 3xx." | 10.3 "Redirection 3xx." | |||
17.3 Redirect Reference Resources and Denial of Service | 16.3 Redirect Reference Resources and Denial of Service | |||
Denial of service attacks were already possible by posting URLs that | Denial of service attacks were already possible by posting URLs that | |||
were intended for limited use at heavily used Web sites. The | were intended for limited use at heavily used Web sites. The | |||
introduction of MKRESOURCE creates a new avenue for similar denial of | introduction of MKRESOURCE creates a new avenue for similar denial of | |||
service attacks. Clients can now create redirect reference resources at | service attacks. Clients can now create redirect reference resources at | |||
heavily used sites to target locations that were not designed for heavy | heavily used sites to target locations that were not designed for heavy | |||
usage. | usage. | |||
17.4 Private Locations May Be Revealed | 16.4 Private Locations May Be Revealed | |||
There are several ways that redirect reference resources may reveal | There are several ways that redirect reference resources may reveal | |||
information about directory structures. First, the DAV:reftarget | information about directory structures. First, the DAV:reftarget | |||
property of every redirect reference resource contains the URI of the | property of every redirect reference resource contains the URI of the | |||
target resource. Anyone who has access to the reference resource can | target resource. Anyone who has access to the reference resource can | |||
discover the directory path that leads to the target resource. The | discover the directory path that leads to the target resource. The | |||
owner of the target resource may have wanted to limit knowledge of this | owner of the target resource may have wanted to limit knowledge of this | |||
directory structure. | directory structure. | |||
Sufficiently powerful access control mechanisms can control this risk to | Sufficiently powerful access control mechanisms can control this risk to | |||
some extent. Property-level access control could prevent users from | some extent. Property-level access control could prevent users from | |||
examining the DAV:reftarget property. (The Location header returned in | examining the DAV:reftarget property. (The Location header returned in | |||
responses to requests on redirect reference resources reveals the same | responses to requests on redirect reference resources reveals the same | |||
information, however.) In some environments, the owner of a resource | information, however.) In some environments, the owner of a resource | |||
might be able to use access control to prevent others from creating | might be able to use access control to prevent others from creating | |||
references to that resource. | references to that resource. | |||
skipping to change at line 1295 | skipping to change at line 1251 | |||
directory structure. | directory structure. | |||
Sufficiently powerful access control mechanisms can control this risk to | Sufficiently powerful access control mechanisms can control this risk to | |||
some extent. Property-level access control could prevent users from | some extent. Property-level access control could prevent users from | |||
examining the DAV:reftarget property. (The Location header returned in | examining the DAV:reftarget property. (The Location header returned in | |||
responses to requests on redirect reference resources reveals the same | responses to requests on redirect reference resources reveals the same | |||
information, however.) In some environments, the owner of a resource | information, however.) In some environments, the owner of a resource | |||
might be able to use access control to prevent others from creating | might be able to use access control to prevent others from creating | |||
references to that resource. | references to that resource. | |||
18 Internationalization Considerations | This risk is no greater than the similar risk posed by HTML links. | |||
17 Internationalization Considerations | ||||
This specification follows the practices of [WebDAV] in encoding all | This specification follows the practices of [WebDAV] in encoding all | |||
human-readable content using XML [XML] and in the treatment of names. | human-readable content using XML [XML] and in the treatment of names. | |||
Consequently, this specification complies with the IETF Character Set | Consequently, this specification complies with the IETF Character Set | |||
Policy [Alvestrand]. | Policy [RFC2277]. | |||
WebDAV applications MUST support the character set tagging, character | WebDAV applications MUST support the character set tagging, character | |||
set encoding, and the language tagging functionality of the XML | set encoding, and the language tagging functionality of the XML | |||
specification. This constraint ensures that the human-readable content | specification. This constraint ensures that the human-readable content | |||
of this specification complies with [Alvestrand]. | of this specification complies with [RFC2277]. | |||
As in [WebDAV}, names in this specification fall into three categories: | As in [WebDAV}, names in this specification fall into three categories: | |||
names of protocol elements such as methods and headers, names of XML | names of protocol elements such as methods and headers, names of XML | |||
elements, and names of properties. Naming of protocol elements follows | elements, and names of properties. Naming of protocol elements follows | |||
the precedent of HTTP, using English names encoded in USASCII for | the precedent of HTTP, using English names encoded in USASCII for | |||
methods and headers. The names of XML elements used in this | methods and headers. The names of XML elements used in this | |||
specification are English names encoded in UTF-8. | specification are English names encoded in UTF-8. | |||
For error reporting, [WebDAV] follows the convention of HTTP/1.1 status | For error reporting, [WebDAV] follows the convention of HTTP/1.1 status | |||
codes, including with each status code a short, English description of | codes, including with each status code a short, English description of | |||
the code (e.g., 423 Locked). Internationalized applications will ignore | the code (e.g., 423 Locked). Internationalized applications will ignore | |||
this message, and display an appropriate message in the user's language | this message, and display an appropriate message in the user's language | |||
and character set. | and character set. | |||
This specification introduces no new strings that are displayed to users | ||||
as part of normal, error-free operation of the protocol. | ||||
For rationales for these decisions and advice for application | For rationales for these decisions and advice for application | |||
implementors, see [WebDAV]. | implementors, see [WebDAV]. | |||
19 IANA Considerations | 18 IANA Considerations | |||
This document uses the namespaces defined by [WebDAV] for properties and | This document uses the namespaces defined by [WebDAV] for properties and | |||
XML elements. All other IANA considerations mentioned in [WebDAV] also | XML elements. All other IANA considerations mentioned in [WebDAV] also | |||
apply to this document. | apply to this document. | |||
In addition, this document defines a new HTTP/1.1 status code, 509 | 19 Copyright | |||
(Dangling References Forbidden) defined in Section 11.1. | ||||
20 Copyright | ||||
To be supplied by the RFC Editor. | To be supplied by the RFC Editor. | |||
21 Intellectual Property | 20 Intellectual Property | |||
To be supplied by the RFC Editor. | To be supplied by the RFC Editor. | |||
22 Acknowledgements | 21 Acknowledgements | |||
This draft has benefited from thoughtful discussion by Jim Amsden, Steve | This draft has benefited from thoughtful discussion by Jim Amsden, Peter | |||
Carter, Ken Coar, Ellis Cohen, Bruce Cragun, Spencer Dawkins, Mark Day, | Carlson, Steve Carter, Tyson Chihaya, Ken Coar, Ellis Cohen, Bruce | |||
Rajiv Dulepet, David Durand, Roy Fielding, Yaron Goland, Fred Hitt, Alex | Cragun, Spencer Dawkins, Mark Day, Rajiv Dulepet, David Durand, Roy | |||
Hopmann, Marcus Jager, Chris Kaler, Manoj Kasichainula, Rohit Khare, | Fielding, Yaron Goland, Fred Hitt, Alex Hopmann, James Hunt, Marcus | |||
Daniel LaLiberte, Steve Martin, Larry Masinter, Jeff McAffer, Surendra | Jager, Chris Kaler, Manoj Kasichainula, Rohit Khare, Daniel LaLiberte, | |||
Koduru Reddy, Max Rible, Sam Ruby, Bradley Sergeant, Nick Shelness, John | Steve Martin, Larry Masinter, Jeff McAffer, Surendra Koduru Reddy, Max | |||
Stracke, John Tigue, John Turner, and others. | Rible, Sam Ruby, Bradley Sergeant, Nick Shelness, John Stracke, John | |||
Tigue, John Turner, Kevin Wiggen, and others. | ||||
23 References | 22 References | |||
[RFC2277] H.T. Alvestrand, "IETF Policy on Character Sets and | ||||
Languages." RFC 2277, BCP 18. Uninett. January, 1998. | ||||
[URI] T. Berners-Lee, R. Fielding, L. Masinter, "Uniform Resource | [URI] T. Berners-Lee, R. Fielding, L. Masinter, "Uniform Resource | |||
Identifiers (URI): Generic Syntax." RFC 2396. MIT/LCS, U.C. Irvine, | Identifiers (URI): Generic Syntax." RFC 2396. MIT/LCS, U.C. Irvine, | |||
Xerox. August, 1998. | Xerox. August, 1998. | |||
[RFC2119] S. Bradner, "Key words for use in RFCs to Indicate Requirement | [RFC2119] S. Bradner, "Key words for use in RFCs to Indicate Requirement | |||
Levels." RFC 2119, BCP 14. Harvard University. March, 1997. | Levels." RFC 2119, BCP 14. Harvard University. March, 1997. | |||
[XML] T. Bray, J. Paoli, C.M. Sperberg-McQueen, "Extensible Markup | [XML] T. Bray, J. Paoli, C.M. Sperberg-McQueen, "Extensible Markup | |||
Language (XML)." World Wide Web Consortium Recommendation REC-xml- | Language (XML)." World Wide Web Consortium Recommendation REC-xml- | |||
skipping to change at line 1372 | skipping to change at line 1335 | |||
[HTTP] R. Fielding, J. Gettys, J. Mogul, H. Frystyk, L. Masinter, P. | [HTTP] R. Fielding, J. Gettys, J. Mogul, H. Frystyk, L. Masinter, P. | |||
Leach, T. Berners-Lee, "Hypertext Transfer Protocol -- HTTP/1.1." RFC | Leach, T. Berners-Lee, "Hypertext Transfer Protocol -- HTTP/1.1." RFC | |||
2616. UC Irvine, Compaq, W3C, Xerox, Microsoft. June, 1999. | 2616. UC Irvine, Compaq, W3C, Xerox, Microsoft. June, 1999. | |||
[WebDAV] Y. Y. Goland, E. J. Whitehead, Jr., A. Faizi, S. R. Carter, D. | [WebDAV] Y. Y. Goland, E. J. Whitehead, Jr., A. Faizi, S. R. Carter, D. | |||
Jensen, "HTTP Extensions for Distributed Authoring - WebDAV." RFC 2518. | Jensen, "HTTP Extensions for Distributed Authoring - WebDAV." RFC 2518. | |||
Microsoft, U.C. Irvine, Netscape, Novell. February, 1999. | Microsoft, U.C. Irvine, Netscape, Novell. February, 1999. | |||
[B] J. Slein, E.J. Whitehead Jr., J. Davis, G. Clemm, C. Fay, J. | [B] J. Slein, E.J. Whitehead Jr., J. Davis, G. Clemm, C. Fay, J. | |||
Crawford, T. Chihaya, "WebDAV Bindings." Internet Draft (work in | ||||
progress) draft-ietf-webdav-binding-protocol-00. Xerox, UC Irvine, | ||||
CourseNet, Rational, FileNet, IBM, DataChannel. August, 1999. | ||||
[OC] J. Slein, E.J. Whitehead Jr., J. Davis, G. Clemm, C. Fay, J. | Crawford, "WebDAV Bindings." Internet Draft (work in progress) draft- | |||
Crawford, T. Chihaya, "WebDAV Ordered Collections." Internet Draft (work | ietf-webdav-binding-protocol-02. Xerox, UC Irvine, CourseNet, Rational, | |||
in progress) draft-ietf-webdav-ordering-protocol-00. Xerox, UC Irvine, | FileNet, IBM. December, 1999. | |||
CourseNet, Rational, FileNet, IBM, DataChannel. August, 1999. | ||||
24 Authors' Addresses | 23 Authors' Addresses | |||
J. Slein | J. Slein | |||
Xerox Corporation | Xerox Corporation | |||
800 Phillips Road, 105-50C | 800 Phillips Road, 105-50C | |||
Webster, NY 14580 | Webster, NY 14580 | |||
Email: jslein@crt.xerox.com | Email: jslein@crt.xerox.com | |||
E. J. Whitehead, Jr. | E. J. Whitehead, Jr. | |||
Dept. of Information and Computer Science | Dept. of Information and Computer Science | |||
University of California, Irvine | University of California, Irvine | |||
skipping to change at line 1414 | skipping to change at line 1373 | |||
Lexington, MA 02173-3104 | Lexington, MA 02173-3104 | |||
Email: gclemm@rational.com | Email: gclemm@rational.com | |||
C. Fay | C. Fay | |||
FileNet Corporation | FileNet Corporation | |||
3565 Harbor Boulevard | 3565 Harbor Boulevard | |||
Costa Mesa, CA 92626-1420 | Costa Mesa, CA 92626-1420 | |||
Email: cfay@filenet.com | Email: cfay@filenet.com | |||
J. Crawford | J. Crawford | |||
IBM | IBM Research | |||
P.O. Box 704 | ||||
Yorktown Heights, NY 10598 | ||||
Email: ccjason@us.ibm.com | Email: ccjason@us.ibm.com | |||
T. Chihaya | 24 Appendices | |||
DataChannel, Inc. | ||||
155 108th Ave. N.E., Suite 400 | ||||
Bellevue, WA 98004 | ||||
Email: Tyson@DataChannel.com | ||||
25 Appendices | ||||
25.1 Appendix 1: Extensions to the WebDAV Document Type Definition | 24.1 Appendix 1: Extensions to the WebDAV Document Type Definition | |||
<!--============= XML Elements from Section 14 ================--> | <!--============= XML Elements from Section 13 ================--> | |||
<!ELEMENT redirectref EMPTY > | <!ELEMENT redirectref EMPTY > | |||
<!--============= Property Elements from Section 13 =================--> | <!--============= Property Elements from Section 12 ===========--> | |||
<!ELEMENT reftarget href> | <!ELEMENT reftarget href> | |||
<!ELEMENT location href> | <!ELEMENT location href> | |||
<!--====== Changes to the DAV:response Element from Section 15 ====--> | <!--====== Changes to the DAV:response Element from Section 14 ====--> | |||
<!ELEMENT response (href, ((href*, status, prop?) | (propstat+)), | <!ELEMENT response (href, ((href*, status, prop?) | (propstat+)), | |||
responsedescription?) > | responsedescription?) > | |||
Expires April 15, 2000 | Expires June 17, 2000 | |||
End of changes. | ||||
This html diff was produced by rfcdiff 1.23, available from http://www.levkowetz.com/ietf/tools/rfcdiff/ |