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à.

L'aggiornamento del websocket non è riuscito, 101 protocolli di commutazione, web socket proxy, aggiornamento della connessione, analisi pcap, http troubleshooting

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:

  1. Preserva la connessione DNS e TCP.
  2. Verifica l'handshake TLS per "wss://".
  3. Esaminare le intestazioni della richiesta di aggiornamento del client.
  4. Ispeziona lo stato della risposta del server.
  5. Confermare "101 Switching Protocols" se previsto.
  6. Confronta le richieste client-proxy e proxy-backend.
  7. Cerca reindirizzamenti o risposte di autenticazione.
  8. Se l'aggiornamento ha esito positivo, controllare FIN/RST/timeout post-aggiornamento.
  9. Conserva i tempi di ping/pong WebSocket se visibili.
  10. 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.