Common Gateway Interface

Skupni prehodni vmesnik (CGI - [cégei]; angleška tričrkovna kratica za Common Gateway Interface) opredeljuje standardni protokol oziroma vmesnik ter označuje skupek pravil, katera določajo kako nek informacijski strežnik (najpogosteje HTTP strežnik) komunicira z lokalno programsko opremo in obratno.

Vsakič ko HTTP strežnik prejme določen zahtevek preko HTTP protokola, ga najprej analizira in nato glede na vsebino zahtevka le-to posreduje naprej lokalni programski opremi ter vrne ustrezen rezultat v obliki izvorne kode HTML programskega jezika odjemalcu, kateri je zahtevek izvedel. Programske opreme oziroma »skripte«, ki uporabljajo ta vmesnik kot orodje, so bolj znane kot CGI-skripte.

Danes se CGI vmesnik uporablja veliko manj, kot se je uporabljal nekoč. Danes se običajno uporablja ustrezne module za HTTP strežnike, ki predstavljajo programske opreme tolmačev. Njihova naloga je sprotno prevajanje oziroma tolmačenje izvorne kode programske opreme, razvite v programskih jezikih kot so Python, Ruby, PHP, Haskell, v strojno kodo. Omenjeni moduli za HTTP strežnik nato podajo ustrezne rezultate odjemalcu, ki je procesiranje zahteval. Primer takšne programske opreme modula za Apache HTTP strežnik bi predstavljal Mod_PHP, Mod_Python in podobno.

Vsi omenjeni programski jeziki so zelo visokonivojski računalniški programski jeziki (četrte generacije), kar pomeni, da večina le-teh uporablja ravno programske opreme tolmačev oziroma interpreterjev. Nepogrešljivost CGI vmesnika se občuti v primeru, če bi želeli ustvariti algoritem programske opreme v programskih jezikih C, C++, Zbirnik, torej katerikoli programski jezik druge oziroma tretje generacije, ki bi posredno uporabljal HTTP protokol oziroma strežnik za komunikacijo z ustreznim odjemalcem. Vsi omenjeni programski jeziki uporabljajo programske opreme pevajalnikov oziroma zbirnikov, pri čemer bi CGI služil kot vmesnik med strojno kodo in HTTP strežnikom oziroma odjemalcem. Na ta način je možno izvršilne datoteke v strojni kodi programske opreme uporabljati za uporabniški vmesnik in procesiranje ustreznih podatkov, ki jih lahko algoritem eksterno prejme posredno od odjemalca oziroma neposredno od HTTP strežnika.