CGI-Technologie - Common Gateway Interface. Phasen der Erstellung einer Webanwendung

1) Allgemeine Informationen zu CGI
Seit 1993 ist CGI eine sehr häufig verwendete Technologie zum Erstellen dreistufiger Client / Server-Anwendungen im Internet. Die CGI-Anwendung arbeitet mit dem Webserver zusammen, um als Anwendungsserver in einer dreistufigen Client / Server-Architektur zu fungieren. CGI ist ein Satz von Regeln (Spezifikation), nach denen Benutzerprogramme, die auf einem Webserver ausgeführt werden, Daten in Form eines HTML-Dokuments an den Client zurückgeben können. CGI ist eine Konsolenanwendung, die als Antwort auf die Anforderung eines Clients zum Abrufen oder Aktualisieren von Daten geladen wird, als separater Single-Thread-Prozess unter der Kontrolle des Webservers ausgeführt wird und sofort nach dem Herunterfahren entladen wird. WinCGI - Windows-Implementierung von CGI.

2) Implementierungsoptionen
Ein Programm, das von einem Webserver gemäß der CGI-Spezifikation gestartet wird, wird als CGI-Skript bezeichnet. Es kann in einer beliebigen Programmiersprache (C, Basic, Pascal usw.) oder in einer Befehlssprache (Shell, Perl usw.) geschrieben werden, mit der ausführbare Module erstellt werden können. Das CGI-Skript fungiert als Vermittler zwischen dem Webserver und anderen Servern, z. B. einem Datenbankserver, und wird daher häufig als Gateway bezeichnet. CGI-Programme befinden sich standardmäßig im Verzeichnis C: \\ InetPub \\ Scripts | Cgi-bin. Sie können jedoch Ihr eigenes virtuelles Verzeichnis erstellen.

3) Interaktionsmöglichkeiten zwischen CGI und WEB-Server
Die CGI-Spezifikation bietet verschiedene Arten der Interaktion zwischen einem CGI-Programm und einem Webserver, die sich in der Art und Weise unterscheiden, wie Daten zwischen dem Server und dem Programm ausgetauscht werden.
... Übergeben von Parametern in der Befehlszeile (z. B. mithilfe des ISINDEX-Deskriptors in der HTML-Dokument oder FORM-URLENCODED).
... Übergeben der Werte von Umgebungsvariablen (es gibt mehr als 17 davon).
... Datenübertragung über Standardeingabestream (STDIN, STDOUT).

Eine ISINDEX-Anfrage ist eine Anfrage des Formulars: http://site.ru/somthig-cgi/cgi-script?word1+word2+word3
Die Hauptsache hier ist die Liste der Wörter nach dem "?" Wörter werden durch das Symbol "+" aufgelistet und für Kyrillisch nicht in hexadezimalen Sequenzen codiert. Eine Folge von Wörtern nach dem "?" wird in die Umgebungsvariable QUERY_STRING eingefügt.

Eine FORM-URLENCODED-Anforderung ist eine Anforderung des Formulars: http://site.ru/something-cgi/cgi-script?field\u003dword1&field2\u003dword2
Formulardaten werden als Feldname-Wert-Paare geschrieben, getrennt durch &.

Umgebungsvariablen, die nicht von der Art der Anforderung abhängen:
SERVER_SOFTWARE - Zeigt den Namen und die Version des http-Servers im Format: Name / Version an.
SERVERNAME - Zeigt den Domainnamen des Servers an.
SERVER_ADDR - Zeigt die IP des Servers an.
SERVER_ADMIN - E-Mail des Webserver-Administrators.
GATEWAY_INTERFACE - CGI-Version zum Zeitpunkt der Kompilierung des httpd-Daemons im Format: CGI / version
DATE_GMT - aktuelles Datum und Uhrzeit in der GMT-Zeitzone.
DATE_LOCAL - aktuelles Datum und Uhrzeit in der Serverzeitzone.
DOKUMENT ROOT - Pfad zum Hauptverzeichnis des Webservers.
Umgebungsvariablen, die von der Art der Anforderung abhängen:
SERVER_PROTOCOL - das Protokoll, mit dem die Anfrage empfangen wurde.
SERVER PORT - der Port, für den die Anfrage empfangen wurde.
REQUEST_METHOD - Anfragetyp: POST, GET und so weiter.
REQUEST_URL - die Seite, die die Anfrage gesendet hat.
SCRIPT_NAME - Skript-URL ohne Servernamen.
SCRIPT_FILENAME - vollständiger Name der Skriptdatei auf der Festplatte.
QUERY_STRING - Informationen in der Befehlszeile des Skriptaufrufs (nach? In der URL).
INHALTSTYP - MIME-Typ von Daten, die an das Skript übergeben werden.
CONTENE_LENGTH - die Länge der übertragenen Daten.

Standardausgabestream:

Daten werden nur über den Standardeingabestream in ein Skript eingegeben, wenn die POST-Methode für den Zugriff auf die Ressource (für das Skript) verwendet wird. Gleichzeitig wird die Umgebungsvariable CONTENT_LENGTH auf die Anzahl der Zeichen festgelegt, die aus dem Standardeingabestream des Skripts gelesen werden sollen, und die Umgebungsvariable CONTENT_TYPE wird auf die Art der Datencodierung festgelegt, die aus dem Standardeingabestream gelesen wird. Wenn Sie Zeichen für Zeichen in C lesen, können Sie beispielsweise den folgenden Code verwenden:

int n;
char * buf;
n \u003d atoi (getenv (* CONTENT_LENGTH *));
buf \u003d (char *) malloc (n + 1);
Memset (buf, '\\ 000', n + 1);
für (i \u003d 0; iBR\u003e (buf [i] \u003d getchar ())

frei (buf);

4) Datenübertragungsmethoden
a) Die GET-Methode überträgt Daten über Umgebungsvariablen an das CGI-Programm, die tatsächlich über das Trennzeichen an die URL angehängt werden.

Zu diesem Zweck wird zunächst die Variable query_string verwendet - eine lange Zeichenfolge, die aus durch das kaufmännische Und-Zeichen voneinander getrennten Namen-Wert-Paaren besteht - &. Es stellt sich schnell heraus, aber die übertragene Datenmenge überschreitet je nach Webservertyp 256 x 1024 Byte nicht.

b) Die POST-Methode überträgt Daten über den Standard-Eingabestream (Ini-Datei für WinCGI). Tatsächlich werden die Daten an den Hauptteil der HTML-Anforderung angehängt. Die Anzahl der übertragenen Bytes wird in der Umgebungsvariablen content_length angegeben. Dies ist eine langsamere Methode zum Übertragen von Daten, aber die übertragene Datenmenge ist nicht begrenzt.

c) HREF-Parameter von Tag A.
Neben den GET- und POST-Methoden des Tags

können Sie das CGI-Programm über den HREF-Parameter des Link-Tags aufrufen ... Parameter werden nach dem Dateinamen nach dem? -Zeichen übergeben.

Das Übergeben von Daten ähnelt der Verwendung der GET-Methode.

5) Sequenzdiagramm


Schritt 1: Ein Benutzer zeigt ein HTML-Dokument an und stößt auf einen Link zu der Seite, die das Formular enthält (mithilfe des Tags) ), um beispielsweise die Datenbank abzufragen. Der Benutzer gibt die erforderlichen Daten in die Eingabefelder des Formulars ein und drückt die Taste SUBMIT oder die grafische Taste IMAGE. HTML-Tag hat zwei erforderliche Attribute: METHODE und AKTION. Das Attribut ACTION gibt die URL an, die der Name des CGI-Programms sein soll, das sich normalerweise im Verzeichnis befindet. Das Attribut METHOD, normalerweise GET oder POST, bestimmt, wie Daten an den Server übergeben werden.

Schritt 2: Der Webbrowser sammelt die im Formular eingegebenen Daten, bestimmt die Datenübertragungsmethode in Abhängigkeit von der angegebenen Methode (GET oder POST) und leitet den Aufruf an den Webserver weiter.

Schritt 3: Der Webserver erhält einen Anruf über eine Socket-Verbindung. Der Server analysiert die Nachricht in Teile und stellt fest, dass es sich um eine POST- oder GET-Methode handelt. Als nächstes beginnt die CGI-Interaktion.

Schritt 4: Der Webserver legt die Umgebungsvariablen fest (unter MS-DOS werden sie mit dem Befehl Set festgelegt). Umgebungsvariablen fungieren als Bulletin Board für die Kommunikation zwischen dem Webserver und dem CGI-Programm. Die folgenden Variablen werden häufig verwendet: Servername, Anforderungsmethode, Pfadinfo, Skriptname, Inhaltstyp, Inhaltslänge und eine Reihe anderer. Wenn ein CGI-Programm über ein Formular aufgerufen wird (am häufigsten), sendet der Browser eine lange Zeichenfolge an den Server, beginnend mit dem vollständigen Pfad zum CGI-Programm. Darauf folgen andere Daten, die als Pfaddaten bezeichnet werden, und werden über die Umgebungsvariable path_info an das CGI-Programm übergeben: http: //myserver/cgi-bin/mycgi.exe/showrecord? RecNo \u003d 20 wobei: showrecord? - Pfaddaten, recNo \u003d 20 - Abfragezeichenfolge.

Schritt 5: Der Webserver führt das CGI-Programm aus, das sich standardmäßig im Verzeichnis C: \\ InetPub \\ scripts | cgi-bin befindet. Sie können jedoch auch eigene virtuelle Verzeichnisse erstellen.

Schritt 6: Das CGI-Programm analysiert die Umgebungsvariablen und bestimmt, was auf POST reagiert. In C wird auf Umgebungsvariablen mit der Funktion getenv () zugegriffen.

Schritt 7: Das CGI-Programm empfängt den Nachrichtentext über stdin. Die Umgebungsvariable content_length gibt an, wie viele Daten in der Nachricht enthalten sind. In C können Sie fread oder scanf verwenden, um Daten aus einem Stream zu lesen.

Schritt 8: Das CGI-Programm führt einige Aktionen aus, z. B. eine Datenbankabfrage.

Schritt 9: Das CGI-Programm gibt unabhängig von der GET- oder POST-Methode das Ergebnis immer über den Standardausgabestream (stdout) zurück. Die Sprache C verwendet die Funktionen printf oder fwrite.

Schritt 10: Der Webserver gibt das Ergebnis an den Webbrowser zurück.

6) Zugriffsfunktionen
... Der Datenbankzugriff über CGI kann über die ODBC-Programmierschnittstelle oder die OLE DB- oder ADO-Objektschnittstellen erfolgen. Delphi verwendet BDE.
... Die Zugriffssicherheit wird durch die Verwendung von SSL-Protokollen (Secure Sockets Layer), S-HTTP-Protokollen (Secure HTTP) und Firewalls gewährleistet.
... Um das CGI-Programm interaktiver zu gestalten, können einige Webserver magische Cookies oder einfach Cookies verwenden, die auf dem Client gespeicherte Serverdaten darstellen.
... Einige Server können das an den Browser gesendete HTML-Dokument analysieren und eine Reihe von Befehlen zum Einfügen von Kommentaren bereitstellen: das aktuelle Datum, die Uhrzeit, Informationen zur letzten Dokumentänderung und eine Reihe anderer. Dies wird als serverseitiges Include-SSI bezeichnet.

7) CGI-Vorteile

Sprachunabhängigkeit, dh die Fähigkeit, CGI-Programme in einer beliebigen Programmiersprache oder Befehlssprache zu schreiben. Auf diese Weise bietet die Befehlssprache Perl plattformübergreifendes CGI (PCGI).
... Prozessorunabhängigkeit bedeutet, dass beim Starten eines CGI-Programms ein separater Prozess vom Webserver erzeugt wird und im Falle eines Fehlers der Webserver nicht "beschädigt" werden kann.
... Offenheit des Standards.
... Architektonische Unabhängigkeit von der Serverimplementierung, d.h. Es kann auf jedem Server verwendet werden.
... Transparenz der Nutzung.

8) Nachteile von CGI

Großer Zeitaufwand durch Starten eines separaten Single-Thread-Prozesses für jede Client-Anfrage, der am Ende der Anfrage endet. Dies führt zu einer geringen Leistung. Es gibt eine FastCGI-Entwicklung, die jedoch nicht allgemein unterstützt wird.
... Es ist schwierig, die Datenbank zu "pflegen", da für jede Anforderung ein separater Prozess gestartet wird, d. H. Eine neue Verbindung ist erforderlich.
... CGI ist in seiner Funktionsfähigkeit eingeschränkt, da die Spezifikation nur eine einfache Antwortrolle für das Programm bietet, um ein Ergebnis für eine Benutzeranforderung zu generieren.
... CGI ist unpraktisch, da es auf Webseiten fest codiert ist.

9) CGI in Delphi erstellen
... Delphis Ansatz zum Aufbau von CGI
CGI- und WinCGI-Anwendungen in Delphi gehören zur TCGIApplication-Klasse. Der vom Assistenten generierte CGI- und WinCGI-Anwendungscode ist praktisch identisch und unterscheidet sich nur in der Compiler-Direktivenzeile: ($ APPTYPE CONSOLE | GUI). Führen Sie zum Erstellen einer CGI-Anwendung die folgenden Befehle im Delphi 5-7-Hauptmenü aus: Datei \\ Neu.

Wählen Sie im mehrseitigen Fenster "Neue Elemente" des geöffneten Delphi-Objekt-Repositorys die Seite "Geschäft" aus und aktivieren Sie das Symbol des Assistenten für DB-Webanwendungen. Dann beantworte die Fragen.

Blockdiagramm des CGI-Moduls in Delphi


... Überblick über die Prinzipien der CGI-Implementierung in Delphi
Der WebDispatcher verwendet das WebRequest-Objekt, um eingehende Anforderungen zu analysieren und das erforderliche Aktionsobjekt auszuwählen, das die Anforderung an den Datenbankserver sendet. Der entsprechende Produzent ist ein HTML-Inhaltsgenerator, der über ein WebResponse-Objekt an den Webserver und dann an den Client weitergeleitet wird. Tags sind in Producer-Objekten verfügbar<# …..>Ermöglichen der Interaktion von Pascal-Code und HTML-Code. Diese Tags sind für einen Webbrowser nicht sinnvoll, helfen jedoch dabei, Daten aus einer Datenbank in HTML-Seiten zu ersetzen.

... Beispiel-CGI-Programm

Programm MyCGI;
($ APPTYPE CONSOLE) // ($ APPTYPE GUI) - für WinCGI
Verwendet Webbroker, HTTPApp, CGIApp, Unit1 in "Unit1.Pas" (WebVodule1: TWebModule)
($ R * .RES)
Start
Application.Initialize;
Application.CreateForm (TWebModule1: WebModule1);
Application.Run;
Ende.

-Länge: 22

name \u003d Vasya & okbutton \u003d OK

Bei Verwendung der Methode POST Formulardaten werden nach "zwei" gesendet Eingeben-ow "- im Anfragetext. Alles oben ist eigentlich der Anforderungsheader (und wann wir den verwendet haben BEKOMMENwurden die Formulardaten in der Kopfzeile übermittelt).

Damit der Server weiß, auf welchem \u200b\u200bByte das Lesen des Anforderungshauptteils beendet werden soll, enthält der Header die Zeile Inhaltslänge;; ungefähr gleich, dass die Formulardaten im Formular übertragen werden parameter1 \u003d Wert1 & Parameter2 \u003d Wert2 ..., und die Werte werden im Formular übergeben urlencode - das ist genau das gleiche wie mit der Methode BEKOMMEN, aber im Hauptteil der Anfrage - dem Server wird der Header mitgeteilt "Inhaltstyp: application / x-www-form-urlencoded".

Über was ist urlencode- knapp unter.

Methodenvorteil POST:keine Begrenzung der Länge einer Zeile mit Formulardaten.

Bei Verwendung der Methode POST Es ist unmöglich, das Formular einfach durch "Folgen des Links" einzureichen, wie dies bei der Fall war BEKOMMEN.

Der Kürze halber werden wir die Begriffe "GET-Form" und "POST-Form" einführen, wobei das Präfix dem Wert des Attributs entspricht methode Etikett

.

Verwenden von POST-Form in seinem Attribut aktion Sie können nach dem Fragezeichen und den Parametern angeben BEKOMMEN-Formen. Also die Methode POST beinhaltet die Methode BEKOMMEN.

CGI-Technologie

Wir haben herausgefunden, wie man schafft Html-form und wie der Browser die eingegebenen Daten an den Server sendet. Es ist jedoch noch nicht klar, was der Server mit diesen Daten tun wird.

Der Webserver selbst kann nur die angeforderte Seite und nichts weiter angeben, und alle übermittelten Formulardaten sind im Allgemeinen völlig gleichgültig. Um diese Daten mit einem beliebigen Programm verarbeiten und dynamisch eine Antwort auf den Browser erstellen zu können, wurde die CGI-Technologie (Common Gateway Interface) erfunden.

Schau dir das an URL: http://www.example.com/cgi-bin/form_handler.cgi... Die erste Annahme, die darüber gemacht werden kann, ist normalerweise folgende: Der Server gibt den Inhalt der Datei an form_handler.cgi aus dem Katalog cgi-bin... Im Falle der Technologie jedoch CGI das ist nicht der Fall. Der Server startet das Programm form_handler.cgi und übergibt die Formulardaten an ihn. Das Programm generiert Text, der als Antwort auf die Anfrage an den Browser gesendet wird.

Das Programm form_handler.cgi kann in jeder Programmiersprache geschrieben werden, die Hauptsache ist, den Standard im Programm zu beachten CGI... Sie können beispielsweise die beliebte Skriptsprache Perl verwenden. Oder Sie können alles in C oder in Shell-Skripten schreiben ... Schreiben wir dieses Programm beispielsweise in C. Aber zuerst wollen wir herausfinden, wie der Datenaustausch zwischen dem Webserver und CGI-Programm:

1. Vor dem Starten des CGI-Programms legt der Server die Umgebungsvariablen fest (Sie kennen sie wahrscheinlich aus dem Befehl PATH). Jede mehr oder weniger seriöse Programmiersprache verfügt über Funktionen zum Lesen von Umgebungsvariablen. Der CGI-Standard definiert einen sehr wichtigen Satz von Variablen, die vor dem Ausführen eines CGI-Programms definiert werden müssen. Betrachten wir jetzt nur drei davon:

REQUEST_METHOD - Datenübertragungsmethode - BEKOMMEN oder POST (Es gibt andere, aber bisher berücksichtigen wir sie nicht.)

QUERY_STRING - enthält Teil Url nach dem Fragezeichen oder mit anderen Worten die Daten BEKOMMEN-Formen.

INHALTSLÄNGE- die Länge des Anforderungshauptteils (Daten POST-Formen).

2. Der Server wird gestartet CGI-Programm. Der Hauptteil der Anforderung wird als Standardeingabe an das Programm übergeben ( stdin) - als ob diese Daten über die Tastatur eingegeben würden.

3. Das Programm zeigt die Browserantwort auf die Standardausgabe an ( stdout) - "auf dem Bildschirm"... Diese Ausgabe wird vom Webserver abgefangen und an den Browser übergeben.

Das CGI-Programm für SiHier wird der Inhalt der vom Webserver empfangenen Formularparameter angezeigt:

1. #include

2. #include

4.int main (nichtig)

6. // Lesen Sie die vom Webserver festgelegten Umgebungsvariablen

7. char * query_string \u003d getenv ("QUERY_STRING");

8. char * request_method \u003d getenv ("REQUEST_METHOD");

10. char * post_data; // Puffer für POST-Anforderungsdaten

11. int post_length \u003d 0; // Körperlänge anfordern

13. if (strcmp (request_method, "POST") \u003d\u003d 0) (// Wenn eine POST-Anfrage empfangen wird,

14. post_length \u003d atoi (getenv ("CONTENT_LENGTH")); // zuerst lesen von

15. // Umgebungsvariable seine Länge,

16.if (post_length) (// wenn es nicht Null ist,

17.post_data \u003d (char *) malloc (post_length + 1); // Speicher für den Puffer zuweisen,

18.fread (post_data, post_length, 1, stdin); // den Anfragetext von der Standardeingabe lesen,

19.post_data \u003d 0; // beende den String mit einem Null-Byte.

23. // Antwortheader anzeigen ...

Dank des World Wide Web kann fast jeder Informationen im Internet in einer Form bereitstellen, die für das Auge angenehm und für eine breite Verbreitung geeignet ist. Sie haben zweifellos im Internet gesurft und andere Websites gesehen, und inzwischen wissen Sie wahrscheinlich, dass die entmutigenden Abkürzungen wie "HTTP" und "HTML" nur eine Abkürzung für "das Web" und "die Art und Weise, Informationen im Internet auszudrücken" sind. Möglicherweise haben Sie bereits Erfahrung mit der Präsentation von Informationen im Internet.

Das Internet hat sich als ideales Medium für die Verbreitung von Informationen erwiesen, was sich in seiner immensen Popularität und weit verbreiteten Entwicklung zeigt. Während einige die Nützlichkeit des Internets in Frage gestellt haben und seine weit verbreitete Entwicklung und Popularität hauptsächlich auf aufdringliche Werbung zurückführen, ist das Internet zweifellos ein wichtiges Mittel zur Darstellung aller Arten von Informationen. Es gibt nicht nur viele Dienste für die Bereitstellung der neuesten Informationen (Nachrichten, Wetter, Sportveranstaltungen in Echtzeit) und Referenzmaterialien in elektronischer Form, sondern auch eine erhebliche Menge an Daten anderer Art. Das IRS, das alle Steuererklärungsformulare von 1995 und andere Informationen über das World Wide Web verbreitete, gab kürzlich zu, Briefe von Fans seiner Website erhalten zu haben. Wer hätte gedacht, dass die IRS jemals Fanpost erhalten würde? Dies lag nicht daran, dass seine Website gut gestaltet war, sondern daran, dass sie sich für Tausende, wenn nicht Millionen von Menschen als wirklich nützliches Werkzeug herausstellte.

Was macht das Web einzigartig und einen so attraktiven Informationsdienst? Erstens bietet es eine Hypermedia-Schnittstelle für Daten. Denken Sie an das Festplattenlaufwerk Ihres Computers. In der Regel werden Daten ähnlich wie bei einem Dateisystem linear ausgedrückt. Sie haben beispielsweise eine Reihe von Ordnern, und in jedem Ordner befinden sich entweder Dokumente oder andere Ordner. Das Web verwendet ein anderes Paradigma, um Informationen auszudrücken, die als Hypermedia bezeichnet werden. Eine Hypertext-Schnittstelle besteht aus einem Dokument und Links. Links sind Wörter, auf die geklickt wird, um andere Dokumente anzuzeigen oder andere Arten von Informationen zu finden. Das Web erweitert das Konzept des Hypertexts um andere Arten von Medien wie Grafiken, Sounds und Videos (daher der Name "Hypermedia"). Durch Hervorheben von Text oder Grafiken in einem Dokument können Sie verwandte Informationen zu dem hervorgehobenen Element in einer beliebigen Anzahl von Formularen anzeigen.

Fast jeder kann von dieser einfachen und einzigartigen Art der Präsentation und Verteilung von Informationen profitieren, von Akademikern, die Daten sofort mit ihren Kollegen teilen möchten, bis zu Geschäftsleuten, die ihr Unternehmen mit anderen teilen. Obwohl es äußerst wichtig ist, Informationen bereitzustellen, haben viele in den letzten Jahren das Gefühl, dass das Erhalten von Informationen ein ebenso wichtiger Prozess ist.

Während das Web eine einzigartige Hypermedia-Schnittstelle für Informationen bietet, gibt es viele andere effiziente Möglichkeiten, Daten zu verteilen. Beispielsweise existierten Netzwerkdienste wie das File Transfer Protocol (FTP) und die Newsgroup "Gopher" lange vor dem Aufkommen des World Wide Web. E-Mail war fast von Anfang an das Hauptmedium für die Kommunikation und den Informationsaustausch über das Internet und die meisten anderen Netze. Warum ist das Internet zu einer so beliebten Methode zur Verbreitung von Informationen geworden? Der multimediale Aspekt des Internets hat einen spürbaren Beitrag zu seinem beispiellosen Erfolg geleistet, aber damit das Internet am effektivsten ist, muss es interaktiv sein.

Ohne die Möglichkeit, Eingaben von Benutzern zu empfangen und Informationen bereitzustellen, wäre das Web eine vollständig statische Umgebung. Die Informationen wären nur in dem vom Autor angegebenen Format verfügbar. Dies würde eine der Rechenleistungen im Allgemeinen untergraben: interaktive Informationen. Anstatt den Benutzer beispielsweise zu zwingen, mehrere Dokumente anzuzeigen, als würde er ein Buch oder ein Wörterbuch anzeigen, ist es besser, dem Benutzer die Identifizierung von Schlüsselwörtern zu einem für ihn interessanten Thema zu ermöglichen. Benutzer können die Darstellung ihrer Daten anpassen, anstatt sich auf eine vom Inhaltsanbieter definierte starre Struktur zu verlassen.

Der Begriff "Webserver" kann irreführend sein, da er sich sowohl auf die physische Maschine als auch auf die Software bezieht, mit der er mit Internetbrowsern interagiert. Wenn der Browser eine bestimmte Webadresse anfordert, stellt er zunächst über das Internet eine Verbindung zum Computer her und sendet eine Anforderung für das Dokument an die Webserver-Software. Diese Software läuft ununterbrochen, wartet auf solche Anfragen und reagiert entsprechend.

Obwohl Server Daten senden und empfangen können, verfügt der Server selbst nur über eingeschränkte Funktionen. Beispielsweise kann der primitivste Server nur die erforderliche Datei an den Browser senden. Der Server weiß normalerweise nicht, was er mit dieser oder jener zusätzlichen Eingabe tun soll. Wenn der ISP dem Server nicht mitteilt, wie er mit diesen zusätzlichen Informationen umgehen soll, ignoriert der Server die Eingabe wahrscheinlich.

Damit der Server neben dem Suchen und Senden von Dateien an den Internetbrowser auch andere Vorgänge ausführen kann, müssen Sie wissen, wie Sie die Funktionalität des Servers erweitern können. Beispielsweise kann ein Webserver eine Datenbank nicht anhand eines von einem Benutzer eingegebenen Schlüsselworts durchsuchen und mehrere übereinstimmende Dokumente zurückgeben, es sei denn, diese Funktion wurde auf irgendeine Weise für den Server programmiert.

Was ist CGI?

Die Common Gateway Interface (CGI) ist eine Schnittstelle zum Server, mit der Sie die Funktionalität des Servers erweitern können. Mit CGI können Sie interaktiv mit Benutzern arbeiten, die auf Ihre Site zugreifen. Auf theoretischer Ebene ermöglicht CGI die Erweiterung eines Servers, um Browsereingaben zu analysieren (zu interpretieren) und Informationen basierend auf Benutzereingaben zurückzugeben. Auf praktischer Ebene ist CGI eine Schnittstelle, über die ein Programmierer Programme schreiben kann, die leicht mit einem Server kommunizieren können.

Um die Funktionen des Servers zu erweitern, müssen Sie den Server normalerweise selbst ändern. Diese Lösung ist unerwünscht, da sie ein Verständnis der unteren Ebene der Internet Protocol-Netzwerkprogrammierung erfordert. Außerdem müsste die Serverquelle bearbeitet und neu kompiliert oder für jede Aufgabe ein benutzerdefinierter Server geschrieben werden. Angenommen, Sie möchten die Funktionen Ihres Servers so erweitern, dass er als Web-to-E-Mail-Gateway (Web-to-E-Mail) fungiert, vom Benutzer eingegebene Informationen aus dem Browser abruft und per E-Mail an einen anderen Benutzer sendet. Der Server müsste Code einfügen, um die Browsereingaben zu analysieren, per E-Mail an einen anderen Benutzer zu senden und die Antwort über die Netzwerkverbindung an den Browser zurückzusenden.

Erstens erfordert eine solche Aufgabe den Zugriff auf den Servercode, was nicht immer möglich ist.

Zweitens ist es schwierig und erfordert umfangreiches technisches Wissen.

Drittens gilt dies nur für einen bestimmten Server. Wenn Sie Ihren Server auf eine andere Plattform verschieben müssen, müssen Sie den Betrieb aufnehmen oder zumindest viel Zeit damit verbringen, Ihren Code auf diese Plattform zu portieren.

Warum CGI?

CGI bietet eine tragbare und einfache Lösung für diese Probleme. Das CGI-Protokoll definiert eine Standardmethode für die Kommunikation von Programmen mit einem Webserver. Ohne besondere Kenntnisse ist es möglich, ein Programm in einer beliebigen Maschinensprache zu schreiben, die mit dem Webserver verbunden ist und mit diesem kommuniziert. Dieses Programm funktioniert mit allen Webservern, die das CGI-Protokoll verstehen.

Die CGI-Kommunikation erfolgt mit Standardeingabe und -ausgabe. Wenn Sie also wissen, wie Daten mit Ihrer Programmiersprache gedruckt und gelesen werden, können Sie eine Webserveranwendung schreiben. Abgesehen von der Analyse von Ein- und Ausgaben entspricht das Programmieren von CGI-Anwendungen fast dem Programmieren anderer Anwendungen. Um beispielsweise das Programm "Hallo Welt!" Zu programmieren, verwenden Sie die Druckfunktionen Ihrer Sprache und das für CGI-Programme definierte Format, um die entsprechende Nachricht zu drucken.

Wahl der Programmiersprache

Da CGI eine generische Schnittstelle ist, sind Sie nicht auf eine bestimmte Maschinensprache beschränkt. Oft wird eine wichtige Frage gestellt: Welche Programmiersprachen können Sie für die CGI-Programmierung verwenden? Sie können jede Sprache verwenden, mit der Sie:

  • Auf Standardausgabe drucken
  • Lesen Sie von der Standardeingabe
  • Lesen Sie aus variablen Modi

Fast alle Programmiersprachen und viele Skriptsprachen machen diese drei Dinge, und Sie können jede von ihnen verwenden.

Sprachen fallen in eine der folgenden zwei Klassen: übersetzbar und interpretiert. Eine übersetzte Sprache - zum Beispiel C oder C ++ - ist normalerweise kleiner und schneller, während für interpretierte Sprachen wie Perl oder Rexx beim Start manchmal ein großer Interpreter geladen werden muss. Darüber hinaus können Sie Binärdateien (Code, der in die Maschinensprache übersetzt wurde) ohne Quellcode verteilen, wenn Ihre Sprache übersetzbar ist. Die Verteilung interpretierter Skripte bedeutet normalerweise die Verteilung des Quellcodes.

Bevor Sie eine Sprache auswählen, müssen Sie zunächst Ihre Prioritäten berücksichtigen. Sie müssen die Vorteile der Geschwindigkeit und Effizienz einer Programmiersprache mit der Leichtigkeit der Programmierung einer anderen bewerten. Wenn Sie eine andere Sprache lernen möchten, anstatt die bereits bekannte zu verwenden, sollten Sie die Vor- und Nachteile beider Sprachen sorgfältig abwägen.

Die beiden am häufigsten verwendeten Sprachen für die CGI-Programmierung sind C und Perl (beide werden in diesem Buch behandelt). Beide haben klare Vor- und Nachteile. Perl ist eine sehr hohe Sprache und gleichzeitig eine leistungsstarke Sprache, die sich besonders zum Parsen von Text eignet. Aufgrund seiner Benutzerfreundlichkeit, Flexibilität und Leistung ist es eine attraktive Sprache für die CGI-Programmierung. Aufgrund seiner relativ großen Größe und langsameren Leistung ist es manchmal für einige Anwendungen ungeeignet. C-Programme sind kleiner, effizienter und bieten eine niedrigere Systemsteuerung, sind jedoch schwieriger zu programmieren, verfügen nicht über integrierte Textverarbeitungsroutinen und sind schwieriger zu debuggen.

Was ist die am besten geeignete Sprache für die CGI-Programmierung? Die, die Sie für bequemer in Bezug auf die Programmierung halten. Beide sind für die Programmierung von CGI-Anwendungen gleichermaßen effektiv, und mit geeigneten Bibliotheken verfügen beide über ähnliche Funktionen. Wenn Sie jedoch einen schwer erreichbaren Server haben, können Sie kleinere übersetzbare C-Programme verwenden. Wenn Sie schnell eine Anwendung schreiben müssen, die viel Textverarbeitungsarbeit erfordert, können Sie stattdessen Perl verwenden.

Vorsichtsmaßnahmen

Es gibt einige wichtige Alternativen zu CGI-Anwendungen. Viele Server enthalten jetzt API-Programmierung, die das Programmieren direkter Servererweiterungen im Gegensatz zu eigenständigen CGI-Anwendungen erleichtert. API-Server sind normalerweise effizienter als CGI-Programme. Andere Server verfügen über integrierte Funktionen, die spezielle Nicht-CGI-Elemente wie die Datenbankschnittstelle verarbeiten können. Schließlich können einige Anwendungen mit neuen clientseitigen (und nicht serverseitigen) Technologien wie Java gerendert werden. Wird CGI angesichts derart rasanter technologischer Veränderungen schnell obsolet?

Kaum. CGI bietet gegenüber neueren Technologien mehrere Vorteile.

  • Es ist vielseitig und tragbar. Sie können eine CGI-Anwendung mit nahezu jeder Programmiersprache auf jeder Plattform schreiben. Einige der Alternativen, wie die Server-API, beschränken Sie auf einige Sprachen und sind viel schwieriger zu erlernen.
  • Es ist unwahrscheinlich, dass Clienttechnologien wie Java CGI ersetzen, da es einige Anwendungen gibt, für deren Ausführung Serveranwendungen viel besser geeignet sind.
  • Viele der Einschränkungen von CGI sind HTML- oder HTTP-Einschränkungen. Mit den allgemeinen Standards des Internets entwickeln sich auch die Funktionen von CGI.

Zusammenfassung

Ein gemeinsames Gateway ist ein Protokoll, über das Programme mit Webservern interagieren. Die Vielseitigkeit von CGI gibt Programmierern die Möglichkeit, Gateway-Programme in nahezu jeder Sprache zu schreiben, obwohl mit verschiedenen Sprachen viele Kompromisse verbunden sind. Ohne diese Fähigkeit wäre das Erstellen interaktiver Webseiten schwierig, bestenfalls wären Serveränderungen erforderlich, und die meisten Benutzer, die keine Site-Administratoren sind, könnten nicht auf Interaktivität zugreifen.

Kapitel 2. Grundlagen

Vor einigen Jahren habe ich eine Seite für das College in Harvard erstellt, auf der ich meine Kommentare dazu abgeben konnte. Zu dieser Zeit war das Internet jung und die Dokumentation knapp. Wie viele andere habe ich mich auf eine präzise Dokumentation und ein von anderen entwickeltes Programmiersystem verlassen, um CGI-Programmierung zu lernen. Obwohl diese Untersuchungsmethode einige Forschung, viele Experimente und viele Fragen erforderte, war sie sehr effektiv. Dieses Kapitel ist das Ergebnis meiner frühen Arbeit mit CGI (natürlich mit einigen Erläuterungen).

Während es einige Zeit dauert, die Gateway-Schnittstelle vollständig zu verstehen und zu beherrschen, ist das Protokoll selbst recht einfach. Jeder, der über grundlegende Programmierkenntnisse verfügt und mit dem Web vertraut ist, kann schnell lernen, wie man ziemlich komplexe CGI-Anwendungen programmiert, so wie ich und andere es vor einigen Jahren gelernt haben.

Der Zweck dieses Kapitels ist es, die Grundlagen von CGI in einer umfassenden, wenn auch prägnanten Form darzustellen. Jedes hier diskutierte Konzept wird in den folgenden Kapiteln detailliert beschrieben. Nach Abschluss dieses Kapitels können Sie jedoch sofort mit der Programmierung von CGI-Anwendungen beginnen. Sobald Sie dieses Niveau erreicht haben, können Sie die Feinheiten von CGI lernen, indem Sie entweder den Rest dieses Buches lesen oder einfach selbst experimentieren.

Sie können die CGI-Programmierung auf zwei Aufgaben reduzieren: Abrufen von Informationen vom Webbrowser und Zurücksenden der Informationen an den Browser. Dies ist sehr intuitiv, wenn Sie die übliche Verwendung von CGI-Anwendungen beherrschen. Oft wird der Benutzer aufgefordert, ein Formular auszufüllen, beispielsweise seinen Namen einzugeben. Sobald der Benutzer das Formular ausfüllt und die Eingabetaste drückt, werden diese Informationen an das CGI-Programm gesendet. Das CGI-Programm muss diese Informationen dann in das übersetzen, was es versteht, sie entsprechend verarbeiten und sie dann an den Browser zurücksenden, sei es eine einfache Bestätigung oder ein Suchergebnis in einer Mehrzweckdatenbank.

Mit anderen Worten, für die CGI-Programmierung müssen Sie verstehen, wie Sie Eingaben vom Internetbrowser erhalten und wie Sie Ausgaben zurücksenden. Was zwischen der Eingabe- und Ausgabestufe eines CGI-Programms geschieht, hängt vom Zweck des Entwicklers ab. Sie werden feststellen, dass die Hauptschwierigkeit bei der CGI-Programmierung in dieser Zwischenstufe liegt. Sobald Sie gelernt haben, mit Input und Output zu arbeiten, reicht es im Wesentlichen aus, CGI-Entwickler zu werden.

In diesem Kapitel lernen Sie die Prinzipien der CGI-Eingabe und -Ausgabe sowie andere grundlegende Fähigkeiten kennen, die zum Schreiben und Verwenden von CGI erforderlich sind, einschließlich der Erstellung von HTML-Formularen und der Benennung Ihrer CGI-Programme. Dieses Kapitel behandelt die folgenden Themen:

  • Traditionelles Programm "Hallo Welt!";
  • CGI-Ausgabe: Senden Sie Informationen zur Anzeige in einem Internetbrowser zurück.
  • Konfigurieren, Installieren und Ausführen der Anwendung. Sie lernen die verschiedenen Plattformen und Server im Web kennen.
  • CGI-Eingabe: Interpretation der vom Webbrowser gesendeten Informationen. Vertrautheit mit einigen nützlichen Programmierbibliotheken zum Parsen solcher Eingaben;
  • Ein einfaches Beispiel: Es behandelt alle Lektionen in diesem Kapitel.
  • Programmierstrategie.

Aufgrund der Art dieses Kapitels gehe ich nur auf einige Themen ein. Keine Sorge; Alle diese Themen werden in anderen Kapiteln viel tiefer behandelt.

Hallo Welt!

Sie beginnen mit einer traditionellen einführenden Programmieraufgabe. Sie werden ein Programm schreiben, das "Hallo Welt!" in Ihrem Webbrowser. Bevor Sie dieses Programm schreiben, müssen Sie wissen, welche Informationen der Webbrowser von CGI-Programmen erwartet. Sie müssen auch wissen, wie dieses Programm ausgeführt wird, um es in Aktion zu sehen.

CGI ist sprachunabhängig, sodass Sie dieses Programm in jeder Sprache implementieren können. Hier werden verschiedene Sprachen verwendet, um die Unabhängigkeit jeder Sprache zu demonstrieren. In Perl die "Hallo Welt!" gezeigt in Listing 2.1.

Listing 2.1. Hallo Welt! in Perl. #! / usr / local / bin / perl # Hello.cgi - Mein erster CGI-Programmdruck "Content-Type: text / html \\ n \\ n"; drucken " \\ n "; drucken" Hallo Welt!"; drucken"\\ n "; drucken" \\ n "; drucken"

Hallo Welt!

\\ n "; drucken" \\ n ";

Speichern Sie dieses Programm als hello.cgi und installieren Sie es an der entsprechenden Stelle. (Wenn Sie sich nicht sicher sind, wo es sich befindet, machen Sie sich keine Sorgen. Weitere Informationen finden Sie im Abschnitt "Installieren und Ausführen eines CGI-Programms" weiter unten in diesem Kapitel.) Für die meisten Server heißt das von Ihnen benötigte Verzeichnis cgi-bin. Rufen Sie nun das Programm über Ihren Webbrowser auf. Für die meisten bedeutet dies, dass der folgende URL (Uniform Resource Locator) geöffnet wird:

http: //hostname/directoryname/hello.cgi

Hostname ist der Name Ihres Webservers, und Verzeichnisname ist das Verzeichnis, in dem Sie hello.cgi (wahrscheinlich cgi-bin) ablegen.

Hallo.cgi teilen

Es gibt ein paar Dinge zu beachten über hello.cgi.

Zunächst verwenden Sie einfache Druckbefehle. CGI-Programme benötigen keine speziellen Dateideskriptoren oder Ausgabedeskriptoren. Um die Ausgabe an den Browser zu senden, drucken Sie einfach auf stdout.

Zweitens beachten Sie bitte, dass der Inhalt der ersten Druckanweisung (Inhaltstyp: Text / HTML) nicht in Ihrem Webbrowser angezeigt wird. Sie können alle gewünschten Informationen an den Browser zurücksenden (HTML-Seite, Grafik oder Sound). Zunächst müssen Sie dem Browser jedoch mitteilen, welche Art von Daten Sie senden. Diese Zeile teilt dem Browser mit, welche Art von Informationen zu erwarten sind - in diesem Fall eine HTML-Seite.

Drittens heißt das Programm hello.cgi. Sie müssen nicht immer die Erweiterung .cgi mit dem Namen Ihres CGI-Programms verwenden. Obwohl der Quellcode für viele Sprachen auch die Erweiterung .cgi verwendet, wird er nicht zur Bezeichnung eines Sprachtyps verwendet, sondern bietet dem Server die Möglichkeit, eine Datei als ausführbare Datei und nicht als Grafikdatei, HTML-Datei oder Textdatei zu identifizieren. Server sind häufig so konfiguriert, dass nur versucht wird, Dateien mit dieser Erweiterung auszuführen, wobei der Inhalt aller anderen angezeigt wird. Die Verwendung der Erweiterung .cgi ist zwar optional, wird jedoch weiterhin als bewährte Methode angesehen.

Im Allgemeinen besteht hello.cgi aus zwei Hauptteilen:

  • teilt dem Browser mit, welche Informationen zu erwarten sind (Inhaltstyp: text / html)
  • teilt dem Browser mit, was angezeigt werden soll (Hallo, Welt!)

Hallo Welt! in C.

Um die Sprachunabhängigkeit von CGI-Programmen zu veranschaulichen, zeigt Listing 2.2 das Äquivalent des in C geschriebenen Programms hello.cgi.

Listing 2.2. Hallo Welt! in C. / * hello.cgi.c - Hallo, World CGI * / #include int main () (printf ("Inhaltstyp: text / html \\ r \\ n \\ r \\ n"); printf (" \\ n "); printf (" Hallo Welt!\\ n "); printf ("\\ n "); printf (" \\ n "); printf ("

Hallo Welt!

\\ n "); printf (" \\ n ");)

Hinweis

Beachten Sie, dass die Perl-Version von hello.cgi den Inhaltstyp print ": text / html \\ n \\ n" verwendet. In der C-Version wird Printf verwendet ("Inhaltstyp: Text / HTML \\ r \\ n \\ r \\ n").

Warum endet Perl eine Anweisung mit zwei Zeilenumbrüchen (\\ n), während C printf mit zwei Zeilenumbrüchen und einem Zeilenumbruch (\\ r \\ n) endet?

Formal sollten Überschriften (alle Ausgaben vor einer Leerzeile) durch einen Wagenrücklauf und ein Zeilenumbruchzeichen getrennt werden. Leider übersetzt Perl auf DOS- und Windows-Computern \\ r als eine andere Zeile und nicht als Wagenrücklauf.

Während die \\ rs-Ausnahme in Perl technisch falsch ist, funktioniert sie in fast allen Protokollen und wird auch auf allen Plattformen übertragen. Daher verwende ich in allen Perl-Beispielen in diesem Buch Zeilenumbrüche, trenne Überschriften, keine Zeilenumbrüche und Zeilenumbrüche.

Eine geeignete Lösung für dieses Problem finden Sie in Kapitel 4, Schlussfolgerung.

Weder der Webserver noch der Browser kümmern sich darum, in welcher Sprache das Programm geschrieben wird. Während jede Sprache als CGI-Programmiersprache Vor- und Nachteile hat, ist es am besten, die Sprache zu verwenden, mit der Sie vertraut sind. (Die Wahl der Programmiersprache wird in Kapitel 1, "Common Gateway Interface (CGI)", näher erläutert.)

CGI-Ableitung

Jetzt können Sie sich das Problem des Sendens von Informationen an den Webbrowser genauer ansehen. Aus dem Beispiel "Hallo Welt!" Können Sie ersehen, dass Webbrowser zwei Datensätze erwarten: einen Header, der Informationen enthält, z. B. welche Informationen angezeigt werden sollen (z. B. Inhaltstyp: Zeile), und tatsächliche Informationen (was in einem Webbrowser angezeigt wird). Diese beiden Informationsblöcke sind durch eine Leerzeile getrennt.

Der Header wird als HTTP-Header bezeichnet. Es enthält wichtige Informationen zu den Informationen, die der Browser erhalten soll. Es gibt verschiedene Arten von HTTP-Headern, und der vielseitigste ist der, den Sie zuvor verwendet haben: Inhaltstyp: Header. Sie können verschiedene Kombinationen von HTTP-Headern verwenden und diese durch Wagenrücklauf- und Zeilenumbruchzeichen (\\ r \\ n) trennen. Die leere Zeile, die den Header von den Daten trennt, besteht ebenfalls aus einem Wagenrücklauf und einer neuen Zeile (warum beide benötigt werden, wird im vorherigen Hinweis und ausführlich in Kapitel 4 beschrieben). Weitere Informationen zu anderen HTTP-Headern finden Sie in Kapitel 4. Sie arbeiten derzeit an der Kopfzeile "Inhaltstyp:".

Inhaltstyp: Der Header beschreibt den Datentyp, den das CGI zurückgibt. Das geeignete Format für diesen Header lautet:

Inhaltstyp: Subtyp / Typ

Wobei Subtyp / Typ der richtige MIME-Typ (Multipurpose Internet Mail Extensions) ist. Der häufigste MIME-Typ ist HTML: text / html. In Tabelle 2.1 sind einige häufigere MIME-Typen aufgeführt, die behandelt werden. Eine vollständigere Auflistung und Analyse der MIME-Typen finden Sie in Kapitel 4.

Hinweis

MIME wurde ursprünglich erfunden, um den Inhalt der E-Mail-Nachrichten zu beschreiben. Es ist eine weit verbreitete Methode geworden, Informationen zum Inhaltstyp darzustellen. Weitere Informationen zu MIME finden Sie in RFC1521. RFCs im Internet stehen für "Requests for Comment" (Anfragen nach Kommentaren). Dies sind Zusammenfassungen von Entscheidungen, die von Gruppen im Internet getroffen wurden, die versuchen, Standards zu setzen. RFC1521-Ergebnisse können unter der folgenden URL angezeigt werden: http://andrew2.andrew.cmu.edu/rfc/rfc1521.html

Tabelle 2.1. Einige gängige MIME-Typen. MIME Typ Beschreibung Text / HTML Hypertext Markup Language (HTML) Text / Nur-Text-Dateien Bild / GIF-Grafikdateien GIF-Bild / JPEG Komprimierte Grafikdateien JPEG-Audio / grundlegende Sun-Audiodateien * .au Audio / x-wav Windows *. wav

Nach der Überschrift und einer Leerzeile drucken Sie die Daten einfach in der gewünschten Form. Wenn Sie HTML senden, drucken Sie HTML-Tags und -Daten nach dem Header in stdout. Sie können auch Grafiken, Sound und andere Binärdateien senden, indem Sie einfach den Inhalt der Datei auf stdout drucken. Einige Beispiele hierfür finden Sie in Kapitel 4.

Installieren und Ausführen eines CGI-Programms

Dieser Abschnitt weicht etwas von der CGI-Programmierung ab und behandelt die Konfiguration Ihres Webservers für die Verwendung von CGI sowie die Installation und Ausführung von Programmen. Sie werden sich mehr oder weniger detailliert mit verschiedenen Servern für verschiedene Plattformen vertraut machen, müssen jedoch Ihre Serverdokumentation genauer studieren, um die beste Option zu finden.

Alle Server benötigen Speicherplatz für Serverdateien und Speicherplatz für HTML-Dokumente. In diesem Buch heißt der Serverbereich ServerRoot und der Dokumentbereich DocumentRoot. Auf UNIX-Computern befindet sich ServerRoot normalerweise in / usr / local / etc / httpd / und DocumentRoot normalerweise in / usr / local / etc / httpd / htdocs /. Dies hat jedoch keinen Einfluss auf Ihr System. Ersetzen Sie daher alle Verweise auf ServerRoot und DocumentRoot durch Ihre eigenen ServerRoot und DocumentRoot.

Wenn Sie mit Ihrem Webbrowser auf Dateien zugreifen, geben Sie die Datei in der URL relativ zu DocumentRoot an. Wenn Ihre Serveradresse beispielsweise mymachine.org lautet, greifen Sie unter der folgenden URL auf diese Datei zu: http://mymachine.org/index.html

Serverkonfiguration für CGI

Die meisten Webserver sind für die Verwendung von CGI-Programmen vorkonfiguriert. Normalerweise teilen zwei Parameter dem Server mit, ob die Datei eine CGI-Anwendung ist oder nicht:

  • Das angegebene Verzeichnis. Auf einigen Servern können Sie angeben, dass alle Dateien in einem bestimmten Verzeichnis (normalerweise standardmäßig cgi-bin genannt) CGI sind.
  • Dateinamenerweiterungen. Viele Server sind vorkonfiguriert, um alle Dateien, die mit .cgi enden, als CGI zu definieren.

Die angegebene Verzeichnismethode ist eine Art Überbleibsel aus der Vergangenheit (sehr frühe Server verwendeten sie als einzige Methode, um festzustellen, welche Dateien CGI-Programme waren), hat jedoch mehrere Vorteile.

  • CGI-Programme werden zentralisiert, sodass andere Verzeichnisse nicht überladen werden.
  • Sie sind nicht auf eine bestimmte Dateinamenerweiterung beschränkt, sodass Sie die Dateien beliebig benennen können. Auf einigen Servern können Sie mehrere verschiedene Verzeichnisse als CGI-Verzeichnisse festlegen.
  • Außerdem haben Sie mehr Kontrolle darüber, wer CGI aufzeichnen kann. Wenn Sie beispielsweise einen Server haben und ein System mit mehreren Benutzern verwalten und nicht möchten, dass diese ihre eigenen CGI-Skripte verwenden, ohne das Programm aus Sicherheitsgründen zuerst zu überarbeiten, können Sie nur diese Dateien in einem begrenzten, zentralisierten Verzeichnis als CGI festlegen. Benutzer müssen Ihnen dann CGI-Programme zur Installation zur Verfügung stellen, und Sie können zuerst den Code überarbeiten, um sicherzustellen, dass das Programm keine größeren Sicherheitsprobleme aufweist.

Die CGI-Notation über die Dateinamenerweiterung kann aufgrund ihrer Flexibilität nützlich sein. Sie sind nicht auf ein einziges Verzeichnis für CGI-Programme beschränkt. Die meisten Server können so konfiguriert werden, dass CGI über die Dateinamenerweiterung erkannt wird, obwohl nicht alle standardmäßig auf diese Weise konfiguriert sind.

Warnung

Beachten Sie die Bedeutung von Sicherheitsaspekten bei der Konfiguration Ihres Servers für CGI. Einige der Tipps werden hier behandelt, und Kapitel 9, "Sichern von CGI", wird diese Aspekte ausführlicher behandeln.

CGI auf UNIX-Servern installieren

Unabhängig davon, wie Ihr UNIX-Server konfiguriert ist, müssen Sie verschiedene Schritte ausführen, um sicherzustellen, dass Ihre CGI-Anwendungen wie erwartet ausgeführt werden. Ihr Webserver wird normalerweise als nicht vorhandener Benutzer ausgeführt (dh der UNIX-Benutzer, niemand ist ein Konto, das keine Berechtigung zum Zugriff auf die Datei hat und nicht registriert werden kann). CGI-Skripte (geschrieben in Perl, der Bourne-Shell oder einer anderen Skriptsprache) müssen weltweit, ausführbar und lesbar sein.

prompt

Verwenden Sie die folgenden UNIX-Befehlsberechtigungen, um Ihre Dateien weltweit lesbar und ausführbar zu machen: chmod 755 der Dateiname.

Wenn Sie eine Skriptsprache wie Perl oder Tcl verwenden, geben Sie den vollständigen Pfad Ihres Interpreters in die erste Zeile Ihres Skripts ein. Beispielsweise muss ein Perl-Skript, das Perl im Verzeichnis / usr / local / bin verwendet, mit der folgenden Zeile beginnen:

#! / usr / local / bin / perl

Warnung

Setzen Sie niemals einen Interpreter ein (Perl oder die Tcl Wish-Binärdatei in / cgi-bin. Dies stellt ein Sicherheitsrisiko für Ihr System dar. Weitere Informationen finden Sie in Kapitel 9).

Einige generische UNIX-Server

NCSA und Apache haben ähnliche Konfigurationsdateien, da Apache ursprünglich auf NCSA-Code basierte. Standardmäßig sind sie so konfiguriert, dass jede Datei im Verzeichnis cgi-bin (standardmäßig in ServerRoot) ein CGI-Programm ist. Um den Speicherort des Verzeichnisses cgi-bin zu ändern, können Sie die Konfigurationsdatei conf / srm.conf bearbeiten. Das Format zum Konfigurieren dieses Verzeichnisses ist

ScriptAlias \u200b\u200bfakedirectoryname realdirectoryname

dabei ist fakedirectoryname der Pseudoname des Verzeichnisses (/ cgi-bin) und realdirectoryname der vollständige Pfad, in dem die CGI-Programme tatsächlich gespeichert sind. Sie können mehr als einen ScriptAlias \u200b\u200bkonfigurieren, indem Sie weitere ScriptAlias-Zeilen hinzufügen.

Die Standardkonfiguration ist für die Anforderungen der meisten Benutzer ausreichend. Sie müssen die Zeile in der Datei srm.conf trotzdem bearbeiten, um den richtigen Realdirectory-Namen zu ermitteln. Wenn sich Ihre CGI-Programme beispielsweise in / usr / local / etc / httpd / cgi-bin befinden, sollte die ScriptAlias-Zeile in Ihrer Datei srm.conf folgendermaßen aussehen:

ScriptAlias \u200b\u200b/ cgi-bin / / usr / local / etc / httpd / cgi-bin /

Für den Zugriff auf oder die Verknüpfung mit CGI-Programmen in diesem Verzeichnis wird die folgende URL verwendet:

HTTP: // Hostname / CGI-Bin / Programmname

Dabei ist Hostname der Hostname Ihres Webservers und Programmname der Name Ihres CGI.

Angenommen, Sie haben das Programm hello.cgi in Ihr Verzeichnis cgi-bin (z. B. / usr / local / etc / httpd / cgi-bin) auf Ihrem Webserver mit dem Namen www.company.com kopiert. Verwenden Sie die folgende URL, um auf Ihr CGI zu verweisen: http://www.company.com/cgi-bin/hello.cgi

Wenn Sie Ihren NCSA- oder Apache-Server so konfigurieren möchten, dass eine CGI-Datei als CGI erkannt wird, müssen Sie zwei Konfigurationsdateien bearbeiten. Lassen Sie zunächst in der Datei srm.conf die folgende Zeile unkommentiert:

AddType-Anwendung / x-httpd-cgi .cgi

Dadurch wird das MIME-CGI an die Erweiterung .cgi gebunden. Jetzt müssen Sie die Datei access.conf so ändern, dass Sie CGI in einem beliebigen Verzeichnis ausführen können. Fügen Sie dazu der Optionszeile die Option ExecCGI hinzu. Es sieht ungefähr so \u200b\u200baus wie in der folgenden Zeile:

Optionsindizes FollowSymLinks ExecCGI

Jetzt wird jede Datei mit der Erweiterung .cgi als CGI betrachtet. Greifen Sie darauf zu, als würden Sie auf jede Datei auf Ihrem Server zugreifen.

Der CERN-Server wird auf die gleiche Weise wie die Apache- und NCSA-Server konfiguriert. Anstelle von ScriptAlias \u200b\u200bverwendet der CERN-Server den Befehl Exec. In der Datei httpd.conf wird beispielsweise die folgende Zeile angezeigt:

Exec / cgi-bin / * / usr / local / etc / httpd / cgi-bin / *

Andere UNIX-Server können auf die gleiche Weise konfiguriert werden. Weitere Informationen finden Sie in der Serverdokumentation.

CGI unter Windows installieren

Die meisten für Windows 3.1, Windows 95 und Windows NT verfügbaren Server sind mit der Dateinamenerweiterungsmethode konfiguriert, um CGIs zu erkennen. Im Allgemeinen müssen Sie zum Ändern der Konfiguration eines Windows-basierten Servers lediglich das Serverkonfigurationsprogramm ausführen und die entsprechenden Änderungen vornehmen.

Manchmal kann es schwierig sein, einen Server so zu konfigurieren, dass ein Skript (z. B. Perl) korrekt ausgeführt wird. Unter DOS oder Windows können Sie in der ersten Zeile eines Skripts keinen Interpreter definieren, wie dies unter UNIX der Fall wäre. Einige Server sind vorkonfiguriert, um dem Interpreter bestimmte Dateinamenerweiterungen zuzuordnen. Beispielsweise gehen viele Windows-Webserver davon aus, dass Dateien, die mit .pl enden, Perl-Skripte sind.

Wenn der Server diese Art der Dateizuordnung nicht ausführt, können Sie eine Wrapper-Batchdatei definieren, die sowohl einen Interpreter als auch ein Skript aufruft. Installieren Sie den Interpreter wie bei einem UNIX-Server nicht im Verzeichnis cgi-bin oder in einem über das Internet zugänglichen Verzeichnis.

CGI auf Macintosh installieren

Die beiden bekanntesten Serveroptionen für Macintosh sind WebStar StarNine und sein Vorgänger MacHTTP. Beide erkennen CGI an der Dateinamenerweiterung.

MacHTTP versteht zwei verschiedene Erweiterungen: .cgi und .acgi, was für Asynchronous CGI steht. Auf dem Macintosh installierte reguläre CGI-Programme (mit der Erweiterung .cgi) halten den Webserver beschäftigt, bis die Ausführung des CGI abgeschlossen ist, und zwingen den Server, alle anderen Anforderungen auszusetzen. Asynchrones CGI hingegen ermöglicht es dem Server, Anforderungen auch während der Ausführung anzunehmen.

Ein Macintosh-CGI-Entwickler, der einen dieser Webserver verwendet, sollte nach Möglichkeit einfach die Erweiterung .acgi anstelle der Erweiterung .cgi verwenden. Es sollte mit den meisten CGI-Programmen funktionieren. Wenn es nicht funktioniert, benennen Sie das Programm in .cgi um.

CGI-Ausführung

Sobald Sie das CGI installiert haben, gibt es verschiedene Möglichkeiten, dies zu erreichen. Wenn Ihr CGI-Programm nur für die Ausgabe wie ein Hello, World! -Programm ist, können Sie es einfach ausführen, indem Sie auf seine URL zugreifen.

Die meisten Programme werden als serverseitige Anwendung für ein HTML-Formular ausgeführt. Bevor Sie lernen, wie Sie Informationen aus diesen Formularen abrufen, lesen Sie zunächst eine kurze Einführung in das Erstellen solcher Formulare.

Schnelles Tutorial zu HTML-Formularen

Die beiden wichtigsten Tags in HTML-Form sind Tags und ... Sie können die meisten HTML-Formulare nur mit diesen beiden Tags erstellen. In diesem Kapitel werden Sie diese Tags und eine kleine Teilmenge der möglichen Typen oder Attribute untersuchen. ... Ein vollständiges Tutorial und einen Link zu HTML-Formularen finden Sie in Kapitel 3, HTML und Formulare.

Etikett

Etikett Wird verwendet, um festzulegen, welcher Teil der HTML-Datei für vom Benutzer eingegebene Informationen verwendet werden soll. Dies bezieht sich darauf, wie die meisten HTML-Seiten das CGI-Programm aufrufen. Die Tag-Attribute definieren den Programmnamen und den Speicherort entweder lokal oder als vollständige URL, die Art der verwendeten Codierung und die Methode zum Verschieben der vom Programm verwendeten Daten.

Die nächste Zeile zeigt die Spezifikationen für das Tag :

< ACTION FORM = "url" METHOD = ENCTYPE = "..." >

Das ENCTYPE-Attribut spielt keine besondere Rolle und ist normalerweise nicht im Tag enthalten ... Details zum ENCTYPE-Tag finden Sie in Kapitel 3. Eine Möglichkeit zur Verwendung von ENCTYPEs finden Sie in Kapitel 14, "Proprietäre Erweiterungen".

Das Attribut ACTION bezieht sich auf die URL des CGI-Programms. Nachdem der Benutzer das Formular ausgefüllt und die Informationen bereitgestellt hat, werden alle Informationen codiert und an das CGI-Programm übertragen. Das CGI-Programm selbst löst die Frage der Dekodierung und Verarbeitung von Informationen. Dieser Aspekt wird unter "Akzeptieren von Eingaben aus dem Browser" weiter unten in diesem Kapitel erläutert.

Schließlich beschreibt das Attribut METHOD, wie das CGI-Programm Eingaben erhalten soll. Die beiden Methoden - GET und POST - unterscheiden sich darin, wie Informationen an das CGI-Programm übergeben werden. Beide werden unter "Akzeptieren von Eingaben aus dem Browser" erläutert.

Alle Formular-Tags und Informationen müssen von einem Tag umgeben sein, damit der Browser vom Benutzer Informationen eingeben kann. ... Vergessen Sie nicht den letzten Tag

um das Ende des Formulars anzugeben. Sie können kein Formular in einem Formular haben, obwohl Sie ein Formular einrichten können, mit dem Sie Informationen an verschiedenen Stellen präsentieren können. Dieser Aspekt wird in Kapitel 3 ausführlich erörtert.

Etikett

Sie können Texteingabeleisten, Optionsfelder, Kontrollkästchen und andere Mittel zum Akzeptieren von Eingaben mithilfe des Tags erstellen ... Dieser Abschnitt behandelt nur Texteingabefelder. Verwenden Sie das Tag, um dieses Feld zu implementieren mit folgenden Attributen:

< INPUT TYPE=text NAME = "... " VALUE = "... " SIZE = MAXLENGTH = >

NAME ist der symbolische Name der Variablen, die den vom Benutzer eingegebenen Wert enthält. Wenn Sie Text in das VALUE-Attribut aufnehmen, wird dieser Text standardmäßig in das Texteingabefeld eingefügt. Mit dem SIZE-Attribut können Sie die horizontale Länge des Eingabefelds so definieren, wie sie im Browserfenster angezeigt wird. Schließlich definiert MAXLENGTH die maximale Anzahl von Zeichen, die der Benutzer in das Feld eingeben kann. Bitte beachten Sie, dass die Attribute VALUE, SIZE, MAXLENGTH optional sind.

Formular einreichen

Wenn Sie nur ein Textfeld in einem Formular haben, kann der Benutzer das Formular senden, indem er einfach Informationen auf der Tastatur eingibt und die Eingabetaste drückt. Andernfalls muss es für den Benutzer eine andere Möglichkeit geben, die Informationen zu präsentieren. Der Benutzer sendet Informationen über eine Schaltfläche, um sie mit dem folgenden Tag zu senden:

< Input type=submit >

Dieses Tag erstellt eine Senden-Schaltfläche in Ihrem Formular. Wenn der Benutzer das Formular vollständig ausgefüllt hat, kann er seinen Inhalt an die URL senden, die im ACTION-Attribut des Formulars angegeben ist, indem er auf die Schaltfläche Senden klickt.

Akzeptieren von Browsereingaben

Die obigen Beispiele waren Beispiele für das Schreiben eines CGI-Programms, das Informationen vom Server an den Browser sendet. In der Realität hat ein CGI-Programm, das nur Daten ausgibt, nicht viele Anwendungen (einige Beispiele finden Sie in Kapitel 4). Die wichtigere Fähigkeit von CGI besteht darin, Informationen aus dem Browser abzurufen - eine Funktion, die das Web interaktiv macht.

Das CGI-Programm empfängt zwei Arten von Informationen vom Browser.

  • Erstens erhält es verschiedene Informationen über den Browser (seinen Typ, was er anzeigen kann, den Host des Hosts usw.), den Server (seinen Namen und seine Version, seinen Ausführungsport usw.) und direkt über das CGI-Programm ( den Namen des Programms und wo es sich befindet). Der Server gibt all diese Informationen über Umgebungsvariablen an das CGI-Programm weiter.
  • Zweitens kann das CGI-Programm vom Benutzer eingegebene Informationen empfangen. Diese Informationen werden nach der Codierung durch den Browser entweder über die Umgebungsvariable (GET-Methode) oder über die Standardeingabe (stdin-POST-Methode) gesendet.

Umgebungsvariablen

Es ist hilfreich zu wissen, welche Umgebungsvariablen dem CGI-Programm sowohl während des Trainings als auch zum Debuggen zur Verfügung stehen. In Tabelle 2.2 sind einige der verfügbaren CGI-Umgebungsvariablen aufgeführt. Sie können auch ein CGI-Programm schreiben, das Umgebungsvariablen und ihre Werte an den Webbrowser ausgibt.

Tabelle 2.2. Einige wichtige CGI-Umgebungsvariablen Umgebungsvariable Zweck REMOTE_ADDR Die IP-Adresse des Clientcomputers. REMOTE_HOST Host-Host des Client-Computers. HTTP _ACCEPT Listet die MIME-Datentypen auf, die der Browser interpretieren kann. HTTP _USER_AGENT Browserinformationen (Browsertyp, Versionsnummer, Betriebssystem usw.). REQUEST_METHOD GET oder POST. CONTENT_LENGTH Die Größe der Eingabe, wenn sie über POST gesendet wird. Wenn keine Eingabe erfolgt oder die GET-Methode verwendet wird, ist dieser Parameter undefiniert. QUERY_STRING Enthält Informationen, die bei Übergabe mit der GET-Methode eingegeben werden müssen. PATH_INFO Ermöglicht dem Benutzer die Angabe des Pfads über die CGI-Befehlszeile (z. B. http: // Hostname / CGI-Bin / Programmname / Pfad). PATH_TRANSLATED Übersetzt den relativen Pfad in PATH_INFO in den tatsächlichen Pfad im System.

Um eine CGI-Anwendung zu schreiben, die Umgebungsvariablen anzeigt, müssen Sie zwei Dinge tun:

  • Definieren Sie alle Umgebungsvariablen und ihre entsprechenden Werte.
  • Ergebnisse für den Browser anzeigen.

Sie wissen bereits, wie die letzte Operation ausgeführt wird. In Perl werden Umgebungsvariablen in einem assoziativen Array% ENV gespeichert, das unter dem Namen der Umgebungsvariablen eingegeben wird. Listing 2.3 enthält env.cgi, ein Perl-Programm, das unseren Zweck erfüllt.

Listing 2.3. Perl-Programm env.cgi, das alle CGI-Umgebungsvariablen druckt.

#! / usr / local / bin / perl print "Inhaltstyp: text / html \\ n \\ n"; drucken " \\ n "; drucken" CGI-Umgebung\\ n "; drucken"\\ n "; drucken" \\ n "; drucken"

CGI-Umgebung

\\ n "; foreach $ env_var (Schlüssel% ENV) (print" $ env_var \u003d $ ENV ($ env_var)
\\ n ";) print" \\ n ";

Ein ähnliches Programm könnte in C geschrieben werden; Der vollständige Code befindet sich in Listing 2.4.

Listing 2.4. Env.cgi.c bis C. / * env.cgi.c * / #include extern char ** environ; int main () (char ** p \u003d environ; printf ("Inhaltstyp: text / html \\ r \\ n \\ r \\ n"); printf (" \\ n "); printf (" CGI-Umgebung\\ n "); printf ("\\ n "); printf (" \\ n "); printf ("

CGI-Umgebung

\\ n "); while (* p! \u003d NULL) printf ("% s
\\ n ", * p ++); printf (" \\ n ");)

ERHALTEN oder POSTEN?

Was ist der Unterschied zwischen GET- und POST-Methoden? GET übergibt die codierte Eingabezeichenfolge über die Umgebungsvariable QUERY_STRING und POST über stdin. POST ist die bevorzugte Methode, insbesondere für Formulare mit einer großen Datenmenge, da die Menge der gesendeten Informationen nicht eingeschränkt ist und mit der GET-Methode der Umfang des Umgebungsspeichers begrenzt ist. GET hat jedoch eine bestimmte nützliche Eigenschaft; Dies wird in Kapitel 5, Eingabe, ausführlich behandelt.

Um festzustellen, welche Methode verwendet wird, untersucht das CGI-Programm die Umgebungsvariable REQUEST_METHOD, die entweder auf GET oder POST gesetzt wird. Bei der Einstellung POST wird die Länge der codierten Informationen in der Umgebungsvariablen CONTENT_LENGTH gespeichert.

Codierter Eingang

Wenn ein Benutzer ein Formular sendet, codiert der Browser die Informationen zuerst, bevor er sie an den Server und dann an die CGI-Anwendung sendet. Wenn Sie das Tag verwenden wird jedem Feld ein symbolischer Name zugewiesen. Der vom Benutzer eingegebene Wert wird als Wert einer Variablen dargestellt.

Um dies festzustellen, verwendet der Browser die URL-Codierungsspezifikation, die wie folgt beschrieben werden kann:

  • Trennt verschiedene Felder mit einem kaufmännischen Und (&).
  • Trennt Name und Werte mit Gleichheitszeichen (\u003d), wobei Name links und Wert rechts sind.
  • Ersetzt Leerzeichen durch Pluszeichen (+).
  • Ersetzt alle "abnormalen" Zeichen durch ein Prozentzeichen (%), gefolgt von einem zweistelligen hexadezimalen Zeichencode.

Ihre endgültige codierte Zeichenfolge sieht folgendermaßen aus:

Name1 \u003d Wert1 & Name2 \u003d Wert2 & Name3 \u003d Wert3 ...

Hinweis: Die Spezifikationen für die URL-Codierung sind in RFC1738 enthalten.

Angenommen, Sie hatten ein Formular, in dem Sie nach Name und Alter gefragt wurden. Der zum Rendern dieses Formulars verwendete HTML-Code ist in Listing 2.5 dargestellt.

Listing 2.5. HTML-Code zur Anzeige des Namens und des Altersformulars.

Name und Alter

Gib deinen Namen ein:

Gebe Dein Alter ein:

Angenommen, der Benutzer gibt Joe Schmoe in das Namensfeld und 20 in das Altersfeld ein. Die Eingabe wird in der Eingabezeichenfolge codiert.

Name \u003d Joe + Schmoe & Alter \u003d 20

Parsing-Eingabe

Damit diese Informationen nützlich sind, müssen Sie die Informationen für etwas verwenden, das von Ihren CGI-Programmen verwendet werden kann. Die Strategien zum Parsen von Eingaben werden in Kapitel 5 behandelt. In der Praxis müssen Sie nie darüber nachdenken, wie Eingaben analysiert werden, da mehrere Experten bereits öffentlich verfügbare Bibliotheken geschrieben haben, die das Parsen durchführen. Zwei solche Bibliotheken werden in diesem Kapitel in den folgenden Abschnitten vorgestellt: cgi -lib.pl für Perl (geschrieben von Steve Brenner) und cgihtml für C (geschrieben von mir).

Der allgemeine Zweck der meisten in verschiedenen Sprachen geschriebenen Bibliotheken besteht darin, die codierte Zeichenfolge zu analysieren und Paare von Namen und Werten in eine Datenstruktur einzufügen. Die Verwendung einer Sprache mit integrierten Datenstrukturen wie Perl bietet einen klaren Vorteil. Die meisten Bibliotheken für untergeordnete Sprachen wie C und C ++ enthalten jedoch Datenstrukturausführung und Unterprogramme.

Es ist nicht notwendig, die Bibliotheken vollständig zu verstehen. Es ist viel wichtiger zu lernen, wie man sie als Werkzeug verwendet, um die Arbeit des CGI-Programmierers zu erleichtern.

Cgi -lib.pl

Cgi -lib.pl verwendet assoziative Perl-Arrays. Die Funktion & ReadParse analysiert die Eingabezeichenfolge und gibt jedes Name / Wert-Paar nach Namen ein. Zum Beispiel wären die entsprechenden Perl-Zeichenfolgen, die zum Dekodieren des gerade dargestellten Namens / Alters der Eingabezeichenfolge erforderlich sind

& ReadParse (* Eingabe);

Um den für "name" eingegebenen Wert anzuzeigen, können Sie auf das assoziative Array $ input ("name") verweisen. Um auf den Wert "age" zuzugreifen, sehen Sie sich ebenfalls die Variable $ input ("age") an.

Cgihtml

C verfügt über keine integrierten Datenstrukturen, daher implementiert cgihtml eine eigene Liste von Bindungen zur Verwendung mit seinen CGI-Parsing-Routinen. Dies definiert die Eintragstypstruktur wie folgt:

Typedef struct (Char * name; Char * value;) Entrytype;

Verwenden Sie Folgendes, um die Eingabezeichenfolge "Name / Alter" in C mit cgihtml zu analysieren:

/ * eine verknüpfte Liste mit dem Namen input deklarieren * / Llist input; / * Eingabe analysieren und in verknüpfte Liste setzen * / read_cgi_input (& input);

Um auf Altersinformationen zuzugreifen, können Sie die Liste entweder manuell analysieren oder die vorhandene Funktion cgi _val () verwenden.

#einschließen #einschließen Char * age \u003d malloc (sizeof (char) * strlen (cgi _val (Eingabe, "age")) + 1); Strcpy (Alter, cgi _val (Eingabe, "Alter"));

Der Wert für "Alter" wird jetzt in der Alterszeile gespeichert.

Hinweis: Anstatt ein einfaches Array (wie char age;) zu verwenden, beschäftige ich mich mit der dynamischen Zuweisung von Speicherplatz für die Alterszeichenfolge. Dies erschwert zwar die Programmierung, ist jedoch aus Sicherheitsgründen wichtig. Dies wird in Kapitel 9 näher erläutert.

Einfaches CGI-Programm

Sie sind dabei, ein CGI-Programm namens nameage.cgi zu schreiben, das das Namens- / Altersformular verarbeitet. Die Datenverarbeitung (was ich normalerweise als "Zwischenmaterial" bezeichne) ist minimal. Nameage.cgi dekodiert nur die Eingabe und zeigt den Benutzernamen und das Alter an. Ein solches Tool ist zwar nicht besonders nützlich, zeigt jedoch den kritischsten Aspekt der CGI-Programmierung: Eingabe und Ausgabe.

Sie verwenden dasselbe Formular wie oben beschrieben, indem Sie die Felder Name und Alter aufrufen. Sorgen Sie sich noch nicht um Robustheit und Effizienz. Lösen Sie das bestehende Problem auf einfachste Weise. Die Perl- und C-Lösungen sind in Listing 2.6 bzw. 2.7 aufgeführt.

Listing 2.6. Nameage.cgi in Perl

#! / usr / local / bin / perl # nameage.cgi erfordert "cgi-lib.pl" & ReadParse (* Eingabe); print "Inhaltstyp: text / html \\ r \\ n \\ r \\ n"; drucken " \\ n "; drucken" Name und Alter\\ n "; drucken"\\ n "; drucken" \\ n "; drucke" Hallo ". $ input (" name ").". Sie sind \\ n "; print $ input (" age ")." Jahre alt.

\\ n "; drucken" \\ n ";

Listing 2.7. nameage.cgi in C.

/ * nameage.cgi.c * / #include #include "cgi-lib.h" int main () (llist input; read_cgi_input (& input); printf ("Inhaltstyp: text / html \\ r \\ n \\ r \\ n"); printf (" \\ n "); printf (" Name und Alter\\ n "); printf ("\\ n "); printf (" \\ n "); printf (" Hallo,% s. Sie sind \\ n ", cgi_val (Eingabe," Name ")); printf ("% s Jahre alt.

\\ n ", cgi_val (Eingabe," Alter ")); printf (" \\ n ");)

Beachten Sie, dass die beiden Programme nahezu gleichwertig sind. Beide enthalten Parsing-Routinen, die nur eine Zeile benötigen und die gesamte Eingabe verarbeiten (dank ihrer jeweiligen Bibliotheksroutinen). Die Ausgabe ist im Wesentlichen eine modifizierte Version Ihres Hauptprogramms Hello, World!.

Versuchen Sie, das Programm auszuführen, indem Sie das Formular ausfüllen und auf die Schaltfläche Senden klicken.

Allgemeine Programmierstrategie

Sie kennen jetzt alle Grundprinzipien, die für die CGI-Programmierung erforderlich sind. Sobald Sie verstanden haben, wie das CGI Informationen empfängt und wie es sie an den Browser zurücksendet, hängt die tatsächliche Qualität Ihres Endprodukts von Ihren allgemeinen Programmierfähigkeiten ab. Beachten Sie beim Programmieren von CGI (oder etwas anderem) die folgenden Eigenschaften:

  • Einfachheit
  • Effizienz
  • Vielseitigkeit

Die ersten beiden Eigenschaften sind ziemlich häufig: Versuchen Sie, Ihren Code so lesbar und effizient wie möglich zu gestalten. Vielseitigkeit gilt mehr für CGI-Programme als für andere Anwendungen. Wenn Sie mit der Entwicklung Ihrer eigenen CGI-Programme beginnen, werden Sie feststellen, dass es mehrere grundlegende Anwendungen gibt, die jeder ausführen möchte. Eine der häufigsten und offensichtlichsten Aufgaben eines CGI-Programms besteht beispielsweise darin, ein Formular zu verarbeiten und die Ergebnisse per E-Mail an einen bestimmten Empfänger zu senden. Sie können mehrere separate verarbeitete Formulare mit jeweils einem anderen Empfänger haben. Anstatt ein CGI-Programm für jedes einzelne Formular zu schreiben, können Sie Zeit sparen, indem Sie ein allgemeineres CGI-Programm schreiben, das für alle Formulare funktioniert.

Nachdem ich alle grundlegenden Aspekte von CGI behandelt habe, habe ich Ihnen genügend Informationen zur Verfügung gestellt, um mit der Programmierung von CGI zu beginnen. Um jedoch ein effektiver CGI-Entwickler zu werden, müssen Sie ein tieferes Verständnis dafür haben, wie CGI mit dem Server und dem Browser kommuniziert. Der Rest dieses Buches behandelt im Detail die Themen, die in diesem Kapitel kurz erwähnt wurden, sowie die Fragen der Anwendungsentwicklungsstrategie, der Vor- und Nachteile des Protokolls.

Zusammenfassung

In diesem Kapitel wurden die Grundlagen der CGI-Programmierung kurz behandelt. Sie erstellen eine Ausgabe, indem Sie Ihre Daten korrekt formatieren und auf stdout drucken. Das Abrufen von CGI-Eingaben ist etwas schwieriger, da diese analysiert werden müssen, bevor sie verwendet werden können. Glücklicherweise gibt es bereits mehrere Bibliotheken, die das Parsen durchführen.

Inzwischen sollten Sie mit der Programmierung von CGI-Anwendungen ziemlich vertraut sein. Der Rest dieses Buches befasst sich ausführlicher mit den Spezifikationen, Tipps und Programmierstrategien für fortgeschrittenere und komplexere Anwendungen.

CGI-Technologie - Common Gateway Interface

CGI - Common Gateway Interface ist ein Standard für die Schnittstelle (Kommunikation) eines externen Anwendungsprogramms mit einem Informationsserver wie HTTP, Webserver. In der Regel enthalten Hypertextdokumente, die von WWW-Servern abgerufen werden, statische Daten. Mit CGI können Sie aufgerufene CGI-Programme erstellen gateways , die in Interaktion mit Anwendungssystemen wie einem Datenbankverwaltungssystem, einer Tabelle, Geschäftsgrafiken usw. dynamische Informationen auf dem Bildschirm des Benutzers anzeigen können.

Das Gateway-Programm wird vom WWW-Server in Echtzeit gestartet. Der WWW-Server stellt die Übertragung der Benutzeranforderung an das Gateway bereit und gibt seinerseits mithilfe der Mittel des Anwendungssystems das Ergebnis der Verarbeitung der Anforderung an den Bildschirm des Benutzers zurück. Das Gateway-Programm kann in C / C ++, Fortran, Perl, TCL, Unix Schell, Visual Basic und Apple Script codiert werden. Als ausführbares Modul wird es in ein Unterverzeichnis mit dem Namen cgi-bin des WWW-Servers geschrieben.

Datenübertragung zu Gateways

Der Server verwendet die Befehlszeilen- und Umgebungsvariablen, um Daten über die Informationsanforderung vom Server an das Gateway zu übertragen. Diese Umgebungsvariablen werden festgelegt, wenn der Server das Gateway-Programm ausführt.

Anfragen für verschiedene Methoden

Informationen werden in folgender Form an Gateways übertragen:

name \u003d value & name1 \u003d value1 & ..,

dabei ist name der Name der Variablen (vom Operator) BILDENzum Beispiel), und die Bedeutung ist seine wahre Bedeutung. Abhängig von der für die Anforderung verwendeten Methode wird diese Zeichenfolge entweder als Teil der URL angezeigt (im Fall der Methode) BEKOMMEN) oder als Inhalt HTTP Anfrage (Methode POST). Im letzteren Fall werden diese Informationen bei Standardeingabe an das Gateway gesendet.

Bei der Standardeingabe wird ein CONTENT_LENGTH-Byte an den Dateideskriptor gesendet. Der Server sendet auch den CONTENT_TYPE (Typ der zu übertragenden Daten) an das Gateway. Der Server muss das Dateiende-Zeichen nicht senden, nachdem er die Datenbytes CONTENT_LENGTH gesendet und vom Gateway gelesen hat.

Beispiel

Nehmen wir als Beispiel das Ergebnis eines Formulars mit der Methode POST (METHOD \u003d "POST"). Lassen Sie die empfangenen 7 Bytes wie folgt codiert:
a \u003d b & b \u003d c.

In diesem Fall setzt der Server CONTENT_LENGTH auf 7 und CONTENT_TYPE auf application / x-www-form-urlencoded. Das erste Zeichen bei der Standardeingabe für das Gateway ist "a", gefolgt vom Rest der codierten Zeichenfolge.

Kommandozeilenargumente

Das Gateway in der Befehlszeile vom Server empfängt:

  • der Rest der URL nach dem Gateway-Namen als erster Parameter (der erste Parameter ist leer, wenn nur der Gateway-Name vorhanden war) und
  • eine Liste von Schlüsselwörtern als Rest der Befehlszeile für das Suchskript oder
  • abwechselnde Namen von Formularfeldern mit einem zusätzlichen Gleichheitszeichen (an geraden Positionen) und entsprechenden Variablenwerten (an ungeraden Positionen).

Schlüsselwörter, Formularfeldnamen und Werte werden dekodiert (aus dem HTTP-URL-Codierungsformat) übergeben und gemäß den Bourne-Shell-Codierungsregeln neu codiert, sodass das Gateway in der Befehlszeile die Informationen unverändert erhält, ohne dass zusätzliche Konvertierungen erforderlich sind.

FORM-Anweisungsabfragen

FORM-Anweisungen werden so verarbeitet, dass jeder für einen Feldnamen verantwortliche Parameter mit einem Gleichheitszeichen endet und der Rest der Wert dieses Parameters ist. Wenn nach dem Namen des Skripts (Gateway) etwas vorhanden ist, werden diese Informationen als erster Parameter übergeben. Andernfalls ist der erste Parameter leer.

Beispiele:

/ htbin / foo / x / y / z? name1 \u003d value1 & name2 \u003d value2 heißt: /.../foo / x / y / z name1 \u003d value1 name2 \u003d value2 und / htbin / foo? name1 \u003d value1 & name2 \u003d value2 heißt : /.../foo "" name1 \u003d value1 name2 \u003d value2

CGI-Umgebungsvariablen

Die folgenden Umgebungsvariablen sind nicht anfragetypspezifisch und werden für alle Anforderungen festgelegt.

SERVER_SOFTWARE Der Name und die Version des Informationsservers, der auf die Anforderung reagiert (und das Gateway startet). Format: Name / Version SERVER_NAME Name des Hosts, auf dem der Server ausgeführt wird, DNS-Name oder IP-Adresse, wie in der URL angegeben. GATEWAY_INTERFACE Die Version der CGI-Spezifikation zum Zeitpunkt der Kompilierung des Servers. Format: CGI / Version

Die folgenden Umgebungsvariablen sind für verschiedene Anforderungen spezifisch und werden vor dem Aufruf des Gateways ausgefüllt: SERVER_PROTOCOL Der Name und die Version des Informationsprotokolls, in dem die Anforderung eingegangen ist. Format: Protokoll / Version SERVER_PORT Portnummer, an die die Anforderung gesendet wurde REQUEST_METHOD Die Methode, die für die Anforderung verwendet wurde. Für HTTP ist es BEKOMMEN, KOPF, POST, usw. PATH_INFO Zusätzliche Pfadinformationen, die vom Client bereitgestellt werden. Mit anderen Worten, auf das Gateway kann über einen virtuellen Pfad gefolgt von einigen zusätzlichen Informationen zugegriffen werden. Diese Informationen werden an PATH_INFO übergeben. PATH_TRANSLATED Der Server übergibt die transformierte Version von PATH_INFO, die den zugeordneten Pfad von virtuell zu physisch enthält. SCRIPT_NAME Der virtuelle Pfad zum auszuführenden Gateway, über den die URL abgerufen wird. QUERY_STRING Folgende Informationen? in der URL, zu der dieses Gateway gehört. Diese Information ist eine Abfragezeichenfolge. Es muss in keiner Weise dekodiert werden. Unabhängig von der Befehlszeile sollte diese Variable immer festgelegt werden, wenn diese Informationen verfügbar sind. REMOTE_HOST Der Name des Hosts, der die Anforderung stellt. Wenn der Server nicht über diese Informationen verfügt, sollte er REMOTE_ADDR festlegen und dieses Feld deaktivieren. REMOTE_ADDR IP-Adresse des Hosts, der die Anforderung stellt. AUTH_TYPE Wenn der Server die Benutzerauthentifizierung unterstützt und das Gateway manipulationssicher ist, wird diese protokollspezifische Authentifizierungsmethode zur Authentifizierung des Benutzers verwendet. REMOTE_USER Wird in Situationen wie der vorherigen zum Speichern des Benutzernamens verwendet. REMOTE_IDENT Wenn der HTTP-Server die RFC 931-Benutzerauthentifizierung unterstützt, enthält diese Variable den vom Server erhaltenen Benutzernamen. CONTENT_TYPE Bei Anforderungen, die zusätzliche zusätzliche Informationen enthalten, wie z. B. HTTP POST und PUT, enthalten diese Informationen den Datentyp dieser Informationen. CONTENT_LENGTH Die Länge der Daten, die der Client überträgt.

Wenn die Anforderung zusätzliche Anforderungsheaderfelder enthält, werden diese in Umgebungsvariablen mit dem Präfix HTTP_ gefolgt vom Headernamen platziert. Alle "-" Zeichen im Titel werden in Unterstriche "_" geändert. Der Server kann alle Header ausschließen, die er bereits verarbeitet hat, z. B. Autorisierung, Inhaltstyp und Inhaltslänge. Falls erforderlich, kann der Server einige (oder alle) zusätzlichen Headerfelder ausschließen, falls deren Einbeziehung die Größenbeschränkung von Umgebungsvariablen überschreiten würde. Ein Beispiel für eine solche Variable ist die Variable HTTP_ACCEPT, die in der CGI / 1.0-Spezifikation definiert wurde. Ein weiteres Beispiel ist der User-Agent-Header.

HTTP_ACCEPT Eine Liste von MIME-Typen, die der Client wie in den HTTP-Headern angegeben verarbeiten kann. Andere Protokolle sollten diese Informationen von anderen Orten erhalten (falls sie benötigt werden). Jeder Typ in dieser Liste muss gemäß der HTTP-Spezifikation durch Kommas getrennt sein. Format: Typ / Subtyp, Typ / Subtyp HTTP_USER_AGENT Der Viewer, mit dem der Client eine Anforderung sendet. Allgemeines Format: Programm / Versionsbibliothek / Version.

Vom Gateway ausgegebene Informationen

Grundlegendes Konzept

Das Gateway schreibt seine Ausgabe in die Standardausgabe. Diese Ausgabe kann entweder ein vom Gateway generiertes Dokument oder Anweisungen an den Server sein, wo das erforderliche Dokument abgerufen werden soll.

In der Regel erzeugt das Gateway eine eigene Ausgabe, die interpretiert und an den Client zurückgesendet wird. Der Vorteil dieses Ansatzes besteht darin, dass das Gateway nicht bei jeder Anforderung den vollständigen HTTP / 1.0-Header senden muss.

Ausgabestream-Header

Bei einigen Gateways kann es erforderlich sein, die Verarbeitung ihrer Ausgabe durch den Server zu vermeiden und direkt mit dem Client zu kommunizieren. Um solche Gateways von anderen zu unterscheiden, muss CGI deren Namen mit dem Präfix nph beginnen. In diesem Fall liegt es in der Verantwortung des Gateways, eine syntaktisch korrekte Antwort an den Client zurückzugeben.

Analysierte Header

Die Gateway-Ausgabe beginnt mit einem kleinen Titel. Es enthält Textzeichenfolgen im gleichen Format wie im HTTP-Header und wird durch eine leere Zeichenfolge abgeschlossen (die nur den Zeilenvorschub oder CR / LF enthält).

Alle Kopfzeilen, die keine Serveranweisungen sind, werden direkt an den Client gesendet. Derzeit definiert die CGI-Spezifikation drei Serveranweisungen: Inhaltstyp MIME-Typ des zurückgegebenen Dokuments. Speicherort Dieses Feld wird verwendet, wenn dem Server angezeigt werden muss, dass nicht das Dokument selbst zurückgegeben wird, sondern ein Link dazu.

Wenn das Argument eine URL ist, sendet der Server eine Anzeige an den Client, um die Anforderung umzuleiten. Wenn das Argument ein virtueller Pfad ist, gibt der Server das durch diesen Pfad angegebene Dokument an den Client zurück, als würde der Client es direkt anfordern.

  • Status

Diese Anweisung wird verwendet, um dem HTTP / 1.0-Server eine Statuszeichenfolge festzulegen, die an den Client gesendet werden soll. Das Format ist nnn xxxxx, wobei nnn ein dreistelliger Statuscode und xxxxx eine Grundzeichenfolge wie "Verboten" ist.

Beispiele von

Angenommen, Sie haben einen Text-zu-HTML-Konverter. Wenn es seine Arbeit beendet hat, sollte es die folgende Ausgabe zur Standardausgabe erzeugen:

Beginn der Ausgabe - Inhaltstyp: text / html - Ende der Ausgabe - Betrachten wir nun das Gateway, das in einigen Fällen das Dokument /path/doc.txt von diesem Server ausgeben sollte, als ob es direkt vom Client über http: // angefordert würde Server: Port / Pfad / doc.txt. In diesem Fall lautet die Ausgabe des Gateways wie folgt: - Beginn der Ausgabe - Speicherort: /path/doc.txt - Ende der Ausgabe - Angenommen, das Gateway gibt Links zum Gopher-Server zurück, z. B. zu gopher: //gopher.ncsa.uiuc.edu/ ... Die Gateway-Ausgabe lautet wie folgt: - Beginn der Ausgabe - Speicherort: gopher: //gopher.ncsa.uiuc.edu/ - Ende der Ausgabe - Nicht analysierte Header

Nehmen wir nun an, wir haben ein Gateway, das direkt mit dem Client kommuniziert. Wie bereits erwähnt, muss sein Name mit nph- beginnen und einen gültigen HTTP-Header zurückgeben. In diesem Fall sollte die Ausgabe des Gateways HTTP / 1.0-kompatibel sein, wenn auf das Gateway mit einem SERVER_PROTOCOL-Wert von HTTP / 1.0 zugegriffen wurde:

Beginn der Ausgabe - HTTP / 1.0 200 OK Server: NCSA / 1.0a6 Inhaltstyp: Text / Plain - Ende der Ausgabe -


Teil 6. World Wide Web

WWW (World Wide Web - World Wide Web) ist der beliebteste Dienst im Internet. Er war es, der aufgrund seiner relativen Einfachheit und Klarheit für die Benutzer die Ressourcen des Webs so massiv anrief. Was ist WWW und wie funktioniert dieser Service?

Im Allgemeinen ist das WWW ein Webserversystem, das speziell formatierte Dokumente unterstützt. Der WWW-Dienst ist als Client-Server-Architektur implementiert. Der Benutzer fordert mit einem Client-Programm (Browser) die eine oder andere Information auf dem Server an, und der Webserver bedient die Anfrage des Browsers. Ein Browser ist ein Programm, das über seine URL (universelle Ressourcenadresse) Zugriff auf die erforderliche Ressource auf dem Server bietet, das Ergebnis interpretiert und auf dem Clientcomputer demonstriert (Abb. 1).

Der Server und der Client werden normalerweise auf verschiedenen Computern und möglicherweise auf verschiedenen Hardwareplattformen und verschiedenen Betriebssystemen ausgeführt.

Das Protokoll, mit dem ein Webserver ein Dokument an einen Webbrowser übermittelt, wird als HTTP (Hypertext Transfer Protocol) bezeichnet. Um den Mechanismus zum Anzeigen von Dokumenten auf einem Webserver genauer zu erläutern, müssen mehrere Konzepte und vor allem das Konzept des Hypertexts eingeführt werden.

Hypertext

hypertext ist ein Text, der Hyperlinks enthält, die Wörter oder Bilder eines Dokuments mit einer anderen Ressource (mit einem anderen Dokument oder mit einem anderen Abschnitt desselben Dokuments) verknüpfen, während solche "zugeordneten" Wörter oder Bilder des Dokuments normalerweise hervorgehoben werden , normalerweise mit einem Unterstrich. Der Benutzer kann diesen Link mit einem Mausklick aktivieren. In den meisten Fällen führt das Aktivieren eines Links auf diese Weise dazu, dass die auf diese Weise aufgerufene Ressource das aktuelle Dokument überschreibt. Sie können mit einem Hyperlink nicht nur ein Wort, sondern auch einen ganzen Abschnitt des Dokuments und sogar einen Bereich eines bestimmten Formulars auf einem beliebigen Bild des Dokuments verknüpfen.

Einige Autoren definieren ein Hypertext-Dokument als ein Dokument, das ein Menü zum Navigieren zu anderen Ressourcen enthält. Die Idee der Hypertext-Organisation eines Dokuments kann mit Nachschlagewerken veranschaulicht werden. Wenn wir normalerweise ein Fiction-Buch von Anfang bis Ende (linear) lesen, dann lesen wir Referenzliteratur meistens nicht linear: Wenn wir beispielsweise auf ein unbekanntes Wort stoßen, suchen wir es im Anhang oder im erklärenden Wörterbuch, kehren wir dann zu dem Text zurück, den wir begonnen haben, und so weiter. Mit anderen Worten, wir verweisen nach Bedarf auf die verschiedenen Abschnitte des Handbuchs.

Im Prinzip entstand die Idee des nichtlinearen Lesens von Text lange vor dem Aufkommen der Computer. Es ist zum Beispiel bekannt, dass bei der Interpretation des Buches der Psalmen durch Gilbert von Porretan (um 1150 n. Chr.) Spezielle Randnotizen verwendet wurden, die den Leser zu den Seiten an anderen Stellen des Buches schickten.

Die praktische Anwendung der Idee und des Begriffs "Hypertext" selbst erschien mit dem Aufkommen elektronischer Dokumente, wenn auch viel früher als der WWW-Dienst selbst. Der Begriff "Hypertext" wurde erstmals 1965 von Ted Nelson verwendet. Apple hat einen wesentlichen Beitrag zur Entwicklung von Hypertextsystemen geleistet.

Da moderne elektronische Dokumente nicht nur Text, sondern auch multimediale Informationen (Text, Grafiken, Ton) enthalten, wurden nicht nur Text, sondern auch grafische Objekte als Links verwendet. Im Laufe der Zeit wurde das Konzept des Hypertexts auf das Konzept der Hypermedia erweitert. Hypermedia ist eine Methode zum Organisieren von Multimedia-Informationen basierend auf Links zu verschiedenen Datentypen. Hypermedia-Dokumente werden nicht nur im WWW verwendet. Ein typisches Beispiel für Hypermedia sind Multimedia-Informationen, die in einer elektronischen Enzyklopädie enthalten sind. Wenn Sie beispielsweise den Text über Singvögel in der CD-ROM-Enzyklopädie lesen, können Sie auf den entsprechenden Link gehen, den Gesang des ausgewählten Vogels anhören und dann eine Videoaufzeichnung seines Fluges ansehen.

Die Idee des Hypertexts hat sich als besonders produktiv erwiesen, wenn es darum geht, digitale Informationen zu kombinieren, die auf Servern auf der ganzen Welt verteilt sind. Hier kommen wir direkt zum Konzept des World Wide Web.

Das Internet

WW ist ein internetbasiertes globales Hypertextsystem. Das WWW ist der Mechanismus, mit dem Informationen über zahlreiche Webserver auf der ganzen Welt verknüpft werden. Ein Webserver ist ein Programm, das "weiß", wie man http-Anforderungen empfängt und bestimmte Aktionen als Antwort auf diese Anforderungen ausführt, z. B. das Starten von Anwendungen und das Generieren von Dokumenten.

Ein Dokument, auf das über das Web zugegriffen werden kann, wird als Webseite bezeichnet, und Gruppen von Seiten, die ein gemeinsames Thema und eine gemeinsame Navigation haben, werden als Websites oder Websites bezeichnet. Ein einzelner Hardware-Webserver kann mehrere Websites hosten. Das Gegenteil ist jedoch auch möglich, wenn eine große Website von einer Gruppe von Webservern (Computern) unterstützt werden kann.

Um die Idee der Organisation des World Wide Web besser zu verstehen, wenden wir uns Abb. 2 zeigt ein Beispiel für die Verwendung des WWW zum Suchen von Nachrichteninformationen. Angenommen, ein in den USA lebender Benutzer muss die neuesten Nachrichten aus Moskau kennen und kennt nicht die Adresse des Servers, auf dem diese Informationen zu finden sind. Es ist wahrscheinlich, dass er, um die erforderlichen Daten zu erhalten, eine ihm bekannte Website eingibt, die sich physisch auf einem Computer in den USA befindet und dem Thema "Nachrichten aus der Welt" gewidmet ist. Offensichtlich können lokale Nachrichtendaten aus allen Teilen der Welt nicht auf einem Server gespeichert werden. Gleichzeitig ist es möglich, dass die wichtigsten Nachrichten von weltweiter Bedeutung auf dem Server Links zu Nachrichtenseiten enthalten, die für verschiedene Regionen relevant sind. Es ist wahrscheinlich, dass der Benutzer durch Auswahl des Links "Europa" mit einem anderen Computer in Europa verbunden wird (Abb. 2). Angenommen, auf einer Seite einer europäischen Website befindet sich ein Link zu Russland. Über den Link "Russland" können Sie eine Verbindung zu einem Server in Russland herstellen. Wahrscheinlich erhält der Benutzer über den Link "Moskau" auf dieser Website die erforderlichen Informationen und stellt möglicherweise eine Verbindung zum vierten Server her, der die benötigten Informationen bereitstellt. Durch Angabe und Detaillierung von Informationen erhalten Sie Nachrichten zu einem bestimmten Bereich. Es ist wichtig zu beachten, dass der Benutzer in dem in der Abbildung gezeigten Beispiel Anforderungen an verschiedene Server stellt und beim Wechsel von einem Server zu einem anderen nicht jedes Mal die Adressen der Server festlegen muss, um zu wissen, wo sie sich physisch befinden. In diesem Fall heißt es, dass die Prozedur für den Benutzer transparent ist, dh der Benutzer nimmt den gesamten Prozess so wahr, als ob alle Seiten, die er erhalten hat, auf seinem eigenen Computer wären. Somit kann der Prozess des Anzeigens von Informationen mit dem Blättern durch die Seiten eines riesigen Buches auf einem Desktop nach dem Prinzip des "Click-to-Get" verglichen werden. Das Bewegen von Dokumenten mithilfe von Hypertext-Links wird üblicherweise als Navigation oder Surfen bezeichnet.

Die Tatsache, dass für das Surfen keine Kenntnis des Speicherorts der erforderlichen Dokumente erforderlich ist, ist genau der Hauptkomfort und Grund für die Beliebtheit des WWW-Dienstes.

Browser

wie bereits erwähnt, haben Browser zwei Hauptfunktionen: Informationen vom Webserver anfordern und auf dem Clientcomputer anzeigen. Darüber hinaus verfügen Browser über zusätzliche Servicefunktionen, z. B. die Vereinfachung der Suche, das Speichern von Lesezeichen, die auf Lieblingsseiten verweisen usw.

In vielerlei Hinsicht wurde die Entwicklung von Browsern durch den Wettbewerb zwischen zwei Entwicklungsunternehmen bestimmt - Netscape und Microsoft.

Mitte der neunziger Jahre eroberte Netscape mit seinem Produkt Netscape Navigator einen großen Marktanteil, und Microsoft begann, seinen Internet Explorer aktiv zu bewerben. Die Geschichte der Konfrontation zwischen diesen beiden Programmen wurde als Browserkrieg bezeichnet, der sich tatsächlich auf die Entstehung neuer Funktionen für sie beschränkte. Durch die Integration von Internet Explorer in das Windows-Betriebssystem und das Angebot des Browsers als kostenloses Programm hat Microsoft diesen Krieg gewonnen. Infolgedessen ist der Browsermarkt ziemlich spezifisch geworden: Heute werden die beliebtesten Programme Internet Explorer und Netscape Navigator kostenlos verteilt, während einige alternative und viel weniger verbreitete Programme bezahlt werden.

Allmählich sind Browser von Geräten zum Anzeigen von HTTP-Dokumenten zu universellen Internet-Clients geworden. Wir werden detaillierter auf die Funktionsweise von Browsern eingehen, nachdem wir über die Struktur einer Webseite gesprochen haben.

Website

die Popularität des WWW beruht auf der Tatsache, dass Sie nicht nur die Seiten anderer Personen anzeigen und auf eine große Menge an Informationen zugreifen können, die auf Hunderten von Millionen Computern angezeigt werden, sondern auch Ihre eigenen Ressourcen erstellen und so alle Informationen an alle zukünftigen Website-Besucher weitergeben können. Mit anderen Worten, das WWW ist ein globaler Mechanismus für den Informationsaustausch: Einige Leute stellen Informationen auf Webserver, während andere sie anzeigen. Nachdem der Eigentümer eine Website erstellt hat, kann er dort verschiedene Arten von Informationen einfügen: Text, Grafiken, Sound, Animation, die allen Besuchern dieser Ressource zur Verfügung stehen. Mit dem Aufkommen Ihrer Seite im Web werden Informationen über Sie oder Ihr Unternehmen sieben Tage die Woche rund um die Uhr für Hunderte Millionen Benutzer verfügbar sein. Die Menge an Informationen, die dem Besucher zur Verfügung gestellt werden kann, ist im Gegensatz zu Radio oder Fernsehen praktisch zeitlich unbegrenzt. Damit Ihre Website am häufigsten besucht wird, müssen Sie einen schnellen Zugriff darauf gewähren. Wenn Sie versuchen, eine Website auf Ihrem Heimcomputer mit einem normalen Modem und einer Telefonleitung zu erstellen, die mit dem Internet verbunden sind, können Sie nicht schnell darauf zugreifen und werden potenzielle Besucher wahrscheinlich abschrecken. Die Erfahrung hat gezeigt, dass die lästigste Seitenlast für Besucher darin besteht, dass der Server, auf dem Sie Ihre Site hosten möchten, über eine Hochgeschwindigkeits-Internetverbindung verfügen muss.

Um den richtigen Zugriff auf Ihre Ressource zu gewährleisten, ist es ratsam, die Dienste eines sogenannten Hosting-Anbieters zu nutzen. Hosting (vom englischen Host - dem Eigentümer) ist die Bereitstellung eines qualitativ hochwertigen Dienstes zum Hosten einer Website auf dem physischen Webserver des Anbieters oder auf seinem eigenen Server auf der Website des Anbieters. In der Regel erhebt der Hosting-Anbieter eine Gebühr, die umso höher ist, je größer der gemietete Speicherplatz und die Verkehrsintensität sind. Es gibt jedoch auch kostenlose Hosting-Dienste. Wenn Sie einen Domainnamen der dritten Ebene erhalten möchten (z. B. www.ivanov.narod.ru: (Domainname der ersten Ebene - ru, Domainname der zweiten Ebene - narod, Domainname der dritten Ebene - ivanov), ist dieser höchstwahrscheinlich kostenlos Domain-Namen der dritten Ebene werden von vielen Unternehmen bereitgestellt, die kostenloses „öffentliches“ Hosting anbieten. Beispielsweise wird der Name www.Ihr-Name.narod.ru (wobei Ihr Name der Name ist, den Sie Ihrer Ressource geben können) von Yandex bereitgestellt. eine Domain der zweiten Ebene haben - ein Name wie "your_surname.ru" oder "your_company.ru" ist am besten. In diesem Fall müssen Sie mindestens bezahlen, um Ihren Domainnamen zu registrieren. Wenn Sie jedoch einen solchen Namen haben, können Ihre Kollegen Sie sogar im Internet finden Sie kennen den genauen Namen Ihrer Site nicht. Beispielsweise kann eine Site einfach anhand des Namens des Magazins gefunden werden. Es sollte jedoch beachtet werden, dass es heutzutage ziemlich schwierig ist, eine nicht belegte Domain zu finden.

Wenn Sie eine kleine Amateur-Site erstellen, werden Sie höchstwahrscheinlich mit einem Domain-Namen der dritten Ebene zufrieden sein und es wird keine Probleme mit dem kostenlosen Hosting geben. Die Hauptprobleme werden während seiner Entwicklung auftreten.

Es macht keinen Sinn, über das Erstellen eigener Seiten zu sprechen, bis wir uns deren Struktur angesehen haben. Im Folgenden erfahren Sie daher, woraus Webseiten bestehen. Zunächst werden die Grundlagen der Hypertext Markup Language (HTML) erläutert, mit der Hypertext-Dokumente erstellt werden.

Html

In früheren Veröffentlichungen dieses Zyklus haben wir bereits festgestellt, dass eine große Anzahl von Computern mit unterschiedlichen Architekturen und unterschiedlichen Funktionen zum Anzeigen von Informationen mit dem Internet verbunden sind. Die Aufgabe, Seiten für jeden Gerätetyp zu entwerfen, ist nahezu unmöglich. Angesichts der Tatsache, dass ein Dokument Millionen von Computern zur Verfügung stehen wird, ist es unmöglich, im Voraus zu bestimmen, welche Art von Ausrüstung abgespielt wird. Wenn es sich um ein Textdokument handelt, kann es nicht nur auf verschiedenen Bildschirmtypen angezeigt, sondern beispielsweise von einem Sprachsyntheseprogramm reproduziert werden. In diesem Fall muss das Funktionsmarkup des Dokuments unabhängig von der Ausgabemethode gelesen werden.

Anstatt anzugeben, wie das Dokument auf einem bestimmten Gerät angezeigt werden soll, haben die Entwickler einen anderen Pfad gewählt: Sie schlugen vor, eine spezielle funktionale Auszeichnungssprache zu verwenden - HTML. Ein HTML-Dokument besteht aus dem eigentlichen Text und dem Markup, das alle Einträge enthält, die nicht den Inhalt des Dokuments enthalten. Mit HTML-Markup können Sie Links zu externen Dokumenten oder zu internen Abschnitten desselben Dokuments definieren und Informationen zur Formatierung des Dokuments bereitstellen.

Um die Idee der Organisation eines HTML-Dokuments zu verdeutlichen, ist es angebracht, eine Analogie zur Arbeit eines technischen Editors zu ziehen, der Text für den Satz vorbereitet. Der Editor erstellt das Markup des Textes und merkt sich, wie das Format aussehen soll, wie Überschriften eingegeben werden sollen und wo was platziert werden soll. Zum Beispiel können es Notizen sein wie: "Drucken Sie diesen Absatz in Fettdruck, markieren Sie den einen oder anderen Satz in Rot und fügen Sie nach diesem und jenem Absatz den Text von der einen oder anderen Seite ein." Damit die Kommentare des Editors korrekt gelesen werden können, gibt es spezielle Markup-Regeln. Der Layout-Designer liest die Kommentare des technischen Editors und tippt den Text entsprechend ein.

Ähnliche Kommentare werden in das HTML-Dokument geschrieben und dann vom Browser gelesen, damit er "weiß", wie die Daten auf dem Computerbildschirm angezeigt werden. HTML wurde Ende der 1980er Jahre am physikalischen Labor CERN (Schweiz) entwickelt und zunächst im lokalen Netzwerk des Labors verwendet. Es gewann jedoch bald an Popularität und wurde im Internet weit verbreitet.

Es ist zu beachten, dass das funktionale Markup breiter ist als die Formatierung von Dokumenten. Mit dem Hypertext-Markup können Sie beispielsweise feststellen, ob dieser oder jener Text im Dokument der Titel der Seite (Titel) ist. Dies ist natürlich keine Formatierung mehr, sondern die Definition der Funktionalität eines bestimmten Teils des Dokuments.

HTML beschreibt nur die allgemeinsten Anweisungen zum Präsentieren von Informationen, die von verschiedenen Browsern auf verschiedenen Plattformen interpretiert werden können. Gleichzeitig wird zunächst davon ausgegangen, dass es unmöglich ist, dass alle Kunden die absolute Genauigkeit der Reproduktion des Originaldokuments erreichen.

Dies bedeutet, dass eine Seite, die mit demselben HTML-Code beschrieben wird, auf zwei Computern mit unterschiedlichen Plattformen, Überwachungsmodi und Browsern möglicherweise unterschiedlich angezeigt wird. Man kann sagen, dass der Browser das Dokument basierend auf einer Reihe von Anweisungen in HTML und der Fähigkeit, Informationen auf einem bestimmten Computer anzuzeigen, formatiert.

Wenn Ihr Computer beispielsweise keine Schriftart hat, die für die Anzeige dieser oder jener Inschrift vorgeschrieben ist, wird eine andere verwendet, die dem verfügbaren Satz am nächsten kommt.

Darüber hinaus können Benutzer die Browsereinstellungen so ändern, dass das Dokument für sie optimal angezeigt wird.

In Ihren Browsereinstellungen können Sie beispielsweise Regeln für die Auswahl einer Farbe für die Anzeige des Hintergrunds eines Dokuments festlegen, in der festgelegt wird, welche Farbe die Schriftart auf einer Webseite haben soll und in welcher Farbe Text-Hyperlinks hervorgehoben werden sollen.

HTML-Befehle (oder Kontrollmarkierungen eines Hypertext-Dokuments) werden als Tags bezeichnet (vom englischen Tag - Verknüpfung, Markierung). Sie werden direkt in den Text des Dokuments eingefügt und in spitze Klammern eingeschlossen<...>.

Ein einheitlicher Satz vordefinierter Tags ermöglicht die browserübergreifende Verwendung. Trotz der Tatsache, dass HTML zum Präsentieren von Webseiten verwendet wird, kann es auch für andere Zwecke verwendet werden, z. B. zum Präsentieren von Dokumenten auf CD-ROM.

Der Hauptvorteil von HTML ist seine Einfachheit. Für die Erstellung von HTML-Dokumenten sind keine Programmiersprachenkenntnisse erforderlich. Sie können einem Dokument Markup-Tags hinzufügen, indem Sie einen normalen Texteditor oder spezielle HTML-Editoren verwenden, die über spezielle Steuerelemente verfügen, um die Eingabe von Tags zu vereinfachen.

Das Vorhandensein visueller Entwicklungstools für Webseiten ermöglicht es Ihnen, HTML-Dokumente zu erstellen, ohne sich an den Zweck bestimmter Tags zu erinnern. Visuelle Entwicklung ist ein Prozess, bei dem ein Benutzer mit Objekten arbeitet, die bei der Entwicklung fast so aussehen wie bei der Anzeige durch einen Browser, und HTML-Code wird automatisch generiert.

Es gibt über hundert Tags zum Markieren von Informationen auf einer Webseite. Die meisten Tags werden paarweise verwendet. Das Öffnen und Schließen von Tags beginnt und endet mit< и >... Das schließende Tag unterscheidet sich vom öffnenden Tag durch das Vorhandensein eines / (Schrägstrich-) Zeichens vor dem Schlüsselwort. Zum Beispiel ein paar Tags (siehe Tabelle) wird verwendet, um dem Browser mitzuteilen, dass der zwischen den Tags platzierte Text fett und die Tags angezeigt werden sollen Geben Sie an, dass bei der Anzeige von Text Kursivschrift verwendet werden soll. Die öffnenden und schließenden Tags wirken sich auf den Teil des Dokuments zwischen ihnen aus. Die Anordnung der gepaarten Tags wird so durchgeführt, dass Verschachtelungsregeln eingehalten werden.

Neben gepaarten Tags gibt es ungepaarte Tags, die einen einmaligen Effekt an einer bestimmten Stelle definieren oder das gesamte Dokument betreffen. Zum Beispiel das Tag
wird häufig verwendet, um die Notwendigkeit eines Zeilenumbruchs anzuzeigen.

Der Effekt eines Tags kann durch Hinzufügen von Attributen geändert werden. Das Attribut (vom lateinischen Attribut - angehängt) zeigt das Attribut des Objekts, das seinen Status bestimmt. Für einige Attribute muss ein Attributwert angegeben werden, der durch ein Gleichheitszeichen vom Attributschlüsselwort getrennt und in Anführungszeichen gesetzt wird.

Das Textzuweisungs-Tag (in der dritten Zeile der Tabelle angezeigt) ist ein Beispiel für ein Tag mit einem Attribut.

Eines der wichtigsten ist das Tag, das die Hyperlinks definiert. Beim Definieren eines Hyperlinks muss das Element der Webseite zugeordnet werden, auf das die Adresse dieses Übergangs folgt. Das Tag wird durch den ersten Buchstaben des Wortes "verankert" gekennzeichnet, was auf Englisch "angehängt" bedeutet.

Die Verweisadresse wird durch den Wert des Href-Attributs bestimmt und ist die URL der Ressource, auf die der Link verweist. Somit kann das Format zum Definieren eines Hyperlinks wie folgt dargestellt werden:

HTML-Dokument beginnt mit Tags (Seitenname, Codepage-Anzeige, Dokumenttyp-Anzeige) und endet mit Tags. Fast der gesamte Inhalt, den Sie auf der Seite einfügen möchten, wird zwischen Tags platziert. und.

Der HTML-Standard besteht aus einer Reihe formaler Richtlinien, die vom World Wide Web Consortium (W3C) definiert und von führenden Browser-Anbietern wie Microsoft Internet Explorer und Netscape Navigator verarbeitet werden. Der neueste Sprachstandard ist HTML 4.0. Internet Explorer und Netscape Navigator interpretieren einzelne Sprachkonstrukte jedoch unterschiedlich und verwenden auch einige nicht standardmäßige browserspezifische Erweiterungen. Daher kann im Prinzip nicht garantiert werden, dass die Anzeige von Seiten mit den erweiterten HTML-Funktionen in verschiedenen Browsern gleich ist. In diesem Zusammenhang sind die Entwickler von Webseiten gezwungen, die Funktionalität der von ihnen erstellten Websites in mindestens zwei der oben genannten Browser zu überprüfen.

Wie der Webserver funktioniert

nachdem wir das Konzept der HTML-Sprache eingeführt haben, können wir die Funktionsweise des Webservers und des Browsers genauer beschreiben. Schauen wir uns ein Beispiel an.

Angenommen, Ihr Freund hat seine eigene Website unter www.petrov.ru erstellt und seinen Lebenslauf unter http://www.petrov.ru/resume.htm darauf platziert. Was passiert, wenn Sie diesen Lebenslauf von Ihrem Computer aus anzeigen?

Sobald Sie die obige URL in Ihren Browser eingeben, erhält der Browser Informationen über das verwendete Protokoll (http), den Servernamen (www.petrov.ru) und die angeforderte Datei (resume.htm). Der Browser kontaktiert den DNS-Server, um den Namen des Servers www.petrov.ru in eine IP-Adresse zu übersetzen, mit der der erforderliche Server gefunden, eine Verbindung zum Webserver hergestellt und mithilfe des http-Protokolls die erforderliche Ressource angefordert wird. Der Server sendet eine HTML-Seite an den Browser, damit er das angegebene Dokument anzeigen kann. Der Browser liest die HTML-Tags, erstellt die Seite auf Ihrem Computerbildschirm neu und Sie sehen das Ergebnis Ihrer Anfrage.

Normalerweise enthält sogar eine einfache Webseite nicht nur Text, sondern auch Grafiken. Mit anderen Worten, die Seite besteht aus mehreren Dateien, dh im Allgemeinen kann die auf Ihren Computer übertragene Datei nicht nur Text, sondern auch Grafik oder etwas anderes sein. Woran erkennt der Browser diese Dateien? Zunächst sendet der Server eine Textnachricht, die den Client darüber informiert, welche Datei gesendet wird: ob es sich um Text im HTML-Format oder um Grafiken im JPG-Format oder um etwas anderes handelt, und überträgt erst dann den Inhalt dieser Datei. Obwohl eine Webseite normalerweise aus vielen Dateien besteht, sendet der Webserver nur eine Datei pro Anforderung. Das heißt, nachdem der Browser HTML-Text empfangen und darin beispielsweise einen Link zu einem grafischen Element gefunden hat, sendet er eine neue Anforderung an den Server und nicht unbedingt an dieselbe Anforderung, von der der HTML-Text stammt. Wahrscheinlich sind die meisten Internetnutzer mit der Situation vertraut, in der das Laden der Seite mit Verzögerung erfolgt und zunächst der Text angezeigt wird und dann Bilder erscheinen. Diese Situation spiegelt nur die Reihenfolge des Ladens der Elemente der Webseite wider. Um jede neue Datei herunterzuladen, muss der Browser eine neue Sitzung einrichten. Da moderne Server und Browser im Multithread-Modus arbeiten, können gleichzeitig mehrere Sitzungen gleichzeitig ausgeführt werden. Zum Herunterladen jeder neuen Datei wird jedoch eine separate Sitzung initiiert.

Wenn die angeforderte Ressource unter der angegebenen Adresse nicht vorhanden ist, gibt der Webserver eine Nachricht zurück, die Sie wahrscheinlich mehrmals auf Ihrem Bildschirm gesehen haben: 404 / Datei nicht gefunden.

Statische und dynamische Seiten

tatic-Seiten sind eine exakte Kopie der Dateien in den Verzeichnissen des Webservers und werden erst geändert, wenn der Entwickler selbst etwas daran ändert. Seiten können jedoch dynamisch generiert werden, dh während der Verarbeitung einer Anforderung durch ein Programm und nicht aus einer fertigen Datei auf der Festplatte. Es gibt verschiedene Möglichkeiten, eine solche Seite zu erstellen:

  • generierung bei Bedarf direkt auf dem Webserver. Um die dynamische Generierung von Webseiten zu ermöglichen, muss der Server angewiesen werden, welche Dateien "normal" sind und welche Anweisungen für ihre programmatische Verarbeitung enthalten. Daher werden alle Dateien im entsprechenden Verzeichnis der Website in der Liste der Zugriffsrechte, für die "Ausführung" erfolgt, als dynamisch betrachtet, und der Server selbst wählt anhand seines Attributs und / oder seiner Namenserweiterung ein Mittel zum Generieren einer bestimmten Seite beim Zugriff auf eine solche Datei aus. In diesem Fall kann die Seite entweder vom Server selbst (mithilfe spezieller Befehle) oder von einem externen Programm erstellt werden, das direkt oder über die CGI-Schnittstelle (Common Gateway Interface) gestartet wird. Das Programm zum Generieren einer dynamischen Seite kann in einer kompilierten oder interpretierten Sprache geschrieben werden. Der Programmtext mit Befehlen zur dynamischen Seitenbildung wird als Skript bezeichnet. Die Liste der Korrespondenz von Skriptattributen mit externen Programmen für deren Verarbeitung wird im Abschnitt Webserver / Skripthandler angegeben. Beispielsweise werden Skripte mit den Erweiterungen * .pl und * .cgi standardmäßig vom Perl-Interpreter verarbeitet.
  • bildung auf dem Computer des Benutzers. In diesem Fall werden die Texte von Programmen zur Erstellung dynamischer Webseiten zunächst auf den lokalen Computer des Benutzers übertragen, wo der Browser das entsprechende Tool zum Verarbeiten und Empfangen der Webseite anfordern muss. Ein Programm zum Generieren einer dynamischen Seite kann auch sowohl in einer kompilierten als auch in einer interpretierten Sprache geschrieben werden.

CGI-Technologie

Sie sind wahrscheinlich auf Seiten gestoßen, die vorher nicht existierten und die auf Ihre Anfrage hin dynamisch erstellt wurden - gebildet, wie sie sagen, "on the fly".

Beispielsweise bietet Ihnen jedes Überprüfungsbuch ein bestimmtes Formular, in dem Sie Ihre Überprüfung hinzufügen. Wenn Sie diese Seite das nächste Mal öffnen, enthält sie eine neue Nachricht.

Eine Technologie zum Hinzufügen von dynamischem Inhalt zu Webseiten heißt CGI. Sie können einer bestimmten URL nicht nur ein statisches Dokument, sondern auch ein Programm zuordnen, wodurch Daten in Echtzeit generiert werden können.

Betrachten Sie ein Beispiel für die Bereitstellung von Wetterinformationen. Der Wetterbericht ändert sich jeden Tag und eine neue statische Prognoseseite kann täglich erstellt werden. Wenn Sie jedoch sofortige Daten bereitstellen möchten, müssen Sie jedes Mal eine neue Seite erstellen. Dies kann mithilfe der CGI-Technologie erfolgen. Zum Zeitpunkt der Kontaktaufnahme mit dem Server wird ein CGI-Programm gestartet, das sich auf ein digitales Messgerät bezieht und Informationen zu Temperatur, Druck usw. bereitstellt. Wenn Sie das nächste Mal diese Adresse kontaktieren, erhalten Sie neue Informationen.

Ein weiteres Beispiel: Wenn Sie eine Abfrage ausfüllen, z. B. eine Abfrage in einer Suchmaschine, erhalten Sie als Antwort die Ergebnisse des CGI-Programms in Form eines Satzes gesuchter Adressen.

Stellen Sie sich ein CGI-Programm als Teil eines Webservers vor, der in Echtzeit vom Webserver ausgeführt wird. Der Server sendet Benutzeranforderungen an das CGI-Programm, das sie verarbeitet und die Ergebnisse seiner Arbeit an den Bildschirm des Benutzers zurückgibt (Abb. 3). Auf den meisten Webservern ist der CGI-Mechanismus wie folgt organisiert: Es wird ein spezielles Unterverzeichnis erstellt, in dem solche Programme gespeichert werden, und der Webserveradministrator konfiguriert den Zugriff darauf so, dass Dateien von ihm nicht gelesen, sondern ausgeführt werden. Das Ergebnis der Programmarbeit wird als Antwort auf die Anfrage an den Browser gesendet. Aus Sicht des Kunden spielt es keine Rolle, ob die URL ein statisches Dokument oder ein CGI-Programm ist. Der Browser nimmt Informationen auf die gleiche Weise wahr, unabhängig davon, ob sie "on the fly" generiert werden oder ob es sich um eine statische Seite handelt. Die Ausgabe eines CGI-Programms hat das gleiche Format wie ein statisches Dokument.

Die Abkürzung CGI ist Ihnen wahrscheinlich in der Zeile Ihres Browsers aufgefallen, als Sie im World Wide Web unterwegs waren, und Sie haben höchstwahrscheinlich einen Link zu / cgi-bin / gesehen - dem Verzeichnis, in dem sich CGI-Programme normalerweise befinden. Viele interaktive Dienste wie ein Gästebuch, ein Forum usw. basieren auf CGI-Programmen.

Der Begriff "CGI" bezieht sich nicht nur auf ein Programm, sondern auch auf ein Protokoll. In diesem Sinne ist CGI die Standardmethode für Webserver, um eine Benutzeranforderung an eine Anwendung weiterzuleiten und Daten zurückzugewinnen, um sie an den Benutzer weiterzuleiten. Das CGI-Protokoll zum Übertragen von Daten zwischen dem Server und der Anwendung ist Teil des HTTP-Protokolls.

Es sollte beachtet werden, dass wenn Sie Ihre Seite auf kostenlosen Hosting-Servern hosten, es durchaus möglich ist, dass CGI-Skripte auf diesen Servern nicht unterstützt werden.

Eine Alternative zu CGI ist die ASP-Technologie (Active Server Page) von Microsoft, die dem gleichen Prinzip folgt: Ein in eine Webseite eingebettetes Skript wird auf dem Server ausgeführt, bevor die Seite an den Benutzer gesendet wird.

Es gibt andere Technologien, die nach dem gleichen Prinzip arbeiten.