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.
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:
http
es el protocolo que se va a usar para conseguirlo (otros ejemplos pueden ser
ftp
o smb
)monitor06.lab.it.uc3m.es
es el servidor al que vamos a pedir el recurso8180
es el puerto en el que está escuchando el servidor (si no se especifica,
se utiliza el puerto por defecto para el protocolo indicado; el de HTTP es el 80)/apmov/foto
es el recurso que estamos buscando, algunas veces será una página
estática y otras será contenido dinámico?d=11&m=2&a=2011
es la lista de parámetros que se le pasan al recurso para que
genere la respuesta. Empieza siempre con '?', cada pareja nombre-valor va unida por un signo igual '=', y entre
ellas se separan con '&'.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.
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.