WebSocket-Tester: Verbinden, senden und Frames online protokollieren | We.Inc
Kostenloser Online-WebSocket-Tester. Öffne eine ws://- oder wss://-Verbindung aus deinem Browser, sende Text oder JSON, verfolge jede Nachricht und lies am Ende den Close-Code.
WebSocket-Tester
Füge eine wss://- oder ws://-Adresse ein, klicke auf Verbinden, und dieser Tester öffnet einen echten WebSocket aus deinem eigenen Browser. Schreib eine Nachricht, sende sie, und jeder ausgehende und eingehende Frame landet in einem Protokoll mit Zeitstempel. Wenn der Socket endet, siehst du den Close-Code, den Grund und ob der Schließ-Handshake sauber abgeschlossen wurde.
Was jede readyState-Zahl bedeutet
Wert
Konstante
Bedeutung
CONNECTING
Erstellt, Handshake noch nicht abgeschlossen
OPEN
Bereit: send() funktioniert jetzt
CLOSING
Der Schließ-Handshake hat begonnen
CLOSED
Geschlossen, oder die Verbindung wurde nie geöffnet
Nichts davon läuft über unsere Server. Die Verbindung öffnet das WebSocket-Objekt, das in den Browser-Tab eingebaut ist, in dem du das gerade liest. Der Server sieht also deinen Browser, deine IP-Adresse und den Origin dieser Seite, https://we.inc. Ein Server, der den Origin-Header prüft, kann die Verbindung ablehnen. Da diese Seite über https ausgeliefert wird, nimm lieber eine wss://-Adresse, denn eine einfache ws://-Adresse kann der Browser als unsicher blockieren.
Gib die Serveradresse ein. Sie muss mit ws://, wss://, http:// oder https:// beginnen und darf kein #-Fragment enthalten.
Füge Sub-Protokolle hinzu, falls der Server sie erwartet, getrennt durch Kommas, und klicke dann auf Verbinden.
Schreib eine Nachricht und klicke auf Senden, oder drücke Ctrl+Enter im Eingabefeld. Aktiviere die JSON-Option, um vor dem Senden zu prüfen, ob sich der Text parsen lässt.
Lies das Protokoll: Pfeile zeigen die Richtung, und der Close-Eintrag zeigt den Code, den Grund und das wasClean-Flag.
Klicke auf Schließen, um die Sitzung mit deinem eigenen Code (1000 oder etwas zwischen 3000 und 4999) und einem kurzen Grund zu beenden.
Sofort mit 1006 und ohne Grund geschlossen? Der Handshake ist fehlgeschlagen, bevor ein Frame übertragen wurde. Prüfe Adresse, Port, TLS und ob der Server fremde Origins ablehnt.
Browser verbergen Handshake-Details absichtlich vor Skripten, daher sagt das error-Event nie, warum. Öffne in den Entwicklertools den Network-Tab und filtere nach WS, um den HTTP-Status des Upgrades zu sehen.
Browser behandeln localhost und 127.0.0.1 als vertrauenswürdige Adressen, daher ist ws://localhost:PORT der einfachste Weg, einen Server auf deinem eigenen Rechner zu testen.
Binäre Frames kommen standardmäßig als Blob-Objekte an. Dieser Tester zeigt ihre Größe in Bytes an, statt sie auszugeben.
Halte Close-Gründe kurz: Der Browser wirft einen SyntaxError, wenn der Grund als UTF-8 kodiert länger als 123 Bytes ist.
Häufige Fragen
Warum schlägt meine Verbindung hier fehl, funktioniert aber in meiner eigenen App?
Die übliche Ursache ist eine Origin-Prüfung. Deine App verbindet sich von ihrem eigenen Origin aus, diese Seite dagegen von https://we.inc. Akzeptiert der Server nur bestimmte Origins, lehnt er den Handshake ab, und der Browser meldet Close-Code 1006. Probiere außerdem die wss://-Form der Adresse, da diese Seite selbst über https ausgeliefert wird.
Werden meine Daten an We.Inc gesendet?
Nein. Die Seite erstellt nur einen Socket in deinem Tab und schreibt in ein Protokoll im Arbeitsspeicher. Nachrichten gehen direkt zwischen deinem Browser und dem Server, den du eingegeben hast. Neu laden leert das Protokoll.
Kann ich eigene Header wie Authorization setzen?
Nicht aus einem Browser. Der WebSocket-Konstruktor nimmt nur eine URL und eine optionale Liste von Sub-Protokollen entgegen. Server, die ein Token brauchen, lesen es meist aus einem Query-String, einem Cookie oder der ersten Nachricht nach dem Verbindungsaufbau.
Warum kann ich mit diesem Tool keinen Ping senden?
Die WebSocket-Schnittstelle des Browsers hat nur send() und close() als Methoden. Ping und Pong sind Kontroll-Frames, die der Browser selbst beantwortet, wenn ein Server ihn anpingt, daher sehen Seitenskripte sie nie. Sende eine normale Textnachricht, wenn dein Server einen Heartbeat auf Anwendungsebene nutzt.
Welche Close-Codes kann ich senden?
Skripte dürfen an close() nur 1000 oder einen Code von 3000 bis 4999 übergeben. Jede andere Zahl wirft einen InvalidAccessError. Codes im Bereich 1001 bis 1015 setzen Browser und Server selbst.
Was passiert, wenn du auf Verbinden klickst
Der Browser sendet eine gewöhnliche HTTP-Anfrage mit Upgrade: websocket, einem zufälligen Sec-WebSocket-Key und einem Origin-Header. Ein bereitwilliger Server antwortet mit Status 101 Switching Protocols und einem Sec-WebSocket-Accept-Wert, der aus diesem Key abgeleitet ist. Ab dann überträgt dieselbe TCP-Verbindung Frames in beide Richtungen.
Jeder Versuch endet entweder mit einem open-Event oder einem close-Event. Siehst du close ohne open, war das Upgrade nie erfolgreich, und der Fehler liegt dann bei der Adresse, dem Netzwerk oder den Handshake-Regeln des Servers.
Das close-Event lesen
Der Close-Eintrag im Protokoll enthält drei Dinge. code ist die Zahl aus der Tabelle unten. reason ist ein beliebiger Text, den die andere Seite gesendet hat, oft leer. wasClean ist nur dann true, wenn beide Seiten Close-Frames ausgetauscht haben, false bedeutet also meist, dass das Netzwerk abgebrochen ist oder der Server abgestürzt ist.
WebSocket-Close-Codes
Der Bereich 1000 bis 1015 ist für das Protokoll selbst definiert. 3000 bis 3999 ist bei der IANA für Bibliotheken und Frameworks registriert, und 4000 bis 4999 steht für die private Nutzung zwischen deinem eigenen Client und Server frei.
Close-Codes und was sie dir sagen
Code
Name
Was er meistens bedeutet
Normal Closure
Die Arbeit ist erledigt und der Socket wurde absichtlich geschlossen
Going Away
Der Server fährt herunter oder die Seite wurde verlassen
Protocol error
Eine Seite hat die Framing-Regeln verletzt
Unsupported Data
Daten eines Typs, den der Endpunkt nicht annehmen kann, etwa binäre Daten an einen reinen Text-Server
No Status Received
Reserviert: Ein Close-Frame kam ohne Code an
Abnormal Closure
Reserviert: überhaupt kein Close-Frame, oft ein fehlgeschlagener Handshake oder ein abgebrochenes Netzwerk
Invalid frame payload data
Eine Nachricht enthielt inkonsistente Daten, zum Beispiel Text, der kein UTF-8 ist
Policy Violation
Eine allgemeine Ablehnung, wenn 1003 und 1009 nicht passen
Message Too Big
Ein Frame war größer, als der Endpunkt akzeptiert
Mandatory Ext.
Der Client wollte eine Erweiterung, der der Server nicht zugestimmt hat
Internal Error
Der Server ist auf einen unerwarteten Zustand gestoßen
Service Restart
Der Server startet neu
Try Again Later
Ein vorübergehender Zustand wie Überlastung
Bad Gateway
Ein Proxy hat eine ungültige Antwort vom Upstream-Server erhalten
TLS handshake
Reserviert: Der TLS-Handshake ist fehlgeschlagen, zum Beispiel wegen eines nicht vertrauenswürdigen Zertifikats
3000 bis 3999
Registriert
Von Bibliotheken und Frameworks definiert
4000 bis 4999
Private Nutzung
Was auch immer dein Client und Server vereinbaren
Derselbe Client in wenigen Zeilen JavaScript
Minimaler Browser-Client
Genau das macht der Tester unter der Haube: öffnen, jede Nachricht protokollieren und den Close-Code melden.
Sub-Protokolle (optional, durch Kommas getrennt)
Verbinden
Schließen
Close-Code
Close-Grund
Nachricht
Senden
Ctrl+Enter sendet
Prüfen, ob die Nachricht gültiges JSON ist
Protokoll leeren
Status: {v}
Frame-Protokoll
Noch nichts da. Verbinde dich mit einem Server, um das Protokoll zu starten.
Verbunden. Vom Server gewähltes Sub-Protokoll: {v}
Geschlossen mit Code {n}, Grund "{v}", wasClean {c}
Error-Event: Der Browser sagt nicht, warum. Prüfe den Network-Tab.
Der Browser hat diese Adresse abgelehnt: {v}
Nutze 1000 oder eine Zahl von 3000 bis 4999.
Der Grund ist {n} Bytes lang, das Limit liegt bei 123.