Debug di WebSocket in Google Chrome


213

C'è un modo, o un'estensione, che mi permette di guardare il "traffico" che passa attraverso un WebSocket? Ai fini del debug, vorrei vedere le richieste / risposte del client e del server.

Risposte:


250

Gli strumenti per sviluppatori di Chrome ora hanno la possibilità di elencare i frame WebSocket e anche di ispezionare i dati se i frame non sono binari.

Processi:

  1. Avvia gli strumenti per sviluppatori Chrome
  2. Carica la tua pagina e avvia le connessioni WebSocket
  3. Fai clic sulla scheda Rete .
  4. Seleziona la connessione WebSocket dall'elenco a sinistra (avrà lo stato di "101 Protocolli di commutazione".
  5. Fai clic sulla sottoscheda Messaggi . I frame binari verranno visualizzati con una lunghezza e un timestamp e indicheranno se sono mascherati. Le cornici di testo mostreranno anche il contenuto del payload.

Se la tua connessione WebSocket utilizza frame binari, probabilmente vorrai comunque utilizzare Wireshark per eseguire il debug della connessione. Wireshark 1.8.0 ha aggiunto il supporto per dissettori e filtri per WebSocket. Un'alternativa può essere trovata in questa altra risposta .


1
Sapresti usare Wireshark per farlo? Non l'ho mai usato davvero, e sembra mostrare tutto il traffico di rete, e mostra i pacchetti grezzi.
Mellowsoon,

2
È possibile limitare l'acquisizione a una singola porta utilizzando i filtri di acquisizione . In alternativa, dopo aver ottenuto un'acquisizione, dovresti essere in grado di fare clic con il pulsante destro del mouse su un frame acquisito che fa parte della sessione e selezionare l'opzione per mostrare solo quella sessione.
Kanaka,

1
Sfortunatamente usare WireShark usando localhost su Windows richiede di saltare attraverso i cerchi per farlo funzionare. Vedi wiki.wireshark.org/CaptureSetup/Loopback
Greg Woods

2
Di recente ho scritto un articolo su CodeProject, che mostra come eseguire il debug / ispezionare il traffico WebSocket con Fiddler. codeproject.com/Articles/718660/…
engineforce

1
@NiCkNewman sì, è un campo a 7 bit che indica la lunghezza in byte del payload. Tuttavia, se il valore del campo è 126 o 127, i successivi 16 o 64 bit sono rispettivamente la lunghezza del payload in byte. Vedi la descrizione del campo della lunghezza nella specifica: tools.ietf.org/html/rfc6455#section-5.2 (è abbastanza facile da grok). È un po 'strano, ma rende i messaggi brevi molto efficienti (solo un'intestazione di 2 byte).
Kanaka,

72

Chrome Canary e Chromium ora dispongono della funzione di ispezione della cornice dei messaggi WebSocket. Ecco i passaggi per testarlo rapidamente:

  1. Passare alla demo di WebSocket Echo , ospitata sul sito websocket.org .
  2. Attiva gli Strumenti per sviluppatori di Chrome.
  3. Fare clic su Rete e per filtrare il traffico mostrato da Dev Tools, fare clic su WebSocket .
  4. Nella demo di Echo, fai clic su Connetti . Nella scheda Intestazioni di Google Dev Tool puoi controllare l'handshake di WebSocket.
  5. Fai clic sul pulsante Invia nella demo di Echo.
  6. QUESTO PASSAGGIO È IMPORTANTE : per visualizzare i frame WebSocket negli Strumenti per sviluppatori di Chrome, sotto Nome / Percorso, fai clic sulla voce echo.websocket.org, che rappresenta la tua connessione WebSocket. Questo aggiorna il pannello principale sulla destra e fa apparire la scheda Cornici WebSocket con il contenuto effettivo del messaggio WebSocket.

Nota : ogni volta che invii o ricevi nuovi messaggi, devi aggiornare il pannello principale facendo clic sulla voce echo.websocket.org a sinistra.

Ho anche pubblicato i passaggi con schermate e video .

Il mio libro recentemente pubblicato, The Definitive Guide to HTML5 WebSocket , ha anche un'appendice dedicata che copre i vari strumenti di ispezione, inclusi Chrome Dev Tools, Chrome net-internals e Wire Shark.


3
Fai attenzione quando pubblichi copia e incolla le risposte testuali / testuali a più domande, queste tendono ad essere contrassegnate come "spam" dalla community. Se lo stai facendo, di solito significa che le domande sono duplicate, quindi segnalale come tali.
Kev

2
Grazie per il passaggio 6! Avevo saputo del filtro WebSocket nella scheda Rete, ma ero frustrato dal fatto che sembrava catturare solo i miei primi messaggi. Sai se esiste un modo per renderlo consapevole di una connessione socket Web che era aperta prima di aprire la scheda?
Bryan Head,

Bryan - Non credo che tu possa farlo oggi.
Peter Moskovits,

@PeterMoskovits, forse, conosci un modo per ispezionare i contenuti dei frame binari in Chrome? Attualmente vedo solo la sua lunghezza!
Howie,

@Howie Non puoi farlo con Chrome. Puoi usare WireShark per questo. Il nostro nuovo libro, The Definitive Guide to HTML5 WebSocket offre anche una rapida introduzione a WireShark. amazon.com/Definitive-Guide-HTML5-WebSocket-Apress/dp/…
Peter Moskovits

52

Sembrano cambiare continuamente roba in Chrome, ma ecco cosa funziona adesso :-)

  • Per prima cosa devi fare clic sul pulsante rosso di registrazione o non otterrai nulla.

  • Non ho mai notato WSprima, ma filtra le connessioni socket web.

  • Selezionalo e poi puoi vedere i frame che ti mostreranno messaggi di errore ecc.

inserisci qui la descrizione dell'immagine


Non mi piace come quel JSON sia formattato lì brutto. Nessuna formattazione in pratica.
sabato

1
Questo è il protocollo signalR. Riprendilo con Microsoft 😜
Simon_Weaver

1
felice di vedere almeno questa risposta è ancora buona quattro anni dopo: p
Stu Thompson,

1
@StuThompson sì - i miei voti continuano ad accumularsi :-)
Simon_Weaver il

41

Se non hai una pagina che accede al WebSocket, puoi aprire la console di Chrome e digitare il tuo JavaScript in:

var webSocket = new WebSocket('ws://address:port');
webSocket.onmessage = function(data) { console.log(data); }

Questo aprirà il socket Web in modo da poterlo vedere nella scheda di rete e nella console.


Grazie! Inoltre: la pagina che apri deve avere la stessa origine del tuo websocket. Se provi ad aprire gli strumenti di sviluppo di Chrome su un'origine diversa (o anche la nuova scheda) e quindi a connetterti al tuo websocket, riceverai un errore di autorizzazione.
Dan Esparza,

C'è un modo per risolvere questo problema?
not2qubit

37

Le altre risposte riguardano lo scenario più comune: guardare il contenuto dei frame (Strumenti per sviluppatori -> scheda Rete -> Fare clic con il tasto destro del mouse sul collegamento websocket -> frame).

Se vuoi sapere qualche informazione in più, come quali socket sono attualmente aperti / inattivi o essere in grado di chiuderli, troverai questo URL utile

chrome://net-internals/#sockets

10

Sono disponibili 3 opzioni: Chrome (tramite Strumenti per sviluppatori -> scheda Rete), Wireshark e Fiddler (tramite la scheda Registro), tuttavia sono tutti molto semplici. Se hai un volume di traffico molto elevato o ogni frame è molto grande, diventa molto difficile usarli per il debug.

È possibile tuttavia utilizzare Fiddler con FiddlerScript per ispezionare il traffico WebSocket nello stesso modo in cui si immette il traffico HTTP. Pochi vantaggi di questa soluzione sono che puoi sfruttare molte altre funzionalità di Fiddler, come ispettori multipli (HexView, JSON, SyntaxView), confrontare i pacchetti e trovare pacchetti, ecc.Ispeziona il traffico WebSocket

Si prega di fare riferimento al mio articolo recentemente scritto su CodeProject, che mostra come eseguire il debug / ispezionare il traffico WebSocket con Fiddler (con FiddlerScript). http://www.codeproject.com/Articles/718660/Debug-Inspect-WebSocket-traffic-with-Fiddler


5

Sto pubblicando questo dato che Chrome cambia molto, e nessuna delle risposte era abbastanza aggiornata.

  1. Apri gli strumenti di sviluppo
  2. AGGIORNA LA TUA PAGINA (in modo che la connessione WS venga acquisita dalla scheda di rete)
  3. Fai clic sulla tua richiesta
  4. Fai clic sulla sottoscheda "Cornici"
  5. Dovresti vedere qualcosa del genere:

inserisci qui la descrizione dell'immagine


4

Risposta breve per Chrome versione 29 e successive:

  1. Apri il debugger, vai alla scheda "Rete"
  2. Carica pagina con websocket
  3. Fare clic sulla richiesta del websocket con la risposta di aggiornamento dal server
  4. Seleziona la scheda "Cornici" per vedere i frame dei websocket
  5. Fare di nuovo clic sulla richiesta del websocket per aggiornare i frame

1
Sembra che funzioni, tranne che è fastidioso che smetta di funzionare se ti disconnetti e ti riconnetti all'URL del websocket (ad es. Su websocket.org/echo.html ), nel qual caso devi aggiornare la pagina! :(
matanster

3

Gli strumenti di sviluppo di Chrome consentono di visualizzare la richiesta di stretta di mano che rimane in sospeso durante la connessione aperta, ma non riesco a vedere il traffico per quanto ne so. Tuttavia puoi annusarlo per esempio.


2

Ho usato l'estensione di Chrome chiamata Simple WebSocket Client v0.1.3 pubblicata dall'utente hakobera. È molto semplice nel suo utilizzo in cui consente l'apertura di socket Web su un determinato URL, l'invio di messaggi e la chiusura della connessione socket. È molto minimalista.


2

Per quanto riguarda uno strumento che ho iniziato a utilizzare, suggerisco firecamp È come Postman, ma supporta anche websocket e socket.io.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.