In der vorherigen Vorlesung haben wir die Funktionen von CGI-Programmen vorgestellt. Heute beginnen wir mit Teil 2, dem Konzept der CGI-Programmierung. Die Inhalte dieser Vorlesung bilden die Grundlage für ein vertieftes Verständnis von CGI-Programmen.
Diese Vorlesungsreihe verwendet Delphi zum Schreiben von CGI-Programmen. Für diesen Inhalt wurde Delphi in seine Klassen integriert. Sie denken vielleicht, dass diese Vorlesung unnötig ist. Aber ich denke, einer der Vorteile von CGI besteht darin, dass es viele verfügbare Entwicklungssprachen gibt (dieses Problem wird weiter unten erwähnt) und der Inhalt dieser Vorlesung in jeder Programmiersprache (einschließlich Delphi) verwendet werden kann. Um die Vorteile von CGI nutzen zu können, ist der Inhalt dieser Vorlesung daher weiterhin erforderlich. Darüber hinaus ist der Inhalt dieser Vorlesung die Grundlage für ein tiefgreifendes Verständnis von CGI-Programmen.
2. CGI-Spezifikationen:
Normalerweise ist ein WEB-Server ein leistungsstarker Computer, es ist jedoch unmöglich, die gesamte Rechenleistung auszunutzen. Das Aufkommen von CGI ermöglicht es Benutzern, die Rechenleistung des WEB-Servers zu nutzen, um Remote-Clients interessante und dynamische Inhalte bereitzustellen. Die CGI-Spezifikation gilt für WEB-Server und Anwendungen, die im WEB ausgeführt werden. Es ist nicht Teil des HTTP-Protokolls, aber die meisten WEB-Server unterstützen diese Spezifikation, wie z. B. NCSA httpd, CERN httpd, Apache httpd, IIS und das von uns verwendete OmniHTTPD.
2.1, CGI-Übersicht
CGI definiert eine Reihe von Regeln, die bei der Interaktion zwischen WEB-Servern, Browsern und Anwendungen befolgt werden. Fragen Sie beispielsweise das Remote-Datenbanksystem über einen WEB-Browser ab:
2.2. Sprache:
CGI-Programme können in jeder Sprache geschrieben werden, die auf dem WEB-Server ausgeführt werden kann. Sie sollten die Sprache wählen, mit der Sie am besten vertraut sind und die für Ihren aktuellen Job am besten geeignet ist. Zum Beispiel: Die Sprache Perl eignet sich für die Verarbeitung von Zeichenfolgen und Dateien, C eignet sich eher für große und komplexe Programme, Visual Basic und Delphi eignen sich für die Datenbankverarbeitung und so weiter. Die folgenden sind häufig verwendete CGI-Programmiersprachen:
C
C++
Perl
Tcl
Python
Shell-Skripte
Visual Basic
Delphi
Applescript
2.3, CGI-Methode:
Die Art und Weise, CGI aufzurufen, wird als CGI-Methode bezeichnet. Es gibt drei Haupt-CGI-Methoden:
2.3.1, GET-Methode:
Die GET-Methode ist die Methode, mit der der Browser eine Anfrage an den WEB-Server stellt. Bei Verwendung dieser Methode erhält das CGI-Programm Daten aus der Umgebungsvariablen QUERY_STRING. Um die Eingabeparameter zu erhalten, muss das CGI-Programm diese Umgebungsvariable analysieren. Wenn die zu übertragenden Daten sehr lang sind, sollte die POST-Methode verwendet werden.
2.3.2, POST-Methode:
Bei Verwendung der POST-Methode erhalten CGI-Programme Eingabedaten von stdin (Standardeingabe). Da am Ende der Eingabedaten kein EOF (End Of File) steht, muss das CGI-Programm den Wert der Umgebungsvariablen CONTENT_LENGTH verwenden, um die Eingabedaten korrekt zu lesen. Der größte Vorteil dieser Methode besteht darin, dass sie eine große Datenmenge übertragen kann, während die GET-Methode aufgrund der Begrenzung der URL-Länge (im Allgemeinen nicht mehr als 1024 Byte) keine große Datenmenge übertragen kann. Derzeit ist die POST-Methode die einzige Option.
2.3.3, HEAD-Methode:
Die HEAD-Methode ist grundsätzlich dieselbe wie die GET-Methode, außer dass sie Daten vom WEB-Server an den Browser überträgt. Darüber hinaus werden nur die HTTP-Header-Informationen übertragen.
2.4. Schnittstellenspezifikationen:
Im Folgenden werden die vier Hauptmethoden für die Kommunikation von WEB-Servern mit CGI-Programmen vorgestellt: Umgebungsvariablen, Befehlszeile, Standardeingabe und Standardausgabe. (Basierend auf CGI-Version 1.1)
2.4.1. Umgebungsvariablen:
AUTH_TYPE: Wenn der Server Bestätigungen unterstützt und das Skript geschützt ist, wird der Typ der Bestätigung angegeben.
CONTENT_LENGTH: Gibt die Länge der mit der POST-Methode übertragenen Daten in Bytes an. Bei Verwendung der GET-Methode ist die Variable leer.
CONTENT_TYPE: Gibt den MINE-Typ der Daten an, die bei Verwendung der POST-Methode übertragen werden. Bei Verwendung der GET-Methode ist die Variable leer. Zum Beispiel: application/x-www-form-urlencoded.
GETWAY_INTERFACE: Geben Sie den Namen und die Versionsnummer der CGI-Spezifikation an, z. B.: CGI/1.1.
PATH_INFO: Gibt die zusätzlichen Pfadinformationen nach dem CGI-Programmnamen in der URL an.
PATH_TRANSLATED: Der physische Pfad des CGI-Programms, normalerweise das WEB-Stammverzeichnis, der Skriptname und zusätzliche Pfadinformationen.
QUERY_STRING: Die Informationen nach dem „?“-Zeichen in der URL. Diese Umgebungsvariable liefert die Eingabedaten bei Verwendung der GET-Methode.
REMOTE_ADDR: Die IP des Remote-Computers, der die Anfrage stellt.
REMOTE_HOST: Der Name des Remote-Computers, der die Anfrage stellt.
REMOTE_IDENT: Gibt den in RFC 931 definierten Benutzernamen an.
Hinweis: RFC 931 ist das maßgebliche Dokument des Internets und beschreibt die Methode zur Bestätigung der Identifizierung von Benutzern in TCP-Verbindungen. Dokumentation unter: http://sunsite.auc.dk/RFC/rfc/rfc931.html.
REMOTE_USER: Gibt den autorisierten Benutzernamen des Clients an, der die Anfrage stellt.
REQUEST_METHOD: Die Methode zum Stellen der Anfrage, die GET, HEAD und POST sein kann.
SCRIPT_NAME: Der virtuelle Pfad zum Ausführen des CGI-Programms, z. B.: /cgi-bin/query.cgi.
SERVER_NAME: Der Domänenname oder die IP-Adresse des Computers, auf dem die WEB-Server-Software ausgeführt wird, z. B.: www.chinabyte.com.
SERVER_PORT: Die Portnummer des WEB-Servers, der Standardwert ist 80.
SERVER_PROTOCOL: Der vom WEB-Server verwendete Protokollname und die Versionsnummer, z. B. HTTPD/1.0.
SERVER_SOFTWARE: Der Name des WEB-Servers, der CGI-Programme ausführt. Das Format ist „Servername/Versionsnummer“, zum Beispiel: NCSA/1.5b5.
HTTP_ACCEPT: Vom Client gesendete „Acccpect: Header-Zeile“, entsprechend dem MIME-Typ, den der Client verarbeiten kann, im Format „Typ/Subtyp, Typ/Subtyp usw.“, z. B.: */*, image/ GIF, Bild/JPEG.
HTTP_REFERER: Ja Referrer: Das Verzeichnis der Kopfzeile, das die URL des Formulars (Form) enthält, wenn eine CGI-Anfrage gestellt wird, z. B.: http://www.chinabyte.com/register.form.
HTTP_USER_AGENT: Der Name des Client-Browsers, der die Anfrage gestellt hat, z. B.: Mozilla/1.2N (Windows;I;32bit).
Sie können die oben genannten Umgebungsvariablen mithilfe des Demonstrationsprogramms in der vorherigen Vorlesung sehen.
2.4.2, Befehlszeile:
Die CGI-Befehlszeile wird nur bei Abfragen mit ISINDEX verwendet. Eine ISINDEX-Abfrage ist eine spezielle Abfrage, die zwischen <ISINDEX> und <BASE HREP=".."> eingeschlossen ist. Die Befehlszeile kann mehrere Parameter annehmen.
2.4.3. Standardeingabe:
Bei Verwendung der POST-Methode erhält das CGI-Programm die übertragenen Daten von stdin. Wie bereits erwähnt, müssen die Umgebungsvariablenwerte CONTENT_TYPE und CONTENT_LENGTH verwendet werden. Zu beachten ist, dass die URL in den Daten codiert ist, z. B. Leerzeichen durch Pluszeichen, ~ durch %7E usw. ersetzt werden.
2.4.4. Standardausgabe:
CGI-Programme senden Daten über Standardausgaben oder Befehle, die vom WEB-Server interpretiert werden können, an den Browser. CGI-Programme können über den WEB-Server mit dem Browser kommunizieren und ihre Programmnamen müssen mit „nph-“ beginnen, was nicht analysierte Header-Informationen darstellt. Das CGI-Programm ist für die Richtigkeit der an den Browser zurückgegebenen HTTP-Header-Informationen verantwortlich.
Wenn das NPH-Programm nicht verwendet wird, sucht der Server nach drei speziellen Headern, die das CGI möglicherweise zurückgibt:
Inhaltstyp: Header-Informationen vom MIME-Typ, z. B.: Bei der Eingabe von HTML wird häufig „Inhaltstyp:text/html“ verwendet.
Standort: Teilen Sie dem Server mit, dass Sie auf ein anderes Dokument verweisen. Der Server leitet entweder den Client um oder sendet den Dokumentinhalt, je nachdem, ob es sich bei der URL um einen vollständigen oder einen relativen Pfad handelt.
Status: Die vom Server an den Client gesendete Statuszeile. Das Format ist: nnnXXXXX, nnn ist ein dreistelliger Code und XXXXX ist der entsprechende Beschreibungstext.