HTTP
HTTP (Protocolo de Transferencia de Hipertexto) es el protocolo que permite la comunicación entre cliente servidor. Un cliente, como un navegador web, envía una petición HTTP a un servidor web, que aloja los recursos solicitados, como documentos HTML, imágenes o archivos. Los servidores web responden con un codigo de respuesta HTTP, que contiene el recurso solicitado o un código de estado que indica el resultado de la petición.
HTTP es un protocolo sin estado, no guarda información sobre las conexiones anteriores. Cada petición y respuesta son independientes y no tienen relación con las anteriores o posteriores. Esto simplifica el diseño del protocolo, pero implica que no se puede mantener una sesión o un contexto entre el cliente y el servidor. Para solucionar este problema, se utilizan mecanismos como las cookies, que son pequeños datos que el servidor almacena en el cliente y que se envían con cada petición.
Características del protocolo HTTP
HTTP se basa en el modelo cliente-servidor, que consiste en dos roles: el cliente, que inicia la comunicación y solicita un recurso, y el servidor, que espera las peticiones y las procesa. El cliente y el servidor se comunican mediante mensajes HTTP, que tienen una estructura común: una línea inicial, unos encabezados y un cuerpo opcional.
La línea inicial indica el tipo de mensaje: si es una petición o una respuesta. En el caso de una petición, la línea inicial contiene el método de petición, la URL del recurso y la versión de HTTP. El método de petición indica la acción que se quiere realizar sobre el recurso, como GET (obtener), POST (enviar), PUT (actualizar) o DELETE (eliminar). La URL del recurso identifica de forma única el recurso solicitado. La versión de HTTP indica el nivel de compatibilidad del protocolo.
En el caso de una respuesta, la línea inicial contiene la versión de HTTP, el código de estado y la frase asociada. El código de estado indica si la petición ha sido exitosa o no, y en caso negativo, el motivo del error. Por ejemplo, 200 significa OK (éxito), 404 significa Not Found (no encontrado) y 500 significa Internal Server Error (error interno del servidor). La frase asociada es una breve descripción del código de estado.
Los encabezados son pares de nombre y valor separados por dos puntos, que proporcionan información adicional sobre el mensaje, como el tipo de contenido, la fecha, la longitud o las cookies. Los encabezados se agrupan en cuatro categorías, generales, de petición, de respuesta y de entidad. Los encabezados generales se aplican a ambos tipos de mensajes; los encabezados de petición se usan solo en las peticiones; los encabezados de respuesta se usan solo en las respuestas; y los encabezados de entidad se refieren al cuerpo del mensaje.
El cuerpo del mensaje es opcional y contiene los datos asociados al mensaje, como el contenido del recurso solicitado o enviado. El tipo y la longitud del cuerpo se indican en los encabezados correspondientes.
HTTP utiliza normalmente conexión TCP (Protocolo de Control de Transmisión) como protocolo de transporte, que garantiza la fiabilidad y el orden de los mensajes. Para establecer una conexión TCP entre el cliente y el servidor, se realiza un proceso llamado handshake (saludo), que consiste en tres pasos: el cliente envía un segmento SYN al servidor; el servidor responde con un segmento SYN-ACK; y el cliente confirma con un segmento ACK. Una vez establecida la conexión TCP, se pueden enviar los mensajes HTTP.
En algunos casos, se puede utilizar servidores proxy entre el cliente y el servidor. Un servidor proxy es un intermediario que recibe las peticiones HTTP del cliente y las reenvía al servidor destino, o viceversa. Un servidor proxy puede tener varias funciones, como encargado de mantener o mejorar el rendimiento mediante caché (almacenamiento temporal), filtrar contenidos no deseados o restringir el acceso a ciertos recursos.