O que significa
O servidor concorda em mudar para o protocolo que o cliente pediu no cabeçalho Upgrade, quase sempre WebSocket. Depois desta resposta a conexão passa a usar o novo protocolo.
Causas comuns
- Um handshake de WebSocket foi bem-sucedido
- O cliente pediu upgrade para h2c (HTTP/2 sem criptografia)
- Um upgrade para protocolo próprio foi aceito
Como resolver
Se você é o cliente ou visitante
101 significa sucesso para WebSocket. Se você esperava 101 e recebeu 200 ou 400, confira se a URL aponta para o endpoint de WebSocket e se os proxies repassam os cabeçalhos Upgrade e Connection.
Se você mantém o site ou a API
Atrás do nginx ou de um balanceador, repasse Upgrade e Connection explicitamente (proxy_set_header Upgrade $http_upgrade; Connection "upgrade") e aumente os timeouts de inatividade para sockets de longa duração.
Resposta de exemplo
HTTP/1.1 101 Switching Protocols
Upgrade: websocket
Connection: Upgrade
Sec-WebSocket-Accept: s3pPLMBiTxaQ9kYGzzhZRbK+xOo= Especificação
Perguntas frequentes
› Por que meu WebSocket retorna 400 em vez de 101?
Os cabeçalhos do handshake estavam ausentes ou foram alterados, muitas vezes por um proxy que remove Upgrade/Connection, ou a Sec-WebSocket-Key ou a versão é inválida.
› O HTTP/2 usa 101?
Só no raro upgrade h2c sem criptografia. Navegadores negociam HTTP/2 via TLS ALPN, e o HTTP/2 em si não tem resposta 101.