Entiende quién le pide qué a quién cuando una página web aparece en tu pantalla.
Abrir esta lección en KodokonImagina un restaurante. Te sientas, llamas al camarero, pides un plato y el camarero te lo trae. La web funciona exactamente igual. Tú, con tu navegador, eres el cliente: eres quien pide. Enfrente hay un servidor: un ordenador encendido las veinticuatro horas, en algún lugar de un edificio con aire acondicionado, cuyo único trabajo es esperar peticiones y responderlas. Un servidor no tiene nada de mágico: es una máquina como la tuya, salvo que nunca duerme y no tiene pantalla.
Lo más importante que debes recordar: el servidor nunca da el primer paso. No te envía nada mientras tú no hayas pedido algo. Cada vez que escribes una dirección o haces clic en un enlace, tu navegador envía una petición, y el servidor devuelve una respuesta. Petición, respuesta. Petición, respuesta. Toda la web se reduce a ese ir y venir.
Para que una petición llegue a su destino, cada máquina conectada tiene una dirección IP: una serie de números que hace las veces de dirección postal, por ejemplo 93.184.215.14. Tu mensaje no se envía de una sola pieza: se trocea en pequeños fragmentos llamados paquetes, que viajan cada uno por su cuenta a través de decenas de máquinas intermedias y luego se reensamblan en el orden correcto al llegar. Puedes comprobar que una máquina responde con el comando ping.
ping -c 2 example.com
PING example.com (23.215.0.136): 56 data bytes
64 bytes from 23.215.0.136: icmp_seq=0 ttl=54 time=17.3 ms
64 bytes from 23.215.0.136: icmp_seq=1 ttl=54 time=16.9 ms
--- example.com ping statistics ---
2 packets transmitted, 2 packets received, 0.0% packet loss¿Y qué devuelve el servidor exactamente? Texto. Una página web no es más que un archivo de texto escrito en HTML que el servidor te envía y que tu navegador maqueta. Puedes verlo con tus propios ojos y sin navegador, con la herramienta curl, que envía una petición y muestra la respuesta en bruto en el terminal.
curl -s https://example.com | head -n 5
<!doctype html>
<html>
<head>
<title>Example Domain</title>
<meta charset="utf-8" />