[24] [DFN[[CODE(HTTP)@en[[[Timeout:]]]]]] [[ヘッダー]]は、
[[ロックタイムアウト]]の長さを指定するものです。

* 仕様書

[REFS[
- [5] [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-6.6>
- [12] [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.7>
- [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.10>
- [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-10.7>'''
- [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-14.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-14.29>
- [84] [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-18>
- [3] [CITE[UPnP Device Architecture 2.0]] ([TIME[2014-09-05 02:24:48 +09:00]] 版) <http://upnp.org/specs/arch/UPnP-arch-DeviceArchitecture-v2.0.pdf#page=94>
]REFS]

* 構文

[18] [CODE(HTTP)@en[[[Timeout:]]]] [[ヘッダー]]の値は、1つ以上の値の[[リスト]]
([CODE(HTTP)[#]]) です [SRC[>>17]]。

[FIG(railroad)[
= 値
= *
== [[OWS]]
== [CODE(HTTP)[[[,]]]]
== [[OWS]]
== 値
]FIG]

;; [25] 複数の値を指定できますが、その意味や処理方法は明記されていません。

[19] 値は、 [CODE(HTTP)[[[Second-]]]] から始まる1つ以上の[[ASCII数字]]の列または
[CODE(HTTP)@en[[[Infinite]]]] です。[[大文字・小文字不区別]]です。 [SRC[>>17]]

[FIG(railroad)[
= |
== =
=== [CODE(HTTP)[[[Second-]]]]
=== +
==== [[ASCII数字]]
== [CODE(HTTP)[[[Infinite]]]]
]FIG]

[20] [DFN[[CODE(HTTP)[[[Second-]]]]]] から始まる値は、
[[ロック]]している[[秒]]数を表し、その経過後には自動的に[[ロック]]を削除するべきであることを示します [SRC[>>17]]。
2[SUP[32]] - 1 よりも大きな値であっては[['''なりません''']] [SRC[>>17]]。

[22] [DFN[[CODE(HTTP)@en[[[Infinite]]]]]] は、[[ロック]]を自動的に削除するべきでないことを示します。

[23] [[UPnP 2.0]] では [CODE(HTTP)[[[Infinite]]]] は禁止されています [SRC[>>3]]。

* 文脈

[13] [[クライアント]]は、 [CODE(HTTP)@en[[[LOCK]]]] [[要求]]に
[CODE(HTTP)@en[[[Timeout:]]]] [[ヘッダー]]を含めることで希望する[[ロックタイムアウト]]を指定できます [SRC[>>17, >>5, >>12, >>35]]。

;; [CODE(HTTP)@en[[[LOCK]]]] も参照。

[4] [CODE(HTTP)@en[[[SUBSCRIBE]]]] [[要求]]やそれに対する
[CODE(HTTP)[[[200]]]] [[応答]]でも使うことができます [SRC[>>3]]。

[21] [[クライアント]]は、それ以外の[[要求]]に含めては[['''なりません''']] [SRC[>>17]]。

* ロックタイムアウト

[6] [[ロック]]は[RUBYB[[[タイムアウト]]]@en[timeout]]を持つことができます [SRC[>>5]]。

[14] 最終的には[[鯖]]が実際の[[タイムアウト]]の値を決定します。
[[鯖]]は [CODE(HTTP)@en[[[Timeout:]]]] [[ヘッダー]]を無視して構いません。 [SRC[>>5, >>12, >>17]]

;; [10] [[鯖]]は、[[クライアント]]が指定した値によく注意しておくと[RUBYB[良い]@en[advised]]です。
例えば[[アプレット]]は突然停止するかもしれないので小さな値を指定するでしょうし、
文書管理システムは長い値かもしれません。 [SRC[>>5]]

[85] [[WebDAV]] [[適合クラス]] 2 に対応する[[資源]]は、
[CODE(HTTP)@en[[[Timeout:]]]] [[ヘッダー]]に対応する[['''べきです''']] [SRC[>>84]]。

;; [29] どの程度尊重すれば対応といえるのかは不明です。

[7] [[タイムアウト]]は、[[ロック]]の満期までの[[秒]]数で指定します [SRC[>>5]]。

[8] [[タイムアウト]]の計測は[[ロック]]の更新の要求が成功したらリセットしなければ[['''なりません''']]。
それ以外ではリセットする[['''べきではありません''']]。 [SRC[>>5]]

[15] [[ロック]]の更新の[[要求]]に対する[[応答]]では、新しいタイムアウトの値を通知します [SRC[>>12]]。

[9] [[タイムアウト]]に達したら、当該[[ロック]]を [CODE(HTTP)@en[[[UNLOCK]]]]
[[要求]]が実行された場合と同様にして削除する[['''べきです''']] [SRC[>>5]]。

[11] [[クライアント]]は、[[タイムアウト]]が経過したからだけの理由で[[ロック]]が直ちに削除されたと仮定しては[['''なりません''']]。
逆に[[タイムアウト]]が経過していないからといって[[ロック]]がまだ存在していると仮定しては[['''なりません''']]。
[[クライアント]]はいつでも[[ロック]]が削除され得ると仮定しなければ[['''なりません''']]。 [SRC[>>5]]

[16] [[クライアント]]は、[[ロック]]の更新の[[要求]]がエラーとなった時、
[[ロック]]が更新されたと仮定しては[['''なりません''']] [SRC[>>12]]。

* [CODE(XMLe)@en[timeout]] 要素 (WebDAV)

[27] [CODE(URI)@en[[[DAV:]]]] [[名前空間]]の [DFN[[CODE(XMLe)@en[[[timeout]]]]]]
[[要素]]は、[[ロック]]が[[満期]]となるまでの残りの[[秒]]数を表します [SRC[>>26]]。

[28] [[内容]]は [CODE(HTTP)@en[[[Timeout:]]]] で指定できる個々の値 (>>19)
と同じ[[文字データ]]です。 ([[リスト]]にはできず、1つだけしか指定できません。) [SRC[>>26]]

[36] [CODE(XMLe)@en[[[timeout]]]] [[要素]]は
[CODE(XMLe)@en[[[activelock]]]] [[要素]]の[[子要素]]として使うことができます [SRC[>>37]]。

* 歴史

[1] [CITE@en[draft-cohen-gena-client-00 - General Event Notification Architecture Base: Client to Arbiter]]
( ([TIME[2014-06-15 05:42:57 +09:00]] 版))
<http://tools.ietf.org/html/draft-cohen-gena-client-00#page-7>

[2] [CITE@en[draft-cohen-gena-client-00 - General Event Notification Architecture Base: Client to Arbiter]]
( ([TIME[2014-06-15 05:42:57 +09:00]] 版))
<http://tools.ietf.org/html/draft-cohen-gena-client-00#section-8.4>

[34] [[RFC 2518]] には拡張のための構文も含まれていましたが、
[[RFC 4918]] で削除されています [SRC[>>33]]。

[30] [[IANA登録簿]]は [[RFC 4918]] が出典に更新されています [SRC[>>31]]。

[REFS[
- [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-21.3.7>
- [33] [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-9.8>
]REFS]