8.9 MOVE Method
The MOVE operation on a non-collection resource is the logical
equivalent of a copy (COPY), followed by consistency maintenance
processing, followed by a delete of the source, where all three
actions are performed atomically. The consistency maintenance step
allows the server to perform updates caused by the move, such as
updating all URIs other than the Request-URI which identify the
source resource, to point to the new destination resource.
Consequently, the Destination header MUST be present on all MOVE
methods and MUST follow all COPY requirements for the COPY part of
the MOVE method. All DAV compliant resources MUST support the MOVE
method. However, support for the MOVE method does not guarantee the
ability to move a resource to a particular destination.
For example, separate programs may actually control different sets of
resources on the same server. Therefore, it may not be possible to
move a resource within a namespace that appears to belong to the same
server.
If a resource exists at the destination, the destination resource
will be DELETEd as a side-effect of the MOVE operation, subject to
the restrictions of the Overwrite header.
8.9.1 MOVE for Properties
The behavior of properties on a MOVE, including the effects of the
propertybehavior XML element, MUST be the same as specified in
section 8.8.2.
8.9.2 MOVE for Collections
A MOVE with "Depth: infinity" instructs that the collection
identified by the Request-URI be moved to the URI specified in the
Destination header, and all resources identified by its internal
member URIs are to be moved to locations relative to it, recursively
through all levels of the collection hierarchy.
The MOVE method on a collection MUST act as if a "Depth: infinity"
header was used on it. A client MUST NOT submit a Depth header on a
MOVE on a collection with any value but "infinity".
Any headers included with MOVE MUST be applied in processing every
resource to be moved with the exception of the Destination header.
The behavior of the Destination header is the same as given for COPY
on collections.
RFC 2518 WEBDAV February 1999
When the MOVE method has completed processing it MUST have created a
consistent namespace at both the source and destination (see section
5.1 for the definition of namespace consistency). However, if an
error occurs while moving an internal collection, the server MUST NOT
move any resources identified by members of the failed collection
(i.e., the server must skip the error-causing subtree), as this would
create an inconsistent namespace. In this case, after detecting the
error, the move operation SHOULD try to finish as much of the
original move as possible (i.e., the server should still attempt to
move other subtrees and the resources identified by their members,
that are not descendents of an error-causing collection). So, for
example, if an infinite depth move is performed on collection /a/,
which contains collections /a/b/ and /a/c/, and an error occurs
moving /a/b/, an attempt should still be made to try moving /a/c/.
Similarly, after encountering an error moving a non-collection
resource as part of an infinite depth move, the server SHOULD try to
finish as much of the original move operation as possible.
If an error occurs with a resource other than the resource identified
in the Request-URI then the response MUST be a 207 (Multi-Status).
The 424 (Failed Dependency) status code SHOULD NOT be returned in the
207 (Multi-Status) response from a MOVE method. These errors can be
safely omitted because the client will know that the progeny of a
resource could not be moved when the client receives an error for the
parent. Additionally 201 (Created)/204 (No Content) responses SHOULD
NOT be returned as values in 207 (Multi-Status) responses from a
MOVE. These responses can be safely omitted because they are the
default success codes.
8.9.3 MOVE and the Overwrite Header
If a resource exists at the destination and the Overwrite header is
"T" then prior to performing the move the server MUST perform a
DELETE with "Depth: infinity" on the destination resource. If the
Overwrite header is set to "F" then the operation will fail.
8.9.4 Status Codes
201 (Created) - The source resource was successfully moved, and a new
resource was created at the destination.
204 (No Content) - The source resource was successfully moved to a
=24= |