Analisi PCAP non riuscita dell'aggiornamento WebSocket: 101 protocolli di commutazione, intestazioni proxy, TLS e interruzioni di connessione
Come risolvere gli errori di aggiornamento WebSocket con acquisizioni di pacchetti, inclusi HTTP 101, intestazioni di aggiornamento, intestazioni di connessione, rimozione proxy, TLS, reimpostazioni e timeout di inattività.
Gli errori WebSocket spesso si nascondono dietro messaggi generici del browser o dell'applicazione: "Connessione WebSocket non riuscita", "Codice di risposta imprevisto", "connessione chiusa prima di ricevere una risposta di handshake", "Protocolli di commutazione 101 mancanti" o "socket disconnesso". Gli utenti cercano "Errore aggiornamento WebSocket pcap", "Protocolli di commutazione 101 non restituiti", "Intestazioni proxy websocket nginx" e "Reimpostazione connessione WebSocket" quando HTTP sembra funzionare ma il traffico in tempo reale no." L'acquisizione di un pacchetto può mostrare se la richiesta di aggiornamento HTTP è stata inviata, se il server ha restituito "101 Switching Protocols", se un proxy ha rimosso le intestazioni richieste, se TLS è riuscito e se la connessione si è interrotta dopo l'aggiornamento.
PCAP Surgery è utile perché le tracce WebSocket spesso necessitano della conservazione sia dell'handshake HTTP che della sequenza temporale TCP post-aggiornamento.
Che aspetto ha un aggiornamento WebSocket sano
Un client invia una richiesta HTTP con intestazioni di aggiornamento:
GET /socket HTTP/1.1
Host: example.com
Upgrade: websocket
Connection: Upgrade
Sec-WebSocket-Key: ...
Sec-WebSocket-Version: 13
The server replies:
HTTP/1.1 101 Switching Protocols
Upgrade: websocket
Connection: Upgrade
Sec-WebSocket-Accept: ...
Successivamente, la connessione non è più il normale traffico di richiesta/risposta HTTP. Trasporta frame WebSocket.
Errori comuni di aggiornamento
Le cause comuni includono:
- Il proxy rimuove l'intestazione "Upgrade".
- Il proxy rimuove o riscrive
Connessione: Aggiornamento. - Il percorso backend non supporta WebSocket.
- La terminazione TLS invia la richiesta all'upstream sbagliato.
- Il comportamento di aggiornamento da HTTP/2 a HTTP/1.1 non è configurato correttamente.
- Il reindirizzamento dell'autenticazione avviene invece di 101.
- Il backend restituisce 400, 403, 404, 426, 502 o 504.
- La connessione viene ripristinata dopo l'aggiornamento.
- Il timeout di inattività chiude il WebSocket silenzioso.
Il codice di stato e le intestazioni sono importanti.
Problemi di intestazione proxy
I proxy inversi devono inoltrare correttamente le intestazioni di aggiornamento WebSocket. Se il backend non vede mai Upgrade: websocket, potrebbe trattare la richiesta come un normale HTTP.
Prova del pacchetto:
- La richiesta da client a proxy include intestazioni di aggiornamento.
- La richiesta proxy-to-backend ne è sprovvista.
- Il backend restituisce la normale risposta HTTP anziché 101.
Si tratta di un problema di configurazione del proxy, non di un bug del client WebSocket.
TLS e SNI
Per WebSocket sicuro (wss://), TLS avviene prima dell'aggiornamento HTTP. Se TLS fallisce, l'handshake WebSocket non inizia mai. Conserva DNS, TCP, TLS ClientHello, SNI e qualsiasi avviso o ripristino TLS.
Non diagnosticare le intestazioni di aggiornamento finché non viene dimostrato il percorso TLS.
La connessione si interrompe dopo 101
A volte l'aggiornamento ha esito positivo, quindi la connessione si chiude. Questo è un fallimento diverso.
Cercare:
- Mittente FIN o RST.
- Durata del timeout di inattività.
- Attività ping/pong WebSocket.
- Timeout lettura proxy.
- Ritrasmissioni TCP.
- Finestra zero.
- Riavvio del processo di backend.
Se il calo avviene a un intervallo fisso, è probabile che venga applicata una politica di timeout.
Checklist
Utilizza questo flusso di lavoro:
- Preserva la connessione DNS e TCP.
- Verifica l'handshake TLS per "wss://".
- Esaminare le intestazioni della richiesta di aggiornamento del client.
- Ispeziona lo stato della risposta del server.
- Confermare "101 Switching Protocols" se previsto.
- Confronta le richieste client-proxy e proxy-backend.
- Cerca reindirizzamenti o risposte di autenticazione.
- Se l'aggiornamento ha esito positivo, controllare FIN/RST/timeout post-aggiornamento.
- Conserva i tempi di ping/pong WebSocket se visibili.
- Tagliare solo dopo aver mantenuto la stretta di mano completa.
Diagnosi finale
Gli errori di aggiornamento di WebSocket sono in genere problemi di handshake HTTP o di inoltro proxy finché non viene dimostrato "101 Switching Protocols". Dopo l'aggiornamento, gli errori diventano timeout TCP di lunga durata, reimpostazione o problemi del protocollo dell'applicazione.
PCAP Surgery aiuta a preservare entrambe le fasi in modo che un vago errore WebSocket possa essere ricondotto alle intestazioni, al comportamento del proxy, a TLS, alla risposta del backend o alla durata della connessione.