WebSocketオンラインテストツール
オンラインWebSocket接続テスト、メッセージ送受信デバッグツール
WebSocketとは?
WebSocketは単一のTCP接続上で全二重通信を行うプロトコルです。HTTPとは異なり、WebSocketは一度接続を確立すると、クライアントとサーバーはいつでも相互にデータを送信でき、接続を繰り返し確立する必要がありません。WebSocketはリアルタイムチャット、オンラインゲーム、株式相場、協調編集などリアルタイムデータ交換が必要な場面でよく使用されます。
使い方
使い方
- URL欄にWebSocketサーバーアドレスを入力してください(ws://またはwss://)
- オプション:サブプロトコルを入力します(複数ある場合はカンマ区切り)
- 「接続」をクリックしてWebSocket接続を確立します
- 入力欄にメッセージ内容を入力します
- メッセージタイプ(テキストまたはJSON)を選択してください。JSONタイプの場合は形式が自動検証されます
- 「送信」をクリックするか、Ctrl + Enterを押してメッセージを送信します
- 送受信したメッセージはメッセージリストに表示され、クリックでコピーできます
接続のヒント
- HTTPSページからテストする場合はwss://を使用してください。ブラウザはHTTPSのオリジンから安全でないws://接続をブロックすることがよくあります。
- 切断、ページ再読み込み、エンドポイント切り替えの前に、重要なメッセージログをエクスポートまたはコピーしてください。
利用シーン
仕組み
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を送っているか確認するか、クライアントから定期的にメッセージを送ってください。