Skip to content

WebSocket オンラインテスト(ws/wss クライアント)

ブラウザで WebSocket をテスト。受信したバイナリは HEX で表示し、HEX/Base64 から本物のバイナリフレームを送信。切断時はクローズコードと理由、確認リストを表示します。ws:// と wss:// に対応し、メッセージは当サイトを経由せずサーバーへ直接届きます。

ブラウザで動作 無料
ブラウザは入力したサーバーへメッセージを直接送ります。go-tools のサーバーは経由しません。
入力例: (第三者のエコーサービス:可用性は保証されず、メッセージはその第三者に送られます)
未接続

ここにメッセージが表示されます。「接続」を押すまで、WebSocket 接続は開きません。

定期送信(アプリケーションのハートビート)
ms

タイマーで通常のテキストメッセージを送ります。プロトコルレベルの ping フレームではありません。Web ページは ping/pong フレームを送ることも見ることもできません。想定していないサーバーは接続を閉じる可能性があるため、初期状態ではオフです。

接続、テキストとバイナリのメッセージ、クローズコード、ハンドシェイクの失敗、接続タイムアウト、Socket.IO のハンドシェイク、ハートビート、再接続、10,000 件のメッセージの一斉受信は、ローカルの WebSocket サーバーに対してエンドツーエンドでテストしています。このページに記載したブラウザの挙動は、2026年10月に Chromium、Firefox、WebKit で実測したものです。 — Go Tools エンジニアリングチーム · Oct 13, 2026

Go Tools エンジニアリングチームが構築し、検証しています。

WebSocket テスト:すぐ分かる答え

この HTTPS ページから ws://localhost に接続できますか?

Chrome ならローカルネットワークへのアクセスを許可すれば可能 ブラウザによって異なります(2026年10月時点)。Chrome 147 以降は、ローカルネットワーク上のデバイスへのアクセスをこのページに許可するかを最初に確認します。「許可」を選ぶと、ws://localhost や LAN の IP アドレスへの ws:// に接続できます。Firefox は localhost には直接接続できますが、LAN アドレスはブロックします。Safari は HTTPS ページからの ws:// をブロックします。

接続に失敗しても 1006 としか表示されないのはなぜ?

理由はブラウザが隠している ハンドシェイクが失敗したとき、ブラウザはページに error イベントとクローズコード 1006 しか渡さないよう定められており、HTTP ステータスや理由は伝えません。F12 を押すと、Chrome と Edge のコンソールにサーバーが返したステータスコードが表示されます。

Authorization ヘッダーを追加できますか?

ブラウザはヘッダーを設定できない できません。ブラウザの WebSocket API にはリクエストヘッダーを設定する手段がありません。トークンは URL パラメーター、サブプロトコル、Cookie のうち、サーバーが受け付ける方法で渡してください。

ハートビートは ping フレームですか?

通常のメッセージです いいえ。Web ページはプロトコルレベルの ping/pong フレームを送ることも見ることもできず、サーバーからの ping にはブラウザが自動で応答します。このツールの定期送信は、一定間隔で送る通常のテキストメッセージで、初期状態ではオフです。

Socket.IO サーバーに接続できないのはなぜ?

Socket.IO プリセットを使う Socket.IO は素の WebSocket ではありません。Socket.IO プリセットを選んでください。/socket.io/?EIO=4&transport=websocket に接続し、open パケットに 40 を返し、ping 2 には pong 3 で応答します(Socket.IO v3/v4)。

オンライン WebSocket テストツールとは?

WebSocket テストツールは、WebSocket サーバーに接続して、接続を受け付けるか、何を返してくるかを確かめるためのクライアントです。ws:// または wss:// のアドレスを入力して接続し、テキストやバイナリのメッセージを送って応答を読みます。クライアントのコードを書かずに、バックエンドのエンドポイント、リバースプロキシ、WebSocket で通信する機器を確認する最短の方法です。

このツールはブラウザ内で動きます。接続はブラウザから入力したサーバーへ直接張られ、メッセージは go-tools のサーバーを経由しません。そのぶんブラウザの制約もそのまま受けます。独自のリクエストヘッダーは追加できず、プロトコルレベルの ping フレームも送れません。ハンドシェイクが失敗しても、ブラウザがページに伝えるのはクローズコード 1006 だけで、理由は分かりません。

ブラウザのコンソールだけで試す場合と比べて、次の点が加わります。バイナリメッセージの HEX(または Base64)表示と、HEX・Base64 からの本物のバイナリフレーム送信、JSON の自動整形、クローズコードの解説、接続失敗時の確認リスト、ブラウザがブロックしそうなアドレスへの接続前の警告、そして毎秒約 2,000 件のメッセージでも固まらないログ(実測)です。

09:30:01.204 · Connecting to ws://localhost:8080/ws
09:30:01.219 · Connected · subprotocol: chat
09:30:02.517 → TXT 17 B {"type":"hello"}
09:30:02.531 ← TXT 25 B {"type":"hello","ok":true}
09:30:03.002 → BIN 4 B 48 69 00 FF
09:30:03.010 ← BIN 4 B 48 69 00 FF
09:30:09.880 · Closed · code 4001: application-defined code

WebSocket テストツールの機能

localhost と LAN:接続前にブラウザ別の案内を表示

接続前にアドレスをチェックします。この HTTPS ページからドメイン名への素の ws:// はブロックされるため、その旨を伝えて wss:// を提案します。localhost や LAN の IP アドレスなら、Chrome がローカルネットワークへのアクセス許可を求めること、Firefox と Safari ではどう違うかを示します(2026年10月時点)。

バイナリを HEX で表示し、本物のバイナリで送信

受信したバイナリメッセージは 1 行 16 バイトの HEX、または Base64 で表示します。48 69 00 FF、0x48,0x69、Base64 のいずれかでバイトを入力すると、バイナリメッセージとして送信されます。不正な文字や奇数個の桁は位置付きで指摘され、バイトのプレビューで送信内容を正確に確認できます。

対処につながるクローズコードと失敗表示

切断のたびに、コード、理由の文字列、クローズハンドシェイクが完了したかを表示します。標準コード 1000–1015 には意味を、4000–4999 のアプリケーションコードには注記を添えます。接続が開く前に失敗した場合は、推測ではなく確認リストを表示します。

検索・エクスポートできる高速ログ

メッセージは 1 フレームにつき 1 回まとめて描画するため、当サイトのテストでは毎秒約 2,000 件でもページは固まりません。各エントリには方向、ミリ秒単位のタイムスタンプ、種類、バイト数が付きます。方向での絞り込み、検索、表示の一時停止、直近 N 件の保持、コピー、テキストでのエクスポートができます。

サブプロトコル、タイムアウト、Socket.IO プリセット

サブプロトコルを 1 つ以上(カンマ区切り)要求し、サーバーがどれかを確定したかを確認できます。接続タイムアウトは、サーバーが応答しないハンドシェイクを打ち切ります。Socket.IO プリセットは Engine.IO v4 のハンドシェイクを完了させ、ping にも自動で応答します。

必要なときだけ使うハートビートと再接続

定期送信は指定したメッセージを一定間隔で繰り返し送り、自動再接続は予期しない切断のあと指数バックオフで再試行します。どちらも初期状態ではオフで、指示していないものをツールが勝手に送ることはありません。

WebSocket テストの例:localhost、バイナリ、クローズコード、Socket.IO

ローカルの開発サーバーをテストする

ws://localhost:8080/ws
接続しました
→ TXT 17 B {"type":"hello"}
← TXT 25 B {"type":"hello","ok":true}

Chrome 147 以降では、最初にローカルネットワークへのアクセスを許可するかをブラウザが尋ねるので、「許可」を選びます。Firefox は localhost に直接接続し、Safari はこの HTTPS ページからの ws:// をブロックします(2026年10月時点)。

HEX からバイナリメッセージを送る

48 69 00 FF
→ BIN 4 B 48 69 00 FF

HEX モードでは、テキストの「48 69 00 FF」ではなく、この 4 バイトからなるバイナリメッセージが送られます。Base64 の SGkA/w== でも同じ 4 バイトが送られます。

サーバーからの切断を読み解く

サーバーがコード 4001、理由「token expired」で切断
切断しました · コード 4001:アプリケーション定義のコード · クローズハンドシェイク完了
理由:token expired

4000–4999 のコードはアプリケーションが定義するため、4001 の意味はサーバーのドキュメントで確認します。1000–1015 は標準コードで、ログに意味が表示されます。

Socket.IO サーバーに接続する

プロトコル:Socket.IO v3/v4、アドレス ws://localhost:3000
接続中:ws://localhost:3000/socket.io/?EIO=4&transport=websocket
← 0{"sid":"…","pingInterval":25000,…}
→ 40
← 40{"sid":"…"}

プリセットが Socket.IO のパスとクエリを補い、40 を返してデフォルトの名前空間に参加し、ping 2 には 3 で応答します。イベントは 42["event","data"] の形式で送ります。

WebSocket をオンラインでテストする方法

  1. 1

    サーバーのアドレスを入力する

    ws:// または wss:// のアドレスを入力するか貼り付けます。http:// と https:// はそれぞれ ws:// と wss:// として扱われます。アドレス欄の下の注記を確認してください。ブラウザにブロックされそうなときは警告が出ます。

  2. 2

    必要ならサブプロトコルを追加する

    サーバーによってはサブプロトコル(例:mqtt)が必須です。1 つ以上をカンマ区切りで入力します。接続後、サーバーがどれを確定したかがログに表示されます。

  3. 3

    接続する

    「接続」を押します。Chrome で localhost や LAN アドレスに接続する場合、ローカルネットワークへのアクセスを尋ねられたら「許可」を選びます。接続に失敗したら、表示される確認リストに沿って確認してください。

  4. 4

    メッセージを送受信する

    テキスト、HEX、Base64 から選び、プレビューを確認して Ctrl+Enter を押します。受信した JSON は整形され、バイナリは HEX で表示されます。ログのツールバーでバイナリを Base64 表示に切り替えられます。

  5. 5

    絞り込んで、コピーまたはエクスポートする

    方向で絞り込んだりログを検索したりし、大量に届くときは表示を一時停止します。そのうえで、タイムスタンプ、方向、バイト数付きのテキストとしてログをコピーまたはエクスポートします。

WebSocket 接続のよくあるミス

HTTPS ページからドメイン名への ws://

HTTPS で読み込んだページから、ドメイン名への暗号化されていない ws:// はブラウザにブロックされます(混在コンテンツ)。Chrome と Firefox は即座に SecurityError で拒否します。wss:// を使ってください。Chrome で LAN のサーバーに接続するなら IP アドレスで指定します(ローカルネットワークへのアクセスの許可が必要です)。

✗ 誤り
ws://api.example.com/ws
✓ 正しい
wss://api.example.com/ws

テキストモードで HEX を入力した

テキストモードでは、48 69 は 4、8、スペース、6、9 という文字として送られます。HEX に切り替えると、0x48 0x69 の 2 バイトがバイナリメッセージとして送られます。

✗ 誤り
テキストモード:48 69 → TXT 5 B
✓ 正しい
HEX モード:48 69 → BIN 2 B

Socket.IO の URL を素の WebSocket として使った

Socket.IO サーバーはルートパスへの素の WebSocket を拒否し、ハンドシェイクや ping に応答がなければ接続を閉じます。Socket.IO プリセットを使ってください。

✗ 誤り
ws://localhost:3000
✓ 正しい
ws://localhost:3000/socket.io/?EIO=4&transport=websocket

トークンをリクエストヘッダーに入れようとした

ブラウザは WebSocket ハンドシェイクで Authorization ヘッダーを送れません。サーバーが対応していれば、トークンは URL パラメーターかサブプロトコルで渡してください。

✗ 誤り
Authorization: Bearer eyJ…
✓ 正しい
wss://api.example.com/ws?token=eyJ…

オンライン WebSocket テストが役立つ場面

バックエンドのエンドポイントを確認する
新しい WebSocket のルートが応答するか、最初に送ってくるメッセージは何か、不正な入力をどう扱うかを、フロントエンドができる前に確かめられます。
リバースプロキシをデバッグする
Nginx やゲートウェイの背後で、アップグレードが通るか、アイドル状態の接続がどれだけ持つかを確認できます。
IoT とバイナリプロトコル
WebSocket 上でバイナリをやり取りする機器やブローカーのデータを HEX で読み、HEX や Base64 から正確なバイト列を送れます。
クローズコードを再現する
トークンの期限切れやレート制限のときなどに、サーバーが実際に送るクローズコードと理由を確認できます。
大量受信時の描画チェック
サーバーが毎秒約 2,000 件のメッセージ(実測)を送ってきてもページは固まらず、メッセージ数とバイト数のカウンターとともに受信の様子を観察できます。

ブラウザでの WebSocket 接続の仕組み

オープニングハンドシェイク
WebSocket は Upgrade: websocket を含む HTTP リクエストから始まります。リクエストヘッダー(Origin、Sec-WebSocket-Key、Sec-WebSocket-Version: 13、サブプロトコル一覧から作る Sec-WebSocket-Protocol)はブラウザ自身が組み立て、ページが追加することはできません。サーバーが 101 Switching Protocols を返すと、以降は双方がメッセージをやり取りします。
テキストメッセージとバイナリメッセージ
send() に文字列を渡すと UTF-8 でエンコードされたテキストメッセージが、バイト列を渡すとバイナリメッセージが送られます。ページが受け取るのは常にメッセージ全体で、フレーム、フラグメント、マスクは見えません。このツールは binaryType を arraybuffer に設定し、バイナリメッセージが順序どおりに届いて HEX で表示できるようにしています。
エラーに詳細がない理由
WebSocket の標準は、接続が失敗した理由をスクリプトに伝えることをブラウザに禁じています。DNS の失敗、ポートの拒否、証明書エラー、HTTP 401 はどれも同じに見えるため、ページがローカルネットワークを探ることはできません。ページに見えるのは error イベントとクローズコード 1006 です(Firefox は証明書エラーを 1015 として報告します)。
混在コンテンツとローカルネットワークアクセス
HTTPS ページは、公開ホストへの暗号化されていない ws:// を開けません。Chrome 147 以降は WebSocket もローカルネットワークアクセス(Local Network Access)の対象になり、公開ページから localhost やプライベート IP に接続するにはユーザーの許可が必要です。Firefox はループバックアドレスを対象外としていますが、Safari はそうではありません(2026年10月時点)。
クローズコード
クライアントが切断に使えるのは 1000 または 3000–4999 だけで、理由は UTF-8 で最大 123 バイトです。1005(ステータスコードなし)と 1006(異常切断)は通信路には現れず、ブラウザが報告するものです。1015 は TLS の失敗時に一部のブラウザだけが報告します。

WebSocket テストのコツ

自分のマシンの外では wss:// を使う
信頼された証明書を使う暗号化された wss:// なら、どのブラウザでもこのページから公開サーバーに接続でき、URL に含まれるトークンも保護されます。localhost や LAN のアドレスの場合は、Chrome がやはりまずローカルネットワークへのアクセス許可を求めます。素の ws:// は localhost 用にとどめましょう。
ハンドシェイクが失敗したらコンソールを確認する
ページに見えるのは 1006 だけです。Chrome と Edge はコンソールに HTTP ステータスを出力するので、多くの場合、認証、パス、プロキシのどこに問題があるかがすぐに分かります。
サーバー側で Origin を許可する
ブラウザは必ず Origin を送ります。サーバーが Origin をチェックしているなら、テスト中は https://go-tools.org を許可してください。CORS ヘッダーは WebSocket には適用されません。
ping はサーバーから送らせる
プロキシ越しにアイドル接続を維持するには、サーバーから ping フレームを送らせます。ブラウザは自動で応答します。定期送信は、プロトコルがアプリケーションレベルのメッセージを期待する場合にだけ使ってください。
共有するログにトークンを残さない
アドレスにはトークンが含まれていることがよくあります。ツールはアドレスとメッセージをメモリ上にしか保持しませんが、エクスポートしたログやスクリーンショットには含まれます。共有する前に機密情報を削除してください。

WebSocket テストのよくある質問

この HTTPS ページから ws://localhost や LAN のサーバーをテストできますか?
ブラウザによって異なります(2026年10月時点)。Chrome 147 以降は、自分のコンピューターやローカルネットワークへの WebSocket 接続をローカルネットワークアクセスとして扱います。初回はこのサイトに許可するかを尋ね、「許可」を選ぶと ws://localhost、ws://127.0.0.1、192.168.1.10 のような LAN の IP アドレスへの ws:// に接続できます。Chrome では LAN のサーバーを IP アドレスで指定する必要があり、通常のホスト名(.local を除く)はローカルネットワーク内のアドレスに解決される場合でもブロックされます。Firefox は localhost に直接接続できますが、LAN アドレスへの ws:// はブロックします。Safari は HTTPS ページから localhost や LAN への ws:// をブロックします。wss:// は混在コンテンツの規則の影響を受けません。証明書が信頼されていれば、どのブラウザでもこのページから公開サーバーに接続できます。localhost や LAN のアドレスの場合は、ここでも Chrome がまずローカルネットワークへのアクセス許可を求めます。
このページから ws://example.com に接続できないのはなぜですか?
このページは HTTPS で配信されており、ブラウザは HTTPS ページから公開ホストへの暗号化されていない ws:// 接続をブロックします(混在コンテンツ)。Chrome と Firefox は即座に SecurityError で拒否し、ツールはそれを表示します。サーバーの wss:// アドレスを使ってください。素の http で配信される公開サイトにはこのルールはありませんが、最近の Chrome ではそうしたサイトから localhost や LAN にはまったく接続できません。
コード 1006 で接続に失敗しました。何が原因ですか?
1006 が意味するのは、クローズハンドシェイクなしで接続が終わったということだけです。ハンドシェイクが失敗した場合、WebSocket の標準はブラウザに原因をページから隠すよう求めています。401、404、ポートの拒否、証明書エラー、Origin の拒否はどれもまったく同じに見える(Firefox は証明書エラーを 1015 として報告します)ため、ブラウザから直接接続する Web のテストツールでは原因を表示できません。F12 を押してコンソールを開くと、Chrome と Edge はサーバーが返した HTTP ステータスを表示します。このツールは、接続が開く前の失敗と、開いた後の切断を区別し、それぞれのよくある原因を一覧で示します。
Authorization などの独自ヘッダーを追加できますか?
できません。ブラウザの WebSocket API では、Web ページがリクエストヘッダーを設定できません。ブラウザが送るのは決まったヘッダー一式(Origin や、サーバー自身のサイト向けの Cookie を含む)です。サーバーの対応状況に応じて、よく使われる回避策は次のとおりです。wss://host/ws?token=… のように URL にトークンを入れる方法。トークンをサブプロトコルとして渡す方法(使えるのはトークン文字だけなので JWT は使えますが、= や / を含む標準の Base64 は使えません。またサーバーはそのサブプロトコルを返す必要があります)。Cookie を使う方法(ブラウザが確実に送るのはページ自身のサイト向けだけなので、このページからはたいていサーバーに届きません)。Postman などのツールがヘッダーを設定できるのは、ブラウザではないからです。
Postman では動くのに、ここでは動かないのはなぜですか?
Postman やコマンドラインのクライアントは任意のヘッダーを設定でき、通常は Origin を送りません。ブラウザは Authorization ヘッダーを追加できず、常に Origin: https://go-tools.org を送ります。サーバーがヘッダーのトークンを必要としていたり Origin をチェックしていたりすると、ブラウザのハンドシェイクは拒否されます。Origin を許可するか、トークンを別の方法で渡してください。
ハートビートは WebSocket の ping フレームを送りますか?
いいえ。Web ページはプロトコルレベルの ping/pong フレームを送ることも見ることもできません。サーバーが ping を送ると、ブラウザが自動で pong を返します。このツールの定期送信は、{"type":"ping"} のような通常のテキストメッセージを設定した間隔で送るものです。そのメッセージを想定していないサーバーは接続を閉じる可能性があるため、初期状態ではオフです。プロキシ越しにアイドル接続を維持したいなら、サーバーから ping を送らせてください。
Socket.IO サーバーに接続できないのはなぜですか?
Socket.IO は WebSocket の上に載ったプロトコルで、素の WebSocket ではありません。Socket.IO v3/v4 のサーバーは /socket.io/?EIO=4&transport=websocket というパスを期待し、0 で始まる open パケットを送り、デフォルトの名前空間への参加として 40 を待ちます。また ping 2 に pong 3 で応答しないと接続を閉じます。Socket.IO プリセットを選べば、ツールがこれをすべて行います。あとはイベントを 42["event","data"] の形式で送ってください。HTTP ロングポーリングのみに設定されたサーバーは、WebSocket をまったく受け付けません。
1 分ほどで接続が切れるのはなぜですか?
たいていはリバースプロキシのアイドルタイムアウトです。Nginx はデフォルトで、60 秒間データが流れないとプロキシした接続を閉じ(proxy_read_timeout)、ページにはコード 1006 が見えます。タイムアウトを延ばすか、サーバーから ping フレームを送らせてください。Nginx の背後なら、proxy_set_header Upgrade $http_upgrade; と proxy_set_header Connection "upgrade"; でアップグレードが転送されていることも確認しましょう(Nginx 1.29.7 より前は proxy_http_version 1.1; も必要です)。
自己署名証明書の wss:// サーバーに接続するには?
新しいタブで https://同じホスト:ポート/ を開き、証明書の警告を承諾してから、ここに戻って接続します。ブラウザはそのホストとポートの例外を記憶します。ブラウザの保護を弱めることになるので、自分のテストサーバーに対してだけ行ってください。
バイナリメッセージを送受信するには?
送信形式として HEX か Base64 を選びます。HEX は 48 69 00 FF、0x48,0x69、486900FF のいずれも受け付けます。プレビューにバイト列が表示され、不正な文字や奇数個の桁は送信されずに位置付きで指摘されます。受信したバイナリメッセージは 1 行 16 バイトの HEX で表示され、ログのツールバーで Base64 表示に切り替えられます。受信した HEX をテキストとして読むには、16進数 文字列 変換のページに貼り付けてください。
メッセージは go-tools のサーバーを経由しますか?
いいえ。ブラウザは入力したアドレスへ直接接続し、メッセージは当サイトのサーバーを経由しません。また、このツールは「接続」を押すまで WebSocket 接続を開かず、アドレスとメッセージはメモリ上にのみ保持します。ページの URL やブラウザのストレージには保存しません。サイトの他のページと同様、このページでもアクセス解析と広告のスクリプトを読み込みます。
テスト用に使えるサーバーはありますか?
ローカルエコーを使ってください。このページの中で動き、送ったものをすべてそのまま返し、ネットワーク接続は行いません。wss://echo.websocket.org/ のような公開エコーサービスもありますが、これらは第三者のサービスです。可用性は保証されず、メッセージはその第三者に送られます。

cURLコマンドジェネレーター&ビルダー

Web と API

ブラウザでcurlコマンドを作成 — メソッド・ヘッダー・認証・ボディを設定してすぐにコピーできるコマンドを生成。Bearer・POST JSON・ファイルアップロードのプリセットも搭載。無料・プライバシー保護・登録不要。

htpasswd ジェネレーター — bcrypt・Apache MD5(apr1)・Basic認証

Web と API

bcrypt・Apache MD5(apr1)・SHA-1 などで htpasswd エントリーを生成。Apache・nginx・Docker 設定をすぐに貼り付けられる形式で出力。100% ブラウザ完結・アップロード不要。

Open Graph・メタタグ ジェネレーター

Web と API

Open Graph、Twitter Card、SEO メタタグをまとめて生成。Google・Facebook・X のライブプレビュー付き。100% 無料・ブラウザ内処理・登録不要で、コードをそのままコピー&ペーストできます。

nginx location テスター — なぜそのブロックが勝つのか

Web と API

どの nginx location ブロックが選ばれ、他はなぜ負けたのかを表示。=、^~、~、~* の優先順位を検証できる無料オンラインテスター。

オンライン シリアルターミナル(ブラウザ版シリアルモニタ)

Web と API

インストール不要、Chrome や Edge で開くだけのシリアルモニタ。CH340・CP2102・ESP32・Arduino とブラウザでシリアル通信し、テキスト/HEX 送信、一定間隔の繰り返し送信、Modbus CRC-16 の自動付加に対応。文字化けは GBK を検出し、受信済みのデータも表示し直します。

IPv4 サブネット計算ツール

Web と API

IPv4 の IP アドレスや CIDR から、ネットワークアドレス・ブロードキャストアドレス・利用可能ホスト範囲・サブネットマスク・ワイルドカードマスクを即座に計算。RFC 3021 の /31 点対点リンクやサブネット分割表にも対応し、すべてブラウザ内で完結します。