El protocolo HTTP
El protocolo HTTP, protocolo de transferencia de hipertextos, es un conjunto de normas y especificaciones para la transmisión de documentos entre navegadores y servidores web.
El protocolo HTTPS está basado en HTTP pero ofrece una capa de seguridad que impide que los datos puedan ser interceptados.
Todas las direcciones de páginas de internet comienzan por «http» o «https», eso significa que el navegador está usando estos protocolos para acceder a la web.
Estamos ante uno de los conceptos desarrollados en el origen de la «web» (junto a URI y HTML), de manos de Tim Berners-Lee.
Cuando abres un navegador y solicitas una página web, este se comunica con el servidor para solicitarla, el código/lenguaje en el que se comunican es el HTTP.
Explicándolo en más detalle:
- En la barra de direcciones del navegador, un usuario teclea tecnitium.com.
- El navegador envía la solicitud (petición HTTP) al servidor donde está alojada esa página web.
- El servidor web recibe la petición HTTP y busca el archivo (index), una vez localizado envía la cabecera (Header). Esta cabecera le transmite al cliente un código de estado, que es el resultado de la búsqueda:
- Si se ha encontrado el archivo solicitado y el cliente más allá de saber si existe lo ha pedido, el servidor envía después del header, el cuerpo del mensaje, que incluye el contenido solicitado.
- El navegador recibe el archivo y lo abre como página web.
La siguiente imagen es una representación gráfica del proceso de petición y respuesta bajo el protocolo:
Evolución del protocolo HTTP
Cuando el equipo de Tim Berners-Lee comenzó a desarrollar la web, en 1989, es donde situamos el origen de HTTP, su primera versión fue la 0.9 y únicamente era una línea de código que permitía solicitar un archivo HTML cada vez.
GET /index.html
En 1996, cuando la web se había convertido en un fenómeno en auge, la IETF definió como propuesta la versión HTTP/1, esta versión incluía un header que incluía tanto la petición del cliente como la respuesta del servidor, también se introdujo el campo «content-type» que permitía la transferencia de archivos que no fuese HTML.
El primer estándar oficial
En 1997 se publica HTTP/1.1, considerada como el primer estándar oficial:
- Las conexiones ahora pueden extenderse más allá de la solicitud, el header gestiona una conexión persistente a través del comando «keepalive».
- Es posible que el cliente envíe otra solicitud antes de recibir la respuesta de la primera, esto se define como HTTP pipelining.
- Ahora es posible que el cliente transfiera datos al servidor.
- Se establecen medios para almacenar información en caché.
- Se posibilita el rastro de la ruta cliente-servidor con el método TRACE.
- Las solicitudes funcionan también si hay varios dominios alojados en el servidor, frecuente en hosting compartido, esto se logra con la especificación «host».
El paso de HTTP/2, transmisión binaria.
A medida que las webs se extendían y añadían recursos pesados, los tiempos de carga de la respuesta se dilataban y el modelo clásico de petición-respuesta HTTP 1.1 empezaba a perder terreno frente a SPDY, un protocolo experimental de google que serviría como base para que en 2015 se publicase la versión HTTP/2, el cual incluía:
- El protocolo pasa a trabajar con datos binarios en lugar de archivos de texto.
- Ahora es posible la gestión de varias solicitudes HTTP simultaneas, existe el multiplexado.
- Se comprimen los headers para evitar redundancia de datos.
- Los servidores comienzan a cargar en caché datos previa petición, lo cual acelera los tiempos.
Todo esto se traduce en un aumento del rendimiento de los tiempos de carga:
Actualmente, el protocolo HTTP/2 presenta un inconveniente importante, y es que la transmisión se realiza bajo el protocolo TCP (protocolo de control de transmisión), el cual necesita que la recepción de los paquetes sea confirmada individualmente, de lo contrario todos los paquetes posteriores deben esperar al reenvío del perdido, esto genera un «head-of-line blocking».
La nueva versión HTTP/3 no funcionará con TCP, lo hará con QUIC (Quick UDP internet connections), un protocolo creado en base a UDP, dado que no aplica esas medidas.
Aquí se puede ver el uso actual de cada versión de HTTP en la web: estadísticas de uso.