[30] [DFN[[CODE(HTTP)@en[[[MOVE]]]]]] [[メソッド]]は、[[対象資源]]を他の [[URL]]
へと移動させるものです。

* 仕様書

[REFS[
- [1] [CITE@en[RFC 4918 - HTTP Extensions for Web Distributed Authoring and Versioning (WebDAV)]] ([TIME[2014-09-21 17:04:59 +09:00]] 版) <http://tools.ietf.org/html/rfc4918#section-7>
- [3] [CITE@en[RFC 4918 - HTTP Extensions for Web Distributed Authoring and Versioning (WebDAV)]] ([TIME[2014-09-21 17:04:59 +09:00]] 版) <http://tools.ietf.org/html/rfc4918#section-7.6>
- [7] [CITE@en[RFC 4918 - HTTP Extensions for Web Distributed Authoring and Versioning (WebDAV)]] ([TIME[2014-09-21 17:04:59 +09:00]] 版) <http://tools.ietf.org/html/rfc4918#section-9.8>
- [8] '''[CITE@en[RFC 4918 - HTTP Extensions for Web Distributed Authoring and Versioning (WebDAV)]] ([TIME[2014-09-21 17:04:59 +09:00]] 版) <http://tools.ietf.org/html/rfc4918#section-9.9>'''
- [31] [CITE@en[RFC 4918 - HTTP Extensions for Web Distributed Authoring and Versioning (WebDAV)]] ([TIME[2014-09-21 17:04:59 +09:00]] 版) <http://tools.ietf.org/html/rfc4918#section-10.6>
- [33] [CITE@en[RFC 4918 - HTTP Extensions for Web Distributed Authoring and Versioning (WebDAV)]] ([TIME[2014-09-21 17:04:59 +09:00]] 版) <http://tools.ietf.org/html/rfc4918#section-12>
- [42] [CITE@en[RFC 4918 - HTTP Extensions for Web Distributed Authoring and Versioning (WebDAV)]] ([TIME[2014-09-21 17:04:59 +09:00]] 版) <http://tools.ietf.org/html/rfc4918#page-100>
- [43] [CITE@en[RFC 4918 - HTTP Extensions for Web Distributed Authoring and Versioning (WebDAV)]] ([TIME[2014-09-21 17:04:59 +09:00]] 版) <http://tools.ietf.org/html/rfc4918#page-100>
]REFS]

* 意味

[17] [CODE(HTTP)@en[[[MOVE]]]] [[メソッド]]は、
[[資源]]を複製 ([CODE(HTTP)@en[[[COPY]]]] [[メソッド]]相当) し、
一貫性維持処理を行い、
元の[[資源]]を削除する一連の動作を単一の操作として実行することを求めるものです [SRC[>>8]]。

[16] ここで一貫性維持処理とは、
移動に伴い発生する更新処理で、
元の[[資源]]を識別する[[要求URL]]以外の [[URL]] をすべて新しい[[資源]]を指すように変更するものです [SRC[>>8]]。

[13] [[安全なメソッド]]ではありませんが、[[冪等メソッド]]です [SRC[>>8]]。

[2] [[書き込みロック]]の適用対象となります [SRC[>>1]]。

* 構文

[9] [CODE(HTTP)@en[[[Destination:]]]] [[ヘッダー]]を指定しなければ[['''なりません''']] [SRC[>>7, >>8]]。

[23] [[WebDAV]] [[コレクション]]においては、 [CODE(HTTP)@en[[[Depth:]] [[inifinity]]]]
以外の値を指定しては[['''なりません''']] [SRC[>>8]]。

* 処理

[11] [[WebDAV]] に従う[[資源]]は [CODE(HTTP)@en[[[MOVE]]]] 
[[メソッド]]に対応しなければ[['''なりません''']]。
しかし[[資源]]を移動できる保証はありません。 [SRC[>>8]]

[EG[
[12] 例えば同じ[[鯖]]にみえても、[[資源]]によって別の[[プログラム]]により制御されているかもしれません [SRC[>>8]]。
]EG]

[40] 終点資源が異なるシステムなどの理由で移動できない時は、
[CODE(HTTP)[[[502]]]] [[応答]]を返すことができます [SRC[>>8]]。

[37] 始点と終点が同じ[[資源]]だった場合には、 [CODE(HTTP)[[[403]]]] 
[[応答]]を返すことができます [SRC[>>8]]。

[38] 終点資源を作る前に中間の[[コレクション]]をいくつか作らないといけないときには、
[CODE(HTTP)[[[409]]]] [[応答]]を返すことができます。
[[WebDAV]] [[鯖]]は中間の[[コレクション]]を自動的に作っては[['''なりません''']]。 [SRC[>>8]]

[10] [[要求URL]]によって識別される[[資源]]が[RUBYB[始点]@en[source]]、
[CODE(HTTP)@en[[[Destination:]]]] [[ヘッダー]]の [[URL]] によって識別される[[資源]]が[RUBYB[終点]@en[destination]]です [SRC[>>7, >>8]]。

[22] 始点資源が [[WebDAV]] [[コレクション]]の場合、[[要求]]に
[CODE(HTTP)@en[[[Depth:]] [[infinity]]]] が指定されたかのように処理しなければ[['''なりません''']] [SRC[>>8]]。

[21] 始点資源が [[WebDAV]] [[コレクション]]の場合、
[CODE(HTTP)@en[[[Depth:]] [[infinity]]]] は始点資源を終点に移動すると共に、
その[[内部メンバーURL]]をその相対的な位置へと
([[コレクション]]階層すべてにわたり) 再帰的に移動します [SRC[>>8]]。

[15] 終点に既に[[資源]]が存在していれば、 [CODE(HTTP)@en[[[Overwrite:]] [[T]]]]
の場合には [CODE(HTTP)@en[[[DELETE]]]] [[メソッド]]で [CODE(HTTP)@en[[[Depth:]] [[inifinity]]]]
が指定された場合のように終点資源を削除しなければ[['''なりません''']]。 [SRC[>>8]]

[26] 終点に既に[[資源]]が存在しており、 [CODE(HTTP)@en[[[Overwrite:]] [[F]]]]
の場合には、 [CODE(HTTP)[[[412]]]] [[応答]]を返して[[要求]]の処理は失敗しなければ[['''なりません''']] [SRC[>>8, >>31]]。

;; [32] [CODE(HTTP)@en[[[Overwrite:]]]] [[ヘッダー]]が省略された場合の既定値は
[CODE(HTTP)[[[T]]]] です [SRC[>>31]]。

[24] [[要求]]の [CODE(HTTP)@en[[[Destination:]]]] 以外の[[ヘッダー]]は、
複製する各[[資源]]に対して適用しなければ[['''なりません''']] [SRC[>>7, >>8]]。

[25] [[コレクション]]の[[メンバー]]の移動時には、 [CODE(HTTP)@en[[[Destination:]]]]
[[ヘッダー]]の [[URL]] 自体ではなく、[[コレクション]]の階層内の位置に応じた値を使います 
[SRC[>>7, >>8]]。

[27] [[WebDAV]] [[コレクション]]の移動完了後には始点および終点において[[一貫したURL名前空間]]を作っていなければ[['''なりません''']]。
内部の[[コレクション]]の移動中にエラーが発生した時は、
その[[コレクション]]の[[メンバー]]の[[資源]]を移動しては[['''なりません''']]
(つまりその[[部分木]]を飛ばすこととなります)。それによって名前空間が一貫しなくなることがあります。
しかしエラーの検出後にも元の移動操作をできる限り完了させようと試みる[['''べきです''']]
(エラーになっていない[[部分木]]は複製しようと試みるべきです)。
また[[コレクション]]以外の[[資源]]の複製でエラーが発生した時も、
できるだけ移動するよう試みる[['''べきです''']]。 [SRC[>>8]]

[18] [[生特性]]は[[資源]]と共に移動して新しい[[資源]]の[[特性]]となる[['''べきです''']]が、
必ずしも同じ値である必要はありません。値の存在・不存在が意味を持つ場合には、
移動後に[[特性]]が存在しなくなることもあり得ます。 [SRC[>>8]]
[[生特性]]が移動によって元通り機能しなくなるであろう場合には、
[[要求]]の処理を失敗して [CODE(HTTP)[[[409]]]] [[応答]]で[[事前条件符号]]
[CODE(HTTP)[[[preserved-live-properties]]]] を返しても構いません [SRC[>>8, >>43]]。
[[資源]]の作成時の[[生特性]]をすべてリセットするのは適切ではありません [SRC[>>8]]。

[EG[
[19] 例えば [CODE(URI)@en[[[DAV:creationdate]]]] は元の値のままとするべきです [SRC[>>8]]。
]EG]

;; [41] 各[[特性]]の項も参照。

[20] [[死特性]]は[[資源]]と共に移動しなければ[['''なりません''']] [SRC[>>8]]。

[39] 始点資源か終点資源が[[ロック]]されている場合には、 [CODE(HTTP)[[[423]]]]
[[応答]]を返すことができます。その場合[[事前条件符号]]
[CODE@en[[[lock-token-submitted]]]] [SRC[>>42]] を含める[['''べきです''']]。 [SRC[>>8]]

[4] 移動元が[[書き込みロック]]されていても、この[[ロック]]は移動しては[['''なりません''']] [SRC[>>3]]。

;; [5] 移動先が[[コレクション]]により間接的に[[ロック]]されていれば、それが適用されるようになります。

;; [6] 移動元の[[ロック]]はそのまま存在しなくなった[[資源]]に適用され続けるのでしょうか?

[34] 移動に成功して新しい[[資源]]が作成された際には、 [CODE(HTTP)[[[201]]]]
[[応答]]を返します [SRC[>>8]]。
[CODE(HTTP)[[[3xx]]]] を返しては[['''なりません''']] [SRC[>>33]]。

[35] 移動に成功して既存の [[URL]] に書き込まれた際には、 [CODE(HTTP)[[[204]]]]
[[応答]]を返します [SRC[>>8]]。

[28] [[WebDAV]] [[コレクション]]の移動中に[[要求URL]]以外の移動でエラーが発生した場合には、
[CODE(HTTP)[[[207]]]] [[応答]]により、失敗した[[資源]]の [[URL]]
とエラーを記述して返さなければ[['''なりません''']] [SRC[>>8]]。

[36] いくつかの[[資源]]が[[ロック]]により移動できなかったなら、
[CODE(HTTP)[[[207]]]] [[応答]]内で [CODE(HTTP)[[[423]]]] を使うことができます [SRC[>>8]]。

[29] [CODE(HTTP)[[[207]]]] [[応答]]内では [CODE(HTTP)[[[424]]]] や
[CODE(HTTP)[[[201]]]] は使う[['''べきではありません''']] [SRC[>>8]]。

[14] [[応答]]は[[キャッシュ不可能]]です [SRC[>>8]]。

* 歴史

[49] [[RFC 2518]] では [CODE(XMLe)@en[[[propertybehavior]]]] [[要素]] [SRC[>>48]]
を[[要求]]の [[payload body]] の[[根要素]]として使っていました。
[[RFC 4918]] では削除されています。

[REFS[
- [48] [CITE@en[RFC 2518 - HTTP Extensions for Distributed Authoring -- WEBDAV]] ([TIME[2014-09-14 13:14:29 +09:00]] 版) <http://tools.ietf.org/html/rfc2518#section-12.12>
]REFS]

[FIG(quote)[
[FIGCAPTION[
[44] [CITE@en[REST API]]
( ([TIME[2016-02-27 07:16:28 +09:00]]))
<http://quasar-analytics.org/docs/restapi/>
]FIGCAPTION]

> REQUEST
> MOVE http://localhost:20223/data/fs/sample/data/SampleJSON
> Headers:
>   Destination: /sample/data/SampleJSON2
> RESPONSE
> Status code 200 if successful. No response body.

]FIG]


[FIG(quote)[
[FIGCAPTION[
[45] [CITE[RESTful HTTP API - Fedora 4.0 Documentation - DuraSpace Wiki]]
([TIME[2017-03-02 23:34:07 +09:00]])
<https://wiki.duraspace.org/display/FEDORA40/RESTful+HTTP+API>
]FIGCAPTION]

> MOVE  Move a resource (and its subtree) to a new location

]FIG]


[46] [CITE@en[RFC 8144 - Use of the Prefer Header Field in Web Distributed Authoring and Versioning (WebDAV)]]
([TIME[2017-04-19 23:22:44 +09:00]])
<https://tools.ietf.org/html/rfc8144#section-3.1>

[47] [CITE@en[RFC 3253 - Versioning Extensions to WebDAV (Web Distributed Authoring and Versioning)]]
([TIME[2017-09-17 18:19:04 +09:00]])
<https://tools.ietf.org/html/rfc3253#section-3.15>

[50] [CITE@en[RFC 3253 - Versioning Extensions to WebDAV (Web Distributed Authoring and Versioning)]]
([TIME[2017-09-17 18:19:04 +09:00]])
<https://tools.ietf.org/html/rfc3253#section-5.8>

[51] [CITE@en[RFC 3253 - Versioning Extensions to WebDAV (Web Distributed Authoring and Versioning)]]
([TIME[2017-09-17 18:19:04 +09:00]])
<https://tools.ietf.org/html/rfc3253#section-6.6>

[52] [CITE@en[RFC 3253 - Versioning Extensions to WebDAV (Web Distributed Authoring and Versioning)]]
([TIME[2017-09-17 18:19:04 +09:00]])
<https://tools.ietf.org/html/rfc3253#section-9.7>

[53] [CITE@en[RFC 3253 - Versioning Extensions to WebDAV (Web Distributed Authoring and Versioning)]]
([TIME[2017-09-17 18:19:04 +09:00]])
<https://tools.ietf.org/html/rfc3253#section-13.9>

[54] [CITE@en[RFC 3253 - Versioning Extensions to WebDAV (Web Distributed Authoring and Versioning)]]
([TIME[2017-09-17 18:19:04 +09:00]])
<https://tools.ietf.org/html/rfc3253#section-14.7>

[55] [CITE@en[RFC 3744 - Web Distributed Authoring and Versioning (WebDAV) Access Control Protocol]]
([TIME[2017-09-24 17:45:41 +09:00]])
<https://tools.ietf.org/html/rfc3744#section-7.3>

[56] [CITE@en[RFC 3744 - Web Distributed Authoring and Versioning (WebDAV) Access Control Protocol]]
([TIME[2017-09-24 17:45:41 +09:00]])
<https://tools.ietf.org/html/rfc3744#section-7.4>

[57] [CITE@en[RFC 4791 - Calendaring Extensions to WebDAV (CalDAV)]]
([TIME[2017-09-24 16:22:36 +09:00]])
<https://tools.ietf.org/html/rfc4791#section-5.3.2.1>

[58] [CITE@en[RFC 5842 - Binding Extensions to Web Distributed Authoring and Versioning (WebDAV)]]
([TIME[2017-09-30 00:47:40 +09:00]])
<https://tools.ietf.org/html/rfc5842#section-2.5>