Estás en:   ArielOrtiz.info > Desarrollo de aplicaciones web > Práctica 3: Encabezados de petición

Práctica 3: Encabezados de petición

Objetivos

Durante esta práctica, los alumnos serán capaces de:

Esta actividad promueve las siguientes habilidades, valores y actitudes: análisis y síntesis, capacidad de resolver problemas, creatividad, y uso eficiente de la informática y las telecomunicaciones.

Descripción de la actividad

Esta práctica puede ser elaborada de manera individual o en parejas.

El archivo fuente de JavaScript debe comenzar con un comentario que contenga el título de la práctica, la fecha y los datos personales de los autores (nombre y matrícula). Por ejemplo:

/*----------------------------------------------------------
 * Práctica 3: Encabezados de petición
 * Fecha: 06-Sep-2016
 * Autores:
 *           A01166611 Pepper Pots
 *           A01160611 Anthony Stark
 *----------------------------------------------------------*/
  1. Crea un directorio llamado practica3. Coloca en este directorio el archivo servidor_practica3.js cuyo contenido es el siguiente:

    // Archivo: servidor_practica3.js
    
    'use strict';
    
    const net = require('net');
    const eol = '\r\n';
    const textoPagina = 'Hello World!' + eol;
    
    function creaRespuesta(cuerpo) {
      let bufferCuerpo = new Buffer(cuerpo);
      return Buffer.concat([
        new Buffer(
          'HTTP/1.1 200 OK' + eol +
          'Server: ServidorPractica/3' + eol +
          'Date: ' + new Date().toUTCString() + eol +
          'Content-Length: ' + bufferCuerpo.length + eol +
          'Content-Type: text/plain; charset=utf-8' + eol +
          eol),
        bufferCuerpo]);
    }
    
    const servidor = net.createServer(function (sock) {
      sock.on('data', function (data) {
        console.log(data.toString());
        sock.write(creaRespuesta(textoPagina));
        sock.end();
      });
    });
    
    servidor.listen(process.env.PORT, function () {
      console.log('Servidor web corriendo en puerto: ' + process.env.PORT);
    });
    
  2. Modifica el programa anterior para que en lugar de responder con el texto plano Hello World!, responda con una página completa de HTML que contenga una tabla con todos los encabezados de la petición (request) tal como se muestra en el siguiente punto. El encabezado Content-Type de la respuesta (response) debe ser text/html.
  3. Prueba tu servidor usando curl y al menos un navegador.

    Para correr curl, teclea el siguiente comando desde la terminal:

    curl -v http://localhost:8080

    La salida esperada debe ser similar a la siguiente:

    * Rebuilt URL to: http://localhost:8080/
    * Hostname was NOT found in DNS cache
    *   Trying ::1...
    * Connected to localhost (::1...) port 8080 (#0)
    > GET / HTTP/1.1
    > User-Agent: curl/7.35.0
    > Host: localhost:8080
    > Accept: */*
    >
    < HTTP/1.1 200 OK
    * Server ServidorPractica/3 is not blacklisted
    < Server: ServidorPractica/3
    < Date: Wed, 31 Aug 2016 16:02:12 GMT
    < Content-Length: 1353
    < Content-Type: text/html
    <
    <!DOCTYPE html>
    <html>
      <head>
        <meta charset="utf-8" />
        <title>Encabezados</title>
        <style>
          body {
            background: #FFFFFF;
            color: #000080;
            font-family: sans-serif;
            font-size: medium;
            margin: 20px;
          }
    
          hr {
            border: 0;
            color: #B0C4DE;
            background-color: #B0C4DE;
            height: 1px;
          }
    
          table {
            border-collapse: collapse;
            border: 1px solid #000000;
            padding: 0px;
            margin-bottom: 10px;
            color: #000000;
            background: #E6E6FA;
          }
    
          td {
            border: 1px solid #000000;
            padding: 10px;
            text-align: center;
          }
    
          th {
            border: 1px solid #000000;
            padding: 10px;
            color: #008080;
            background: #B0E0E6;
          }
    
          li {
            color: #AAAAAA;
          }
    
          span {
            color: #094141;
          }
    
          footer {
            font-size: 70%;
            color: #B0C4DE;
            text-align: center;
          }
        </style>
      </head>
    
      <body>
        <h1>Encabezados</h1>
    <table>
    <tr><th>Encabezado</th><th>Valor</th></tr>
    <tr><td>User-Agent</td><td>curl/7.35.0</td></tr>
    <tr><td>Host</td><td>localhost:8080</td></tr>
    <tr><td>Accept</td><td>*/*</td></tr>
    </table>
          <hr/>
          <footer>
            Desarrollo de aplicaciones web
          </footer>
      </body>
    </html>
    * Connection #0 to host localhost left intact
    

    La salida en el navegador, Firefox en este caso, debe ser parecida a la siguiente:

  4. Verifica que la página producida sea HTML5 válido utilizando el Servicio de Validación de W3C.

¿Qué se debe entregar?

Escribe el reporte de la práctica tal como se detalla en el documento Reportes de prácticas. El nombre del archivo fuente de AsciiDoctor debe ser reporte_practica3.adoc. A partir del código fuente de AsciiDoctor debes generar el archivo PDF correspondiente. Dicho archivo se debe llamar reporte_practica3.pdf. Coloca estos archivos junto cualquier otro archivo adicional que se requiera para generar el reporte dentro del directorio practica3.

Crea un archivo tarball con todo el contenido del directorio practica3. Nombra a este archivo practica3.tgz. Este archivo se puede crear desde la terminal tecleando lo siguiente (asegúrate que te encuentres en el mismo nivel que el directorio practica3):

tar czf practica3.tgz practica3

✔ Instrucciones para subir archivo

Para entregar el archivo practica3.tgz, ingresa los siguientes datos:

Solicitar NIP

Si la práctica fue desarrollada en pareja, basta que solo uno de los miembros la entregue. No se aceptan prácticas por ningún otro medio.

Fecha límite: Martes, 6 de septiembre.

Evaluación

Esta actividad será evaluada usando los siguientes criterios:

50% Implementación de los requerimientos.
50% Reporte de la práctica de laboratorio.
DA El programa y/o reporte es un plagio.