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)

13voto

prodigitalson Punkte 59250

CGI leitet die Anfrage im Wesentlichen weiter an tout Interpreter, der mit dem Webserver konfiguriert ist - das kann Perl, Python, PHP, Ruby, C oder so ziemlich alles sein. Perl war früher am weitesten verbreitet, weshalb man es oft im Zusammenhang mit CGI sieht.

CGI ist nicht tot. Tatsächlich lassen die meisten großen Hosting-Unternehmen PHP als CGI und nicht als mod_php laufen, weil es die Konfiguration auf Benutzerebene und einige andere Dinge bietet, obwohl es langsamer ist als mod_php. Der Hauptunterschied besteht darin, dass ein Servermodul als Teil der eigentlichen Serversoftware läuft - während CGI völlig außerhalb des Servers liegt. Der Server verwendet das CGI-Modul nur, um zu bestimmen, wie Daten an den externen Interpreter weitergegeben und empfangen werden.

2 Stimmen

Nicht abwertend, aber die meisten Python-Web-Installationen, die ich gesehen habe, waren auf mod_wsgi oder mod_python.

0 Stimmen

So verwenden die meisten Leute den Begriff CGI-Skript, aber es ist nicht ganz das, was der Begriff bedeutet.

0 Stimmen

Sie sagen Interpreter, aber C wird selten interpretiert und kompilierte Programme, wie z.B. in C kompilierte Programme, können für CGI verwendet werden.

12voto

CGI ist ein Mechanismus, bei dem ein externes Programm vom Webserver aufgerufen wird, um eine Anfrage zu bearbeiten, wobei Umgebungsvariablen und Standardeingaben verwendet werden, um die Anfragedaten an das Programm weiterzuleiten. Die genaue Sprache, in der das externe Programm geschrieben ist, spielt keine Rolle, obwohl es einfacher ist, CGI-Programme in einigen Sprachen zu schreiben als in anderen.

Da CGI-Skripte Ausführungsrechte benötigen, erlaubt httpd standardmäßig nur CGI-Programme im Verzeichnis cgi-bin Verzeichnis aus (möglicherweise jetzt fehlgeleiteten) Sicherheitsgründen ausgeführt werden.

Die meisten PHP-Skripte laufen im Webserverprozess über mod_php . Dies ist keine CGI.

CGI ist langsam, da das Programm (und der zugehörige Interpreter) für jede Anfrage neu gestartet werden muss. Moderne Alternativen sind die eingebettete Ausführung, die von mod_php verwendet wird, und langlaufende Prozesse, die von FastCGI verwendet werden. Jede Sprache kann ihre eigene Art haben, diese Mechanismen zu implementieren, daher sollten Sie sich gut informieren, bevor Sie auf CGI zurückgreifen.

0 Stimmen

@Ignacio Vazquez-Abrams: Wenn die CGI-Schnittstelle einen neuen Prozess erstellt, jedes Mal, wenn sie eine Anfrage für CGI-Ressourcen erhält, was ist dann der Ausführungsunterschied zwischen CGI und mod_php??????? sind CGI und mod_php dasselbe ???? oder ist es möglich, PHP-Skripte zu schreiben, die unter der CGI-Schnittstelle und nicht unter mod_php laufen???

0 Stimmen

@Hardik: mod_php läuft als Teil von HTTPd, der für seine eigenen Prozesse verantwortlich ist.

0 Stimmen

Was ist dieses "externe Programm"? Ist es ein Interpreter, wenn ich php mit php-fpm ausführe?

10voto

Michał Leon Punkte 1906

Ein Beispiel aus der Praxis: eine komplizierte Datenbank, die auf einer Website angezeigt werden muss. Da die Datenbank um 1986 (!) entwickelt wurde, wurden viele Daten auf verschiedene Weise gepackt, um Speicherplatz zu sparen.

Im weiteren Verlauf der Entwicklung konnten die Entwickler komplizierte Datenanfragen nicht mehr allein mit SQL lösen, weil zum Beispiel die Sortieralgorithmen ungewöhnlich waren.

Es gibt drei sinnvolle Lösungen:

  1. Schnell und schmutzig: Senden Sie die ungefilterten Daten an PHP und sortieren Sie sie dort. Offensichtlich eine sehr teure Lösung, da dies bei jedem Aufruf der Seite wiederholt werden würde
  2. ein Plugin für die Datenbank-Engine zu schreiben - aber der Administrator war nicht bereit, fremden Code auf seinem Server laufen zu lassen, oder
  3. können Sie die Daten in einem Programm (C, Perl, usw.) verarbeiten und HTML ausgeben. Das Programm selbst befindet sich in /cgi-bin und wird vom Webserver (z. B. Apache) direkt aufgerufen, nicht über PHP.

CGI führt Ihr Skript in Lösung Nr. 3 aus und gibt den Effekt an den Browser aus. Sie haben die Geschwindigkeit eines kompilierten Programms, die Flexibilität einer Sprache, die breiter ist als SQL, und Sie müssen keine Plugins für den SQL-Server schreiben. (Auch hier handelt es sich um ein Beispiel speziell für SQL und C)

2 Stimmen

Die beste Antwort für mich, ich habe sie bekommen.

9voto

user34660 Punkte 2234

Ein CGI-Skript ist ein Konsolen-/Shell-Programm. Wenn Sie unter Windows ein Eingabeaufforderungsfenster verwenden, führen Sie Konsolenprogramme aus. Wenn ein Webserver ein CGI-Skript ausführt, gibt er über Umgebungsvariablen oder "Standardeingabe" Eingaben an das Konsolen-/Shell-Programm weiter. Die Standardeingabe ist vergleichbar mit der Eingabe von Daten in ein Konsolen-/Shell-Programm; im Falle eines CGI-Skripts übernimmt der Webserver das Eintippen. Das CGI-Skript schreibt Daten in die "Standardausgabe", und diese Ausgabe wird als HTML-Seite an den Client (den Webbrowser) gesendet. Die Standardausgabe entspricht der Ausgabe, die Sie in einem Konsolen-/Shell-Programm sehen, nur dass der Webserver sie liest und aussendet.

Ein CGI-Skript kann über einen Browser ausgeführt werden. Der URI enthält in der Regel einen Abfrage-String, der dem CGI-Skript übergeben wird. Wenn die Methode "get" ist, wird der Abfrage-String dem CGI-Skript in einer Umgebungsvariablen namens QUERY_STRING zur Verfügung gestellt. Bei der Methode "post" wird der Abfrage-String dem CGI-Skript über die Standardeingabe übermittelt (das CGI-Skript liest den Abfrage-String von der Standardeingabe).

Eine frühe Verwendung von CGI-Skripten war die Verarbeitung von Formularen. In den Anfängen von HTML hatten HTML-Formulare typischerweise ein "action"-Attribut und eine Schaltfläche, die als "Submit"-Schaltfläche bezeichnet wurde. Wenn die Schaltfläche "Submit" gedrückt wird, wird die im "action"-Attribut angegebene URI mit den Daten aus dem Formular als Query-String an den Server gesendet. Wenn die "action" ein CGI-Skript angibt, wird das CGI-Skript ausgeführt und erzeugt eine HTML-Seite.

RFC 3875 "The Common Gateway Interface (CGI)" definiert CGI teilweise unter Verwendung von C, indem gesagt wird, dass auf Umgebungsvariablen "durch die C-Bibliotheksroutine getenv() oder die Variable environ zugegriffen wird".

Wenn Sie ein CGI-Skript mit C/C++ entwickeln und dazu Microsoft Visual Studio verwenden, würden Sie ein Konsolenprogramm entwickeln.

0 Stimmen

Ein "CGI-Skript" ist ein weit gefasster Begriff und kann auch ausführbare Dateien umfassen.

8voto

Nathan Osman Punkte 67377

Die Idee hinter CGI ist, dass ein Programm/Skript (egal ob Perl oder sogar C) eine Eingabe über STDIN (die Anfragedaten) und gibt Daten über STDOUT (Echo, printf Aussagen).

Der Grund für die meisten PHP Skripte nicht qualifiziert sind, ist, dass sie unter dem PHP Apache-Modul.

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