Entendiendo HTTP

HTTP es un protocolo tipo ASCII (lo que se envían no son campos de bits, sino de caracteres) bastante sencillo que permite recuperar un recurso web de un servidor mediante un localizador que llamamos URL.

URLs

Si tenemos, por ejemplo, la URL http://monitor06.lab.it.uc3m.es:8180/apmov/foto?d=11&m=2&a=2011, lo primero que tenemos que saber es qué significa:

Peticiones

Una vez establecida la conexión con el servidor, se enviaría por ella la petición HTTP (versión 1.1) que se ve a continuación:

GET /apmov/foto?d=11&m=2&a=2011 HTTP/1.1
Host: monitor06.lab.it.uc3m.es
[línea en blanco]

La primera línea especifica primero el método, que en este caso es "GET" (otras opciones son POST y HEAD), a continuación el recurso y sus parámetros, y por último la versión de HTTP (HTTP/1.1).

Le siguen líneas de cabeceras. Cada cabecera se compone del nombre de la cabecera (por ejemplo, Host), dos puntos, y la información relativa a la cabecera. Muchas APIs proporcionan, además de la estructura de la petición, las cabeceras más comunes y las obligatorias (como User-Agent, que es opcional pero las APIs suelen incluirla en la petición).

Las cabeceras terminan con una línea en blanco, y si hay datos que enviar se añaden después.

Respuestas

Las respuestas son muy similares a las peticiones:

HTTP/1.1 200 OK
Server: Apache-Coyote/1.1
Content-Type: image/jpeg
Transfer-Encoding: chunked
Date: Thu, 10 Feb 2011 13:32:37 GMT
[línea en blanco]
[datos de la respuesta]

La primera línea indica la versión de HTTP del servidor (otra vez 1.1), luego el código de la respuesta, que informa sobre el éxito o el fracaso de la petición, y le sigue un mensaje referente al código para que un humano pueda comprender el significado fácilmente.

Le siguen cabeceras, una línea en blanco, y los datos de la respuesta, que en este caso son los bytes de la imagen del día solicitado.

Los códigos de estado de las respuestas son muy importantes y deben comprobarse siempre para saber actuar en consecuencia. La primera cifra ya nos da una idea sobre el significado general del código:

Normalmente, las APIs de programación ofrecen funciones para acceder al código, al mensaje, a los datos, etc. de una respuesta HTTP. El programador debería solicitar el código obtenido antes de intentar tratar los datos de la respuesta, para saber qué puede encontrar en ellos.