<html xmlns="http://www.w3.org/1999/xhtml"><head></head><body><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="21" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[21]</anchor-end> 
<dfn><rubyb xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">プッシュメッセージ<rt xmlns="http://www.w3.org/1999/xhtml">push message</rt></rubyb></dfn>は、
<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">プッシュ配信</anchor>されるメッセージです。</p><section><h1>仕様書</h1><refs xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:"><ul xmlns="http://www.w3.org/1999/xhtml"><li><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="1" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[1]</anchor-end> <cite xml:lang="en">RFC 8030 - Generic Event Delivery Using HTTP Push</cite>, <time>2020-03-09 00:13:33 +09:00</time> <anchor-external xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:resScheme="URI" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:resParameter="https://tools.ietf.org/html/rfc8030">https://tools.ietf.org/html/rfc8030</anchor-external></li><li><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="20" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[20]</anchor-end> <cite xml:lang="en-US">Push API</cite>, <time>2020-02-04 16:21:34 +09:00</time> <anchor-external xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:resScheme="URI" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:resParameter="https://w3c.github.io/push-api/#dfn-push-message">https://w3c.github.io/push-api/#dfn-push-message</anchor-external></li><li><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="24" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[24]</anchor-end> <cite xml:lang="en-US">Push API</cite>, <time>2020-02-04 16:21:34 +09:00</time> <anchor-external xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:resScheme="URI" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:resParameter="https://w3c.github.io/push-api/#dom-pushmanager-supportedcontentencodings">https://w3c.github.io/push-api/#dom-pushmanager-supportedcontentencodings</anchor-external></li><li><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="28" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[28]</anchor-end> <cite xml:lang="en-US">Push API</cite>, <time>2020-02-04 16:21:34 +09:00</time> <anchor-external xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:resScheme="URI" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:resParameter="https://w3c.github.io/push-api/#pushmessagedata-interface">https://w3c.github.io/push-api/#pushmessagedata-interface</anchor-external></li><li><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="23" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[23]</anchor-end> <cite xml:lang="en-US">Push API</cite>, <time>2020-02-04 16:21:34 +09:00</time> <anchor-external xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:resScheme="URI" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:resParameter="https://w3c.github.io/push-api/#events">https://w3c.github.io/push-api/#events</anchor-external></li></ul></refs></section><section><h1>意味</h1><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="2" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[2]</anchor-end> 
<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">Web Push</anchor> の定義では、
<dfn><rubyb xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">プッシュメッセージ<rt xmlns="http://www.w3.org/1999/xhtml">push message</rt></rubyb></dfn>は、
<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">アプリケーションサーバー</anchor>から<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">利用者エージェント</anchor>へと<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">プッシュサービス</anchor>を介して送られる<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">メッセージ</anchor>です。
<src xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:10:"><anchor-internal xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="1" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">&gt;&gt;1</anchor-internal> 1.1.</src></p><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="22" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[22]</anchor-end> 
<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">Push API</anchor> の定義では、
<dfn><rubyb xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">プッシュメッセージ<rt xmlns="http://www.w3.org/1999/xhtml">push message</rt></rubyb></dfn>は<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">アプリケーションサーバー</anchor>から
<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">Webアプリケーション</anchor>に送信されるデータです。
<src xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:10:"><anchor-internal xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="20" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">&gt;&gt;20</anchor-internal></src></p><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="3" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[3]</anchor-end> 
<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">RFC 8030</anchor> がただ「message」とのみ書いているときでも、多くは<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">プッシュメッセージ</anchor>とみられます。</p></section><section><h1>状態</h1><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="6" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[6]</anchor-end> <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">プッシュメッセージ</anchor>は、それが送信された (受信した) こと自体が情報になります。
それに加えて、付随する情報がいくつかあります。</p><figure class="list members"><figcaption><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="38" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[38]</anchor-end> <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">プッシュメッセージ</anchor></figcaption><dl><dt><f xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:"><code xmlns="http://www.w3.org/1999/xhtml">Last-Modified</code></f></dt><dd>
<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">TTL<title xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:10:">TTL:</title></anchor>
の<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">元期</anchor>となる、
<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">プッシュサービス</anchor>が<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">プッシュメッセージ</anchor>を受信した<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">日時</anchor>です。
(<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">プッシュサービス</anchor>が保持します。)</dd><dt><f xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">有効期限<title xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:10:">TTL (プッシュメッセージ)</title></f></dt><dd>
<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">プッシュメッセージ</anchor>には、 
必ず有効期限があります。
<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">アプリケーションサーバー</anchor>は、
<code>TTL:</code> 
<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">HTTPヘッダー</anchor>で有効期限を指定できます。
期限到来後、未配送の<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">プッシュメッセージ</anchor>は捨てられます。
同時に<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">プッシュメッセージ資源</anchor>も削除されるかもしれません。
(<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">アプリケーションサーバー</anchor>が指定し、
<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">プッシュサービス</anchor>が適宜修正します。)</dd><dt><f xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">緊急度<title xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:10:">Urgency (プッシュメッセージ)</title></f></dt><dd>
<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">アプリケーションサーバー</anchor>は、
<code>Urgency:</code>
<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">HTTPヘッダー</anchor>で緊急度を指定できます。
(<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">アプリケーションサーバー</anchor>が指定し、
<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">プッシュサービス</anchor>が保持します。)</dd><dt><f xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">データ<title xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:10:">PushMessageData</title></f></dt><dd>
(<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">アプリケーションサーバー</anchor>と<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">利用者エージェント</anchor>は暗号化されたデータを送受信しますが、
元のデータを知り得ます。
<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">プッシュサービス</anchor>は暗号化されたデータのみ知り得ます。
<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">Webブラウザー</anchor>上の<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">アプリケーション</anchor>は元のデータのみ見ます。)</dd><dt><f xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:"><anchor>プッシュメッセージ資源</anchor>の <anchor>URL</anchor></f></dt><dd>
(<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">プッシュサービス</anchor>が決定し、
<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">アプリケーションサーバー</anchor>と<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">利用者エージェント</anchor>が知り得ます。)</dd></dl></figure></section><section><h1>データ</h1><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="7" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[7]</anchor-end> 
<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">プッシュメッセージ</anchor>には<f xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">データ<title xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:10:">PushMessageData</title></f>を含めることができます。
データは含めても含めなくても構いません。
<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">プッシュメッセージ</anchor>を受信したという事実により、
その事由や<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">利用者</anchor>に提示するべき事項などは他の手段で取得すればいいので、
データは省略したり、最低限に抑えたりできるのです。
(<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">Chrome</anchor> の古い実装では、
データを含めることができませんでした。)</p><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="39" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[39]</anchor-end> 
データは、
<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">プッシュメッセージ</anchor>の本質的な内容たる形態と、
それを転送用に<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">暗号化</anchor>した形態の2種類があります。
そのどちらも、関係する各<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">仕様書</anchor>は
data、content、payload、 (<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">HTTPメッセージ</anchor>の) <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">body<title xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:10:">本体</title></anchor>
のような呼び方を混在させていて、
明瞭さを欠きます。</p><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="40" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[40]</anchor-end> 
データは<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">アプリケーションサーバー</anchor> → (<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">プッシュエンドポイント</anchor>) →
<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">プッシュサービス</anchor> → (<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">プッシュメッセージ購読資源</anchor>) →
<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">Webブラウザー本体<title xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:10:">プッシュメッセージの受信</title></anchor> → (<code>PushEvent</code>)
→ <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">サービスワーカー</anchor>と転送されますが、
このうち<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">アプリケーションサーバー</anchor>から
<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">Webブラウザー本体</anchor>までは、暗号化された状態で移動します。
<code>PushEvent</code> で<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">アプリケーション</anchor>に提示される状態で<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">解読</anchor>済みの形に戻ります。</p><hr></hr><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="5" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[5]</anchor-end> 
データは <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">HTTPメッセージ</anchor>の<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">本体</anchor>として転送されます。
<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">Web Push Protocol</anchor> 単体ではこの<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">本体</anchor>に具体的な制約を規定していません。
<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">応用<title xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:10:">アプリケーション (プッシュ)</title></anchor>は、
<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">末端対末端</anchor>で<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">機密性</anchor>、
<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">一貫性</anchor>、
データ起源<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">認証</anchor>を提供する機構を用いなければ<MUST xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">ならない</MUST>
<src xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:10:"><anchor-internal xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="1" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">&gt;&gt;1</anchor-internal> 8.1.</src>
とだけ定められています。</p><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="43" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[43]</anchor-end> 
<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">Push API</anchor>
は、
<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">利用者エージェント</anchor>が
<code>aes128gcm</code>
に対応しなければ<MUST xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">ならない</MUST>、
互換性のため以前の <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">I-D</anchor> で定義されていた版にも対応して<MAY xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">構わない</MAY>、
と規定しています
<src xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:10:"><anchor-internal xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="24" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">&gt;&gt;24</anchor-internal></src>。
(古い版への対応は、いずれ<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">廃止</anchor>される想定とみられます。)
<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">利用者エージェント</anchor>への要件という形を採っていますが、
<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">アプリケーションサーバー</anchor>もこれに従う他選択肢はありません。</p><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="25" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[25]</anchor-end> 
<code>PushManager</code>
<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">インターフェイス</anchor>の
<dfn><code>supportedContentEncodings</code></dfn>
<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">属性</anchor> <src xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:10:"><anchor-internal xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="24" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">&gt;&gt;24</anchor-internal></src> は、
次のようにしなければ<MUST xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">なりません</MUST>。</p><figure class="steps"><ol><li><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="26" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[26]</anchor-end> 
<code>SameObject</code>:
<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">プッシュメッセージ</anchor>の <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">payload</anchor>
の<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">暗号化</anchor>に使える<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">内容符号化</anchor>の
<code><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">FrozenArray</anchor>&lt;<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">DOMString</anchor>&gt;</code>
を返します <src xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:10:"><anchor-internal xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="24" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">&gt;&gt;24</anchor-internal></src>。</li></ol></figure><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="44" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[44]</anchor-end>
データに付随して転送される
<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">HTTPヘッダー</anchor>が<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">プッシュメッセージ</anchor>の一部を構成するのか、
<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">RFC</anchor> は明言していません。
例示には
<code><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">Content-Type:</anchor> <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">text/plain</anchor><snip xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">; ...</snip></code>
が常に示されていて、これがデータの形式を表すようにもみえます。
一方で <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">Push API</anchor>
ではこの情報は使われませんし、
<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">Push API</anchor> が扱うデータは<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">バイト列</anchor>であって<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">文字列</anchor>ではないので、
この例示はあまり現実の利用に近いものでもありません。
実際上 <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">HTTPヘッダー</anchor>は<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">プッシュメッセージ</anchor>を構成しないとみるべきでしょう。</p><hr></hr><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="45" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[45]</anchor-end> 
<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">プッシュメッセージ</anchor>の<f xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">データ<title xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:10:">PushMessageData</title></f>の
(転送用ではない) 本質的な内容は、
<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">アプリケーション</anchor>依存の任意の<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">バイト列</anchor>です。</p><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="46" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[46]</anchor-end> 
理論上任意の長さの<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">バイト列</anchor>を扱えないこともないとされていますが、
<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">プロトコル</anchor>によって<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">相互運用性</anchor>が保証される長さ制限があって、
現実的にはその範囲に収める必要があります。
つまりデータは、
<strong><n xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">0</n> <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">バイト</anchor><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">以上</anchor>、<n xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">3993</n> <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">バイト</anchor><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">以下</anchor>の<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">バイト列</anchor></strong>でなければなりません。</p><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="47" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[47]</anchor-end> 
データが表すものは、<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">テキスト</anchor>でも <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">JSON</anchor> でも<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">画像</anchor>でも、
何でも構いません。</p><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="48" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[48]</anchor-end> 
<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">アプリケーションサーバー</anchor>は、
データを<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">暗号化</anchor>して<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">プッシュサービス</anchor>に送信することになります。
その手順は<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">プッシュメッセージ</anchor>の送信に使う<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">ライブラリー</anchor>などにより異なります。</p><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="49" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[49]</anchor-end> 
<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">Webブラウザー</anchor>上の<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">アプリケーション</anchor>は、
<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">Webブラウザー</anchor>の<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">プッシュメッセージの受信</anchor>処理によって<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">解読</anchor>されたデータを
<code>PushEvent</code>
から受け取ることになります。
データは
<code>PushMessageData</code>
<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">オブジェクト</anchor>として表されます。</p><hr></hr><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="27" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[27]</anchor-end> <dfn><code>PushMessageData</code></dfn>
<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">インターフェイス</anchor> <src xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:10:"><anchor-internal xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="28" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">&gt;&gt;28</anchor-internal></src>
は、
<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">プッシュメッセージ</anchor>の<f xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">データ<title xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:10:">PushMessageData</title></f>を表します。
<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">サービスワーカー環境</anchor>に<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">晒され</anchor>ます
<src xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:10:"><anchor-internal xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="28" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">&gt;&gt;28</anchor-internal></src>。
<code>SecureContext</code> のみ利用可能です <src xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:10:"><anchor-internal xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="28" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">&gt;&gt;28</anchor-internal></src>。</p><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="30" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[30]</anchor-end> 状態として<f xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">バイト群<title xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:10:">bytes (PushMessageData)</title></f>を持ちます。</p><figure class="list short"><figcaption><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="29" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[29]</anchor-end> <code>PushMessageData</code> の<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">メンバー</anchor></figcaption><ul><li><code>arrayBuffer<title xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:10:">bytes (PushMessageData)</title></code></li><li><code>json<title xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:10:">bytes (PushMessageData)</title></code></li><li><code>text<title xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:10:">bytes (PushMessageData)</title></code></li><li><code>blob<title xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:10:">bytes (PushMessageData)</title></code></li></ul></figure><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="31" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[31]</anchor-end> 
<code>PushEvent</code> <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">インターフェイス</anchor>の
<dfn><code>data<title xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:10:">PushMessageData</title></code></dfn>
<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">属性</anchor>の<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">取得器</anchor> <src xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:10:"><anchor-internal xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="23" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">&gt;&gt;23</anchor-internal></src> は、
次のようにしなければ<MUST xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">なりません</MUST>。</p><figure class="steps"><ol><li><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="32" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[32]</anchor-end> <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">文脈オブジェクト</anchor>の
<f xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:"><code xmlns="http://www.w3.org/1999/xhtml">data<title xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:10:">PushMessageData</title></code></f>
を返します <src xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:10:"><anchor-internal xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="23" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">&gt;&gt;23</anchor-internal></src>。</li></ol></figure><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="33" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[33]</anchor-end> 
<code>PushEventInit</code> <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">辞書</anchor>の
<dfn><code>data<title xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:10:">PushMessageData</title></code></dfn>
メンバー <src xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:10:"><anchor-internal xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="23" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">&gt;&gt;23</anchor-internal></src> は、
<code>PushEvent</code>
<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">インターフェイス</anchor>の
<code>data<title xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:10:">PushMessageData</title></code>
に対応します。値は
<code>PushMessageDataInit</code> とされています <src xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:10:"><anchor-internal xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="23" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">&gt;&gt;23</anchor-internal></src>
が、他に
<code>null</code>
もあり得るようです。 
既定値は
<code>null</code> です。</p><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="36" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[36]</anchor-end> 
<code>PushEvent</code>
<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">インターフェイス</anchor>の<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">イベント構築手順群</anchor>の
<code>data<title xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:10:">PushMessageData</title></code>
の処理は、
<var>辞書</var>と<var>イベント</var>について、
次のようにします。
<src xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:10:"><anchor-internal xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="23" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">&gt;&gt;23</anchor-internal></src></p><figure class="steps"><ol><li><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="37" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[37]</anchor-end> <var>辞書</var>の <f xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:"><code xmlns="http://www.w3.org/1999/xhtml">data<title xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:10:">PushMessageData</title></code></f> が <code>null</code> でない場合、<ol><li><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="41" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[41]</anchor-end> <var>イベント</var>の
<f xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:"><code xmlns="http://www.w3.org/1999/xhtml">data<title xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:10:">PushMessageData</title></code></f>
を、
新しい <code>PushMessageData</code>
に設定します。<figure class="list members"><figcaption><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="42" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[42]</anchor-end> <code>PushMessageData</code></figcaption><dl><dt><f xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">バイト列<title xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:10:">bytes (PushMessageData)</title></f></dt><dd>
<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">extract a byte sequence</anchor>
を<var>辞書</var>の
<f xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:"><code xmlns="http://www.w3.org/1999/xhtml">data<title xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:10:">PushMessageData</title></code></f>
について実行した結果</dd></dl></figure></li></ol></li></ol></figure><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="34" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[34]</anchor-end> 
<dfn><code>PushMessageDataInit</code></dfn>
は、
<code>BufferSource</code>
または
<code>USVString</code>
に
<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">typedef</anchor>
されています。
<src xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:10:"><anchor-internal xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="23" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">&gt;&gt;23</anchor-internal></src></p><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="35" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[35]</anchor-end> 
<var>オブジェクト</var>について
<dfn>extract a byte sequence</dfn>
するには、
次のようにします。
<src xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:10:"><anchor-internal xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="28" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">&gt;&gt;28</anchor-internal></src></p><figure class="steps"><ol><li><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="18" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[18]</anchor-end> <var>オブジェクト</var>が <code>BufferSource</code> の場合、<ol><li><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="19" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[19]</anchor-end> <var>オブジェクト</var>の内容の複製を返します。</li></ol></li><li><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="20" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[20]</anchor-end> <var>オブジェクト</var>が <code>USVString</code> の場合、<ol><li><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="21" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[21]</anchor-end> <var>オブジェクト</var>を <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">UTF-8符号化</anchor>した結果を返します。</li></ol></li></ol></figure></section><section><h1>プッシュメッセージ資源</h1><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="4" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[4]</anchor-end> 
<dfn><rubyb xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">プッシュメッセージ資源<rt xmlns="http://www.w3.org/1999/xhtml">push message resource</rt></rubyb></dfn>は、
<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">プッシュサービス</anchor>において<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">プッシュメッセージ</anchor>を識別する<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">資源</anchor>です。
<src xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:10:"><anchor-internal xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="1" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">&gt;&gt;1</anchor-internal> 2.1.</src>
<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">URL</anchor> によって識別されます。</p><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="50" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[50]</anchor-end> <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">プッシュサービス</anchor>は、
<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">アプリケーションサーバー</anchor>の求める<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">プッシュメッセージ</anchor>の配送を受理したとき<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">プッシュメッセージ資源</anchor>を作成し、
<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">利用者エージェント</anchor>が<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">プッシュメッセージの受領肯定</anchor>したとき<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">プッシュメッセージ資源</anchor>を削除します。
<src xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:10:"><anchor-internal xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="1" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">&gt;&gt;1</anchor-internal> 2.1.</src></p><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="51" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[51]</anchor-end> 
<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">Web Push Protocol</anchor> 上<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">プッシュメッセージ資源</anchor>を能動的に操作することはできません。
次のように使われます。</p><ul><li><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="52" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[52]</anchor-end> 
<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">プッシュメッセージの受信</anchor>で、
<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">server push</anchor> される <code>GET</code> <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">要求</anchor>という形で<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">プッシュメッセージ</anchor>配送に使われます。</li><li><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="53" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[53]</anchor-end> 
<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">プッシュメッセージの配送確認</anchor>で、
<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">server push</anchor> される <code>GET</code> <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">要求</anchor>という形で<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">プッシュメッセージ</anchor>受領の伝達に使われます。<ul><li><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="54" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[54]</anchor-end> それとの照合のため、<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">プッシュ資源</anchor>の<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">応答</anchor>に <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">URL</anchor> が示されます。</li></ul></li></ul><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="9" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[9]</anchor-end> 
両者は同じ <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">URL</anchor> の <code>GET</code>
でありながら、内容も意味も違います。</p><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="17" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[17]</anchor-end> 
理論上、
<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">server push</anchor> の<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">意味論</anchor>的には、
<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">プッシュメッセージ資源</anchor>を直接 <code>GET</code>
することでも同じようにアクセスできるはずですが、
このような特殊な構造になっている以上、
<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">server push</anchor> 以外の方法で使うことは考えられていないのでしょう。</p></section><section><h1>送信</h1><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="10" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[10]</anchor-end> <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">プッシュメッセージ</anchor>は、
<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">アプリケーションサーバー</anchor>が<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">プッシュサービス</anchor>の<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">プッシュ資源</anchor>へと送信することで作成されます。
<sw-see xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:"> <anchor>プッシュメッセージの送信</anchor> </sw-see></p></section><section><h1>受信</h1><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="8" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[8]</anchor-end> <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">プッシュメッセージ</anchor>は、
<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">プッシュサービス</anchor>から<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">利用者エージェント</anchor>へと、
<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">プッシュメッセージ購読</anchor>や<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">プッシュメッセージ購読集合</anchor>の<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">要求</anchor>に対する
<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">server push</anchor> で配送されます。
<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">Webブラウザー</anchor>は、
適切な<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">サービスワーカー</anchor>を起動し、
<code>push<title xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:10:">onpush</title></code>
<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">イベント</anchor>によって配送します。
<sw-see xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:"> <anchor>プッシュメッセージの受信</anchor> </sw-see></p></section><section><h1>受領</h1><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="55" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[55]</anchor-end> 
<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">プッシュサービス</anchor>は、
受理した<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">プッシュメッセージ</anchor>を配送のため保持します。
次の場合に<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">プッシュメッセージ</anchor>は削除されます。</p><ul><li><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="56" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[56]</anchor-end> <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">利用者エージェント</anchor>への<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">配送確認</anchor>ができた場合</li><li><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="57" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[57]</anchor-end> <f xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:"><code xmlns="http://www.w3.org/1999/xhtml">Last-Modified</code></f> + <f xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">TTL<title xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:10:">TTL:</title></f> が<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">現在時刻</anchor>を超えた場合</li><li><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="59" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[59]</anchor-end> 新しい<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">プッシュメッセージ</anchor>の <code>Topic:</code> と重複した場合</li><li><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="58" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[58]</anchor-end> その他<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">プッシュサービス</anchor>が配送を断念せざるを得ない場合</li></ul><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="11" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[11]</anchor-end> 
<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">利用者エージェント</anchor>は、
<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">プッシュメッセージ</anchor>を最低1回は配送されたことを示す、
受領肯定を表明しなければ<MUST xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">なりません</MUST>。
<src xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:10:"><anchor-internal xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="1" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">&gt;&gt;1</anchor-internal> 6.2.</src></p><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="12" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[12]</anchor-end> 
<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">利用者エージェント</anchor>は、
<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">プッシュメッセージ資源</anchor>に
<code>DELETE</code>
<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">要求</anchor>を送らなければ<MUST xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">なりません</MUST>
<src xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:10:"><anchor-internal xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="1" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">&gt;&gt;1</anchor-internal> 6.2.</src>。</p><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="16" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[16]</anchor-end> 
<code>DELETE</code>
に対して<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">プッシュサービス</anchor>が送るべき<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">応答</anchor>は、特に規定されていません。
<code>200</code> や <code>204</code>
が適当でしょうか。
<code>DELETE</code> が既に行われている場合などのエラー処理も特に規定がありません。</p><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="14" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[14]</anchor-end> 
<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">プッシュサービス</anchor>は、
十分な時間内に肯定を受信しない場合、
未配送とみなします。
<code>TTL:</code> 到来まで配送を試み続ける<SHOULD xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">べきです</SHOULD>。
<src xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:10:"><anchor-internal xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="1" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">&gt;&gt;1</anchor-internal> 6.2.</src></p><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="15" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[15]</anchor-end> 
<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">プッシュサービス</anchor>は、
それ以前でも事情に鑑み適宜再配送を中断して<MAY xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">構いません</MAY>。
<src xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:10:"><anchor-internal xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="1" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">&gt;&gt;1</anchor-internal> 6.2.</src></p><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="13" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[13]</anchor-end> 
受領されたかどうか、
<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">プッシュサービス</anchor>は<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">受領証購読</anchor>に適宜通知する必要があります。</p></section><section><h1>メモ</h1></section></body></html>