サーバー駆動 HTTP トラフィック

最終更新: 2022-05-12 15:34:45 +0800 +0800
原文は英語で書かれています。あなたはAI翻訳版を読んでいます。

サーバー駆動 HTTP を使用すると、更新のたびにクライアントが新しいリクエストを送信しなくても、サーバーから情報を送信できます。Server-Sent Events(SSE)は、一方向のサーバーからブラウザーへの更新に対応する、シンプルで標準化された選択肢です。

Server-Sent Events #

SSE クライアントは、Accept: text/event-stream ヘッダーを付けた通常の GET リクエストを送信します。サーバーは 200 OK、Content-Type: text/event-stream を返し、空行で区切られた UTF-8 のイベントフィールドを送信しながらレスポンスを開いたままにします。

text
event: order-updated
id: 42
data: {"status":"paid"}

ブラウザーでは、EventSource が自動的に再接続します。サーバーは retry: を送信して再接続までの遅延時間を提案できます。また、イベント ID を受信していた場合、再接続後にブラウザーは Last-Event-ID を送信します。クライアントがその ID から安全に再開できるように、またはスナップショットを安全に再取得できるように、ストリームを設計してください。

SSE は一方向です。クライアントはコマンドに通常の HTTP リクエストを使用します。双方向の低レイテンシーメッセージングが必要な場合は WebSocket を使用してください。プロキシによってアイドル状態の接続が閉じられる可能性がある場合は、: keepalive などのコメントを定期的に送信し、各イベントをフラッシュし、リバースプロキシがレスポンスをバッファリングしないように設定してください。

初期リクエストは、他のエンドポイントと同じように慎重に認証してください。ネイティブの EventSource は任意の認証ヘッダーを付加できないため、URL に bearer 認証情報を含めるよりも、同一サイトの安全な Cookie セッションが適している場合が多くあります。すべてのサブスクリプションに対して認可を適用し、アプリケーションで必要な場合はセッションが無効化されたときにストリームを閉じてください。

コメント

GitHub で閲覧・コメントする(投稿にはログインが必要です)