* 仕様書

[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.4>
]REFS]

* 意味

[4] [[プッシュメッセージ]]の[RUBYB[話題][topic]]を表します。
話題は同じ[[プッシュメッセージ配送]]に属する[[プッシュメッセージ]]の関係を表すために使うもので、
それ以外の[[意味]]は有しません。
[SRC[>>1 5.4.]]

[2] 
同系列の古い[[プッシュメッセージ]]にかわる新しい[[プッシュメッセージ]]を配送する場合、
[[利用者エージェント]]に古い[[プッシュメッセージ]]がまだ配送されていないとき、
新しいもので古いものを置き換えて古い[[プッシュメッセージ]]の配送を抑制できます。
[SRC[>>1 5.4.]]

* 文脈

[14] [[プッシュ資源]]への[[要求]]に指定できます。

[15] 明確な規定がありませんが、指定無き時、話題なしとなります。
この場合他のどの[[プッシュメッセージ]]とも別の話題に属する扱いとなります。

* 構文

[5] [[プッシュメッセージ]]の話題を表す[[文字列]]です。
[[ヘッダー値]]は [[RFC 7230]]
[[字句][HTTP字句]]です。
[SRC[>>1 5.4.]]

[FIG(railroad)[
= [[字句][HTTP字句]]
]FIG]

;; [12] [[空文字列]]にはできません。

[6] 
[[Web Push]]
では更に制約があり、
[N[32]]
[[文字]][[以下]]の
[[RFC 4648]]
[[base64url]] [[字母]]でなければ[MUST[なりません]]
[SRC[>>1 5.4.]]。

;; [13] つまり1文字から32文字の[[ASCII英数字]]、[CODE[-]]、[CODE[_]] です。

;; [7] [[字母]]の制約のみであって、 [[base64url]] である必要はありません。



* 処理

[8] 
[[プッシュサービス]]は、
[[字母]]の制約 (>>6) 
に違反する[[要求]]の場合、
[CODE[400]]
[[応答]]を返さなければ[MUST[なりません]]
[SRC[>>1 5.4.]]。

[16] [[複数の値][# (HTTP)]]が指定された時の扱いは不明です。


[3] 
同じ [CODE[Topic:]] の[[プッシュメッセージ]]は削除されます。
[SRC[>>1 5.4.]]

;; [9] 古い[[プッシュメッセージ]]の中身が置き換えられるのではなく、
通常通り新しい[[プッシュメッセージ]]が作成され、
それと同時に古いものは削除されます。

[10] [[利用者エージェント]]に配送済みの古い[[プッシュメッセージ]]の受信肯定があった場合、
その[[配送受領証][受領証購読]]は抑制する[SHOULD[べきです]]。
[SRC[>>1 5.4.]]

[11] 
[CODE[Topic:]]
[[ヘッダー値]]は[[利用者エージェント]]に[[転送]]しては[MUST[なりません]]。
[SRC[>>1 5.4.]]

* メモ