CGI wird derzeit von der NCSA verwaltet, die CGI wie folgt definiert:
CGI (Common Gateway Interface), Common Gateway Interface, ist ein Programm, das auf einem Server wie einem HTTP-Server ausgeführt wird und eine Schnittstelle zur HTML-Seite des Clients bereitstellt.
Um besser zu verstehen, wie CGI funktioniert, können wir mit dem Klicken auf einen Link oder eine URL auf einer Webseite beginnen:
1. Greifen Sie mit Ihrem Browser auf die URL zu und stellen Sie eine Verbindung zum HTTP-Webserver her.
2. Nach Erhalt der Anforderungsinformationen analysiert der Webserver die URL und prüft, ob die Datei, auf die zugegriffen wird, auf dem Server vorhanden ist. Wenn die Datei vorhanden ist, wird der Inhalt der Datei zurückgegeben, andernfalls wird eine Fehlermeldung zurückgegeben.
3. Der Browser empfängt Informationen vom Server und zeigt die empfangene Datei oder Fehlermeldung an.
CGI-Programme können Python-Skripte, PERL-Skripte, SHELL-Skripte, C- oder C++-Programme usw. sein.
Bevor Sie die CGI-Programmierung durchführen, stellen Sie sicher, dass Ihr Webserver CGI unterstützt und einen CGI-Handler konfiguriert hat.
Apache unterstützt die CGI-Konfiguration:
Richten Sie das CGI-Verzeichnis ein:
ScriptAlias /cgi-bin/ /var/www/cgi-bin/
Alle CGI-Programme zur Ausführung des HTTP-Servers werden in einem vorkonfigurierten Verzeichnis gespeichert. Dieses Verzeichnis wird als CGI-Verzeichnis bezeichnet und laut Konvention /var/www/cgi-bin.
CGI-Dateien haben die Erweiterung .cgi und Perl kann auch die Erweiterung .pl verwenden.
Standardmäßig wird die Linux-Serverkonfiguration im Verzeichnis cgi-bin in /var/www ausgeführt.
Wenn Sie ein anderes Verzeichnis zum Ausführen von CGI-Skripten angeben möchten, können Sie die Konfigurationsdatei httpd.conf wie folgt ändern:
<Directory "/var/www/cgi-bin"> AllowOverride None Options +ExecCGI Orderallow,deny Allow from all</Directory>
Fügen Sie AddHandler das Suffix .pl hinzu, damit wir auf Perl-Skriptdateien mit der Endung .pl zugreifen können:
AddHandler CGI-Skript .cgi .pl .py
Nachfolgend erstellen wir eine test.cgi-Datei. Der Code lautet wie folgt:
Öffnen Sie dann http://localhost/cgi-bin/test.cgi über den Browser. Die Ausgabeergebnisse lauten wie folgt:
Der Ausgabeinhalt der ersten Zeile des Skripts „Content-type: text/htmlrnrn“ wird an den Browser gesendet und teilt dem Browser mit, dass der angezeigte Inhaltstyp „text/html“ ist.
Der „Content-type:text/html“ im Inhalt der test.cgi-Datei ist Teil des HTTP-Headers, der an den Browser gesendet wird, um dem Browser den Inhaltstyp der Datei mitzuteilen.
Das Format des HTTP-Headers ist wie folgt:
HTTP-Feldname: Feldinhalt
Zum Beispiel:
Inhaltstyp:text/htmlrnrn
Die folgende Tabelle stellt Informationen vor, die häufig in HTTP-Headern in CGI-Programmen verwendet werden:
Kopf | beschreiben |
---|---|
Inhaltstyp: | Die angeforderten MIME-Informationen, die der Entität entsprechen. Zum Beispiel: Inhaltstyp:text/html |
Läuft ab: Datum | Ablaufdatum und -uhrzeit der Antwort |
Standort: URL | Wird verwendet, um den Empfänger zum Speicherort einer nicht angeforderten URL umzuleiten, um die Anfrage abzuschließen oder eine neue Ressource zu identifizieren. |
Letzte Änderung: Datum | Die letzte Änderungszeit der angeforderten Ressource |
Inhaltslänge: N | Angeforderte Inhaltslänge |
Set-Cookie: String | HTTP-Cookie setzen |
Alle CGI-Programme erhalten die folgenden Umgebungsvariablen, die in CGI-Programmen eine wichtige Rolle spielen:
Variablenname | beschreiben |
---|---|
CONTENT_TYPE | Der Wert dieser Umgebungsvariablen gibt den MIME-Typ der übergebenen Informationen an. Derzeit lautet die Umgebungsvariable CONTENT_TYPE im Allgemeinen: application/x-www-form-urlencoded, was angibt, dass die Daten aus HTML-Formularen stammen. |
CONTENT_LENGTH | Wenn die Informationsübertragungsmethode zwischen dem Server und dem CGI-Programm POST ist, ist diese Umgebungsvariable die Anzahl der Bytes gültiger Daten, die aus der Standardeingabe STDIN gelesen werden können. Diese Umgebungsvariable muss beim Lesen der eingegebenen Daten verwendet werden. |
HTTP_COOKIE | COOKIE-Inhalte im Client. |
HTTP_USER_AGENT | Bereitstellung von Browserinformationen des Kunden, einschließlich Versionsnummern oder anderen proprietären Daten. |
PATH_INFO | Der Wert dieser Umgebungsvariablen stellt andere Pfadinformationen dar, die unmittelbar auf den Namen des CGI-Programms folgen. Es erscheint häufig als Parameter in CGI-Programmen. |
QUERY_STRING | Wenn die Informationsübertragungsmethode zwischen dem Server und dem CGI-Programm GET ist, entspricht der Wert dieser Umgebungsvariablen den übertragenen Informationen. Diese Informationen folgen dem CGI-Programmnamen, getrennt durch ein Fragezeichen „?“. |
REMOTE_ADDR | Der Wert dieser Umgebungsvariablen ist die IP-Adresse des Clients, der die Anfrage sendet, wie oben 192.168.1.67. Dieser Wert ist immer vorhanden. Und es ist die eindeutige Kennung, die der Web-Client dem Webserver bereitstellen muss und die in CGI-Programmen zur Unterscheidung verschiedener Web-Clients verwendet werden kann. |
REMOTE_HOST | Der Wert dieser Umgebungsvariablen enthält den Hostnamen des Clients, der die CGI-Anfrage gesendet hat. Wenn die Abfrage, die Sie abfragen möchten, nicht unterstützt wird, besteht keine Notwendigkeit, diese Umgebungsvariable zu definieren. |
REQUEST_METHOD | Stellt die Methode bereit, mit der das Skript aufgerufen wird. Für Skripte, die das HTTP/1.0-Protokoll verwenden, sind nur GET und POST sinnvoll. |
SCRIPT_FILENAME | Vollständiger Pfad zum CGI-Skript |
SCRIPT_NAME | Der Name des CGI-Skripts |
SERVER_NAME | Dies ist der Hostname, Alias oder die IP-Adresse Ihres WEB-Servers. |
SERVER_SOFTWARE | Der Wert dieser Umgebungsvariablen enthält den Namen und die Versionsnummer des HTTP-Servers, der das CGI-Programm aufruft. Der obige Wert ist beispielsweise Apache/2.2.14 (Unix). |
Das Folgende ist ein einfaches CGI-Skript, das CGI-Umgebungsvariablen ausgibt:
Wenn wir Dateien über Perl CGI herunterladen möchten, müssen wir andere Header-Informationen festlegen, wie unten gezeigt:
Die GET-Methode sendet die codierten Benutzerinformationen an den Server. Die Dateninformationen sind in der URL der angeforderten Seite enthalten, getrennt durch „?“, wie unten gezeigt:
http://www.test.com/cgi-bin/test.cgi?key1=value1&key2=value2Einige zusätzliche Hinweise zu GET-Anfragen:
GET-Anfragen können zwischengespeichert werden
GET-Anfragen bleiben im Browserverlauf
GET-Anfragen können mit Lesezeichen versehen werden
GET-Anfragen sollten beim Umgang mit sensiblen Daten nicht verwendet werden
Für GET-Anfragen gelten Längenbeschränkungen
GET-Anfragen sollten nur zum Abrufen von Daten verwendet werden
Das Folgende ist eine einfache URL, die die GET-Methode verwendet, um zwei Parameter an das test.cgi-Programm zu senden:
/cgi-bin/test.cgi?name=Coder Tutorial&url=http://www.codercto.com
Das Folgende ist der Code der test.cgi-Datei:
Überprüfen Sie den Browser und die Ausgabe sieht wie folgt aus:
Das Folgende ist ein HTML-Formular, das die GET-Methode verwendet, um zwei Daten an den Server zu senden. Das übermittelte Serverskript ist auch die test.cgi-Datei. Der test.html-Code lautet wie folgt:
Im Browser ist der Ausführungseffekt wie folgt:
Es ist sicherer und zuverlässiger, die POST-Methode zum Übertragen von Daten an den Server zu verwenden. Einige vertrauliche Informationen wie Benutzerkennwörter müssen zum Übertragen von Daten mithilfe von POST verwendet werden.
Das Folgende ist auch test.cgi, das auch vom Browser übermittelte POST-Formulardaten verarbeiten kann:
Das Folgende ist ein HTML-Formular, das die GET-Methode verwendet, um zwei Daten an den Server zu senden. Das übermittelte Serverskript ist auch die test.cgi-Datei. Der test.html-Code lautet wie folgt:
Im Browser ist der Ausführungseffekt wie folgt:
Das Kontrollkästchen wird verwendet, um eine oder mehrere Optionsdaten zu übermitteln. Der test.html-Code lautet wie folgt:
Das Folgende ist der Code der test.cgi-Datei:
Im Browser ist der Ausführungseffekt wie folgt:
Radio übergibt nur Daten an den Server. Der test.html-Code lautet wie folgt:
Der test.cgi-Skriptcode lautet wie folgt:
Im Browser ist der Ausführungseffekt wie folgt:
Textarea überträgt mehrere Datenzeilen an den Server. Der test.html-Code lautet wie folgt:
Der test.cgi-Skriptcode lautet wie folgt:
Im Browser ist der Ausführungseffekt wie folgt:
Der HTML-Dropdown-Box-Code lautet wie folgt:
Der test.cgi-Skriptcode lautet wie folgt:
Im Browser ist der Ausführungseffekt wie folgt:
Ein großer Mangel des http-Protokolls besteht darin, dass es die Identität des Benutzers nicht beurteilt, was für Programmierer große Unannehmlichkeiten mit sich bringt. Das Aufkommen der Cookie-Funktion gleicht diesen Mangel aus.
Cookies schreiben Daten auf die Festplatte des Kunden, wenn dieser auf das Skript zugreift. Die Dateninformationen werden beim nächsten Zugriff des Kunden auf das Skript abgerufen, wodurch die Funktion der Identitätsüberprüfung erreicht wird.
Das Senden von HTTP-Cookies wird über HTTP-Header implementiert, die vor der Dateiübertragung liegen. Die Syntax des Set-Cookie-Headers lautet wie folgt:
Set-cookie:name=name;expires=date;path=path;domain=domain;secure
name=name: Der Cookie-Wert muss festgelegt werden (name kann nicht „ ; “ und „ , “ verwenden. Verwenden Sie „ ; “, um mehrere Namenswerte zu trennen, zum Beispiel: name1=name1;name2=name2;name3=name3 .
läuft ab=Datum: Cookie-Gültigkeitsdauer, Format: läuft ab="Wdy,DD-Mo-YYYY HH:MM:SS"
path=path: Legen Sie den von Cookies unterstützten Pfad fest. Wenn path ein Pfad ist, wird das Cookie für alle Dateien und Unterverzeichnisse in diesem Verzeichnis wirksam. Das Cookie wird für diese Datei wirksam, zum Beispiel: path="/cgi-bin/cookie.cgi".
domain=domain: Der für Cookies wirksame Domainname, zum Beispiel: domain="www.codercto.com"
sicher: Wenn dieses Flag angegeben ist, bedeutet dies, dass das Cookie nur über einen https-Server mit SSL-Protokoll weitergeleitet werden kann.
Der Empfang von Cookies erfolgt durch Setzen der Umgebungsvariablen HTTP_COOKIE. CGI-Programme können Cookie-Informationen erhalten, indem sie diese Variable abrufen.
Die Cookie-Einstellung ist sehr einfach, das Cookie wird separat im http-Header gesendet. Das folgende Beispiel legt Benutzer-ID, Passwort und Ablaufdatum in Cookies fest:
Die Seite zum Abrufen von Cookie-Informationen ist sehr einfach. Cookie-Informationen werden in der CGI-Umgebungsvariablen HTTP_COOKIE gespeichert.
Das Ausgabeergebnis des obigen Beispiels ist:
Benutzer-ID = XYZPassword = XYZ123
Perl bietet viele integrierte CGI-Module, die folgenden zwei werden häufig verwendet:
CGI-Modul
Berkeley cgi-lib.pl