Das Hauptziel dieses Labors ist es, einen CGI -HTTP -Webserver basierend auf dem RFC/1945 zu erstellen. Der Server basiert auf C -Socket -Programmierung und Abstraktion, die bisher in INET 4021 - Network -Programmierung erlernt wurde.
Darüber hinaus sollte der Server in Bezug auf Geschwindigkeit und Ressourcenzuweisung effizient sein.
Unser Server verwendet CGI als Abstraktion, um Eingaben aus einem HTML -Formular zu entnehmen und dann die Ausgabe zurückzugeben. Der Kunde hat keine Ahnung, dass der CGI da ist, ist aber glücklich, wenn er eine Antwort erhält, unabhängig davon, von wem es stammt.
Was unseren Algorithmus betrifft, nimmt der Server die Eingabe an und analysiert ihn dann, um zu ermitteln, ob es sich um eine Post-/GET -Anforderung handelt, und sendet die Daten dann zur Verarbeitung an die CGI.
/CGI -BIN - Dies enthält unsere CGI -Dateien, die zum Abwickeln von Post- und Erhaltungsanforderungen verwendet werden (sodass sich der ausführbare Webserver befindet).
Wenn ein Client eine Post/GET -Anforderung an den Server sendet, ruft der Server die ausführbare CGI auf, um die Anforderung zu verarbeiten. Die Hauptverwendung hierfür besteht darin, dass die ausführbare Datei die Arbeit erledigen kann, während der Server sie nur ausgibt und dann neue Anfragen bearbeiten kann. Dies ist eine gute Verwendung der Ressourcenzuweisung und hilft dabei, mehr Benutzer gleichzeitig zu unterstützen.
/conf - Der Konfigurationsordner enthält eine HTTPD.Conf -Datei, die eine Konfigurationsdatei für den Server ist. Es gibt die Menge an gleichzeitigen Benutzern, Stamminhaltsposition, Indexspeicherort und Port an.
/Inhalt - Alle .html, .gif, .jpg (Inhalt) befinden sich in diesem Ordner. Wenn der index.html empfangen wird, sendet er Anfragen für alle diese Dateien. Diese Dateien werden verwendet, um die Webseite zu erstellen, die auf dem Browser des Clients angezeigt wird.
/Protokolle - Dieser Ordner enthält die Protokolldateien für alle Zugriffsbefehle sowie Fehler. Der Standard -Out geht zum Zugriffsprotokoll und alle anderen Fehlerprotokolle werden zum Fehlerprotokoll.
/SRC - Hier befindet sich all unser Quellcode. Dies ist im Wesentlichen der Ordner, in dem sich der Server befindet.
Index.html - Webserver Directory Index
Um das GET und post CGI zu kompilieren, wechseln Sie in das /src -Verzeichnis. Kompilieren Sie die C -Datei. Dies kann durch geschehen
gcc POST.c -o ../cgi-bin/POST.cgi && gcc GET.c -o ../cgi-bin/GET.cgi
Um den Server zu testen, gehen Sie zum /src -Verzeichnis. Kompilieren Sie die C -Datei und führen Sie sie aus. Dies kann erledigt werden durch:
gcc server.c && ./a.out
Der Server wird basierend auf dem in der Konfigurationsdatei angegebenen Inhalt ausgeführt. Wenn unverändert, wird das Terminal zurückgegeben:
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
Geben Sie nun einen Webbrowser mit "http: // localhost: 8080/" ein. Dadurch wird die index.html -Datei geladen und die Webseite angezeigt. Zusätzlich können Sie bestimmte Dateien laden, indem Sie "http: // localhost: 8080/Dateiname" durchführen. Wenn die Datei vorhanden ist, wird sie angezeigt (siehe unten). Andernfalls gibt es einen Error 404 - File Not Found Nachricht.

Bevor wir beginnen, ist es wichtig zu beachten, dass der Server, wenn eine Nachricht an den Webbrowser -Client sendet, einen HTTP -Header vorausgeht. Ein Beispiel dafür ist:
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
Dies sendet einen Fehler zurück den HTTP -Client, da die angeforderte Datei nicht gefunden werden kann. Andere Formulare verwenden einen "200 OK", "500 internen Serverfehler" und "501 nicht implementiert" anstelle von "404 nicht gefunden", halten aber ansonsten das gleiche Formular. Sie bearbeiten die zweite Zeile basierend auf dem Inhalt, den Sie senden. Sie können dann Daten nach zwei neuen Zeilen senden.
Wenn ein Client eine Datei anfordert, empfängt der Server eine GET -Anforderung. Jede Anfrage kann viele iterative Anrufe an den Server für Additionsdateien enthalten, z. B. die Anfrage index.html , um andere Bilder anzurufen. Der Server sendet dann die Anforderung an die CGI (Common Gateway -Schnittstelle). Das Ziel der Verwendung von CGI ist für dynamische Web -Interaktionen, wie z. B. ein Formular, durch Hinzufügen von Backend -Anwendungen, die Daten (Inputs) aus einem HTML -Formular aufnehmen. Eine andere Art von Anfrage ist ein Beitrag. Hier sendet der Client Daten an den Server. Wir werden jeweils ein Beispiel geben.
Post Beispiel: Wenn Sie zu "http: // localhost: 8080/form.htm" wechseln, können Sie eine Postnachricht an den Server senden. Das Formular wird von dem ausführbaren CGI -Webserver als Postanfrage gesendet und behandelt. Unser Beispielformular nimmt zwei Word -Eingänge an, sendet das Formular und die Daten an CGI und CGI sendet das Formular und den Inhalt zurück (der die String verkettet ist). Dies ist ein Beispiel dafür, wie CGI nach Anfragen nach Anfragen umgeht.
Beispiel: Dies ist der Zeitpunkt, an dem der Client versucht, eine Datei vom Server zu erhalten. Dies geschieht häufig, insbesondere wenn die Datei <index.htm> angefordert wird. CGI versucht, die Datei zu finden, wenn sie nicht kann, dann wird der oben gefundene Fehler 404 an den Client gesendet.
Wenn die Datei gefunden wird, sendet der Server eine Anforderung zurück, z.
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
Der erste Teil des Textes ist der HTTP -Header. Der Inhalt würde durch den Inhalt der Datei ersetzt. Der Browser würde diesen Inhalt dann anzeigen. So behandelt CGI Anfragen.
Angenommen, der Client ist der Benutzer und der Administrator der Server ...
Admin - Der Zweck dieses Projekts für Administratoren besteht darin, zu sehen, wie Sie Posts abwickeln und Anfragen in einem ausführbaren Webserver abrufen. Das Programmieren des Servers hilft auch dabei, zu verstehen, wie HTTP -Headers gesendet und mit einer Webseite kommuniziert sowie nach Dateien stöbern und an eine Webseite gesendet werden.
Benutzer - Der Zweck dieses Projekts für Benutzer ist es, zu erfahren, wie Sie auf Webseiten navigieren und was bestimmte Fehler bei Empfangen bedeuten. Wenn Sie beispielsweise versuchen, eine Datei vom Server zu laden, die nicht vorhanden ist, wird eine 404 -Datei nicht gefunden, die Fehler gefunden hat.