Protocolo HTTP (Capa de aplicación)

Primero vamos a hablar del protocolo HTTP. El protocolo HTTP como lo hemos mencionado previamente es uno de los protocolos más utilizados en internet, es el protocolo que utilizamos hoy en día para comunicarnos con servicios web, servidores web y poder descargar contenido.  HTTP significa a hypertext transfer protocol o protocolo de transferencia de hipertexto y básicamente está compuesto por 2 formatos de mensajes:

Uno que son mensajes de tipo HTTP request, esos mensajes que van desde un equipo de origen hacia un equipo de destino, hacia un servidor. Y mensajes de tipo HTTP response que son equipos pues que van en sentido contrario que atienden el respectivo request hecho por el cliente. 

Hay un estándar que define cuál es el formato de estos mensajes, cómo tiene que escribirse los HTTP request, como tiene que escribirse también su HTTP response y que debería esperarse después de enviar una comunicación, cuál debería ser como la forma de recibir la comunicación y esas reglas digamos que existen, ese protocolo que existe de comunicación utilizando HTTP.



Hay algo muy importante a considerar y es que cuando se hace una solicitud, yo puedo tener Un HTML ( un recurso) dentro de este web server y cuando hago una solicitud hacia ese HTML, envié un mensaje HTTP request y voy a obtener un mensaje HTTP response que va a contener ese HTML, ese HTML va a quedar cargado en mi navegador de Google Chrome por ejemplo (en la PC).

 

Pero qué sucede si es HTML  tiene a su vez por ejemplo tres imágenes, dentro del HTML hay tres fotos por ejemplo, yo tengo que  primero hacer la petición para traer el HTML, pero para poder cargar cada una estas imágenes  también tengo que hacer peticiones adicionales, es decir, tendría que hacer una nueva petición  para poder traer un nuevo HTTP request para poder traer la imagen número uno con respectiva  respuesta, una petición para traer la imagen  número dos y finalmente una tercera petición  para traer la imagen número tres. Entonces no necesariamente para traer un recurso una página web por ejemplo de un web server solamente se necesita una petición, dependiendo si el HTML tiene objetos que necesito ir a traer, pues voy a tener que hacer nuevas peticiones HTTP request para poder traer todos esos recursos que están componiendo el recurso HTML que acabo de obtener.


Ahora, hay aplicaciones dentro del PC que hacen uso de ese protocolo HTTP por ejemplo Google Chrome. Google Chrome es la aplicación que hace uso de ese protocolo HTTP para poder hacer las solicitudes hacia un servidor de destino y en el caso por ejemplo acá de ese servidor de destino estaría por ejemplo Apache web server (o podría estar por ejemplo Internet Information server que es otro web server) y ellos hacen uso también de ese protocolo HTTP para poder recibir las peticiones y para también enviar las respectivas respuestas.

Entonces, en la capa de aplicación no está como tal el software. En la capa aplicación únicamente está el protocolo HTTP que a su vez es utilizado por software, por ejemplo Google Chrome o por ejemplo Apache para poder hacer el envío de los mensajes o para poder hacer el envío de las respuestas también ante los mensajes de solicitud y los mensajes de respuesta.

Por supuesto  aquí también hay una encapsulación que se da hacia abajo, el HTTP request que se está enviando por  aquí se encapsula como segmento, como datagrama, como trama, se envía por el medio de transmisión  cuando llega acá al destino se recibe por la capa física, se pasa de señales eléctricas por  ejemplo a bits, se pasa a tramas, a datagramas, a segmentos y finalmente mensajes y este mensaje  finalmente ya lo recibe el Apache, recibe la solicitud que se le está haciendo y a su vez  el apache puedes envía una respuesta con el HTML por ejemplo, que contiene el portal accedido, lo  encapsula una vez, dos veces, tres veces, lo envía por el medio físico hacia el equipo de destino, el equipo destino de nuevo hace el proceso de desencapsulación que ya conocemos y  finalmente pues aquí el HTTP response, que sería lo que obtendría acá cierto,  el HTTP response que obtendría el equipo cliente se lo pasaríamos a al Google Chrome,  y este se encargaría ya de mostrarlo al usuario final o lo muestra de una manera legible para un humano.

Ahora, para poder hacer una conexión entre un cliente y un servidor, es necesario  primero saludar, ese saludo se conoce como el Three Way Handshake, el Three Way Handshake o  saludo de tres vías, es algo que siempre va a ocurrir entre el cliente y el servidor cuando  se abre justamente una comunicación entonces aquí tenemos un ejemplo de cómo ocurre cuando  un equipo cliente quiere comunicarse con el equipo del servidor , lo primero que hace  es por supuesto es enviar un mensaje de saludo y dice oye mira quiero comunicarme contigo, el servidor puede aceptar o rechazar esa solicitud entrante, esa comunicación entrante, en este caso pues asumamos que va a aceptar la comunicación entrante y le dice listo,  estoy dispuesto a hablar contigo, ya tenemos un canal de comunicación digamos abierto. Todavía no hemos intercambiado información como tal, pero al menos en estos dos primeros intercambios ya tenemos un canal de comunicación abierto. Luego ya viene entonces el cliente, envía un tercer mensaje con la solicitud justamente, la solicitud del recurso, le dice mira finalmente quiero acceder por ejemplo a un recurso llamado index.html, ¿qué hace el Apache? el Apache recibe la solicitud y envía por supuesto HTTP response que contiene el index.html solicitado. Aquí en el número 3 estoy haciendo la solicitud, pero aquí al número 4 ahí sí ya estoy enviando la respuesta, el servidor está enviando la respuesta con el recurso solicitado.  ¿Qué sucede para poder lograr esta comunicación? como lo hemos visto aquí pues se tiene que dar  justamente este saludo de tres vías, se llama así porque tiene un mensaje de saludo del cliente al servidor, una confirmación del servidor al cliente y luego ya por fin en el tercer mensaje, miren  que solamente hasta el tercer mensaje se envía la solicitud del recurso que quiero hacer, el HTTP request se enviaría sólo hasta el tercer mensaje, por eso se llama de tres vías  porque se necesitan primero estos tres pasos para poder enviar justamente la petición. Hay algo muy importante también y es un concepto que se llama RTT o round-trip time,  ese RTT contiene el tiempo que tarda el mensaje en ir y volver,  en este caso del cliente al servidor y del servidor al cliente, entonces cuando hacemos  una petición al portal de cualquier tipo miren que se están dando de manera implícita dos RTTs, un RTT para poder hacer el saludo, el establecimiento de la comunicación inicial y el segundo RTT para poder ahí sí traer el recurso que me interesa a mi como usuario.