Qué significa
El servidor acepta cambiar al protocolo que el cliente pidió en la cabecera Upgrade, casi siempre WebSocket. Tras esta respuesta la conexión habla el nuevo protocolo.
Causas habituales
- Un handshake de WebSocket tuvo éxito
- El cliente pidió pasar a h2c (HTTP/2 sin cifrar)
- Se aceptó el cambio a un protocolo propio
Cómo solucionarlo
Si eres el cliente o visitante
101 significa éxito para WebSocket. Si esperabas 101 y recibes 200 o 400, comprueba que la URL apunte al endpoint de WebSocket y que los proxies reenvíen las cabeceras Upgrade y Connection.
Si administras el sitio o la API
Detrás de nginx o de un balanceador, pasa Upgrade y Connection explícitamente (proxy_set_header Upgrade $http_upgrade; Connection "upgrade") y amplía los tiempos de inactividad para sockets de larga duración.
Respuesta de ejemplo
HTTP/1.1 101 Switching Protocols
Upgrade: websocket
Connection: Upgrade
Sec-WebSocket-Accept: s3pPLMBiTxaQ9kYGzzhZRbK+xOo= Especificación
Preguntas frecuentes
› ¿Por qué mi WebSocket devuelve 400 en lugar de 101?
Faltan o se alteraron las cabeceras del handshake, a menudo por un proxy que elimina Upgrade/Connection, o la Sec-WebSocket-Key o la versión no son válidas.
› ¿HTTP/2 usa 101?
Solo en el raro cambio a h2c sin cifrar. Los navegadores negocian HTTP/2 mediante TLS ALPN, y HTTP/2 no tiene respuesta 101.