Introduccion Al Protocolo HTTP
Introduccion Al Protocolo HTTP
Introduccion Al Protocolo HTTP
Lima – Perú
2019
HTTP, de sus siglas en inglés: "Hypertext Transfer Protocol", es el nombre de un
protocolo el cual nos permite realizar una petición de datos y recursos, como pueden
ser documentos HTML. Es la base de cualquier intercambio de datos en la Web, y un
protocolo de estructura cliente-servidor, esto quiere decir que una petición de datos es
iniciada por el elemento que recibirá los datos (el cliente), normalmente un navegador
Web. Así, una página web completa resulta de la unión de distintos sub-documentos
recibidos, como, por ejemplo: un documento que especifique el estilo de maquetación
de la página web (CSS), el texto, las imágenes, vídeos, scripts, etc...
El agente del usuario, es cualquier herramienta que actué en representación del usuario.
Esta función es realizada en la mayor parte de los casos por un navegador Web. Hay
excepciones, como el caso de programas específicamente usados por desarrolladores
para desarrollar y depurar sus aplicaciones.
El servidor Web
Al otro lado del canal de comunicación, está el servidor, el cual "sirve" los datos que ha
pedido el cliente. Un servidor conceptualmente es una única entidad, aunque puede
estar formado por varios elementos, que se reparten la carga de peticiones, (load
balancing), u otros programas, que gestionan otros computadores (como cache, bases
de datos, servidores de correo electrónico, ...), y que generan parte o todo el
documento que ha sido pedido.
Un servidor no tiene que ser necesariamente un único equipo físico, aunque si que
varios servidores pueden estar funcionando en un único computador. En el estándar
HTTP/1.1 y HOST, pueden incluso compartir la misma dirección de IP.
Proxies
Entre el cliente y el servidor, además existen distintos dispositivos que gestionan los
mensajes HTTP. Dada la arquitectura en capas de la Web, la mayoría de estos
dispositivos solamente gestionan estos mensajes en los niveles de protocolo inferiores:
capa de transporte, capa de red o capa física, siendo así transparentes para la capa de
comunicaciones de aplicación del HTTP, además esto aumenta el rendimiento de la
comunicación. Aquellos dispositivos, que sí operan procesando la capa de aplicación
son conocidos como proxies. Estos pueden ser transparentes, o no (modificando las
peticiones que pasan por ellos), y realizan varias funciones:
Caching (la caché puede ser pública o privada, como la caché de un navegador)
Filtrado (como un anti-virus, control parental, ...)
Balanceo de carga de peticiones (para permitir a varios servidores responder a la carga
total de peticiones que reciben)
Autentificación (para el control al acceso de recursos y datos)
Registro de eventos (para tener un histórico de los eventos que se producen)
HTTP es extensible.
Presentadas en la versión HTTP/1.0, las cabeceras de HTTP, han hecho que este
protocolo sea fácil de ampliar y de experimentar con él. Funcionalidades nuevas pueden
desarrollarse, sin más que un cliente y su servidor, comprendan la misma semántica
sobre las cabeceras de HTTP.
HTTP y conexiones
Una conexión se gestiona al nivel de la capa de trasporte, y por tanto queda fuera del
alcance del protocolo HTTP. Aún con este factor, HTTP no necesita que el protocolo
que lo sustenta mantenga una conexión continua entre los participantes en la
comunicación, solamente necesita que sea un protocolo fiable o que no pierda mensajes
(como mínimo, en todo caso, un protocolo que sea capaz de detectar que se ha pedido
un mensaje y reporte un error). De los dos protocolos más comunes en Internet, TCP
es fiable, mientras que UDP, no lo es. Por lo tanto HTTP, se apoya en el uso del
protocolo TCP, que está orientado a conexión, aunque una conexión continua no es
necesaria siempre.
En la versión del protocolo HTTP/1.0, habría una conexión TCP por cada
petición/respuesta intercambiada, presentando esto dos grandes inconvenientes: abrir
y crear una conexión requiere varias rondas de mensajes y por lo tanto resultaba
lento. Esto sería más eficiente si se mandaran varios mensajes.
Se presenta a continuación una lista con los elementos que se pueden controlar con el
protocolo HTTP:
Cache
El cómo se almacenan los documentos en la caché, puede ser especificado por HTTP.
El servidor puede indicar a los proxies y clientes, que quiere almacenar y durante cuánto
tiempo. Aunque el cliente, también puede indicar a los proxies de caché intermedios que
ignoren el documento almacenado.
Flexibilidad del requisito de origen
Para prevenir invasiones de la privacidad de los usuarios, los navegadores Web,
solamente permiten a páginas del mismo origen, compartir la información o datos. Esto
es una complicación para el servidor, asi que mediante cabeceras HTTP, se puede
flexibilizar o relajar esta división entre cliente y servidor
Autentificación
Hay páginas Web, que pueden estar protegidas, de manera que solo los usuarios
autorizados puedan acceder. HTTP provee de servicios básicos de autentificación, por
ejemplo mediante el uso de cabeceras como: WWW-AUTHENTICATE, o
estableciendo una sesión especifica mediante el uso de HTTP cookies.
Proxies y tunneling
Servidores y/o clientes pueden estar en intranets y esconder así su verdadera
dirección IP a otros. Las peticiones HTTP utilizan los proxies para acceder a ellos.
Pero no todos los proxies son HTTP proxies. El protocolo SOCKS, por ejemplo, opera
a un nivel más bajo. Otros protocolos, como el FTP, pueden ser servidos mediante
estos proxies.
Sesiones
El uso de HTTP cookies permite relacionar peticiones con el estado del servidor. Esto
define las sesiones, a pesar de que por definición el protocolo HTTP es un protocolo
sin estado. Esto es muy útil no sólo para aplicaciones de comercio electrónico, sino
también para cualquier sitio que permita configuración al usuario.
Flujo de HTTP
Cuando el cliente quiere comunicarse con el servidor, tanto si es directamente con él,
o a través de un proxy intermedio, realiza los siguientes pasos:
1. Abre una conexión TCP: la conexión TCP se usará para hacer una petición, o varias, y
recibir la respuesta. El cliente pude abrir una conexión nueva, reusar una existente, o
abrir varias a la vez hacia el servidor.
2. Hacer una petición HTTP: Los mensajes HTTP (previos a HTTP/2) son legibles en
texto plano. A partir de la versión del protocolo HTTP/2, los mensajes se encapsulan
en franjas, haciendo que no sean directamente interpretables, aunque el principio de
operación es el mismo.
1.GET / HTTP/1.1
2.Host: developer.mozilla.org
3.Accept-Language: fr
1. HTTP/1.1 200 OK
2. Date: Sat, 09 Oct 2010 14:28:02 GMT
3. Server: Apache
4. Last-Modified: Tue, 01 Dec 2009 20:18:22 GMT
5. ETag: "51142bc1-7449-479b075b2891b"
6. Accept-Ranges: bytes
7. Content-Length: 29769
8. Content-Type: text/html
9.
10. <!DOCTYPE html... (here comes the 29769 bytes of the requested web page)
Existen dos tipos de mensajes HTTP: peticiones y respuestas, cada uno sigue su
propio formato.
Existen dos tipos de mensajes HTTP: peticiones y respuestas, cada uno sigue su
propio formato.
Peticiones
Un ejemplo de petición HTTP:
Un método HTTP, normalmente pueden ser un verbo, como: GET, POST o un nombre
como: OPTIONS o HEAD, que defina la operación que el cliente quiera realizar. El objetivo
de un cliente, suele ser una petición de recursos, usando GET, o presentar un valor de
un formulario HTML, usando POST, aunque en otras ocasiones puede hacer otros
tipos de peticiones.
La dirección del recurso pedido; la URL del recurso, sin los elementos obvios por el
contexto, como pueden ser: sin
el protocolo (http://), el dominio(aquí developer.mozilla.org), o el puerto TCP (aquí el
80).
La versión del protocolo HTTP.
Cabeceras HTTP opcionales, que pueden aportar información adicional a los
servidores.
O un cuerpo de mensaje, en algún método, como puede ser POST, en el cual envía la
información para el servidor.
Respuestas
Un ejemplo de repuesta:
Conclusión
El protocólo HTTP es un protocolo ampliable y fácil de usar. Su estructura cliente-
servidor, junto con la capacidad para usar cabeceras, permite a este protocolo
evolucionar con las nuevas y futuras aplicaciones en Internet.