[2] [DFN[[CODE(HTTP)@en[[[Depth:]]]]]] [[ヘッダー]]は、操作の適用対象となる[[資源]]の階層の深さを指定するものです。

* 仕様書

[REFS[
- [21] [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.1>
- [26] [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.6>
- [29] [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>
- [35] [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>
- [37] [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.10>
- [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-10.2>'''
- [46] [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-14.1>
- [17] [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-14.4>
]REFS]

* 意味

[4] [CODE(HTTP)@en[[[Depth:]]]] [[ヘッダー]]は、[[内部メンバー]]を持つことがある[[資源]]についての操作で、
操作が適用される対象の深さを指定するものです [SRC[>>1]]。

[8] この[[ヘッダー]]は、定義上明示的に対応することになっている[[メソッド]]のみが対応しています [SRC[>>1]]。

[12] [[クライアント]]は、[[メンバー]]に対してどの順序で操作が適用されるかや、
[[原子的]]に実行されるかどうかについて、[[メソッド]]ごとに明示的に適宜されている場合を除き、
仮定しては[['''なりません''']] [SRC[>>1]]。

* 構文

[3] 値は、 [CODE(HTTP)[[[0]]]]、[CODE(HTTP)[[[1]]]]、[CODE(HTTP)@en[[[infinity]]]]
のいずれかです。[[大文字・小文字不区別]]です [SRC[>>1]]。

[FIG(railroad)[
= |
== [CODE(HTTP)[[[0]]]]
== [CODE(HTTP)[[[1]]]]
== [CODE(HTTP)@en[[[infinity]]]]
]FIG]

* 値

[5] [DFN[[CODE(HTTP)[[[0]]]]]] は、[[資源]]自体にのみ適用されることを示します [SRC[>>1]]。

[6] [DFN[[CODE(HTTP)[[[1]]]]]] は、[[資源]]とその[[内部メンバー]]のみに適用されることを示します [SRC[>>1]]。

[7] [DFN[[CODE(HTTP)@en[[[infinity]]]]]] は、[[資源]]とそのすべての[[メンバー]]に適用されることを示します
[SRC[>>1]]。

[10] [[要求メソッド]]によっては対応していない値もあります [SRC[>>1]]。

[23] [CODE(HTTP)@en[[[PROPFIND]]]] については、 [[WebDAV]] に従う[[資源]]は、
[CODE(HTTP)[[[0]]]] と [CODE(HTTP)[[[1]]]] に対応しなければ[['''ならず''']]、
[CODE(HTTP)@en[[[infinity]]]] にも対応する[['''べきです''']] [SRC[>>21]]。

[27] [CODE(HTTP)@en[[[DELETE]]]] [[要求]]では、 [CODE(HTTP)@en[[[infinity]]]]
以外を指定しては[['''なりません''']] [SRC[>>26]]。

[30] [CODE(HTTP)@en[[[COPY]]]] [[要求]]では、 [[WebDAV]] [[コレクション]]において
[CODE(HTTP)[[[0]]]] と [CODE(HTTP)@en[[[infinity]]]] を指定できます [SRC[>>29]]。

[36] [CODE(HTTP)@en[[[MOVE]]]] [[要求]]では、 [[WebDAV]] [[コレクション]]において
[CODE(HTTP)@en[[[infinity]]]] 以外は指定しては[['''なりません''']] [SRC[>>35]]。

[38] [CODE(HTTP)@en[[[LOCK]]]] [[要求]]では、 [CODE(HTTP)[[[0]]]] か
[CODE(HTTP)@en[[[infinity]]]] 以外は指定しては[['''なりません''']] [SRC[>>37]]。

* 既定値

[11] [[要求メソッド]]によっては [CODE(HTTP)@en[[[Depth:]]]] [[ヘッダー]]が指定されなかった場合の既定値もあります [SRC[>>1]]。

[24] [CODE(HTTP)@en[[[PROPFIND]]]] [[要求]] [SRC[>>21]] や
[CODE(HTTP)@en[[[LOCK]]]] [[要求]] [SRC[>>37]] では、 [CODE(HTTP)@en[[[infinity]]]]
が既定値です。

[28] [CODE(HTTP)@en[[[DELETE]]]] [SRC[>>26]] や
[CODE(HTTP)@en[[[MOVE]]]] [SRC[>>35]] では、常に [CODE(HTTP)@en[[[infinity]]]]
が指定されたとみなさなければ[['''なりません''']]。

[31] [CODE(HTTP)@en[[[COPY]]]] [[要求]]では、 [[WebDAV]] [[コレクション]]においては
[CODE(HTTP)@en[[[infinity]]]] が既定値です [SRC[>>29]]。

* 処理

[16] [[資源]]が[[内部メンバー]]を持たない場合には、 [CODE(HTTP)@en[[[Depth:]]]]
[[ヘッダー]]は無視しなければ[['''なりません''']] [SRC[>>1]]。

[9] [[メソッド]]にもよりますが、 [CODE(HTTP)@en[[[Depth:]]]] [[ヘッダー]]の指定に従いできるだけの処理を行い、
失敗した場合はどれが失敗したかを記載した[[応答]]を返すことになっています [SRC[>>1]]。

[EG[
[13] 例えば [CODE(HTTP)@en[[[COPY]]]] [[メソッド]]で 
[CODE(HTTP)@en[[[Depth:]] [[infinity]]]] が指定された場合には、できるだけ[[資源]]を複製しようと試み、
失敗したものの一覧を [CODE(HTTP)[[[207]]]] [[応答]]に含めます。
]EG]

[34] [CODE(HTTP)@en[[[COPY]]]] [[要求]]においては、 [[WebDAV]]
[[コレクション]]に関しては [CODE(HTTP)[[[0]]]] と [CODE(HTTP)@en[[[infinity]]]]
に対応しなければ[['''なりません''']] [SRC[>>29]]。

[25] [CODE(HTTP)@en[[[PROPFIND]]]] [[要求]]において [CODE(HTTP)@en[[[Depth:]] [[infinity]]]]
に対応しない場合、[[状態符号]] [CODE(HTTP)[[[403]]]] と[[事前条件符号]]
[CODE(HTTP)@en[[[propfind-finite-depth]]]] を返す[['''べきです''']] [SRC[>>6]]。

[39] [CODE(HTTP)@en[[[LOCK]]]] [[要求]]では、更新の[[要求]]の場合、
無視しなければ[['''なりません''']] [SRC[>>37]]。

;; 作成の場合は無視しません。

[14] 原則として [CODE(HTTP)@en[[[Depth:]]]] [[ヘッダー]]が含まれる[[要求]]の他の[[ヘッダー]]は[[対象資源]]のみに適用され、
[[メンバー]]には適用しては[['''なりません''']] [SRC[>>1]]。

* 文脈

[22] [CODE(HTTP)@en[[[PROPFIND]]]] [[要求]]は、 [CODE(HTTP)@en[[[Depth:]]]]
[[ヘッダー]]を含まなければ[['''なりません''']] [SRC[>>21]]。

* [CODE(XMLe)@en[depth]] 要素 (WebDAV)

[18] [CODE(URI)@en[[[DAV:]]]] [[名前空間]]の [DFN[[CODE(XMLe)@en[[[depth]]]]]] 
[[要素]]は、深さを表します [SRC[>>17]]。

[19] この[[要素]]の[[内容]]は、 [CODE(HTTP)[[[0]]]]、[CODE(HTTP)[[[1]]]]、
[CODE(HTTP)[[[infinity]]]] のいずれかの[[文字データ]]です [SRC[>>17]]。
[[大文字・小文字不区別]]とみられます。

[FIG(railroad)[
= |
== [CODE(HTTP)[[[0]]]]
== [CODE(HTTP)[[[1]]]]
== [CODE(HTTP)@en[[[infinity]]]]
]FIG]

[20] 値の意味は明記されていませんが、 [CODE(HTTP)@en[[[Depth:]]]] 
[[ヘッダー]]の同じ値と同義でしょう。

[47] [CODE(XMLe)@en[[[depth]]]] [[要素]]は [CODE(XMLe)@en[[[activelock]]]]
[[要素]]の[[子要素]]として必要です [SRC[>>46]]。

* 歴史

[33] [CODE(HTTP)@en[[[Depth:]]]] [[ヘッダー]]に関する
[[IANA登録簿]]は [[RFC 4918]] が出典に更新されています [SRC[>>32]]。

[REFS[
- [32] [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-21.3.1>
]REFS]

* 関連

[15] [CODE(HTTP)@en[[[Depth:]]]] で指定された範囲内の[[資源]]が[[ロック]]されていてそのままでは[[メソッド]]の処理に成功しない場合には、
[CODE(HTTP)@en[[[If:]]]] [[ヘッダー]]に適当な[[ロックトークン]]を含めなければ[['''なりません''']] [SRC[>>1]]。

[FIG(quote)[
[FIGCAPTION[
[40] [CITE@en[''''''[''''''MS-WDVSE'''''']'''''': Depth "noroot" Request Header Extension]]
([TIME[2015-07-01 16:24:49 +09:00]] 版)
<https://msdn.microsoft.com/en-us/library/cc250218.aspx>
]FIGCAPTION]

> 1,noroot
> The command applies to the next level of resources in the container but not to the container itself.
> infinity,noroot
> The command applies to all the resources in the container but not to the container itself.
> The noroot extension is present if the "1,noroot" value is set or if the "infinity,noroot" value is set.<3>

]FIG]


[41] [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#appendix-A>

[FIG(quote)[
[FIGCAPTION[
[42] [CITE@en[Depth Header]]
([TIME[2017-04-24 19:17:47 +09:00]])
<https://msdn.microsoft.com/en-us/library/aa563950.aspx>
]FIGCAPTION]

> Depth = "Depth" ":" ("0" | "1" | "1,noroot" | "infinity" | "infinity,noroot")
> Depth: 0 - The method is applied only to the resource.
> Depth: 1 - The method is applied to the resource and to its immediate children.
> Depth: 1,noroot - The method is applied only to resources immediately subordinate to the target Uniform Resource Identifier (URI) but the target resource itself is excluded. This value is only supported on the PROPFIND Method.
> Depth: infinity - The method is applied to the resource and to all of its children.
> Depth: infinity,noroot - The method is applied recursively to all resources subordinate to the target but the target resource itself is excluded. This value is supported on the DELETE Method, the BDELETE Method, the MOVE Method, the BMOVE Method, the COPY Method, the BCOPY Method, the PROPFIND Method, the LOCK Method, and the UNLOCK Method.

]FIG]


[43] [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-4>

[44] [CITE@EN-US[Issues List for Versioning Extensions to WebDAV (RFC 3253)]]
([TIME[2004-09-21 04:27:03 +09:00]])
<http://www.webdav.org/deltav/protocol/rfc3253-issues-list.htm>

[45] [CITE@en[RFC 4437 - Web Distributed Authoring and Versioning (WebDAV) Redirect Reference Resources]]
([TIME[2017-09-24 19:11:37 +09:00]])
<https://tools.ietf.org/html/rfc4437#section-8>

[48] [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-7.9>

[49] [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-7.1>