Capa Aplicación el HTTP

Las capas 5,6,7 en el sistema OSI son, prestación, sesión y aplicación, en el modelo de Internet no son iguales. Vamos a tratar primero la capa aplicación de sobra para todos conocidos es el HTTP o si es seguro el HTTPs, más adelante explicaré porqué es seguro y que lo diferencia.

Sobre HTTP

HTTP (Hypertext Transfer Protocol) es un protocolo petición-respuesta, esto quiere decir, que un cliente (un navegador) manda una petición y un servidor envía una respuesta, (básicamente mostrar la web).

Sobre la petición

La petición es un texto plano, se compone de una cabecera y un cuerpo, en la cabecera va el tamaño del body, el host al que atacas, la url el verbo (lo veremos un poco más adelante) y el nombre del navegador.

Si lleva datos, por ejemplo un formulario, esos datos van en el cuerpo, existen diferentes formatos, actualmente el más usado es el JSON.

Verbos

Los verbos son acciones, normalmente una petición web normal es un GET, pero existen más verbos, en las prácticas actuales una web una vez mostrada la web, existe una lógica que interacciona con el server en lo que se conoce como una rest-full API y se basa en lo que llamamos CRUD (Crate, Read, Update, Delete).

Imaginemos algo como Facebook, podemos crear una historia, leerla, actualizarla o borrarla, para ello se usan los verbos.

  • GET: Lee uno o varios recursos (listado de todas las historias o una historia concreta).
  • HEAD: Es como el GET pero sin el body (si solo queremos los metadatos).
  • POST: Crea un nuevo recurso (crea una historia).
  • PUT: Actualiza un recurso concreto.
  • PATCH: Como PUT pero no es necesario introducir todos los datos.
  • DELETE: Borra un recurso.

Más adelante tengo pensado crear un artículo sobre apificación y CRUDs.

Sobre la respuesta

Una vez enviada la petición, el servidor manda una respuesta, en ella igualmente tenemos una cabecera y un body, en la cabecerá van datos como, el tipo de servidor (recomendable por ciberseguridad no mostrarlo), el host, el tipo de texto (puede ser html, texto, csv, json…)

La respuesta generalmente es un HTML (el siguiente artículo tratará sobre ello) y es la página a visualizar, actualmente esta muy de moda el JSON que básicamente es un formato de datos o XML. Pero estos formatos de datos se usan o bien, en webs dinámicas donde se actualizan los estados en el navegador o en peticiones entre servidores.

Códigos de Respuesta

El código de respuesta es algo que muestra el header tambien, existen los siguietes códigos:

  • Códigos con formato 1xx: Respuestas informativas. Indica que la petición ha sido recibida y se está procesando.
  • Códigos con formato 2xx: Respuestas correctas. Indica que la petición ha sido procesada correctamente. (Generalmente esta es la respuesta normal 200, el POST es un 201, se ha creado el recurso).
  • Códigos con formato 3xx: Respuestas de redirección. Indica que el cliente necesita realizar más acciones para finalizar la petición. (Hemos cambiado el nombre de dominio y decimos, ahora ya no estoy aquí debes ir al nuevo dominio, el navegador redirige solo).
  • Códigos con formato 4xx: Errores causados por el cliente. Indica que ha habido un error en el procesado de la petición a causa de que el cliente ha hecho algo mal. (el famoso 404 estaría aquí, error que el cliente pide algo que no existe).
  • Códigos con formato 5xx: Errores causados por el servidor. Indica que ha habido un error en el procesado de la petición a causa de un fallo en el servidor. (algo falla en el server, por ejemplo que la base de datos no funciona).

Puedes ver aquí todos los códigos.

Ejemplo de Petición

Con un tipo de software llamado Insomnia (tambien sirve el Postman) podemos ver una petición normal HTTP, estos programas nos permiten definir la petición y personalizarla.

GET / HTTP/1.1
Host: google.com
User-Agent: insomnia/7.0.5
Accept: /

ENVIO DE DATOS

< HTTP/1.1 301 Moved Permanently
< Location: https://www.google.com/
< Content-Type: text/html; charset=UTF-8
< Date: Tue, 10 Dec 2019 09:57:11 GMT
< Expires: Thu, 09 Jan 2020 09:57:11 GMT
< Cache-Control: public, max-age=2592000
< Server: gws
< Content-Length: 220
< X-XSS-Protection: 0
< X-Frame-Options: SAMEORIGIN
< Alt-Svc: quic=»:443″; ma=2592000; v=»46,43″,h3-Q050=»:443″; ma=2592000,h3-Q049=»:443″; ma=2592000,h3-Q048=»:443″; ma=2592000,h3-Q046=»:443″; ma=2592000,h3-Q043=»:443″; ma=2592000

RECEPCIÓN

Aquí podemos ver las cabeceras del envío y recepción si hacemos una petición a Google. Faltaría el código html para ver el buscador.

Sobre el HTTPs

El HTTPs es la versión segura de HTTP (la s es de secure), este protocolo es exactamente igual que el HTTP pero encriptado.

El sistema es mediante criptación asimétrica, imagina que hablas con un servidor y le mandas una clave pública, esta se la manda el navegador a todos los servidores, la misma, cualquiera la tiene es tu clave pública y cualquiera encripta con esta clave, pero para desencriptar necesitan tu clave privada que solo tienes tú. Con lo cual, todas las webs llegan encriptadas y tu navegador desencripta, de esta forma aseguras que tus datos no son robados.

Al enviar sucede lo mismo, el sever manda la clave publica a todos y tu encriptas tu mensaje, solo el server sabe como descencriptar, por lo que para poder leer una petición entera, necesitas dos claves privadas la del cliente y la del server. Si piensas que es fácil saberlas, te diré que el mayor ordenador del mundo tardaría varios cientos de años en procesarla y por supuesto van cambiando las claves.

HTTP/2

Hasta ahora estamos usando el HTTP 1.1, la versión 2 de este protocolo permite lo mismo que la 1 pero añade nuevas funcionalidades.

  • Utiliza una única conexión.
  • Elimina información redundante.
  • Multiplexación.
  • Es un protocolo binario.
  • Compresión de las cabeceras.

Básicamente este protocolo busca ser más eficiente y rápido, más acorde a las necesidades actuales.

Igualmente existirá una versión segura.

Leave a Reply

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

You may use these HTML tags and attributes:

<a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>

Este sitio usa Akismet para reducir el spam. Aprende cómo se procesan los datos de tus comentarios.