ToolActToolAct

WebSocketオンラインテストツール

オンラインWebSocket接続テスト、メッセージ送受信デバッグツール

未接続
送信メッセージ
0
受信メッセージ
0
接続時間
00:00
総メッセージ数
0
メッセージログ

接続後にメッセージの送受信が可能です

Ctrl + Enter で送信

WebSocketとは?

WebSocketは単一のTCP接続上で全二重通信を行うプロトコルです。HTTPとは異なり、WebSocketは一度接続を確立すると、クライアントとサーバーはいつでも相互にデータを送信でき、接続を繰り返し確立する必要がありません。WebSocketはリアルタイムチャット、オンラインゲーム、株式相場、協調編集などリアルタイムデータ交換が必要な場面でよく使用されます。

使い方

使い方

  1. URL欄にWebSocketサーバーアドレスを入力してください(ws://またはwss://)
  2. オプション:サブプロトコルを入力します(複数ある場合はカンマ区切り)
  3. 「接続」をクリックしてWebSocket接続を確立します
  4. 入力欄にメッセージ内容を入力します
  5. メッセージタイプ(テキストまたはJSON)を選択してください。JSONタイプの場合は形式が自動検証されます
  6. 「送信」をクリックするか、Ctrl + Enterを押してメッセージを送信します
  7. 送受信したメッセージはメッセージリストに表示され、クリックでコピーできます

接続のヒント

  • HTTPSページからテストする場合はwss://を使用してください。ブラウザはHTTPSのオリジンから安全でないws://接続をブロックすることがよくあります。
  • 切断、ページ再読み込み、エンドポイント切り替えの前に、重要なメッセージログをエクスポートまたはコピーしてください。

利用シーン

WebSocketエンドポイントに手動で接続ws://またはwss://のURLを入力し、必要に応じてカンマ区切りのサブプロトコルを指定して、ブラウザのWebSocket接続を開きます。入力されたURLとサブプロトコルのみが使用され、ブラウザはそのエンドポイントへの単一の接続を開き、他の接絡は行われません。ステータスバーでは未接続、接続中、接続済み、エラーの状態が区別され、利用可能な場合はクローズコードの詳細も表示されます。
テキストやJSONメッセージの送信と確認テキストまたはJSONメッセージを作成し、JSONモードでは送信前にJSONの検証を行い、Ctrl+EnterまたはCommand+Enterで送信します。送受信メッセージにはタイムスタンプ、バイトサイズ、JSONとして解析可能であればJSONタグが付き、可能な場合はフォーマットされたJSONで表示されるため、サーバーの期待値とのフレーム単位の比較が容易です。
WebSocketセッションのトランスクリプトをエクスポートメッセージログは最大500エントリを保持し、送受信カウントと接続時間を記録し、JSONファイルとしてエクスポートできます。個別のメッセージはAPI会話やリアルタイムイベントストリームのデバッグ用にコピーしたり、クローズコードや接続時間とともにチケットに添付したりすることもできます。
サブプロトコルのネゴシエーションを検証接続前にカンマ区切りのサブプロトコル(例:'graphql-ws,soap,wamp')をリストします。ハンドシェイクではサーバーが選択した値がSec-WebSocket-Protocolレスポンスヘッダーにエコーバックされるため、クライアントとゲートウェイが合意しているか、プロキシが要求された値を除去していないかを最も迅速に確認できます。レスポンスがない場合、サーバーはリクエストをプレーンWebSocketとして処理しており、アプリケーション層のパーサーは最初のメッセージで失敗する可能性が高いです。
ハートビートとアイドルタイムアウトを監視トラフィックなしで接続を開いたままにし、未承諾のpingフレームや自動切断を監視します。アイドル間隔をサーバーのドキュメント化されたハートビート間隔と比較してkeep-alive設定の一致を確認し、正常な1000と異常切断(1006)を区別できるようにクローズコードをキャプチャします。実際には、NGINXのデフォルトのproxy_read_timeoutは60秒で、多くのクラウドロードバランサーは60〜350秒でアイドルソケットを切断するため、1分を過ぎた辺りで切断される接続はほぼ間違いなくプロキシによる切断であり、サーバーのバグではありません。1006(異常切断、クローズフレーム未受信)と1001(going away)や1011(サーバーエラー)を区別することで、プロキシ管理者にエスカレーションすべきかアプリケーションチームにエスカレーションすべきかを判断できます。

仕組み

WebSocketプロトコルの核心はHTTP Upgradeにあります。クライアントはまず通常のHTTP GETリクエストを送信しますが、Upgrade: websocketヘッダーとConnection: Upgradeヘッダー、そしてランダムに生成されたSec-WebSocket-Keyを含みます。サーバーはこれらのヘッダーを検証した後、101 Switching Protocolsを返します。このレスポンスにはKeyと固定GUIDを連結してSHA-1を適用し、Base64エンコードしたSec-WebSocket-Accept値が含まれます。101レスポンス以降、TCP接続はHTTPからWebSocketに切り替わり、以降のデータはWebSocketフレームとして送信されます。WebSocketフレームヘッダーは最低2バイトで構成され、FINフラグ、opcode(0x1テキスト、0x2バイナリ、0x8切断、0x9 ping、0xA pong)、そしてペイロード長を含みます。ping/pongフレームはハートビート検出に使用され、ブラウザAPIは自動送信しないため、アプリケーション層で実装する必要があります。wss://はHTTPS+WebSocketの等価で、最初にTLSハンドシェイクを行い、その後WebSocketアップグレードを行います。ws://はプレーンテキストで、ブラウザはhttpsページ上のws://エンドポイントを拒否し、ダウングレード攻撃を防止します。単一フレームの上限はデフォルトで約1MBで、より長いメッセージは複数のフレームに分割されます。

  • ハンドシェイク:クライアントはUpgrade: websocketヘッダー付きのHTTP GETを送信し、サーバーは101 Switching Protocolsでアップグレード成功を通知する
  • Sec-WebSocket-Keyはブラウザがランダムに生成する16バイトのBase64文字列。サーバーは固定GUIDを連結してSHA-1を適用し、Sec-WebSocket-Acceptで検証する
  • フレーミング:各フレームは最低2バイトのヘッダーを持ち、FIN、opcode(テキスト/バイナリ/ping/pong/切断)、ペイロード長が含まれる
  • ws://はプレーンテキスト、wss://はHTTPS経由のWebSocket。ブラウザはhttpsサイト上のws://を拒否してダウングレード攻撃を防ぐ
  • ハートビート用ping/pongフレーム:RFC 6455は各pingへのpong応答を要求。ブラウザはハートビートを自動送信しないため、アプリケーション側で実装が必要
  • 切断シーケンス:いずれかの側がステータスコード付きの0x8切断フレームを送信し、相手が一致する切断フレームで応答して初めてTCP接続が実際に解放される

使用例

公開エコーサービスへの接続

wss://echo.websocket.org — 101 Switching Protocols ハンドシェイク成功、"hello" を送信すると即座に "hello" がエコーされる

自前の WebSocket サービスをデバッグ

wss://api.example.com/ws — サブプロトコル graphql-ws、接続成功、サブスクリプションメッセージを正常に受信

切断の再現

wss://api.example.com/ws — 接続確立から 30 秒後にサーバーが能動的に切断、close code 1006 (異常終了)

よくある質問

WebSocketテスターは何をしますか?

任意のws://またはwss://エンドポイントに接続し、メッセージを送受信し、プロトコル交換を検査できます。開発中のWebSocket API、MQTT-over-WSブローカー、リアルタイムゲームサーバー、チャットシステム、株価フィードのテストに役立ちます。

メッセージは弊社のサーバー経由で送られますか?

いいえ。ブラウザがターゲットホストに直接WebSocket接続を開きます。仲介者なし、こちら側でのログ記録もありません。ターゲットホストは他のクライアントと同様にあなたのIPを見ます。

なぜlocalhostエンドポイントに接続できないのですか?

混合コンテンツのルールです。本ページがHTTPSで配信されている場合、ブラウザはws://(非セキュア)接続をブロックします。ターゲットにwss://を使うか、ローカルテスト用に本ページを通常HTTPで実行してください。ブラウザのコンソールに正確な拒否理由が表示されます。

バイナリデータを送信できますか?

はい。ほとんどのビルドでテキストとバイナリフレームに対応しています。バイナリ入力は通常Base64または16進数で、本ページが送信前にデコードします。バイナリレスポンスの表示はデフォルトで16進数またはBase64を使用します。

カスタムヘッダーを追加するにはどうすればよいですか?

ブラウザのWebSocket APIはカスタムヘッダーを許可していません。これはWebプラットフォームの制限です。設定できる唯一のヘッダーはSec-WebSocket-Protocol(サブプロトコル)です。Bearerトークン認証にはクエリパラメータか最初のメッセージでの認証を使用してください。一部のサーバーはCookieを受け付けます。

圧縮や拡張機能をテストできますか?

ブラウザはper-message-deflateを通知するサーバーと自動的にネゴシエートします。本ページは通常、ネゴシエートされた拡張を表示します。カスタム拡張はテストできません。ブラウザがそのレベルの制御を公開していないためです。

なぜ接続が頻繁に切れるのですか?

よくある原因は、サーバーのアイドルタイムアウト(多くの場合30〜120秒)、プロキシ/ロードバランサーのタイムアウト、ネットワークの中断、ノートPCのスリープなどです。最新のWebSocketにはping/pongハートビートが必要です。サーバーがpingを送っているか確認するか、クライアントから定期的にメッセージを送ってください。