O problema é usar HTTP 1.0 em um servidor que requer HTTP 1.1 (e o Host:
header que é uma parte obrigatória do HTTP 1.1), provavelmente porque provavelmente está realizando hospedagem virtual de vários sites em um endereço IP. Ou talvez esteja por trás de um balanceador de carga HTTP ou proxy reverso que basicamente está fazendo a mesma coisa: suportando vários nomes de domínio de servidor da Web separados por trás de um endereço IP e porta.
Isso funciona para mim:
$ telnet www.httpbin.org 80 Trying 23.23.171.5... Connected to www.httpbin.org.herokudns.com. Escape character is '^]'. GET /ip HTTP/1.1 Host: www.httpbin.org
... e eu volto ...
HTTP/1.1 200 OK Connection: keep-alive Server: meinheld/0.6.1 Date: Tue, 09 Jan 2018 22:01:19 GMT Content-Type: application/json Access-Control-Allow-Origin: * Access-Control-Allow-Credentials: true X-Powered-By: Flask X-Processed-Time: 0.000454902648926 Content-Length: 32 Via: 1.1 vegur { "origin": "[My IPv4 address redacted]" } ^] telnet> close $
Note que a conexão permaneceu aberta e eu tive que escapar para o prompt telnet>
para fechar. Eu poderia ter evitado isso adicionando um Connection: close
header ao meu pedido.
Se você tentar o HTTP / 1.1 com um cabeçalho Host:
e ele ainda não funcionar, certifique-se de que o cliente telnet esteja enviando CRLFs e não apenas retornos de carro ou alimentação de linha. Certifique-se de terminar o seu pedido com um CRLF extra após a última linha.