unsolicited Pong frame

unsolicited Pong frame

仕様書

構文

[2] opcode は、 0xA です >>1制御フレームです。

[3] 応用データは、返信元のPingフレーム応用データでなければなりません >>1

[5] 返信元が無い場合の応用データは不明です。

文脈

[4] Pingフレームを受信したら、Pongフレームを送信しなければなりません。 以前のフレームにまだ返信していないなら、直近のものにのみ送信しても構いません >>1

[9] ただし WebSocket接続失敗後は送信してはなりません >>8

[6] 要求がなくても送信しても構いません (unsolicited Pong frame) >>1

[7] 単方向の heartbeat として機能します >>1

[11] 利用者エージェントは、必要に応じて (NAT接続を保持させるため、 接続の切断を検出するためなどの目的で) Pongフレームを送信して構いません >>10。 しかしサーバーを助ける目的で送信してはなりません >>10

サーバーは必要があるなら自身で適宜送信するべきです。
[14] これは fingerprinting vector かもしれません。

処理

[12] Pongフレームを受信しても、何もしなくて構いません。

[13] Pingフレームと同じ応用データを含めなければならないということは、 自身が送信したものと同じものが返ってくるかチェックして、時間を計測するなどの使い方が想定されていそうです。 しかしそのように使わなければならない義務があるわけではありません。

関連

[15] HTTP/2 では PING フレーム (ACK フラグ付き) に相当します。