Tutorial de HTTP
HTTP (Protocolo de Transferencia de Hipertexto, HyperText Transfer Protocol) es un protocolo de capa de aplicación para sistemas de información 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 a través de 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, y después de recibirla, el servidor devuelve los recursos correspondientes. Estos recursos pueden ser páginas web, imágenes, archivos de audio, vídeos, etc.
HTTP utiliza el modelo cliente-servidor, en el que 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: se establece una conexión entre el cliente y el servidor. En el HTTP tradicional, esto se basa en el protocolo TCP/IP. Los 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 a 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 el recurso correspondiente 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 el código de estado (para indicar el éxito o fracaso de la solicitud), los encabezados de respuesta (por ejemplo, Content-Type, Content-Length) y un cuerpo de respuesta opcional (por ejemplo, página 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 principales métodos HTTP son:
- GET: Solicita al servidor el recurso especificado. Es el método más utilizado para acceder a páginas.
- POST: Solicita al servidor que acepte y procese los datos del cuerpo de la solicitud, generalmente utilizado para el envío de formularios.
- PUT: Solicita al servidor almacenar un recurso y reemplazar todo el contenido del recurso objetivo 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 las respuestas 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 requieren acciones 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 mientras procesaba la solicitud.
Versiones de HTTP
HTTP tiene múltiples versiones. Actualmente se utilizan ampliamente HTTP/1.1 y HTTP/2, y HTTP/3 se está implementando gradualmente.
- HTTP/1.1: Admite conexiones persistentes, 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: Basado en tramas binarias, admite multiplexación, permitiendo múltiples intercambios independientes y bidireccionales a través de una única conexión HTTP/2.
- HTTP/3: Basado en el protocolo QUIC, tiene como objetivo reducir la latencia de 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 pueden ser interceptados o alterados. Para resolver este problema, se introdujo HTTPS (se explicará en detalle en el próximo capítulo), es decir, agregar el protocolo SSL/TLS sobre HTTP, proporcionando cifrado y autenticación para la transmisión de datos.
Otras extensiones