1. INTRODUZIONE AD HTML L’HTML è una istanza di SGML (Standard Generalized Markup Language) specializzato per gli ipertesti e adattato alle necessità del Web. Il termina “markup” deriva dai tempi in cui i testi da inviare in stampa venivano marcati per indicare alla stamperia il font da usare, la dimensione, ecc. I linguaggi basati su marche (Markup Languages) contengono appunto esplicitamente i comandi di formattazione. Ad esempio, in HTML <B> indicare di visualizzare ciò che segue in grassetto mentre </B> ripristina la visualizzazione normale. Alti esempi ben noti di linguaggi con marche sono TeX e troff. Dal lato opposto dei documenti con marche stanno quelli prodotti con word processor WYSIWYG (What You See Is What You Get) come Word o Word Perfect. Spesso internamente anche questi prodotti memorizzano i documenti con delle marche invisibili durante l’elaborazione che indicano come visualizzare il testo. Non tutti però seguono questo schema. Alcuni, ad esempio, tengono tutti i comandi di formattazione separati dal testo vero e proprio. Tutti questi sistemi di visualizzazione non possono essere sfruttati per il Web perché il formato interno dei documenti non è standardizzato e talvolta non consente neanche di riformattare facilmente la pagina in seguito al cambiamento di risoluzione o numero di colori a disposizione, cosa invece cruciale nel Web dove chi scrive la pagina non ha idea di quali caratteristiche grafiche avrà il sistema con cui poi verrà letta. Come l’HTTP, anche l’HTML è in continua evoluzione. Quando Mosaic era l’unico browser HTML 1.0 era lo standard di fatto. Quando uscirono nuovi browser essi aggiunsero nuove caratteristiche che vennero successivamente standardizzate nell’HTML 2.0. HTML 3.0 aggiunge ad HTML 2.0 molte nuove caratteristiche come tabelle, barra dei comandi, formule, fogli stile per la definizione del layout delle pagine, ecc ed altre funzioni che non tutti i browser supportavano. Tuttavia la standardizzazione dell’HTML non è semplice. I produttori di browser spesso inseriscono funzionalità in più nella speranza che esse si diffondano e rendano l’adozione di quel browser una scelta obbligata, come stava succedendo con l’HTML 3.0, la cui approvazione ebbe una storia travagliata. L’HTML 3.2 introduce le client-side image map e marca un ritorno al ruolo di standardizzazione del Web Consortium. L’HTML 4.0 introduce il meccanismo dei Cascading Style Sheet, supporto allo scripting e miglioramenti a frame, tabelle, inclusione di oggetti, direzione del testo da destra a sinistra. Diamo un’occhiata più da vicino all’HTML. Col diffondersi di editor grafici di pagine Web, la conoscenza del linguaggio HTML diventa sempre meno essenziale per la scrittura di pagine semplici. Una conoscenza approfondita è invece necessaria per l’utilizzo di tutte le potenzialità di HTML, in particolare per un buon controllo degli aspetti visivi e dell’interazione con l’utente. Una pagina Web consiste di una intestazione e di un corpo racchiusi dai comandi <HTML> e </HTML>, sebbene la maggior parte dei browser non diano errori quando questi mancano. L’intestazione è racchiusa tra <HEAD> e </HEAD>, il corpo tra <BODY> e </BODY>. La maggior parte dei comandi HTML hanno questo formato, ovvero <AAA> per indicare l’inizio di qualcosa e </AAA> per indicarne la fine: essi vengono detti anche tag. I tag possono essere scritti indifferentemente in maiuscolo, minuscolo o con una loro combinazione. Il layout del documento HTML è completamente irrilevante. Il browser ignora tutti gli spazi extra e le andate a capo riformattando il tutto solo sulla base dei tag HTML. Conseguentemente spazi e ritorno carrelli possono essere dosati in quantità per rendere il sorgente quanto più leggibile possibile. Inoltre, non possono essere usate delle linee vuote per separare i paragrafi ma occorre utilizzare un tag appropriato. Alcuni tag hanno anche dei parametri con nome. Ad esempio <IMG SRC=”abc” ALT=”testo alternativo”> è un tag con due parametri, SRC e ALT. Per ogni tag lo standard HTML indica quali sono i parametri possibili e il loro significato. L’ordine con cui essi vengono specificati non ha importanza. Vediamo ora un esempio di pagina HTML <HTML> <HEAD> <TITLE> AMALGAMATED WIDGET, INC. </TITLE> <HEAD> <BODY> <H1> Welcome to AWl’s Home Page </H1> <IMG SRC="http://www.widget.com/images/logo.gif" ALT="AWI Logo"> <BR> We are so happy that you have chosen to visit <B> Amalgamated Widget’s</B> home page. We hope <I> you </I> will find all the information you need here. <P>Below we have links to information about our many fine products. You can order electronically (by WWW), by telephone, or by fax. <HR> <H2> Product information </H2> <UL> <LI> <A HREF="http://widget.com/products/big"> Big widgets </A> <LI> <A HREF="http:I/widget.comlproducts/little"> Little widgets </A> </UL> <H2> Telephone numbers </H2> <UL> <LI> By telephone: 1-800-WIDGETS <LI> By fax: 1-415-765-4321 </UL> </BODY> </HTML> Tecnicamente un documento HTML è scritto col set di caratteri ISO 8859-1 detto anche Latin I. Tuttavia, per utenti che hanno tastiere che supportano solo il set di carattere ASCII sono presenti dei particolari codici per l’introduzione di caratteri speciali, quali ad esempio quelli accentati. Ogni codice inizia con una & e finisce con i due punti. Ad esempio &egrave; produce è mentre &acute; produce é. Poiché >, < e & hanno significati speciali, possono essere introdotti solo grazie ai loro codici associati, &gt; &lt; e &amp; rispettivamente. L’elemento principale nell’intestazione è il titolo della pagina, delimitato da <TITLE> e </TITLE>. Non è visualizzato nella pagina ma alcuni browser lo usano come intestazione della finestra che la contiene. Nel corpo della pagina molto importanti sono i tag <Hn> dove n varia da 1 a 6. Essi individuano le intestazioni delle varie sezioni in cui si può dividere una pagina Web: <H1> è l’intestazione più importante, visualizzata quindi col carattere più grande e visibile, <H6> l’intestazione meno importante. Tutte le decisioni su come esse devono essere visualizzate sono comunque di competenza del browser e non sono specificate dallo standard HTML. I tag <B> ed <I> sono usati per i modi grassetto e italico rispettivamente. Invece di specificare stili fisici è possibile specificare stili logici come <ON> (definizione), <EM> (enfatizzato debole), <STRONG> (enfatizzato forte) e <VAR> (variabili di programmi). Gli stili logici sono definiti in un documento chiamato foglio di stile. Il vantaggio nell’usare gli stili logici è che semplicemente cambiando una definizione è possibile modificare l’aspetto di, ad esempio, tutte le variabili da un font all’altro. L’HTML ha anche vari meccanismi per la costruzione di liste, anche nidificate. Il tag <UL> indica l’inizio di una lista non ordinata. I singoli elementi, marcati con <LI>, appaiono preceduti da un simbolo come . Se <OL> viene usato invece di <UL>, gli elementi della lista vengono numerati. Infine <MENU> produce una lista più compatta, senza numeri né simboli per ogni elemento. Tag Descrizione <HTML> … </HTML> Declares the Web page to be written in HTML <HEAD> … </HEAD> Delimita l’intestazione della pagina <TITLE> … </TITLE> Definisce il titolo (non appare nella pagina) <BODY> … </BODY> Delimita il corpo della pagina <Hn> </Hn> Delimita il titolo di livello n <B> … </B> Mostra … in grassetto <I> … </I> Mostra … in corsivo <TT> … </TT> Mostra … in carattere a spaziatura fissa <UL> … </UL> Delimita una lista non ordinata (con punti) <OL> … </OL> Delimita una lista ordinata <MENU> … </MENU> Delimita un menu di elementi <LI> <LI> … </LI> Indica un elemento di lista <BR> A capo linea <P> … </P> Paragrafo <HR> Riga orizzontale <PRE>... </PRE> Testo preformattato, da non formattare <IMG SRC="…"> Inserisce un immagine <A HREF="…"> … </A> Ancora per un iperlink Figura 1.1 Alcuni dei tag HTML comuni. Il tag <DIR> può essere usato per costruire brevi tabelle. Un altro interessante meccanismo per le liste è <DL> per la creazione di glossari. Ogni elemento del glossario è formato da due parti, delimitate da <DT> e <DD> rispettivamente. La prima parte indica il termine da definire, la seconda la definizione stessa. Tutte queste caratteristiche sono comunque rese obsolete dal ben più generale meccanismo per la creazione di tabelle che vedremo in seguito. I tag <BR>, <P> e <HR> servono invece a specificare suddivisioni tra varie parti del testo. <BR> forza una interruzione di linea. Tipicamente i browser non inseriscono nessuna linea vuota dopo <BR>. Il tag <P> indica invece l’inizio di un nuovo paragrafo, di solito visualizzato indentato e separato da quello precedente da una linea bianca. <HR>, infine, forza una interruzione di linea e traccia una riga orizzontale di separazione. 2 Tag Descrizione Esempio <DFN> per definire un termine. Normalmente mostrato in corsivo. HTML è un linguaggio SGML <EM> per enfasi. Normalmente mostrato in corsivo. È consigliabile usare gli stili logici <CITE> per titoli di libri, film, ecc. Normalmente mostrato in corsivo. A Beginner's Guide to HTML <CODE> per listato di programmi. Viene usata fonte a spaziatura fissa. Includere il file <stdio.h> <KBD> per input di utente da tastiera. Viene usata fonte a spaziatura fissa. Inserire passwd per cambiare la password <SAMP> per una sequenza di caratteri. Viene usata fonte a spaziatura fissa. Segmentation fault: Core dumped <STRONG> per un’enfasi maggiore. Normalmente mostrato in grassetto. NOTA: Controllare sempre i propri link <VAR> per una variabile, da sostituire con valori specifici. Normalmente mostrata in corsivo. rm filename cancella il file Figura 1.2 Gli stili logici. Visto che l’HTML 1.0 non prevedeva la possibilità di inserire tabelle o simili, è stato dotato della possibilità di inserire testo preformattato, che va inserito tra i tag <PRE> e </PRE>. Esso viene visualizzato così come è scritto nel file: tutti gli spazi, i ritorni carrello, le tabulazioni, ecc. sono significativi. Spesso viene utilizzato allo scopo un font a larghezza fissa che consente di mantenere al meglio la formattazione originale. Il tag <IMG> consente di inserire una immagine nella posizione corrente della pagina. Il parametro SRC specifica l’URL dell’immagine. Lo standard HTML non specifica il tipo di immagini supportate ma in pratica tutti i browser supportano almeno GIF e JPEG. Altri parametri di <IMG> sono ALIGN che controlla l’allineamento dell’immagine rispetto alla linea base del testo ( TOP, MIDDLE, BOTTOM), ALT per fornire un testo alternativo che verrà visualizzato quando il browser non è in grado di visualizzare l’immagine (formato non supportato, immagini disabilitate dall’utente, ecc.) e ISMAP che indica che l’immagine è in realtà una mappa attiva, in grado di rispondere in maniera a seconda del punto su cui viene cliccata. Infine, è possibile inserire nella pagine i famosi link ipertestuali, grazie ai tag <A> (ancora) e </A>. Alcuni dei possibili parametri sono HREF (l’URL della pagina destinazione), NAME (il nome del link) e METHODS (metodo di accesso). Il browser visualizzato il testo tra <A> e </A> e salta alla pagina specificata quando l’utente clicca su di esso. È possibile anche inserire un tag <IMG> dentro la coppia <A> e </A> per trasformare una immagine in un collegamento ipertestuale. Per esempio, consideriamo questo frammento di HTML: <A HREF="http://www.nasa.gov”> NASA’s home page </A> Sullo schermo apparirà: NASA’s home page Se l’utente clicca sul testo, il browser carica la pagina la cui URL è http://www.nasa.gov e la mostra. Invece, se scriviamo: <A HREF="http://www.nasa.gov"> <IMO SRC="shuttle.gif" ALT=”NASA”> </A> apparirà un’immagine (es. dello space shuttle). Cliccando sulla immagine si salta sulla pagina della NASA, esattamente come nel caso precedente. Se però l’utente ha disabilitato la visualizzazione delle immagini, la scritta NASA apparirà al posto dell’immagine. Il tag <A> può avere un parametro NAME per inserire un iperlink che può venire riferito dall’interno della pagina. Per esempio, in certe pagine si può creare una tavola dei contenuti. Cliccando su un elemento della tavola si salta alla corrispondente sezione del documento. 3 1.1.1 Tabelle Le tabelle sono state inserite al linguaggio HTML nella sua terza revisione. Una tabella consiste di una o più righe, ognuna formata da una o più celle. Ogni cella può contenere testo, immagini o anche altre tabelle. Le celle possono anche essere fuse tra di loro. L’autore della pagina ha un certo controllo sul layout della tabella come l’allineamento o lo stile dei bordi ma la parola finale spetta comunque al browser. Ecco un esempio di tabella in HTML <HTML> <HEAD> <TITLE> Esempio di tabella </TITLE> <HEAD> <BODY> <TABLE BORDER=ALL RULES=ALL> <CAPTION ALIGN=BOTTOM > Differenze tra le varie versioni di HTML </CAPTION> <COL ALIGN=LEFT> <COL ALIGN=CENTER> <COL ALIGN=CENTER> <COL ALIGN=CENTER> <COL ALIGN=CENTER> <TR> <TH> Caratteristica <TH> HTML 1 <TH> HTML 2 <TH> HTML 3 <TH> HTML 4 <TR> <TH> Collegamenti ipertestuali <TD> x <TD> x <TD> x <TD> x <TR> <TH> Immagini <TD> x <TD> x <TD> x <TD> x <TR> <TH> Liste <TD> x <TD> x <TD> x <TD> x <TR> <TH> Frame <TD> <TD> x <TD> x <TD> x <TR> <TH> Mappe e immagini attive <TD> <TD> x <TD> x <TD> x <TR> <TH> Form <TD> <TD> x <TD> x <TD> x <TR> <TH> Tabelle <TD> <TD> <TD> x <TD> x <TR> <TH> Equazioni <TD> <TD> <TD> x <TD> x <TR> <TH> Barre con pulsanti <TD> <TD> <TD> x <TD> x <TR> <TH> Mappe lato cliente <TD> <TD> <TD> <TD> x <TR> <TH> Cascading Style Sheet <TD> <TD> <TD> <TD> x </TABLE> </BODY> </HTML> che viene visualizzata più o meno come segue Caratteristica Collegamenti ipertestuali Immagini Liste Frame Mappe e immagini attive Form Tabelle Equazioni Barre con pulsanti Mappe lato cliente Cascading Style Sheet HTML 1 x x x HTML 2 x x x x x x HTML 3 x x x x x x x x x x HTML 4 x x x x x x x x x x x Figura 1.3 Differenze tra le varie versioni di HTML Le tabelle iniziano con il tag <TABLE> che specifica anche alcune proprietà generali della tabella. Il tag <CAPTION> serve a specificare un titolo per la tabella. Ogni riga inizia col tag <TR> (Table Row) mentre le singole celle vengano marcate con <TH> (Table Header) o <TD> (Table Data). La differenza consente ai browser di usare font diversi nei due casi. 1.1.2 Mappe Le image map sono immagini che contengono aree a cui sono associati dei riferimenti ipertestuali. Cliccando in una di queste aree, si segue il link ad essa associato. Per la realizzazione di questo meccanismo, fino alla versione HTML 2, era necessario utilizzare degli script sul server tramite l’opzione ISMAP. HTML 3 introduce le mappe sul lato cliente (client-side map), di cui vediamo qui un esempio. L’attributo usemap serve ad indicare la mappa da usare per individuare i link. <IMG src="images/contenuti.gif" border=0 usemap="#topics" alt="Contenuti" border="0"> <MAP NAME="topics"> <AREA SHAPE=RECT COORDS="125,120,350,170" HREF=why.html> <AREA SHAPE=RECT COORDS="125,200,350,250" HREF=what.html> 4 <AREA SHAPE=RECT COORDS="125,280,350,330" HREF=how.html> </MAP> Per calcolare le coordinate delle aree cliccabili, esistono diversi strumenti (es. Mapedit, http://www.boutell.com/mapedit) che consentono di costruirle interattivamente ed farsi produrre il codice HTML. 1.1.3 Frame 1.1.4 Cascading Style Sheet 1.1.5 Form L’HTML 1.0 era un linguaggio progettato per una comunicazione a senso unico: non era possibile spedire informazioni dal browser al server. Quando il Web si iniziò a diffondere presso organizzazioni commerciali iniziò a nascere prepotentemente l’esigenza di una comunicazione bidirezionale, ad esempio per l’acquisizione di ordini in remoto, la registrazione automatica del software, l’immissione di password per l’accesso a siti riservati. Tutto ciò portò all’introduzione delle form nell’HTML 2.0. Le form contengono pulsanti e spazio per l’inserimento di testi in modo che l’utente possa effettuare delle scelte, inserire dei dati e rimandare tutto all’autore della pagina. Allo scopo viene definito il nuovo tag <INPUT>, dotato di tutta una serie di parametri per specificare dimensione, tipo e utilizzo dei campi di immissione visualizzati. I tipi più comuni sono campi vuoti per l’inserimento di testo, checkbox, mappe attive e pulsanti di sottomissione. Ecco un esempio di form. <FORM ACTION=”http://widget.com/cig-bin/widgetorder” METHOD=POST> Nome <INPUT NAME=”cliente” SIZE=46> <P> Indirizzo <INPUT NAME=”indirizzo” SIZE=40> <P> Citt&agrave <INPUT NAME=”citta” SIZE=20> Stato <INPUT STATO=”stato” SIZE=15> <P> Carta di Credito <INPUT NAME=”carta” TYPE=PASSWORD SIZE=10> Data scandenza <INPUT NAME=”data” SIZE=10> <P> M/C <INPUT NAME=”cc” TYPE=RADIO VALUE=”mastercard”> Visa <INPUT NAME=”cc” TYPE=RADIO VALUE=”visa”> <INPUT TYPE=SUBMIT VALUE=”Invia ordine”> <P> </FORM> Tutte le form sono racchiuse tra i tag <FORM> e </FORM>. Il testo all’interno è visualizzato come al solito e tutti i comandi di formattazione sono disponibili. Questa form utilizza tre tipi di campi di input, ed apparirà così: Figura 1.4 Esempio di form. I primi sei campi specificati dal comando <INPUT> sono di tipo testo e servono all’immissione di testo. Il parametro NAME serve al browser quando spedisce il risultato della form al server. Ne vedremo l’utilizzo in seguito. Il parametro SIZE specifica invece il numero di caratteri massimo ammessi nel campo di input. Il parametro TYPE, se presente, consente di specificare tipi diversi di campi di immissione. Il tag <P> indica come al solito di andare a capo. Il primo campo della form è di 46 caratteri ed appare sulla prima riga a fianco dell’etichetta Nome, segue poi una linea che richiede la Indirizzo, lungo 40 caratteri, poi la Città e lo Stato sulla stessa riga, poi Carta di Credito e Data scadenza. Per il campo Carta di Credito si indica il tipo PASSWORD, in modo che il testo non appaia sullo schermo. 5 Nell’ultima riga della form sono inseriti due radio button. Il fatto che due pulsanti radio abbiano lo stesso nome indica che appartengono allo stesso gruppo e quindi sono mutuamente esclusivi. Il campo VALUE serve al pari di NAME durante la trasmissione del risultato al server. A seconda di quale delle due opzioni ha scelto l’utente, la variabile cc avrà come valore la stringa “mastercard” oppure “visa”. Il browser si occupa di visualizzare i radio button in maniera da consentire all’utente di selezionarli e deselezoinarli cliccandoci sopra (o usando la tastiera). La presentazione visuale sarà consistente con l’interfaccia utente del sistema utilizzato: il risultato sarà dunque diverso nel caso si operi sotto Windows, MacOS, Motif o altro. Una campo di tipo CHECKBOX è simile al RADIO ma i vari box appartenenti allo stesso gruppo possono essere abilitati o disabilitati indipendentemente l’uno dagli altri. Nel caso la scelta debba avvenire tra una lista molto lunga di alternative, i radio buttons e i checkbox non sono i più adatti. Sono da preferire invece i tag <SELECT> e </SELECT>, all’interno dei quali va specificata una lista di alternative possibili. La semantica è quella dei radio button (scelte mutuamente esclusive) a meno che non si usi il parametro MULTIPLE, nel qual caso si usa la semantica dei checkbox. Tipicamente i browser visualizzano un campo di questo tipo come un menù popup. Per l’immissione di testo sono disponibili altri campi di input oltre allo standard che è TEXT. Il tipo PASSWORD è simile a TEXT ma i caratteri non sono visualizzati su schermo quando vengono premuti. Una campo TEXTAREA si differenzia invece da TEXT perché accenta input contenenti più di una linea. Si noti che la trasmissione di password, numeri di carte di credito e simili via Internet pone notevoli problemi di sicurezza e dovrebbe avvenire solo quando sono presenti adeguate misure di sicurezza, come cifrature. Infine, una campo di tipo SUBMIT, che si presenta esteticamente come un pulsante, quando viene premuto provoca l’invio della form riempita al server HTTP. Il campo VALUE in questo caso è l’etichetta che viene visualizzata sul pulsante. Un altro tipo di pulsante è il RESET che ripristina la form con i valori che aveva prima delle modifiche apportate dell’utente. Ancora, abbiamo i campi di tipo HIDDEN. Sono campi di testo ma dedicato esclusivamente all’output. Vengono di solito utilizzati nel caso di form consecutive per ricordare all’utente eventuali scelte fatte in precedenza. Infine IMAGE è per le immagini attive. Quando l’utente clicca sull’immagine, le coordinate (x, y) del pixel selezionato (ovvero la posizione corrente del puntatore del mouse) sono memorizzate in opportune variabili e la form viene spedita al server. In sostanza ci sono tre modi per inviare una form al server: l’uso di un pulsante SUBMIT, di una immagine cliccabile o premendo ENTER in una form composta da un solo campo di tipo testuale. Il metodo con cui i dati vengono spediti dipende dal parametro METHOD specificato col tag <FORM> e il destinatario è indicato dal parametro ACTION. Se si specifica GET come metodo, l’unico modo per far conoscere al server il contenuto di una form è appendere all’URL di una pagina una serie di associazioni variabili/valori, separate da un punto interrogativo dal resto dell’URL. Questo metodo porta ad avere URL lunghe centinaia di caratteri ma è molto usato per la sua estrema semplicità. Se il metodo specificato è POST, viene invece spedito al server un messaggio il cui corpo contiene le associazioni tra variabili e valori. In entrambi i casi, la & è usata per separare i campi mentre + rappresenta uno spazio. Per esempio, la risposta alla form di prima potrebbe essere cliente=Mario+Rossi&indirizzo=piazza+Giulio+Cesare+100&citta=Roma&stato=Italia &carta=1234567890&data=21/12/1998&cc=mastercard La stringa viene spedita al server in una singola linea. Se nessun checkbox in un gruppo è selezionato, l’intero gruppo viene omesso dalla risposta. Chiaramente, il compito di dare un senso a queste risposte è totale appannaggio del server. Per fortuna uno standard in questo settore è già ben definito ed è chiamato CGI (Common Gateway Interface). 1.2 Gli script CGI Gli script CGI (Common Gateway Interface) sono programmi esterni che girano sul server Web, utilizzati per creare pagine altamente interattive. Gli sviluppatori del CGI hanno voluto creare qualcosa di estremamente potente ed estensibile che nel contempo fosse completamente invisibile dal lato del fruitore delle pagine. Il lettore, infatti, deve solo cliccare su un collegamento, su una immagine attiva o su un pulsante SUBMIT di una form per attivare l’esecuzione anche di script molto complessi: tutto ciò di cui lui verrà a conoscenza è il risultato dell’elaborazione, che sembrerà apparire sullo schermo automaticamente. Quello che però sta accadendo realmente è ben più complesso. Sintetizzando: Il browser manda gli input al server Web, Il server a sua volta passa gli input allo script CGI, Lo script CGI elabora gli input, li passa eventualmente ad altre applicazioni, e manda il risultato al server Web, Il server Web passa l’output di nuovo al browser. L’output può essere qualunque cosa dal risultato di una ricerca in un database ad una pagina completamente nuova. 6 Sui sistemi UNIX gli script risiedono in una directory particolare chiamata cgi-bin sotto /usr. Sugli altri sistemi la posizione degli script può in generale essere diversa ma basta consultare il manuale del server Web per scoprirla. Quello che è comunque necessario per un corretto funzionamento degli script CGI è che qualsiasi accesso ad un file che stia nella directory riservata a questi script non provochi la spedizione del file al client ma l’esecuzione dello stesso. Gli script possono essere scritti in un linguaggio qualunque: shell dei comandi per sistemi UNIX, C, Tcl, Perl, ecc. In genere il linguaggio da preferire dipenderà dai compiti che deve svolgere lo script: quando si richieda grande velocità o elaborazioni numeriche è conveniente usare il C ma per complesse elaborazioni di testo è probabilmente preferibile orientarsi su linguaggi magari più lenti ma che dispongono di sofisticate funzioni di elaborazione di stringhe quali il Perl. In generale, gli usi comuni per un server CGI sono: tenere traccia del numero dei visitatori di una pagina Web, elaborare gli input di una form, tipicamente stringhe da ricercare in qualche database, e visualizzare i risultati della ricerca, identificare l’utente con l’inserimento di password e consentirne l’accesso ad aree ristrette del Web, elaborare l’input dalle immagini attive e dirigere il lettore sul documento associato, generare documenti basati sul tipo del browser impiegato dall’utente 1.2.1 Input agli script CGI Quando un utente attiva uno script CGI, il browser manda degli input al server Web. Questi raggiungeranno lo script sotto varie forme: variabili d’ambiente, linea di comando, standard input. La forma più comune di input agli script è proprio tramite variabili d’ambiente. Vediamone alcune standard. CONTENT_LENGTH: contiene il numero di caratteri passati allo script CGI tramite lo standard input CONTENT_TYPE: indica il tipo MIME dei dati sullo standard input nella classica forma type/subtype. HTTP_USER_AGENT: identifica il tipo di browser che ha mandato la richiesta, nella forma software type/version. As esempio Mozilla/2.0 identifica il NetScape 2.0. PATH_INFO: specifica informazioni di percorso addizionali che possono essere usate per mandare informazioni allo script. L’informazione extra segue l’URL dello script. Se ad esempio si accede ad uno script tramite l’URL /usr/cgi-bin/formparse.pl/home.html la variabile PATH_INFO avrà valore /home.html. QUERY_STRING: specifica una stringa codificata secondo le regole viste nella sezione precedente per le query originate dall’uso delle form. Quando uno script viene acceduto con una URL che contiene al suo interno un punto interrogativo, tutto quello che segue tale simbolo di interpunzione viene prelevato e passato allo script tramite questa variabile di ambiente. È il metodo usato dalle form con METHOD pari a GET per passare allo script il contenuto dei vari campi. REQUEST_METHOD: indica il metodo con il quale la richiesta è avvenuta. I più usati sono GET, HEAD e POST. Quando il metodo per la richiesta è HEAD o GET di solito non viene passato nessun dato allo standard input dello script. Diversamente, se il metodo è POST, il messaggio spedito dal browser al Web viene passato nello standard input allo script. È questo il caso, ad esempio, delle form con METHOD pari a POST. La linea di comando di uno script CGI viene usata molto raramente, in congiunzione con le query di tipo ISINDEX di cui però noi non parleremo. 7