La World Wide Web (WWW)
Introducción
La WWW es un sistema de distribución de información basado en hipertexto y accesible a través de Internet. Su base es el hipertexto, que permite relacionar documentos de manera que es posible moverse de uno a otro de forma directa.
Arquitectura y Componentes
Modelo Cliente-Servidor
La WWW utiliza el modelo cliente-servidor, donde los clientes (navegadores web) solicitan páginas web a los servidores web.
Componentes esenciales
- HTML: Lenguaje de etiquetas que se emplea en la elaboración de páginas web.
- HTTP: Protocolo de aplicación que funciona sobre TCP, usado para realizar las transacciones en la WWW.
- URI: Identificador Uniforme de Recurso, es una cadena de caracteres que identifica inequívocamente un recurso.
- Servidor Proxy: Servidor que actúa como intermediario para las peticiones de los clientes, buscando los recursos en otros servidores. Un proxy con caché mantiene copias de recursos y los sirve cuando un cliente los solicita, reduciendo el tiempo de servicio y ahorrando ancho de banda.
URI: Identificador Uniforme de Recursos
Una URI es una cadena de caracteres que identifica inequívocamente un recurso. Son esenciales para implementar el hipertexto, ya que permiten realizar los enlaces de los recursos de la WWW. Se dividen en dos tipos en función de cómo describen un recurso:
Tipos de URI
- URN (Uniform Resource Name): Identifica el recurso con un nombre único sin aportar información sobre su ubicación.
- URL (Uniform Resource Locator): Identifica el recurso como una combinación del mecanismo de acceso y la localización del recurso.
Sintaxis de una URL
Una URL está formada por dos componentes: la localización del recurso y el método para acceder a él.
Sintaxis de una URL relativa
Para simplificar la parte de localización del recurso se utiliza la URL relativa, que prescinde de algunas partes de las URL para hacerlas más breves. Para que sean útiles, hay que conocer la URL base.
Protocolo HTTP
El Protocolo de Transferencia de Hipertexto (HTTP) es un protocolo que trabaja sobre TCP y se utiliza para realizar transacciones en la WWW. Define la sintaxis y la semántica que utilizan los elementos de la arquitectura web para comunicarse.
Características de HTTP
- Orientado a transacciones: Sigue el esquema de petición-respuesta.
- Sin estado: No guarda información de conexiones anteriores.
Modo de Operación
Tras la conexión TCP con el puerto 80 del servidor se producen dos pasos:
- Petición del cliente: El cliente envía un mensaje formateado de acuerdo al protocolo HTTP donde se especifica el recurso deseado.
- Respuesta del servidor: El servidor indica el resultado de la petición.
Conexión persistente y Pipelining
En HTTP/1.0 cada conexión TCP ocasionaba un único intercambio. En HTTP/1.1 se permite realizar una conexión persistente, donde la conexión TCP se mantiene abierta de manera que se pueden hacer múltiples intercambios de petición/respuesta. HTTP/1.1 introduce otra mejora, el pipelining, donde el cliente hace múltiples peticiones sin esperar la respuesta.
Mensajes HTTP
Cliente y servidor intercambian mensajes. El formato basado en texto es similar al SMTP. Un mensaje genérico tiene los siguientes componentes:
- Línea de inicio: Indica la naturaleza del mensaje. En peticiones lleva el método y la URI del objeto requerido, en las respuestas los códigos de estado.
- Cabeceras del mensaje: Incluyen detalles que se quieren proporcionar.
- Línea vacía: Para separar la cabecera del cuerpo.
- Cuerpo del mensaje: Solo es necesario en ciertos tipos de mensajes. Puede llevar detalles de un error en una respuesta o, más comúnmente, transportar un recurso.
- Cola del mensaje: Similar a las cabeceras, utilizado cuando se realiza «chunking».
Formato del Mensaje de Petición
Línea de Petición
Contiene 3 campos:
- Método: Indica el tipo de acción que se solicita.
- URI: Es una URL HTTP.
- Versión HTTP: Necesario para que el servidor envíe la respuesta en un formato entendible por el cliente.
Cabeceras
- Cabeceras generales: Relativas al mensaje en sí y no al contenido.
- Cabecera de petición: Detalles sobre la petición del cliente.
- Cabecera de entidad: Describe la entidad transportada en el campo mensaje.
Métodos HTTP
- GET: Solicita que se le entregue el recurso especificado en la URL. Puede darse un GET condicional (solo se envía el recurso si se cumplen ciertos requisitos) o parcial (solo se desea parte del recurso especificado).
- POST: Permite a un cliente enviar una entidad que contenga datos para que sean procesados por el servidor. Es utilizado para enviar información en formularios.
- HEAD: Es idéntico al GET, pero le indica al servidor que no envíe el cuerpo del mensaje. El servidor responde únicamente con las cabeceras que acompañarían a una respuesta a un comando GET.
- PUT: Sube un recurso especificado al servidor.
- DELETE: Solicita eliminar un recurso en el servidor.
Formato del Mensaje de Respuesta
Línea de Estado
- Versión HTTP: Versión HTTP de la respuesta.
- Código de estado: Es un código de 3 números que proporciona información sobre el resultado de procesar la petición del cliente.
- Frase: Un texto que describe el código de estado.
Cabeceras
- Cabeceras generales: Relativas al mensaje en sí y no al contenido.
- Cabeceras de respuesta: Detalles sobre la respuesta, ampliando la información de la línea de estado.
- Cabeceras de entidad: Describen la entidad en el cuerpo del mensaje.
Códigos de Estado
- 1xx: Respuestas informativas, proporcionan información general.
- 2xx: Peticiones correctas (petición recibida, entendida y aceptada).
- 3xx: Redirecciones, el cliente tiene que tomar una acción adicional para completar la petición.
- 4xx: Errores del cliente, la solicitud contiene sintaxis incorrecta o no puede procesarse.
- 5xx: El servidor falló al completar una solicitud aparentemente válida.
Codificación en HTTP
La definición de las entidades HTTP se realiza de forma equivalente a como lo hace MIME, que permite el envío de recursos en SMTP.
HTTP puede realizar una codificación a dos niveles:
- Content-Encoding: Aplicada a la entidad portada, se utiliza para compresión extremo a extremo. Existen tres tipos de algoritmos estandarizados: gzip, compress, deflate.
- Transfer-Encoding: Se aplica a todo el mensaje, no solo a la entidad, y garantiza que el mensaje puede transmitirse entre dos dispositivos sin problemas.
Chunking
Para no tener que almacenar el recurso antes de enviarlo se utiliza un método Transfer-Encoding denominado chunking, donde la entidad se trocea de manera que se puede ir enviando trozo a trozo.