Introducción al protocolo HTTP

Diego Esteban C 🧢
6 min readMay 16, 2022

--

Photo by Robynne Hu on Unsplash

Artículo de conceptos básicos de HTTP. Estructura básica y elementos del protocolo, en conjunto a códigos de estado y otros.

Recomendaciones

Antes de empezar a estudiar el protocolo HTTP, se recomienda contar con algunos conocimientos previos antes de leer este artículo, por lo cual, dejo la invitación a revisar los siguientes enlaces de apoyo opcionales:

El protocolo HTTP

El protocolo HTTP, o “Hypertext Transfer Protocol” en inglés, es un protocolo fundamental que posibilita la realización de solicitudes de datos y recursos a través de la web. Proporciona reglas y estructuras predefinidas para la comunicación, estableciendo un lenguaje común entre el emisor y el receptor de la información.

Este protocolo fue concebido por Tim Berners-Lee entre los años 1989 y 1991 mientras trabajaba en el CERN. A lo largo del tiempo, ha evolucionado sin perder gran parte de su simplicidad original, y su versión más reciente es HTTP/2.

Es crucial señalar que el internet se sustenta en una pila de protocolos de comunicación, y HTTP es uno de ellos. Este protocolo opera en la capa superior del stack, conocida como la capa de aplicación. La constante evolución de HTTP refleja la adaptabilidad necesaria para satisfacer las demandas cambiantes del mundo digital.

Arquitectura cliente servidor

El protocolo HTTP funciona sobre una arquitectura cliente-servidor. Esta arquitectura se basa en una relación de comunicación entre dos entidades: el cliente y el servidor.

  • Cliente web: Es cualquier software que es capaz de acceder a un servidor y recuperar información en la web. Uno de los clientes más conocidos y utilizados para esta labor es el navegador web, aunque no es el único, existen otros clientes compatibles con el protocolo HTTP como por ejemplo la herramienta Curl disponible en la mayoría de los sistemas basados en Unix.
  • Servidor web: Un servidor web es un servidor conectado al internet que espera permanentemente de solicitudes HTTP. Este servidor conoce y entiende este protocolo debido a un software instalado que está activamente escuchando. Uno de los software más conocidos y utilizados que se instalan en el servidor es Nginx. Este software es capaz de interpretar las solicitudes HTTP y a su vez, enviar una respuesta al cliente que solicita un recurso.

En el contexto del protocolo HTTP, el mensaje que el cliente envía al servidor se llama “request” (solicitud), y el mensaje que el servidor envía de vuelta al cliente se llama “response” (respuesta). Estos términos reflejan la naturaleza de la interacción entre el cliente y el servidor.

NOTA 🤓: Existen múltiples herramientas como Apache o IIS que son competidores de Nginx. Consultar documentación correspondiente para saber más información.

Comunicación mediante mensajes HTTP

La comunicación entre un cliente y un servidor se realiza mediante mensajes HTTP. El protocolo HTTP define la estructura y el formato de estos mensajes, que se intercambian entre el cliente y el servidor para realizar solicitudes y recibir respuestas. Estos mensajes contienen información sobre la acción que se está solicitando.

En una transacción típica, el cliente envía una solicitud HTTP al servidor, y el servidor responde con un mensaje HTTP que contiene la información solicitada o indica el resultado de la operación. Este intercambio de mensajes permite la transferencia de datos y recursos entre el cliente y el servidor, formando la base de la comunicación en la arquitectura cliente-servidor en la web.

Estructura mensaje HTTP

Estos mensajes HTTP deben responder a una estructura en particular definidas en el estándar. Los mensajes HTTP deben contener 3 elementos esenciales:

  1. Línea de petición (Request line)
  2. Cabecera HTTP (Header).
  3. Cuerpo HTTP (Body).

A continuación una breve descripción de cada uno de estos elementos de un mensaje HTTP.

1. Línea de petición (Request line)

La línea de petición en un mensaje HTTP contiene información sobre la acción que se realizará hacia la otra entidad. Esta información se especifica mediante métodos, que básicamente representan la acción que se va a llevar a cabo, como obtener información o actualizarla.

Aquí algunos métodos establecidos por el estándar:

  • GET — Solicita información.
  • POST — Envía información.
  • PUT — Actualiza información.
  • DELETE — Elimina información.

Aquí un vistazo del contenido de la línea de petición:

GET /api/autos HTTP/1.1

NOTA 🤓: Existen más métodos establecidos, para más información consultar: https://developer.mozilla.org/es/docs/Web/HTTP/Methods

2. Cabeceras HTTP (Headers)

Las cabeceras en mensaje HTTP son como etiquetas informativas que el cliente envía al servidor junto con la solicitud. Proporcionan información esencial sobre la transacción en curso. Estas cabeceras se forman con la sintaxis “Cabecera: Valor” y se incluyen en la parte superior de la solicitud.

Encontramos la siguiente información en las cabeceras:

  • Tipo de contenido que se aceptan.
  • Tamaño del contenido de la petición en bytes.
  • Fecha de la petición.
  • Nombre del dominio o dirección IP.
  • Información del navegador o sistema operativo.
  • Entre otros.

NOTA 🧐: Las cabeceras se pueden agrupar en los siguientes grupos; cabeceras generales, cabeceras de petición y cabeceras de entidad. Para más información consultar: https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers

Aquí un vistazo del contenido de una cabecera:

Host: en.wikipedia.org
Cache-Control: no-cache
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64)
Accept: text/html
Content-Length: 345

4. Cuerpo HTTP (Body)

En un mensaje HTTP, el cuerpo (o payload) es información adicional que el cliente envía al servidor. Puede ser cualquier conjunto de datos y puede estar en cualquier formato compatible con el protocolo HTTP, como XML, JSON, texto plano, etc.

Podemos enviar la siguiente información en el cuerpo:

  • Usuario y contraseñas.
  • Datos de formularios.
  • Archivos.
  • Entre otros.

Aquí un vistazo del contenido de un cuerpo en formato JSON:

{
"nombre": "Diego",
"apellido": "Cortés"
}

Ejemplo completo de mensaje HTTP con sus 3 partes

POST /api/users HTTP/1.1Host: en.wikipedia.org
Cache-Control: no-cache
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64)
Accept: application/json
Content-Length: 345
{
"nombre": "Diego",
"apellido": "Cortés"
}

NOTA 🤓: Tanto el mensaje de solicitud como el de respuesta en HTTP siguen la misma estructura básica que consta de estas tres partes principales.

Códigos de estado en HTTP

El código de estado en HTTP es un número de tres dígitos que proporciona información sobre el resultado de la solicitud. Estos códigos se dividen en cinco clases:

  • 1xx (Respuestas informativas): La solicitud fue recibida, continúa el proceso.
  • 2xx (Respuestas exitosas): La acción se completó con éxito o se entendió y aceptó.
  • 3xx (Redirecciones): Se necesita realizar más acciones para completar la solicitud.
  • 4xx (Errores del cliente): La solicitud contiene sintaxis incorrecta o no se puede cumplir.
  • 5xx (Errores del servidor): El servidor falló al cumplir una solicitud aparentemente válida.

Los códigos de estado en HTTP son esenciales para comunicar el resultado de una solicitud entre el cliente (navegador o aplicación) y el servidor. Estos códigos proporcionan información rápida y estandarizada sobre cómo se manejó la solicitud y si fue exitosa, si se redirigió, o si hubo algún problema.

HTTPS en ayuda de la seguridad

HTTP si bien es cierto que es un protocolo que nos facilita la comunicación y estandarización web, tiene una pequeña desventaja la cual es la seguridad. Debido a que los paquetes enviados en internet no están cifrados, pudiendo ser capturados por terceros.

HTTPS utiliza una combinación de dos protocolos de comunicación ( HTTP + SSL /TLS ) que hace que cualquier información transmitida en la red se establezca como cifrada. En otras palabras HTTPS es la versión segura.

NOTA 📚: para obtener HTTPS en el servidor se debe contar con otros recursos como un certificado SSL y configuraciones, para más información consultar en este artículo de Cloudflare.

Recursos HTTP

HTTP es un protocolo que contiene mucho más características que las descritas en este artículo, te invito a seguir profundizando sobre este tema en las siguientes páginas oficiales:

Gracias por haber llegado hasta aquí, si encuentras esto útil, no olvides aplaudir 👏 . Suscríbete para obtener más contenido 🔔.

Si necesita ayuda adicional, comunícate conmigo 🤠.

Muchas gracias por leer, agradezco su tiempo.

--

--