[2] [CODE(HTTP)@en[[[Prefer:]] [DFN[[[wait][Prefer: wait]]]]]] は、
[[クライアント]]が希望する[[応答]]を返すまでの最大待ち時間を指定するものです。

* 仕様書

[REFS[
- [1] [CITE@en[RFC 7240 - Prefer Header for HTTP]] ([TIME[2014-07-26 04:24:01 +09:00]] 版) <https://tools.ietf.org/html/rfc7240#section-4.3>
]REFS]

* 意味

[3] [CODE(HTTP)@en[wait][Prefer: wait]] は、[[要求]]を[[鯖]]が受信してから処理にかかる時間として[[クライアント]]が期待する[[上界]]を指定するものです [SRC[>>1]]。

;; [10] ただし[[鯖]]はそれに従う義務はありません [SRC[>>1]]。

[9] なお、[[鯖]]がこの指定に従った場合でも、更にそれに加えて[[ネットワーク]]の往復や[[中間器]]での処理の時間が加わることに注意が必要です [SRC[>>1]]。

* 文脈

[18] 
[[プッシュメッセージ購読]]で使えます。

* 構文

[6] [CODE(HTTP)@en[wait][Prefer: wait]] には[[デルタ秒]]の値を指定します。[[引数]]はありません。
[SRC[>>1]]

[FIG(railroad)[
= [[デルタ秒]]
]FIG]

;; [8] [CODE(HTTP)@en[[[Prefer:]]]] も参照。

[4] 値は、[[秒]]単位です [SRC[>>1]]。

* 処理

;; [7] [CODE(HTTP)@en[[[Prefer:]]]] も参照。

[5] [[応答]]の[[生成]]に指定された[[時間]]より長くかかる場合には、
[[鯖]]や[[串]]は、例えば [CODE(HTTP)[[[202]]]] [[応答]]を返して[[非同期的]]に処理を続けることができます
[SRC[>>1]]。

;; [11] [[クライアント]]は [CODE(HTTP)@en[[[Prefer:]] [[respond-async]], [[wait][Prefer: wait]]=...]]
と指定することで、時間がかかるときに[[非同期的]]に結果を返すことを明示的に求めることができます。
しかし [CODE(HTTP)@en[[[respond-async]]]] の有無に関わらず、[[鯖]]は[[非同期的]]に処理してもしなくても構いません。また、仕様書に例示されている [SRC[>>1]] ものの、
そのような処理が明確に要求されているわけではありませんから、
[CODE(HTTP)@en[wait][Prefer: wait]] を無視して直ちに [CODE(HTTP)[[[202]]]]
を返す実装もあり得ます。

;; [12] [[鯖]]は指定の時間で処理を終えられず、[[非同期的]]に継続することもできない場合、
[CODE(HTTP)@en[[[Prefer:]]]] の趣旨に沿うなら無視してそのまま処理を継続してから[[応答]]を返すべきと思われます。しかし仕様上は特にそれが要求されているわけではありませんし、
実装方針次第ではエラーを返して処理を中断することもあり得るでしょう。
[[鯖]]が [CODE(HTTP)@en[wait][Prefer: wait]] をどう処理するかの事前の知識なく無条件に指定するのは危険かもしれません。

* 実装

[16] 実装例があるのかどうかは不明です。

* 歴史

[REFS[
- [13] [CITE[OData Version 4.0 Part 1: Protocol Plus Errata 01]] ([TIME[2014-09-04 16:00:00 +09:00]] 版) <http://docs.oasis-open.org/odata/odata/v4.0/odata-v4.0-part1-protocol.html#_Toc399426737>
]REFS]

[14] [CITE@en[draft-thomson-http-nice-01 - Marking HTTP Requests as Unimportant]] ([TIME[2014-10-16 11:48:17 +09:00]] 版) <http://tools.ietf.org/html/draft-thomson-http-nice-01#section-2.3>

[15] [CITE@en[draft-thomson-webpush-http2-01 - Generic Event Delivery Using HTTP Push]] ([TIME[2014-10-09 10:00:59 +09:00]] 版) <http://tools.ietf.org/html/draft-thomson-webpush-http2-01#section-6>


[17] [CITE@en[RFC 8030 - Generic Event Delivery Using HTTP Push]]
([TIME[2018-12-30 18:12:18 +09:00]])
<https://tools.ietf.org/html/rfc8030#page-16>