1xx · Informativos
Código HTTP 101 Switching Protocols: qué significa
El código 101 Switching Protocols indica que el servidor acepta la petición de cambiar de protocolo que hizo el cliente con la cabecera Upgrade. El caso más habitual es abrir una conexión WebSocket: la conexión empieza como HTTP y, tras el 101, pasa a ser un canal bidireccional.
Qué significa el código 101
Un WebSocket empieza como una petición HTTP normal con las cabeceras Upgrade: websocket y Connection: Upgrade. Si el servidor acepta, responde 101 y a partir de ese momento la misma conexión TCP transporta tramas WebSocket en lugar de peticiones HTTP.
Si ves 101 en las herramientas de desarrollo del navegador, la conexión ha funcionado. El problema suele ser el contrario: que en vez de 101 llegue un 400, 404 o 502 porque un proxy intermedio no reenvía las cabeceras Upgrade.
Cuándo aparece
- Apertura de un WebSocket (chats, notificaciones en tiempo real, terminales web, paneles en vivo).
- Cambio de HTTP/1.1 a h2c (HTTP/2 sin cifrar), muy poco habitual hoy.
Qué tener en cuenta
- Si el WebSocket no conecta detrás de nginx, faltan las cabeceras Upgrade y Connection en el proxy (ver configuración).
- Sube proxy_read_timeout: por defecto nginx corta a los 60 segundos sin tráfico y el WebSocket se cierra.
- En Cloudflare los WebSockets funcionan en todos los planes; comprueba que el registro DNS está en modo proxy (nube naranja) y que el origen responde 101.
Configuración y comandos
nginx como proxy de WebSocket
location /ws/ {
proxy_pass http://backend:8001;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
proxy_set_header Host $host;
proxy_read_timeout 3600s;
}Ejemplo de respuesta
GET /ws/chat HTTP/1.1
Host: ejemplo.com
Upgrade: websocket
Connection: Upgrade
Sec-WebSocket-Key: dGhlIHNhbXBsZSBub25jZQ==
Sec-WebSocket-Version: 13
HTTP/1.1 101 Switching Protocols
Upgrade: websocket
Connection: Upgrade
Sec-WebSocket-Accept: s3pPLMBiTxaQ9kYGzzhZRbK+xOo=Herramientas para comprobarlo
Preguntas frecuentes
¿Por qué mi WebSocket devuelve 400 en vez de 101?
Casi siempre porque un proxy (nginx, Apache, un balanceador) no reenvía las cabeceras Upgrade y Connection. Sin ellas el servidor de aplicaciones recibe una petición HTTP normal y la rechaza.
¿El 101 se cachea?
No. Es una respuesta que cambia el protocolo de una conexión concreta; no tiene sentido guardarla.