Web-Server können auch spezielle Programme ausführen, die es erlauben, den Dokumenten oder dem Web-Server selbst erweiterte Funktionalitäten hinzuzufügen. Sogenannte Hilfsprogramme, die das Erweitern der Server-Funktionalität erlauben, stellen sich aus vordefinierten Funktionen zusammen, mit denen die Kernfunktionen des Servers angesprochen und somit erweitert oder verändert werden können. Das Schreiben von Hilfsprogrammen erfordert umfassende Programmierkenntnisse, da ein fehlerhaftes Programm den Server zum Absturz bringen kann.
Mit Hilfe von CGI-Programmen können Web-Server Clients dynamisch erzeugte Web-Seiten anbieten. Meistens ist ein CGI-Programm mit einem Formular verknüpft. Nach Eingabe der Daten in das Formular und anschließendem Abschicken des Formulars werden die eingegebenen Daten zusammen mit dem Namen des CGI-Programms, das sie bearbeiten soll, vom Web-Client an den Server geschickt. Der Web-Server ruft dann das CGI-Programm auf und übergibt ihm die Daten.
Ein Server nutzt das Common Gateway Interface, um Daten an das CGI-Programm zu übergeben. Dabei wird die Art der Datenübertragung durch die zwei HTTP-Methoden GET oder POST bestimmt, mit denen ein CGI-Programm aufgerufen werden kann. Wird ein CGI-Programm mit Hilfe der GET-Methode aufgerufen, so übergibt der Client die Daten im URI-Pfad an den Server. Ein URI (Uniform Resource Identifier) ist eine Zeichenreihe, die eine bestimmte Datei identifiziert. Der Ort, an dem die Datei auf einem Web-Server gespeichert ist, kann entweder absolut - also mit Servername, Pfad und Name der Datei - oder relativ zu einem Basis-URI - also nur Pfad und Name der Datei - angegeben werden. Dagegen enthält ein URL ( Uniform Resource Locator) im Gegensatz zu einem URI zusätzlich noch das Zugriffsprotokoll, mit dem auf die Datei zugegriffen wird. Ein Beispiel-Aufruf für ein CGI-Programm mittels einem URI wäre:
GET /cgi-bin/script?ort=hier&zeit=jetzt HTTP/1.0
``/cgi-bin/script'' stellt dabei das aufgerufene CGI-Programm dar, dem, getrennt durch ein ''?'', die Daten übergeben werden müssen. In diesem Fall sind es die Variable=Wert-Paare ``ort=hier'' und ``zeit=jetzt''. Am Ende der Anfragezeile wird die HTTP-Version angegeben, die für die Anfrage verwendet wird.
Der Server muß diesem CGI-Programm die Daten bereitstellen. Dazu verwendet er entweder Umgebungsvariablen oder die Standardeingabe. Im Falle eines GET-Aufrufs wird die Zeichenkette in der Umgebungsvariable ''QUERY_STRING'' bereitgestellt. Bei einem POST-Aufruf wird in der Variable ''CONTENT_LENGTH'' die Länge der Zeichenkette in Bytes eingetragen, wobei die eigentliche Zeichenkette dem CGI-Programm über die Standardeingabe (STDIN) zur Verfügung gestellt wird. Die POST-Methode eignet sich im Gegensatz zur GET-Methode eher für die Übertragung von größeren Datenmengen.
Das CGI-Programm verarbeitet die ihm übergebenen Daten und erzeugt eine Ausgabe, die vom Web-Server an den Client geschickt wird (siehe Abbildung ).
Clients und Server benutzen das HyperText Transfer Protocol (HTTP) zur Kommunikation. Für jede Anfrage eines Web-Clients an einen Web-Server wird eine Verbindung zwischen den beiden hergestellt, über die Daten ausgetauscht werden und die anschließend wieder beendet wird. Ein Client schickt dabei die Anfrage an den Server, woraufhin dieser die angeforderte Datei zurückschickt. Enthält das zurückgeschickte Dokument auch noch eingebundene Bilder-Dateien oder Dateien anderen Formats, so muß zur Übertragung jeder einzelnen Datei eine eigene Verbindung zwischen dem Server und dem anfragenden Client aufgebaut werden, da je HTTP-Request nur eine Datei übertragen werden kann.
Das HTTP ist ein zustandsloses Protokoll der Anwendungsebene. Das heißt, daß sich Web-Server nach Beendigung einer Verbindung keine Statusinformationen zu der Verbindung merken. Der Server gibt nach dem Absenden der Antwort alle Ressourcen, die zur Bearbeitung der Client-Anfrage nötig waren, wieder frei.
Eine Anfrage wird als HTTP-Request bezeichnet und enthält folgende Felder:
HTTP-Methode Request-URI HTTP-VersionDie HTTP-Methode kann GET, HEAD, POST, PUT, DELETE oder TRACE sein und beschreibt die Art, wie eine Datei vom Server an den Client zurückgesandt werden soll. Mit der Methode GET wird z.B. eine Datei angefordert, deren Name in der Request-URI angegeben wird, während mit der Methode HEAD nur Informationen über die Datei angefordert werden, nicht aber deren Inhalt. Diese Methode wird meistens verwendet, um das Datum oder die Größe der Datei zu erfahren. Die Adresse der Datei kann in dem Request-URI auf zwei Arten angegeben werden:
GET http://www.myserver.tld/file.html HTTP/1.1falls die Anfrage über einen Proxy umgeleitet wird, oder
GET file.html HTTP/1.1 Host: www.myserver.tldfalls die Anfrage direkt an den Server gesendet wird, auf dem sich die Datei befindet.
Die Antwort auf eine Anfrage wird als HTTP-Response bezeichnet und besteht aus einer Status-Zeile, einem Response-Header und gegebenfalls dem Inhalt der angeforderten Datei, dem Message-Body. Die Status-Zeile gibt die verwendete HTTP-Version an, einen Status-Code (siehe dazu Anhang ) und die dazugehörige Beschreibung des Status-Code. In dem Response-Header sendet der Server zusätzliche Informationen über sich selbst an den Client, Informationen über die Art und den Typ der gerade übertragenen Datei oder auch über die Art der Authentifizierung, die notwendig ist, falls man auf eine geschützte Datei zugreift.
Durch das steigende Interesse am World Wide Web hat sich die Struktur der Web-Server, die Informationen zum Abruf anbieten, sehr stark verzweigt und erweitert, so daß eine Vielzahl kommerzieller Dienstleister das Bereitstellen der Server übernommen hat. Solche Dienstleister heißen Internet Service Provider und bieten ihren Kunden nicht mehr nur die Anbindung ihrer Unternehmen an das Internet, sondern unter anderem auch den Betrieb deren Web-Server oder auch nur das Bereitstellen der Informationsseiten im Web.
Wenn jemand im World Wide Web Informationen zur Verfügung stellen möchte, so müssen die gesamten Dokumente auf einem Web-Server gespeichert werden. Ob eine Firma ihren eigenen Web-Server betreibt oder sich aus Gründen der Effizienz oder der Bequemlichkeit mit mehreren anderen einen teilt, muß in Erwägung gezogen werden. Für jede Entscheidung gibt es mehrere Gründe und mehrere Lösungen. Die bekanntesten sind folgende: