772 Stimmen

Was bedeutet Common Gateway Interface (CGI)?

CGI ist ein Common Gateway Interface. Wie der Name schon sagt, ist es eine "gemeinsame" Gateway-Schnittstelle für alles. Es ist so trivial und naiv vom Namen her. Ich habe das Gefühl, dass ich das verstanden habe, und zwar jedes Mal, wenn ich auf dieses Wort gestoßen bin. Aber ehrlich gesagt, habe ich es nicht. Ich bin immer noch verwirrt.

Ich bin ein PHP-Programmierer mit Erfahrung in der Webentwicklung.

Benutzer (Client) fordert eine Seite an ---> Webserver(->eingebettetes PHP Interpreter) ----> Serverseitiges (PHP) Skript ---> MySQL Server.

Angenommen, mein PHP-Skript kann Ergebnisse von einem MySQL-Server, einem MATLAB-Server und einem anderen Server abrufen.

Also ist das PHP-Skript jetzt das CGI? Weil es die Schnittstelle zwischen dem Webserver und allen anderen Servern ist? Ich weiß es nicht. Manchmal nennen sie CGI, eine Technologie & andere Zeiten, die sie CGI ein Programm oder einen anderen Server nennen.

  • Was genau ist CGI?

  • Was ist das Problem mit /cgi-bin/*.cgi ? Was ist hier los? Ich weiß nicht, was das ist cgi-bin Verzeichnis auf dem Server für. Ich weiß nicht, warum sie *.cgi-Erweiterungen haben.

  • Warum kommt Perl immer in die Quere. CGI & Perl (Sprache). Ich weiß auch nicht, was es mit diesen beiden auf sich hat. Fast ständig höre ich diese beiden in Kombination "CGI & Perl". Dieses Buch ist ein weiteres gutes Beispiel CGI-Programmierung mit Perl . Warum nicht "CGI-Programmierung mit PHP/JSP/ASP"? Ich habe so etwas noch nie gesehen.

  • CGI-Programmierung in C verwirrt mich sehr. " in C "?? Ernsthaft? Ich weiß nicht, was ich sagen soll. Ich bin nur verwirrt. " in C "?? Das ändert alles. Das Programm muss kompiliert und ausgeführt werden. Das ändert meine Sicht auf die Webprogrammierung völlig. Wann muss ich kompilieren? Wie wird das Programm ausgeführt (da es sich um einen Maschinencode handelt, muss es als unabhängiger Prozess ausgeführt werden). Wie kommuniziert es mit dem Webserver? IPC? und die Verbindung mit allen Servern (in meinem Beispiel MATLAB und MySQL) über Socket-Programmierung? Ich bin ratlos!!

  • Die Leute sagen, dass CGI veraltet ist und nicht mehr verwendet wird. Ist das wirklich so? Was ist die letzte Aktualisierung?

Einmal war ich in einer Situation, in der ich HTTP-PUT-Anfrage Zugang zu folgenden Daten geben musste Webserver (Apache HTTPD) geben musste. Es ist eine lange zurück. Also, soweit ich mich erinnere was ich tat:

  1. Bearbeiten Sie die Konfigurationsdatei von Apache HTTPD, um dem Webserver mitzuteilen, dass er alle HTTP PUT-Anfragen an eine put.php ( Ich musste dieses PHP schreiben Skript schreiben)

  2. Implementieren Sie put.php, um die Anfrage zu bearbeiten (speichern Sie die Datei an dem genannten Ort erwähnt)

Die Leute sagten, ich hätte ein CGI-Drehbuch geschrieben. Im Ernst, ich hatte keine Ahnung, wovon wovon sie sprachen.

  • Habe ich wirklich CGI Script geschrieben?

Ich hoffe, Sie haben verstanden, was mich verwirrt. (Denn ich weiß selbst nicht, wo ich verwirrt bin). Ich bitte euch, eure Antwort so einfach wie möglich zu halten. Ich kann wirklich keine ausgefallene technische Terminologie verstehen. Zumindest nicht in diesem Fall.

EDIT :

Ich habe dieses tolle Tutorial gefunden "CGI-Programmierung ist einfach!" - CGI-Tutorial die die Konzepte in einfachste möglichen Weg. Nach der Lektüre dieses Artikels möchten Sie vielleicht Folgendes lesen Erste Schritte in der CGI-Programmierung in C um Ihr Verständnis mit konkreten Codebeispielen zu ergänzen. Ich habe auch diese Links zu diesem Tutorial zum Wikipedia-Artikel hinzugefügt: http://en.wikipedia.org/wiki/Common_Gateway_Interface

12 Stimmen

Ich habe schon CGI gesehen, das in Cobol geschrieben wurde. Kein Scheiß!

0 Stimmen

@Luc M. Interessiert. Welches CGI meinen Sie (angesichts der Tatsache, dass es einen Raycaster in LINQ gibt...)?

17 Stimmen

@claws: Die Leute, vor allem die der alten Schule, bezeichnen JEDEN Code, unabhängig von der tatsächlichen Ausführungsmethode, der über den Webserver ausgeführt wird, als CGI. Was Sie tatsächlich geschrieben haben, ist ein PHP-Skript, das über das CGI-Protokoll ausgeführt werden kann oder auch nicht. Ihre Verwirrung scheint von der zwiespältigen Bedeutung von CGI herrühren, einem Protokoll zur Ausführung von Code und dem Code, der über das Protokoll ausgeführt wird (was später verallgemeinert wurde, um jeden über das Web ausgeführten Code zu meinen)

457voto

Vinko Vrsalovic Punkte 252104

CGI ist eine Schnittstelle, die dem Webserver mitteilt, wie er Daten zu und von einer Anwendung übermitteln soll. Genauer gesagt beschreibt es, wie Anforderungsinformationen in Umgebungsvariablen übergeben werden (z. B. Anforderungstyp, entfernte IP-Adresse), wie der Anforderungskörper über die Standardeingabe übergeben wird und wie die Antwort über die Standardausgabe ausgegeben wird. Sie können sich auf die CGI-Spezifikation für Einzelheiten.

Um Ihr Bild zu verwenden:

user (client) request for page ---> webserver ---[CGI]----> Server side Program ---> MySQL Server.

Die meisten, wenn nicht alle, Webserver können so konfiguriert werden, dass sie ein Programm als "CGI" ausführen. Das bedeutet, dass der Webserver bei Erhalt einer Anfrage die Daten an ein bestimmtes Programm weiterleitet, wobei er einige Umgebungsvariablen setzt und die Parameter über die Standardeingabe und die Standardausgabe bereitstellt, damit das Programm weiß, wo und wonach es suchen muss.

Der Hauptvorteil besteht darin, dass Sie JEDEN ausführbaren Code über das Internet ausführen können, vorausgesetzt, sowohl der Webserver als auch das Programm wissen, wie CGI funktioniert. Aus diesem Grund können Sie mit einem normalen CGI-fähigen Webserver Webprogramme in C oder Bash schreiben. Das und die Tatsache, dass die meisten Programmierumgebungen problemlos Standardeingaben, Standardausgaben und Umgebungsvariablen verwenden können.

In Ihrem Fall haben Sie höchstwahrscheinlich ein anderes, PHP-spezifisches Kommunikationsmittel zwischen Ihren Skripten und dem Webserver verwendet, nämlich einen eingebetteten Interpreter namens mod_php, wie Sie in Ihrer Frage richtig erwähnen.

Also, um Ihre Fragen zu beantworten:

Was genau ist CGI?

Siehe oben.

Was hat es mit /cgi-bin/*.cgi auf sich? Was hat es damit auf sich? Ich weiß nicht, wofür dieses cgi-bin-Verzeichnis auf dem Server ist. Ich weiß nicht, warum sie *.cgi-Erweiterungen haben.

Dies ist der traditionelle Ort für CGI-Programme, und viele Webserver sind so konfiguriert, dass alle Binärdateien dort als CGI-Programme ausgeführt werden. Die Erweiterung .cgi bezeichnet eine ausführbare Datei, von der erwartet wird, dass sie durch das CGI funktioniert.

Warum kommt Perl immer in die Quere. CGI & Perl (Sprache). Ich weiß auch nicht, was mit diesen beiden los ist. Fast ständig höre ich diese beiden in Kombination "CGI & Perl". Dieses Buch ist ein weiteres gutes Beispiel: CGI-Programmierung mit Perl Warum nicht "CGI-Programmierung mit PHP/JSP/ASP". So etwas habe ich noch nie gesehen.

Denn Perl ist uralt (älter als PHP, JSP und ASP, die alle entstanden, als CGI schon alt war, Perl existierte, als CGI noch neu war) und wurde ziemlich berühmt, weil es eine sehr gute Sprache ist, um dynamische Webseiten über CGI zu bedienen. Heutzutage gibt es andere Alternativen, um Perl auf einem Webserver laufen zu lassen, hauptsächlich mod_perl .

CGI Programmierung in C das verwirrt mich sehr. in C?? Ernsthaft? Ich weiß nicht, was ich sagen soll. Ich bin einfach verwirrt. "In C"?? Das ändert alles. Das Programm muss kompiliert und ausgeführt werden. Das ändert meine Sicht auf die Webprogrammierung völlig. Wann muss ich kompilieren? Wie wird das Programm ausgeführt (da es sich um einen Maschinencode handelt, muss es als unabhängiger Prozess ausgeführt werden)? Wie kommuniziert es mit dem Webserver? IPC? und die Verbindung mit allen Servern (in meinem Beispiel MATLAB und MySQL) über Socket-Programmierung? Ich bin ratlos!!

Sie kompilieren die ausführbare Datei einmal, der Webserver führt das Programm aus und übergibt die Daten der Anfrage an das Programm und gibt die erhaltene Antwort aus. CGI legt fest, dass für jede Anfrage eine Programminstanz gestartet wird. Aus diesem Grund ist CGI ineffizient und heutzutage ziemlich veraltet.

Sie sagen, dass CGI veraltet ist. Es wird nicht mehr verwendet. Ist das so? Was ist das letzte Update?

CGI wird immer noch verwendet, wenn die Leistung nicht im Vordergrund steht und ein einfaches Mittel zur Ausführung von Code erforderlich ist. Es ist aus den oben genannten Gründen ineffizient, und es gibt modernere Mittel zur Ausführung von Programmen in einer Web-Umgebung. Das derzeit bekannteste ist FastCGI .

27 Stimmen

Genauer gesagt wird beschrieben, wie Anforderungsinformationen in Umgebungsvariablen übergeben werden (z. B. Anforderungstyp, entfernte IP-Adresse), wie der Anforderungskörper über die Standardeingabe übergeben wird und wie die Antwort über die Standardausgabe ausgegeben wird. Sie können sich auf die CGI-Spezifikation ( hoohoo.ncsa.illinois.edu/cgi ) für Einzelheiten.

3 Stimmen

Angenommen, Server side Program in Ihrer Abbildung ist mein PHP-Skript. Ich habe also nie eine CGI-Programmierung durchgeführt? Denn ich habe nie etwas geschrieben, das zwischen Webserver und meinem PHP-Skript steht. Verdammt!! das macht mich fertig.

4 Stimmen

PHP basiert immer noch stark auf dem CGI-Protokoll, der meiste Inhalt von $_SERVER stammt direkt aus der CGI-Spezifikation. Und mit "CGI-Programmierung" war immer das Programm gemeint, das die Anfrage bearbeitet, nicht die Implementierung des Protokolls selbst. Wenn Sie einem Pionier der Webprogrammierung aus dem Jahr 1993 erklären würden, was Sie mit PHP tun, würde er es als eine fortgeschrittene (wenn auch möglicherweise schwache) Form der CGI-Programmierung betrachten.

70voto

Quentin Punkte 850700

Was genau ist CGI?

Ein Mittel, mit dem ein Webserver seine Daten von einem Programm (statt z. B. von einer Datei) erhält.

Was ist das Problem mit /cgi-bin/*.cgi?

Keine große Sache. Es ist nur eine Konvention.

Ich weiß nicht, was dieses cgi-bin Verzeichnis ist Ich weiß nicht, warum sie *.cgi-Erweiterungen haben.

Der Server muss wissen, was er mit der Datei tun soll (d. h. er muss sie wie ein auszuführendes Programm behandeln und nicht wie etwas, das er einfach nur ausliefert). Eine .html-Erweiterung sagt ihm, dass er einen Text/HTML-Inhaltstyp verwenden soll. Eine .cgi-Erweiterung bedeutet, dass die Datei als Programm ausgeführt werden soll.

Die Aufbewahrung von ausführbaren Dateien in einem separaten Verzeichnis bietet einen zusätzlichen Schutz gegen die Ausführung falscher Dateien und/oder die Ausgabe von CGI-Programmen als Rohdaten, falls der Server falsch konfiguriert wurde.

Warum kommt uns Perl immer in die Quere.

Das ist nicht der Fall. Perl war einfach nur groß und populär zur gleichen Zeit wie CGI.

Ich habe Perl CGI seit Jahren nicht mehr benutzt. Ich benutzte mod_perl für eine lange Zeit und neige heutzutage zu PSGI/Plack mit FastCGI.

Dieses Buch ist ein weiteres gutes Beispiel für CG Warum nicht "CGI-Programmierung mit PHP/JSP/ASP".

CGI ist nicht sehr effizient. Bessere Methoden für die Kommunikation mit Programmen von Webservern kamen etwa zur gleichen Zeit wie PHP auf. JSP und ASP sont verschiedene Methoden, um mit Programmen zu sprechen.

CGI Programmierung in C das verwirrt mich sehr. in C?? Ernsthaft?

Es ist eine Programmiersprache, warum nicht?

Wann muss ich kompilieren?

  1. Code schreiben
  2. Kompilieren
  3. Zugangs-URL
  4. Webserver führt Programm aus

Wie wird das Programm ausgeführt (da es sich um einen Maschinencode handelt, muss es als unabhängiger Prozess ausgeführt werden).

Es muss nicht als unabhängiger Prozess ausgeführt werden (Sie können Apache-Module in C schreiben), aber das ganze Konzept von CGI besteht darin, dass es einen externen Prozess startet.

Wie kommuniziert es mit dem Webserver? IPC?

STDIN/STDOUT und Umgebungsvariablen - wie in der CGI-Spezifikation definiert.

und die Verbindung mit allen Servern (in meinem Beispiel MATLAB und MySQL) über Socket Programmierung?

Verwenden Sie die Methoden, die Sie mögen und die unterstützt werden.

Man sagt, dass CGI abgeschrieben ist. Es ist nicht mehr in Gebrauch. Ist das so?

CGI ist ineffizient, langsam und einfach. Es wird nur selten verwendet, und wenn, dann nur, weil es einfach ist. Wenn Leistung keine große Rolle spielt, dann ist Einfachheit viel wert.

Was ist das letzte Update?

1.1

0 Stimmen

1. Code schreiben 2. Kompilieren 3. URL aufrufen 4. Webserver führt Programm aus. || Pero wie Weiß der Webserver wobei Sie das kompilierte ausführbare Programm platzieren? Woher weiß es, welches ausführbare Programm (von allen) es ausführen soll?

0 Stimmen

@Pacerier - Auf die gleiche Weise weiß es, welche statische Datei es an den Client senden muss, wenn eine statische Datei angefordert wird.

42voto

CB Bailey Punkte 693084

CGI ist eine Schnittstellenspezifikation zwischen einem Webserver (HTTP-Server) und einem ausführbaren Programm irgendeiner Art, das eine bestimmte Anfrage bearbeiten soll.

Sie beschreibt, wie bestimmte Eigenschaften dieser Anfrage an die Umgebung des Programms weitergegeben werden sollen und wie das Programm die Antwort an den Server zurücksenden soll und wie der Server die Antwort "vervollständigen" soll, um eine gültige Antwort auf die ursprüngliche HTTP-Anfrage zu bilden.

Eine Zeit lang war CGI ein IETF Internet Draft und hatte als solcher ein Verfallsdatum. Er wurde nicht mehr aktualisiert, so dass es keinen CGI-"Standard" gab. Jetzt ist es ein informativer RFC, der aber als solcher die gängige Praxis dokumentiert und selbst kein Standard ist. rfc3875.txt , rfc3875.html

Programme, die eine CGI-Schnittstelle implementieren, können in jeder Sprache geschrieben werden, die auf dem Zielrechner lauffähig ist. Sie müssen in der Lage sein, auf Umgebungsvariablen und in der Regel Standardeingabe und sie erzeugen ihre Ausgabe am Standardausgabe .

Kompilierte Sprachen wie C wurden häufig verwendet, ebenso wie Skriptsprachen wie Perl, die häufig Bibliotheken verwenden, um den Zugriff auf die CGI-Umgebung zu erleichtern.

Einer der großen Nachteile von CGI ist, dass für jede Anfrage ein neues Programm gestartet wird, so dass die Aufrechterhaltung des Status zwischen den Anfragen ein großes Leistungsproblem darstellen kann. Der Status könnte in Cookies oder in einer URL kodiert werden, aber wenn er zu groß wird, muss er an anderer Stelle gespeichert und aus kodierten URL-Informationen oder einem Cookie verschlüsselt werden. Jeder CGI-Aufruf müsste dann den gespeicherten Zustand aus einem Speicher irgendwo neu laden.

Aus diesem Grund und wegen einer sehr einfachen Schnittstelle für Anfragen und Sitzungen werden besser integrierte Umgebungen zwischen Webservern und Anwendungen immer beliebter. Umgebungen wie eine moderne php-Implementierung mit Apache integrieren die Zielsprache viel besser in den Webserver und bieten Zugriff auf Anfrage- und Sitzungsobjekte, die für die effiziente Bearbeitung von http-Anfragen benötigt werden. Sie bieten eine viel einfachere und reichhaltigere Möglichkeit, "Programme" zur Bearbeitung von HTTP-Anfragen zu schreiben.

Ob Sie ein CGI-Drehbuch geschrieben haben, hängt eher von der Interpretation ab. Es hat sicherlich die Aufgabe eines solchen erfüllt, aber es ist viel üblicher, php als ein Modul laufen zu lassen, bei dem die Schnittstelle zwischen dem Skript und dem Server nicht unbedingt eine CGI-Schnittstelle ist.

1 Stimmen

Stören. Ich fing an, dies zu schreiben, als es keine anderen Antworten gab, aber ich wurde weggerufen. Jetzt ist es ungefähr die Nummer 8 in der Liste. Ich habe nicht den Willen, es jetzt zu löschen, ich werde zurückkommen und es später löschen.

6 Stimmen

Hey, bitte lösche es nicht. Es sagt einige Dinge in klarer Weise. Ich fand es hilfreich. Vielleicht finden es einige andere auch so :)

1 Stimmen

OK, ich lasse es noch ein bisschen stehen. Es wäre aber wahrscheinlich gut, wenn jemand die "besseren" Passagen in eine der ausführlicheren Antworten integrieren würde. Dann bekämen wir vielleicht eine eindeutigere Antwort.

19voto

Michael Borgwardt Punkte 334642

Das CGI wird in RFC 3875 obwohl es sich dabei um eine spätere "offizielle" Kodifizierung des ursprünglichen NCSA-Dokument . Im Grunde definiert CGI ein Protokoll zur Übermittlung von Daten über eine HTTP-Anfrage von einem Webserver an ein Programm zur Verarbeitung - ein beliebiges Programm, in einer beliebigen Sprache. Zu der Zeit, als die Spezifikation geschrieben wurde (1993), enthielten die meisten Webserver nur statische Seiten, "Webanwendungen" waren eine seltene und neue Sache, so dass es natürlich erschien, sie von den "normalen" statischen Inhalten zu trennen, wie z.B. in einem cgi-bin neben dem statischen Inhalt zu erstellen, und sie mit .cgi .

Zu dieser Zeit gab es auch noch keine speziellen "Web-Programmiersprachen" wie PHP, und C war die vorherrschende portable Programmiersprache - also schrieben viele Leute ihre CGI-Skripte in C. Aber es stellte sich schnell heraus, dass Perl für diese Art von Aufgaben besser geeignet war, und CGI wurde eine Zeit lang fast zum Synonym für Perl. Dann kamen Java Servlets, PHP und eine Reihe anderer Sprachen auf und übernahmen große Teile des Marktanteils von Perl.

0 Stimmen

Warum ist PHP eine "spezielle Web-Programmiersprache"? PHP ist eine Sprache für allgemeine Zwecke und Menschen haben es auch für UI-Anwendungen verwendet.

0 Stimmen

@Pacerier: Sie wurde als Programmiersprache für die Erstellung von Webseiten entwickelt, und genau dafür wird sie von 99,9 % ihrer Nutzer verwendet. Es ist sogar in seiner Name . Alles andere ist nur sinnlose Haarspalterei. Wenn Sie es für UI-Anwendungen, wissenschaftliches Rechnen oder eingebettete Programmierung verwenden, schön, seien Sie glücklich, niemand sagt, dass Sie es nicht dürfen.

14voto

Juha Syrjälä Punkte 32085

Werfen Sie einen Blick auf CGI in Wikipedia. CGI ist eine Protokoll zwischen dem Webserver und einem externen Programm oder einem Skript, das die Eingaben verarbeitet und Ausgaben erzeugt, die an den Browser gesendet werden.

CGI ist einfach eine Möglichkeit für den Webserver und ein Programm zu kommunizieren, nicht mehr und nicht weniger. Dabei verwaltet der Server die Netzwerkverbindung und das HTTP-Protokoll, während das Programm Eingaben verarbeitet und Ausgaben erzeugt, die an den Browser gesendet werden. Ein CGI-Skript kann grundsätzlich jedes Programm sein, das vom Webserver ausgeführt werden kann und dem CGI-Protokoll folgt. So kann ein CGI-Programm z. B. in C implementiert werden. Das ist jedoch äußerst selten, da C für diese Aufgabe nicht sehr gut geeignet ist.

/cgi-bin/*.cgi ist einfach ein Pfad, in dem die Leute üblicherweise ihr CGI-Skript ablegen. Webserver sind in der Regel standardmäßig so konfiguriert, dass sie CGI-Skripte aus diesem Pfad abrufen.

ein CGI-Skript kann auch in PHP implementiert werden, aber nicht jedes PHP-Programm ist ein CGI-Skript. Wenn der Webserver über einen integrierten PHP-Interpreter verfügt (z. B. mod_php in Apache), wird die CGI-Phase durch ein effizienteres direktes Protokoll zwischen dem Webserver und dem Interpreter übersprungen.

Ob Sie ein CGI-Skript implementiert haben oder nicht, hängt davon ab, wie Ihr Skript vom Webserver ausgeführt wird.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X