最近、私は Web API のみを使用してゼロから構築された新しい webpush パッケージに取り組んでいます。これにより、(少なくとも理論的には) ブラウザーから直接 Web プッシュ メッセージを送信できるようになります。
このブログ投稿は、Web Push プロトコルとは何か、その仕組みを説明することを目的としています
(RFC 8291) と、ライブラリを使用して Web プッシュ メッセージを送信する方法。
Web プッシュ プロトコルは、アプリケーションがユーザー エージェント (通常はブラウザ) にメッセージを送信できるようにする中間プロトコルです。
メッセージがユーザー エージェントにプッシュされるという意味ではサーバー送信イベント (SSE) に似ていますが、目的は異なります。 Web プッシュ メッセージでは、Web サイトがサービス ワーカーとしてタブを開いている必要はありません
プッシュメッセージをリッスンできます。バックグラウンドで動作します。
Web プッシュ プロトコルには 3 つのアクターが関与します:
両者間のやり取りの概要は次のとおりです:
中間プッシュ サービスは、複数の理由から必要です。
まず、ユーザー エージェントが Web サイトごとに 1 つの接続を維持するのではなく、すべての Web サイトに対して 1 つの接続のみを維持するため、帯域幅とバッテリーの使用量が削減されます。
主要なブラウザのプッシュ サービスは数百万のユーザーを処理できるように設計されているため、スケーラビリティと信頼性も向上します。ユーザーエージェントがオフラインの場合でもプッシュメッセージを保持する必要があるため、プッシュサービスの構築には多くのエンジニアリング、回復力と冗長性のあるインフラストラクチャが必要です
最後に、カスタム プッシュ サービスの構築、デプロイ、保守は、多くの場合、小規模な Web 企業にとっては複雑すぎてリソースを大量に消費します。これにより、大企業は独自のプッシュ サービスを開発および改良するために必要なリソースを得ることができるため、不当な競争上の優位性が得られることになります。
私のようにプライバシーを重視するユーザーの場合は、仲介サービスを検討してください
すべてのメッセージを受信すると危険信号が発生します。この懸念に対処するには、Web Push
メッセージは HTTP 暗号化コンテンツエンコーディングによって保護されます (私の
を参照してください) http-ece パッケージ)、それを確保します
機密情報は保護されたままであり、第三者が読み取ることはできません
輸送中のサービス
上記の ASCII グラフでは、セットアップ矢印が他の矢印とは異なることに気づいたかもしれません。これは、セットアップ段階が実装に依存しているためです。すべての主要なブラウザは JavaScript を実装しています
API を
にプッシュする 違う方法で。標準を返す PushManager.subscribe() メソッド
PushSubscription が公開されています。
サブスクリプションには、プッシュ サブスクリプションに関連付けられた一意の URL エンドポイントと、メッセージの暗号化に使用される公開キーが常に含まれます。
サブスクリプションを作成するとき、メッセージをプッシュするアプリケーション サーバーを識別するために、オプションの applicationServerKey が提供される場合があります。これは、Voluntary Application Server Identification (VAPID) 認証方法です
(RFC 8292)。 VAPID キーは、プッシュ サービスに対する DDOS 攻撃を軽減するために使用されます。また、アプリケーション サーバーとプッシュ サービスの間に認証を追加すると、サブスクリプション エンドポイントが漏洩するリスクが軽減されます。これらの理由から、これらは Firefox では必須です。
2 番目のステップは、メッセージの送信を開始できるように、サブスクリプションをアプリケーション サーバーに送信することです。
アプリケーション サーバーは通常、後で再利用できるようにサブスクリプションをデータベースに保存します。
最後に、メッセージをプッシュするために、サブスクリプションを作成するために applicationServerKey が提供された場合、アプリケーション サーバーは無効な認証スキームを使用して暗号化された HTTP リクエストを送信します。
プッシュサービスでメッセージを受信したときにユーザーエージェントがオンラインであれば、それは転送されました。それ以外の場合、ユーザー エージェントがオンラインになるか、メッセージの有効期限が切れるまで保存されます。
リーリー
リーリー
リーリー
次のとおり、pushMessage()/pushTextMessage() メソッド:
リーリー
webpush リポジトリには、ローカルで実行できる同様のコードを含む対話型のサンプルが含まれています。クライアント側の JavaScript コードも含まれているので、ぜひチェックしてください!
以上がDeno を使用して Web プッシュ メッセージを送信するの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。