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.

  1. Desde el terminal ejecuta:

    nc -l -s 0.0.0.0 -p 8080
    
  2. 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.

  3. Vuelve al terminal y comprueba que ha llegado la petición.

  4. 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.

  5. 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
    
  6. 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

  7. 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?

  8. 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".

1

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.