Common Gateway Interface

Common Gateway Interface (CGI) er en protokoll for å koble ekstern programvare med en tjenermaskin, vanligvis kalt en nett-tjener. Dette lar tjeneren sende forespørsler fra en klients nettleser til det eksterne programmet. Nett-tjeneren kan deretter sende svaret fra programmet til nettleseren.
CGI-systemet er et resultat av diskusjoner på epostlister mellom Rob McCool, John Franks, Ari Luotonen, George Phillips og Tony Sanders i 1993.  De tidlige spesifikasjonene, og en referanseimplementasjon, ble laget av Rob McCool, da han arbeidet på NCSA. Implementasjonen ble gjort på en NCSA HTTPd nettjener ved å bruke variabler til å lagre parametre som ble sendt fra nettjenerens programkjøringsdel, og gitt til CGI-systemet som et uavhengig program.
Wikiene er eksempler på CGI-program. Nettleseren spør etter informasjon, tjeneren vil gi informasjon (hvis den har), gjøre denne informasjonen om til html-kode og sende resultatet tilbake til nettleseren – eller sende en side som ber brukeren om å lage resultatet. Alle wiki-operasjoner styres av dette ene programmet.
Fra nettjenerens synspunkt virker CGI på den måten at visse adresser (for eksempel http://www.example.com/wiki.cgi) er definert som adresser CGI-programmet skal lage. Når tjeneren mottar en forespørsel til en passende nettadresse, med data som klienten sendte, blir CGI-programmet kjørt. Tjeneren gir passende hode-del til resultatet, som sendes tilbake til klienten.
Dette er en teknologi som er veldig tung for nettjeneren, fordi det vanligvis bruker en egen, ny kopi av CGI-programmet i hver eneste forespørsel klientene gjør. Dette har inspirert mer effektive teknologier som Perl, ASP, JSP og PHP som lar script-tolkere integreres inni nett-tjenere som moduler. Dermed unngår man å hele tiden måtte laste inn og starte tolkeprogram.


== Andre måter å utføre script-tolking ==
Dét å måtte kjøre ut en ny prosess for å kompilere programkoden kan endres hvis CGI-koden endres litt. Ett eksempel på en slik endring er FastCGI, andre eksempler inkluderer program-akseleratorer som forhåndskompilerer nettscriptene slik at nye forespørsler om scriptene sendes til den forhåndskompilerte koden istedenfor å kompilere koden på nytt hver gang scriptet kalles. Når sriptene endres blir ofte akselerator-mellomlagrene tømt for å sikre at det endrede scriptet kalles istedenfor det gamle.
En annen tilnærming til scriptspråk er å bygge scriptkompilatoren direkte inn i nett-tjeneren slik at den kan utføres uten å lage en ny prosess. Apache nett-tjenersystemet har mange moduler som gjør dette, for eksempel mod_perl, mod_php, mod_python, mod_ruby, og mod_mono.


== Se også ==
CGI.pm
Simple Common Gateway Interface


== Kilder ==
Common Gateway Interface: Introduction. Hentet 18. mars 2006.


== Eksterne lenker ==
CGI standarden hos w3.org.
CGI/1.1 spesifikasjonen.
Den komplette listen CGI-variabler finnes på https://web.archive.org/web/20060424143818/http://hoohoo.ncsa.uiuc.edu/cgi/env.html.
SCGI protokollen er en erstatter for Common Gateway Interface (CGI)-protokollen.
Python CGI skript-protokollen Arkivert 3. mai 2006 hos Wayback Machine. Et sett CGI-applikasjoner og moduler for CGI-programmering med språket Python.
Kurs i bruk av CGI med programmeringsspråket C