martes, 5 de diciembre de 2017

HTTP vs HTTPS ¿Qué hace cada uno? [Parte I:HTTP]

Hace poco que estuve hablando con una persona que no entendía el por qué se deberían cambiar todas las webs con un servicio de login a HTTPS si estaban en HTTP. Entiendo que si no sabes del tema, puedas dudar, pero si después de una hora de explicación, sigues sin pillarlo, pero no porque no lo entiendas, sino porque no quieres pegarte el trabajo de hacer ese cambio, ahí entonces tenemos un problema grande.



Así que esta entrada se la dedico a ese amigo tan molesto que no entendía el por qué HTTPS es la única solución si dispones de una web con un login. Pero antes, tenemos que conocer la base.

HTTP es un protocolo de la capa de aplicación orientado a las transacciones. Sigue el esquema de petición-respuesta entre un cliente y un servidor, es decir, por cada petición realizada, se dará una respuesta.

En este esquema, al cliente se le conoce como user-agent y a la información transmitida se le denomina recurso, identificado por una URL. Un recurso puede ser desde un archivo, hasta una consulta de una base de datos o la resolución de la ejecución de un programa que se haya podido ejecutar con funciones como shell_exec en PHP.

HTTP es además, un protocolo sin estado, por lo que no guarda información de conexiones anteriores. Llegados a este punto, podéis creer que os estoy mintiendo porque muchas veces vuestro navegador recuerda las contraseñas o sí que guarda tu información de conexiones anteriores. Que esto ocurra, no significa que os haya mentido, es que se guarda información de conexiones anteriores mediante el uso de cookies y la introducción de la noción de las conocidas sesiones. Si sabéis un poco de PHP, no hace falta que os diga nada más sobre cookies y sesiones.

Pero HTTP, como todos los protocolos, tienen sus versiones, y en este caso, por ahora, HTTP tiene dos versiones distintas:
  • HTTP/1.0. Versión más utilizada y se trata de conexiones no persistentes.
  • HTTP/1.1. Más actualizado y mejorado con respecto a HTTP/1.0. Cada vez se está usando más y en esta versión, las conexiones sí son persistentes. Dependiendo de la versión, podemos notar cambios en la estructura de las cabeceras HTTP por ejemplo.

Etapas de comunicación

Sus fases son muy sencillas y las podemos explicar en 3 sencillos pasos.

  1. El usuario escribe en la barra de direcciones del navegador web, el recurso al que quiere acceder. Por ejemplo http://www.academialopedevega.org/aulavirtual
  2. El navegador divide en 3 partes la URL:
    1. Protocolo: HTTP
    2. Nombre del servidor: www.academialopedevega.org
    3. Camino: /aulavirtual.
  3. Finalmente el navegador se comunica con el servidor de nombres para resolver el nombre del servidor por su dirección IP, que será la IP de la máquina servidora.
La solicitud

Como se ha dicho, HTTP se basa en el esquema petición-respuesta, por lo que lo siguiente que debo de explicar, es cómo se forma la solicitud. La petición HTTP viene definida por.

  • Línea de solicitud. Contiene el documento solicitado, el método que se aplicará y la versión del protocolo. Esta línea está formada por 3 elementos.
    • Método
    • Dirección URL
    • Versión del protocolo
  • Campos del encabezado de solicitud. Son líneas opciones que contiene información adicional sobre solicitud y/o cliente.
  • Cuerpo de la solicitud. Son líneas opcionales también que permite el envío de datos mediante un comando POST durante la transmisión de datos al servidor.

Como se puede apreciar si nos vamos a WireShark y realizamos una petición a una web bajo HTTP, se puede apreciar el método [GET], la versión del protocolo [HTTP/1.1] y el Host[academialopedevega.org]. Además de información adicional que posteriormente veremos qué significa.


En el diagrama anterior, se puede apreciar cómo es la comunicación en HTTP en función del tiempo.

La respuesta

La respuesta tratará de contestar a la solicitud realizada por el cliente y se compone de:

  • Línea de estado: Formado por
    • Versión del protocolo
    • Código estado
    • Significado del código de estado
  • Campos del encabezado de la respuesta. Líneas opcionales que contiene información adicional sobre la respuesta y/o servidores.
  • Cuerpo de la respuesta. Contiene el documento solicitado.

Una respuesta, está formada por los elementos que se ven en la captura anterior. Tras esto, otra de las cosas que debo explicar automáticamente, son los códigos de estado. En resumidas cuentas, los códigos de estado se basan en:

  • 10x. Mensaje informativo
  • 20x. Éxito
  • 30x. Redirección
  • 40x. Error en el cliente
  • 50x. Error en el servidor
Por otro lado, tenemos a HTTPS...aunque esto lo dejaré para la entrada de mañana, que no tengo más tiempo.Os dejo con la intriga.

¿Hackeamos el Mundo?

No hay comentarios:

Publicar un comentario

Related Posts Plugin for WordPress, Blogger...

Entrada destacada

El server me sabe a poco.

Soy un fanático del Rock y de Debian . (Creo que voy a inventar Rockbian, que suena bien y todo xD) Llevaba tiempo queriendo unir estos 2 c...