[50] COPY
は、資源を複製することを求める要求メソッドです。
[7] COPY
メソッドは、要求URLによって識別される資源の複製を
Destination:
ヘッダーで識別される URL の資源に複製するものです >>6。
[8] Destination:
ヘッダーを指定しなければなりません >>6。
[20] クライアントは WebDAV コレクションにおいて
Depth: 0
と Depth: infinity
を指定できます >>6。
[33] 終点に既に資源が存在する場合、上書きするかエラーとするかは
Overwrite:
ヘッダーに依存します。
なお上書きする場合、元の資源が削除されて新しい資源が作成される形になるか、
一部の生特性を保持したまま上書きするかは定かではありません (>>31)。
確実に生特性をリセットしたいときは、 DELETE
してから COPY
するべきです >>6。
[10] 要求URLによって識別される資源が始点、
Destination:
ヘッダーの URL によって識別される資源が終点です >>6。
[11] WebDAV に従う資源は COPY
メソッドに対応しなければなりません。
しかし資源を複製できる保証はありません。 >>6
[40] 終点資源が異なるシステムなどの理由で複製できない時は、
502
応答を返すことができます >>6。
[37] 始点と終点が同じ資源だった場合には、 403
応答を返すことができます >>6。
[38] 終点資源を作る前に中間のコレクションをいくつか作らないといけないときには、
409
応答を返すことができます。
WebDAV 鯖は中間のコレクションを自動的に作ってはなりません。 >>6
[15] 始点が WebDAV に従う資源であり、コレクションでない場合、 始点資源とできるだけ近い状態と動作の資源を終点に作ります。 ただし始点と終点で鯖が管理できる範囲を超えて環境に違いがあるかもしれませんから、 完全に複製することはできないかもしれません。 完了後の一方に対する変更は他方には適用されない状態になります。 >>6
[18] 終点が資源に写像されていない URL だった場合は、
PUT
要求と同様にして新しい資源を作成します。
DAV:creationdate
など資源の作成に関わる生特性も、
適切に設定するべきです。 >>6
[19] 鯖は WebDAV コレクションにおいて
Depth: 0
と Depth: infinity
に対応しなければなりません >>6。
Depth:
ヘッダーが指定されなかった場合は、
infinity
として扱わなければなりません >>6。
[23] WebDAV コレクションを Depth: 0
で複製する場合、コレクション自体と特性は複製しますが、
内部メンバーURLで識別される資源は複製しません >>6。
[21] WebDAV コレクションを Depth: infinity
で複製する場合、始点資源と内部メンバーを終点資源とそれに対する相対的な位置へとすべてのコレクション階層にわたって複製します。
ただし /A/
から /A/B/
へといったような複製は注意して扱わないと無限ループになってしまいます。 >>6
[24] 要求の Destination:
以外のヘッダーは、
複製する各資源に対して適用しなければなりません >>6。
[25] コレクションのメンバーの複製時には、 Destination:
ヘッダーの URL 自体ではなく、コレクションの階層内の位置に応じた値を使います
>>6。
[26] 例えば http://example.com/a/
が始点で http://example.com/b/
が終点なら、 http://example.com/a/c/d
は htp://example.com/b/c/d
へと複製します >>6。
[27] WebDAV コレクションの複製完了後には終点において一貫したURL名前空間を作っていなければなりません。 内部のコレクションの複製中にエラーが発生した時は、 そのコレクションのメンバーの資源を複製してはなりません (つまりその部分木を飛ばすこととなります)。それによって名前空間が一貫しなくなることがあります。 しかしエラーの検出後にも元の複製操作をできる限り完了させようと試みるべきです (エラーになっていない部分木は複製しようと試みるべきです)。 またコレクション以外の資源の複製でエラーが発生した時も、 できるだけ複製するよう試みるべきです。 >>6
[16] 始点資源の死特性はすべて終点資源に複製するべきです。
始点資源の生特性も同様に動作する終点資源の生特性として複製するべきですが、
必ずしも同じ値でなくても構いません。生特性を死特性に変換するべきではありません。 >>6
生特性を終点資源において同じ動作とできなかった時には、状態符号
409
と事後条件符号 preserved-live-properties
を使うことができます >>47。
[30] 要求に Overwrite: F
が含まれている場合、
終点の URL に資源が存在する場合には、
複製は失敗しなければなりません >>6, >>42。
この場合 412
応答を返さなければなりません >>6, >>42。
[31] 終点資源を上書きする場合には、その具体的な動作は種々の要因により変わり得ます。 複製の前に元の終点資源を削除することもできますし、 生特性を保持しつつその場で上書きすることもできます。 >>6
[32] コレクションを上書きする場合には、終点資源のメンバーは始点資源のメンバーに相当するもののみでなければなりません。 元々終点のコレクションにメンバーがあっても、それを併合する形となってはなりません。 >>6
[39] 終点資源がロックされている場合には、 423
応答を返すことができます。その場合事前条件符号
lock-token-submitted
>>46 を含めるべきです。 >>6
[4] WebDAV に従う始点の資源が直接書き込みロックされていても、 ロックは複製してはなりません >>3。
[34] 複製に成功して新しい資源が作成された際には、 201
応答を返します >>6。
3xx
を返してはなりません >>44。
[35] 複製に成功して既存の終点資源に書き込まれた際には、 204
応答を返します >>6。
[28] WebDAV コレクションの複製中に要求URL以外の複製でエラーが発生した場合には、
207
応答により、失敗した資源の URL
とエラーを記述して返さなければなりません >>6。
[36] いくつかの資源がロックにより複製できなかったなら、
207
応答内で 423
を使うことができます >>6。
[29] 207
応答内では 424
や
201
は使うべきではありません >>6。
[49] RFC 2518 では propertybehavior
要素 >>48
を要求の payload body の根要素として使っていました。
RFC 4918 では削除されています。
[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>