Obtendo resposta “400 Bad Request” para solicitação HTTP GET simples via telnet

0

Estou aprendendo algumas redes e estou tendo problemas com o primeiro exercício:
Eu tenho que enviar uma solicitação básica HTTP GET para httpbin.org usando telnet.
Aqui está o que eu digitei:

$ telnet www.httpbin.org 80
Trying 23.23.171.5...
Connected to www.httpbin.org.herokudns.com.
Escape character is '^]'.
GET /ip HTTP/1.0

e aqui está o que estou recebendo:

HTTP/1.1 400 Bad Request
Server: Cowboy
Date: Tue, 09 Jan 2018 20:06:36 GMT
Content-Length: 0

O que estou fazendo de errado?

    
por Pierre Cathé 09.01.2018 / 21:15

1 resposta

4

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.

    
por 09.01.2018 / 21:28