¿Alguna vez has pensado cuántas veces al día visitas un sitio web? Ya es algo tan común en nuestras vidas que no sería exagerado decir que, para algunas personas, Internet es tan esencial como el aire que respiramos. En ese corto periodo, entre escribir la dirección del sitio web o URL (Uniform Resource Locator, localizador de recursos uniforme), y que la página realmente se visualice en tu pantalla, ocurren varias cosas y una de ellas es la ejecución del protocolo HTTP.
Si quieres entender mejor qué es HTTP y por qué es tan importante para Internet, te lo explicamos en este artículo. Y si ya tienes un sitio web, necesitas ser aún más cauteloso, ya que descuidar la ejecución de este protocolo puede exponer superficies de ataque e incluso afectar directamente tus ventas.
¿Qué es HTTP?
HTTP es el acrónimo para Hypertext Transfer Protocol (protocolo de transferencia de hipertexto, en español) y, si no lo recuerdas o no lo has notado, aparece al inicio de la dirección de un sitio web. HTTP es un protocolo de transferencia de la capa de aplicación basado en texto y se considera la base para la comunicación de datos entre los dispositivos de una red. Durante el proceso de solicitud-respuesta, HTTP usa reglas y estándares predefinidos para el intercambio de información. En general, HTTP es el protocolo que clientes y servidores usan para comunicarse.
Además, para que suceda el intercambio de datos, el protocolo HTTP depende de otros dos protocolos de red: TCP (Transmission Control Protocol, protocolo de control de transmisión) e IP (Internet Protocol, protocolo de Internet). Con esto, tenemos el modelo TCP/IP, que es parte del proceso de comunicación entre clientes y servidores, así como también entre servidores y API Móviles/Web. HTTP es el protocolo más usado para API y aplicaciones basadas en la web.
Puedes notar que TCP/IP es un modelo, pero también una pila de protocolos en la que se encuentra el HTTP. Respecto al Modelo OSI (del que hablaremos más adelante) TCP funciona en la capa 4 e IP lo hace en la capa 3.
Naturaleza stateless
Un dato importante sobre el protocolo HTTP es que es stateless, es decir, “sin estado”; pero, ¿qué significa esto? Significa que cada solicitud que el cliente hace es una transacción independiente, que no está relacionada a ninguna solicitud previa y cada una es diferente para el servidor. De esta forma, si se realizan diferentes solicitudes al mismo tiempo, una no sabe que la otra existe y el servidor no almacena ninguna información sobre el estado del cliente. Tan pronto como se realiza la conexión TCP, toda la información intercambiada se pierde. La reducción en el uso de la memoria en el servidor y la reducción de los problemas por una sesión expirada son las ventajas de ello.
Es importante mencionar que HTTP es stateless si se ve desde un alto nivel de abstracción, pero que también se basa en TCP (no UDP) y, por lo tanto, está basado en conexión y es stateful (con estado) desde el punto de vista de una capa inferior. Esto significa que, por estar basado en conexión, es stateless en el suministro, lo que garantiza que todos los paquetes sean recibidos y secuenciados correctamente.
URL
Ya sabemos lo que es una URL y que es el primer paso en el proceso de intercambio de información. Sin embargo, aunque es parte de nuestro día a día en línea, muchos de nosotros no sabemos el significado de su estructura. Por lo tanto, vamos a tomar como ejemplo la siguiente URL:
En su forma más básica, podemos dividir la URL en tres partes:
- El protocolo (http:// or https://) le indica al navegador cómo comunicarse con el servidor de un sitio web para enviar y recuperar información. Cuando se usa HTTPS, esto significa que es un HTTP seguro que tiene algunos estándares de seguridad adicionales y texto cifrado.
- El dominio (azion.com), que tiene un subdominio (blog.), es el nombre con el cual el sitio web es conocido (azion) y el TLD (.com). TLD es el acrónimo de Top Level Domain (dominio de nivel superior), que indica la categoría de los sitios web, como .com (comercial), .org (organizaciones) y .net (redes).
- La ruta (/edge) dirige el navegador a una página específica dentro del sitio web.
Historia del protocolo HTTP
Comencemos con el término hipertexto, que fue creado por Ted Nelson en 1965 y es definido como una “escritura no secuencial”. En otras palabras, es un tipo de texto que se ramifica, no es necesariamente lineal y contiene enlaces a otros textos. Este término, a su vez, se inspiró en las ideas expuestas anteriormente por Vannevar Bush en su artículo As We May Think, en 1945.
Posteriormente, en 1989, Tim Berners-Lee propuso el proyecto WorldWideWeb y, en 1991, junto con su equipo creó un protocolo que permitiría la recuperación de textos de otros documentos a través de enlaces de hipertextos, que se convertirían en el formato HTTP original. Los hipertextos fueron los primeros archivos que usaron HTML (HyperText Mark-up Language), un formato de texto para representar documentos en hipertexto. Tanto HTML como los hipertextos son textos, pero pueden servir como comandos, incluida la invocación de otros archivos como imágenes, videos, audios, entre otros. Su versión más reciente es HTML5.
Como todo en el mundo de Internet, el protocolo HTTP ha sufrido varias transformaciones y ha evolucionado bastante, como se puede ver a continuación:
- HTTP/0.9: la primera versión fue lanzada en 1991 y era bastante simple. Estaba enfocada en la transferencia de texto y solo tenía el método de solicitud GET; no tenía encabezados (headers) HTTP, estatus ni códigos de error.
- HTTP/1.0: esta versión es de 1996 y, además de la transferencia de texto simple, incluía la transmisión de datos más sofisticados, tales como metadata de solicitud/respuesta y negociación de contenido.
- HTTP/1.1: Esta versión de 1999 es considerada un hito en la evolución de Internet, ya que eliminó varios problemas que tenían las versiones anteriores e introdujo una serie de optimizaciones, como un mecanismo de caché adicional, codificación de transferencia fragmentada, canalización de solicitudes y cifrado de transferencia. Aunque existe una versión más reciente, esta sigue siendo la versión estándar y más usada en el mundo.
- HTTP/2: esta versión es de 2015 y está mejor preparada para el uso masivo y generalizado de Internet en la actualidad. Aunque no ha habido cambios en la semántica respecto a la versión anterior, incluye algunos notables beneficios como un mejor desempeño en el transporte de la información, seguridad de datos y una latencia significativamente menor.
- HTTP/3: lanzado en 2019, el protocolo HTTP/3 es aún más rápido, más confiable y más seguro. Tiene una diferencia fundamental respecto a la versión previa: un nuevo protocolo de transporte, el QUIC. Este protocolo está basado en UDP (User Datagram Protocol), que es más rápido que TCP en la transmisión de datos, ya que no pasa por el proceso de verificación de datos; sin embargo, esto lo hace menos seguro. Aunque no es un transporte confiable, QUIC agrega una capa adicional a UDP, lo que brinda funcionalidades como retransmisión de paquetes y control de congestionamiento. Otra importante funcionalidad de HTTP/3 es su compatibilidad con HTML5, la versión más reciente de HTML, lo que agrega la habilidad de programar de forma nativa.
¿Dónde se encaja HTTP en este proceso de comunicación?
HTTP es una pequeña pieza del proceso de comunicación, pero ¿dónde se encaja HTTP en todo esto? Para entenderlo mejor, primero revisemos rápidamente el modelo OSI.
El modelo OSI (Open System Interconnection, Interconexión del sistema abierto), creado por la Organización Internacional para la Estandarización (ISO, por sus siglas en inglés) en 1971, es un modelo de redes de computación que sirve como un estándar o regla para los protocolos de comunicación entre los diferentes sistemas de una red. En este modelo, el sistema de comunicación está dividido en siete capas abstractas, cada una con una función específica.
El protocolo HTTP funciona específicamente en la capa 7, la capa de aplicación, donde sucede la interacción entre usuarios y computadores; por ejemplo, cuando visitan un sitio web o revisan su correo electrónico. La capa de aplicación es responsable por los protocolos y la manipulación de datos de los cuales depende el software para presentar datos útiles al usuario. Además de HTTP, otros protocolos que operan en la capa de aplicación son: HTTPS, DNS, FTP, IMAP, MIME, POP, RTP, SMTP, TELNET, TFTP y TLS.
La comunicación con HTTP
Cuando un cliente quiere comunicarse con un servidor, lo primero que sucede, después que el usuario escribe la URL en el navegador o va a otra página, es que se abre una conexión TCP/IP y la solicitud HTTP es enviada al servidor. En esa solicitud, hay un mensaje con una serie de datos que describen lo que el usuario ha solicitado. Luego, el servidor envía la respuesta al cliente, que también incluye datos que pueden ser leídos. Finalmente, el proceso de solicitud-respuesta es finalizado. Ten en cuenta que todo esto sucede usualmente en milisegundos.
En el proceso de comunicación que describimos, puedes notar que hay dos aspectos esenciales: la solicitud y la respuesta.
Mensajes HTTP
¿Qué es una solicitud?
La solicitud (request, en inglés) es lo que el cliente necesita del servidor. Ese mensaje incluye datos específicos para describir lo que es solicitado. Los principales componentes de una solicitud son:
- El método, que indica la acción que el cliente quiere realizar, como:
- GET: para obtener recursos o recuperar datos desde el servidor; es el más común;
- POST: para enviar datos al servidor; por ejemplo, al registrar un formulario;
- HEAD: para resumir la línea de respuesta y los encabezados;
- PUT: para enviar archivos al servidor o hacer una actualización completa de un recurso;
- PATCH: para hacer una actualización parcial de un recurso;
- DELETE: para eliminar documentos en el servidor;
- OPTIONS: para consultar qué comandos están disponibles para un usuario determinado, y
- TRACE: para depurar solicitudes y devolver el encabezado de un documento.
- La ruta: el URI (Uniform Resource Identifier) del recurso que será buscado.
- La versión HTTP del protocolo.
- Los encabezados de solicitud, que contienen información adicional para los servidores.
- El cuerpo de la solicitud (request body), es opcional, pero necesaria para algunos métodos, como POST, y contiene el recurso solicitado.
¿Qué es una respuesta?
La respuesta (response) dada por el servidor contiene la información solicitada por el cliente o le informa si hay un error respecto a lo que fue solicitado. Incluye los siguientes elementos:
- El encabezado de respuesta: contiene la versión del protocolo, el código de estatus de la solicitud y el tipo de contenido que está incluido en el cuerpo.
- El código de estatus: indica si la solicitud fue exitosa o no. La respuesta proporciona códigos específicos, como:
- 200: la solicitud fue respondida de forma exitosa;
- 301: la solicitud fue movida permanentemente;
- 401: la solicitud no fue autorizada por el servidor;
- 404: la solicitud no fue encontrada por el servidor, y
- 500: error interno del servidor.
- El cuerpo de la respuesta: al igual que en la solicitud, es opcional y contiene datos sobre el recurso solicitado.
Otro aspecto interesante en la comunicación HTTP es el uso de caché, que mantiene copias de los datos a los que se accede con frecuencia. Básicamente, el caché acelera la búsqueda y el suministro de datos usados frecuentemente y ahorra el uso de recursos en un servidor, lo que mejora el desempeño y la velocidad del proceso; pero este es un tema para otra publicación.
Las desventajas de HTTP
Ya viste que el protocolo HTTP es básico para cualquier intercambio de información en Internet, aunque como todo en la vida, existe un pero: no es seguro. ¿Sabías que esta es exactamente la razón por la que es el objetivo de las acciones maliciosas? Entre los crímenes cibernéticos que pueden afectar al protocolo HTTP, podemos mencionar la intercepción de datos durante la transmisión de información y los ataques DDoS en la capa 7, también conocidos como ataques de inundación HTTP (HTTP flood attack), que sobrecargan un servidor con solicitudes HTTP. Cuando el servidor ya no puede responder al tráfico normal, será denegado el servicio a las solicitudes de usuarios legítimos.
Aunque todos los sitios y aplicaciones son susceptibles a este tipo de ataques, la buena noticia es que existen algunas formas de protegerse contra estas amenazas y Azion te brinda las mejores soluciones para nuestra seguridad: Web Application Firewall, DDoS Protection y Network Layer Protection.
Soluciones de seguridad de Azion
Web Application Firewall (WAF) protege a las aplicaciones web de numerosos riesgos, desde amenazas OWASP Top hasta sofisticados ataques de día cero. También protege la capa de aplicación (7), donde las aplicaciones acceden a los servicios de red, al actuar como una barrera que usa un conjunto de reglas para filtrar y monitorear el tráfico entre tu aplicación e Internet. En otras palabras, WAF opera específicamente en la seguridad de los protocolos HTTP/S, ya que analiza las solicitudes antes de que lleguen a tu infraestructura, sin afectar el desempeño de tus aplicaciones.
Nuestro producto DDoS Protection proporciona múltiples niveles de protección contra ataques DDoS, incluidos ataques a la capa 7, donde opera el protocolo HTTP. DDoS Protection usa nuestra red distribuida globalmente, además de diversos centros de mitigación, para proporcionar la inteligencia y la capacidad requeridas para mitigar incluso ataques masivos y más sofisticados.
Por otra parte, Network Layer Protection brinda una protección más amplia, ya que es un perímetro de seguridad programable en el edge de la red para el tráfico de entrada y de salida. Con esto, es posible bloquear, monitorear comportamientos sospechosos o aplicar penalizaciones, tales como limitar el número de accesos.
La elección de estás soluciones de mitigación de Azion puede ayudar a las empresas a protegerse contra tendencias recientes, como ataques masivos y más frecuentes, ataques a las API, así como estrategias de ataque complejas y en evolución.
La importancia de HTTP
HTTP es un protocolo simple, pero más que eso, es una característica sorprendente que también es accesible, ya que fue diseñado para tener mensajes que cualquier usuario pueda leer y comprender. Además, su naturaleza stateless simplifica el desempeño del servidor y lo hace más rápido, ya que no necesita almacenar o eliminar datos para las siguientes solicitudes. Si una transacción es interrumpida; ninguna parte del sistema es responsable por limpiar el estado actual del servidor. Otro aspecto fundamental es el hecho de que es extensible, lo que permite agregar nuevas funcionalidades y, por lo tanto, HTTP puede seguir las necesidades y la evolución de Internet en su misión de transmitir los datos que prácticamente mueven al mundo.