COPY

要求メソッド COPY (HTTP)

[50] COPY は、資源を複製することを求める要求メソッドです。

仕様書

意味

[7] COPY メソッドは、要求URLによって識別される資源の複製を Destination: ヘッダーで識別される URL資源に複製するものです >>6

[13] 安全なメソッドではありませんが、冪等メソッドです >>6

[2] 書き込みロックの適用対象となります >>1

構文

[8] Destination: ヘッダーを指定しなければなりません >>6

[20] クライアントWebDAV コレクションにおいて Depth: 0Depth: infinity を指定できます >>6

[33] 終点に既に資源が存在する場合、上書きするかエラーとするかは Overwrite: ヘッダーに依存します。 なお上書きする場合、元の資源が削除されて新しい資源が作成される形になるか、 一部の生特性を保持したまま上書きするかは定かではありません (>>31)。 確実に生特性をリセットしたいときは、 DELETE してから COPY するべきです >>6

処理

[10] 要求URLによって識別される資源始点 (source) Destination: ヘッダーURL によって識別される資源終点 (destination) です >>6

[9] 正確な動作は始点となる資源に依存します >>6

[11] WebDAV に従う資源COPY メソッドに対応しなければなりません。 しかし資源を複製できる保証はありません。 >>6

[12] 例えば同じにみえても、資源によって別のプログラムにより制御されているかもしれません >>6

[40] 終点資源が異なるシステムなどの理由で複製できない時は、 502 応答を返すことができます >>6

[37] 始点と終点が同じ資源だった場合には、 403 応答を返すことができます >>6

[38] 終点資源を作る前に中間のコレクションをいくつか作らないといけないときには、 409 応答を返すことができます。 WebDAV は中間のコレクションを自動的に作ってはなりません>>6

[15] 始点が WebDAV に従う資源であり、コレクションでない場合、 始点資源とできるだけ近い状態と動作の資源を終点に作ります。 ただし始点と終点でが管理できる範囲を超えて環境に違いがあるかもしれませんから、 完全に複製することはできないかもしれません。 完了後の一方に対する変更は他方には適用されない状態になります。 >>6

[18] 終点が資源写像されていない URL だった場合は、 PUT 要求と同様にして新しい資源を作成します。 DAV:creationdate など資源の作成に関わる生特性も、 適切に設定するべき (should) です。 >>6

[19] WebDAV コレクションにおいて Depth: 0Depth: infinity に対応しなければなりません >>6Depth: ヘッダーが指定されなかった場合は、 infinity として扱わなければなりません >>6

[23] WebDAV コレクションDepth: 0 で複製する場合、コレクション自体と特性は複製しますが、 内部メンバーURLで識別される資源は複製しません >>6

[21] WebDAV コレクションDepth: infinity で複製する場合、始点資源と内部メンバーを終点資源とそれに対する相対的な位置へとすべてのコレクション階層にわたって複製します。 ただし /A/ から /A/B/ へといったような複製は注意して扱わないと無限ループになってしまいます。 >>6

[22] 無限ループになってはならないとはされていませんが、 常識的には避けるように実装するべきでしょうか。

[24] 要求Destination: 以外のヘッダーは、 複製する各資源に対して適用しなければなりません >>6

[25] コレクションメンバーの複製時には、 Destination: ヘッダーURL 自体ではなく、コレクションの階層内の位置に応じた値を使います >>6

[26] 例えば http://example.com/a/ が始点で http://example.com/b/ が終点なら、 http://example.com/a/c/dhtp://example.com/b/c/d へと複製します >>6

[27] WebDAV コレクションの複製完了後には終点において一貫したURL名前空間を作っていなければなりません。 内部のコレクションの複製中にエラーが発生した時は、 そのコレクションメンバー資源を複製してはなりません (つまりその部分木を飛ばすこととなります)。それによって名前空間が一貫しなくなることがあります。 しかしエラーの検出後にも元の複製操作をできる限り完了させようと試みるべきです (エラーになっていない部分木は複製しようと試みるべきです)。 またコレクション以外の資源の複製でエラーが発生した時も、 できるだけ複製するよう試みるべきです>>6

[16] 始点資源の死特性はすべて終点資源に複製するべきです。 始点資源の生特性も同様に動作する終点資源の生特性として複製するべきですが、 必ずしも同じ値でなくても構いません。生特性死特性に変換するべきではありません>>6 生特性を終点資源において同じ動作とできなかった時には、状態符号 409事後条件符号 preserved-live-properties を使うことができます >>47

[17] なお、存在しないことが意味を持つ生特性は終点資源には存在しない状態になることもあります >>6
[45]生特性の項も参照。

[30] 要求Overwrite: F が含まれている場合、 終点の URL資源が存在する場合には、 複製は失敗しなければなりません >>6, >>42。 この場合 412 応答を返さなければなりません >>6, >>42

[43] Overwrite: ヘッダーが省略された場合の既定値は T です >>42

[31] 終点資源を上書きする場合には、その具体的な動作は種々の要因により変わり得ます。 複製の前に元の終点資源を削除することもできますし、 生特性を保持しつつその場で上書きすることもできます。 >>6

[52] RFC 3253RFC 2518 の明確化と称して、 既存の資源を削除するのではなく、上書きするのである、 この違いは版管理に影響する >>51 と述べていましたが、 RFC 4918 はそれとは異なる立場を取っているようです。

[32] コレクションを上書きする場合には、終点資源のメンバーは始点資源のメンバーに相当するもののみでなければなりません。 元々終点のコレクションメンバーがあっても、それを併合する形となってはなりません。 >>6

[39] 終点資源がロックされている場合には、 423 応答を返すことができます。その場合事前条件符号 lock-token-submitted >>46 を含めるべきです>>6

[4] WebDAV に従う始点の資源が直接書き込みロックされていても、 ロックは複製してはなりません >>3

[5] 複製先のコレクションロックされていれば、 複製後にそれによって間接的にロック状態となることはあります。

[34] 複製に成功して新しい資源が作成された際には、 201 応答を返します >>63xx を返してはなりません >>44

[35] 複製に成功して既存の終点資源に書き込まれた際には、 204 応答を返します >>6

[28] WebDAV コレクションの複製中に要求URL以外の複製でエラーが発生した場合には、 207 応答により、失敗した資源URL とエラーを記述して返さなければなりません >>6

[36] いくつかの資源ロックにより複製できなかったなら、 207 応答内で 423 を使うことができます >>6

[29] 207 応答内では 424201 は使うべきではありません >>6

[41] ストレージ容量が理由で複製できない時には、 507 応答を返すことができます >>6

[14] 応答キャッシュ不可能です >>6

歴史

[49] RFC 2518 では propertybehavior 要素 >>48要求payload body根要素として使っていました。 RFC 4918 では削除されています。

[53] RESTful HTTP API - Fedora 4.0 Documentation - DuraSpace Wiki () <https://wiki.duraspace.org/display/FEDORA40/RESTful+HTTP+API>

COPY Copy a resource (and its subtree) to a new location

[54] RFC 8144 - Use of the Prefer Header Field in Web Distributed Authoring and Versioning (WebDAV) () <https://tools.ietf.org/html/rfc8144#section-3.1>

[55] RFC 3253 - Versioning Extensions to WebDAV (Web Distributed Authoring and Versioning) () <https://tools.ietf.org/html/rfc3253#section-3.14>

[56] RFC 3253 - Versioning Extensions to WebDAV (Web Distributed Authoring and Versioning) () <https://tools.ietf.org/html/rfc3253#section-5.7>

[57] RFC 3253 - Versioning Extensions to WebDAV (Web Distributed Authoring and Versioning) () <https://tools.ietf.org/html/rfc3253#section-8.7>

[58] RFC 3253 - Versioning Extensions to WebDAV (Web Distributed Authoring and Versioning) () <https://tools.ietf.org/html/rfc3253#section-9.6>

[59] RFC 3253 - Versioning Extensions to WebDAV (Web Distributed Authoring and Versioning) () <https://tools.ietf.org/html/rfc3253#section-12.10>

[60] RFC 3253 - Versioning Extensions to WebDAV (Web Distributed Authoring and Versioning) () <https://tools.ietf.org/html/rfc3253#section-14.6>

[61] RFC 4791 - Calendaring Extensions to WebDAV (CalDAV) () <https://tools.ietf.org/html/rfc4791#section-5.3.2.1>