• Contienen Recurso web
  • Es lo que vemos en nuestro navegador web (Safari, Chrome, Firefox, etc.).
    • Es el resultado de procesar la información solicitada, generalmente ficheros en formato HTML, aunque hoy en día se pueden encontrar en otros formatos.
  • Generalmente, una página web está formada por:
Páginas web
  • Es cualquier tipo de archivo que se pueda solicitar y presentar en un navegador web, como por ejemplo:
    • Ficheros HTML
    • Imágenes en formatos como JPEG, PNG, GIF, etc.
    • Vídeos en formatos como MP4, MPEG, MKV, etc.
  • Cada objeto es direccionable a través de una URL.
Recurso web
  • En base a una URL: Uniform Resource Locator.
    • Elemento para el direccionamiento/identificación de recursos.
  • Parámetros de una URL:
    1. Identificador del servicio (protocolo).
    2. Nombre de dominio del host servidor.
    3. Ruta de acceso al objeto.
    4. Nombre del objeto.
  • Sintaxis URL.
    • Caracteres “://” separan primer parámetro (protocolo) del segundo (Nombre de dominio).
    • Caracter “/” separa el resto de parámetros entre sí.
  • Ejemplo: http://www.escuela.es/dptotic/imagen1.jpg
http :// www.escuela.es / dptotic / imagen1.jpg
(1) sep (2) sep (3) sep (4)
Direccionamiento en HTTP
  • Cliente Web
    • Comprende:
      • Agente de Usuario.
        • {{Software que actúa como interfaz entre usuario y aplicación Web.}}
        • Permite descargar y visualizar páginas, y “navegar” por sus contenidos.
        • Presenta diferentes características de configuración.
      • Cliente HTTP.
        • {{Software de comunicación que implementa la parte cliente HTTP.}}
    • Navegadores más conocidos:
      • Microsoft Edge.
      • Firefox.
      • Chrome.
      • Safari, y otros más…
  • Servidor Web
    • Comprende tres entidades funcionales:
      • Software de acceso a ficheros.
      • Base de datos.
        • Alberga objetos.
        • Cada objeto direccionable con el correspondiente URL.
      • Servidor HTTP.
        • {{Software de comunicación que implementa la parte servidora HTTP.}}
    • Servidores Web más conocidos:
      • Apache.
      • MS Internet Information Server (IIS).

Entidades-funcionales-web.png

Entidades funcionales Web
  • Protocolo para la transferencia de Recurso web.
  • Especificado en varias versiones:
    • HTTPv1.0, especificado en la RF 1945
    • HTTPv1.1, especificado en la RFC 2616.
    • HTTP/2 (HTTPv2.0), especificado en la RFC 7540
    • HTTP/3, especificado en la RFC 9114 (no usa TCP como protocolo de transporte)
  • Opera en base al modelo Cliente-Servidor
    • El cliente solicita recursos a un servidor.
    • Al recibir las solicitudes del cliente, el servidor devuelve los recursos.
  • Protocolo sin estado y no conectivo
    • En su funcionamiento básico, el servidor no guarda información de clientes ni de transacciones.
  • Protocolo no fiable y no seguro.
    • Si se quiere fiabilidad y/o seguridad, se deben utilizar los servicios de otros protocolos (TCP para fiabilidad y TLS para seguridad, por ejemplo).
  • Tipos de conexiones TCP para sesiones HTTP
  • Hay dos tipos de Mensajes HTTP
    • Solicitudes, enviadas por los clientes a los servidores.
    • Respuestas, devueltas por los servidores a los clientes.
Protocolo HTTP
Introducción a la Web
  • ¿Qué es HTML?
    • HTML significa "HyperText Markup Language" (Lenguaje de Marcado de Hipertexto).
    • Es el lenguaje estándar utilizado para crear y diseñar páginas web.
    • Los agentes de usuario (ver Entidades funcionales Web) procesan estos documentos y lo presentan al usuario en su navegador.
  • Elementos básicos de HTML
    • Etiquetas: utilizadas para marcar el contenido y estructura de una página web.
    • Atributos: proporcionan información adicional a las etiquetas.
  • Estructura básica de un documento HTML
    • <!DOCTYPE html>: Declaración del tipo de documento.
    • <html>: Elemento raíz del documento HTML.
    • <head>: Encabezado del documento.
    • <title>: Título de la página que se muestra en la pestaña del navegador.
    • <body>: Cuerpo del documento, donde se coloca el contenido visible.
  • Etiquetas HTML comunes:
    • <h1> a <h6>: Encabezados de diferentes niveles.
    • <p>: Párrafos de texto.
    • <a>: Enlaces a otras páginas o recursos.
    • <img>: Imágenes.
    • <ul> y <li>: Listas no ordenadas.
    • <ol> y <li>: Listas ordenadas.
    • <div>: Contenedor genérico para agrupar elementos.
    • <span>: Contenedor genérico para estilizar texto o elementos en línea.
    • <br>: Salto de línea.
    • <hr>: Línea horizontal.
HTML
  • Por una misma conexión TCP:
    • Se intercambian todas las transacciones HTTP entre un cliente y un servidor.
    • Se transfieren todos los Recurso web necesarios de una página web que estén en el mismo servidor.
    • Transcurrido un tiempo sin transacciones, el servidor cierra la conexión TCP.
  • Existen dos modos de solicitudes:
Conexiones persistentes TCP
  • Si hay que descargase dos o más Recurso web de un mismo servidor, se pueden enviar todas las solicitudes {{en secuencia sin necesidad de esperar sus respuestas}}.
  • Si hay que descargarse recursos de un servidor, todos de igual tamaño y con tiempo de transmisión el tiempo total de descarga[1] es [2]

Ejemplo_HTML_con_canalizacion.png


  1. se asume que el tiempo de transmisión del GET es despreciable.↩︎

  2. uno de los es debido a la propagación del GET y el otro a la propagación del objeto (se ve claramente en la figura como el último bit del último recurso necesita un para llegar al cliente.)↩︎

HTTP CON canalización
  • Si hay que descargase dos o más Recurso web de un mismo servidor, se debe esperar a descargarse uno para pedir el siguiente.
  • Si hay que descargarse recursos de un servidor, todos de igual tamaño y con tiempo de transmisión el tiempo total de descarga [1] es [2]:

Ejemplo_HTML_sin_canalizacion.png


  1. se asume que el tiempo de transmisión del GET es despreciable.↩︎

  2. el ↩︎

HTTP SIN canalización
  • Mecanismo “específico” para identificación de usuarios previa solicitud del servidor.
    • Código de Estado “401 Authorization Required”.
    • Con cabecera “Authenticate”.
  • Mensaje de solicitud debe contener “credenciales”.
    • En cabecera “Authorization”.
      • Credenciales: “nombre de usuario” y “clave”.
    • De manera transparente para el usuario.
      • Se teclean una vez, permanecen en caché de la máquina
    • Sin estado.
      • Credenciales en cada solicitud.
    • Con estado.
      • Servidor asocia una “cookie”.
Autorización HTTP
  • Las cookies se utilizan como un {{mecanismo “genérico” para identificación de usuarios.}}
  • Permite identificar la combinación ordenador – navegador.
  • Procedimiento utilizado por muchos sitios Web.
    • Para hacer “seguimiento” de la actividad de sus usuarios.
      • P.e, sitios de publicidad, de comercio electrónico, etc.
    • En principio para dar mejor servicio, servicio personalizado…
      • P.e, para autorización, “carritos” de la compra, etc.
    • ¡¡¡Muy controvertido!!!, de alguna manera se viola la privacidad del usuario.
      • Permite saber “cosas” sobre los usuarios.
        • Nombre, dirección, correo, hábitos de consumo, contenidos que visita, cuántas veces, en qué orden, etc.
        • Posibilita negocios entre “bambalinas”, las compañías publicitarias pueden intercambiar información, etc.
Cookies HTTP
  • Es {{el almacenamiento temporal de páginas y recursos web en el cliente, tras recibir la respuesta del servidor}}.
  • Permite {{reducir el tiempo de acceso de los navegadores a recursos accedidos recientemente}}.
  • Problema: el contenido puede sufrir modificaciones en el lado del servidor, por lo que la copia en la memoria del cliente estaría desactualizada.
    • Solución: crear una nueva request line para las solicitudes, llamada If-Modified-Since (conocida como Get condicional)
Caché Web
  • Este es un ejemplo simple de un fichero HTML

    <!DOCTYPE html>

    <html>

    <head>
    <title>Ejemplo HTML Básico</title>
    </head>

    <body>
    <h1>Encabezado de nivel 1</h1>
    <p>Este es un párrafo de texto.</p>
    <h2>Encabezado de nivel 2</h2>
    <p>Otro párrafo de texto. </p>
    <a href="https://www.ejemplo.com/hola.html"\>¡Página de bienvenida!</a>
    <img src=”https://www.ejemplo.com/imagen.jpg" alt=”Imagen">
    </body>

    </html>

  • Si un navegador procesa este fichero, la salida sería la siguiente:

    • IMPORTANTE: después de procesar el fichero HTML visto al principio, el agente de usuario del navegador detecta que debe descargarse el Recurso web con URL https://www.ejemplo.com/imagen.jpg. Una vez descargada dicha imagen, el agente de usuario ya puede mostrar la página web completamente.
    • Si el usuario hace click en el enlace, el agente de usuario deberá pedirle al cliente HTTP del navegador que se descargue el objeto con la URL asociada.

Ejemplo_basico_HTML.png

Ejemplo HTML
  • Mensajes generados por el servidor como respuesta a la solicitud de un cliente.
  • La primera línea de los mensajes de tipo respuesta se llama status line, y está compuesto por tres campos separados por espacios:
    • Versión del protocolo HTTP.
    • código de estado ver más abajo.
    • phrase es una descripción, en texto, del código de estado.
  • Los códigos de estado representan las posibles respuestas que puede devolver un servidor. Es un valor de tres caracteres numéricos, en donde el primero indica el tipo de código, que pueden ser estos:
    • 1xx: información, respuesta provisional.
    • 2xx: éxito en la resolución de la solicitud.
    • 3xx: redirigir solicitud, necesarias más acciones.
    • 4xx: error del cliente.
    • 5xx: error del servidor.
  • Algunos de los códigos más utilizados son:
    • 200 (phrase: OK).
    • 201 (phase: Created)
    • 301 (phrase: Moved permanently)
    • 401 (phrase: Unauthorized)
    • 404 (phrase: Not Found)
Respuestas HTTP
  • Mensajes generados por los clientes HTTP a los servidores HTTP para comenzar una transacción.
  • La primera línea de los mensajes tipo solicitud se llama request line, y está compuesta por tres campos separados por espacios:
    • Método ver más abajo los diferentes métodos que existen.
    • URL del recurso solicitado.
    • Versión del protocolo HTTP.
  • Los métodos (solicitudes) más utilizados son:
    • GET: para descargar página/objeto (obtener información)*.
      • Mensaje de solicitud más utilizado.
      • Si es el caso, envío de parámetros conjuntamente con el URL.
    • POST: para descargar objeto (enviar información).*
      • Envío de parámetros/información en el cuerpo del mensaje. P.e, para completar un formulario.
      • Lo que devuelve el servidor depende del contenido enviado.
    • HEAD: similar a GET, pero para descargar sólo el encabezado de la página/objeto.
      • Para supervisión y depuración. P.e, última modificación de un objeto, comprobar enlaces, etc.
    • PUT: para cargar nueva página/objeto.
    • DELETE: para eliminar página/objeto.
    • OPTIONS: para consultar opciones.
      • P.e, propiedades del servidor o de algún recurso.
Solicitudes HTTP

El formato de mensajes HTTP es similar para solicitudes y para respuestas

  • Cabeceras, compuesta por:
    • Request line (en caso de Solicitudes HTTP) o status line en caso de Respuestas HTTP.
    • Header lines aportan infomación extra. Una por línea. Tienen el formato:
      • header field name: <sp> value <cr><lf>
      • El header field name es el nombre concreto de la cabecera utilizada y value contiene el valor de dicha cabecera.
  • Cuerpo:
    • Opcional en los mensajes de solicitud. Cuando se incluye, contiene parámetros relativos al recurso solicitado.
    • En los mensajes de respuesta contiene:
      • Recurso solicitado, en caso de éxito.
      • Texto relativo a un error, en caso de haber un problema.

Formato_solicitudes.png
Formato_respuestas.png

Formato de mensajes HTTP
  • Algunas header lines que son comunes a los mensajes de solicitud y respuesta:
Cabecera Contenido
Date Fecha y hora en que se envía el mensaje
Connection Indica en relación con la conexión TCP, cerrar o mantener
  • Algunas header lines de mensajes de solicitud:
Cabecera Contenido
Accept Tipos de Contenidos que el Cliente puede aceptar
Accept-Charset Conjunto de caracteres que el Cliente puede aceptar
Accept-Encoding Codificaciones que el Cliente puede aceptar
Accept-Language Idiomas que el Cliente puede manejar
Host Nombre de dominio del Servidor
Authorization Credenciales del Cliente (nombre de usuario y clave)
Cookie Notificación de “cookie”, previamente establecida por un Servidor
  • Algunas header lines de mensajes de respuesta:
Cabecera Contenido
Server Información del Servidor
Content-Encoding* Tipo de codificación del contenido
Content-Language Idioma utilizado por el público al que va destinado el contenido
Content-Length* Nº de octetos del contenido
Content-Type* Tipo MIME del contenido
Last-Modified Fecha y hora de la última modificación del recurso
Location Indica al Cliente dónde enviar solicitud para el recurso solicitado
Set-Cookie Cookie que el Servidor envía al Cliente
Authenticate Indicación al Cliente que se requiere autenticación
Header lines de HTTP

Otros conceptos de HTTP

GET /doc1.html HTTP/1.0
Accept: text/html
Accept: image/gif
User-Agent:  Lynx/2.2  libwww/2.14
From: pepe@info.ula.es
/ esto es una línea en blanco /

Ejemplo Solicitud HTTP

HTTP/1.0  200 OK
Date: Friday, 23-Feb-01 16:30:00 GMT
Server: Apache/1.1.1
Content-type: text/html
Content-length: 230
/ esto es una linea en blanco /
<html>
<head>
<title>Ejemplo HTML Básico</title>
</head>
<body>
<h1>Encabezado de nivel 1</h1>
<p>Este es un párrafo de texto.</p>
<h2>Encabezado de nivel 2</h2>
<p>Otro párrafo de texto. </p>
<a href="https://www.ejemplo.com/hola.html"\>¡Página de bienvenida!</a>
<img src=”https://www.ejemplo.com/imagen.jpg" alt=”Imagen">
</body>
</html>

Ejemplo Respuesta HTTP

Hay tres escenarios posibles:

  1. Cuando un usuario visita por primera vez un sitio web que utiliza cookies, el servidor realiza las siguientes acciones al recibir una solicitud:
    1. Genera un identificador único para el usuario.
    2. Crea una entrada indexada en su base de datos asociada a ese identificador.
    3. Envía una respuesta que contiene la cabecera "Set-Cookie" con el identificador, por ejemplo: Set-Cookie: 4342 en las respuestas.
  2. Cuando el navegador recibe una respuesta que incluye una cookie, ejecuta los siguientes pasos:
    1. Agrega una línea al archivo de cookies que gestiona, incluyendo principalmente el "Nombre del servidor" y el "Identificador" (la cookie).
    2. Posteriormente, en cada solicitud que el usuario realiza para navegar por el sitio web:
      a. El navegador consulta el archivo de cookies.
      b. Si existe una cookie para el sitio, extrae el identificador y lo incorpora en la cabecera "Cookie" en las solicitudes, por ejemplo: Cookie: 4342.
  3. Luego, cada vez que el usuario desea navegar por el sitio web:
    1. El navegador consulta el archivo de cookies.
    2. Si existe una cookie para el sitio, extrae el número de identificación y lo incluye en la cabecera "Cookie" en los mensajes de solicitud, por ejemplo: Cookie: 4342.
Transacciones HTTP con Cookies
  • Mecanismo HTTP que {{permite que el cliente pregunte al servidor si la copia que tiene almacenada (que descargó con anterioridad) es válida}}.
    • En las Respuestas HTTP, el servidor incluye, además del recurso web, la fecha de última modificación del objeto (request_line Last-modified), por lo que el cliente, además de guardar el objeto en su caché, incluye también esta fecha.
    • Antes de enviar una solicitud HTTP, el navegador comprueba si ya tiene el contenido en su caché. Si es así, añade la request line If-Modified-Since junto con la fecha de última modificación almacenada junto al recurso.
  • Al recibir una solicitud que incluya la cabecera If-Modified-Since, un servidor comparará la fecha de modificación local con el valor que acompaña a la cabecera:
    • Si las fechas coinciden (objeto no modificado), el servidor contestará con una respuesta {{con código 304 (Not modified) y con el cuerpo del mensaje vacío}}
    • Si las fechas no coinciden (objeto modificado) el servidor contestará con un mensaje {{con código 200 (OK) y el cuerpo del mensaje contendrá el Recurso web solicitado.}}
      • Además, la cabecera Last-modified contendrá la fecha y hora de última actualización del objeto.
      • Al recibir este mensaje, el cliente web actualizará su caché.
GET condicional
  • Se sitúa lógicamente {{entre los clientes web a los que se quiere dar servicio y los servidores conectados a Internet}}. En los clientes web se debe configurar la dirección IP del proxy.
    • Para los clientes web, el proxy HTTP actúa como un servidor web normal, mientras que para los servidores HTTP, el proxy es un cliente más.
  • Cuando un cliente quiere acceder a un servidor HTTP, envía la solicitud al proxy HTTP que tiene configurado, el cual a su vez envía la solicitud al servidor HTTP en cuestión. Al recibir la respuesta, el proxy almacena la información en su caché local y reenvía la respuesta al cliente web.
    • En el caso en el que el proxy tenga en su memoria caché el Recurso web solicitado por el cliente, realizará los pasos descritos en Caché Web. De esta forma, el proxy web funciona como una caché colectiva de todos los clientes web que lo estén utilizando.

Ejemplo_HTTP_Proxy.png

Proxy HTTP

1. Ejemplo cuando el cliente no tiene el Recurso web en su memoria caché

1.1 Mensaje de solicitud (GET normal)

GET /picture/car.jpg HTTP/1.0
User-agent: Mozilla/4.0

1.2 Mensaje de respuesta a la solicitud anterior

HTTP/1.0 200 OK
Date: Wed, 4 Aug 2023 16:21:22
Server: Apache/1.3.0 (Unix)
Last-Modified: Mon, 2 Jul 2023 12:32:12
Content-Type: image/jpg

(.......contenido del objeto.......)

2. Ejemplo cuando el cliente tiene el Recurso web en su memoria caché

2.1 Mensaje de solicitud (GET condicional)

GET /picture/car.jpg HTTP/1.0
User-agent: Mozilla/4.0
If-modified-since: Mon, 2 Jul 2023 12:32:12

2.2 Existen dos posibilidades: que el objeto no haya sido modificado y que sí lo haya sido.

2.2.1 Respuesta del servidor cuando el objeto no ha sido modificado

HTTP/1.0 304 Not Modified
Date: Wed, 4 Aug 2023 18:35:11
Server: Apache/1.3.0 (Unix)

(....... cuerpo vacío, sin contenido ........)

2.2.2 Respuesta del servidor cuando el objeto ha sido modificado

HTTP/1.0 200 OK
Date: Wed, 4 Aug 2023 18:35:11
Server: Apache/1.3.0 (Unix)
Last-Modified: Wed, 4 Aug 2023 17:59:43

(....... contenido del objeto .......)

ServidorClienteServidorCliente(1.1) GET /picture/car.jpg(1.2) 200 OK Last-Modified: Mon, 2 Jul 2023 12:32:12(car.jpg)(2.1) GET /picture/car.jpg If-modified-since: Mon, 2 Jul 2023 12:32:12(2.2.1) 304 Not Modified ()(2.1) GET /picture/car.jpg If-modified-since: Mon, 2 Jul 2023 12:32:12(2.2.2) 200 OK Last-Modified: Tue, 3 Aug 2024 20:43:33(car.jpg)
Ejemplo GET condicional
Start-here.jpg
Ejemplo_HTTP_Proxy.png
Ejemplo-GET-condicional.png
Ejemplo_basico_HTML.png
Ejemplo_HTML_sin_canalizacion.png
Ejemplo_HTML_con_canalizacion.png
1
1
1
1
1
2
2
2