En este Articulo analizaremos a fondo como funciona el protocolo Http, desde lo basico hasta lo avanzado para comprender en su totalidad este protocolo. El protocolo HTTP, por sus siglas en ingles HyperText Transfer Procolo, es un protocolo de internet utilizado por años para la transacciones de informacion y que sigue el esquema de peticion – respuesta entre un cliente y un servidor. Un protocolo no es mas que un conjunto de reglas establecidas que se siguen para trabajar en equipo y conseguir un fin determinado, en este caso, realizar transacciones de informacion entre dispositivos conectados. Con esta pequeña introduccion veamos pues como funciona el protocolo http, comencemos…
Requerimientos
- Algun navegador web como Chrome ,Firefox o el conocido Internet Explorer
- Netcat
¿Cómo funciona el protocolo HTTP?
Cada vez que encendemos la computadora, abrimos nuestro navegador web, escribimos alguna direccion web en la barra de direcciones y aparece magicamente la pagina en nuestra pantalla hacemos uso de el protocolo HTTP, pero y, como funciona?

Si vemos el codigo fuente de una pagina web (Ctrl + U en Chrome) vemos el texto del que hablamos


Suscríbete a nuestra lista de correo y recíbe los últimos contenidos directamente en tu bandeja de correo electrónico, puedes elegir únicamente de que categoria del blog quieres recibir contenido.
Suscríbeme- Ahora veamos un poco de historia…
En 1990 un grupo de cientificos de el CERN(Organizacion Europa de Investigacion Nuclear) desarrollaron un sistema para compartir informacion entre cientificos al que llamaron WorldWideWeb, mas tarde llamado Nexus. De hecho una copia de la primer pagina que se sirvio esta disponible en este enlace, y aunque se ve muy basica, fue la base de todo lo que tenemos actualmente.

- Antes de seguir viendo como funciona el protocolo http veamos algo de HTML
HTML, que en sus siglas en ingles es HyperText Markup Language, ya que el protocolo HTTP transfiere este tipo de archivos con este formato. HTML es un lenguaje de representacion de Texto que nos sirve para construir las paginas web y que el navegador web interpretara posteriormente a su llegada a nuestro ordenador. El formato de texto que vimos anteriormente en la imagen que muestra una pagina web y su codigo fuente esta en formato HTML, entonces asi vemos que el protocolo HTTP es un conjunto de reglas que se utilizan para intercambiar archivos HTML entre distintos dispositivos de la red.

- Hablaremos ahora un poco de el formato de una URL
Al ingresar a un navegador web y escribir arriba en la barra de direcciones la direccion de la web que quieres visitar, estas utilizando direcciones URL, Uniform Resource Location, y su formato es el siguiente:
http://host[:puerto][/ruta][?consulta]
donde:
Host -> unico campo obligatorio, direccion de la maquina a conectar
puerto -> normalmente no es necesario especificar, por defecto para el protocolo HTTP es el 80
ruta -> ruta al archivo dentro de esa maquina al que queremos acceder
consulta -> opcional, solo para paginas con contenido dinamico
- Empezemos a conocer ahora si el protocolo HTTP
El protocolo http consta de 8 comandos, de los cuales son obligatorios que el servidor reconozca solo 2, aunque la complejidad de este protocolo radica en los headers fields (campos de cabecera).
- Comandos HTTP
Comando GET
Es el comando mas utilizado y es el encargado de decirle al servidor que queremos obtener un determinado recurso.
Veamos un ejemplo de como se utiliza este comando, realizaremos una conexion paso a paso para ver como funciona el proceso, para lo cual necesitaremos la herramienta netcat, una vez instalado netcat abrimos una ventana de Sistema (Windows + R -> CMD) y conectamos a algun servidor web:
nc -vv jonathanmelgoza.com 80
donde:
-vv es la opcion para ver toda la informacion
-jonathanmelgoza.com es el servidor al que queremos conectarnos
-80 es el puerto al que nos conectaremos (por defecto el protocolo http trabaja en este puerto)

GET /index.html HTTP/1.1
Donde:
Get es el comando para obtener algo de el servidor
/index.html es lo que queremos obtener (/ directorio raiz)
HTTP/1.1 es la version con la que trabajaremos el protocolo
Ahora escribimos el host para completar la url
Host: jonathanmelgoza.com


Este comando permite conocer las caracteristicas de conexion entre nuestro cliente y el servidor, podemos utilizarlo para realizar un simple ping a un servidor para ver si responde, una vez conectado
OPTIONS * HTTP/1.1
Host: jonathanmelgoza.com
y obtendremos un 200 OK si esta activo el servidor

Similar al comando GET pero el servidor no te servira el contenido HTML sino solo la cabecera del archivo, que nos servira para ver cierta informacion como el tipo de contenido o si debe ser renovada la cache debido a algun cambio.

Comando POST
Este comando solicita al servidor el envio de datos, no la recepcion de datos, es decir, podemos enviar informacion al servidor siempre y cuando este de acuerdo
Comando PUT
Es el comando inverso a GET, nos permite escribir datos en el servidor, la diferencia entre el comando put y post es que el comando post se trabaja sobre un recurso que manejara la informacion a su manera y el comando put trabajara sobre un recurso final, es decir, se modificara ese recurso en el que trabajemos, el comando post se trabaja sobre scripts ya sean php, cgi o asp.
Comando DELETE
Sirve para eliminar un recurso especificado en la URL, aunque pocas veces sera permitido por un servidor web
Comando TRACE
Es como un ping donde todos los dispositivos en la red por el que pase responderan a este comando, asi veremos si nuestra peticion al servidor web pasa por dispositivos intermedios o proxys.
Comando CONNECT
Este Comando se utiliza en los proxys o intermediarios que pueden funcionar como tuneles ssl, este tema es un poco mas avanzado asi que lo dejaremos para otro articulo.
Hemos visto los comandos de el protocolo HTTP desde una vista rapida pero no es lo complicado que esperariamos, veamos entonces ahora los Campos de Cabecera o Headers fields.
- Campos de Cabecera
Cada peticion a un servidor web lleva campos adicionales para personalizar la peticion, estos se escriben linea por linea despues de conectar (recuerdas que para enviar una peticion presionamos 2 Enters?), estos campos permiten indicar al servidor los tipos de archivos que aceptamos, el lenguaje, sistemas de codificacion, etc.
Cabeceras mas Importantes
Cabecera Accept
Permite indicar al servidor el tipo de contenido que aceptamos, por ejemplo
Accept: text/html, image/png
Indicamos que aceptamos html e imagenes png
Accept: */*
Indicamos que aceptamos todo tipo de contenido
Cabecera Accept-Charset
Especifica al servidor las tablas de caracteres que aceptamos, por ejemplo
Accept-Charset: iso-8859-1, unicode-1-1
Indicamos que aceptamos caracteres segun el estandar iso-8859-1 pero tambien unicode 1-1
Cabecera Accept-Language
Especificamos el idioma en el que queremos que nos envie la informacion, por supuesto solo si el servidor tiene esta opcion y cuenta con traducciones.
Cabecera Connection
Permite indicar al servidor si queremos que una vez atendidos cerrar la conexion, por ejemplo
Connection:close
Cierra el servidor la conexion una vez terminada la transaccion
Connection: Keep-Alive
Cabecera User-Agent
Permite indicar al servidor informacion sobre nuestro navegador(software, version), sistema operativo, etc.
Cabecera Referer
Este campo envia al servidor nuestra ultima url visitada, para saber de donde vienes.
Cabecera Allow
Este campo nos aparece a veces y nos indica que comandos son permitidos por el servidor, por ejemplo
Allow: GET, HEAD, POST
Cabecera Content-Encoding
Nos indica que tipo de codificacion a sido utilizado para un envio o en respuesta a una peticion GET, por ejemplo
Content-Encoding: gzip
Cabecera Date
Indica la fecha y hora que se genero la accion determinada
Cabecera Retry-After
Este campo nos indica en cuanto tiempo podemos volver a intentar una peticion, se utiliza en respuestas de servicio no disponible.
Cabecera Server
Este campo es muy interesante ya que nos permite saber informacion detallada de el servidor, como el software que utiliza, la version, sistema operativo, modulos instalados, etc.
Para un mejor estudio de los campos de cabecera leer lista de cabeceras HTTP (Ingles)
Visto – Como Funciona el Protocolo HTTP – Manual