C++ CGI-Plugins am Webserver debuggen

Man konnte doch schon in den 80er Jahren C-Programme auf Webservern ausführen, die Webseiten und anderen Schnick-Schnack generierten.

Heute scheint das vergessen, aber es klappt immer noch … mit etwas Hilfe.


Unter CGI verstehen heute alle nur noch Computer Generated Imagery, also Computer-Grafiken.
Doch die ersten Webentwickler verstanden darunter das Common Gateway Interface, also eine Schnittstelle, wie ein Webserver externe Programme aufrufen konnte, um dort Inhalte dynamisch generieren zu lassen.

CGI

Die Idee war simpel: Ein Prozess wurde mit einer Reihe spezieller Umgebungsvariablen gestartet, die als Input dienen sollten und der Prozess schrieb auf STDOUT, was als HTTP-Content zurückgegeben werden sollte.

Der Webserver übernahm also das Parsen der HTTP-Anfrage, startete den Prozess mit den Parametern und leitete dessen Output mit geringen Protokollzusätzen an die Clients weiter.
Die Prozesse konnten - wie auf POSIX Systemen üblich - echte native Programme oder Shell-Scripts sein, die ja mit dem Interpret auch wie native Programme nach außen wirkten.

So entstand die erste große Reihe von dynamischen Web-Content durch Sprachen wie Perl oder PHP.

Im Laufe der Zeit wurde das Konzept der separaten Prozesse aber als veraltet angesehen und durch neuere Verfahren wie FastCGI ersetzt.
Mit FastCGI wird ein Prozess nur einmal gestartet und kommuniziert mit dem HTTP-Server über Sockets. Somit können Zustände im RAM bleiben und ein Prozess kann auch mehrere Anfragen parallel (multithreaded) bearbeiten.

Einsatz mit C++

Ich setzte CGI mit C++ schon vor 12 Jahren ein, um ferige Datensätze aus Auswertungen und graphische Darstellung aus einer Desktop-UI ins Web zu verlagern.
Weil CGI-Parameter einfach per getenv() gelesen und der HTTP Output per std::cout geschrieben werden kann, konnte ich Datensätze mit wenigen Zeilen Code als JSON Objekte ausgeben und an den Client zurücksenden lassen.

Das Thema Authentifizierung übernahm der WebServer (IIS unter Windows, Apache unter Linux) und ich schrieb noch schnell ein paar Zeilen mit statischem HTML-Code um die per JSON gelieferten Daten “bunt” anzeigen zu können.

In Sachen Deployment is “das Web” natürlich jeder Desktop-App überlegen, und somit konnte ich die Vorteile zweier Welten nutzen:

  1. Fertige C++ Libs lieferten bereits die gewünschten Ergebnisse und mussten nur als JSON Datensatz formatiert werden
  2. HTML Seiten schreiben sich schneller als native Desktop-Apps. Jeder geänderte Buchstabe um UI kann mit einem F5 sofort angezeigt werden … das spart viel Zeit, wenn man nicht dauernd was neu kompilieren muss.

Fazit

Meine Webserver unterstützen alle (mit ein paar Config-Anpassungen) CGI-Programme.
Folglich könnte ich auch hier wieder GATE Plugins schreiben, die Features für das Web offenlegen.

Das könnte eine hervorragende Ergänzung zu WASM sein, denn während WASM moderne Browser voraussetzt, kann ein simples CGI-Tool auch klassischen HTML-Code generieren, der auf Browsern von vor 20 Jahren lauffähig ist.

📧 📋 🐘 | 🔗 🔔
 

Meine Dokus über:
 
Weitere externe Links zu:
Alle extern verlinkten Webseiten stehen nicht in Zusammenhang mit opengate.at.
Für deren Inhalt wird keine Haftung übernommen.



Wenn sich eine triviale Erkenntnis mit Dummheit in der Interpretation paart, dann gibt es in der Regel Kollateralschäden in der Anwendung.
frei zitiert nach A. Van der Bellen
... also dann paaren wir mal eine komplexe Erkenntnis mit Klugheit in der Interpretation!