Um auf die von den Benutzern in den Formularen gemachten Eingaben reagieren zu können, oder um Suchmaschinen zu betreiben, muß für jede solche Anfrage auf dem WWW-Server im Moment der Abfrage ein eigenes Programm abgearbeitet werden können. Diese Programme werden vom WWW-Serverprozeß für jeden Request einzeln gestartet. Dementsprechend laufen diese Programme dann auch unter der Benutzerkennung, die dem WWW-Serverprozeß zugeordnet ist. Bei der Erstellung solcher Programme muß entsprechend viel Vorsorge aufgewandt werden, um nicht ungewollt den Benutzern des WWW Zugriff auf Daten zu geben, die eigentlich nicht im WWW zugänglich sein sollten.
Die im, durch das Benutzerformular abgeschickten URL, enthaltenen Informationen werden dem Programm über die Umgebungsvariable QUERY_STRING zugänglich gemacht Wurde ein Formular mit der POST-Methode verwendet, so werden die vom Benutzer im Formular gemachten Angaben an den stdinput des am Server aufgerufenen Programms übergeben. Zusätzlich werden weitere Informationen über den Viewer und den Rechner, an dem der Benutzer arbeitet in folgenden Umgebungsvariablen zugänglich gemacht:
HTTP_USER_AGENT=Mozilla/2.0S (X11; I; IRIX 6.2 IP22) HTTP_HOST=www.uni-bayreuth.de HTTP_ACCEPT=image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, */* REMOTE_HOST=btr0xa.hrz.uni-bayreuth.de REMOTE_ADDR=132.180.7.15
Die komplette Sammlung aller an ein Server-Skripten übergebenen Umgebungsvariablen kann am einfachsten durch ein simples csh-Skript, das als einzigen Befehl das Kommando printenv beinhaltet, überprüft werden. Ein solches Skript findet sich z.B. unter dem URL http://www.uni-bayreuth.de/cgi-bin/test-printenv.
Nachdem bei Server-Skripten nicht von vorneherein klar ist, welches Dateiformat sie als Output liefern werden, müssen Server-Skripten dies in der ersten Zeile ihrer auf stdout gelieferten Ausgabe angeben. Dabei werden MIME-Typenagaben verwendet. Damit hat das Skript http://www.uni-bayreuth.de/cgi-bin/test-printenv folgendes Aussehen:
#!/bin/csh echo Content-type: text/plain echo printenv
Das folgende, etwas kompliziertere Beispiel nimmt zunächst ein Bild mit der am Rechner angeschlossenen Videokamera auf, um es dann in das ''GIF'-Graphikformat umzuwandeln. Um zu verhindern, daß, wenn das Skript mehrere Male parallel aufgerufen wird, sich die parallel laufenden Prozesse gegenseitig die Dateien überschreiben wird die jeweils aktuelle Prozessidentifikationsnummer in den Dateinamen verwendet. Ist das Bild konvertiert, so erzeugt das Skript ein HTML-Dokument, in dem das Bild eingebunden ist. Das Skript hat folgendes Aussehen:
#!/bin/csh echo Content-type: text/html echo cd /usr/http/data/tmp set g=`time vidtomem -f $$ -c 1` set c=`time togif $$-00000.rgb $$.gif` echo "<H1>BLW's Office</h1>" echo "<img src=/tmp/$$.gif><P>" echo "Time used to grab the image $g <BR>" echo "Time used to convert the image $c <BR>"Dieses Skript kann unter dem URL http://www.uni-bayreuth.de/cgi-bin/blw aufgerufen werden. Die einfachste Form eines solchen vom WWW-Server aufzurufenden Programmes ist ein Shell-Script. Shell-Scripten sind aber zugleich auch die unsicherste Form solcher Programme, da sie bereits duch die Eingabe von Strichpunkten und Backslashes in ihrer Variablenverarbeitung sehr gestört werden können.