Cosa significa
Il server accetta di passare al protocollo richiesto dal client nell'header Upgrade, quasi sempre WebSocket. Dopo questa risposta la connessione usa il nuovo protocollo.
Cause comuni
- Un handshake WebSocket è riuscito
- Il client ha chiesto un upgrade a h2c (HTTP/2 in chiaro)
- È stato accettato un upgrade a un protocollo personalizzato
Come risolvere
Lato client o visitatore
Per WebSocket 101 significa successo. Se ti aspettavi 101 e ricevi 200 o 400, verifica che l'URL punti all'endpoint WebSocket e che i proxy inoltrino gli header Upgrade e Connection.
Lato gestore del sito o dell’API
Dietro nginx o un load balancer passa esplicitamente Upgrade e Connection (proxy_set_header Upgrade $http_upgrade; Connection "upgrade") e aumenta i timeout di inattività per i socket di lunga durata.
Risposta di esempio
HTTP/1.1 101 Switching Protocols
Upgrade: websocket
Connection: Upgrade
Sec-WebSocket-Accept: s3pPLMBiTxaQ9kYGzzhZRbK+xOo= Specifica
Domande frequenti
› Perché il mio WebSocket restituisce 400 invece di 101?
Gli header dell'handshake mancavano o sono stati alterati, spesso da un proxy che rimuove Upgrade/Connection, oppure Sec-WebSocket-Key o la versione non sono validi.
› HTTP/2 usa il 101?
Solo per il raro upgrade h2c in chiaro. I browser negoziano HTTP/2 tramite TLS ALPN e HTTP/2 non ha una risposta 101.