Was ist CGI?
CGI wird derzeit von NCSA verwaltet. NCSA definiert CGI wie folgt:
CGI (Common Gateway Interface), eine gemeinsame Gateway-Schnittstelle, ist ein Programm, das auf dem läuft Server, wie zum Beispiel: HTTP-Server, der eine Schnittstelle mit Client-HTML-Seiten bereitstellt.
Websurfen
Um besser zu verstehen, wie CGI funktioniert, können wir mit dem Klicken auf einen Link oder eine URL auf einer Webseite beginnen:
1 Der Browser greift auf die URL zu und stellt eine Verbindung zum HTTP-Webserver her.
2. Nach Erhalt der Anforderungsinformationen analysiert der Webserver die URL und prüft, ob die Datei vorhanden ist. Wenn die Datei vorhanden ist, wird der Inhalt der Datei zurückgegeben eine Fehlermeldung.
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.
CGI-Architekturdiagramm
Webserver-Unterstützung und -Konfiguration
Bevor Sie die CGI-Programmierung durchführen, stellen Sie sicher, dass Ihr Webserver CGI und The unterstützt Der CGI-Handler wurde konfiguriert.
Alle CGI-Programme zur HTTP-Serverausführung werden in einem vorkonfigurierten Verzeichnis gespeichert. Dieses Verzeichnis wird als CGI-Verzeichnis bezeichnet und laut Konvention /var/www/cgi-bin.
Die Erweiterung von CGI-Dateien ist .cgi, und Python kann auch die Erweiterung .py verwenden.
Standardmäßig ist das cgi-bin-Verzeichnis, in dem der Linux-Server für die Ausführung konfiguriert ist, /var/www.
Wenn Sie andere Verzeichnisse zum Ausführen von CGI-Skripten angeben möchten, können Sie die Konfigurationsdatei httpd.conf wie folgt ändern:
AllowOverride None
Optionen ExecCGI
Anordnung erlauben, verweigern
Zulassen von allen
Optionen Alle
< ;/Directory>
Das erste CGI-Programm
Wir verwenden Python, um das erste CGI-Programm zu erstellen, der Dateiname ist hellp.py , Die Datei befindet sich im Verzeichnis /var/www/cgi-bin. Der Inhalt lautet wie folgt:
#!/usr/bin/python
print „Content-type:text/htmlrnrn“
print ''
print '
'print '
print ''
print '
'print '
print ''
print ' '
Das obige Programm zeigt beim Zugriff im Browser die folgenden Ergebnisse an:
Hallo Word!
Das hello.py-Skript ist ein einfaches Python-Skript Der Ausgabeinhalt des Skripts ist „Inhaltstyp: text/htmlrnrn“, wird an den Browser gesendet und teilt dem Browser mit, dass der angezeigte Inhaltstyp „text/html“ ist.
HTTP-Header
Der „Content-type: text/htmlrnrn“ im Inhalt der hello.py-Datei ist Teil des HTTP-Headers, der an den Browser gesendet wird, um ihn darüber zu informieren über den Inhaltstyp.
Das Format des HTTP-Headers ist wie folgt:
HTTP-Feldname: Feldinhalt
Zum Beispiel
Inhaltstyp: text/htmlrnrn
Die folgende Tabelle stellt die Informationen vor, die häufig in HTTP-Headern in CGI-Programmen verwendet werden:
Header
Beschreibung
Inhaltstyp: Die angeforderten MIME-Informationen, die der Entität entsprechen. Zum Beispiel: Content-type:text/html
Expires: Date Das Datum und die Uhrzeit, wann die Antwort abläuft
Location: URL Wird verwendet, um den Empfänger zum Speicherort der nicht angeforderten URL umzuleiten um die Anfrage oder Identifizierung abzuschließen Neue Ressource
Zuletzt geändert: Datum Die letzte Änderungszeit der angeforderten Ressource
Inhaltslänge: N Die angeforderte Inhaltslänge
Set- Cookie: String Set Http Cookie
CGI-Umgebungsvariablen
Alle CGI-Programme erhalten die folgenden Umgebungsvariablen, die in CGI-Programmen eine wichtige Rolle spielen:
Variablen Name
Beschreibung
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 Der COOKIE-Inhalt im Client.
HTTP_USER_AGENT Stellt Client-Browserinformationen einschließlich der Versionsnummer oder anderer proprietärer Daten bereit.
PATH_INFO Der Wert dieser Umgebungsvariablen stellt andere Pfadinformationen unmittelbar nach dem CGI-Programmnamen dar. Es erscheint häufig als Parameter in CGI-Programmen.
QUERY_STRING Wenn die Informationsübertragungsmethode zwischen dem Server und dem CGI-Programm GET ist, sind die übertragenen Informationen der Wert dieser Umgebungsvariablen. 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 Der vollständige Pfad des CGI-Skripts
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 die CGI-Umgebungsvariablen ausgibt:
#!/usr/bin/python
import os
print "Content-type: text/htmlrnrn";
print „Environment
“;
for param in os.environ.keys():
print „< ;b> ; s: %s
" % (param, os.environ[param])
GET- und POST-Methoden
Der Browser-Client überträgt Informationen über zwei Methoden an den Server, die beiden Methoden sind die GET-Methode und die POST-Methode.
Verwenden Sie die GET-Methode, um Daten zu übertragen
Die GET-Methode sendet die codierten Benutzerinformationen an den Server. Die Dateninformationen sind in der URL der Anforderungsseite enthalten, getrennt durch „?“. wie unten gezeigt:
http://www.test.com/cgi-bin/hello.py?key1=value1&key2=value2
Einige weitere 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 nicht beim Umgang mit sensiblen Daten verwendet werden
GET-Anfragen haben eine Längenbeschränkung
GET-Anfragen sollten nur zum Abrufen von Daten verwendet werden
Einfaches URL-Beispiel: GET-Methode
Das Folgende ist eine einfache URL, die die GET-Methode verwendet, um zwei Parameter an das Programm hello_get.py zu senden:
/cgi-bin/hello_get.py?first_name=ZARA&last_name=ALI
Das Folgende ist der Code der hello_get.py-Datei:
#!/usr/bin/python
# CGI-Verarbeitungsmodul
cgi, cgitb importieren
# Eine Instanziierung von FieldStorage erstellen
form = cgi.FieldStorage()
# Daten abrufen
first_name = form.getvalue('first_name')
last_name = form.getvalue('last_name')
print "Content-type:text/htmlrnrn"
drucken Sie „“
drucken Sie „
“drucken Sie „
print „“
print „
“print „
print „“
print „“
Browser Anfrage Ausgabeergebnis:
Hallo ZARA ALI
Einfaches Formularbeispiel: GET-Methode
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 Datei hello_get.py. Der Code lautet wie folgt:
Verwenden Sie die POST-Methode, um Daten zu übergeben
Verwenden Sie die POST-Methode. Die Übertragung von Daten an den Server ist sicherer und zuverlässiger. Einige vertrauliche Informationen wie Benutzerkennwörter müssen mithilfe von POST übertragen werden.
Das Folgende ist auch hello_get.py, das auch vom Browser übermittelte POST-Formulardaten verarbeiten kann:
#!/usr/bin / Python
# CGI-Modul importieren
cgi, cgitb importieren
# FieldStorage-Instanz erstellen
form = cgi.FieldStorage()
# Formulardaten abrufen
first_name = form.getvalue('first_name')
last_name = form.getvalue ( 'last_name')
print „Content-type:text/htmlrnrn“
print „“
print „
print "
print ""
print "
print "
print ""
print "