Che cos'è Common Gateway Interface (CGI)?


745

CGI è un'interfaccia gateway comune. Come dice il nome, è un'interfaccia gateway "comune" per tutto. È così banale e ingenuo dal nome. Sento di averlo capito e di averlo sentito ogni volta che ho incontrato questa parola. Francamente, non l'ho fatto. Sono ancora confuso.

Sono un programmatore PHP con esperienza di sviluppo web.

richiesta utente (client) per la pagina ---> webserver (-> interprete PHP incorporato) ----> Script lato server (PHP) ---> MySQL Server.

Ora dì che il mio script PHP può recuperare i risultati dal server MySQL, dal server MATLAB e da altri server.

Quindi, ora PHP Script è il CGI? Perché la sua interfaccia tra server web e tutti gli altri server? Non lo so. A volte chiamano CGI, una tecnologia e altre volte chiamano CGI un programma o qualche altro server.

  • Che cos'è esattamente il CGI?

  • Qual è il grosso problema con /cgi-bin/*.cgi? Che succede con questo? Non so a cosa serva questa cgi-bindirectory sul server. Non so perché abbiano estensioni * .cgi.

  • Perché Perl si mette sempre di mezzo. CGI & Perl (lingua). Inoltre non so cosa succede con questi due. Quasi sempre continuo a sentire questi due in combinazione "CGI & Perl". Questo libro è un altro ottimo esempio di programmazione CGI con Perl . Perché non "Programmazione CGI con PHP / JSP / ASP"? Non ho mai visto cose del genere.

  • La programmazione CGI in C , mi confonde molto. " in C " ?? Sul serio?? Non so cosa dire. Sono solo confuso. " in C " ?? Questo cambia tutto. Il programma deve essere compilato ed eseguito. Questo cambia completamente la mia visione della programmazione web. Quando compilo? Come viene eseguito il programma (perché sarà un codice macchina, quindi deve essere eseguito come processo indipendente). Come comunica con il web server? IPC? e l'interfacciamento con tutti i server (nel mio esempio MATLAB e MySQL) usando la programmazione socket? Mi sono perso!!

  • La gente dice che CGI è deprecato e non è più in uso. È così? Qual è l'ultimo aggiornamento?

Una volta, mi sono imbattuto in una situazione in cui dovevo dare alla richiesta HTTP PUT l'accesso al web server (Apache HTTPD). È un lungo ritorno. Quindi, per quanto ricordo questo è quello che ho fatto:

  1. put.phpHo modificato il file di configurazione di Apache HTTPD per dire al server web di passare tutte le richieste HTTP PUT ad alcuni (ho dovuto scrivere questo script PHP)

  2. Implementa put.php per gestire la richiesta (salva il file nella posizione menzionata)

La gente ha detto che ho scritto uno script CGI. Seriamente, non avevo idea di cosa stessero parlando.

  • Ho davvero scritto CGI Script?

Spero tu abbia capito qual è la mia confusione. (Perché io stesso non so dove sono confuso). Vi chiedo di mantenere la risposta il più semplice possibile. Non riesco davvero a capire nessuna terminologia tecnica sofisticata. Almeno non in questo caso.

MODIFICARE:

Ho trovato questo fantastico tutorial "La programmazione CGI è semplice!" - Tutorial CGI , che spiega i concetti nel modo più semplice possibile. Dopo aver letto questo articolo, potresti voler leggere Introduzione alla programmazione CGI in C per integrare la tua comprensione con esempi di codice reali. Ho anche aggiunto questi collegamenti a questo tutorial all'articolo di Wikipedia: http://it.wikipedia.org/wiki/Common_Gateway_Interface


9
Ho già visto CGI scritto in Cobol. Nessun kiding!
Luc M,

@Luc M. Interessato. Quale CGI intendi (dato che esiste un raycaster in LINQ ...)?
Joe,

15
@claws: le persone, principalmente di vecchia scuola, chiameranno QUALSIASI codice, indipendentemente dal metodo di esecuzione effettivo, eseguito tramite il server web un CGI. Quello che hai effettivamente scritto è uno script PHP, che può o non può essere eseguito tramite il protocollo CGI. La tua confusione sembra derivare dal significato ambivalente di CGI, un protocollo per eseguire il codice e il codice che viene eseguito tramite il protocollo (che in seguito è stato generalizzato per indicare qualsiasi codice eseguito sul web)
Vinko Vrsalovic,

1
A metà degli anni '90 ho scritto un paio di sceneggiature CGI in HyperCard
Neal Davis,

@Joe non ho mai ricevuto la notifica e oggi, rileggendo questo post, ho visto la tua domanda. I CGI sono stati scritti su OpenVMS come eseguibili indipendenti (nessun framework coinvolto o applicazioni di terze parti ...)
Luc M

Risposte:


427

CGI è un'interfaccia che dice al server web come passare i dati da e verso un'applicazione. Più specificamente, descrive come le informazioni di richiesta vengono passate nelle variabili di ambiente (come tipo di richiesta, indirizzo IP remoto), come viene trasmesso il corpo della richiesta tramite input standard e come viene trasmessa la risposta tramite output standard. È possibile fare riferimento alla specifica CGI per i dettagli.

Per usare la tua immagine:

user (client) request for page ---> webserver ---[CGI]----> Server side Program ---> MySQL Server.

La maggior parte, se non tutti, i server web possono essere configurati per eseguire un programma come 'CGI'. Ciò significa che il server web, al ricevimento di una richiesta, inoltrerà i dati a un programma specifico, impostando alcune variabili di ambiente e eseguendo il marshalling dei parametri tramite input standard e output standard in modo che il programma possa sapere dove e cosa cercare.

Il vantaggio principale è che puoi eseguire QUALSIASI codice eseguibile dal web, dato che sia il server web che il programma sanno come funziona CGI. Ecco perché potresti scrivere programmi Web in C o Bash con un normale server web abilitato per CGI. Questo e quello che la maggior parte degli ambienti di programmazione può usare facilmente input standard, output standard e variabili d'ambiente.

Nel tuo caso molto probabilmente hai usato un altro, specifico per PHP, un mezzo di comunicazione tra i tuoi script e il server web, questo, come ben accennato nella tua domanda, è un interprete incorporato chiamato mod_php.

Quindi, rispondendo alle tue domande:

Che cos'è esattamente il CGI?

Vedi sopra.

Qual è il grosso problema con /cgi-bin/*.cgi? Che succede? Non so a cosa serva questa directory cgi-bin sul server. Non so perché abbiano estensioni * .cgi.

Questo è il luogo tradizionale per i programmi cgi, molti server web vengono con questa directory preconfigurata per eseguire tutti i binari lì come programmi CGI. L'estensione .cgi indica un eseguibile che dovrebbe funzionare attraverso il CGI.

Perché Perl si mette sempre di mezzo. CGI & Perl (lingua). Inoltre non so cosa succede con questi due. Quasi sempre continuo a sentire questi due in combinazione "CGI & Perl". Questo libro è un altro ottimo esempio di programmazione CGI con Perl Perché non "Programmazione CGI con PHP / JSP / ASP". Non ho mai visto cose del genere.

Poiché il Perl è antico (più vecchio di PHP, JSP e ASP che erano nati quando CGI era già vecchio, Perl esisteva quando CGI era nuovo) ed è diventato abbastanza famoso per essere un ottimo linguaggio per servire pagine Web dinamiche tramite il CGI. Oggi ci sono altre alternative per eseguire Perl in un server web, principalmente mod_perl .

Programmazione CGI in C questo mi confonde molto. in C ?? Sul serio?? Non so cosa dire. "Sono solo confuso." In C "?? Questo cambia tutto. Il programma deve essere compilato ed eseguito. Questo cambia completamente la mia visione della programmazione Web. Quando devo compilare? Come viene eseguito il programma (perché sarà un codice macchina, quindi deve essere eseguito come processo indipendente.) Come comunica con il server Web? IPC? e l'interfacciamento con tutti i server (nel mio esempio MATLAB e MySQL) usando la programmazione socket? Mi sono perso !!

Compilare l'eseguibile una volta, il server Web esegue il programma e passa i dati nella richiesta al programma e genera la risposta ricevuta. CGI specifica che verrà avviata un'istanza di programma per ogni richiesta. Questo è il motivo per cui CGI è inefficiente e un po 'obsoleto al giorno d'oggi.

Dicono che CGI è deprecato. Non è più in uso. È così? Qual è il suo ultimo aggiornamento?

Il CGI viene ancora utilizzato quando le prestazioni non sono fondamentali ed è necessario un semplice mezzo per eseguire il codice. È inefficiente per le ragioni precedentemente indicate e ci sono mezzi più moderni per eseguire qualsiasi programma in un ambiente web. Attualmente il più famoso è FastCGI .


24
Più specificamente, descrive come le informazioni di richiesta vengono passate nelle variabili di ambiente (come tipo di richiesta, indirizzo IP remoto), come il corpo reqeust viene passato tramite input standard e come la risposta viene trasmessa tramite output standard. È possibile fare riferimento alla specifica CGI ( hoohoo.ncsa.illinois.edu/cgi ) per i dettagli.
daf

3
Supponendo Server side Programnella tua figura è il mio script PHP. Quindi, non ho mai fatto alcuna programmazione CGI? Perché non ho mai scritto nulla tra il server web e il mio script PHP. Dannazione!! questo mi uccide.
artigli

4
PHP è ancora fortemente basato sul protocollo CGI, la maggior parte del contenuto di $ _SERVER è direttamente dalle specifiche CGI. E "programmazione CGI" significava sempre che il programma elaborava la richiesta, non l'implementazione del protocollo stesso. Se spiegassi cosa fai con PHP a un pioniere della programmazione web dell'era del 1993, lo considererebbe una forma avanzata (sebbene possibilmente scema) di programmazione CGI.
Michael Borgwardt,

5
@Michael: Ma quando si esegue tramite mod_php non è affatto CGI (anche se basato su di esso). E sono d'accordo che CGI si riferisce sia al protocollo che agli script eseguiti tramite esso.
Vinko Vrsalovic,

2
@Vinko Vrsalovic: se CGI è un'interfaccia per Perl, C o altre lingue da eseguire in Web Server rispetto a quale interfaccia viene utilizzata da PHP per funzionare in Apache ???????? ed è PHP rientra nelle specifiche CGI ??
Hardik,

63

Che cos'è esattamente il CGI?

Un mezzo per un server Web per ottenere i suoi dati da un programma (anziché, ad esempio, un file).

Qual è il grosso problema con /cgi-bin/*.cgi?

Nessun grosso problema. È solo una convenzione.

Non so a cosa serva questa directory cgi-bin sul server. Non so perché abbiano estensioni * .cgi.

Il server deve sapere cosa fare con il file (ovvero trattarlo come un programma da eseguire invece di qualcosa da semplicemente servire). Avere un'estensione .html gli dice di usare un tipo di contenuto text / html. Avere un'estensione .cgi gli dice di eseguirlo come programma.

Mantenere gli eseguibili in una directory separata offre una protezione aggiuntiva contro l'esecuzione di file errati e / o la pubblicazione di programmi CGI come dati non elaborati nel caso in cui il server venga configurato in modo errato.

Perché Perl si mette sempre di mezzo.

Non Perl era semplicemente grande e popolare allo stesso tempo della CGI.

Non uso il Perl CGI da anni. Stavo usando mod_perl da molto tempo e oggigiorno tendo verso PSGI / Plack con FastCGI.

Questo libro è un altro ottimo esempio di programmazione CGI con Perl Perché non "Programmazione CGI con PHP / JSP / ASP".

CGI non è molto efficiente. Metodi migliori per parlare con i programmi dei server web sono arrivati ​​contemporaneamente a PHP. JSP e ASP sono metodi diversi per parlare con i programmi.

Programmazione CGI in C questo mi confonde molto. in C ?? Sul serio??

È un linguaggio di programmazione, perché no?

Quando compilo?

  1. Scrivi il codice
  2. Compilare
  3. URL di accesso
  4. Webserver esegue il programma

Come viene eseguito il programma (perché sarà un codice macchina, quindi deve essere eseguito come processo indipendente).

Non deve essere eseguito come processo indipendente (puoi scrivere i moduli Apache in C), ma l'intero concetto di CGI è che avvia un processo esterno.

Come comunica con il web server? IPC?

STDIN / STDOUT e variabili di ambiente - come definito nella specifica CGI.

e l'interfacciamento con tutti i server (nel mio esempio MATLAB e MySQL) usando la programmazione socket?

Utilizzando qualsiasi metodo ti piaccia e sia supportato.

Dicono che CGI è ammortizzato. Non è più in uso. È così?

Il CGI è inefficiente, lento e semplice. È usato raramente, quando è usato, è perché è semplice. Se le prestazioni non sono un grosso problema, allora la semplicità vale molto.

Qual è il suo ultimo aggiornamento?

1.1


1. Scrivi codice 2. Compila 3. URL di accesso 4. Il server web esegue il programma. || Ma come fa il server web a sapere dove si posiziona il programma eseguibile compilato? Come fa a sapere quale programma eseguibile (tra cui tutti) eseguire?
Pacerier,

@Pacerier - Allo stesso modo in cui sa quale file statico inviare al client se viene richiesto un file statico.
Quentin,

41

CGI è una specifica di interfaccia tra un server Web (server HTTP) e un programma eseguibile di qualche tipo che deve gestire una particolare richiesta.

Descrive come determinate proprietà di quella richiesta dovrebbero essere comunicate all'ambiente di quel programma e come il programma dovrebbe comunicare la risposta al server e come il server dovrebbe "completare" la risposta per formare una risposta valida alla richiesta HTTP originale.

Per un po 'la CGI è stata una bozza Internet IETF e come tale aveva una data di scadenza. È scaduto senza aggiornamenti, quindi non esiste uno "standard" CGI. Ora è un RFC informativo, ma come tale documenta una pratica comune e non è uno standard in sé. rfc3875.txt , rfc3875.html

I programmi che implementano un'interfaccia CGI possono essere scritti in qualsiasi lingua eseguibile sul computer di destinazione. Devono essere in grado di accedere alle variabili di ambiente e generalmente all'input standard e generano il loro output sull'output standard .

I linguaggi compilati come C erano comunemente usati così come i linguaggi di scripting come il perl, spesso usando librerie per facilitare l'accesso all'ambiente CGI.

Uno dei maggiori svantaggi di CGI è che viene generato un nuovo programma per ogni richiesta, quindi mantenere lo stato tra le richieste potrebbe essere un grave problema di prestazioni. Lo stato può essere gestito in cookie o codificato in un URL, ma se raggiunge dimensioni elevate deve essere archiviato altrove e digitato da informazioni URL codificate o da un cookie. Ogni invocazione CGI dovrebbe quindi ricaricare lo stato memorizzato da un negozio da qualche parte.

Per questo motivo, e per un'interfaccia molto semplice con richieste e sessioni, i migliori ambienti integrati tra server Web e applicazioni sono molto più popolari. Ambienti come una moderna implementazione di php con apache integrano molto meglio la lingua di destinazione con il web server e forniscono accesso agli oggetti di richiesta e sessione necessari per soddisfare in modo efficiente le richieste http. Offrono un modo molto più semplice e ricco di scrivere "programmi" per gestire le richieste HTTP.

Il fatto che tu abbia scritto una sceneggiatura CGI dipende piuttosto dall'interpretazione. Certamente ha fatto il lavoro di uno, ma è molto più normale eseguire php come modulo in cui l'interfaccia tra lo script e il server non è strettamente un'interfaccia CGI.


1
Bother. Ho iniziato a scrivere questo quando non c'erano altre risposte, ma mi hanno chiamato. Ora è circa # 8 nell'elenco. Non ho la voglia di cancellarlo ora, tornerò e lo cancellerò più tardi.
CB Bailey,

6
Ehi .. Per favore, non cancellarlo. Dice alcune cose in modo più chiaro. L'ho trovato utile. Forse alcuni altri potrebbero trovarlo così. :)
artigli

1
OK, lo lascio per un po '. Sarebbe probabilmente positivo se qualcuno integrasse passaggi "migliori" in una delle risposte più complete, però. Quindi potremmo avere una risposta più definitiva.
CB Bailey,

18

Il CGI è specificato in RFC 3875 , sebbene si tratti di una codificazione "ufficiale" successiva del documento NCSA originale . Fondamentalmente, CGI definisce un protocollo per passare i dati su una richiesta HTTP da un server web a un programma da elaborare - qualsiasi programma, in qualsiasi lingua. Al momento della stesura della specifica (1993), la maggior parte dei server Web conteneva solo pagine statiche, le "app web" erano una cosa rara e nuova, quindi sembrava naturale tenerli separati dai "normali" contenuti statici, come in un cgi-bindirectory a parte il contenuto statico, e facendoli finire in .cgi.

In questo momento, qui non c'erano nemmeno "linguaggi di programmazione web" dedicati come PHP, e C era il linguaggio di programmazione portatile dominante - così molte persone hanno scritto i loro script CGI in C. Ma Perl si è rapidamente rivelato essere una soluzione migliore per questo tipo di cosa, e CGI è diventato quasi sinonimo di Perl per un po '. Poi sono arrivati ​​Java Servlet, PHP e un sacco di altri e ha assunto gran parte della quota di mercato di Perl.


Perché PHP è un "linguaggio di programmazione web dedicato"? PHP è un linguaggio generico e le persone lo usano anche per le app dell'interfaccia utente.
Pacerier,

@Pacerier: è stato progettato per essere un linguaggio di programmazione per la generazione di pagine Web, ed è per questo che lo utilizza il 99,9% dei suoi utenti. È persino nel suo nome . Rivendicare qualsiasi altra cosa è inutile spaccare i capelli. Se lo stai usando per le app UI, il calcolo scientifico o la programmazione incorporata, va bene, sii felice, nessuno dice che non ti è permesso.
Michael Borgwardt,

13

Dai un'occhiata al CGI in Wikipedia. CGI è un protocollo tra il server Web e un programma esterno o uno script che gestisce l'input e genera output che viene inviato al browser.

CGI è semplicemente un modo per comunicare con il web server e un programma, niente di più, niente di meno. Qui il server gestisce la connessione di rete e il protocollo HTTP e il programma gestisce l'input e genera output che viene inviato al browser. Lo script CGI può essere praticamente qualsiasi programma che può essere eseguito dal server web e segue il protocollo CGI. Quindi un programma CGI può essere implementato, ad esempio, in C. Tuttavia, ciò è estremamente raro, poiché C non è molto adatto per l'attività.

/cgi-bin/*.cgiè semplicemente un percorso in cui le persone mettono comunemente il loro script CGI. I server Web sono comunemente configurati per impostazione predefinita per recuperare gli script CGI da quel percorso.

uno script CGI può essere implementato anche in PHP, ma tutti i programmi PHP non sono script CGI. Se il server web ha un interprete PHP incorporato (ad es. Mod_php in Apache), la fase CGI viene saltata da un protocollo diretto più efficiente tra il server web e l'interprete.

Se hai implementato uno script CGI o meno dipende da come lo script viene eseguito dal server web.


12

In sostanza, CGI trasmette la richiesta a qualsiasi interprete configurato con il web server - questo potrebbe essere Perl, Python, PHP, Ruby, C praticamente qualsiasi cosa. Perl era il più comune nel corso della giornata ed è per questo che lo vedi spesso in riferimento al CGI.

CGI non è morto. In realtà la maggior parte delle grandi società di hosting gestisce PHP come CGI invece di mod_php perché offre la configurazione a livello di utente e altre cose mentre è più lenta di mod_php. Anche Ruby e Python sono in genere eseguiti come CGI. la loro differenza chiave qui è che un modulo server funziona come parte del software server effettivo - dove come con CGI è totalmente esterno al server Il server utilizza semplicemente il modulo CGI per determinare come passare e ricevere dati all'interprete esterno.


2
Non downvoting ma la maggior parte delle installazioni web di Python che ho visto su mod_wsgi o mod_python.
ChristopheD,

Questo è il modo in cui la maggior parte delle persone usa il termine script CGI, ma non è esattamente il significato del termine.
reinierpost,

Tu dici interprete ma C viene raramente interpretato e programmi compilati come i programmi compilati C possono essere usati per CGI.
user34660,

11

CGI è un meccanismo in base al quale un server esterno chiama un programma esterno per gestire una richiesta, con variabili di ambiente e input standard utilizzati per inviare i dati della richiesta al programma. La lingua esatta in cui è scritto il programma esterno non ha importanza, sebbene sia più semplice scrivere programmi CGI in alcune lingue rispetto ad altre.

Poiché gli script CGI necessitano delle autorizzazioni di esecuzione, httpd per impostazione predefinita consente di eseguire i programmi CGI nella cgi-bindirectory solo per scopi di sicurezza (probabilmente ora errati).

La maggior parte degli script PHP viene eseguita nel processo del server Web tramite mod_php. Questo non è CGI.

CGI è lento poiché il programma (e l'interprete correlato) devono essere avviati per richiesta. Le alternative moderne sono l'esecuzione incorporata, utilizzata da mod_php e i processi di lunga durata, utilizzati da FastCGI. Una determinata lingua può avere il suo modo di implementare tali meccanismi, quindi assicurati di chiedere in giro prima di ricorrere al CGI.


@Ignacio Vazquez-Abrams: se l'interfaccia CGI crea un nuovo processo, ogni volta che riceve una richiesta di risorsa CGI rispetto alla differenza di esecuzione tra CGI e mod_php ??????? CGI e mod_php sono uguali ???? o è possibile scrivere script PHP eseguiti in CGI Interface non in mod_php ???
Hardik,

@Hardik: mod_php viene eseguito come parte di HTTPd, che è responsabile dei propri processi.
Ignacio Vazquez-Abrams,

che cos'è questo "programma esterno"? è un interprete se eseguo php con php-fpm?
slier

@slier: è un programma arbitrario che non è il web server.
Ignacio Vazquez-Abrams,

@ IgnacioVazquez-Abrams quindi è sicuro supporre che sia un interpreterif sto eseguendo php con php-fpm?
slier

7

Forse vuoi sapere cosa non è CGI e la risposta è un MODULO per il tuo server web (se suppongo che tu stia eseguendo Apache). E QUESTA È LA GRANDE DIFERENZA, perché CGI ha bisogno e programma esterno, thread, qualunque cosa per creare un'istanza di un server di app PERL, PHP, C dove quando si esegue come MODULO quel programma è il server web (apache) di per sé.

A causa di tutto ciò, entrano in gioco molti problemi di prestazioni, sicurezza e portabilità. Ma è bene sapere prima cosa non è CGI, per capire di cosa si tratta.


7

Un esempio di vita reale: un database complicato che deve essere mostrato su un sito Web. Poiché il database è stato progettato da qualche parte intorno al 1986 (!), Molti dati sono stati compressi in diversi modi per risparmiare spazio su disco.

Mentre lo sviluppo andava avanti, gli sviluppatori non potevano più risolvere complicate richieste di dati nel solo SQL, ad esempio perché gli algoritmi di ordinamento erano insoliti.

Esistono tre soluzioni sensibili:

  1. veloce e sporco: invia i dati non salvati a PHP, ordinali lì. Ovviamente una soluzione molto costosa, perché questa verrebbe ripetuta ogni volta che viene chiamata la pagina
  2. scrivere un plug-in nel motore di database, ma l'amministratore non era pronto per consentire l'esecuzione di codice esterno sul proprio server oppure
  3. puoi elaborare i dati in un programma (C, Perl, ecc.) e generare HTML. Il programma stesso va in / cgi-bin e viene chiamato direttamente dal server Web (ad es. Apache), non tramite PHP.

CGI esegue lo script nella soluzione n. 3 e trasmette l'effetto al browser. Hai la velocità del programma compilato, la flessibilità di una lingua migliore di SQL e non è necessario scrivere plugin sul server SQL. (Ancora una volta, questo è un esempio specifico di SQL e C)


1
La migliore risposta per me, ho capito.
Daniel Katz,

7

Uno script CGI è un programma console / shell. In Windows, quando si utilizza una finestra "Prompt dei comandi", si eseguono i programmi della console. Quando un server Web esegue uno script CGI, fornisce input al programma console / shell utilizzando variabili di ambiente o "input standard". L'input standard è come digitare i dati in un programma console / shell; nel caso di uno script CGI, il web server esegue la digitazione. Lo script CGI scrive i dati in "output standard" e quell'output viene inviato al client (il browser Web) come una pagina HTML. L'output standard è simile all'output visualizzato in un programma console / shell, tranne per il fatto che il server Web lo legge e lo invia.

Uno script CGI può essere eseguito da un browser. L'URI in genere include una stringa di query fornita allo script CGI. Se il metodo è "get", la stringa di query viene fornita allo script CGI in una variabile di ambiente chiamata QUERY_STRING. Se il metodo è "post", la stringa di query viene fornita allo script CGI utilizzando l'input standard (lo script CGI legge la stringa di query dall'input standard).

Un primo utilizzo degli script CGI era l'elaborazione dei moduli. All'inizio dell'HTML, i moduli HTML avevano in genere un attributo "azione" e un pulsante designato come pulsante "invia". Quando si preme il pulsante di invio, l'URI specificato nell'attributo "azione" viene inviato al server con i dati del modulo inviati come stringa di query. Se "l'azione" specifica uno script CGI, lo script CGI verrebbe eseguito e quindi produrrà una pagina HTML.

RFC 3875 "Common Gateway Interface (CGI)" definisce parzialmente il CGI usando C, come nel dire che le variabili d'ambiente "sono accessibili dalla libreria C getenv () o ambiente variabile".

Se stai sviluppando uno script CGI usando C / C ++ e usi Microsoft Visual Studio per farlo, allora svilupperesti un programma console.


Uno "script CGI" è un termine generico e può anche includere eseguibili.
71GA,

6

Un CGI è un programma (o un'API Web) che si scrive e lo salva sul sito Web Server. CGI è un file.

Questo file si trova e attende sul server Web. Quando il browser client invia una richiesta al server Web per eseguire il file CGI, il server Web esegue il file CGI sul sito del server. Gli input per questo programma CGI, se presenti, provengono dal browser client. Gli output di questo programma CGI vengono inviati al browser.

Quale lingua usi per scrivere un programma CGI? Altri post menzionano già c, java, php, perl, ecc.


4

L'idea alla base di CGI è che un programma / script (sia Perl che C) riceve input tramite STDIN(i dati della richiesta) e trasmette i dati tramite STDOUT(eco, printfistruzioni).

Il motivo per cui la maggior parte degli script PHP non si qualifica è che vengono eseguiti nel modulo Apache PHP .

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.