[17] 
[DFN[[CODE[TTL:]]]]
は、
[[プッシュメッセージ]]の保持期間を示す
[[HTTPヘッダー]]です。

* 仕様書

[REFS[
- [1] [CITE@en[RFC 8030 - Generic Event Delivery Using HTTP Push]], [TIME[2020-03-09 00:13:33 +09:00]] <https://tools.ietf.org/html/rfc8030#section-5.2>
]REFS]

* 意味

[4] 
[CODE[TTL:]] [[ヘッダー値]]は、
[[プッシュサービス]]が[[プッシュメッセージ]]を保持するべき[[秒数]]を指定します。
[SRC[>>1 5.2.]]


[12] 
[[プッシュサービス]]は、
TTL
期間経過後、
[[プッシュメッセージ]]を[[利用者エージェント]]に配送しようとしては[MUST[なりません]]。
[SRC[>>1 5.2.]]

[13] 
[[プッシュサービス]]は、
[[アプリケーションサーバー]]から[[プッシュサービス]]への送信や、
[[プッシュサービス]]から[[利用者エージェント]]への送信にかかる時間を考慮する義務はありません。
[[アプリケーションサーバー]]は [CODE[TTL:]]
値決定にこうした要素を考慮する必要があります。
[SRC[>>1 5.2.]]


* 文脈

[2] [[プッシュメッセージ]]は、
短期間しか有意義でないこともありますし、
保管や転送の資源節約のこともあり、
有効期限が設けられています。
[SRC[>>1 5.2.]]

[3] [[Web Push]] [[アプリケーションサーバー]]は、
[[プッシュ資源]]への[[要求]]に
[CODE[TTL:]]
[[ヘッダー]]を含めなければ[MUST[なりません]]。
[SRC[>>1 5.2.]]

[10] 
[[プッシュサービス]]は、
要求されたより保持期間を短くする場合、
これを[[応答]]の
[CODE[TTL:]]
[[ヘッダー]]で示さなければ[MUST[なりません]]。
この場合値は要求された値[[以下]]でなければ[MUST[なりません]]。
[SRC[>>1 5.2.]]


* 構文

[5] 
[[ヘッダー値]]は、
1つ[[以上]]の[[ASCII数字]]です。
[SRC[>>1 5.2.]]

[FIG(railroad)[
= +
== [[ASCII数字]]
]FIG]

;; [18] [[デルタ秒]]と実質同じで、規定もほぼ同じですが、
なぜか独自の規定になっています。

* 処理

[8] 
[[プッシュサービス]]は、
[[プッシュ資源]]への[[要求]]に
[CODE[TTL:]]
[[ヘッダー]]がないとき、
[CODE[400]]
[[応答]]を返さなければ[MUST[なりません]]。
[SRC[>>1 5.2.]]


[6] [[ヘッダー値]]は、
[[秒]]単位の[[時間]]を[[非負整数]]で指定したものです。
受信者は、[[2進数]]で保持する場合、
最低31ビットの[[非負整数]]を扱える[[算術型]]を使う[SHOULD[べきです]]。
[SRC[>>1 5.2.]]
明記されていませんが、[[10進数]]で記述するもののようです。

[7] 
受信者は、扱える値より大きな値が指定されたときや、
以後の計算で[[桁溢れ]]するなら、
2[SUP[31]]
とみなさなければ[MUST[なりません]]。
[SRC[>>1 5.2.]]

[16] 
不適切な値のときや、複数の[[HTTPヘッダー]]が指定された時どう処理するべきか不明です。
仕様書に規定がありまえん。

[9] 
[[プッシュサービス]]は、
[[プッシュメッセージ]]の保持期間を指定よりも短くしても[MAY[構いません]]。
[SRC[>>1 5.2.]]

[11] 
[[プッシュサービス]]は、
処理中の誤差を鑑みて TTL 値を調整することができます。
例えば[[プッシュメッセージ]]をサーバー群間で配布するときに、
[[clock skew]] や伝播遅延で誤りが蓄積するかもしれません。
[SRC[>>1 5.2.]]

-*-*-

[14] 
値 [N[0]] の場合、
[[利用者エージェント]]が受信できる状態なら即座に配送されます。
そうでない場合は配送されずに捨てられます。
[SRC[>>1 5.2.]]

[15] 配送されても[[プッシュサービス]]はすぐに[[プッシュメッセージ]]を削除できるので、
[[利用者エージェント]]から受信肯定すら受け取れないかもしれず、
[[アプリケーションサーバー]]は[[肯定受領証を受信][受領証購読]]できる保証がありません。
[SRC[>>1 5.2.]]


* メモ