Cómo funcionan las solicitudes HTTP

¿Qué sucede cuando escribe una URL en el navegador, de principio a fin?

Este artículo describe cómo los navegadores realizan solicitudes de página utilizando el protocolo HTTP / 1.1.

Si alguna vez hiciste una entrevista, es posible que te hayan preguntado: "¿Qué sucede cuando escribes algo en el cuadro de búsqueda de Google y presionas enter?".

Es una de las preguntas más populares que te hacen. La gente solo quiere ver si puede explicar algunos conceptos bastante básicos y si tiene alguna idea de cómo funciona realmente Internet.

En esta publicación, analizaré lo que sucede cuando escribes una URL en la barra de direcciones de tu navegador y presionas enter.

Es un tema muy interesante para analizar en una publicación de blog, ya que toca muchas tecnologías en las que puedo sumergirme en publicaciones separadas.

Esta es una tecnología que rara vez se cambia y alimenta uno de los ecosistemas más complejos y amplios jamás construidos por humanos.

El protocolo HTTP

Primero, menciono HTTPS en particular porque las cosas son diferentes a una conexión HTTPS.

Solo analizo solicitudes de URL

Los navegadores modernos tienen la capacidad de saber si lo que escribió en la barra de direcciones es una URL real o un término de búsqueda, y usarán el motor de búsqueda predeterminado si no es una URL válida.

Supongo que escribe una URL real.

Cuando ingresa la URL y presiona Intro, el navegador primero crea la URL completa.

Si acaba de ingresar un dominio, comoflaviocopes.com, el navegador de forma predeterminada antepondráHTTP://a él, por defecto al protocolo HTTP.

Cosas relacionadas con macOS / Linux

Solo para tu información. Windows puede hacer algunas cosas de manera ligeramente diferente.

Fase de búsqueda de DNS

El navegador inicia elDNSbúsqueda para obtener la dirección IP del servidor.

El nombre de dominio es un atajo útil para los humanos, pero Internet está organizado de tal manera que las computadoras pueden buscar la ubicación exacta de un servidor a través de su dirección IP, que es un conjunto de números como222.324.3.1(IPv4).

Primero, verifica la caché local de DNS para ver si el dominio ya se ha resuelto recientemente.

Chrome tiene un práctico visualizador de caché de DNS que puedes ver enchrome: // net-internals / # dns

Si no se encuentra nada allí, el navegador utiliza el sistema de resolución de DNS, utilizando elgethostbynameLlamada al sistema POSIX para recuperar la información del host.

gethostbyname

gethostbynameprimero busca en el archivo de hosts local, que en macOS o Linux se encuentra en/etc/hosts, para ver si el sistema proporciona la información localmente.

Si esto no proporciona ninguna información sobre el dominio, el sistema realiza una solicitud al servidor DNS.

La dirección del servidor DNS se almacena en las preferencias del sistema.

Esos son 2 servidores DNS populares:

  • 8.8.8.8: el servidor DNS público de Google
  • 1.1.1.1: el servidor DNS de CloudFlare

La mayoría de las personas utilizan el servidor DNS proporcionado por su proveedor de Internet.

El navegador realiza la solicitud de DNS utilizando el protocolo UDP.

TCP y UDP son dos de los protocolos fundamentales de las redes informáticas. Se encuentran en el mismo nivel conceptual, pero TCP está orientado a la conexión, mientras que UDP es un protocolo sin conexión, más liviano, que se usa para enviar mensajes con poca sobrecarga.

La forma en que se realiza la solicitud UDP no está en el alcance de este tutorial

El servidor DNS puede tener la IP del dominio en la caché. Si no, le preguntará alservidor DNS raíz. Ese es un sistema (compuesto por 13 servidores reales, distribuidos por todo el planeta) que impulsa todo Internet.

El servidor DNS lo hacenoconozca la dirección de todos y cada uno de los nombres de dominio del planeta.

Lo que sabe es donde elsolucionadores de DNS de nivel superiorson.

Un dominio de nivel superior es la extensión de dominio:.com,.it,.pizzaetcétera.

Una vez que el servidor DNS raíz recibe la solicitud, la reenvía a ese servidor DNS de dominio de nivel superior (TLD).

Di que estás buscandoflaviocopes.com. El servidor DNS del dominio raíz devuelve la IP del servidor TLD .com.

Ahora nuestro sistema de resolución de DNS almacenará en caché la IP de ese servidor TLD, por lo que no tendrá que volver a solicitarlo al servidor DNS raíz.

El servidor DNS de TLD tendrá las direcciones IP de los servidores de nombres autorizados para el dominio que estamos buscando.

¿Cómo? Cuando compra un dominio, el registrador de dominios envía el TDL apropiado a los servidores de nombres. Cuando actualice los servidores de nombres (por ejemplo, cuando cambie el proveedor de alojamiento), su registrador de dominios actualizará automáticamente esta información.

Esos son los servidores DNS del proveedor de alojamiento. Suelen ser más de 1, para que sirvan de respaldo.

Por ejemplo:

  • ns1.dreamhost.com
  • ns2.dreamhost.com
  • ns3.dreamhost.com

El solucionador de DNS comienza con el primero e intenta preguntar la IP del dominio (con el subdominio también) que está buscando.

Esa es la última fuente de verdad para la dirección IP.

Ahora que tenemos la dirección IP, podemos continuar con nuestro viaje.

Apretón de manos de solicitud TCP

Con la dirección IP del servidor disponible, ahora el navegador puede iniciar una conexión TCP a eso.

Una conexión TCP requiere un poco de protocolo de enlace antes de que se pueda inicializar por completo y pueda comenzar a enviar datos.

Una vez establecida la conexión, podemos enviar la solicitud.

Envío de la solicitud

La solicitud es un documento de texto sin formato estructurado de una manera precisa determinada por el protocolo de comunicación.

Está compuesto por 3 partes:

  • la línea de solicitud
  • el encabezado de la solicitud
  • el cuerpo de la solicitud

La línea de solicitud

La línea de solicitud establece, en una sola línea:

  • el método HTTP
  • la ubicación del recurso
  • la versión del protocolo

Ejemplo:

GET / HTTP/1.1

El encabezado de la solicitud

El encabezado de la solicitud es un conjunto defield: valuepares que establecen ciertos valores.

Hay 2 campos obligatorios, uno de los cuales esHosty el otro esConnection, mientras que todos los demás campos son opcionales:

Host: flaviocopes.com
Connection: close

Hostindica el nombre de dominio al que queremos apuntar, mientras queConnectionsiempre está configurado enclosea menos que la conexión deba mantenerse abierta.

Algunos de los campos de encabezado más utilizados son:

  • Origin
  • Accept
  • Accept-Encoding
  • Cookie
  • Cache-Control
  • Dnt

pero existen muchos más.

La parte del encabezado termina con una línea en blanco.

El cuerpo de la solicitud

El cuerpo de la solicitud es opcional, no se usa en las solicitudes GET, pero se usa mucho en las solicitudes POST y, a veces, también en otros verbos, y puede contener datos enJSONformato.

Dado que ahora estamos analizando una solicitud GET, el cuerpo está en blanco y no lo analizaremos más.

La respuesta

Una vez que se envía la solicitud, el servidor la procesa y envía una respuesta.

La respuesta comienza con el código de estado y el mensaje de estado. Si la solicitud es exitosa y devuelve un 200, comenzará con:

200 OK

La solicitud puede devolver un código de estado y un mensaje diferentes, como uno de estos:

404 Not Found
403 Forbidden
301 Moved Permanently
500 Internal Server Error
304 Not Modified
401 Unauthorized

La respuesta luego contiene una lista de encabezados HTTP y el cuerpo de la respuesta (que, dado que estamos haciendo la solicitud en el navegador, será HTML)

Analizar el HTML

El navegador ahora ha recibido el HTML y comienza a analizarlo, y repetirá exactamente el mismo proceso que hicimos para todos los recursos requeridos por la página:

  • Archivos CSS
  • imagenes
  • el favicon
  • Archivos JavaScript
  • ...

La forma en que los navegadores representan la página está fuera del alcance, pero es importante comprender que el proceso que describí no es solo para las páginas HTML, sino para cualquier elemento que se entregue a través de HTTP.


Más tutoriales de red: