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 ) 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  Et sett CGI-applikasjoner og moduler for CGI-programmering med språket Python.
* Kurs i bruk av CGI med programmeringsspråket C