Obteniendo una respuesta de "400 Solicitud incorrecta" a una simple solicitud HTTP GET a través de telnet

0

Estoy aprendiendo algunas redes y tengo problemas con el primer ejercicio: se
supone que debo enviar una solicitud HTTP GET básica a httpbin.org usando telnet.
Esto es lo que escribí:

$ 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

y esto es lo que obtengo:

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

¿Qué estoy haciendo mal?

Pierre Cathé
fuente

Respuestas:

4

El problema es usar HTTP 1.0 en un servidor que requiere HTTP 1.1 (y el Host:encabezado que es una parte obligatoria de HTTP 1.1), probablemente porque probablemente esté haciendo alojamiento virtual de múltiples sitios web en una dirección IP. O tal vez está detrás de un equilibrador de carga HTTP o proxy inverso que básicamente hace lo mismo: admite múltiples nombres de dominio de servidor web separados detrás de una dirección IP y puerto.

Esto funciona para mi:

$ telnet www.httpbin.org 80
Intentando 23.23.171.5 ...
Conectado a www.httpbin.org.herokudns.com.
El carácter de escape es '^]'.
GET / ip HTTP / 1.1
Anfitrión: www.httpbin.org

... y vuelvo ...

HTTP / 1.1 200 OK
Conexión: mantener vivo
Servidor: meinheld / 0.6.1
Fecha: martes, 09 de enero de 2018 22:01:19 GMT
Tipo de contenido: application / json
Acceso-Control-Permitir-Origen: *
Access-Control-Allow-Credentials: verdadero
X-Powered-By: Frasco
Tiempo de procesamiento X: 0.000454902648926
Longitud del contenido: 32
Vía: 1.1 vegur

{
  "origin": "[Mi dirección IPv4 eliminada]"
}

^]
telnet> cerrar
PS 

Tenga en cuenta que la conexión permaneció abierta y tuve que escapar al telnet>indicador para cerrar. Podría haber evitado eso agregando un Connection: closeencabezado a mi solicitud.

Si prueba HTTP / 1.1 con un Host:encabezado y todavía no funciona para usted, asegúrese de que su cliente telnet esté enviando CRLF y no solo retornos de carro o avances de línea. Asegúrese de finalizar su solicitud con un CRLF adicional después de la última línea.

Spiff
fuente
CRLF es crucial aquí. No necesitaba usar el encabezado User-Agent.
pbies