**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å .
* 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

|  |  |
| --- | --- |
| Oppslagsverk/autoritetsdata | Encyclopædia Britannica **·** GND **·** LCCN **·** BNF **·** BNF (data)
 |