Tutorial de HTTP


HTTP (Protocolo de Transferencia de Hipertexto, HyperText Transfer Protocol) es un protocolo de capa de aplicación utilizado para sistemas de información hipermedia distribuidos, colaborativos y de hipermedia.

HTTP es la base de la comunicación de datos de la World Wide Web (WWW). Su propósito de diseño es garantizar la comunicación entre el cliente y el servidor, y es uno de los protocolos más utilizados en Internet.

HTTP es un protocolo basado en el protocolo de comunicación TCP/IP para transmitir datos (archivos HTML, archivos de imagen, resultados de consultas, etc.).

El propósito original del diseño de HTTP fue proporcionar un método para publicar y recibir páginas HTML. Los recursos solicitados mediante los protocolos HTTP o HTTPS se identifican mediante Identificadores Uniformes de Recursos (Uniform Resource Identifiers, URI).


Solicitud-respuesta de HTTP

El principio básico de funcionamiento de HTTP es que el cliente (generalmente un navegador web) envía una solicitud al servidor; después de recibir la solicitud, el servidor devuelve los recursos correspondientes. Estos recursos pueden ser páginas web, imágenes, archivos de audio, videos, etc.

HTTP utiliza el modelo cliente-servidor, donde el cliente envía solicitudes y el servidor devuelve respuestas.

El modelo de solicitud-respuesta de HTTP generalmente consta de los siguientes pasos:

  • Establecer conexión: El cliente y el servidor establecen una conexión. En el HTTP tradicional, esto se basa en el protocolo TCP/IP. Las versiones más recientes, HTTP/2 y HTTP/3, utilizan protocolos de capa de transporte más avanzados, como el protocolo binario basado en TCP (HTTP/2) o el protocolo QUIC basado en UDP (HTTP/3).

  • Enviar solicitud: El cliente envía una solicitud al servidor. La solicitud incluye la URL del recurso al que se desea acceder, el método de solicitud (GET, POST, PUT, DELETE, etc.), los encabezados de solicitud (por ejemplo, Accept, User-Agent) y un cuerpo de solicitud opcional (para solicitudes POST o PUT).

  • Procesar solicitud: Después de recibir la solicitud, el servidor encuentra los recursos correspondientes según la información de la solicitud y ejecuta las operaciones de procesamiento correspondientes. Esto puede implicar recuperar datos de una base de datos, generar contenido dinámico o simplemente devolver archivos estáticos.

  • Enviar respuesta: El servidor encapsula el resultado procesado en una respuesta y lo envía de vuelta al cliente. La respuesta incluye un código de estado (para indicar el éxito o el fracaso de la solicitud), encabezados de respuesta (por ejemplo, Content-Type, Content-Length) y un cuerpo de respuesta opcional (por ejemplo, páginas HTML, datos de imagen).

  • Cerrar conexión: Después de completar el ciclo de solicitud-respuesta, la conexión entre el cliente y el servidor puede cerrarse, a menos que se utilice una conexión persistente (como keep-alive en HTTP/1.1).


Métodos HTTP

Los métodos HTTP especifican qué acciones puede realizar el cliente sobre los recursos del servidor.

Los métodos HTTP principales son:

  • GET: Solicita al servidor obtener el recurso especificado. Es el método más utilizado para acceder a páginas.
  • POST: Solicita al servidor aceptar y procesar los datos del cuerpo de la solicitud; generalmente se utiliza para el envío de formularios.
  • PUT: Solicita al servidor almacenar un recurso y reemplazar todo el contenido del recurso de destino con el contenido del cuerpo de la solicitud.
  • DELETE: Solicita al servidor eliminar el recurso especificado.
  • HEAD: Similar a GET, pero no obtiene el contenido del recurso, solo obtiene la información de los encabezados de respuesta.

Códigos de estado HTTP

Los códigos de estado HTTP son la respuesta del servidor a las solicitudes del cliente.

Los códigos de estado se dividen en cinco categorías:

  • 1xx (Códigos de estado informativos): Indica que la solicitud recibida está siendo procesada.
  • 2xx (Códigos de estado de éxito): Indica que la solicitud se ha procesado correctamente.
  • 3xx (Códigos de estado de redirección): Se necesitan operaciones adicionales para completar esta solicitud.
  • 4xx (Códigos de estado de error del cliente): Indica que la solicitud contiene errores de sintaxis o no se puede completar.
  • 5xx (Códigos de estado de error del servidor): El servidor ha encontrado un error durante el procesamiento de la solicitud.

Versiones de HTTP

HTTP tiene múltiples versiones. Actualmente, las más utilizadas son HTTP/1.1 y HTTP/2, y HTTP/3 se está promoviendo gradualmente.

  • HTTP/1.1: Admite conexiones persistentes, lo que permite que múltiples solicitudes/respuestas se transmitan a través de la misma conexión TCP, reduciendo el costo de establecer y cerrar conexiones.
  • HTTP/2: Se basa en tramas binarias (binary framing), admite multiplexación y permite iniciar múltiples intercambios independientes y bidireccionales simultáneamente a través de una única conexión HTTP/2.
  • HTTP/3: Se basa en el protocolo QUIC, diseñado para reducir la latencia de la red, mejorar la velocidad de transmisión y la seguridad.

Seguridad


HTTP en sí mismo no es seguro, porque los datos transmitidos no están cifrados y podrían ser interceptados o manipulados. Para resolver este problema, se introdujo HTTPS (se explicará en detalle en el siguiente capítulo), que añade el protocolo SSL/TLS sobre HTTP, proporcionando cifrado y autenticación para la transmisión de datos.

Otras extensiones