HTTP
Servidor
En una comunicación HTTP, los servidores permanecen a la escucha de peticiones en un puerto concreto. A continuación, vamos a usar netcat para abrir un puerto TCP y simular respuestas HTTP.
-
Desde el terminal ejecuta:
nc -l -s 0.0.0.0 -p 8080
-
En un navegador web abre o refresca
http://localhost:8080
si estás usando Docker. En caso de usar Codespaces utiliza la URL que se indica al ejecutar el comando anterior en el terminal1. -
Vuelve al terminal y comprueba que ha llegado la petición.
-
En el terminal pega esta respuesta:
HTTP/1.0 200 OK Content-Type: text/plain Content-Length: 9 Respuesta
❓ Pregunta: Indica qué cabeceras de la petición HTTP recibida nos permitirían devolver una respuesta adaptada al tipo de dispositivo y navegador del usuario, y en el idioma en el que lo usa.
-
Vamos a simular una descarga. Repite los pasos anteriores pero en el último usa esta otra respuesta:
HTTP/1.0 200 OK Content-Type: text/plain Content-Length: 9 Content-Disposition: attachment; filename="respuesta.txt" Respuesta
-
Vamos a simular una redirección. Vuelve a repetir los pasos 1, 2 y 3, y usa esta otra respuesta:
HTTP/1.0 302 Found Content-Length: 0 Location: https://www.google.com/search?q=browser+cache+301+redirect
❓ Pregunta: Explica qué ha ocurrido en el navegador
-
Vamos a simular una autenticación básica. Repite los pasos 1, 2 y 3, y usa esta otra respuesta:
HTTP/1.1 401 UNAUTHORIZED Content-Length: 0 WWW-Authenticate: Basic realm="Mi servidor netcat"
Completa en el navegador los campos para introducir el usuario y password, y dale a enviar. Vuelve al terminal y observa como te llega el usuario y password. Para terminar, pega la respuesta del paso 4.
❓ Pregunta: ¿Podrías conocer el password de un usuario de tu servidor con este tipo de autenticación?
-
Vamos a ver cómo el navegador manda los datos de un formulario web. Repite el paso 1, rellena el formulario siguiente y envíalo. Si usas Codespaces, sustituye
http://localhost:8080
en el HTML por la URL proporcionada en el entorno.Ayuda si usas Codespaces...
Formulario...
<form id="myForm" action="http://localhost:8080" method="post"> <fieldset> <label for="name">Text Input:</label> <input type="text" name="name" id="name" value="" tabindex="1" placeholder="Placeholder"> </fieldset> <fieldset> <label for="radio-choice-1">Choice 1</label> <input type="radio" name="radio-choice-1" id="radio-choice-1" tabindex="2" value="choice-1"> <label for="radio-choice-2">Choice 2</label> <input type="radio" name="radio-choice-2" id="radio-choice-2" tabindex="3" value="choice-2"> </fieldset> <fieldset> <label for="select-choice">Select Dropdown Choice:</label> <select name="select-choice" id="select-choice"> <option value="Choice 1">Choice 1</option> <option value="Choice 2">Choice 2</option> <option value="Choice 3">Choice 3</option> </select> </fieldset> <fieldset> <label for="textarea">Textarea:</label> <textarea rows="2" cols="25" name="textarea" id="textarea" placeholder="Placeholder"></textarea> </fieldset> <fieldset> <label for="checkbox">Checkbox:</label> <input type="checkbox" name="checkbox"> </fieldset> <fieldset> <input type="submit" value="Submit"> </fieldset> </form>
Edita el HTML y quita el
method="post"
. Repite el paso 1 y envía el formulario con ese cambio.❓ Pregunta: Explica las diferencias en las peticiones recibidas con y sin
method="post"
.
Otra alternativa al Docker y el Codespace es instalar Nmap en tu propio ordenador. Una vez instalado, el comando a ejecutar desde el CMD de Windows es ncat -l 8080
y desde el terminal de Mac/Linux nc -l 8080
. En el navegador usarás http://localhost:8080.