El objetivo principal de este laboratorio es crear un servidor web CGI HTTP basado en el RFC/1945. El servidor se basa en la programación de cebo C y la abstracción aprendida hasta ahora en la programación de red INET 4021.
Además, el servidor debe ser eficiente con respecto a la velocidad y la asignación de recursos.
Nuestro servidor usa CGI como abstracción para tomar entradas de un formulario HTML y luego devolver la salida. El cliente no tiene idea de que el CGI está allí, pero está contento cuando recibe una respuesta, independientemente de de quién sea.
En cuanto a nuestro algoritmo, el servidor toma la entrada, luego lo analiza para encontrar si es una solicitud posterior/obtenida, luego envía los datos al CGI para su procesamiento.
/CGI -bin: esto contiene nuestros archivos CGI utilizados para manejar las solicitudes POST y obtener (donde reside el servidor web ejecutable).
Cuando un cliente envía una solicitud POST/GET al servidor, el servidor llamará al ejecutable CGI para manejar la solicitud. El uso principal para esto es permitir que el ejecutable maneje el trabajo, mientras que el servidor simplemente lo pasa y luego puede manejar nuevas solicitudes. Este es un buen uso de la asignación de recursos y ayuda a admitir más usuarios simultáneamente.
/Conf - La carpeta de configuración contiene httpd.conf que es un archivo de configuración para el servidor. Establece la cantidad de usuarios concurrentes, ubicación de contenido raíz, ubicación de índice y puerto que se ejecutará.
/Contenido: todos los .html, .gif, .jpg (contenido) residen en esta carpeta. Cuando se recibe index.html, envía solicitudes para todos estos archivos. Estos archivos se utilizan para hacer la página web que se muestra en el navegador del cliente.
/Logs: esta carpeta contiene los archivos de registro para todos los comandos de acceso, así como errores. El estándar saldrá al registro de acceso y todos los demás registros de errores van al registro de errores.
/SRC: aquí es donde reside todo nuestro código fuente. Esta es esencialmente la carpeta donde se encuentra el servidor.
index.html - índice de directorio de servidor web
Para compilar el CGI Get y Post, cambie al directorio /src . Compilar el archivo c. Esto se puede hacer por
gcc POST.c -o ../cgi-bin/POST.cgi && gcc GET.c -o ../cgi-bin/GET.cgi
Para probar el servidor, vaya al directorio /src . Compile el archivo C y ejecutarlo. Esto se puede hacer por:
gcc server.c && ./a.out
El servidor se ejecutará según el contenido especificado en el archivo de configuración. Si no cambia, el terminal volverá:
Number of simultaneous connections: 10
Root directory (to start looking for HTML files): ../contents/
Index filename (if none given): /index.html
Port to run on server: 8080
Ahora, usando un navegador web, ingrese "http: // localhost: 8080/". Esto cargará el archivo index.html y mostrará la página web. Además, puede cargar ciertos archivos haciendo "http: // localhost: 8080/filename". Si el archivo existe, se mostrará (se muestra a continuación). De lo contrario, habrá un Error 404 - File Not Found .

Antes de comenzar, es importante tener en cuenta que cuando el servidor envía un mensaje al cliente del navegador web, está precedido por un encabezado HTTP. Un ejemplo de esto es:
HTTP/1.0 404 Not Found
Content-Type: text/plain
Content-Length: 25
Connection: close
Last-Modified: Mon, 23 Mar 2020 02:49:28 GMT
Expires: Sun, 17 Jan 2038 19:14:07 GMT
Date: Mon, 23 Mar 2020 04:49:28 GMT
HTTP 404 - File not found
Esto está devolviendo un error al cliente HTTP porque el archivo solicitado no se puede encontrar. Otros formularios usan un "200 OK", "Error de servidor interno 500" y "501 no implementado", en lugar de "404 no encontrado", pero de lo contrario mantienen el mismo formulario. Usted edita la segunda línea en función de qué contenido está enviando. Luego puede enviar datos después de dos nuevas líneas.
Cuando un cliente solicita un archivo, el servidor recibe una solicitud GET. Cada solicitud puede tener muchas llamadas iterativas al servidor para archivos adicionales, como la solicitud index.html para llamar a otras imágenes. Luego, el servidor envía la solicitud al CGI (interfaz de puerta de enlace común). El objetivo de usar CGI es para interacciones web dinámicas, como un formulario, al agregar aplicaciones de back -end que toman datos (entradas) de un formulario HTML. Otro tipo de solicitud es una publicación. Esto es cuando el cliente envía datos al servidor. Proporcionaremos un ejemplo de cada uno.
Ejemplo de la publicación: si va a "http: // localhost: 8080/form.htm", puede enviar un mensaje de publicación al servidor. El formulario será enviado y manejado por el servidor web CGI ejecutable como una solicitud posterior. Nuestro formulario de ejemplo toma entradas de dos palabras, envía el formulario y los datos a CGI, y CGI envía el formulario y el contenido (que es la cadena concatenada). Este es un ejemplo de cómo CGI maneja las solicitudes post.
Obtenga un ejemplo: es cuando el cliente intenta obtener un archivo del servidor. Esto sucede con frecuencia, especialmente cuando se solicita el archivo <dexic.htm>. CGI intenta encontrar el archivo, si no puede, entonces envía el error 404 no encontrado, encontrado anteriormente, al cliente.
Si se encuentra el archivo, entonces el servidor devuelve una solicitud, como
HTTP/1.0 200 OK
Content-Type: image/gif
Content-Length: 1231
Cache-Control: no-cache
Connection: Keep-Alive
Last-Modified: Mon, 23 Mar 2020 02:49:28 GMT
Expires: Sun, 17 Jan 2038 19:14:07 GMT
Date: Mon, 23 Mar 2020 04:49:28 GMT
CONTENT
La primera parte del texto es el encabezado HTTP. El contenido sería reemplazado por el contenido del archivo. El navegador mostraría este contenido. Así es como CGI maneja las solicitudes.
Suponiendo que el cliente es el usuario y el administrador es el servidor ...
Admin: el propósito de este proyecto para los administradores es ver cómo manejar POST y obtener solicitudes en un servidor web ejecutable. La programación del servidor también ayuda a comprender cómo enviar encabezados HTTP y comunicarse con una página web, así como a buscar archivos y enviarlos a una página web.
Usuario: el propósito de este proyecto para los usuarios es aprender cómo navegar por páginas web y qué significan ciertos errores cuando se reciben. Por ejemplo, si intenta cargar un archivo desde el servidor que no existe, habrá un error 404 no encontrado.