Servidor Web
Servidor Web
Servidor Web
LABORATORIO DE REDES
Práctica 1: Implementación de un Servidor Web
Laboratorio de Redes
Requisitos
Los requisitos para el servidor web son:
• Usar el protocolo HTTP versión 1.0, en donde se generan solicitudes
HTTP independientes para cada recurso (por ejemplo, ficheros HTML,
imágenes, etc.).
• Hacer que el servidor sea multihilo, para poder procesar múltiples
peticiones en paralelo.
• Procesar los métodos GET y HEAD de una petición HTTP.
• Procesar correctamente la cabecera If-Modified-Since de la petición, en
caso de ser recibida.
El servidor web recibirá y procesará las peticiones HTTP, preparará y enviará un
respuesta HTTP. Con respecto a la línea de estado de las respuestas HTTP, el
servidor web implementará los códigos siguientes:
• 200 OK
• 304 Not Modified: se enviará como respuesta a una petición que incluya la
cabecera If-Modified-Since, siempre que sea necesario.
• 400 Bad Request: la petición no ha sido comprendida por el servidor.
• 404 Not Found: el recurso solicitado no existe en el servidor.
Respecto a las líneas de cabecera de la respuesta HTTP, el servidor deberá
implementar, al menos, las siguientes:
• Date: fecha y hora en la que se creó y envió la respuesta HTTP.
• Server: especifica el tipo de servidor web que ha atendido la petición. La
cabecera Server tendrá como contenido un nombre para el servidor web a
elección del estudiante.
• Content-Length: indica el número de bytes del recurso enviado.
• Content-Type: indica el tipo de recurso incluido en el cuerpo de entidad.
Este campo es necesario, ya que la extensión del archivo no especifica
(formalmente) el tipo de recurso asociado. Los tipos más comúnmente
utilizados son:
◦ text/html: indica que la respuesta está en formato HTML.
2
Laboratorio de Redes
Implementación
Para la realización de esta práctica se empleará como base el proyecto facilitado
en https://github.com/GEI-Red-614G010172324/java-labs-<team-name>. En
concreto, se modificarán clases disponibles en el paquete
es.udc.redes.webserver. Además, el proyecto incluye un fichero README.md
con los distintos pasos para la configuración del entorno (https://github.com/GEI-
Red-614G010172324/java-labs/blob/master/README.md), en caso de que
algún estudiante no lo tenga ya creado.
El proyecto incluye el directorio p1-files, que contiene ficheros útiles para el
desarrollo de la práctica, como, por ejemplo, ficheros de ejemplo en los formatos
requeridos: index.html, LICENSE.txt, fic.png, udc.gif, etc. Este directorio debe ser
el directorio base para recuperar los recursos solicitados por los clientes, es
decir, se considerará que las rutas de los recursos solicitados son relativas a
este directorio. Por su parte, el working directory configurado para el servidor
web en IntelliJ debe mantener su valor por defecto (directorio java-labs-<team-
name>).
El servidor web debería ser ejecutado indicando el número de puerto en el que
escuchará:
java es.udc.redes.webserver.WebServer <port>
Para la implementación de la práctica se recomienda una aproximación en dos
etapas. En una primera etapa, el servidor multihilo únicamente mostrará por
pantalla el contenido de las solicitudes HTTP recibidas. Esto puede ser probado
3
Laboratorio de Redes
4
Laboratorio de Redes
Evaluación
Las clases implementadas se subirán al repositorio en Github:
https://github.com/GEI-Red-614G010172324/java-labs-<team-name>.
Para indicar cuál es la versión de la práctica que debe ser evaluada, tras realizar
los últimos cambios para la entrega se deberá etiquetar el commit y
posteriormente publicar el tag ejecutando los siguientes comandos:
1. git tag -a p1 -m “p1”
2. git push origin p1
La entrega de la práctica se realizará a través de Github. La fecha límite de
entrega será el 15 de marzo de 2024 a las 23:59. No se tendrán en cuenta
commits posteriores a dicha fecha.
En caso de no entregar la práctica en plazo o de que no exista en el repositorio
el tag p1, se considerará que la práctica NO ha sido presentada.
La programación de sockets en Java supondrá hasta 1,25 puntos en la nota final
de la asignatura. Esta calificación se calculará sumando los dos apartados
siguientes:
1. Nota del script httptester.jar (0,5 puntos máximo). El profesor evaluará el
funcionamiento de p1 con el script proporcionado. La nota obtenida será
directamente ponderada hasta un máximo de 0,5 puntos, siempre y
cuando se alcance un 5 (sobre 10) en el primer examen de prácticas (y
será de 0 en otro caso).
2. Primer examen de prácticas (0,75 puntos máximo). Los contenidos de p0
y p1 serán evaluados en un examen escrito en el grupo de teoría que
corresponda. Cualquier cambio de grupo deberá solicitarse y justificarse
con anterioridad a la fecha del examen. Para poder presentarse a este
examen, el estudiante debe haber entregado la práctica p1. La nota
(sobre 10) será ponderada hasta un máximo de 0,75 (se alcance o no el
umbral de 5 puntos). La fecha del examen será el 21 de marzo de 2024.