El protocolo HTTP (HyperText Transfer Protocol) o protocolo de transferencia de hipertexto, es un protocolo del nivel de aplicación (capa 7) del modelo OSI que nos permite transferir información (páginas web, imágenes, vídeos, documentos, etc.) entre un cliente (petición), normalmente un navegador web, y un servidor web (respuesta). Seguramente sea el servicio más importante de Internet ya que muchas veces asociamos Internet con la navegación web.
El protocolo HTTP implementa una serie de métodos (GET, POST, PUT, etc.) que van a permitir una interacción dinámica entre cliente y servidor. En esta interacción son fundamentales los códigos de respuesta que el servidor devuelve al cliente para informarle del estado de su solicitud (200-OK, 404-Not Found, 500-Internal Server Error, etc.). Estos códigos están agrupados de la siguiente manera:
- Códigos 1XX: Son códigos informativos. La petición la ha recibido el servidor y pasa a atenderla.
- Códigos 2XX: Son códigos de éxito. La petición ha sido recibida, entendida y procesada correctamente por el servidor.
- Códigos 3XX: Son códigos de redirección. La petición conlleva algún tipo de redirección, pues el recurso solicitado ha sido movido a otra ubicación.
- Códigos 4XX: Son códigos de error de cliente. Por diversos motivos el servidor no ha podido encontrar el recurso solicitado por el cliente.
- Códigos 5XX: Son códigos de error de servidor. La solicitud del cliente es correcta pero el servidor no puede completarla normalmente por una mala configuración de este.
Los mensajes del protocolo HTTP, tanto del cliente como del servidor tienen la misma estructura, están divididos en cuatro partes:
- Línea de petición (cliente) o de estado (servidor) del mensaje: Aquí se indica el método que utiliza el cliente (GET, POST, etc.), el protocolo HTTP que se está utilizando (HTTP/1.1), el URI del recurso que solicita el cliente, el código de respuesta del servidor.
- Cabecera del mensaje: Aquí se especifican metadatos que aportan información sobre la petición o respuesta. Cada cabecera se especifica con un nombre, luego dos puntos, y termina con el valor de dicha cabecera.
- Línea en blanco: Sirve de separación entre la cabecera y el cuerpo del mensaje.
- Cuerpo del mensaje: Esta parte es opcional, por ejemplo, la petición GET no la usa, y se utiliza para enviar información adicional del mensaje. Es una parte muy variable, por ejemplo, es donde el servidor coloca el código HTML de una página web previamente solicitada por el cliente. También es donde el método POST coloca la información que desde el cliente se envía al servidor.
La siguiente imagen muestra un mensaje de respuesta del servidor a un mensaje de petición del cliente de una página web.
HTTP fue creado en 1999 por el W3C (World Wide Web Consortium) en colaboración con la IETF (Internet Engineering Task Force). Ha pasado por numerosas versiones hasta alcanzar la actual, fijada en el año 2015 y llamada HTTP/2. El primer estándar se creo en 1991 (HTTP/0.9), y posteriormente han ido surgiendo nuevas versiones: 1996 (HTTP/1.0), 1999 (HTTP/1.1), 2000 (HTTP/1.2) y, finalmente, la vigente en 2015 (HTTP/2). Desde el año 2018 se viene trabajando en la versión HTTP/3, la cual se mantiene todavía como borrador.
HTTPS (HyperText Transfer Protocol Secure) es la versión segura del protocolo HTTP, para lo que usa un cifrado basado en SSL/TLS (Secure Socket Layer y su sucesor Transfer Layer Security). Su estándar fue creado en el año 2000 con el documento RFC 2818.
Por último, recordar los puertos del lado del servidor que utilizan estos dos protocolos:
- HTTP usa el puerto 80/TCP.
- HTTPS usa el puerto 443/TCP.