Opaque Data

PING フレーム (HTTP)

[23] PING フレームは、 送信し、peer からの応答を確認するものです。

仕様書

意味

[2] PING フレーム (フレーム型 0x6) は、送信者からの最小 RTT を計測したり、 idle 接続がまだ機能するか判断したりするためのものです >>1。

構文

[10] ストリーム識別子は 0x0 でなければなりません。 PING フレームはストリームに関連付けられません >>1。

[7] 次のフラグがあります。

[8] ACK (0x1 = 第0ビット)
設定されていれば、PING 応答であることを表します。 >>1 [14] 返信以外で ACK フラグ付きの PING フレームを送信しても良いのかどうかは不明です。

[22] 他のフラグは 0 でなければなりません。 受信者は、無視しなければなりません。 >>21

width
8
  1. 1 ACK
  2. 1 0
  3. 1 0
  4. 1 0
  5. 1 0
  6. 1 0
  7. 1 0
  8. 1 0

[4] payload は、8バイトの不透明データ (Opaque Data) を含まなければなりません。 送信者は任意の値を選ぶことができ、任意の形で使うことができます。 PING 応答の場合は、返信元となるフレームと同じ payload データを含まなければなりません。 >>1

width
32
  1. 32 不透明データ

文脈

[3] PING フレームは、どちらのエンドポイントからも送ることができます >>1。

[18] PING は、要求を実際に送らずとも接続が生きているかどうかを検査するために使うことができます >>17。

処理

[11] PING フレームのストリーム識別子が 0x0 でなければ、 接続エラー PROTOCOL_ERROR としなければなりません >>1。

[12] PING フレームの payload の長さが 8 でなければ、 接続エラー FRAME_SIZE_ERROR としなければなりません >>1。

[5] ACK フラグの設定されていない PING フレームを受信したら、 ACK フレームを設定した PING (PING 応答) を送信しなければなりません。 payload は同じでなければなりません。 >>1

[9] PING 応答に返信してはなりません >>1。

[6] PING 応答は、他のフレームより高い優先度とするべきです >>1。

[26] PING を送信していないのに ACK 付きの PING を受信したらどうするべきなのかは不明です。

[27] Firefox は無視します。 Chrome は接続エラー PROTOCOL_ERROR とします。

セキュリティー

[16] PING フレームの送信頻度や payload の値は、 fingerprinting vector となるかもしれません。

[20] PING フレームの返信により peer までの遅延が測定されると、 プライバシー上問題となることもあるかしれません >>19。

関連

[13] WebSocket には Pingフレームと Pongフレームがあります。

[15] HTML の ping 属性や HTTP の Ping-From:/Ping-To: ヘッダーとは無関係です。

[24] 728113 – use spdy ping to avoid/detect nat timeout ( 版) <https://bugzilla.mozilla.org/show_bug.cgi?id=728113>

[25] Issue 34752 - chromium - Implement PING - An open-source project to help move the web forward. - Google Project Hosting ( 版) <https://code.google.com/p/chromium/issues/detail?id=34752>

[28] APNs Provider API () <https://developer.apple.com/jp/documentation/NetworkingInternet/Conceptual/RemoteNotificationsPG/Chapters/APNsProviderAPI.html>

接続状態はHTTP/2のPINGフレームを使って確認できます。