De Common Gateway Interface (CGI) is een standaardprotocol voor webservers om externe programma's, meestal scripts, uit te voeren en de uitvoer terug te sturen naar de webclient (meestal een webbrowser). Het fungeert als een brug tussen de webserver en andere applicaties. Hier is een overzicht van hoe het werkt:
1. Klantverzoek: Een gebruiker heeft interactie met een webpagina (vult bijvoorbeeld een formulier in, klikt op een link) waardoor een verzoek naar de webserver wordt gestuurd. Dit verzoek bevat vaak parameters of gegevens die het script moet verwerken.
2. Server ontvangt verzoek: De webserver ontvangt het verzoek en geeft aan dat het door een CGI-script moet worden afgehandeld. Dit wordt meestal bepaald door de URL (bijvoorbeeld een `.cgi`-extensie) of serverconfiguratie.
3. Server voert script uit: De server roept het CGI-script aan. Dit omvat het creëren van een nieuw proces waarin het script moet worden uitgevoerd, waardoor de beveiligingsisolatie tussen het script en de server zelf wordt gegarandeerd. Dit is van cruciaal belang, omdat een gecompromitteerd CGI-script potentieel de hele server kan beïnvloeden.
4. Scriptverwerkingsverzoek: Het script ontvangt invoer van de server, inclusief de verzoekparameters van de client (zoals formuliergegevens), omgevingsvariabelen (zoals het IP-adres van de gebruiker) en standaardinvoer. Vervolgens verwerkt het deze informatie en genereert het output.
5. Script verzendt reactie: Het script stuurt zijn uitvoer terug naar de webserver via standaarduitvoer (stdout) en standaardfout (stderr). De uitvoer omvat doorgaans de HTTP-headers (statuscode, inhoudstype, enz.) en de daadwerkelijke inhoud die in de browser moet worden weergegeven (bijvoorbeeld HTML, afbeeldingen, tekst).
6. Server verzendt antwoord naar client: De webserver ontvangt de uitvoer van het script, controleert de HTTP-headers en stuurt het antwoord terug naar de webbrowser van de client. De browser geeft vervolgens de ontvangen inhoud weer.
Belangrijke aspecten en beperkingen:
* Beveiliging: Omdat CGI-scripts als afzonderlijke processen worden uitgevoerd, zijn zorgvuldige beveiligingsmaatregelen van cruciaal belang. Eventuele kwetsbaarheden in een CGI-script kunnen worden uitgebuit.
* Prestaties: Het creëren van een nieuw proces voor elk verzoek kan veel middelen vergen, vooral onder zware belasting. Dit leidt tot langzamere prestaties in vergelijking met modernere benaderingen.
* Taalonafhankelijkheid: CGI-scripts kunnen in elke programmeertaal worden geschreven die de vereiste uitvoer kan produceren. Deze flexibiliteit is een belangrijk voordeel.
* Omgevingsvariabelen: De webserver levert een reeks omgevingsvariabelen aan het CGI-script en biedt belangrijke contextuele informatie.
* Kopteksten: Het script is verantwoordelijk voor het uitvoeren van de juiste HTTP-headers om het inhoudstype aan te geven (bijvoorbeeld `text/html`, `image/jpeg`).
Moderne alternatieven:
Hoewel CGI nog steeds functioneel is, is deze grotendeels vervangen door efficiëntere en veiligere technologieën zoals:
* SnelleCGI: Verbetert de prestaties door de scriptprocessen levend te houden, waardoor de overhead van het maken van processen voor elk verzoek wordt vermeden.
* WSGI (Python): Een gestandaardiseerde interface tussen Python-webapplicaties en webservers.
* CGI-alternatieven voor andere talen: De meeste moderne webframeworks bieden ingebouwde mechanismen om verzoeken efficiënter af te handelen dan rechtstreeks op CGI te vertrouwen.
Samenvattend biedt CGI een fundamentele manier voor webservers om te communiceren met externe programma's, maar lijdt het onder prestatie- en beveiligingsproblemen die hebben geleid tot de achteruitgang ervan ten gunste van modernere benaderingen. Het begrijpen van CGI is nog steeds nuttig voor het begrijpen van de geschiedenis en de onderliggende principes van de ontwikkeling van webapplicaties. |