/
562.txt
202 lines (162 loc) · 7.6 KB
/
562.txt
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
[21]
[DFN[[RUBYB[プッシュメッセージ][push message]]]]は、
[[プッシュ配信]]されるメッセージです。
* 仕様書
[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>
- [20] [CITE@en-US[Push API]], [TIME[2020-02-04 16:21:34 +09:00]] <https://w3c.github.io/push-api/#dfn-push-message>
- [24] [CITE@en-US[Push API]], [TIME[2020-02-04 16:21:34 +09:00]] <https://w3c.github.io/push-api/#dom-pushmanager-supportedcontentencodings>
- [28] [CITE@en-US[Push API]], [TIME[2020-02-04 16:21:34 +09:00]] <https://w3c.github.io/push-api/#pushmessagedata-interface>
]REFS]
* 意味
[2]
[[Web Push]] の定義では、
[DFN[[RUBYB[プッシュメッセージ][push message]]]]は、
[[アプリケーションサーバー]]から[[利用者エージェント]]へと[[プッシュサービス]]を介して送られる[[メッセージ]]です。
[SRC[>>1 1.1.]]
[22]
[[Push API]] の定義では、
[DFN[[RUBYB[プッシュメッセージ][push message]]]]は[[アプリケーションサーバー]]から
[[Webアプリケーション]]に送信されるデータです。
[SRC[>>20]]
[3]
[[RFC 8030]] がただ「message」とのみ書いているときでも、多くは[[プッシュメッセージ]]とみられます。
[4]
[DFN[[RUBYB[プッシュメッセージ資源][push message resource]]]]は、
[[プッシュサービス]]が、
配送を受理した[[プッシュメッセージ]]を識別するべく作成するものです。
[[利用者エージェント]]による[[プッシュメッセージ]]の受領肯定で、
削除されます。
[SRC[>>1 2.1.]]
* 特性
[5] [[プッシュメッセージ]]の本体は、
[[HTTPメッセージ]]の[[本体]]で与えられたデータです。
[[Web Push Protocol]] としては制限はないようです。
[[Push API]]
が使う[[内容符号化]] [CODE[aes128gcm]]
は[[暗号化]]された[[バイト列]]としています。
[18] [[Web Push Protocol]]
を使う[[応用][アプリケーション (プッシュ)]]は、
[[末端対末端]]で[[機密性]]、
[[一貫性]]、
データ起源[[認証]]を提供する機構を用いなければ[MUST[なりません]]。
[[Push API]]
は
[CODE[aes128gcm]]
でこれを実現しています。
[SRC[>>1 8.1.]]
[[利用者エージェント]]は
[CODE[aes128gcm]]
に対応しなければ[MUST[なりません]]
[SRC[>>24]]。
互換性のため、以前の [[I-D]] で定義されていた版にも対応して[MAY[構いません]]
[SRC[>>24]]
(が、いずれ廃止される想定とみられます)。
[25]
[CODE[PushManager]]
[[インターフェイス]]の
[DFN[[CODE[supportedContentEncodings]]]]
[[属性]] [SRC[>>24]] は、
次のようにしなければ[MUST[なりません]]。
[FIG(steps)[
= [26]
[CODE[SameObject]]:
[[プッシュメッセージ]]の [[payload]]
の[[暗号化]]に使える[[内容符号化]]の
[CODE[[[FrozenArray]]<[[DOMString]]>]]
を返します [SRC[>>24]]。
]FIG]
-*-*-
[27] [DFN[[CODE[PushMessageData]]]]
[[インターフェイス]] [SRC[>>28]]
は、
[[プッシュメッセージ]]のデータを表します。
[[サービスワーカー環境]]に[[晒され]]ます
[SRC[>>28]]。
[CODE[SecureContext]] のみ利用可能です [SRC[>>28]]。
[30] 状態として[F[バイト群][bytes (PushMessageData)]]を持ちます。
[FIG(list short)[ [29] [CODE[PushMessageData]] の[[メンバー]]
- [CODE[arrayBuffer][bytes (PushMessageData)]]
- [CODE[json][bytes (PushMessageData)]]
- [CODE[text][bytes (PushMessageData)]]
- [CODE[blob][bytes (PushMessageData)]]
]FIG]
-*-*-
[6] [[プッシュメッセージ]]には、
有効期限があります。
[SEE[ [[TTL:]] ]]
期限到来後未配送の[[プッシュメッセージ]]は捨てられます。
[[プッシュメッセージ資源]]も削除されるかもしれません。
[7] [[プッシュメッセージ]]には、
緊急度があります。
[SEE[ [[Urgency:]] ]]
* 作成
[10] [[プッシュメッセージ]]は、
[[アプリケーションサーバー]]が[[プッシュサービス]]の[[プッシュ資源]]へと送信することで作成されます。
受理した[[プッシュサービス]]は、対応する[[プッシュメッセージ資源]]を作成します。
[19] [[プッシュメッセージ資源]]の [[URL]]
は、
[[プライバシー]]のため、
[[プッシュメッセージ購読]]間の関係性を含むものであっては[MUST[なりません]]。
関連付けられた[[プッシュメッセージ購読]]との関係や、
同じ[[プッシュメッセージ購読]]の他の[[プッシュメッセージ]]との関係を示すものであるのは[MAY[構いません]]。
[[利用者]]や[[装置]]の情報を含めては[MUST[なりません]]。
同じ[[プッシュメッセージ購読]]に関連付けられた[[プッシュメッセージ資源]]の
[[URL]] から[[利用者エージェント]]との関係を知れるものであっては[MUST[なりません]]。
[SRC[>>1 8.2.]]
* 受信
[8] [[プッシュメッセージ]]は、
[[プッシュサービス]]から[[利用者エージェント]]へと、
[[プッシュメッセージ購読]]や[[プッシュメッセージ購読集合]]の[[要求]]に対する
[[server push]] で配送されます。
[SEE[ [[プッシュメッセージ購読]] ]]
[9] [[プッシュメッセージ]]の[[利用者エージェント]]の送信では、
[[プッシュメッセージ資源]]が使われます。
[[受領証]]の[[アプリケーションサーバー]]への送信では、
同じ[[プッシュメッセージ資源]]が使われます。
両者は同じ [[URL]] の [CODE[GET]]
でありながら、内容も意味も違います。
[17]
理論上、
[[server push]] の[[意味論]]的には、
[[プッシュメッセージ資源]]を直接 [CODE[GET]]
することでも同じようにアクセスできるはずですが、
このような特殊な構造になっている以上、
[[server push]] 以外の方法で使うことは考えられていないのでしょう。
[23]
[[プッシュメッセージ]]は、
[[プッシュ購読]]に関連付けられた[[活性ワーカー]]に配送されます。
([[サービスワーカー]]が動作中でなければ、起動されます。)
[SRC[>>20]]
* 受領
[11]
[[利用者エージェント]]は、
[[プッシュメッセージ]]を最低1回は配送されたことを示す、
受領肯定を表明しなければ[MUST[なりません]]。
[SRC[>>1 6.2.]]
[12]
[[利用者エージェント]]は、
[[プッシュメッセージ資源]]に
[CODE[DELETE]]
[[要求]]を送らなければ[MUST[なりません]]
[SRC[>>1 6.2.]]。
[16]
[CODE[DELETE]]
に対して[[プッシュサービス]]が送るべき[[応答]]は、特に規定されていません。
[CODE[200]] や [CODE[204]]
が適当でしょうか。
[CODE[DELETE]] が既に行われている場合などのエラー処理も特に規定がありません。
[14]
[[プッシュサービス]]は、
十分な時間内に肯定を受信しない場合、
未配送とみなします。
[CODE[TTL:]] 到来まで配送を試み続ける[SHOULD[べきです]]。
[SRC[>>1 6.2.]]
[15]
[[プッシュサービス]]は、
それ以前でも事情に鑑み適宜再配送を中断して[MAY[構いません]]。
[SRC[>>1 6.2.]]
[13]
受領されたかどうか、
[[プッシュサービス]]は[[受領証購読]]に適宜通知する必要があります。
* メモ