Qué es TCP
TCP es un protocolo de comunicaciones. Es la base de internet. Lo más importante que se puede decir sobre TCP es que, cuando nos queremos comunicar entre dos puntos, uno tomará el rol pasivo (SERVIDOR) y el otro tomará el rol activo (CLIENTE). El servidor no inicia las comunicaciones; sólo el cliente.
Los mensajes se envían en formato de texto, o sea, legible para los seres humanos. Esto es algo importante porque facilita la depuración de bugs.
Qué es HTTP
HTTP es otro protocolo, construido sobre TCP. Es decir, asume las reglas de TCP y agrega otras. Aunque fue evolucionando, puedo hablar sobre la versión actual para simplificar.
HTTP lo que tenía de distinto sobre TCP son los encabezados. Los mensajes enviados ahora avisan lo que quieren: GET para obtener datos sin cambiar nada (por ejemplo, cuando visitas una página: es el más utilizado), POST para enviar nuevos datos al servidor, DELETE para borrar y PUT para actualizar o cambiar los datos. Hay que aclarar que son "peticiones": el servidor puede no aceptarlas. Además de éstas, existen otras pero alcanza con lo dicho.
No es normal tratar con estos mensajes directamente, pero quiero mostrar un mensaje para explicarlo mejor.
GET /background.png HTTP/1.0
Esa línea de texto es la primera: ahí puedes ver el tipo de petición (GET), la url (/background.png) y la versión de HTTP en la que está el mensaje. Siempre va a empezar con una línea de este tipo.
Para una explicación completa, necesito mostrar otro caso:
Espero que no se asusten. La primera línea ya está explicada, pero voy a indicar que la barra (/) significa la raíz de un sitio, su página principal. Por ejemplo, en este foro sería https://www.foroanime.com. Podríamos agregar una barra al final y da el mismo resultado.
Las líneas que siguen (rojo, verde y azul) son los encabezados de la petición. Es muy importante respetar las líneas vacías y no agregarlas donde no van, porque se usan para separar la cabecera del cuerpo de los mensajes.
Aquí va una explicación de la imagen:
Lo que debe destacarse en la primera línea es el método POST, es decir, se pretende hacer cambios en el servidor. Por ejemplo, podría ser enviar un formulario de registro, un comentario o un archivo.
Host se refiere a la url y localhost es la misma computadora, o sea, un servidor local (se hace mucho cuando está en etapa de desarrollo). En lugar de eso, podría indicar una típica dirección de la web.
User Agent es el navegador y, aunque diga Mozilla, vale decir que todos dicen eso, solamente que van sumando los anteriores. Es una cuestión técnica, porque no era fácil ser reconocido para un navegador nuevo. Pero, en resumen, ese texto ayuda a saber el navegador.
Las tres líneas de Accept son los formatos de respuesta que el cliente le sugiere al servidor. Le está diciendo que le gustan archivos HTML, XHTML y que lo quiere en inglés. Es lo principal que se puede explicar sobre eso.
Las líneas verdes no las entiendo del todo. Recuerdo el keep alive haberlo visto en alguna parte.
Las líneas azules dicen que se enviará en forma multipart (esto se usa para mandar archivos). Y los demás son los límites que pone. En otras palabras, está enviando un archivo.
Lo que no se vería en la imagen es, separado por una línea de la cabecera, el mensaje.
Eso es lo que hace al internet de hoy. Y, por cierto, se está innovando en este área para que podamos tener comunicaciones más rápidas y más seguras.