Common Gateway Interface. Dynamic HTML le risposte inviate al client sono (parzialmente o...
-
Upload
ilario-gatto -
Category
Documents
-
view
214 -
download
0
Transcript of Common Gateway Interface. Dynamic HTML le risposte inviate al client sono (parzialmente o...
![Page 1: Common Gateway Interface. Dynamic HTML le risposte inviate al client sono (parzialmente o totalmente) create on-the-fly (al volo) dopo aver ricevuto il.](https://reader036.fdocumenti.com/reader036/viewer/2022070313/5542eb66497959361e8d2997/html5/thumbnails/1.jpg)
Common Gateway Interface
![Page 2: Common Gateway Interface. Dynamic HTML le risposte inviate al client sono (parzialmente o totalmente) create on-the-fly (al volo) dopo aver ricevuto il.](https://reader036.fdocumenti.com/reader036/viewer/2022070313/5542eb66497959361e8d2997/html5/thumbnails/2.jpg)
Dynamic HTML
• 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)
Tecnologie che consentono di mostrare su Web l’output di programmi
![Page 3: Common Gateway Interface. Dynamic HTML le risposte inviate al client sono (parzialmente o totalmente) create on-the-fly (al volo) dopo aver ricevuto il.](https://reader036.fdocumenti.com/reader036/viewer/2022070313/5542eb66497959361e8d2997/html5/thumbnails/3.jpg)
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!
Hello World!
Hello World!
Hello World!
Hello World!
Hello World!
<HTML><HEAD></HEAD><BODY>
Hello World!<BR>
<% Next %>
<% For i = 3 To 7 %>
</BODY></HTML>
<% = i %> ><FONT SIZE
![Page 4: Common Gateway Interface. Dynamic HTML le risposte inviate al client sono (parzialmente o totalmente) create on-the-fly (al volo) dopo aver ricevuto il.](https://reader036.fdocumenti.com/reader036/viewer/2022070313/5542eb66497959361e8d2997/html5/thumbnails/4.jpg)
JSP (Java Server Pages)
Risposta della Sun all’ASP di MicrosoftUtilizzano codice Java embeddato nel file HTTP
<% for(int i=1; i<6; i++) { %>
The current number is 1The current number is 2The current number is 3The current number is 4The current number is 5
The current number is 1The current number is 2The current number is 3The current number is 4The current number is 5
The current number is
<%= i %>
<BR>
<% } %>
![Page 5: Common Gateway Interface. Dynamic HTML le risposte inviate al client sono (parzialmente o totalmente) create on-the-fly (al volo) dopo aver ricevuto il.](https://reader036.fdocumenti.com/reader036/viewer/2022070313/5542eb66497959361e8d2997/html5/thumbnails/5.jpg)
PHP (PHP Hypertext Preprocessor)Creato da un privato (Rasmus Lerdorf) nel 1994Distribuito 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 2Now a is 2
![Page 6: Common Gateway Interface. Dynamic HTML le risposte inviate al client sono (parzialmente o totalmente) create on-the-fly (al volo) dopo aver ricevuto il.](https://reader036.fdocumenti.com/reader036/viewer/2022070313/5542eb66497959361e8d2997/html5/thumbnails/6.jpg)
web browser web server
gatewayprogram
http CGI
fisico
connessione
IP
TCP
sessione
presentazione
applicazione
bla bla<html><head>
bla bla<html><head>
??
CGI: architetturaRichiesta
host
![Page 7: Common Gateway Interface. Dynamic HTML le risposte inviate al client sono (parzialmente o totalmente) create on-the-fly (al volo) dopo aver ricevuto il.](https://reader036.fdocumenti.com/reader036/viewer/2022070313/5542eb66497959361e8d2997/html5/thumbnails/7.jpg)
Richiesta di usuali di files
Client
GET /index.html HTTP/1.0
bla bla<html><head>
bla bla<html><head>
??
Server
bla bla <html><head>
bla bla <html><head>bla bla
<html><head>
bla bla <html><head>bla bla
<html><head>
bla bla <html><head>bla bla
<html><head>
bla bla <html><head>
Il server risponde inviando il contenuto di un file che è presente nel file system.
![Page 8: Common Gateway Interface. Dynamic HTML le risposte inviate al client sono (parzialmente o totalmente) create on-the-fly (al volo) dopo aver ricevuto il.](https://reader036.fdocumenti.com/reader036/viewer/2022070313/5542eb66497959361e8d2997/html5/thumbnails/8.jpg)
Esecuzione di un CGI
Client
GET /cgi-bin/program?par1+par2 HTTP/1.0
Server
program
bla bla<html><head>
bla bla<html><head>
??
bla
bla
<htm
l><
hea
d>
bla
bla
<htm
l><
hea
d>
par1par2
par1par2
il server riconosce una chiamata ad un CGI dal fatto che la “risorsa” richiesta si trova in una directory particolare (es: http://…./cgi-bin/….)
![Page 9: Common Gateway Interface. Dynamic HTML le risposte inviate al client sono (parzialmente o totalmente) create on-the-fly (al volo) dopo aver ricevuto il.](https://reader036.fdocumenti.com/reader036/viewer/2022070313/5542eb66497959361e8d2997/html5/thumbnails/9.jpg)
Organizzazione interna del serverLa configurazione del server web prevede la definizione di due directory:
sito web cgi• 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/”)
file system interno del server
![Page 10: Common Gateway Interface. Dynamic HTML le risposte inviate al client sono (parzialmente o totalmente) create on-the-fly (al volo) dopo aver ricevuto il.](https://reader036.fdocumenti.com/reader036/viewer/2022070313/5542eb66497959361e8d2997/html5/thumbnails/10.jpg)
Input e output del CGI program
• 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
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.
![Page 11: Common Gateway Interface. Dynamic HTML le risposte inviate al client sono (parzialmente o totalmente) create on-the-fly (al volo) dopo aver ricevuto il.](https://reader036.fdocumenti.com/reader036/viewer/2022070313/5542eb66497959361e8d2997/html5/thumbnails/11.jpg)
La form HTML
HTTPServer
form.html
CGI program
HTTPServer
1
2
3
4
Server1
Server2Client
![Page 12: Common Gateway Interface. Dynamic HTML le risposte inviate al client sono (parzialmente o totalmente) create on-the-fly (al volo) dopo aver ricevuto il.](https://reader036.fdocumenti.com/reader036/viewer/2022070313/5542eb66497959361e8d2997/html5/thumbnails/12.jpg)
Un esempio di FORMun esempio di form
In quale città vivi?
ResetSubmit
1) Netscape2) Explorer
Che browser stai usando?
<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>
![Page 13: Common Gateway Interface. Dynamic HTML le risposte inviate al client sono (parzialmente o totalmente) create on-the-fly (al volo) dopo aver ricevuto il.](https://reader036.fdocumenti.com/reader036/viewer/2022070313/5542eb66497959361e8d2997/html5/thumbnails/13.jpg)
Marcatori HTML per le FORM<FORM></FORM> possibili attributi:
METHOD=GETMETHOD=POSTACTION=“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”
![Page 14: Common Gateway Interface. Dynamic HTML le risposte inviate al client sono (parzialmente o totalmente) create on-the-fly (al volo) dopo aver ricevuto il.](https://reader036.fdocumenti.com/reader036/viewer/2022070313/5542eb66497959361e8d2997/html5/thumbnails/14.jpg)
Pacchetto GET
Referer: http://www.spc.com/form.html User-Agent: Mozilla/4.05 [en] (Win95; I)Host: www.spc.comAccept: image/gif, image/x-xbitmap, image/jpeg, */*Accept-Language: enAccept-Charset: iso-8859-1,*,utf-8
GET /cgi-bin/miofile?city=roma&brow=netscape HTTP/1.0
![Page 15: Common Gateway Interface. Dynamic HTML le risposte inviate al client sono (parzialmente o totalmente) create on-the-fly (al volo) dopo aver ricevuto il.](https://reader036.fdocumenti.com/reader036/viewer/2022070313/5542eb66497959361e8d2997/html5/thumbnails/15.jpg)
Pacchetto POST
Referer: http://www.spc.com/form.htmlUser-Agent: Mozilla/4.05 [en] (Win95; I)Host: www.spc.comAccept: image/gif, image/x-xbitmap, image/jpeg, */*Accept-Language: enAccept-Charset: iso-8859-1,*,utf-8Content-type: application/x-www-form-urlencodedContent-length: 23
POST /cgi-bin/miofile HTTP/1.0
city=roma&brow=netscape
![Page 16: Common Gateway Interface. Dynamic HTML le risposte inviate al client sono (parzialmente o totalmente) create on-the-fly (al volo) dopo aver ricevuto il.](https://reader036.fdocumenti.com/reader036/viewer/2022070313/5542eb66497959361e8d2997/html5/thumbnails/16.jpg)
Vs
<A HREF=“http://www.altavista.com/cgi-bin/search?query=complexity> Ricerca Altavista sulla complessità</A>...
<A HREF=“http://www.altavista.com/cgi-bin/search?query=complexity> Ricerca Altavista sulla complessità</A>...
Indicato per grandi quantità di dati
Dati in qualsiasi formato (testi, immagini, video)
Solo in risposta ad una form
GETIndicato per pochi parametri
Solo parametri testuali
Possibilità di inserire un URL con parametri
opportuni all’interno di una pagina HTML
es.
POST
![Page 17: Common Gateway Interface. Dynamic HTML le risposte inviate al client sono (parzialmente o totalmente) create on-the-fly (al volo) dopo aver ricevuto il.](https://reader036.fdocumenti.com/reader036/viewer/2022070313/5542eb66497959361e8d2997/html5/thumbnails/17.jpg)
Interazione webserver-CGI
• come argomenti della linea di comando
• come variabili di ambiente
• come standard input
Esistono tre modi per passare i parametri dal server al CGI:
Il CGI invia la risposta al server sempre su standard output
![Page 18: Common Gateway Interface. Dynamic HTML le risposte inviate al client sono (parzialmente o totalmente) create on-the-fly (al volo) dopo aver ricevuto il.](https://reader036.fdocumenti.com/reader036/viewer/2022070313/5542eb66497959361e8d2997/html5/thumbnails/18.jpg)
Passaggio dei parametri
Submit diuna form
(contiene coppie“nome=valore”)
chiamata diretta ad URL (può
contenere o meno coppie
“nome = valore”) VARIABILIAMBIENTE
LINEA DI COMANDO
STANDARDINPUT
GET
POST
contiene “=“
non contiene “=“
![Page 19: Common Gateway Interface. Dynamic HTML le risposte inviate al client sono (parzialmente o totalmente) create on-the-fly (al volo) dopo aver ricevuto il.](https://reader036.fdocumenti.com/reader036/viewer/2022070313/5542eb66497959361e8d2997/html5/thumbnails/19.jpg)
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.ci parametri potranno essere recuperati in questo modo:
main(int argc, char** argv){
…argv[1]; /* contiene val1 */argv[2]; /* contiene val2 */…
}
main(int argc, char** argv){
…argv[1]; /* contiene val1 */argv[2]; /* contiene val2 */…
}
![Page 20: Common Gateway Interface. Dynamic HTML le risposte inviate al client sono (parzialmente o totalmente) create on-the-fly (al volo) dopo aver ricevuto il.](https://reader036.fdocumenti.com/reader036/viewer/2022070313/5542eb66497959361e8d2997/html5/thumbnails/20.jpg)
Passaggio per standard input
il client invia una richiesta http:
nel codice del programma mioprog.c ci saranno istruzioni come:
il server passa i parametri a mioprog dallo standard input
oppurescanf(“%s”,stringa);scanf(“%s”,stringa); char c = getchar();char c = getchar();
POST /cgi-bin/mioprog HTTP/1.0…(una linea vuota)nome1=val1&nome2=val2
POST /cgi-bin/mioprog HTTP/1.0…(una linea vuota)nome1=val1&nome2=val2
al programmatore è lasciato il compito di fare il parsing della stringa
![Page 21: Common Gateway Interface. Dynamic HTML le risposte inviate al client sono (parzialmente o totalmente) create on-the-fly (al volo) dopo aver ricevuto il.](https://reader036.fdocumenti.com/reader036/viewer/2022070313/5542eb66497959361e8d2997/html5/thumbnails/21.jpg)
Passaggio con variabile di ambiente
il client invia una richiesta http:
il server esegue mioprog ma prima mette la stringa
“nome1=val1&nome2=val2”
nella variabile di ambiente QUERY_STRING
GET /cgi-bin/mioprog?nome1=val1&nome2=val2 HTTP/1.0GET /cgi-bin/mioprog?nome1=val1&nome2=val2 HTTP/1.0
nel codice del programma mioprog.c ci saranno istruzioni come:
char * str = getenv("QUERY_STRING");char * str = getenv("QUERY_STRING");
al programmatore è lasciato il compito di fare il parsing della stringa
![Page 22: Common Gateway Interface. Dynamic HTML le risposte inviate al client sono (parzialmente o totalmente) create on-the-fly (al volo) dopo aver ricevuto il.](https://reader036.fdocumenti.com/reader036/viewer/2022070313/5542eb66497959361e8d2997/html5/thumbnails/22.jpg)
Dal gateway al server(solo tramite standard output)
Se il nome del gateway program…
… comincia per “nph”(non parsed header)
Il server manda l’output del gateway program al client così com’è
… altrimenti
Il server premette l’header del pacchetto http
Il client aggiunge
Content-type: type/subtype(una riga vuota)…il resto del pacchetto http
![Page 23: Common Gateway Interface. Dynamic HTML le risposte inviate al client sono (parzialmente o totalmente) create on-the-fly (al volo) dopo aver ricevuto il.](https://reader036.fdocumenti.com/reader036/viewer/2022070313/5542eb66497959361e8d2997/html5/thumbnails/23.jpg)
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/