23
Common Gateway Interface

Common Gateway Interface. Dynamic HTML le risposte inviate al client sono (parzialmente o totalmente) create on-the-fly (al volo) dopo aver ricevuto il

Embed Size (px)

Citation preview

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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/