¿Qué es HTTP?
Lección 1 / 8
Http
HTTP (Hypertext Transfer Protocol) es una de las tecnologías subyacentes de la Web; en particular, HTTP es un protocolo de nivel de aplicación creado para la transmisión de documentos, como archivos HTML. El protocolo HTTP se diseñó inicialmente para la comunicación entre navegadores web y servidores web, pero también se puede utilizar para otros fines.
HTTP sigue un esquema client-server, en el que una aplicación (client) abre una conexión con el server, realiza una solicitud y espera la respuesta del servidor. Entre las otras características de este protocolo, tenemos que se basa en conceptos como recursos y URI (Uniform Resource Identifier) y utiliza una estructura de mensaje simple.
HTTP y la Web
Para entender como funciona HTTP, podemos analizar el comportamiento de cualquier web browser cuando se pide que se cargue una página web.
Web Browser como HTTP client
En el momento en que le decimos al navegador que cargue una determinada página web, el navegador actúa como un cliente HTTP que se comunica con un servidor a través de HTTP. En particular, suponiendo que desea cargar la página https://example.com/index.html, el navegador abrirá una conexión con el servidor y enviará al servidor un mensaje solicitando el contenido del documento HTML index.html ubicado en la root del servidor web https://example.com. El mensaje que envía el navegador se denomina solicitud (request).
Una vez recibida la solicitud, el servidor se encargará de recuperar el contenido del archivo solicitado y enviarlo en respuesta a quien lo solicitó. Por lo tanto, el servidor web también enviará un mensaje llamado respuesta (response).
Una vez que se recibe el documento HTML, el navegador comenzará a analizar la página para renderizar y cargar el contenido y notará que el documento HTML indica que se necesitan otros archivos remotos (recursos) para mostrarlo. Por ejemplo, los archivos https://example.com/style.css, https://example.com/main.js y https://pictures.example.com/logo.png.
El navegador, por lo tanto, enviará otros mensajes de solicitud a todos los servidores, que responderán con otros tantos mensajes de respuesta.
Lado server web, cada una de estas solicitudes es independiente de las demás: solo el navegador sabe que están conectadas entre sí porque se utilizan para cargar una determinada página. Por este motivo, al protocolo HTTP se le denomina stateless (sin estado), ya que no se mantiene ninguna conexión entre dos solicitudes realizadas en una misma conexión.
Cuáles son las características básicas del protocolo HTTP
El protocolo HTTP fue diseñado para ser simple y la comunicación HTTP se realiza con pocos componentes en juego, en particular:
- client: es el componente que inicia una solicitud, el web browser en el caso de la web, pero también podría ser una app que se comunica con un server API
- server: un server no es necesariamente una máquina singular, aunque virtualmente pueda parecerlo; recibe solicitudes y responde con el contenido solicitado. Al hacerlo, componentes como load balancer, caché, database…
- proxy: en el mundo real, entre el cliente y el servidor puede haber varias computadoras que "pasan" la solicitud y la respuesta para llevarla a la máquina correcta; solo piensa en el hecho de que tu ordenador puede no ser el único en la casa que solicita la página de inicio de Google; los proxies intervienen en un nivel inferior, pero aseguran que la solicitud y la respuesta se entreguen correctamente.
Otras características importantes del protocolo HTTP que vale la pena mencionar son:
- sencillez: los mensajes HTTP, como veremos en breve, son sencillos y fácilmente comprensibles incluso para el ojo humano, lo que facilita la realización de pruebas a mano y la verificación del contenido de las respuestas.
- extensibilidad: es posible introducir nuevas funciones, siempre que los client y server puedan administrar la extensión; un ejemplo importante de una extesión del protocolo HTTP, son los header, que no estaban presentes en la primera versión de este protocolo, sino añadidos posteriormente, permiten pasar información adicional en los mensajes (las famosas cookies se intercambian en la header Cookie)
Flujo HTTP y mensajes
Una comunicación HTTP desde el punto se comporta en detalle de la siguiente manera:
- el client abre una conexión TCP con el server: es decir, establece un canal para enviar y recibir mensajes (el client puede reutilizar una conexión ya abierta o crear una nueva, según el caso)
- el client envía un mensaje HTTP de solicitud, que contiene también los eventuales header, por ejemplo:
- GET /index.php HTTP/1.1
Host: example.com
Accept-Language: it
- el server recibe la respuesta, verifica si y cómo procesarlo, produce y envía una respuesta
- el client lee la respuesta del server, por ejemplo
- HTTP/1.1 200 OK
Date: 09 Jan 2023 14:28:02 GMT
Server: Nginx
Last-Modified: 27 Dec 2022 20:18:22 GMT
Accept-Ranges: bytes
Content-Length: 29769
Content-Type: text/html
<!DOCTYPE html>
...
- el client cierra la conexión o la deja abierta para futuros usos
Más información
- los server web modernos usan el protocolo HTTPS (HyperText Transfer Protocol over Secure Socket Layer), que es una extensione de HTTP que utiliza criptografía para asegurar la comunicación entre el client y el server
- con protocolo a nivel de aplicación nos referimos a los diferentes niveles de abstracción con los que los que los ordenadores pueden comunicarse a través de la red; en particular la application layer es el nivel más alto entre los varios presentes
- el protocolo HTTP es stateless, pero no es sessionless: la posibilidad de crear una sesión entre client y server, posible gracias a las cookies administradas a través de los header de los mensajes del protocolo HTTP, permite a los client y server saber, por ejemplo, que un determinado usuario está conectado a un sitio e-commerce para realizar compras.
Anterior
0Siguiente
2 ¿Qué son las solic..