WebSocket stabilisce un canale bidirezionale e permanentemente aperto tra browser e server. Dashboard di dati in tempo reale, applicazioni di chat e notifiche in tempo reale usano questa tecnologia. Se funzioni o meno tramite proxy dipende dal tipo di proxy e dalla sua configurazione.
Come si avvia una connessione WebSocket?
WebSocket non è un protocollo a sé stante: inizia con una richiesta HTTP e Upgrade cambia protocollo tramite questo meccanismo:
Dopo la risposta 101 la connessione cessa di essere HTTP e iniziano a scorrere i frame WebSocket. Per questo ogni livello intermedio deve comprendere l'upgrade.
Comportamento in base al tipo di proxy
La combinazione più sicura wss:// + tunnel CONNECT. Essendo cifrato, il proxy non può intervenire sul contenuto né compromettere l'upgrade.
Se devi far girare tramite proxy un'applicazione che usa WebSocket wss:// scegli la versione cifrata. Poiché il tunnel del proxy trasporta solo byte, non può in alcun modo interferire con il processo di upgrade e i problemi di compatibilità scompaiono.
Perché alcuni proxy lo compromettono?
In chiaro ws:// il proxy legge la richiesta. I proxy datati o configurati in modo rigido possono commettere questi errori:
L'ultima riga sfugge spesso: se usi un rotating proxy, la connessione WebSocket cade quando cambia l'IP. In questo scenario IP statico dedicato.
Evitare le disconnessioni: ping/pong
I proxy e i router intermedi chiudono le connessioni su cui non transitano dati per lungo tempo. Il protocollo WebSocket definisce i frame ping/pong proprio per questa situazione. La maggior parte delle librerie lo fa automaticamente, ma potresti dover regolare l'intervallo:
Mantieni l'intervallo di ping inferiore al timeout di inattività del proxy. 20-25 secondi sono un valore sicuro per la maggior parte delle configurazioni.
WebSocket con SOCKS5
Poiché SOCKS5 non esamina affatto i dati applicativi, trasporta i WebSocket in modo naturale. Handshake di upgrade, cambio di protocollo e flusso di frame: per SOCKS5 è tutto solo un flusso di byte. Questo rende SOCKS5 l'opzione più sicura negli scenari WebSocket.
Per il comportamento generale di SOCKS5 come funziona SOCKS5 il nostro articolo dedicato.
Connessioni di lunga durata e stabilità dell'IP
WebSocket è per natura di lunga durata, mentre la rotazione cerca di cambiare IP. Le due cose entrano in conflitto. In questo scenario servono un IP statico o una durata sticky molto lunga.
Strategia di riconnessione
Se usi WebSocket tramite proxy, progetta la disconnessione come condizione attesa e non come eccezione:
- Backoff esponenziale: attesa crescente di 1, 2, 4, 8 secondi.
- Aggiungi jitter: Evita che molti client caduti nello stesso momento tornino tutti insieme.
- Sincronizzazione dello stato: dopo la riconnessione, richiedi i messaggi persi.
- Limite massimo di tentativi: non entrare in un ciclo infinito; avvisa l'utente.
- Monitora la salute della connessione: se la frequenza delle disconnessioni aumenta, rivedi la configurazione del proxy.
Riepilogo
WebSocket inizia con il meccanismo di upgrade HTTP e per questo i livelli intermedi devono comprendere il cambio di protocollo. wss:// Usare la versione cifrata e optare per un tunnel CONNECT o per SOCKS5 elimina in larga misura i problemi di compatibilità. Le connessioni di lunga durata entrano in conflitto con i rotating proxy; in questo scenario serve un IP statico. Mantieni l'intervallo ping/pong inferiore al timeout del proxy e progetta una solida strategia di riconnessione. Per le opzioni con IP statico ISP proxy del nostro sito.