Los rincones del API Win32: WinInet y HTTP - Introducción al protocolo HTTP
Tutorial creado por Juan Manuel. Extraido de: http://www.lawebdejm.com
27 de Agosto de 2005
Programación estructurada
2 - Introducción al protocolo HTTP
Como ya dijimos, Wininet soporta tres protocolos de aplicación: HTTP, FTP y Gopher. Sin duda alguna, podemos decir que el más importante y utilizado de todos ellos es HTTP, ya que todos los sitios web visitados (y la mayoría de los archivos descargados desde el navegador) de internet son recuperados a través de este protocolo.
HTTP permite la transferencia de múltiples tipos de información de una forma eficiente, haciéndolo idóneo para una red tan hetereogénea como internet, donde los formatos en que se presenta la información son muy variados e impredecibles (páginas HTML, programas, imágenes, sonidos, videos, películas Flash, futuros formatos, etc.).
La estructura del protocolo HTTP es sencilla, más o menos como la de cualquier arquitectura cliente/servidor:
La máquina cliente establece una conexión (normalmente a través del protocolo de transporte TCP/IP, al puerto 80) con la máquina servidora, donde está ejecutándose un software llamado servidor web o servidor HTTP (Apache o Internet Information Server son algunos de ellos).
Una vez establecida la conexión, el cliente (por ejemplo el navegador web) envía tramas de datos que consisten en unas cabeceras especiales y una petición, que es recibida al otro lado de la conexión por el servidor HTTP.
Este servidor interpretará la petición del cliente, devolviendo un resultado, que dependerá del tipo de petición recibida.
Una vez que la respuesta ha sido enviada, la conexión se pierde. Es por esto que el protocolo HTTP se denomina "sin conexión", al contrario que otros como FTP que mantienen una conexión abierta continuamente. Además de ser "sin conexión", también se suele decir que es un protocolo "sin estado", ya que no tiene en cuenta peticiones anteriores de un mismo cliente, y considera que cada petición es única e independiente del resto.
Todo este trasiego de información se hace a través de un formato de texto de 8 bits, que está definido según el protocolo HTTP, en el documento RFC1945∞.
Aunque el API Wininet nos oculta los aspectos internos del protocolo, y no es necesario conocerlos para trabajar con HTTP, vamos a explicar superficialmente en qué consiste cada petición-respuesta en este protocolo.
Una petición típica suele ser algo así como esto (al principio de la línea de indica un número entre paréntesis para la explicación posterior):
|| (1) || GET /index.htm HTTP/1.0 ||
|| (2) || Accept: text/html ||
|| || Accept: video/mpg ||
|| || Accept: image/* ||
|| || Accept: */* ||
|| (3) || User-Agent: Mozilla/3.0 ||
|| (4) || ||
La respuesta a esta petición puede ser algo parecido a la siguiente:
|| (1) || HTTP/1.0 200 OK ||
|| (2) || Date: Saturday, 19-May-01 22:30:00 GMT+01 ||
|| (3) || Server: Apache ||
|| (4) || MIME-version: 1.0 ||
|| (5) || Content-type: text/html ||
|| (6) || Content-length: 254 ||
|| (7) || Last-modified: 29-May-00 10:30:00 ||
|| (8) || ||
|| (9) || <html> ||
|| || <head> ||
|| || <title>La web de JM</title> ||
|| || </head> ||
|| || <body> ||
|| || ... ||
|| || </html> ||
Al bloque de información hasta la línea en blanco (los puntos del 1 al 7) se denomina "cabecera". A partir de la línea en blanco, aparecerá la información que hemos solicitado, en el formato que indique el valor "Content-type".
Bueno, creo que como introducción del protocolo ya es suficiente. Al menos nos sirve para darnos cuenta que para manejar un protocolo como HTTP es necesario un conocimiento bastante profundo de su funcionamiento interno. Para nuestra alegría, el API WinInet gestionará todos estos detalles internamente, haciendonos la vida más fácil.
HTTP permite la transferencia de múltiples tipos de información de una forma eficiente, haciéndolo idóneo para una red tan hetereogénea como internet, donde los formatos en que se presenta la información son muy variados e impredecibles (páginas HTML, programas, imágenes, sonidos, videos, películas Flash, futuros formatos, etc.).
La estructura del protocolo HTTP es sencilla, más o menos como la de cualquier arquitectura cliente/servidor:
La máquina cliente establece una conexión (normalmente a través del protocolo de transporte TCP/IP, al puerto 80) con la máquina servidora, donde está ejecutándose un software llamado servidor web o servidor HTTP (Apache o Internet Information Server son algunos de ellos).
Una vez establecida la conexión, el cliente (por ejemplo el navegador web) envía tramas de datos que consisten en unas cabeceras especiales y una petición, que es recibida al otro lado de la conexión por el servidor HTTP.
Este servidor interpretará la petición del cliente, devolviendo un resultado, que dependerá del tipo de petición recibida.
Una vez que la respuesta ha sido enviada, la conexión se pierde. Es por esto que el protocolo HTTP se denomina "sin conexión", al contrario que otros como FTP que mantienen una conexión abierta continuamente. Además de ser "sin conexión", también se suele decir que es un protocolo "sin estado", ya que no tiene en cuenta peticiones anteriores de un mismo cliente, y considera que cada petición es única e independiente del resto.
Todo este trasiego de información se hace a través de un formato de texto de 8 bits, que está definido según el protocolo HTTP, en el documento RFC1945∞.
Aunque el API Wininet nos oculta los aspectos internos del protocolo, y no es necesario conocerlos para trabajar con HTTP, vamos a explicar superficialmente en qué consiste cada petición-respuesta en este protocolo.
Una petición típica suele ser algo así como esto (al principio de la línea de indica un número entre paréntesis para la explicación posterior):
|| (1) || GET /index.htm HTTP/1.0 ||
|| (2) || Accept: text/html ||
|| || Accept: video/mpg ||
|| || Accept: image/* ||
|| || Accept: */* ||
|| (3) || User-Agent: Mozilla/3.0 ||
|| (4) || ||
- Operación, archivo solicitado y versión del protocolo que se está utilizando. En la versión 1.0 del protocolo, sólo se admitían 3 tipos de operaciones:
- GET: se utiliza para recuperar el contenido de un recursos estático (página HTML, imágen, vídeo, etc), o bien ejecutar un programa o script en el servidor (como programas CGI, páginas ASP, JSP, PHP, etc.). Es la operación más común, que se lanza cada vez que pulsamos en un enlace y navegamos a una página web.
- HEAD: es una operación especial que tan sólo nos recupera información del recurso, como el tamaño, la fecha de modificación, tipo, etc. Lo suelen utilizar los navegadores o servidores proxy para comprobar el estado de su caché u otras operaciones.
- POST: envía información desde el cliente al servidor web, como pueden ser los datos de un formulario.
- GET: se utiliza para recuperar el contenido de un recursos estático (página HTML, imágen, vídeo, etc), o bien ejecutar un programa o script en el servidor (como programas CGI, páginas ASP, JSP, PHP, etc.). Es la operación más común, que se lanza cada vez que pulsamos en un enlace y navegamos a una página web.
- Tipos MIME que acepta el equipo cliente. Los tipos MIME (Multipurpose Internet Mail Extensions) son un estándar para el envío de información binaria a través de caracteres alfanuméricos. Este estándar permite que, a través del protocolo HTTP (que maneja información en modo texto), podamos transferir archivos no-textuales, como pueden ser imágenes, audio, vídeo, programas ejecutables etc. Los tipos MIME definen grupos (antes del carácter "/") y tipos (después del carácter "/"). Así el tipo MIME "text/html" define a todos los archivos de texto que contienen código HTML, el tipo "video/mpeg" define a todos los archivos de vídeo almacenados en formato mpeg, etc. Para indicar cualquier tipo se puede utilizar el carácter "*", tanto en el tipo como en el grupo. De este modo, el tipo MIME "image/*" representa a todos los archivos de imagen, ya estén almacenadas en formato gif, jpeg, bmp, etc.
- Aplicación cliente que está lanzando la petición HTTP.
- La última línea debe estar en blanco, para indicar el final de la petición.
La respuesta a esta petición puede ser algo parecido a la siguiente:
|| (1) || HTTP/1.0 200 OK ||
|| (2) || Date: Saturday, 19-May-01 22:30:00 GMT+01 ||
|| (3) || Server: Apache ||
|| (4) || MIME-version: 1.0 ||
|| (5) || Content-type: text/html ||
|| (6) || Content-length: 254 ||
|| (7) || Last-modified: 29-May-00 10:30:00 ||
|| (8) || ||
|| (9) || <html> ||
|| || <head> ||
|| || <title>La web de JM</title> ||
|| || </head> ||
|| || <body> ||
|| || ... ||
|| || </html> ||
- Versión del protocolo que utiliza el servidor HTTP, junto con el código de estado de la petición, y una descripción de este estado. En nuestro caso, todo ha ido bien (200 OK).
Los códigos de retorno están compuestos por tres dígitos se dividen en 5 categorías, dependiendo de la naturaleza del estado. La forma de diferencias cada grupo es por el primer dígito del código:
- 1xx: mensajes informativos. En la versión 1.0 del protocolo no se utilizan.
- 2xx: mensajes de operaciones correctas.
- 3xx: mensajes de redirección.
- 4xx: mensajes de error en el cliente.
- 5xx: mensajes de error en el servidor.
- Fecha en que se ha recibido la petición.
- Tipo y versión del servidor HTTP que ha generado la respuesta.
- Versión de MIME que maneja el servidor HTTP.
- Tipo MIME de los datos retornados. En este caso se va a retornar una página HTML (text/html).
- Tamaño (en bytes) de los datos retornados.
- Fecha de la última modificación de los datos.
- Una línea en blanco que separa la cabecera de los datos retornados.
- Aquí comienzan los datos según el formato que se indicó en "Content-type". En nuestro caso se trata de una página HTML pero podría tratarse de cualquier otro tipo, como una imagen, un programa ejecutable, un video, siempre codificado como caracteres alfanuméricos.
Al bloque de información hasta la línea en blanco (los puntos del 1 al 7) se denomina "cabecera". A partir de la línea en blanco, aparecerá la información que hemos solicitado, en el formato que indique el valor "Content-type".
Bueno, creo que como introducción del protocolo ya es suficiente. Al menos nos sirve para darnos cuenta que para manejar un protocolo como HTTP es necesario un conocimiento bastante profundo de su funcionamiento interno. Para nuestra alegría, el API WinInet gestionará todos estos detalles internamente, haciendonos la vida más fácil.
Valora este capítulo:
Autor y licencia de 'Los rincones del API Win32: WinInet y HTTP - Introducción al protocolo HTTP'
|
Opiniona sobre 'Los rincones del API Win32: WinInet y HTTP - Introducción al protocolo HTTP' (0)
Tu nombre debe tener tres caracteres como mínimo.
Es necesario que te des de alta con una cuenta de correo válida.
Es necesario que te des de alta con una cuenta de correo válida.
El contenido del título de tu opinión debe tener tres caracteres como mínimo.
Es obligatorio que selecciones una valoración del recurso.
El contenido del comentario de tu opinión debe tener tres caracteres como mínimo.
Opina sobre este tutorial |
Wikis relacionados con 'Los rincones del API Win32: WinInet y HTTP - Introducción al protocolo HTTP'
En el anterior curso dejamos muchos temas en el tintero, así que voy a terminar...
Más »
El protocolo FTP desde el API WinInet. Con este curso aprenderás a hacer un pequeño...
Más »
Comienzo con un nuevo tema dentro dentro de la serie Los rincones del API Win32....
Más »
Cuando nos referimos al Protocolo empresarial, es prudente recordar que son las mismas formas a...
Más »
En este documento se presenta la información acerca de la instalación, configuración, ejecución y mantenimiento...
Más »


