2
respostas

[Dúvida] Erro ao tentar rodar a requisição HTTP no Telnet

Olá, pessoal. Boa tarde!
Estou enfrentando o problema referente a esta aula logo no começo, quando o instrutor roda o comando telnet para o localhost.
Vamos as considerações:

  1. O servidor está aberto e rodando exatamente como nas aulas
  2. O meu telnet está habilitado, e quando eu digito o "telnet localhost 8000" funciona corretamente. Para quem não estiver funcionando: não usem abas do prompt de comando. Por algum motivo só funciona se você acessar em diferentes janelas.

O problema é que quando eu, no Telnet, digito EXATAMENTE o mesmo código apresentado na aula "GET / HTTP/1.1", o retorno sai como "HTTP/1.1 400 Bad Request " e ele encerra a conexão.
Já pesquisei aqui no fórum e não encontrei nenhuma solução a respeito, apesar de ser um assunto que está causando problema na maioria dos usuários.

Solução que tentei implementar: ao invés de rodar o "GET / HTTP/1.1", rodei o
"GET / HTTP/1.1
Host: localhost"
Dessa forma ele ainda retorna algo, mas nada a ver com o que foi apresentado na aula. Segue a resposta recebida:

Documentation

README

To replace this page, create a ./public/index.html file.

Conexão ao host perdida.
2 respostas

Prezados, inclusive baixei também em minha máquina o WSL como foi recomendado em outras respostas, mas não alterou absolutamente nada do resultado final.

Vale salientar que segui TODO passo a passo que foi mostrado para instalação, e reiniciei a máquina. Mas, sem sucesso

Ola Roger.
Confere se as opçoes abaixo podem te ajudar:
Parece que o problema está relacionado com a sintaxe da requisição HTTP que você está enviando pelo Telnet.
A resposta 400 Bad Request geralmente ocorre quando o servidor recebe uma solicitação malformada.
No caso, isso pode ser causado pela forma como o cabeçalho da requisição está sendo enviado, ou até mesmo pela falta de certos cabeçalhos obrigatórios.
Aqui estão algumas considerações e ajustes que você pode tentar:
A requisição que você está tentando enviar via Telnet deveria ter a seguinte estrutura:

GET / HTTP/1.1
Host: localhost

No entanto, o Telnet não interpreta bem uma linha em branco entre o comando e o cabeçalho, então a forma correta de enviar isso no Telnet é a seguinte:

GET / HTTP/1.1
Host: localhost

Após essa linha, pressione Enter duas vezes para finalizar a requisição (isso é importante porque o HTTP exige uma linha em branco após os cabeçalhos para finalizar a solicitação).Ou seja após o localhost precisa de duas quebras de linha e faz isso pressionando enter duas vezes.
No seu exemplo, você fez a modificação para incluir o cabeçalho Host: localhost, o que é necessário no HTTP/1.1, pois ele exige que o cabeçalho Host esteja presente em todas as requisições. Sem isso, você pode receber o erro 400 Bad Request.
Quando a requisição for correta, o servidor deve retornar algo como:

HTTP/1.1 200 OK
Content-Type: text/html; charset=UTF-8
Content-Length: <algum número>

<html>
<head><title>Welcome</title></head>
<body><h1>Welcome to the server!</h1></body>
</html>

A resposta exata depende de como o seu servidor está configurado e do conteúdo que está sendo servido, mas se o servidor estiver funcionando corretamente, você deverá receber um código de status 200 OK.
Se você continuar recebendo a mensagem "Conexão ao host perdida", isso pode ser uma indicação de que o servidor está fechando a conexão inesperadamente.
Aqui estão algumas coisas a verificar:

  • Verifique os logs do servidor: O que está sendo registrado no servidor quando você tenta se conectar? Isso pode dar mais informações sobre o que está acontecendo com a requisição.
  • Teste com outra porta: Certifique-se de que a porta 8000 está realmente aberta e que o servidor está ouvindo nela. Se possível, tente rodar o servidor em outra porta para ver se o problema persiste.
  • Verifique a configuração do servidor: Caso o servidor tenha algum tipo de middleware ou configuração que valida cabeçalhos ou outras partes da requisição, pode ser que o problema esteja relacionado a isso.
    Se você está tentando acessar o servidor em uma máquina virtual, contêiner Docker ou outro ambiente isolado, certifique-se de que a comunicação de rede entre a máquina onde o Telnet está sendo executado e o servidor está configurada corretamente (e.g., as portas estão abertas e a rede está acessível).
    Faça os testes ai e envie um feedback.
    Bons estudos.