1 / 23

Common Gateway Interface

Common Gateway Interface. Dynamic HTML. Tecnologie che consentono di mostrare su Web l’output di programmi. le risposte inviate al client sono (parzialmente o totalmente) create on-the-fly (al volo) dopo aver ricevuto il pacchetto di richiesta

Download Presentation

Common Gateway Interface

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Common Gateway Interface

  2. Dynamic HTML Tecnologie che consentono di mostrare su Web l’output di programmi • le risposte inviate al client sono (parzialmente o totalmente) create on-the-fly (al volo) dopo aver ricevuto il pacchetto di richiesta • il contenuto delle pagine può variare di volta in volta in base a parametri diversi (ora del giorno, stato del sistema, dati trasmessi dal client). I motori di ricerca, per esempio, rispondono alle interrogazioni con delle pagine html contenenti link • necessitano di supporto da parte del web server • CGI, Servlet: chiamata di programmi esterni • ASP, JSP, PHP: codice direttamente dentro le pagine html ed interpretato dal server (il client non lo può vedere)

  3. ASP (Active Server Pages) • E’ uno standard Microsoft • Sono le pagine che hanno l’estensione .ASP • Utilizzano ActiveX scripting (generalmente codice VBscript o JavaScript) • Esempio: Hello World! Hello World! Hello World! Hello World! Hello World! <HTML><HEAD></HEAD> <BODY> <% For i = 3 To 7 %> <% = i %> > <FONT SIZE Hello World!<BR> <% Next %> </BODY></HTML>

  4. JSP (Java Server Pages) Risposta della Sun all’ASP di Microsoft Utilizzano codice Java embeddato nel file HTTP <% for(int i=1; i<6; i++) { %> The current number is The current number is 1 The current number is 2 The current number is 3 The current number is 4 The current number is 5 <%= i %> <BR> <% } %>

  5. PHP (PHP Hypertext Preprocessor) Creato da un privato (Rasmus Lerdorf) nel 1994 Distribuito con diversi Web servers (per es. Apache) Utilizza una sintassi simile al Perl or C <?php $a = 1; Function incrementa ($par) { return $par + 1; } $a = incrementa($a); echo(“Now a is”); echo ($a); ?> Now a is 2

  6. CGI: architettura Richiesta ? bla bla <html><head> applicazione CGI http presentazione gateway program sessione TCP IP connessione fisico web server web browser host

  7. Server bla bla <html><head> bla bla <html><head> bla bla <html><head> bla bla <html><head> Richiesta di usuali di files GET /index.html HTTP/1.0 ? bla bla <html><head> Client Il server risponde inviando il contenuto di un file che è presente nel file system.

  8. Client Esecuzione di un CGI GET /cgi-bin/program?par1+par2 HTTP/1.0 ? bla bla <html><head> Server par1 par2 bla bla <html><head> il server riconosce una chiamata ad un CGI dal fatto che la “risorsa” richiesta si trova in una directory particolare (es: http://…./cgi-bin/….) program

  9. Organizzazione interna del server La configurazione del server web prevede la definizione di due directory: • la directory interna corrispondente alla radice del sito web (viene specificato anche come viene acceduta dall’esterno, generalmente come “/”) • la directory interna corrispondente alla radice dell’albero degli eseguibili (viene specificato anche come viene acceduta dell’esterno, tipicamente come “/cgi-bin/”) sito web cgi file system interno del server

  10. Input e output del CGI program L’input di un CGI è una sequenza di valori o di coppie nome=valore I dati vengono mandati al server tramite pacchetti GET o POST del protocollo http. • un pacchetto GET viene inviato quando: • L’utente specifica l’URL di un CGI • Si clicca un link all’URL di un CGI • Invio dati da una FORM con METHOD=GET • un pacchetto POST viene inviato quando: • Invio dati da una FORM con METHOD=POST

  11. form.html HTTP Server CGI program HTTP Server La form HTML Server1 Client Server2 1 2 3 4 1 - “GET /form.html ...” 2 - “... <FORM METHOD=GET|POST ACTION=“http://Server2/cgi-bin/program> ...” 3 - “GET|POST /cgi-bin/program ...”

  12. un esempio di form In quale città vivi? Che browser stai usando? 1) Netscape 2) Explorer Reset Submit Un esempio di FORM <FORM METHOD=POST ACTION= “http://www.dia.uniroma3.it/cgi-bin/miofile”> <P>In quale città vivi? <INPUT NAME=“city” TYPE=text SIZE=“20”> <P>Che browser stai usando? <P> Netscape <INPUT NAME=“brow” TYPE=radio VALUE=“netscape”> <P> Explorer <INPUT NAME=“brow” TYPE=radio VALUE=“explorer”> <P><INPUT TYPE=submit> <INPUT TYPE=reset> </FORM>

  13. Marcatori HTML per le FORM <FORM></FORM>possibili attributi: METHOD=GET METHOD=POST ACTION=“http://host.com/cgi-bin/miofile” <INPUT>possibili attributi: TYPE=TEXT (input testuale) TYPE=CHECKBOX (selezione) TYPE=RADIO (selezione esclusiva) TYPE=SUBMIT (tasto per inviare i dati) TYPE=RESET (per cancellare i dati) NAME=“mia_etichetta” VALUE=“valore_associato” (se selezionato) CHECKED (selezionato per default) <SELECT> <OPTION>...</SELECT>(menù a tendina) possibili attributi: NAME=“mia_etichetta”

  14. GET /cgi-bin/miofile?city=roma&brow=netscape HTTP/1.0 Referer: http://www.spc.com/form.html User-Agent: Mozilla/4.05 [en] (Win95; I) Host: www.spc.com Accept: image/gif, image/x-xbitmap, image/jpeg, */* Accept-Language: en Accept-Charset: iso-8859-1,*,utf-8 Pacchetto GET

  15. POST /cgi-bin/miofile HTTP/1.0 Referer: http://www.spc.com/form.html User-Agent: Mozilla/4.05 [en] (Win95; I) Host: www.spc.com Accept: image/gif, image/x-xbitmap, image/jpeg, */* Accept-Language: en Accept-Charset: iso-8859-1,*,utf-8 Content-type: application/x-www-form-urlencoded Content-length: 23 city=roma&brow=netscape Pacchetto POST

  16. GET POST Vs Indicato per pochi parametri Indicato per grandi quantità di dati Solo parametri testuali Dati in qualsiasi formato (testi, immagini, video) Possibilità di inserire un URL con parametri opportuni all’interno di una pagina HTML Solo in risposta ad una form es. <A HREF=“http://www.altavista.com/cgi-bin/search?query=complexity> Ricerca Altavista sulla complessità</A>...

  17. Interazione webserver-CGI Esistono tre modi per passare i parametri dal server al CGI: • come argomenti della linea di comando • come variabili di ambiente • come standard input Il CGI invia la risposta al server sempre su standard output

  18. GET POST Passaggio dei parametri chiamata diretta ad URL (può contenere o meno coppie “nome = valore”) non contiene “=“ LINEA DI COMANDO VARIABILI AMBIENTE contiene “=“ Submit di una form (contiene coppie “nome=valore”) STANDARD INPUT

  19. Passaggio sulla linea di comando il client invia una richiesta http: GET /cgi-bin/mioprog?val1+val2 HTTP/1.0 il server esegue: mioprog val1 val2 nel codice del programma mioprog.c i parametri potranno essere recuperati in questo modo: main(int argc, char** argv) { … argv[1]; /* contiene val1 */ argv[2]; /* contiene val2 */ … }

  20. Passaggio per standard input il client invia una richiesta http: POST /cgi-bin/mioprog HTTP/1.0 … (una linea vuota) nome1=val1&nome2=val2 il server passa i parametri a mioprog dallo standard input nel codice del programma mioprog.c ci saranno istruzioni come: scanf(“%s”,stringa); oppure char c = getchar(); al programmatore è lasciato il compito di fare il parsing della stringa

  21. Passaggio con variabile di ambiente il client invia una richiesta http: GET /cgi-bin/mioprog?nome1=val1&nome2=val2 HTTP/1.0 il server esegue mioprog ma prima mette la stringa “nome1=val1&nome2=val2” nella variabile di ambiente QUERY_STRING nel codice del programma mioprog.c ci saranno istruzioni come: char * str = getenv("QUERY_STRING"); al programmatore è lasciato il compito di fare il parsing della stringa

  22. … altrimenti Dal gateway al server(solo tramite standard output) Se il nome del gateway program… Il server manda l’output del gateway program al client così com’è … comincia per “nph” (non parsed header) Il server premette l’header del pacchetto http Il client aggiunge Content-type: type/subtype (una riga vuota) …il resto del pacchetto http

  23. Considerazioni sui CGI • è possibile scrivere un CGI in un qualsiasi linguaggio (es. C, PERL, JAVA, VisualBasic) • ogni consultazione di un CGI prevede il lancio di un nuovo processo sul server (questo può essere troppo oneroso) • c’è un potenziale pericolo per la sicurezza dovuto al fatto che l’applicazione CGI viene lanciata dal processo server (con i privilegi di quest’ultimo) • è uno standard de facto. Un tentativo di standardizzazione (Common Gateway Interface RFC Project) può essere reperito qui: http://web.golux.com/coar/cgi/

More Related