Introduzione
2
[ISTR96] [ISTR97]. Queste spiegazioni sono state ricavate convertendo in
formato HTML le istruzioni ufficiali del Ministero delle Finanze e sfruttando
l’integrazione tra l’applet e il browser che lo contiene.
La tesi è divisa in due parti: la prima (Capitoli 1, 2 e 3) illustra il linguaggio Java,
mentre nella seconda (Capitolo 4, Appendici A e B) viene descritto il progetto.
Nel primo capitolo si introducono l’elaborazione client-server e il World Wide
Web: vengono presi in esame i vantaggi, i costi e i requisiti dell’elaborazione
client-server, mentre per quanto riguarda il World Wide Web ne viene descritta
brevemente la storia e le principali caratteristiche.
Nel secondo capitolo analizziamo le caratteristiche fondamentali del linguaggio
Java: ne descriviamo la storia e illustriamo il concetto di linguaggio orientato agli
oggetti. Quest’ultimo aspetto viene poi ripreso quando spieghiamo come Java
implementa la classe, mentre nell’ultimo paragrafo vengono illustrate le principali
differenze tra Java e C++.
Nel capitolo tre abbiamo affrontato argomenti specifici di Java, con particolare
attenzione verso quelle parti che sono state utilizzate nella realizzazione del
progetto, cioè le librerie di classi per costruire applet, interfacce grafiche e per
gestire le operazioni di I/O da rete. Gli ultimi due paragrafi spiegano come sia
realizzata l’indipendenza del linguaggio dalla specifica piattaforma.
Nel capitolo quattro si illustrano le principali scelte di progetto, si descrivono le
finestre di calcolo e si presenta un esempio di compilazione del modello 740/97.
Nelle appendici A e B riportiamo porzioni di codice dei due programmi: prima
viene illustrato il codice per il modello 740/96 e successivamente vengono
mostrate le principali differenze per la versione ‘97.
Capitolo 1 - Elaborazione client-server e World Wide Web
3
In questo primo capitolo viene introdotta l’elaborazione client-server; dato che
questo tipo di elaborazione trova ampio utilizzo in ambienti di rete, ne
consideriamo vantaggi, costi, difficoltà nella realizzazione e requisiti. Nella
successiva parte vengono descritte la storia e le principali caratteristiche del
World Wide Web.
1.1 Introduzione all’elaborazione client-server
Le applicazioni tradizionali possono essere mainframe nel qual caso tutta
l’elaborazione viene eseguita nel computer mainframe oppure autonome nel qual
caso la computazione avviene in una singola stazione di lavoro: rispetto a questo
panorama, l’elaborazione client-server rappresenta un’alternativa allettante, dal
momento che racchiude in sé il meglio delle caratteristiche delle elaborazioni
autonome e mainframe.
Potremmo dare una definizione dell’elaborazione client-server dicendo che è la
suddivisione di un programma applicativo in due componenti logicamente
separati, ciascuno dei quali svolge un compito diverso: in generale il programma
client, o front-end, invia una richiesta di esecuzione di un task al programma
server, o back-end, il quale la elabora e restituisce il risultato della propria
computazione al client. Il carico lavorativo viene eseguito su due computer invece
che uno e inoltre, la flessibilità della tecnologia client-server, permette di decidere
quali aspetti logici dell’elaborazione devono essere ospitati sul client e quali sul
server. Grazie a questa possibilità di migrazione di parti del programma
applicativo, lo sviluppatore può determinare il conseguimento di risultati ottimali.
I computer server, più potenti e veloci dei computer client, sono più idonei a
gestire il lavoro proveniente da altri sistemi.
Capitolo 1 - Elaborazione client-server e World Wide Web
4
Solitamente client e server si trovano su macchine fisicamente separate e
utilizzano una qualche LAN per comunicare; questo fatto si coniuga bene con
l’evoluzione del mercato informatico, poiché è in atto una tendenza a personal
computer potenti e veloci, sempre più frequentemente collegati in un ambiente di
rete locale.
L’elaborazione client-server è molto diversa dall’elaborazione mainframe, ma dal
punto di vista logico possiamo trovare un elemento in comune: entrambe
elaborano centralmente la logica delle applicazioni per conto di utenti remoti che
sono connessi mediante una forma di rete fisica. Dal punto di vista
dell’architettura, la differenza più evidente, è che nell’elaborazione client-sever i
client sono intelligenti, dato che possiedono una e vera e propria CPU e svolgono
elaborazioni su dati reali, mentre i terminali mainframe fungono solo da
input/output di un computer mainframe che elabora centralmente la logica
dell’applicazione. E’ opportuno notare che in caso di eccessivo utilizzo del server,
il sistema tende sempre più all’impostazione mainframe e, poiché la
computazione è eseguita su macchine di piccole dimensioni, le prestazioni
possono subire un peggioramento [JDS94].
1.1.1 Vantaggi dell’elaborazione client-server
La tecnologia client-server offre il potenziale per applicazioni più efficienti sia nel
caso di migrazione da programmi autonomi che di downsizing (il termine
downsizing può essere definito come il passaggio da applicazioni mainframe a
piattaforme elaborative più piccole e meno costose, quali UNIX, OS/2, Windows
NT). Un visibile vantaggio della tecnologia client-server, è rappresentato dalla
riduzione del tempo di esecuzione totale, poiché il lavoro è demandato a macchine
con capacità elaborative più elevate; affidando le attività più onerose ai computer
server, può verificarsi una diminuzione della quantità d’uso della CPU della
macchina client e, se il sistema operativo client è multitasking, si possono
eseguire altre applicazioni mentre si attende che la macchina server completi il
lavoro (questa possibilità risulta molto importante nel downsizing affinché non vi
sia un decadimento delle prestazioni). Bisogna però, fare attenzione a combinare
l’esecuzione del codice client e del codice server, perché diminuendo l’uso della
Capitolo 1 - Elaborazione client-server e World Wide Web
5
CPU del client e aumentando quello del server, quest’ultimo può sovraccaricarsi
peggiorando le performance del sistema.
L’elaborazione client-server presenta dei vantaggi anche per la aziende: se i
computer più costosi e con maggiore capacità elaborativa vengono condivisi tra
molti client, questi ultimi possono essere conservati più a lungo permettendo di
indirizzare gli investimenti verso macchine ad alte prestazioni per smaltire il
carico di lavoro supplementare.
L’elaborazione client-server prevede un limitato uso della memoria del client,
dato che molte funzioni riguardanti la computazione vengono installate su un altro
sistema; questo fenomeno è molto meno importante oggi di quanto non lo fosse
nel passato, grazie al miglioramento tecnologico dei processori client e alle
ingenti scorte di memoria; nonostante ciò, le restrizioni su questa risorsa
rappresentano ancora un limite importate per molti utenti, per cui ogni sgravio di
memoria risulta apprezzato.
Un altro vantaggio dell’elaborazione client-server è rappresentato dalla riduzione
del traffico di rete; dal punto di vista dell’architettura, il modello client-server
prevede che il client invii una richiesta di esecuzione al server, che questo la
elabori e risponda ad essa; in tale situazione, l’effettiva manipolazione dei dati
avviene nel computer server e non sono effettuati trasferimenti alla macchina
client se non al termine del lavoro richiesto.
L’elaborazione client-server permette anche una elevata scalabilità: con questo
termine si intende la capacità di utilizzare sistemi più potenti per l’esecuzione di
programmi applicativi. La scalabilità incide su tutti gli aspetti dell’elaborazione
client-server, dall’hardware, ai sistemi operativi, alle applicazioni. Affinché un
ambiente client-server, frutto del downsizing, possa essere competitivo con
l’elaborazione mainframe, è necessario che man mano che il carico di lavoro
aumenta, le soluzioni basate su singolo server, possano essere ampliate
aggiungendo potenza elaborativa al server oppure incorporando un altro server
che contribuisca allo smaltimento delle richieste.
Come precedentemente accennato, l’evoluzione del mercato informatico punta
verso microprocessori sempre più veloci e potenti: essi iniziano a soddisfare le
esigenze delle aziende supportando sia server di fascia bassa del mercato che
Capitolo 1 - Elaborazione client-server e World Wide Web
6
superserver per l’elaborazione ad altissime prestazioni. In questo scenario, un
importante primo passo verso la scalabilità dell’hardware, è rappresentato dai
multiprocessori: i sistemi che adottano questa tecnologia hanno a disposizione
non una singola CPU ma potenzialmente molte CPU e questo, ovviamente,
determina un aumento delle prestazioni; inoltre, sui microprocessori server sono
state introdotte funzioni di tolleranza degli errori che fino a qualche tempo fa
erano a esclusivo appannaggio dei minicomputer e dei mainframe.
E’ importante che anche i sistemi operativi siano scalabili: devono poter essere
alloggiati in molti processori diversi e devono supportare, per esempio, le
macchine multiprocessor.
Quando si verifica un intasamento consistente, è necessario che anche i
componenti applicativi siano estensibili: se un programma client risulta sommerso
dal carico di lavoro in una posizione esclusivamente client, può diventare più
efficiente in un server; quando un server non riesce più a gestire in maniera
efficiente le richieste provenienti dai client, può essere necessaria l’interazione di
molti server: in altri termini subentra la necessità di un’elaborazione distribuita.
L’elaborazione distribuita è una forma più ampia di elaborazione client-server, dal
momento che molte macchine possono svolgere il lavoro per conto degli
apparecchi client. In effetti, la definizione di elaborazione client-server specifica
che esiste un singolo server che risponde alle richieste provenienti da più client,
ma una applicazione che svolge operazioni per conto di altre macchine può
comunque essere considerata un’applicazione server [JDS94].
1.1.2 Costi dell’elaborazione client-server
L’elaborazione client-server comporta, ovviamente, dei costi: all’inizio si pensava
che rispetto ai mainframe o ai minicomputer, l’alternativa client-server fosse più
economica sotto tutti i punti di vista, ma alcune ricerche hanno evidenziato che i
costi per creare dal nulla un nuovo sistema client-server equivalgono a quelli per
la messa in opera dei sistemi tradizionali. Se l’onere totale è paragonabile, le
singole voci di costo variano in misura notevole: con riferimento a un sistema
basato su minicomputer, si è notato quanto i costi relativi alla manodopera dei
sistemi client-server (formazione e manutenzione), siano elevati e rappresentino
Capitolo 1 - Elaborazione client-server e World Wide Web
7
quasi la metà della spesa totale. Ciò è dovuto ai problemi di gestione insiti nelle
reti, a differenza dei mainframe o dei minicomputer che prevedono una strategia
centralizzata lungamente sperimentata e collaudata. I costi dell’infrastruttura per
l’elaborazione client-server sono inferiori rispetto a quelli dei sistemi basati su
minicomputer, anche se la differenza è irrisoria, poiché è necessario acquistare
PC, reti, gateway, bridge, router [AST92].
L’elaborazione client-server si avvantaggia notevolmente nel costo per lo
sviluppo di applicazioni, poiché risulta notevolmente inferiore rispetto a quello
delle tecnologie basate su minicomputer; questa differenza è dovuta a molti
fattori, tra cui gli strumenti di sviluppo disponibili e la relativa facilità insita nella
creazione di applicazioni con questi strumenti.
L’elaborazione client-server permette di conservare gli investimenti esistenti, dal
momento che la distribuzione delle funzionalità tra due o più macchine riduce i
requisiti hardware dei client; gli studi dimostrano che una modifica consistente
alle capacità elaborative delle macchine client, apporta un miglioramento
marginale ai tempi di esecuzione dei client, perché questi affidano il maggior
carico di lavoro agli elaboratori server: ciò significa che le macchine meno potenti
possono essere mantenute per periodi di tempo più lunghi.
In ogni caso la tecnologia client-server diventerà sempre più conveniente grazie
alla diminuzione sia dei costi dell’hardware che delle infrastrutture e alla
maggiore produttività degli strumenti di sviluppo; è inoltre probabile che man
mano che la popolazione informatica prenderà confidenza con questo tipo di
tecnologia, anche i notevoli oneri legati alla manodopera subiranno un ribasso
[JDS94].
1.1.3 Difficoltà nella realizzazione di un ambiente elaborativo
client-server
Nell’elaborazione client-server bisogna tenere conto della diversità degli ambienti
elaborativi attuali (PC, minicomputer, mainframe, e sistemi operativi di vario
genere): i problemi attinenti l’elaborazione eterogenea per i tre componenti
principali costituenti un sistema, quali l’hardware, il sistema operativo e i
Capitolo 1 - Elaborazione client-server e World Wide Web
8
programmi software, sono diversi: le piattaforme hardware per esempio, devono
essere in grado di supportare più reti, protocolli e sistemi operativi; questi ultimi
devono funzionare indipendentemente dall’hardware sottostante e comunicare con
altri sistemi operativi e protocolli dissimili. Gli sviluppatori di software devono
affrontare il dilemma di creare applicazioni che risultino portabili da una
piattaforma all’altra, nel modo più semplice, più economico e meno problematico
possibile. Con il termine portabilità si intende la quantità di lavoro necessaria per
ricodificare un’applicazione esistente, in modo tale che possa essere eseguita su
un’altra piattaforma. Specialmente nei sistemi client-server, la possibilità di
eseguire programmi cross-platform, è diventato un imperativo per gli sviluppatori
di applicazioni. Nella fase di programmazione è necessario che essi garantiscano
un certo insieme di funzionalità: come è già stato anticipato, le applicazioni
devono poter essere eseguite su piattaforme multiple per offrire agli utenti
maggior libertà di scelta; secondariamente, i programmi devono mantenere lo
stesso aspetto e la stessa fisionomia (per esempio il layout, le voci di menu e le
informazioni delle finestre di dialogo dovrebbero essere uniformi in tutte le
piattaforme); infine il software deve comportarsi in modo analogo in tutti i
sistemi: se una caratteristica o una funzione è disponibile in una piattaforma, deve
esserlo in tutte le altre.
Nella realizzazione di applicazioni client-sever bisogna prestare molta attenzione
alla posizione di esecuzione dei moduli; molti componenti applicativi possono
essere eseguiti più efficientemente nel client oppure nel server: ad esempio, per
ottenere maggiore produttività, è opportuno che i componenti condivisi tra più
client vengano collocati nel server.
Nel passaggio dal modello solo client al modello client-server bisogna fare
attenzione a non sovraccaricare né sottoutilizzare il nodo server o il nodo client:
se questo è sovraccarico, il nodo server è potenzialmente sottoutilizzato; anche la
saturazione di quest’ultimo comporta conseguenze rischiose perché molti client
sono portati a rallentare a causa della macchina vincolata alle risorse. Una
difficoltà risiede nella determinazione del punto di saturazione, poiché alcuni
sistemi operativi server sono più scalabili: aggiungendo potenza o processori
supplementari il punto di saturazione cambia [JDS94].
Capitolo 1 - Elaborazione client-server e World Wide Web
9
1.1.4 Meccanismi di interazione client-server
Una delle differenze tra i programmi applicativi tradizionali e quelli client-server,
è che gli sviluppatori devono creare un meccanismo d’interazione tra i
componenti server e client; in questo senso è necessario definire tre strati
software: il protocollo d’interazione delle applicazioni, una tecnica di
comunicazione e un protocollo di rete.
Il protocollo d’interazione delle applicazioni è definito in modo unico per ciascun
programma e serve per descrivere logicamente i dati trasmessi tra gli elementi
client e server. Questo protocollo viene solitamente adottato in combinazione con
la tecnica di comunicazione ed è indipendente dal protocollo di rete utilizzato per
l’effettiva trasmissione dei dati. Generalmente esistono due tipi di protocolli per
l’interazione delle applicazioni: quelli predefiniti e quelli flessibili. La scelta di un
protocollo predefinito o flessibile è sovente dettata dalle applicazioni stesse.
Entrambi presentano vantaggi e svantaggi: in un protocollo flessibile, ciascun
parametro deve essere impaccato dal client e disimpaccato dal server per la
trasmissione attraverso la rete; ciò può richiedere molto tempo in base ai dati
trasmessi dai sistemi, ma meno impegno da parte del programmatore. Con un
protocollo predefinito, i dati solitamente vengono trasmessi tra i sistemi in un
formato che non richiede impaccamento e disimpaccamento: in questo modo
vengono aumentate efficienza e velocità di trasmissione, a prezzo di un maggior
impegno da parte del programmatore.
Le tecniche di comunicazione forniscono il meccanismo programmatico per
trasferire i dati delle applicazioni dal client al server: per questo, il protocollo di
interazione delle applicazioni può variare in base alla scelta della tecnica di
comunicazione. Di queste ne esistono vari tipi: chiamate di procedure remote
(RPC, Remote Procedure Call), messaggi, orientamento agli oggetti.
Le chiamate di procedure remote rappresentano il modo più rapido per convertire
i programmi autonomi in componenti client e server; la codifica manuale delle
RPC è un processo difficile che risulta facilitato dall’uso di precompilatori, i
quali, scandendo il file sorgente con l’aiuto di una guida, gestiscono la
distribuzione delle funzioni delle applicazioni. Un limite delle RPC, è che
Capitolo 1 - Elaborazione client-server e World Wide Web
10
tradizionalmente hanno sempre avuto una natura sincrona: il client effettua una
richiesta di esecuzione di un task al server e rimane bloccato fino a quando non
giungono i risultati; questa lacuna è stata colmata dagli ultimi prodotti RPC che
forniscono callback asincrone.
I messaggi rappresentano una tecnica di comunicazione estremamente diffusa per
l’interazione client-server: i prodotti per la comunicazione mediante messaggi
sono di natura asincrona, poiché il nodo ricevente possiede un meccanismo di
accodamento dal quale può prelevare i messaggi che il nodo trasmittente gli invia.
Per quanto riguarda l’orientamento agli oggetti, possiamo dire che rappresenta
una tecnologia emergente che si adatta perfettamente all’ambiente client-server.
Poiché l’implementazione di ciascun oggetto è mascherata dall’interfaccia a
oggetti, questi ultimi possono diventare client-server senza eccessiva difficoltà;
inoltre i dati e le funzioni incapsulate nell’oggetto nascondono all’utente la
complessità della loro implementazione.
Nel panorama eterogeneo dell’informatica esiste un gran numero di protocolli di
rete (TCP/IP, IPX/SPX, NetBIOS ecc.); ogni piattaforma ne supporta molti ed è
indispensabile che il protocollo delle applicazioni client-server sia indipendente
da quello di rete. Per esempio, nelle aziende attuali non è possibile che
un’applicazione client-server imponga l’installazione di uno specifico protocollo
di rete: le sedi delle aziende sono tipicamente dotate di centinaia o migliaia di
nodi e l’esigenza di aggiornare o configurare ciascuno di essi con nuovi
protocolli, difficilmente sarebbe accettabile [JDS94].
1.1.5 Requisiti dell’elaborazione client-server
La prima operazione da compiere per passare dalla programmazione autonoma
alla quella client-server, è l’identificazione delle procedure con caratteristiche
simili candidate per la migrazione al server. Dal momento che è molto inefficiente
che il client effettui numerose richieste indipendenti al server, è opportuno che ad
esso vengano trasferiti elementi interi, in modo da minimizzare il numero di
transizioni client-server. Il raggruppamento delle procedure contribuisce a
identificare le dipendenze dei componenti procedurali: talvolta queste dipendenze
dovranno essere attenuate perché i componenti procedurali non sono eseguiti nella
Capitolo 1 - Elaborazione client-server e World Wide Web
11
stessa macchina, altre volte queste dipendenze vanno bene purché rientrino nel
gruppo di elementi logici oggetto del trasferimento.
Una caratteristica importante nelle applicazioni client-server è che, negli ambienti
che supportano thread, i componenti server siano rientranti; il termine rientrante
significa che una procedura applicativa può essere chiamata più volte ed essere
eseguita contemporaneamente ad altre procedure senza causare nessun disturbo.
In questo senso, le variabili locali sono valide perché esistono in uno stack
allocato unicamente per ciascuna chiamata alla procedura; le variabili globali
devono essere evitate perché la loro modifica cambia il valore contenuto in altri
thread che hanno effettuato la chiamata alla stessa procedura. Questa causa di
potenziale errore può essere eliminata creando variabili globali uniche per ciascun
client.
Come è già stato anticipato, la riduzione al minimo della quantità di dati trasmessi
tra client e server è della massima importanza perché la larghezza di banda di una
rete fisica è una risorsa statica e non può essere consumata con la trasmissione di
dati inutili; in tutta la storia dell’elaborazione in rete, il traffico è sempre stato una
causa di intasamenti nei sistemi sovraccarichi. Anche se la larghezza di banda
delle reti sta aumentando (vedi network a fibre ottiche), è sempre bene cercare di
non sprecare questa risorsa. Questo obiettivo può essere raggiunto in vari modi:
cercando di minimizzare il numero di parametri o dati trasmessi, inviando al
server soltanto ciò che è necessario; conservando i dati simili trasmessi dal client
ad ogni chiamata di funzione: le informazioni di stato che viaggiano tra client e
server sono ottime candidate per la conservazione nel server.
Uno dei punti cardini nella realizzazione di applicazioni client-server è
rappresentato dalla modularizzazione del software: con questo termine si intende
la suddivisione dell’applicazione in componenti discreti, in modo da essere
distribuibili da una macchina all’altra. La metodologia di progettazione a oggetti
si presta alla struttura basata su componenti modulari, poiché la classe
rappresenta molto bene un’entità distribuibile e inoltre, perché rende meno
gravoso il compito dello sviluppatore di applicazioni client-server anche per
quanto riguarda la portabilità del codice. Quest’ultima può essere ottenuta sia che
si utilizzi una programmazione procedurale che una a oggetti: da questo punto di
Capitolo 1 - Elaborazione client-server e World Wide Web
12
vista nessuna delle due metodologie offre una produttività superiore rispetto
all’altra, soltanto che i modelli naturali delle tecnologie object oriented sono più
adatti allo sviluppo di applicazioni portabili. Queste devono innanzi tutto limitare
l’impiego di funzioni e dati dipendenti dal sistema operativo sottostante; in un
ambiente basato sulle procedure, questo obiettivo viene raggiunto attraverso una
stratificazione del software, cioè creando strati di codice applicativo tra i servizi
di livello superiore e i servizi dipendenti dal livello inferiore. Le applicazioni,
invece di eseguire chiamate di funzione ai moduli dipendenti dal sistema,
eseguono chiamate a uno strato d’interfaccia di libreria, che a sua volta invoca
funzioni di basso livello dipendenti dal sistema: in questo modo la quantità di
lavoro richiesta per la portabilità dell’applicazione è ridotta perché solo il livello
inferiore deve essere ricodificato.
In un ambiente basato sugli oggetti, sono questi ultimi invece che possono essere
utilizzati come interfacce verso gli strati inferiori [JDS94].
E’ indubbio che lo sforzo per garantire la portabilità del codice non sia
indifferente, dato che il programmatore deve seguire tutti gli accorgimenti
precedentemente descritti; tali difficoltà possono essere ridotte utilizzando Java
come linguaggio di programmazione. Esso si coniuga molto bene con una
elaborazione che richiede codice modulare e distribuibile perché, come vedremo
più avanti, è completamente orientato agli oggetti e portabile su molte piattaforme
senza alcun sforzo aggiuntivo.
1.2 Il World Wide Web
Il World Wide Web è un mezzo per fornire informazioni a un gran numero di
persone sparse in tutto il mondo.
1.2.1 Breve storia del World Wide Web
Il World Wide Web è un sistema d’informazione e comunicazione basato sul
modello client-server, utilizzato per creare e accedere a documenti multimediali
ipertestuali senza riguardo alla loro collocazione fisica: utilizzando un’unica
Capitolo 1 - Elaborazione client-server e World Wide Web
13
interfaccia, elegante ma semplice, tale sistema permette di fornire un’integrazione
trasparente con i servizi già esistenti e quelli in previsione per il futuro
[LGER95a].
Il Web (conosciuto anche come WWW), nacque nel 1989 al CERN di Ginevra, il
centro Europeo di ricerche nucleari; qui si trovano tutt’oggi diversi acceleratori ai
quali lavorano numerosi team di fisici, appartenenti a oltre mezza dozzina di paesi
impegnati in esperimenti molto complessi che richiedono una lunga pianificazione
e una stretta collaborazione tra i vari gruppi di scienziati. Il Web si sviluppò
affinché i team di fisici sparsi in tutto il mondo potessero scambiarsi, per così dire
in “tempo reale”, progetti, rapporti, foto, disegni, e altri documenti. La prima
proposta di documento ipertestuale venne proprio da un fisico del CERN, Tim
Berners-Lee nel marzo del 1989 e il prototipo fu reso operativo 18 mesi dopo, poi
nel dicembre del 1991, alla conferenza Hypertest ‘91 di San Antonio nel Texas,
ne fu data la prima dimostrazione pubblica. Lo sviluppo continuò negli anni
successivi, culminando nel febbraio del 1993, con la presentazione di Mosaic, la
prima interfaccia grafica per il Web: Mosaic divenne così popolare che un anno
dopo il suo autore, Marc Andreessen, lasciò la NCSA (National Center for
Supercomputing Application), dove Mosaic era stato realizzato, per creare una
nuova società, la Netscape Communication Corp., il cui scopo era quello di
sviluppare software per il WWW. Nel 1994, il CERN in collaborazione con il
MIT (Massachusetts Institute of Technology) raggiunse un accordo per fondare il
World Wide Web Consortium, un’organizzazione avente come obiettivi lo
sviluppo del Web, la standardizzazione dei protocolli e la promozione
dell’interoperabilità tra siti. Berners-Lee ne divenne il direttore e da allora molte
compagnie e università sono entrate a farne parte. Oggi il MIT rappresenta la
parte Statunitense del consorzio, mentre l’INRIA, il centro di ricerche Francesi,
ne rappresenta la parte Europea [AST96].
1.2.2 Caratteristiche generali del World Wide Web
Molti confondono il WWW con Internet o con gli strumenti utilizzati per
visualizzare le pagine Web, ma è inesatto perché prima di tutto il WWW non è
Capitolo 1 - Elaborazione client-server e World Wide Web
14
una rete, ma un insieme di programmi; secondariamente, può essere usato sia in
molti differenti tipi di rete (e non necessariamente Internet), sia in network locali
non connesse a nessun altra rete, o ancora in sistemi non collegati a nessuna rete.
Poiché il Web è sostanzialmente un sistema client-server, è possibile analizzarne
le caratteristiche studiando la parte client (cioè l’utente) e la parte server.
Dal punto di vista dell’utente, il Web è composto da un gran numero di documenti
che per semplicità vengono chiamati pagine. Ciascuna pagina può contenere
puntatori (link) ad altre pagine situate in qualunque punto del mondo; seguendo
questi link è possibile attraversare quindi centinaia di pagine; questi documenti
che puntano ad altri documenti sono detti ipertesti. L’utente può visualizzare le
pagine Web sul proprio computer utilizzando un programma chiamato browser, di
cui Mosaic e Netscape sono i rappresentanti più noti; il browser carica la pagina
richiesta, interpreta il testo formattando i comandi che contiene e infine mostra il
documento sullo schermo. All’interno delle pagine Web si trovano poi delle
stringhe, normalmente sottolineate e di colore diverso, che rappresentano i
rimandi alle altre pagine Web; quando vengono selezionate (per esempio
cliccando con il mouse), il browser carica la pagina relativa al collegamento e la
mostra sullo schermo. La nuova pagina può essere sulla stessa macchina della
prima oppure su un computer distante migliaia di km; l’utente non può saperlo,
ma spetta al browser seguire il collegamento, caricare la pagina e visualizzarla
(Figura 1.1).
Benché esistano browser privi di interfaccia grafica, come ad esempio Lynx, essi
non sono molto popolari e sono destinati a scomparire, mentre browser basati
sulla voce sono ancora in fase di sviluppo. Se l’utente ritorna alla pagina
principale, i link che sono stati seguiti vengono visualizzati in maniera diversa
(per esempio con un colore differente), per distinguerli da quelli non ancora
selezionati.
Le pagine Web oltre a testo puro e a ipertesto possono contenere anche icone,
foto, disegni; ognuno di questi può essere un link a un altro documento e
selezionandolo, il browser compie le medesime operazioni di caricamento e
visualizzazione eseguite per gli ipertesti; con le immagini, per esempio foto e
Capitolo 1 - Elaborazione client-server e World Wide Web
15
disegni, quali possano essere le pagine da caricare, può dipendere dal punto in cui
si clicca con il mouse.
Figura 1.1: parti del modello Web.
Inoltre, non tutte le pagine sono visualizzabili nella stessa maniera; per esempio
alcune contengono elementi audio, video o anche entrambi; una pagina
ipertestuale arricchita da altri media è detta ipermediale; solo alcuni browser
possono gestire tutti i tipi di pagine ipermediali, mentre altri si limitano a scandire
un file di configurazione che ricerchi il nome di un programma helper in grado di
gestire quelle pagine ipermediali; se non esiste nessuna applicazione helper, il
browser può chiedere all’utente di fornirla, di salvare o caricare la pagina.
I browser attuali prevedono una serie di strategie per ottimizzare il caricamento e
la visualizzazione delle pagine Web: per esempio, molti di essi hanno numerosi
bottoni che facilitano la navigazione nel WWW. Per evitare che l’utente rimanga
troppo tempo in attesa del caricamento di una pagina, magari a causa di una
immagine che occupa parecchia memoria, i browser visualizzano per prima la
parte testuale del documento, in modo che l’utente possa leggere qualcosa mentre
l’operazione di fetching si conclude ed eventualmente chiudere la connessione se
l’argomento non è sufficientemente interessante. Alcuni browser usano una certa
quantità di memoria locale per depositare le pagine che sono state caricate; prima
Capitolo 1 - Elaborazione client-server e World Wide Web
16
di eseguire il fetching di una pagina, viene controllato se si trova nella cache
locale, per evitare un nuovo collegamento attraverso la rete [AST96].
1.2.3 Il protocollo TCP/IP
Per utilizzare un browser Web, una macchina deve essere collegata direttamente a
Internet o almeno avere una connessione a un router o a un computer collegato
direttamente a Internet. I router sono delle macchine che hanno il compito di
ricercare dei percorsi di trasmissione affinché i dati inviati da un computer
mittente possano arrivare a un computer ricevente. Internet si basa su uno schema
detto a “commutazione di pacchetto”, cioè ogni file spedito su Internet, dai
messaggi di posta elettronica al contenuto delle pagine Web, viene suddiviso in
parti più piccole chiamate pacchetti (o datagrammi) seguendo il protocollo di rete
IP (Internet Protocol). Infatti, quest’ultimo è un protocollo “senza connessione”,
cioè un protocollo per il quale nessun percorso viene stabilito in anticipo per la
spedizione dei datagrammi; ciascuno di essi, mentre procede, viene eventualmente
frammentato in unità più piccole, etichettato includendo un indirizzo di
destinazione detto indirizzo IP e inviato attraverso la rete. Quando tutti i pezzi
hanno raggiunto la macchina di destinazione, vengono assemblati per ricostruire il
documento originale. I router Internet hanno il compito di inoltrare i pacchetti che
ricevono alla loro destinazione, passandoli da router a router. Esistono molti
algoritmi di instradamento, dagli algoritmi adattabili che basano le loro decisioni
su misure o stime del traffico o della tipologia correnti, a quelli non adattabili che
invece non lo fanno.
Il protocollo IP si fonda sull’idea che i datagrammi siano trasportati in modo
trasparente all’utente, ma non necessariamente affidabile; per questo motivo è
necessaria la presenza di un protocollo nello strato superiore di trasporto che
invece garantisca l’arrivo dei datagrammi e l’assemblaggio dei messaggi nella
sequenza corretta. Un protocollo di questo genere è il TCP (Transmission Control
Protocol) che rappresenta lo standard di comunicazione che tutti i computer
collegati a Internet devono usare. Contrariamente all’IP, il TCP è un protocollo
“orientato alla connessione”, cioè un protocollo nel quale il percorso dalla
macchina di provenienza a quella di destinazione viene scelto come parte della
Capitolo 1 - Elaborazione client-server e World Wide Web
17
procedura di connessione. Tale percorso è detto “circuito virtuale” ed è utilizzato
per tutto il traffico che fluisce lungo la connessione [AST92].
Il modo in cui il browser carica le pagine, è quello di stabilire una connessione
TCP con la macchina nella quale la pagina è situata e successivamente inviare un
messaggio di richiesta della pagina stessa; se il browser non stabilisce la
connessione TCP, la pagina non può essere caricata.
Ogni sito Web ha un processo server chiamato demone situato sulla porta TCP 80
in attesa che un client, solitamente un browser, richieda una connessione. Quando
l’utente vuole chiedere al browser di caricare una determinata pagina Web, deve
prima indicare dove è collocata. Questo può essere fatto in maniera esplicita
scrivendo l’indirizzo Web (il cosiddetto URL), oppure in maniera implicita
selezionando un link all’interno di un’altra pagina ipertestuale o ipermediale. Il
browser, determinato l’URL, recupera l’indirizzo IP del server ed esegue una
connessione TCP sulla porta 80; successivamente richiede la pagina e, dopo
averla ricevuta, chiude il collegamento e la visualizza sul computer dell’utente. Il
protocollo che definisce le richieste e le risposte legali è detto HTTP (HyperText
Transfer Protocol). Questo però non è particolarmente efficiente, poiché in caso
di pagine contenenti più icone rappresentanti link alla stessa pagina, ogni volta
che ne viene selezionata una, si deve aprire, utilizzare e chiudere nuovamente una
connessione TCP. Sotto questo punto di vista le versioni future saranno più
efficienti [AST96].
1.2.4 Servizi offerti dal World Wide Web
Utilizzando una qualsiasi interfaccia utente, come ad esempio Mosaic o Netscape,
il World Wide Web può essere utilizzato per accedere a un servizio Gopher,
WAIS, FTP, e-mail, telnet, news: per specificare il servizio richiesto si utilizza
una regola di indirizzamento chiamata URL (Uniform Resource Locator). Con la
stessa sintassi si indirizza tanto un server WWW (l’HTTPD, HyperText Transfer
Protocol Daemon), quanto uno Gopher, quanto uno FTP, quanto un servizio di
telnet. La sintassi dell’URL è la seguente:
servizio://indirizzoIP:porta/path
dove:
Capitolo 1 - Elaborazione client-server e World Wide Web
18
• servizio: identifica univocamente il tipo di servizio con il quale si intende
interagire (obbligatorio).
• indirizzoIP: identifica l’indirizzo, numerico e testuale, che consente di
raggiungere il servizio su Internet (può essere omesso nel caso si voglia
visualizzare un documento residente in locale sulla stazione di lavoro su cui si
ha installato il browser WWW).
• porta: identifica il numero della porta su cui il demone remoto è in attesa delle
interrogazioni dai vari client; un servizio IP è sempre referenziabile da una
coppia di dati: un indirizzo e una porta logica sulla quale il servizio accetta le
richieste dall’esterno (il numero di porta è opzionale se il server utilizza una di
quelle definite standard per i singoli servizi).
• path: identifica il percorso completo che occorre fare sul server remoto per
raggiungere il documento che si intende visualizzare (opzionale) [LGER95a].
Per utilizzare un servizio di rete, quale Gopher o FTP, un browser può scegliere
tra due soluzioni: la prima è quella di inglobare in se ognuno di questi protocolli,
ma in questo modo si appesantisce inutilmente, la seconda è quella di impiegare
un server proxy, cioè una specie di gateway [AST92] che utilizza il protocollo
HTTP verso il browser, mentre verso il server usa FTP, Gopher o qualche altro
protocollo (Figura 1.2). Il server proxy accetta le richieste HTTP e le traduce
nell’opportuno protocollo del server a cui sono inviate; il server proxy è un
programma che può girare sulla stessa macchina del browser, oppure risiedere su
un computer autonomo al servizio di più browser.
L’aumento dell’uso del Web ha però rivelato una debolezza negli URL: per
pagine che sono frequentemente riferite, sarebbe opportuno avere più copie in siti
diversi per evitare congestioni della rete. Il problema è che gli URL non
forniscono nessun modo per riferire una pagina senza specificare dove si trova,
cioè non esiste nessun modo per dire: “ Voglio la pagina xyz, ma non mi interessa
da dove viene caricata“. Per risolvere questo problema e quindi rendere possibile
la replica delle pagine, si sta lavorando a un nuovo tipo di indirizzamento,
conosciuto come URI (Universal Resource Identifiers) e soggetto di molte
ricerche attuali. Un URI può essere pensato come una generalizzazione di un URL
[AST96].
Capitolo 1 - Elaborazione client-server e World Wide Web
19
Figura 1.2: un browser in grado di utilizzare un protocollo FTP e uno che utilizza
un server proxy.
1.2.5 Il linguaggio HTML
Le pagine Web sono scritte in un linguaggio chiamato HTML (HyperText Markup
Language). Il linguaggio consente la creazione di documenti che includono testo,
immagini, disegni e puntatori ad altre pagine Web. L’HTML è un linguaggio di
formattazione testi derivato dal più generico SGML (Standard Generalized
Markup Language), standard ISO 8879 ed è formato da tag, cioè comandi speciali
che indicano al browser come creare link, posizionare immagini e integrare file
video e audio [LGER95b]. Come l’HTTP, l’HTML è in costante evoluzione.
Quando Mosaic era l’unico browser esistente, il linguaggio che interpretava,
l’HTML 1.0 era lo standard de facto. Quando furono creati altri browser, si sentì il
bisogno di uno standard formale per Internet, così fu prodotto l’HTML 2.0. La
versione successiva, l’HTML 3.0, aggiunse nuove caratteristiche al precedente,
incluse tabelle, barre degli strumenti, formule matematiche, ecc..
La standardizzazione ufficiale dell’HTML è curata da World Wide Web
Consortium, ma i vari produttori di browser hanno aggiunto al linguaggio proprie
estensioni ad hoc. Così facendo, sperano che chi scrive le pagine Web utilizzi la
loro versione HTML, in modo da costringere i lettori di tali pagine a usare i
browser da loro prodotti. Questa tendenza, ovviamente, non rende facile il
processo di standardizzazione del linguaggio HTML [AST96].