Documentos de Académico
Documentos de Profesional
Documentos de Cultura
HTTP es un protocolo cliente-servidor: las solicitudes las envía una entidad, el agente de usuario (o
un proxy en su nombre). La mayoría de las veces, el agente de usuario es un navegador web, pero
puede ser cualquier cosa, por ejemplo, un robot que rastrea la web para completar y mantener un
índice de motor de búsqueda.
Cada solicitud individual se envía a un servidor, que la maneja y proporciona una respuesta
llamada respuesta . Entre el cliente y el servidor existen numerosas entidades, denominadas
colectivamente proxies , que realizan diferentes operaciones y actúan como pasarelas o cachés ,
por ejemplo.
En realidad, hay más computadoras entre un navegador y el servidor que maneja la solicitud: hay
enrutadores, módems y más. Gracias al diseño en capas de la Web, estas quedan ocultas en las
capas de red y transporte. HTTP está en la parte superior, en la capa de aplicación. Aunque son
importantes para diagnosticar problemas de red, las capas subyacentes son en su mayoría
irrelevantes para la descripción de HTTP.
El agente de usuario es cualquier herramienta que actúa en nombre del usuario. Esta función la
realiza principalmente el navegador web, pero también pueden realizarla los programas que
utilizan los ingenieros y los desarrolladores web para depurar sus aplicaciones.
Para mostrar una página web, el navegador envía una solicitud original para obtener el documento
HTML que representa la página. Luego analiza este archivo y realiza solicitudes adicionales
correspondientes a secuencias de comandos de ejecución, información de diseño (CSS) para
mostrar y subrecursos contenidos en la página (generalmente imágenes y videos). El navegador
web luego combina estos recursos para presentar el documento completo, la página web. Los
scripts ejecutados por el navegador pueden obtener más recursos en fases posteriores y el
navegador actualiza la página web en consecuencia.
Una página Web es un documento de hipertexto. Esto significa que algunas partes del contenido
que se muestra son enlaces, que se pueden activar (generalmente con un clic del mouse) para
obtener una nueva página web, lo que permite al usuario dirigir su agente de usuario y navegar
por la web. El navegador traduce estas instrucciones en solicitudes HTTP y, además, interpreta las
respuestas HTTP para presentar al usuario una respuesta clara.
El servidor web
apoderados
almacenamiento en caché (el caché puede ser público o privado, como el caché del
navegador)
filtrado (como un análisis antivirus o controles parentales)
Equilibrio de carga (para permitir que varios servidores atiendan diferentes solicitudes)
autenticación (para controlar el acceso a diferentes recursos)
registro (permitiendo el almacenamiento de información histórica)
HTTP es simple
HTTP generalmente está diseñado para ser simple y legible por humanos, incluso con la
complejidad adicional introducida en HTTP/2 al encapsular mensajes HTTP en marcos. Los
humanos pueden leer y comprender los mensajes HTTP, lo que facilita las pruebas para los
desarrolladores y reduce la complejidad para los recién llegados.
HTTP es extensible
Introducidos en HTTP/1.0, los encabezados HTTP hacen que este protocolo sea fácil de ampliar y
experimentar. Incluso se puede introducir una nueva funcionalidad mediante un simple acuerdo
entre un cliente y un servidor sobre la semántica de un nuevo encabezado.
HTTP no tiene estado: no existe un vínculo entre dos solicitudes que se realizan sucesivamente en
la misma conexión. Esto tiene la perspectiva inmediata de ser problemático para los usuarios que
intentan interactuar con ciertas páginas de manera coherente, por ejemplo, utilizando cestas de
compras de comercio electrónico. Pero mientras que el núcleo de HTTP en sí no tiene estado, las
cookies de HTTP permiten el uso de sesiones con estado. Usando la extensibilidad del encabezado,
las cookies HTTP se agregan al flujo de trabajo, lo que permite la creación de sesiones en cada
solicitud HTTP para compartir el mismo contexto o el mismo estado.
HTTP y conexiones
Una conexión se controla en la capa de transporte y, por lo tanto, fundamentalmente fuera del
alcance de HTTP. HTTP no requiere que el protocolo de transporte subyacente esté basado en
conexión; solo requiere que sea confiable , o que no pierda mensajes (como mínimo, que presente
un error en tales casos). Entre los dos protocolos de transporte más comunes en Internet, TCP es
confiable y UDP no lo es. Por lo tanto, HTTP se basa en el estándar TCP, que se basa en la conexión.
Se están realizando experimentos para diseñar un mejor protocolo de transporte más adecuado
para HTTP. Por ejemplo, Google está experimentando con QUIC , que se basa en UDP para
proporcionar un protocolo de transporte más confiable y eficiente.
Esta naturaleza extensible de HTTP, con el tiempo, ha permitido un mayor control y funcionalidad
de la Web. Los métodos de caché y autenticación fueron funciones manejadas al principio de la
historia de HTTP. La capacidad de relajar la restricción de origen , por el contrario, solo se agregó en
la década de 2010.
flujo HTTP
Cuando un cliente quiere comunicarse con un servidor, ya sea el servidor final o un proxy
intermedio, realiza los siguientes pasos:
1. Abrir una conexión TCP: La conexión TCP se utiliza para enviar una solicitud, o varias, y recibir
una respuesta. El cliente puede abrir una nueva conexión, reutilizar una conexión existente o
abrir varias conexiones TCP a los servidores.
2. Envíe un mensaje HTTP: los mensajes HTTP (antes de HTTP/2) son legibles por humanos. Con
HTTP/2, estos mensajes simples se encapsulan en marcos, lo que los hace imposibles de leer
directamente, pero el principio sigue siendo el mismo. Por ejemplo:
GET / HTTP/1.1
Host: developer.mozilla.org
Accept-Language: fr
HTTP/1.1 200 OK
Date: Sat, 09 Oct 2010 14:28:02 GMT
Server: Apache
Last-Modified: Tue, 01 Dec 2009 20:18:22 GMT
ETag: "51142bc1-7449-479b075b2891b"
Accept-Ranges: bytes
Content-Length: 29769
Content-Type: text/html
<!DOCTYPE html>… (here come the 29769 bytes of the requested web page)
Si la canalización HTTP está activada, se pueden enviar varias solicitudes sin esperar a que se reciba
completamente la primera respuesta. La canalización de HTTP ha resultado difícil de implementar
en las redes existentes, donde las piezas antiguas de software coexisten con las versiones
modernas. La canalización HTTP se reemplazó en HTTP/2 con solicitudes de multiplexación más
sólidas dentro de un marco.
Mensajes HTTP
Los mensajes HTTP, tal como se definen en HTTP/1.1 y versiones anteriores, son legibles por
humanos. En HTTP/2, estos mensajes están incrustados en una estructura binaria, un marco , lo que
permite optimizaciones como la compresión de encabezados y la multiplexación. Incluso si solo se
envía una parte del mensaje HTTP original en esta versión de HTTP, la semántica de cada mensaje
no cambia y el cliente reconstituye (virtualmente) la solicitud HTTP/1.1 original. Por lo tanto, es útil
comprender los mensajes HTTP/2 en el formato HTTP/1.1.
Hay dos tipos de mensajes HTTP, solicitudes y respuestas, cada uno con su propio formato.
Peticiones
Respuestas
Un ejemplo de respuesta:
La API más utilizada basada en HTTP es la XMLHttpRequest API, que se puede utilizar para
intercambiar datos entre un agente de usuario y un servidor. El moderno Fetch API proporciona las
mismas funciones con un conjunto de funciones más potente y flexible.
Otra API, los eventos enviados por el servidor , es un servicio unidireccional que permite que un
servidor envíe eventos al cliente, utilizando HTTP como mecanismo de transporte. Usando
la EventSource interfaz, el cliente abre una conexión y establece controladores de eventos. El
navegador del cliente convierte automáticamente los mensajes que llegan en el flujo HTTP
en Event objetos apropiados. Luego, los entrega a los controladores de eventos que se han
registrado para los eventos type si se conocen, o al onmessage controlador de eventos si no se
estableció un controlador de eventos específico del tipo.
Conclusión
HTTP es un protocolo extensible que es fácil de usar. La estructura cliente-servidor, combinada con
la capacidad de agregar encabezados, permite que HTTP avance junto con las capacidades
extendidas de la Web.
Aunque HTTP/2 agrega algo de complejidad al incorporar mensajes HTTP en marcos para mejorar
el rendimiento, la estructura básica de los mensajes se ha mantenido igual desde HTTP/1.0. El flujo
de sesión sigue siendo simple, lo que permite investigarlo y depurarlo con un simple monitor de
mensajes HTTP .