|
Der CGI-Standard regelt die Zusammenarbeit zwischen
HTTP-Webserver
und Hilfsprogrammen. Als Helfer dienen ausführbare Programme und Script-Programme. |
Ein CGI-Programm stellt als Ausgabe-Produkt meistens HTML-Quelltext her, welchen der Webserver als 'Dynamische Webseite' an den Browser sendet. |
| Dynamische Webseiten | Vergleich: Statische und dynamische Webseiten |
| Webserver | Voraussetzung für CGI-Programme |
| Programme | Direkt ausführbare CGI-Programme (Binaries) |
| Scripts | Indirekt ausführbare Script-Programme |
| Java | Servlets und Applets |
| Javascript | Hilfsprogramme für den Client-Browser |
| Server & Client | Vergleich von Server und Client-Hilfsprogrammen |
| Weitere CGI-Themen auf anderen Seiten | |
Minimal-Anforderung an ein CGI |
|
Parameter-Übergabe mit GET |
|
Parameter-Übergabe mit POST |
|
Execute-Recht für alle ! |
|
| Links |
|
Statische und dynamische Webseiten |
|||
| Statische Webseite | Dynamische Webseite | ||
|---|---|---|---|
Aufruf einer statischen Webseite• Browser fordert eine Webseite an, z.B. demo.html• Webserver erhält die Anforderung • Webserver sendet den Inhalt der verlangten Text-Datei an den Browser. • Browser empfängt die Daten (=HTML Quelltext). • Browser erstellt aus den Daten eine Webseite. |
Aufruf einer dynamischen Webseite (CGI-Programm)• Browser fordert eine Webseite an, z.B. demo.bin (Linux) oder demo.exe (Windows)• Webserver erhält die Anforderung • Server erkennt, dass ein ausführbares Programm angefordert wird und startet es. • Das Programm erzeugt einen Text (HTML Quelltext) und übergibt ihn an den Webserver. • Webserver sendet den erhaltenen Text an den Browser. • Browser empfängt die Daten (=HTML Quelltext). • Browser erstellt aus den Daten eine Webseite. |
||
|
●
Aus Sicht des Browsers ergibt sich kein Unterschied zwischen
einer statischen und einer dynamischen Webseite ! ● Der Unterschied betrifft nur den → Webserver ! |
|||
HTML-QuelltextDie Text-Datei demo.html enthält → HTML Quelltext, d.h. lesbaren Text. Sie ist in einem Verzeichnis des Webserver-PC gespeichert.► Bei Anforderung der Datei erhält ihr Browser genau den darin enthaltenen Text, z.B.
<html> <h2>Datei demo.html</h2> </html> ► Link zur Anforderung der statischen Webseite:
<a href="demo.html">
Statisch
</a>
|
Binär-DateiDie Datei demo.bin ist ein ausführbares Programm in Maschinensprache (Binär, daher nicht als Text lesbar). Sie ist in einem Verzeichnis des Webserver-PC gespeichert.► Bei Anforderung dieser Datei erhält ihr Browser nicht die Datei, sondern jenen Text, der von diesem Programm Live erzeugt wurde. ► Link zur Anforderung der dynamischen Webseite:
<a href="/cgi-bin/demo.bin">
Dynamisch </a>
|
||
|
Einbettung der statischen
Mini-Webseite demo.html |
Einbettung der dynamischen
Mini-Webseite demo.bin |
||
Mit Rechtsklick in eine der eingebetteten Webseiten wird der Quelltext angezeigt:
|
|||
VorteilStatische Webseiten erfordern weniger Aufwand vom Webserver.NachteilKeine Änderung möglich: Jede/r Web-BesucherIn erhält zu jedem Zeitpunkt genau die gleiche Webseite. |
VorteilJe nach Programm kann eine dynamische Webseite bei jeder Anforderung anders aussehen und/oder andere Inhalte bieten.Das ist z.B. für den Zugriff auf Datenbanken, Suchmaschinen usw. unbedingt erforderlich. NachteilDynamische Webseiten werden bei jeder einzelnen Anforderung Live hergestellt, erfordern daher mehr Server-Aufwand. |
||
Webserver |
|
|
CGI-Programme kann man nur zusammen mit einem
→
Webserver verwenden. Ein Webserver ist ein (Hintergrund)-Programm, welches als Dienstleitung Web-Inhalt verteilt, z.B. (HTML)-Webseiten, Grafik, usw. |
Jeder Webserver kann mit beliebig vielen Clients (=Browser-Programmen) zusammenarbeiten.
Voraussetzung ist eine funktionierende Netzwerk-Verbindung zwischen Client und Server. ♦ Details zum Thema (Apache) Webserver |
●
In jeder gängigen Linux-Distribution ist der
→
Apache Webserver für Linux enthalten oder mit Mausklick installierbar.
|
● Für Windows-PC kann man den → Apache Webserver für Windows kostenfrei aus dem Internet laden, muss ihn jedoch selbst installieren und konfigurieren. |
| ● Jedes halbwegs professionelle lokale Netzwerk (LAN) enthält einen Server-PC, auf dem alle gemeinsam nutzbaren Dienste installiert sind - fast immer auch ein Webserver. | ● Ein Webserver-Programm lässt sich jedoch auch an jedem Arbeits-PC installieren. Das ist bei der Leistung moderner PC kein Problem, bietet jedoch viele praktische Möglichkeiten, z.B. die Nutzung moderner Web-Programm-Pakete (GroupWare, Content Management, Wiki, ...). |
| ● Ein Webserver verwaltet CGI-Programme in einem eigens dazu konfigurierten Verzeichnis, meist mit dem Namen cgi-bin | ● Im CGI-Verzeichnis eines Webservers befinden sich sowohl direkt ausführbare Programm-Dateien (Linux-Binaries bzw. Windows *.exe) als auch Script-Programme (z.B. *.pl in der Programmiersprache → Perl). |
Direkt ausführbare Programme (Binaries) |
|
|
•
Binaries sind binäre Dateien, die ein ausführbares Programm enthalten,
z.B. auf Windows *.exe Dateien. Alle anderen Betriebssysteme
brauchen keine besondere Datei-Endung, in den Beispielen dieser Seite werden
ausführbare Linux-Programme jedoch zur besseren Orientierung
mit *.bin bezeichnet. • Direkt ausführbare Programme sind nicht portabel, d.h. man kann sie nur auf PC's jenes Betriebssystems verwenden, für welches sie hergestellt (compiliert) wurden. Man braucht daher eigene Versionen eines CGI-Programms für einen Linux Server-PC und für einen Windows Server-PC. |
•
Zur Herstellung von direkt ausführbaren Programmen verwendet man meistens die
Programmiersprache → C/C++ C/C++ Programme sind in der Herstellung relativ teuer, laufen jedoch mit maximaler Geschwindigkeit. • Eine binäre Programm-Datei kann alle Bytes mit Werten 0...255 enthalten. Im Gegensatz dazu enthalten einfache Text-Dateien nur Bytes 32...126 (Zeichensatz). Man kann die in binären Dateien enthaltenen Programme daher nicht mit einem Text-Editor Programm lesen. |
| Beispiel: Das Programm demo.bin, mit dem im ↑ ersten Kapitel dieser Seite eine dynamische Webseite Live hergestellt wird. | |
Indirekt ausführbare Script-Programme |
|
|
•
Script-Programme sind Dateien, die Anweisungen für eine
(Interpreter)-Programmiersprache als lesbaren Text enthalten. Zur Ausführung wird der Programm-Text von einem sog. Interpreter-Programm gelesen, in Maschinensprache übersetzt und sofort ausgeführt. • Script-Programme brauchen zur Ausführung das Interpreter-Programm der jeweiligen Programmiersprache, welches am Webserver-PC installiert sein muss. Beispiel: Das Script-Programm demo.pl in der Programmiersprache → Perl enthält diese Perl-Anweisungen in Klartext:
#!/usr/bin/perl
In der ersten Text-Zeile befindet sich nach der Marke #! der
Pfad zu jenem Interpreter-Programm, mit dem der Text des Scripts übersetzt und
ausgeführt werden soll. Auf einem Windows Server-PC lautet die erste Zeile z.B.
use POSIX; print "Content-type: text/html\n\n"; print "<html>\n"; print "<h2>Programm demo.pl</h2>\n"; $iso = strftime('%Y-%m-%d %H:%M:%S',localtime(time())); print "Live-Ausführung: $iso\n"; print "</html>\n"; #!C:\Programme\Perl\perl.exe
Das Interpreter-Programm (perl.exe) ist selbst ein direkt
ausführbares Programm für das jeweilige Betriebssystem.
• Das oben angezeigte Script-Programm ist hier ausnahmsweise sichtbar. Normalerweise ist diese Datei nur am Server-PC zugänglich und kann von BesucherInnen weder gelesen noch verändert werden. |
Einbettung der dynamischen
Mini-Webseite demo.pl • Bei dynamischen Webseiten wie dieser sehen sie nicht das Programm sondern den vom Programm Live erzeugten Text. Test: Programm erneut ausführen. • Die meisten Script-Programme verwenden eine der Programmiersprachen Perl, PHP oder Python, die man kostenfrei in jedem gängigen Betriebssystem installieren kann. • Vorteile: Script-Programme sind (mit Ausnahme der 1.Zeile) portabel, d.h. man kann sie unverändert auf jedem Betriebssystem einsetzen. Sie lassen sich besonders rasch und preiswert entwickeln, und man kann sehr viele Beispiele aus dem Internet laden. • Nachteile: Script-Programme werden bei jeder einzelnen Anforderung erneut übersetzt und ausgeführt. Das erfordert deutlich mehr Server-Zeit als ↑ direkt ausführbare Programme |
PerlIn dieser modernen Programmiersprache sind viele fertig erhältliche CGI-Programme erstellt.Natürlich kann man Perl Script-Programme auch selbst herstellen. ● Auf jedem gängigen Linux-System ist Perl bereits installiert. ● Für Windows-PC kann man Perl kostenfrei aus dem Internet laden und installieren (→ Perl auf Windows). |
●
Perl ist eine modulare Programmiersprache: Es gibt hunderte von Perl-Modulen für
alle denkbaren Anwendungen. ● Perl Script-Programme sind System-unabhängig, d.h. sie laufen unverändert auf Linux, Windows, oder MacOS. Daher gibt es keine speziellen Versionen für bestimmte Systeme. Ausgenommen sind Perl-Programme zur Systemverwaltung: Sie werden speziell für ein bestimmtes System hergestellt. ♦ Details zur Entwicklung von Perl-(CGI)-Programmen |
PHPDiese moderne Programmiersprache wird ebenfalls für viele fertig erhältliche CGI-Programme oder für eigene Entwicklungen eingesetzt.● Auf jedem gängigen Linux Server-System ist PHP bereits installiert. Auf Desktop-Systemen kann man PHP mit Mausklick installieren. ● Für Windows-PC kann man PHP kostenfrei aus dem Internet laden und installieren (→ PHP auf Windows). |
● PHP ist eine modulare Programmiersprache: Es gibt zahlreiche PHP-Module für alle denkbaren Anwendungen. ● PHP Script-Programme sind System-unabhängig, d.h. sie laufen unverändert auf allen gängigen Betriebssystemen. Davon ausgenommen sind nur wenige Programme, die mit Besonderheiten eines Systems (z.B. Windows Registry-Datenbank) arbeiten. ● PHP ist besonders einfach zu lernen und anzuwenden. Die meisten dynamischen Webseiten dieses Webs verwenden PHP. ♦ Details zur Entwicklung von PHP-Programmen |
Alternative: Java |
|
|
Die moderne Programmiersprache
→ Java verwendet eine Kombination von Compiler- und Interpreter-Methoden. Der Java-Quelltext wird von einem Compiler-Programm einmalig übersetzt. Das Ergebnis ist jedoch nicht ein ↑ direkt ausführbares Programm (wie mit der Programmiersprache C/C++) sondern eine binäre Datei *.class in Java-ByteCode. Diese Datei wird von einem virtuellen Betriebssystem (JVM) ausgeführt, welches zwischen ByteCode-Programm und dem 'echten' Betriebssystem vermittelt. |
● Vorteile: Der Quelltext wird nur einmal compiliert, das spart Zeit und macht Java-Programme sehr schnell. Die ByteCode-Datei ist portabel, d.h. man braucht nur eine Version für alle Betriebssysteme. ● Nachteile: Der Java Runtime Engine (JRE) muss installiert werden, denn damit wird das JVM-System betrieben. Den JRE erhält man kostenfrei für alle gängigen Betriebssysteme. Zum erstmaligen Laden braucht das JVM-System relativ lange - das fällt allerdings bei einem Server-PC nicht ins Gewicht, weil der Server meist mehrere Wochen oder Monate ohne Unterbrechung läuft. |
Java AppletsDieser Typ von Java-Programmen lässt sich in Webseiten einbetten und läuft am Client-PC (d.h. an ihrem PC).● Java (der Runtime Engine JRE) ist in allen gängigen Linux-Distributionen enthalten oder lässt sich mit Mausklick installieren. ● Für Windows-PC muss man den JRE laden und selbst installieren. Das ist kostenfrei und problemlos, und in jedem Fall sehr empfehlenswert. Man kann Java Programme (insbesondere auch Java-Applets) kostenfrei selbst entwickeln. Diese Programme verwenden normalerweise ein komfortables grafisches User-Interface (GUI) und erfodern daher zur Entwicklung fortgeschrittene Kenntnisse. ♦ Details zur Entwicklung von Java-Programmen |
Java ServletsDieser Typ von Java-Programmen arbeitet als Hilfsprogramme für Webserver.● Tomcat ist ein kostenfreier Webserver, der auf die Zusammenarbeit mit Java Servlets spezialisiert ist. Man kann Tomcat gleichzeitig mit einem Apache Webserver betreiben. Man kann Java Servlets für die gleichen Zwecke verwenden wie andere CGI-Programme. Typisch ist die Erzeugung dynamischer Webseiten sowie von dynamischer Grafik. ● Java Servlets arbeiten sehr effizient, erfordern jedoch zur Programmierung und Implementierung fortgeschrittene Kenntnisse. |
Alternative: Javascript |
|
| Mit der Programmiersprache → Javascript (JS) werden normalerweise keine CGI-Programme hergestellt. | Javascript wird hier kurz erwähnt, weil man dynamisch veränderbare Webseiten nicht nur auf Server-Seite (mit CGI-Programmen) sondern auch auf Client-Seite (mit Javascript) programmieren kann. |
|
●
Die Programmiersprache
→
Javascript ist in jedem gängigen Browser-Programm enthalten, d.h. am
Client-PC einer/s Web-BesucherIn. ● Javascript erfordert keinerlei Installation, weder am Webserver noch am Client-PC. ● JS-Programme sind im Quelltext einer Webseite enthalten und werden am Client-PC (d.h. an ihrem eigenen PC) ausgeführt. ● Javascript ist schnell und flexibel, jedoch in der Anwendung beschränkt: Der Zugriff auf Resourcen des eigenen PC (Dateien, Registry-Datenbank, ...) ist aus Sicherheits-Gründen verboten. ● Javascript-Programme werden Live interpretiert, d.h. die Anweisungen des JS-Quelltextes werden von dem im Browser enthaltenen JS-Interpreter gelesen, übersetzt und sofort ausgeführt. ● Man kann jeden Browser so konfigurieren, dass die Ausführung von Javascript Programmen verhindert wird. Die meisten Seiten dieses Webs enthalten zur Live-Demonstration der Themen Javascript-Programme, die in diesem Fall nicht ausführbar sind. |
●
Javascript-Lösungen findet man sehr zahlreich im Internet. Man kann den
JS-Quelltext in eigene Webseiten einbauen. Voraussetzung ist ein wenig Erfahrung bei
der Herstellung von Webseiten. ● Die Programmierung einfacher JS-Programme ist vergleichsweise leicht. AnfängerInnen können funktionierende Ergebnisse innerhalb einer Stunde erwarten. Für komplexe Programme gibt es allerdings keine zeitliche Obergrenze ... ♦ Vergleich & Gegenüberstellung von Javascript und Server-(Script)-Programmen im nächsten ↓ Kapitel. ♦ Details zur Entwicklung von Javascript-Programmen |
Server- oder Client-Programme |
|||||
|
Dynamische (veränderliche) Webseiten lassen sich mit unterschiedlichen
Methoden herstellen. Oft ist es möglich, eine gewünschte Funktion wahlweise mit einem Server-Programm oder mit einem Client-Programm auszuführen. Beide Möglichkeiten werden hier verglichen: |
|||||
| Server-Hilfsprogramme | Client-Hilfsprogramme | ||||
|---|---|---|---|---|---|
Perl oder PHPsind typische Server-Programmiersprachen. Sie werden häufig als Webserver-(CGI)-Hilfsprogramme verwendet.● Die notwendigen Komponenten sind für alle gängigen Betriebssysteme kostenfrei verfügbar: (Apache) → Webserver, → Perl und → PHP. ● Jede gängige Linux Server-Distribution enthält diese Komponenten, in jeder Linux Desktop-Distribution kann man sie mit Mausklick installieren. |
Javascriptist eine typische Client-Programmiersprache.● Javascript ist in jedem Browser integriert und dient am eigenen PC als Hilfsprogramm für den Browser. |
||||
Programme für Perl oder PHPDer Quelltext ist in Dateien *.pl bzw. *.php enthalten. Man nennt solche Dateien Script-Programme, da sie aus lesbarem Text bestehen und Anweisungen für die jeweilige Programmiersprache enthalten.• Alternativ kann man CGI-Programme auch als direkt ausführbare Programme erstellen (z.B. mit C++). Diese laufen wesentlich schneller, erfordern jedoch weit mehr Aufwand für ihre Entwicklung. |
Programme für JavascriptDer Quelltext ist in einem <script>-Element in den Quelltext einer HTML-Webseite *.html eingebettet. Die Programme bestehen ebenfalls aus lesbarem Text.• Optional kann man Javascript Quelltext in eigene Dateien *.js auslagern. Das hat Vorteile für wiederverwendbare Programme: Sie werden nur einmalig via Internet übertragen. Für jede weitere Anforderung (durch andere Webseiten) verwendet der Browser die Datei aus seinem lokalen Cache-Speicher. |
||||
Server-PCScript-Programme für Perl oder PHP werden am Server-Computer ausgeführt.Um die Programme zu nutzen, müssen diese ein Produkt erzeugen, welches an ihren PC gesendet wird, z.B. eine Webseite oder eine Grafik. • Bei mehrmals wiederholten Anforderungen müssen die erzeugten Produkte jedesmal über das Internet zum Client-PC transportiert werden. |
Client-PCJavascript-Programme werden auf ihrem eigenen PC ausgeführt. Diese Programme können unmittelbar auf ihrem PC wirksam werden, z.B. ein neues Fenster anlegen, eine Webseite laden, eine geladene Webseite ändern, etc.• Da Javascript-Programme am eigenen PC laufen, werden sie bei mehrmals wiederholter Anforderung blitzschnell ausgeführt - Es fallen keine Übertragungszeiten an. |
||||
Quelltext unsichtbarDer Client (d.h. ihr Browser) erhält niemals das Script-Programm, sondern stets nur das damit erzeugte Produkt - meist eine HTML Webseite.• Server-Programme sind daher vor unbefugter Veränderung weitgehend sicher. |
Quelltext unbeschränkt sichtbarAlle Javascript-Anweisungen sind im Quelltext der Webseite sichtbar. Jede/r kann diese Programme für eigene Zwecke verwenden oder beliebig verändern.• Javascript kann man daher nicht für Sicherheits-kritische Anwendungen verwenden. |
||||
LangsamBei Verwendung von Server-Programmen ist die doppelte Übertragungszeit (Anforderung + Antwort) meist der langsamste Schritt. Es hilft nur wenig, die Server-Hardware zu beschleunigen oder die Server-Programme zu optimieren.
|
SchnellJavascript-Programme werden ungefähr gleich schnell ausgeführt wie typische Server-Programme. Allerdings entfällt die Übertragungszeit. Daher laufen Javascript-Programme in der Praxis wesentlich rascher. Das gilt besonders für wiederholt ausgeführte Programme.
|
||||
SicherServer-Programme sind für AnwenderInnen unsichtbar und unzugänglich. Es ist nicht möglich, Server-Programme für eigene Zwecke zu kopieren, oder sie am Server zu verändern.• Sicherheits-kritische Anwendungen werden daher ausnahmslos durch Server-Programme ausgeführt. Allerdings ist Sicherheit ein relativer Begriff - Mit entsprechendem Aufwand kann ein Angreifer jede Sicherheits-Schranke durchbrechen. |
UnsicherJavascript-Programme sind offen zugänglich und können vor Mißbrauch nicht geschützt werden.Das bedeutet nicht, dass Javascript-Programme schädlich sein könnten, sondern dass Hersteller oder Betreiber keinen Einfluss auf die Verwendung haben: Jede/r BesucherIn kann Javascript Programme aus dem erhaltenen Quelltext kopieren und für eigene Webseiten direkt oder verändert einsetzen. |
||||
ArgumenteAn Server-Programme kann man bei der Anforderung individuelle Daten der/des AnwenderIn übergeben. Solche Daten (Argumente, Parameter) werden z.B. automatische durch <form> Formular-Elemente erzeugt.Server-Programme können diese Daten lesen und entsprechend darauf reagieren. ♦ Details und Live-Demo von Argumenten mit PHP. |
Argumentekann man mit der GET-Methode auch an Javascript-Programme übergeben.Das ist nur wenig bekannt, funktioniert jedoch einwandfrei. ♦ Details und Live-Demo von Argumenten mit Javascript |
||||
Server-ResourcenServer-Programme laufen am Webserver-PC und verfügen über alle Resourcen, die dort verfügbar und erlaubt sind.Typische Server-Resourcen sind z.B. Datenbanken. Dynamische Webseiten sind die Standard-Methode für den Zugriff auf Datenbanken. Die Ergebnisse von Anfragen (z.B. an Suchmaschinen) können auf statischen Webseiten nicht dargestellt werden, weil darin für jede Anfrage andere Daten enthalten sind. |
Client-ResourcenJavascript-Programme laufen am eigenen (Client)-PC. Die Web-Standards erlauben aus Sicherheits-Gründen keinen Zugriff auf das eigene Dateisystem. Typische Resourcen wie Dateisystem, Windows-Registry usw. kann man daher mit Javascript-Programmen nicht erreichen.Diese Sicherheits-Schranke ist ein wichtiger Schutz vor Missbrauch. • Auf Windows-Systemen ist es möglich, diese Schranke mit ActiveX zu ignorieren. Mittlerweile wurden Produkte wie der M$IE Browser mit unzähligen Sicherheits-Schranken ausgestattet, um diese und andere Sicherheits-Lücken wieder zu schließen. |
||||
Server-ZeitServer-Resourcen sind ein knappes und meist relativ teures Gut. Man muss alle Möglichkeiten nutzen, um den Server zu entlasten. Jede Entlastung steigert die Server-Leistung und nutzt daher allen Clients - nicht nur jenen, die eine bestimmte dynamische Webseite anfordern. |
Client Prozessor-ZeitAm Client ist normalerweise viel ungenutzte Prozessor-Kapazität verfügbar, d.h. ihr PC muss häufig warten (z.B. auf Antworten von entfernten Webservern). Wenn man Prozessor-Arbeit von Server zum Client verlagert, verbessert sich die Geschwindigkeit meist erheblich. |
||||
| Die beste Optimierung erreicht man durch kluge Verteilung der Aufgaben zwischen Server und Client. Dabei sollte man je nach gestellter Aufgabe die Vorteile nutzen und die Nachteile vermeiden. | Oft ist es sinnvoll, beide Technologien miteinander zu verbinden: Der gleichbleibende Haupt-Teil einer Webseite wird z.B. als statische Datei *.html ausgelegt, darin werden dynamische Teile als Script-Programme *.pl oder *.php eingebettet. | ||||
|
|
|
extropia:
CGI & Perl go2net (Paul Phillips): Safe CGI Programming - von 1995, noch immer aktuell ! NCSA: Writing secure CGI scripts |
Wikipedia:
Common Gateway Interface
|
|
|