L'objectif principal de ce laboratoire est de créer un serveur Web CGI HTTP basé sur le RFC / 1945. Le serveur est construit sur la programmation et l'abstraction des socket C apprises jusqu'à présent dans INET 4021 - Programmation réseau.
De plus, le serveur doit être efficace en ce qui concerne la vitesse et l'allocation des ressources.
Notre serveur utilise CGI comme abstraction pour prendre les entrées d'un formulaire HTML, puis renvoyer la sortie. Le client n'a aucune idée que le CGI est là mais est heureux quand il reçoit une réponse, peu importe de qui il vient.
Quant à notre algorithme, le serveur prend en entrée, puis l'analyse pour constater s'il s'agit d'une demande post / get, puis envoie les données au CGI pour le traitement.
/ CGI-BIN - Ceci contient nos fichiers CGI utilisés pour gérer le message et obtenir des demandes (où réside le serveur Web exécutable).
Lorsqu'un client envoie une demande post / get au serveur, le serveur appellera l'exécutable CGI pour gérer la demande. L'utilisation principale est de permettre à l'exécutable de gérer le travail, tandis que le serveur le transmet et peut ensuite gérer de nouvelles demandes. Ceci est une bonne utilisation de l'allocation des ressources et aide à prendre en charge davantage les utilisateurs simultanément.
/ conf - le dossier de configuration contient un fichier httpd.conf qui est un fichier de configuration pour le serveur. Il indique la quantité d'utilisateurs simultanés, l'emplacement du contenu racine, l'emplacement de l'index et le port à exécuter.
/ Contenu - Tous les .html, .gif, .jpg (contenu) résident dans ce dossier. Lorsque l'index.html est reçu, il envoie des demandes pour tous ces fichiers. Ces fichiers sont utilisés pour fabriquer la page Web affichée sur le navigateur du client.
/ journaux - Ce dossier contient les fichiers journaux pour toutes les commandes d'accès ainsi que les erreurs. Le standard ira au journal d'accès et tous les autres journaux d'erreur vont au journal d'erreur.
/ SRC - C'est là que réside tout notre code source. Il s'agit essentiellement du dossier où se trouve le serveur.
index.html - Index du répertoire Webserver
Pour compiler le GET et Post CGI, passez au répertoire /src . Compiler le fichier C. Cela peut être fait par
gcc POST.c -o ../cgi-bin/POST.cgi && gcc GET.c -o ../cgi-bin/GET.cgi
Pour tester le serveur, accédez au répertoire /src . Compilez le fichier C et exécutez-le. Cela peut être fait par:
gcc server.c && ./a.out
Le serveur s'exécutera en fonction du contenu spécifié dans le fichier de configuration. Si inchangé, le terminal reviendra:
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
Maintenant, à l'aide d'un navigateur Web, entrez "http: // localhost: 8080 /". Cela chargera le fichier index.html et affichera la page Web. De plus, vous pouvez charger certains fichiers en faisant "http: // localhost: 8080 / nom de fichier". Si le fichier existe, il sera affiché (illustré ci-dessous). Sinon, il y aura une Error 404 - File Not Found .

Avant de commencer, il est important de noter que lorsque le serveur envoie un message au client du navigateur Web, il est précédé d'un en-tête HTTP. Un exemple de ceci est:
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
Ceci renvoie une erreur le client HTTP car le fichier demandé ne peut être trouvé. D'autres formulaires utilisent un "200 OK", "500 Error du serveur interne" et "501 non implémenté", au lieu de "404 non trouvé", mais maintiennent autrement le même formulaire. Vous modifiez la deuxième ligne en fonction du contenu que vous envoyez. Vous pouvez ensuite envoyer des données après deux nouvelles lignes.
Lorsqu'un client demande un fichier, le serveur reçoit une demande GET. Chaque demande peut avoir de nombreux appels itératifs vers le serveur pour les fichiers d'addition, tels que la demande index.html pour appeler pour d'autres images. Le serveur envoie ensuite la demande au CGI (interface de passerelle commune). L'objectif d'utiliser CGI est pour les interactions Web dynamiques, comme un formulaire, en ajoutant des applications backend qui prennent des données (entrées) à partir d'un formulaire HTML. Un autre type de demande est un message. C'est à ce moment que le client envoie des données au serveur. Nous fournirons un exemple de chacun.
Exemple de publication: si vous allez sur "http: // localhost: 8080 / form.htm", vous pouvez envoyer un message post au serveur. Le formulaire sera envoyé et géré par le serveur Web CGI exécutable en tant que demande de poste. Notre formulaire d'exemple prend deux entrées de mot, envoie le formulaire et les données à CGI, et CGI renvoie le formulaire et le contenu (qui est la chaîne concaténée). Ceci est un exemple de la façon dont CGI gère les demandes de publication.
Obtenez un exemple: c'est à ce moment que le client essaie d'obtenir un fichier du serveur. Cela se produit fréquemment, surtout lorsque le fichier <htm> est demandé. CGI essaie de trouver le fichier, s'il ne peut pas, il envoie l'erreur 404 non trouvée, trouvée ci-dessus, au client.
Si le fichier est trouvé, le serveur renvoie une demande, comme
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
Le premier morceau de texte est l'en-tête HTTP. Le contenu serait remplacé par le contenu du fichier. Le navigateur afficherait alors ce contenu. C'est ainsi que CGI gère les demandes.
En supposant que le client est l'utilisateur et l'administrateur est le serveur ...
Admin - Le but de ce projet pour les administrateurs est de voir comment gérer la publication et obtenir des demandes dans un serveur Web exécutable. La programmation du serveur aide également à comprendre comment envoyer des en-têtes HTTP et communiquer avec une page Web, ainsi que la navigation pour les fichiers et les envoyer à une page Web.
Utilisateur - Le but de ce projet pour les utilisateurs est d'apprendre à naviguer sur les pages Web et ce que certaines erreurs signifient lorsqu'elles sont reçues. Par exemple, si vous essayez de charger un fichier du serveur qui n'existe pas, il y aura une erreur de fichier 404.