Skip to content

S7: Protocolo HTTP

Juan Gonzalez-Gomez edited this page Mar 4, 2019 · 48 revisions

Sesión 7: Protocolo HTTP

  • Tiempo: 50min + 50min
  • Objetivos: TODO

Contenido

Introducción

La web está cobrando cada vez más importancia. Uno de los motivos es su sencillez: sólo necesitamos tener instalado un navegador, en cualquier plataforma: ordenador, tablet, móvil... Los dos actores principales de la web son el navegador (cliente) y el servidor. Hablan entre sí mediante el protocolo HTTP

Definiciones

  • HTTP: (Hyper Text Transfer Protocol): Protocolo entre navegadores y servidores web para transferir documentos hipermedia

  • URL: (Uniform Resource Locator): Interfaz común para acceder a diferentes tipos de servicios/documentos en la web a través de un sistema de nombres

  • HTML: (HyperText Markup Language): Lenguaje que permite incluir en documentos enlaces a otros documentos mediante URLs

Sobre HTTP

  • HTTP se utiliza para transferir páginas web del servidor al navegador
  • Sigue el modelo Cliente-Servidor:
    • Cliente: Es el navegador. Pide páginas y se las muestra la usuario
    • Servidor: Aloja las páginas y se las entrega a los clientes que lo solicitan
    • Funciona sobre TCP
    • Por defecto HTTP escucha en el puerto 80
    • HTTP sirve tanto para contenido estático (ficheros) como contenido dinámico (el resultado de ejecutar programas en el servidor)
    • Una página web consta de uno o varios objetos
    • Un objeto es un archivo (fichero HTML, foto JPG, programa javascript, hoja de estilo...) direccionable a través de su URL
    • La mayoría de páginas web están formadas por un archivo HTML base y diversos objetos referenciados dentro del archivo como parte de la misma página

Ejemplo: Página web de varios objetos

Tenemos la siguiente página web, cuyo fichero HTML base es el siguiente:

<!DOCTYPE html>
<html lang="es" dir="ltr">
  <head>
    <meta charset="utf-8">
    <title>MI TIENDA</title>
    <link rel="stylesheet" href="mi-css.css">
     <script src="mi-js.js"></script>
  </head>
  <body onload="main();">
    <p>BIENVENIDO A MI WEB</p>
    <img src="logo-urjc.png" alt="NOPE" id="logo">
    <br>
  </body>
</html>

La página completa está formada por el archivo HTML en sí, el fichero de estilo (mi-css.css), el programa javascript (mi-js.js) y la imagen (logo-urjc.png)

Para mostrar la página, el cliente hace en total 4 peticiones al servidor: primero el html, luego la hoja de estilo, después el programa javascript y por último la imagen (el orden es el que está definido en el html)

Ejercicio

Completamos el fichero HTML anterior con más etiquetas. ¿Cuantos objetos forman ahora la página web? ¿Cuántas peticiones realiza el cliente al servidor ahora?

<!DOCTYPE html>
<html lang="es" dir="ltr">
  <head>
    <meta charset="utf-8">
    <title>MI TIENDA</title>
    <link rel="stylesheet" href="mi-css.css">
     <script src="mi-js.js"></script>
  </head>
  <body onload="main();">
    <p>BIENVENIDO A MI WEB</p>
    <img src="logo-urjc.png" alt="NOPE" id="logo">
    <br/>
    <a href="mi_fichero.pdf">Descargar</a>
    <br/>
    <a href="galeria.html">Acceso a la galería de fotos</a>
  </body>
</html>

Conexión TCP en HTTP

El protocolo HTTP utiliza conexiones TCP para la conexión entre el cliente y el servidor. Es siempre el cliente el que abre estas conexiones, y el servidor las cierra

El protocolo HTTP NO mantiene estado. El servidor NO guarda información sobre las peticiones anteriores hechas por un cliente

Los pasos para la conexión entre el cliente y el servidor son:

  • El cliente abre una conexión TCP con el servidor
  • El cliente envía un mensaje de petición, solicitando un recurso al servidor
  • El servidor envía un mensaje de respuesta
  • El servidor cierra la conexión TCP

Modelo de tiempo de respuesta

Para analizar los tiempos de respuestas de las diferentes versiones de HTTP, utilizaremos las siguientes definiciones:

  • RTT: Tiempo necesario para enviar un paquete "pequeño" desde el cliente al servidor y otro de vuelta del servidor al cliente

  • Tiempo de respuesta: Tiempo desde que se solicitua al servidor un objeto y se recibe en el cliente

Conexiones NO persistentes

  • Se envía un objeto como máximo por cada conexión TCP
  • Es el comportamiento por defecto de la versión 1.0 de HTTP: HTTP/1.0
  • Utilizaremos de ejemplo el fichero HTML del apartado anterior: en total el cliente recibe 4 objetos: el html + 3 ficheros adicionales

  1. El navegador abre una conexión TCP (Tardará un tiempo igual a RTT)
  2. Pide el primero objeto: El archivo HTML. Envía un mensaje de solicitud al servidor
  3. El servidor prepara el mensaje de respuesta, con el fichero HTML solicitado. Lo envía
  4. El servidor cierra la conexión TCP
  5. El cliente recibe el mensaje de respueta, que contiene el fichero HTML. Analiza el fichero y comprueba que tiene que pedir 3 fichero más: el css, el js y la imagen
  6. Repite los pasos 1-4 con el fichero CSS
  7. Repite los pasos 1-4 con el fichero JS
  8. Repite los pasos 1-4 con la imagen
  9. La página web está completa, y se puede mostrar totalmente al usuario

Conexiones Persistentes

  • HTML/1.1 utiliza por defecto conexiones persistentes
  • Se permite enviar más de un objeto por una sola conexión TCP

Tenemos dos formas de utilizar las conexiones persistentes: con y sin pipelining

Sin pipelining

  • La conexión TCP sólo se establece con la primera petición
  • Se espera a recibir un fichero antes de solicitar el siguiente

Con pipelining

  • Por defecto en HTTP/1.1
  • El cliente realiza la petición encuanto encuentra la referencia del objeto (No espera)

Ejemplo: Comparativa

En este ejemplo, con la conexión no persistente necesitamos un total de 8 RTTs. Con la persistente sin pipelining 5 RTTs, mientras que con la persistente con pipelining 3 RTTs

Mensajes HTTP

  • Hay dos tipos de mensajes: de solicitud y de respuesta

(Dibujo)

TODO

Descargas

El rincón friki

  • (TODO)

Autor

Creditos

  • Creado a partir del contenido generado por el profesor Jose María Cañas y otros profesores del departamento GSYC

Licencia

Enlaces

Clone this wiki locally