Testador de WebSocket: conecte, envie e registre frames online | We.Inc
Testador de WebSocket online grátis. Abra uma conexão ws:// ou wss:// a partir do seu navegador, envie texto ou JSON, acompanhe cada mensagem e veja o código de fechamento quando ela terminar.
Testador de WebSocket
Cole um endereço wss:// ou ws://, clique em Conectar e este testador abre um WebSocket de verdade a partir do seu próprio navegador. Digite uma mensagem, envie, e cada frame enviado e recebido aparece em um log com horário. Quando o socket termina, você vê o código de fechamento, o motivo e se o handshake de fechamento foi concluído corretamente.
O que significa cada número de readyState
Valor
Constante
Significado
CONNECTING
Criado, handshake ainda não concluído
OPEN
Pronto: send() já funciona
CLOSING
O handshake de fechamento começou
CLOSED
Fechado, ou a conexão nunca abriu
Nada aqui passa pelos nossos servidores. A conexão é aberta pelo objeto WebSocket nativo da aba do navegador em que você está lendo isto, então o servidor vê o seu navegador, o seu endereço IP e a origem desta página, https://we.inc. Um servidor que verifica o cabeçalho Origin pode recusá-la. Como esta página é servida por https, prefira um endereço wss://; um ws:// simples pode ser bloqueado pelo navegador como inseguro.
Digite o endereço do servidor. Ele precisa começar com ws://, wss://, http:// ou https:// e não pode conter um fragmento #.
Adicione sub-protocolos se o servidor esperar algum, separados por vírgulas, e clique em Conectar.
Escreva uma mensagem e clique em Enviar, ou pressione Ctrl+Enter dentro da caixa. Marque a opção JSON para verificar se o texto é válido antes de sair.
Leia o log: as setas mostram a direção, e a entrada de fechamento mostra o código, o motivo e a flag wasClean.
Clique em Fechar para encerrar a sessão com o seu próprio código (1000, ou qualquer um de 3000 a 4999) e um motivo curto.
Fechou na hora com 1006 e sem motivo? O handshake falhou antes de qualquer frame passar. Confira o endereço, a porta, o TLS e se o servidor rejeita origens externas.
Os navegadores escondem de propósito os detalhes do handshake dos scripts, então o evento error nunca diz o motivo. Abra o painel Network das ferramentas de desenvolvedor e filtre por WS para ver o status HTTP do upgrade.
Os navegadores tratam localhost e 127.0.0.1 como endereços confiáveis, então ws://localhost:PORT é o jeito mais fácil de testar um servidor rodando na sua própria máquina.
Frames binários chegam como objetos Blob por padrão. Este testador mostra o tamanho deles em bytes em vez de tentar imprimi-los.
Mantenha os motivos de fechamento curtos: o navegador lança um SyntaxError se o motivo passar de 123 bytes depois de codificado em UTF-8.
Perguntas frequentes
Por que minha conexão falha aqui mas funciona no meu app?
A causa mais comum é uma verificação de origem. O seu app se conecta a partir da própria origem, enquanto esta página se conecta a partir de https://we.inc. Se o servidor só aceita origens listadas, ele rejeita o handshake e o navegador informa o código de fechamento 1006. A outra coisa a testar é a forma wss:// do endereço, já que esta página é servida por https.
Meus dados são enviados para a We.Inc?
Não. A página só cria um socket na sua aba e escreve em um log na memória. As mensagens vão direto entre o seu navegador e o servidor que você digitou. Recarregar a página limpa o log.
Posso definir cabeçalhos personalizados, como Authorization?
Não a partir de um navegador. O construtor WebSocket aceita só uma URL e uma lista opcional de sub-protocolos. Servidores que precisam de um token costumam lê-lo de uma query string, de um cookie ou da primeira mensagem depois que a conexão abre.
Por que não consigo enviar um ping por esta ferramenta?
A interface WebSocket do navegador tem apenas send() e close() como métodos. Ping e pong são frames de controle que o próprio navegador responde quando um servidor manda um ping, então os scripts da página nunca os veem. Envie uma mensagem de texto normal se o seu servidor usa um heartbeat no nível da aplicação.
Quais códigos de fechamento posso enviar?
Scripts só podem passar 1000 ou um código de 3000 a 4999 para close(). Qualquer outro número lança um InvalidAccessError. Os códigos na faixa de 1001 a 1015 são definidos pelos próprios navegadores e servidores.
O que acontece quando você clica em Conectar
O navegador envia uma requisição HTTP comum com Upgrade: websocket, um Sec-WebSocket-Key aleatório e um cabeçalho Origin. Um servidor disposto responde com o status 101 Switching Protocols e um valor Sec-WebSocket-Accept derivado dessa chave. A partir daí, a mesma conexão TCP transporta frames nos dois sentidos.
Toda tentativa termina com um evento open ou um evento close. Se você vê close sem open, o upgrade nunca deu certo, o que restringe a falha ao endereço, à rede ou às regras de handshake do servidor.
Como ler o evento close
A entrada de fechamento no log traz três coisas. code é o número da tabela abaixo. reason é qualquer texto que o outro lado enviou, muitas vezes vazio. wasClean só é true quando os dois lados trocaram frames de fechamento, então false geralmente significa que a rede caiu ou o servidor travou.
Códigos de fechamento do WebSocket
A faixa de 1000 a 1015 é definida para o próprio protocolo. De 3000 a 3999 é registrada na IANA para bibliotecas e frameworks, e de 4000 a 4999 é livre para uso privado entre o seu próprio cliente e servidor.
Códigos de fechamento e o que eles indicam
Código
Nome
O que geralmente significa
Fechamento normal
O trabalho terminou e o socket foi fechado de propósito
Saindo
O servidor está desligando ou a página navegou para outro lugar
Erro de protocolo
Um dos lados quebrou as regras de framing
Dados não suportados
Dados de um tipo que o endpoint não aceita, como binário para um servidor só de texto
Nenhum status recebido
Reservado: chegou um frame de fechamento sem código
Fechamento anormal
Reservado: nenhum frame de fechamento, muitas vezes um handshake que falhou ou a rede que caiu
Dados de payload inválidos
Uma mensagem tinha dados inconsistentes, por exemplo texto que não é UTF-8
Violação de política
Uma recusa genérica quando 1003 e 1009 não se aplicam
Mensagem grande demais
Um frame era maior do que o endpoint aceita
Extensão obrigatória
O cliente queria uma extensão que o servidor não aceitou
Erro interno
O servidor encontrou uma condição inesperada
Reinício do serviço
O servidor está reiniciando
Tente mais tarde
Uma condição temporária, como sobrecarga
Bad Gateway
Um proxy recebeu uma resposta inválida do servidor upstream
Handshake TLS
Reservado: o handshake TLS falhou, por exemplo um certificado não confiável
3000 a 3999
Registrados
Definidos por bibliotecas e frameworks
4000 a 4999
Uso privado
O que o seu cliente e o seu servidor combinarem
O mesmo cliente em poucas linhas de JavaScript
Cliente mínimo no navegador
É isto que o testador faz por baixo dos panos: abre, registra cada mensagem e informa o código de fechamento.
Sub-protocolos (opcional, separados por vírgula)
Conectar
Fechar
Código de fechamento
Motivo do fechamento
Mensagem
Enviar
Ctrl+Enter envia
Verificar se a mensagem é um JSON válido
Limpar log
Estado: {v}
Log de frames
Nada ainda. Conecte a um servidor para começar o log.
Conectado. O servidor escolheu o sub-protocolo: {v}
Fechado com o código {n}, motivo "{v}", wasClean {c}
Evento de erro: o navegador não diz o motivo. Confira o painel Network.