1 mod.8 servizi web di base world wide web:definizioni e componenti http scripting server side...

75
1 Mod.8 Servizi Web di base World Wide Web:definizioni e componenti http Scripting server side Scripting client side WebServer:APACHE Proxy Server :Squid

Upload: augusto-pugliese

Post on 01-May-2015

219 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: 1 Mod.8 Servizi Web di base World Wide Web:definizioni e componenti http Scripting server side Scripting client side WebServer:APACHE Proxy Server :Squid

1

Mod.8Servizi Web di base

World Wide Web:definizioni e componentihttpScripting server sideScripting client sideWebServer:APACHEProxy Server :Squid

Page 2: 1 Mod.8 Servizi Web di base World Wide Web:definizioni e componenti http Scripting server side Scripting client side WebServer:APACHE Proxy Server :Squid

2

Servizi Web

Page 3: 1 Mod.8 Servizi Web di base World Wide Web:definizioni e componenti http Scripting server side Scripting client side WebServer:APACHE Proxy Server :Squid

3

Premesse*

• Sul TCP/IP si basa la comunicazione fra i nodi della rete Internet.

• Ad ogni nodo della Rete è assegnato un indirizzo IP composto da quattro numeri compresi tra 0 e 254 (es.: 151.100.50.2).

• Mediante opportuni meccanismi (DNS) è possibile convertire gli IP address numerici in indirizzi mnemonici (es.: 141.108.3.218 = magritte.sci.uniroma1.it).

• Sopra al protocollo TCP/IP possono viaggiare informazioni codificate secondo altri protocolli di comunicazione (FTP, Telnet, HTTP).

Page 4: 1 Mod.8 Servizi Web di base World Wide Web:definizioni e componenti http Scripting server side Scripting client side WebServer:APACHE Proxy Server :Squid

4

Introduzione*• Introduzione al World Wide Web

Come sistema di comunicazione, il World Wide Web è in grado di distribuire e collezionare informazioni globalmente e in modo istantaneo. Per gli utenti il Web rappresenta una visione dinamica dei lavori e delle idee di milioni di persone e di organizzazioni mondiali. Il Web è un "integratore" di informazioni su Internet.  Java, invece di fare affidamento sui server del Web per fornire informazione e funzionalità, rende possibile l’esecuzione dei contenuti attraverso un browser che supporta Java. 

• Il Web supporta un certo numero di comunicazioni, informazioni e interazioni utilizzando l’ipertesto per organizzare le informazioni. Il linguaggio Java può estendere le capacità del Web nel campo della comunicazione, della distribuzione delle informazioni e dell’interattività.

• Panoramica del Web Il World Wide Web fu originariamente sviluppato per poter permettere lo scambio di informazioni necessarie per i ricercatori della comunità di fisica. Oggi il World Wide Web è un sistema di distribuzione delle informazioni globale. Alla base c’è l’ipertesto, termine usato per descrivere testi che non sono costretti ad essere sequenziali; l’ipertesto collega documenti per formare un sistema di relazioni e fa uso della possibilità di estendere e di accrescere il significato di un "singolo" testo per mezzo di collegamenti ad altri testi.

Page 5: 1 Mod.8 Servizi Web di base World Wide Web:definizioni e componenti http Scripting server side Scripting client side WebServer:APACHE Proxy Server :Squid

5

Page 6: 1 Mod.8 Servizi Web di base World Wide Web:definizioni e componenti http Scripting server side Scripting client side WebServer:APACHE Proxy Server :Squid

6

WWW

• Nel 1989 un ricercatore del CERN di Ginevra, propose un sistema di ipertesto che permettesse un’efficiente distribuzione di informazioni per i membri della comunità di fisica. Il sistema proposto era costituito da:

• Un’interfaccia utente che potesse andar bene per tutte le piattaforme e che avrebbe permesso agli utenti di accedere alle informazioni da computer differenti.

• Uno schema per questa interfaccia in modo da accedere a diversi tipi di documento e a protocolli di informazione.

• Una norma per l’accesso universale, che avrebbe permesso ad ogni utente di network di accedere a qualunque informazione.

• Verso la fine del 1990, un prototipo del World Wide Web era operativo e fu completata un’interfaccia per l’utente (chiamata "WWW"). Successivamente l’interfaccia World Wide Web fu resa disponibile pubblicamente dal CERN. 

Page 7: 1 Mod.8 Servizi Web di base World Wide Web:definizioni e componenti http Scripting server side Scripting client side WebServer:APACHE Proxy Server :Squid

7

WWW: uno spazio Internet

• Il Web è un sistema realmente distinto da Internet e dai suoi browser, non è un network, ma un sistema di applicazioni, un set di programmi software. Inoltre il World Wide Web può essere sviluppato e usato su molti tipi diversi di network non necessariamente network di Internet. 

•  Il World Wide Web è un sistema di informazione e di comunicazione basato su un ipertesto. Viene utilizzato, in genere, su network di computer con comunicazioni di dati operanti secondo un modello client/server. I client del Web (browser) possono accedere a protocolli e a informazioni ipermediali

Page 8: 1 Mod.8 Servizi Web di base World Wide Web:definizioni e componenti http Scripting server side Scripting client side WebServer:APACHE Proxy Server :Squid

8

Web server

Page 9: 1 Mod.8 Servizi Web di base World Wide Web:definizioni e componenti http Scripting server side Scripting client side WebServer:APACHE Proxy Server :Squid

9

Java e il World Wide Web *• Il metodo usato inizialmente era basato su di interfaccia che poteva accettare un input

dall’utente che raggiungeva il server del Web per essere elaborata.  • Tutto ciò era comunque abbastanza statico e lontano da un certo livello di interattività.

Java ha il merito di cambiare il modello statico di comunicazione sul Web, dà la possibilità agli utenti di fare qualcosa in quell’indirizzo: lavorare in modo creativo con l’informazione e interagire con i contenuti. La chiave delle capacità di Java sono i contenuti eseguibili . 

• Contenuto eseguibile è un termine generale che identifica l’importante differenza tra il contenuto che può caricare un browser del Web che supporta Java e quello che può caricare un browser che non supporta Java. In un browser pre-Java (cioè che non supporta Java) il contenuto caricato dal Web è definito in termini di specificazioni Multipurpose Internet Mail Extensions (MIME), che includono una varietà di formati multimediali di documenti, questa specificazione di contenuto è realizzata in modo che il contenuto caricato dal Web possa essere visualizzato nel browser o in un’applicazione di aiuto. 

• Anche un browser dell’era Java (cioè che supporta Java) carica i contenuti definiti nelle specificazioni MIME e li visualizza ma, la differenza chiave è che questo tipo di browser è in grado di riconoscere uno speciale oggetto dell’ipertesto che è il tag <APPLET>. Quando viene caricata una pagina Web che contiene questo tag, il browser riconosce che un tipo speciale di programma Java, chiamato applet, è associato a quella pagina, il browser quindi carica l’applet che è in formato bytecode lo interpreta e lo manda in esecuzione sul terminale dell’utente. Queste operazioni di caricamento e di esecuzione avvengono in maniera trasparente, senza che l’utente debba compiere operazioni. 

Page 10: 1 Mod.8 Servizi Web di base World Wide Web:definizioni e componenti http Scripting server side Scripting client side WebServer:APACHE Proxy Server :Squid

10

Sunto di applet

• Riassumendo i processi che avvengono quando un utente, con un browser che supporta Java, richiede una pagina contenente un applet, sono i seguenti: ()

• L’utente si collega a un pagina HTML sul server del Web; • La pagina HTML viene caricata e visualizzata dal browser

dell’utente. La pagina contiene il tag <APPLET> con il nome del file che identifica l’applet sul server;

• L’applet, in formato bytecode, viene caricato dal browser; • Il browser interpreta i bytecode e visualizza l’output sul terminale

dell’utente; • L’utente può avere interazioni con l’applet ma, in genere non

ulteriori caricamenti da parte del server del Web, in quanto l’applet è interamente caricato e in esecuzione nel browser dell’utente;

Page 11: 1 Mod.8 Servizi Web di base World Wide Web:definizioni e componenti http Scripting server side Scripting client side WebServer:APACHE Proxy Server :Squid

11

Page 12: 1 Mod.8 Servizi Web di base World Wide Web:definizioni e componenti http Scripting server side Scripting client side WebServer:APACHE Proxy Server :Squid

12

Page 13: 1 Mod.8 Servizi Web di base World Wide Web:definizioni e componenti http Scripting server side Scripting client side WebServer:APACHE Proxy Server :Squid

13

Server Web*

Page 14: 1 Mod.8 Servizi Web di base World Wide Web:definizioni e componenti http Scripting server side Scripting client side WebServer:APACHE Proxy Server :Squid

14

Vantaggi nell’uso di JSP*• In primo luogo (a differenza di soluzioni come ASP e PHP) le JSP sono in

chiave Java a e quindi eredi di tutti gli indiscussi vantaggi che hanno reso questo linguaggio di programmazione precompilato uno dei più sfruttati nel mondo della programmazione ad oggetti; prima fra tutti la quasi totale portabilità (intesa come capacità di un software di funzionare correttamente su stazioni che utilizzano un qualsiasi tipo di piattaforma). Le JSP sono indicate per l'implementazione di programmi applicativi attivi dal lato server, essendo infatti svincolate dal tipo di sistema operativo non necessitano di nessuna modifica nemmeno dal passaggio tra server gestiti in maniera diversa (possono per esempio venire supporate sia da un server Windows che da un server Unix).

Ovviamente l'aspetto della portabilità non dev'essere visto esclusivamente sotto l'aspetto server: anche dal lato client questa tecnologia offre un completo svincolamento sia dal tipo di SO che dal tipo di browser (il linguaggio Java viene infatti interpretato dal server sollevando il browser da questo compito, limitando la sua funzione a interprete di pagine HTML).

Pregio importante, ma non unico quello dell'indipendenza dalla piattaforma, le JSP inoltre permettono una molto vantaggiosa possibilità di riutilizzare il codice: si può infatti di includere nelle pagine sezioni di codice (java bean) che rendono molto più abbordabile l'implementazione di applicazioni anche complesse anche senza approfondite conoscenze di Java, rendendo inoltre molto più semplice la modifica e la manutenzione delle pagine stesse.

Page 15: 1 Mod.8 Servizi Web di base World Wide Web:definizioni e componenti http Scripting server side Scripting client side WebServer:APACHE Proxy Server :Squid

15

Java Server Pages(server side)*• La tecnologia Java Server Pages è una soluzione multipiattaforma per

realizzare pagine HTML dinamiche, dal lato server. Le pagine JSP sono un'evoluzione dei già collaudati servlet Java, create per separare i contenuti dalla loro presentazione: una pagina JSP si presenta, infatti, come un normale documento in linguaggio HTML, frammentato da sezioni di codice Java. Si potranno quindi modificare le parti sviluppate in Java lasciando inalterata la struttura HTML o viceversa.

Principali vantaggiCome si sarà già dedotto, affinché le Java Server Pages siano competitive nel campo dello sviluppo web, è necessario che offrano degli allettanti vantaggi: cosa dovrebbe spingere, dunque, uno sviluppatore a scegliere questa tecnologia?

Page 16: 1 Mod.8 Servizi Web di base World Wide Web:definizioni e componenti http Scripting server side Scripting client side WebServer:APACHE Proxy Server :Squid

16

Protocollo HTTP*• Il HTTP protocollo funziona così: 

tu mi chiedi una pagina web e io te la mando. Punto, basta. Non so chi sei, no so dove stai e non me ne importa niente. Basta che mi dai un Internet Protocol (IP) verso cui spedire il pacchetto e io lo riesco a far arrivare a destinazione. Sfortunatamente un protocollo così semplice non ci permette una grande sofisticazione nel processo comunicativo. È un po' come vivere senza la memoria.

Page 17: 1 Mod.8 Servizi Web di base World Wide Web:definizioni e componenti http Scripting server side Scripting client side WebServer:APACHE Proxy Server :Squid

17

HTTP*• Il protocollo HTTP (Hyper TextTransfer Protocol) viene usato da tutti i client e server web e

gestisce il modo con cui questi si scambiano pagine HTML o altri file.Il client web (cioè un browser come Microsoft Internet Explorer, Netscape Navigator, Opera ecc.) utilizza l'HTTP per richiedere file al server web. In primo luogo vengono richieste pagine HTML, che dopo essere state ricevute, vengono processate dal browser che provvede a fare richiesta di eventuali nuovi file richiamati nel codice HTML (immagini, fogli di stile css, script esterni ecc.) e a visualizzare il tutto sul monitor dell'utente.Ogni richiesta http consta di:- Metodo (GET, HEAD, PUT ...)- URI (Uniform Resource Identifier) Il path o indirizzo completo della risorsa richiesta.- Versione del protocollo (HTTP/1.0 o HTTP/1.1)Un esempio tipico di una richiesta HTTP è:GET / HTTP/1.0Alla richiesta possono seguire degli HTTP headers come Accept-Language, Date, Expires e vari altri (possono essere arbitrariamente definiti fra broswer e server).Esistono attualmente 3 specifiche del protocollo HTTP:HTTP/0.9 - Di fatto non è più utilizzato da nessuna parteHTTP/1.0 - Ancora abbastanza utilizzato e supportato da ogni browser e web serverHTTP/1.1 - Introduce nuovi metodi (OPTIONS, TRACE, DELETE, PUT, CONNECT) e la gestione di Virtual Host. E' supportato da tutti i browser e server non troppo vecchi ed è utilizzato nella maggior parte dei casi.

Page 18: 1 Mod.8 Servizi Web di base World Wide Web:definizioni e componenti http Scripting server side Scripting client side WebServer:APACHE Proxy Server :Squid

18

HTTP*• Consente l'accesso a documenti ipertestuali in cui vengono realizzati dei link tra

file di vario genere (non solo testuali) fisicamente residenti anche su host differenti.

• È gestito da un software (server HTTP) residente sugli host che intendono essere fornitori di informazioni. Chi vuole accedere alle informazioni fornite dal server HTTP deve utilizzare un software client (browser) in grado di interpretare le informazioni inviate dal server.

• HTTP è un protocollo "stateless": ad ogni richiesta si effettua una connessione al server che viene chiusa al termine del trasferimento dell'oggetto richiesto (pagina HTML, immagine, ecc.).

• HTTP identifica le risorse in rete mediante URL (Universal Resource Locator): •

Page 19: 1 Mod.8 Servizi Web di base World Wide Web:definizioni e componenti http Scripting server side Scripting client side WebServer:APACHE Proxy Server :Squid

19

Http:esempio*

• $ telnet magritte.sci.uniroma1.it 80 Connected to magritte.sci.uniroma1.it port 80

• GET /index.html • Content-type: text/html

<html><head><title>Welcome to Magritte</title></head><body><h1>Magritte, web server del progetto Grafica Avanzata</h1>

Page 20: 1 Mod.8 Servizi Web di base World Wide Web:definizioni e componenti http Scripting server side Scripting client side WebServer:APACHE Proxy Server :Squid

20

Il server HTTP *• È un programma che "gira" su un server in attesa di una

richiesta di connessione sul suo socket (la porta assegnatagli, tipicamente la 80).

• Svolge tre compiti fondamentali: – 1)invia al client le risorse disponibili localmente, richieste mediante

l'indicazione di una URL; – 2)richiama eventuali procedure esterne con cui comunica mediante

l'interfaccia CGI (Common Gateway Interface) per lo scambio di parametri e per ottenere in risposta informazioni in formato HTML;

– 3)effettua, ove esplicitamente richiesto dalla sua configurazione, l'autenticazione degli utenti mediante username e password.

• Il server HTTP svolge quindi un ruolo di interfaccia tra il client remoto che effettua delle richieste sul socket ed il sistema che lo ospita, il suo filesystem ed altri programmi che girano sulla macchina server.

Page 21: 1 Mod.8 Servizi Web di base World Wide Web:definizioni e componenti http Scripting server side Scripting client side WebServer:APACHE Proxy Server :Squid

21

Microsoft :ASP /IIS(server side)*• In questo contesto che vengono utilizzate tecnologie come Microsoft Internet

Information Server (IIS), Macromedia ColdFusion Server, Apache Server ecc.Impiegando un po' di risorse sul server ci permettono di comunicare più intelligentemente. In un senso, introducono la memoria nei processi di comunicazione HTTP.

MS/IIS (il server) per esempio, quando riceve una richiesta dal cliente per una pagina mette da parte un po' di spazio nella sua memoria e ci scrive il tuo nome, indirizzo, la pagina e un mucchio di altre cose (riguardo a chi sei e cosa hai chiesto. Quando richiedi un'altra risorsa il server controlla la tua area di memoria riconoscendoti subito.

• Usando Active Server Pages (ASP) sul server (IIS), io posso guardare in quest'area di memoria e, per esempio, trovare il tuo nome e stamparlo in cima alla pagina prima di mandartela. ASP è la tecnologia per manipolare le informazioni che IIS raccoglie e mantiene.

In conclusione possiamo dire che tecnologie come IIS e ASP espandono il protocollo HTTP con l'introduzione della continuità e ci permettono di maneggiare la conversazione fra il server e il cliente in una maniere più ricca.

Page 22: 1 Mod.8 Servizi Web di base World Wide Web:definizioni e componenti http Scripting server side Scripting client side WebServer:APACHE Proxy Server :Squid

22

Linguaggi per il Web*• Si possono suddividere i linguaggi di solito utilizzati per il Web in quattro tipologie:• HTML: è in formato testo e non è un linguaggio nel senso tradizionale, ma un

impaginatore per consente di posizionare degli oggetti nella pagina con le caratteristiche indicate, naturalmente per la sua peculiarità risulta essere statico e non interagisce con l'utente e non può prendere decisioni se non per i formulari, mentre per la sua interpretazione ha bisogno di un browser;

• linguaggi compilati: sono quei linguaggi abbastanza complessi in cui il sorgente (un file di testo con le operazioni da eseguire) viene compilato in codice macchina e viene impacchettato in un eseguibile utilizzabile solo nella forma e per le operazioni per cui è stato progettato;

• linguaggi semicompilati: in realtà a questa classe appartiene solo Java perché è un linguaggio compilato in un formato intermedio tra il file ASCII e il file binario, tale formato si chiama bytecode e va interpretato sul client da una macchina virtuale chiamata Java Virtual Machine, in tal modo all'atto della ricezione tale macchina completa la compilazione e rende il file eseguibile;

• linguaggi interpretati: sono quei linguaggi che risultano molto simili all'HTML, ma hanno potenzialità maggiori perché consentono di effettuare controlli e operazioni complesse, vengono inviati in file ASCII, quindi con codice in chiaro che viene interpretato ed eseguito riga per riga dal browser in modalità runtime.

• Il concetto di script è comprensibile ricordando che script in inglese significa "copione" o "sceneggiatura", ed infatti l'utilizzo è proprio questo: il browser legge una riga, la interpreta e la esegue, poi passa alla successiva e fa la stessa cosa, e così di seguito fino alla chiusura dello script.

Page 23: 1 Mod.8 Servizi Web di base World Wide Web:definizioni e componenti http Scripting server side Scripting client side WebServer:APACHE Proxy Server :Squid

23

Linguaggi di scripting(client side)• Quali sono i vantaggi e gli svantaggi tra linguaggi di scripting e linguaggi compilati? Cerchiamo di

riassumerne qualcuno:

• il linguaggio di scripting è più sicuro ed affidabile perché in chiaro e da interpretare, quindi può essere filtrato; per lo stesso Javascript la sicurezza è quasi totale, perché solo alla sua prima versione erano stati segnalati dal CIAC (Computer Incident Advisory Committee) dei problemi di lieve entità, tra cui la lettura della cache e dei siti visitati, dell'indirizzo e-mail e dei file presenti su disco, tali "falle", però, sono state corrette già con le versioni di Netscape successive alla 2.0;

• gli script hanno limitate capacità, per ragioni di sicurezza, per cui non è possibile fare tutto con Javascript, ma occorre abbinarlo ad altri linguaggi evoluti, magari più sicuri, come Java, e tale limitazione è ancora più evidente se si desidera operare sull'hardware del computer, come ad esempio il "settaggio" in automatico della risoluzione video o la stampa di un documento;

• un grosso problema è che il codice è visibile e può essere letto da chiunque, anche se tutelato con le leggi del copyright, ma questo, che secondo me è un vantaggio, è il prezzo da pagare da chi vuole utilizzare il web: la questione dei diritti d'autore è stata rivoluzionata con l'avvento di Internet (si veda soprattutto l'MP3), e la tutela è molto labile e inadeguata alle leggi attuali, per cui occorre prendere la situazione con molta filosofia;

• il codice Javascript viene eseguito sul client per cui il server non è sollecitato più del dovuto; uno script eseguito sul server, invece, sottoporrebbe questo ad una dura sollecitazione e i server di capacità più limitate ne potrebbero risentire se interrogati da più utenti;

• il codice dello script deve essere scaricato completamente prima di poter essere eseguito, e questo è il risvolto della medaglia di quanto detto precedentemente, per cui se i dati che uno script utilizza sono tantissimi (ad esempio una raccolta di citazioni da mostrare in maniera casuale), ciò comporterebbe un lungo tempo di scaricamento, mentre l'interrogazione dello stesso database sul server sarebbe più rapida

Page 24: 1 Mod.8 Servizi Web di base World Wide Web:definizioni e componenti http Scripting server side Scripting client side WebServer:APACHE Proxy Server :Squid

24

Il linguaggio HTML

• HTML = HyperText Markup Language • È un semplice "linguaggio" di marcatura del testo, ereditato da

SGML (Standard Generalized Markup Language). • Consente di esprimere dei collegamenti ad altri oggetti (pagine

HTML, immagini, ecc.) mediante URL. • Consiste in un insieme di tag che consentono di caratterizzare

porzioni di testo; è compito del client (browser) l'interpretazione dei tag.

• Esempio: <HTML><HEAD><TITLE>La mia pagina</TITLE></HEAD><BODY><H1>Benvenuti!</H1>Questa &egrave; la mia pagina.Visita <A HREF="http://www.mat.uniroma1.it">Matematica</A>.</BODY></HTML> HTML HTML

Page 25: 1 Mod.8 Servizi Web di base World Wide Web:definizioni e componenti http Scripting server side Scripting client side WebServer:APACHE Proxy Server :Squid

25

Alcune regole per scrivere file.js• In linea di principio uno script può essere inserito in due modi all'interno di

pagina HTML • inserendo il codice nel documento; • caricandolo da un file esterno. • l'uso del file esterno, infatti, è dettato dal limite di dimensione di 32K che deve

rispettare una pagina web.• Script esterni• In quest'ultimo caso (è anche quello più semplice a spiegarsi) lo script è salvato

in un file con estensione .js. Viene richiamato con l'attributo SRC del tag SCRIPT:

• <SCRIPT Language=Javascript SRC="nomefile.js"><!--//--></SCRIPT>

• dove la specificazione di Language è facoltativa, poiché la stessa estensione del file basta a dimostrare il linguaggio adoperato, ma si consiglia proprio per identificare la versione. Il nome del file può essere indicato con un URL relativo o assoluto.

• Tale file esterno viene eseguito all'interno della pagina HTML, per cui lo script viene solo letto come file di testo, trasferito nell'HTML nella posizione di richiamo e qui eseguito. Per tale motivo il file va salvato come testo ASCII, senza caratteri di controllo e senza tag HTML o elementi di altri linguaggi per non generare errori, e si può adoperare un qualsiasi editor molto semplice (in Windows è consigliato NotePad o Blocco Note).

Page 26: 1 Mod.8 Servizi Web di base World Wide Web:definizioni e componenti http Scripting server side Scripting client side WebServer:APACHE Proxy Server :Squid

26

Esempio Java Script(client side)• 1.Scrivere con Blocco Note il seguente comando:

alert('Sono un file esterno'), e salvarlo con il nome prova.js;2. Scrivere in un altro file il seguente codice HTML:

• <HTML><HEAD><SCRIPT SRC="prova.js"></SCRIPT></HEAD><BODY></BODY>

• e salvarlo nella stessa directory del file Javascript;3.Caricare la pagina HTML in un browser

Page 27: 1 Mod.8 Servizi Web di base World Wide Web:definizioni e componenti http Scripting server side Scripting client side WebServer:APACHE Proxy Server :Squid

27

Php(scripting server side)• PHP è un linguaggio di scripting server-side che consente lo sviluppo sia di siti

generati dinamicamente, sia di applicazioni che incorporano connessioni a database e data processing. La flessibilità e scalabilità ne fanno uno dei più popolari linguaggi di scripting server-side su piattaforme Unix/Linux. Inoltre, la precisa definizione della sua sintassi e dei suoi costrutti lo rendono più amichevole di altri linguaggi tipo Perl, Python, C/C++ o ASP. Il PHP offre una marea di funzionalità per gli sviluppatori Web, che consentono di produrre un codice solido, compatto e riutilizzabile.Qui l'acronimo sta per PHP Hypertext Pre-processor. In una frase, il PHP è un linguaggio di programmazione. Lo scopo del linguaggio è di consentire agli sviluppatori web di realizzare, in modo veloce, pagine dinamiche. Per pagine dinamiche, in questo contesto, intendiamo pagine il cui contenuto viene, almeno in parte, generato nel momento in cui le stesse vengono richieste al web server.Un esempio classico di pagina dinamica è fornito dai ben noti motori di ricerca: i risultati che vengono restituiti a seguito di un'interrogazione non sono pagine web statiche, bensì documenti generati "su misura", sulla base della nostra richiesta. Tornando al PHP, la definizione "ufficiale" tratta dal manuale in lingua inglese, su www.php.net , chiarisce le caratteristiche peculiari di questo linguaggio, e precisamente:

• Il PHP è un linguaggio di scripting. • E' un linguaggio "HTML-embedded, • Opera server-side, cioè lato server.

Page 28: 1 Mod.8 Servizi Web di base World Wide Web:definizioni e componenti http Scripting server side Scripting client side WebServer:APACHE Proxy Server :Squid

28

ESEMPIO PHP• Il modo più intuitivo per introdurre un concetto è, molto spesso, quello di

ricorrere ad un esempio, considerando il listato seguente.

<html> <head> <title>Codice che scompare! </title> </head> <body> <script language="php"> echo "<h1>Codice che scompare</h1>"; echo "<p>In un precedente...</p>"; </script> </body> </html> Salviamo il tutto in un file con estensione .php4 e carichiamo il file (o, come si dice, facciamone l'upload) sul nostro spazio web. Si noti che, in questo passaggio, stiamo assumendo di avere a disposizione un server con supporto PHP: almeno per ora può essere indifferentemente quello del nostro Internet Service Provider o il nostro PC, se abbiamo installato il software necessario; al contrario, in mancanza di questo requisito non saremo in grado di effettuare nessuna prova.

Page 29: 1 Mod.8 Servizi Web di base World Wide Web:definizioni e componenti http Scripting server side Scripting client side WebServer:APACHE Proxy Server :Squid

29

Esempio Php• Accediamo adesso alla pagina (l'indirizzo sarà del tipo

http://.../nostrofile.php4) e visualizziamone il codice HTML. Se tutto ha funzionato quello che vedremo sarà:

<html> <head> <title>Codice che scompare! </title> </head> <body> <h1>Codice che scompare</h1> <p>In un precedente...</p> </body> </html> Osserviamo subito che non vi è nessuna traccia dello script PHP: ci viene restituito solo il risultato dell'elaborazione e non esiste alcun modo per risalire al codice originale. Se non fossimo stati noi a scrivere la pagina, non avremmo modo di sapere se questa fosse già così (cioè non conteneva codice ma solo HTML puro) o se, oltre a scrivere quello che vediamo, avesse anche calcolato 50 numeri primi o fatto chissà cos'altro…

Page 30: 1 Mod.8 Servizi Web di base World Wide Web:definizioni e componenti http Scripting server side Scripting client side WebServer:APACHE Proxy Server :Squid

30

CGI:Common Gateway Interface(SERVER SIDE)

Si tratta di uno standard in base al quale è possibile fare interagire i web server con dei programmi. È infatti richiesto che il web server non sia un semplice porgitore di pagine statiche, ma che possa generare al volo delle pagine dal contenuto variabile in base a varie condizioni e, soprattutto, in base all'input dell'utente (si pensi per esempio ai motori di ricerca). I programmi scritti secondo lo standard CGI vengono quindi detti programmi CGI e girano sul web server. Il web server manda in esecuzione i programmi CGI man mano che ciò si rende necessario in base all'attività dei visitatori che accedono al sito. Tipicamente l'uso dei programmi CGI è abbinato alla presenza di form sulle pagine web. Il form (tag html <FORM>) consente di fare apparire su una pagina web dei campi di input nei quali l'utente immette informazioni; quando poi l'utente clicka il bottone che provoca l'invio del form, il browser richiede al web server di eseguire il programma CGI specificato nel form stesso (all'attributo ACTION) ed invia come dati il contenuto di tutti i campi del form (quelli digitati dall'utente e quelli eventuali di tipo hidden, nascosti). Il programma CGI, mandato in esecuzione dal web server, elabora i dati ricevuti e produce una risposta (di solito in formato html) che viene inviata al browser dell'utente da cui era partita la richiesta.

Page 31: 1 Mod.8 Servizi Web di base World Wide Web:definizioni e componenti http Scripting server side Scripting client side WebServer:APACHE Proxy Server :Squid

31

Il browser è l'applicazione client di questo sistema ad architettura "client/server".

• Gira sulla macchina dell'utente remoto, legge ed interpreta l'output in formato HTML.

• Visualizza o gestisce le informazioni codificate in formati a lui noti (es.: immagini GIF o JPEG, filmati QuickTime, scene VRML) e rimanda ad altri programmi esterni presenti sulla macchina client per la gestione di formati non conosciuti (es.: documenti Word, documenti Postscript, ecc.).

• Le procedure CGI non vengono eseguite sulla macchina client.

• I programmi in linguaggio Java vengono invece scaricati sul client, compilati in tempo reale ed eseguiti su di esso.

• Il browser consente di impaginare l'output indipendentemente dalla piattaforma che lo ospita (X11, Macintosh, Windows, ecc.).

• L'interfaccia CGI • CGI = Common Gateway Interface • È il canale di comunicazione tra il

server HTTP (le pagine HTML) e le procedure software che girano sul sistema (procedure e script CGI).

• Consente di passare dei parametri ad un programma esterno attraverso una form o una semplice URL. Consente anche di catturare l'output della procedura (tipicamente in formato HTML) e di inviarlo al client dell'utente remoto.

• I metodi per il passaggio dei parametri alla procedura esterna sono due:

• GET: tramite variabile di ambiente (QUERY_STRING);

• POST: tramite lo standard input. • Il metodo utilizzato viene

comunicato alla procedura CGI mediante la variabile di ambiente REQUEST_METHOD

Page 32: 1 Mod.8 Servizi Web di base World Wide Web:definizioni e componenti http Scripting server side Scripting client side WebServer:APACHE Proxy Server :Squid

32

Esempio di CGI• L'interfaccia CGI • Uno script CGI può essere richiamato mediante una form HTML:

<HTML><BODY><FORM METHOD=POST ACTION="/cgi-bin/search.cgi">Nome: <INPUT NAME=nome> <BR>Et&agrave;: <INPUT NAME=eta> <BR><INPUT TYPE=SUBMIT VALUE="Cerca"><INPUT TYPE=RESET VALUE="Ripristina"></FORM></BODY></HTML>

• Oppure mediante una URL diretta (il passaggio dei parametri avviene implicitamente con il metodo GET) : <A HREF="/cgi-bin/search.cgi?nome=Paolo&eta=48"> Paolo Forte</A>

Page 33: 1 Mod.8 Servizi Web di base World Wide Web:definizioni e componenti http Scripting server side Scripting client side WebServer:APACHE Proxy Server :Squid

33

Funzionalità del Browser(client side)

Page 34: 1 Mod.8 Servizi Web di base World Wide Web:definizioni e componenti http Scripting server side Scripting client side WebServer:APACHE Proxy Server :Squid

34

Page 35: 1 Mod.8 Servizi Web di base World Wide Web:definizioni e componenti http Scripting server side Scripting client side WebServer:APACHE Proxy Server :Squid

35

Altri servizi

Page 36: 1 Mod.8 Servizi Web di base World Wide Web:definizioni e componenti http Scripting server side Scripting client side WebServer:APACHE Proxy Server :Squid

36

Apache :server Web

• Introduzione• Apache è un potente WEB server multipiattaforma. Le

statistiche dicono che è il più utilizzato al mondo, e tutto lascia prevedere che lo sarà ancora per qualche anno.

• Apache è disponibile nel sito ufficiale www.apache.org, insieme ai sorgenti e a tutta la documentazione. Tutte le distribuzioni di GNU/Linux lo includono come pacchetto, tipicamente già compilato e configurato: è sufficiente una installazione base del sistema operativo, ed anche l'utilizzatore più sprovveduto si ritrova con un WEB server installato (magari a sua insaputa...).

Page 37: 1 Mod.8 Servizi Web di base World Wide Web:definizioni e componenti http Scripting server side Scripting client side WebServer:APACHE Proxy Server :Squid

37

Introduzione APACHE• Apache è un server HTTP freeware (completo di sorgenti

C), sviluppato da un certo numero di programmatori. La prima versione, basata su server NCSA, è stata sviluppata nel 1995. Poiché era un insieme di patches sul server NCSA è stato chiamato un patchy server, da cui il nome Apache Server.

Oggi il WebServer Apache è considerato il server web più popolare ed affidabile al mondo per le sue caratteristiche sofisticate, le eccellenti performance, sia perché è gratuitamente reperibile, sia perché la sua estraneità da strategie di mercato, fanno sì che le varie correzioni e patch siano immediatamente disponibili appena corretti, garantendo in questo modo affidabilità e robustezza. Circa il 60% dei server web al mondo sono server Apache

Page 38: 1 Mod.8 Servizi Web di base World Wide Web:definizioni e componenti http Scripting server side Scripting client side WebServer:APACHE Proxy Server :Squid

38

Preliminari per Apache• Quindi dovrebbe essere disponibile un piccolo script di shell che si

incarica di avviare, fermare e verificare lo stato del server. Lo script esegue una di queste funzioni a seconda che sia stato invocato con il parametro start, stop oppure status; esiste poi anche il parametro restart che ha l'ovvio significato. Sulla distribuzione Red Hat 6.2 il comando è

• # /etc/rc.d/init.d/httpd status httpd (pid 9702 9701 9698) is running... mentre per la Red Hat 7.1 il path differisce leggermente:

• # /etc/init.d/httpd status httpd (pid 9702 9701 9698) is running...

• L'output conseguente dovrebbe confortarci sul fatto che Apache sia regolarmente in esecuzione. Il messaggio esatto dipende da come è stato scritto questo script, che invito ad andare a vedere.

Page 39: 1 Mod.8 Servizi Web di base World Wide Web:definizioni e componenti http Scripting server side Scripting client side WebServer:APACHE Proxy Server :Squid

39

Installazione di Apache(Linux)• Si possono utilizzare i pacchetti rpm, installabili su RedHat, Suse

e Mandrake: come saprete, questi pacchetti sono pronti all'uso, quindi basterà semplicemente installarli con il semplice comando rpm -i Apache-xx.rpm. Le due x sono la versione di Apache: potete scegliere quella che volete, a patto che sia abbastanza recente. Fatto questo, Apache sarà installato ma non è ancora tutto: da un terminale scrivete setup e vi apparirà una schermata che vi permetterà di impostare alcune configurazioni del sistema; andate nella parte relativa ai demoni e verificate che il demone httpd sia avviato al boot del sistema: senza di questo Apache non andrà mai in esecuzione. Una volta che vi siete assicurati che sia tutto a posto, lanciate il browser e inserite come indirizzo localhost: quella che vedrete è la schermata di 'benvenuto' di Apache: se la vedete (cosa assai probabile, se avete fatto quanto sopra descritto), vuol dire che Apache è regolarmente in esecuzione sul sistema. Per la configurazione dello stesso,, ricordate che con RedHat è distribuito anche un piccolo tool di configurazione, chiamato Comanche.

Page 40: 1 Mod.8 Servizi Web di base World Wide Web:definizioni e componenti http Scripting server side Scripting client side WebServer:APACHE Proxy Server :Squid

40

Completamento dell’installazione• Come ultimo vediamo i tgz, ovvero i sorgenti: qui il lavoro sarà leggermente

più difficoltoso, ma non impossibile: bisognerà infatti compilare tutto a mano. Vediamo innanzitutto dove procurarsi i sorgenti: al sito www.apache.org si trova tutto quello che stiamo cercando, compresi i vari porting per sistemi diversi. Quindi cerchiamo quelli per Linux e scarichiamoli sul nostro HD. Una volta che il download è terminato, spostiamo il grosso archivio in una directory a piacimento: qui si supporrà che tale directory sia /usr/local. Lanciamo poi

$ gunzip Apache-xx.tar.gz

e successivamente

$ tar xvf Apache-xx.tar

A questo punto sarà comparsa la directory Apache-xx, ed è in questa directory che si dovrà lavorare. Quindi diamo un bel

$ cd Apache-xx

e leggiamoci per bene i file README ed INSTALL

Page 41: 1 Mod.8 Servizi Web di base World Wide Web:definizioni e componenti http Scripting server side Scripting client side WebServer:APACHE Proxy Server :Squid

41

Installazione di Apache• intanto dobbiamo assicurarci di alcune cose: dobbiamo avere circa 12 Mb di spazio temporaneo su

disco e 3 Mb necessari all'installazione; serve poi il compilatore, che presumibilmente avrete già installato: è vivamente consigliato GCC 2.7.2 o superiore. Vengono poi citati come opzionali l'interprete perl5 (che comunque dovrete avere, altrimenti i CGI saranno impossibili da eseguire) ed il supporto DSO (Dynamic Shared Object, che in due parole servono per alcune chiamate di sistema per il caricamento dei moduli);

• lanciamo lo script ./configure, per preparare la compilazione dei sorgenti; tale script accetta varie opzioni:

--prefix=PREFIXE' la directory nella quale volete installare Apache (ovviamente PREFIX dovrà essere cambiato con il nome della directory): consigliata /usr/local --add-module=FILEServe per copiare il sorgente di un modulo nell'albero dei sorgenti di Apache; ovviamente al posto di FILE dovrete inserire il path per il sorgente del modulo--activate-module=FILEAggiunge al volo un'entry per un modulo al file di configurazione di Apache--enable-module=NAMEServe per fare in modo di abilitare (o disabilitare, utilizzando --disable-module) un modulo particolare--with-perl=FILEServe per impostare l'interprete perl utilizzato da Apache (anche se di solito Apache cerca da solo l'interprete)

Ovviamente la opzioni da passare a ./configure non sono tutte qui: si è pensato di presentarvi solamente le più utili (soprattutto al nostro scopo). Per conoscere tutte le opzioni, lanciate './configure --help'

• Iniziamo la compilazione lanciando 'make'. Sui computer moderni non ci vorrà molto, ma dovete ad ogni modo attendere qualche minuto prima che l'operazione termini;

• Ora installiamo il tutto: lanciamo 'make install' e lasciamo che il tutto si concluda.

• A questo punto Apache è installato ma non ancora attivo: lanciamo 'PREFIX/sbin/apachectl start' e dovremmo poter richiedere ad Apache il primo URL, che sarà http://localhost. Se volete fermare Apache, lanciate 'PREFIX/sbin/apachectl stop'.

Page 42: 1 Mod.8 Servizi Web di base World Wide Web:definizioni e componenti http Scripting server side Scripting client side WebServer:APACHE Proxy Server :Squid

42

Configurazione di Apache• il file principale è /etc/apache/httpd.conf , ma voi potrete averlo da qualche altra parte, soprattutto

se siete partiti dai sorgenti. In ogni caso, fate una ricerca e rintracciate tale file. Vediamo com'è strutturato tale file: intanto, ogni voce è ampiamente commentata, così da farvi capire cosa state facendo e a cosa serve quello che state facendo. Ovviamente, un minimo di conoscenza del linguaggio tecnico è necessaria per poter configurare al meglio. Le voci più significative sono:ServerTypeImpostatelo su 'standalone', dovrebbe bastare.PortDefault è 80, non conviene cambiarla HostnameLookupsLogga i nomi dei client (on) o solamente il loro numero IP (off); lasciatelo pure su offServerAdminE' abbastanza inutile su un server locale, ma se volete impostate il vostro indirizzo e-mail così, per ogni errore, potrete vantarvi di essere visto da Apache come l'amministratore.ServerRoot La directory dove Apache conserva i log, gli errori e i file di configurazione; solitamente è la directory dove è presente il file httpd.confLoadModuleImportante: indica ad Apache quali moduli caricare; se volete andare veramente sul sicuro, caricateli tutti (anche se l'avvio di Apache sarà più lento, ma si parla solo di qulche secondo). Indispensabili ai nostri scopi sono tutti i moduli per i CGI, per il Perl e i mimeErrorLogIl file dove Apache scrive gli errori. /var/log/apache/error.log può andare benissimo.ServerNameIl nome del vostro server. Se non l'avete mai impostato, sarà localhost.localdomain ma, siccome è assai scomodo, lanciate (da root) hostname e cambiate il nome al vostro host

Un altro importante file è srm.conf, che dovrebbe essere nella stessa directory di httpd.conf. Vediamolo più da vicino:

DocumentRootLa directory nella quale mettere i file html per la pagina locale. Solitamente /var/www : quindi se in tale directory mettete un vostro index.html, indicando 'localhost' come indirizzo del browser, vedrete proprio questa pagina. E da questa partiranno le altre pagineDirectoryIndexIl nome della pagina che verrà visualizzata come indice; solitamente index.htmlScriptAliasEd eccoci arrivati ai CGI: conviene impostare tale voce come : ScriptAlias /cgi-bin/ /usr/lib/cgi-bin/ . Cosa significa? semplicemente, che voi potrete inserire i vostri CGI in /usr/lib/cgi-bin/, ma questi saranno chiamati tramite http://localhost/cgi-bin/nome_cgi.cg

Page 43: 1 Mod.8 Servizi Web di base World Wide Web:definizioni e componenti http Scripting server side Scripting client side WebServer:APACHE Proxy Server :Squid

43

• Se un server di rete fornisce servizi in rete, il modo migliore per verificarne il funzionamento è provare direttamente questi servizi. Apriamo allora il nostro browser WEB preferito e puntiamolo sull'URL http://localhost. Il bravo sistemista/hacker usa Telnet come browser WEB:

• # telnet localhost 80 Trying 127.0.0.1... Connected to localhost.localdomain. Escape character is '^]'. GET / HTTP/1.0 qui premi ENTER due volte HTTP/1.1 200 OK Date: Mon, 10 Dec 2001 21:50:38 GMT Server: Apache/1.3.19 (Unix) (Red-Hat/Linux) Last-Modified: Sat, 11 Aug 2001 19:58:38 GMT ETag: "49183-20e-3b758e6e" Accept-Ranges: bytes Content-Length: 526 Connection: close Content-Type: text/html <HTML> la pagina HTML che non ci interessa </HTML> Connection closed by foreign host. # Come al solito, solo il comando evidenziato in grassetto deve essere impartito a tastiera, il resto sono le risposte del sistema. Notiamo che il comando GET deve essere scritto proprio in lettere maiuscole, e che occorre premere due volte il tasto ENTER prima che il server risponda: la riga vuota è il modo in cui il client (cioè il nostro Telnet) spiega al server che ha concluso la sua domanda. Infatti, vedremo che il client ha la possibilità di specificare vari altri parametri su altrettante righe.

• Come è facile immaginare, il comando GET serve per richiedere un documento; a seguire bisogna specificare la parte di path file dell'URL del documento, essendo per convenzione / la richiesta della home page, o pagina default, o pagina indice del sito. Con lungimiranza, il protocollo HTTP richiede anche di specificare esplicitamente il protocollo e la versione.

Page 44: 1 Mod.8 Servizi Web di base World Wide Web:definizioni e componenti http Scripting server side Scripting client side WebServer:APACHE Proxy Server :Squid

44

Apache:evoluzioni• Oltre alle normali funzionalità di un server web, Apache mette a

disposizione una serie di strumenti aggiuntivi, quali sistemi di controllo d'accesso a più livelli, generazione di statistiche variamente strutturate, possibilità di "integrare" l'HTML in modo dinamico (Server-Side Include). Di più, la sua caratteristica struttura modulare e la disponibilità di vere e proprie librerie di funzioni richiamabili da altri programmi (Apache API) permettono di integrare Apache con applicativi ausiliari di vario genere (alcuni dei quali sono "di serie", esempio il Proxy server): uno dei più interessanti è PHP, un linguaggio di programmazione (anch'esso fornito gratuitamente tramite il sito web php.iquest.net) che permette, tra l'altro, di integrare facilmente HTML ed SQL, il linguaggio per l'interrogazione di sistemi database quali Oracle.

•  

Page 45: 1 Mod.8 Servizi Web di base World Wide Web:definizioni e componenti http Scripting server side Scripting client side WebServer:APACHE Proxy Server :Squid

45

Vantaggi e svantaggi di Apache• L'elevata efficienza di questo web server permette di ottenere

buone prestazioni anche da macchine meno recenti: anche un 486 può essere "riciclato" come web server, senza contare che la disponibilità dei sorgenti C permette di adattare alle proprie esigenze le funzionalità del server.

• Per contro, installare e configurare Apache non è un compito semplice, specie se si intende sfruttarne appieno le funzionalità: Apache infatti non prevede, al momento, nè strumenti di installazione automatizzati, nè un sistema interattivo per la gestione delle sue funzionalità; tutto deve avvenire tramite la modifica manuale di opportuni file di configurazione in formato testo. Peraltro, per attivare determinate funzionalità (ad esempio, il supporto PHP) è necessario ricompilare Apache partendo dai sorgenti C: piuttosto scomodo ed assai lontano, ad esempio, dalla "filosofia Plug and Play" che caratterizza l'ambiente Windows.

Tuttavia Apache si è meritato nel corso del tempo, la fiducia di gran parte dei Web Server Administrators soprattutto grazie ad avanzate funzioni che permettono di rendere sicuro ed efficiente il commercio elettronico.

Page 46: 1 Mod.8 Servizi Web di base World Wide Web:definizioni e componenti http Scripting server side Scripting client side WebServer:APACHE Proxy Server :Squid

46

Funzionalità di Apache•        Content Negotiation: è un algoritmo per la scelta del file più appropriato da restituire ad

una richiesta del navigatore e tiene conto della configurazione e delle capacità del browser remoto. Esempio: Il browser accetta imagini jpg, gif, png, animazioni flash. Il server, per quella richiesta, ha a disposizione immagini gif-animato, jpg, animazioni director. Se il web-designer ha fatto bene i calcoli, il browser dovrebbe restituire un gif-animato.

• -          Language Negotiation: implementata prima del content negotiation, questa funzionalità permette di selezionare la lingua del documento in base alla configurazione del browser-utente. Sta alla flessibilità di chi sviluppa il sito fare in modo che il sistema di negoziazione non risulti troppo rigido.

• -          Aliasing & Redirect: Apache permette di dare dei nomi mnemonici alle proprie risorse in modo da essere facilmente raggiungibili e implementa anche delle redirezioni multiple tramite la riscrittura dell'url. Esempio: possiamo sostituire "/~user" con "/u/user" e permettere di ignorare la presenza dell'ultimo slash in /u/user.

• -          Virtual Host Support & Directory Name Interpolation: utile per gli ISP per ospitare siti diversi sullo stesso server, ma fornisce anche un sistema più rapido per la gestione di "sezioni" di un sito e-Commerce.

• -          Cookies: variabili impostate dal server sul client per gestire il customer-tracking o la gestione di una "sessione".

• -          Message passing (GET, POST), eCookis: Consente all'utente di eseguire una serie di operazioni collegate l'una all'altra: prenotazioni e pagamenti online, accesso ad account, dischi e database remoti (per consultare la propria mailbox, per controllare il proprio carrello della spesa, il proprio conto telefonico, per approfondire una ricerca in un motore). Vengono utilizzati i metodi GET (sessionID visibile nell'url) e POST (campi nascosti nel form), ma soprattutto i Cookies (righe di testo nel proprio hard disk modificabili dal server e cancellabili dal browser).

•  

Page 47: 1 Mod.8 Servizi Web di base World Wide Web:definizioni e componenti http Scripting server side Scripting client side WebServer:APACHE Proxy Server :Squid

47

Definizione di Proxy• Proxy: Nodo di Internet (o di una LAN ecc..) compreso di software di gestione

che si interpone fra l'host dell'utente e il resto della rete.

• PROXY SERVER: si intende una macchina che appena riceve una richiesta tipo URL cerca il file nella sua cache locale. Se trova il documento associato a quell'URL lo invia al browser che lo ha richiesto immediatamente altrimenti lo preleva dal sito associato a quell'URL. Questo processo permette un risparmio di tempo e di traffico in Internet. Il server comunque mantiene nella cache i documenti secondo un criterio basato sulla loro data, grandezza e numero di accessi. Il proxy server e' utile per memorizzare su una cache tutti i file raccolti p.e. durante le navigazione in Web, per cui permette di rivisitare siti gia' visti senza dover effettuare una nuova connessione con il sito remoto. *Facendo un esempio nell'hard disk di alcuni provider sono raccolte tutte le ultime pagine lette degli abbonati.

• ARP: in una rete locale il proxy server puo' definire quali macchine di una LAN possono accedere ad Internet e quali no. In questo caso il server che gestisce la sua LAN risponde ad una richiesta fatta da un host secondo il protocollo ARP e controlla la sua identita'. Se l'host richiedente ha i permessi per entrare in Interent la richiesta verra accettata e sara' permesso l'accesso all'indirizzo scelto, altrimenti la richiesta verra rifiutata. Maschera le generalita' del sistema richiedente poiche' i dati in uscita partono dal proxy.

Page 48: 1 Mod.8 Servizi Web di base World Wide Web:definizioni e componenti http Scripting server side Scripting client side WebServer:APACHE Proxy Server :Squid

48

Vantaggi dei proxy• Per quanto riguarda l'utilizzazione dei proxy servers occorre ricordare che molto

spesso piu' Client WWW appartenenti ad uno stesso dominio o situati in una ristretta area geografica richiedono contemporaneamente le stesse pagine HTML ad un importante WWW Server situato in un'altra zona della terra. Cio' implica che quel WWW Server debba trasferire la stessa pagina tante volte quante sono le richieste dei Client, provocando cosi' un'enorme spreco di larghezza di banda e rallentando notevolmente il trasferimento dati.

• Per ovviare a questo problema sono stati creati i Proxy Server che sono dei software che mantengono copie locali delle pagine Web piu' richieste. Il proxy si può identificare come l'insieme di un calcolatore e di un software particolare detto "proxy server", a cui ci si appoggia per velocizzare i collegamenti ai siti su Internet. Se si configura un browser perché utilizzi un proxy, tutte le richieste di pagine Web fatte da quel client non arriveranno direttamente ai servers remoti ma saranno rivolte al proxy server, il quale a sua volta può rispondere direttamente al client oppure contattare i server remoti per farsi spedire i documenti richiesti che poi inoltrerà al computer dell’utente.

• A prima vista questo meccanismo non sembra offrire nessun vantaggio, in realtà può migliorare in modo sostanziale il tempo di risposta per pagine accedute frequentemente, riducendo così anche il traffico sulla rete. Infatti un proxy copia sul proprio Hard Disk tutti gli oggetti recuperati negli ultimi tempi; se un utente richiede una pagina Web già consultata da un altro utente in precedenza, il proxy evita il collegamento geografico, spesso lento, col sito remoto e

Page 49: 1 Mod.8 Servizi Web di base World Wide Web:definizioni e componenti http Scripting server side Scripting client side WebServer:APACHE Proxy Server :Squid

49

Vantaggi del proxy• Il server proxy è da considerarsi come un step intermedio fra il client ed il server

remoto, quando viene utilizzato non si ha il passaggio diretto delle informazioni fra server e client ma è il proxy a gestire la comunicazione fra i due.Gli obiettivi che si vogliono perseguire con la funzionalità del proxy sono:- Caching, ovvero le informazioni richieste del client vengono messe in una cache del proxy e restituite in un secondo momento se le stesse informazioni vengono richieste, senza scaricare di nuovo i dati dal server remoto. Quindi si ha il vantaggio di aumentare la velocità e ridurre la quantità di banda utilizzata.- Sicurezza. Client e server sono logicamente isolati, quindi il proxy può fungere anche come barriera per il traffico indesiderato. La funzionalità principale di un proxy è quella di effettuare relay e caching delle richieste provenienti dai vari client in entrambe le direzioni ovvero FORWARD e REVERSE.

Per FORWARD proxy si intende quel proxy che fa da relay per un client della LAN interna ed esegue il caching delle pagine richieste, limitando così la banda uscente ed aumentando la velocità di trasferimento.

Per REVERSE proxy si intende quel proxy che esegue il relay di un client esterno verso un server interno, riducendo cosi il carico sul server, soprattutto quando deve generare pagine dinamiche.

Page 50: 1 Mod.8 Servizi Web di base World Wide Web:definizioni e componenti http Scripting server side Scripting client side WebServer:APACHE Proxy Server :Squid

50

Linux/squid

Permette di definire delle politiche di navigazione su Internet e di verificare che vengano rispettate.Linux insieme a Squid realizza questo servizio in maniera sicura ed efficace.Un tipico esempio di politica di navigazione su Internet è:

• Tutti gli utenti hanno libero accesso ai siti istituzionali (es. ministero delle finanze, fornitori, corrieri espressi, motori di ricerca).

• Da alcune postazioni specifiche si può navigare senza restrizioni.

• Da tutti gli altri PC dell'azienda bisogna inserire una login e una password valide per navigare.

Page 51: 1 Mod.8 Servizi Web di base World Wide Web:definizioni e componenti http Scripting server side Scripting client side WebServer:APACHE Proxy Server :Squid

51

Proxy server• Lo scopo del server è quello di ridurre il traffico in Internet e quello di

velocizzare la navigazione da parte degli utenti che vi si collegano. Ogni volta che un browser visualizza una pagina da Internet la scarica sul computer dell'utente salvandola in un'area di disco chiamata cache. Nel caso venga rivisualizzata di nuovo la stessa pagina, il browser (a meno che non sia settato dall'utente nella modalità, peraltro sconsigliabile, di "verificare il documento ogni volta") non accede nuovamente ad Internet, ma propone la pagina che aveva precedentemente memorizzato. Le dimensioni della cache all'interno di un pc sono generalmente contenute entro pochi megabyte.

• Un Proxy server, in prima approssimazione, altro non è che una cache molto più grande di quella normalmente presente sui pc (al momento sfrutta un disco da 4 gigabyte). Oltre alla dimensione maggiore la caratteristica vincente di questo servizio è quella di essere comune a tutta la scuola. In questo modo se alle 8.30 del mattino un utente scarica la pagina www.microsoft.com, tale pagina sarà subito disponibile per qualsiasi utente senza che il suo browser vada effettivamente a cercare tale pagina sul sito della Microsoft.

• Per usare il Proxy server è necessario configurare i propri browser.

Page 52: 1 Mod.8 Servizi Web di base World Wide Web:definizioni e componenti http Scripting server side Scripting client side WebServer:APACHE Proxy Server :Squid

52

Server Proxy Windows• Un server proxy è un computer della LAN che

consente di stabilire connessioni a Internet senza rischi per la protezione della rete interna. Per informazioni sulla modalità di connessione della LAN a Internet, contattare l'amministratore del sistema.

Se la rete locale Lan utilizza un server proxy per la connessione a Internet, fare clic su Sì e quindi su Avanti. Se si sceglie questa opzione, è necessario specificare le seguenti informazioni: I nomi e le porte dei server proxy utilizzati dalla LAN per la connessione a Internet. Gli indirizzi Internet ai quali si desidera connettersi senza utilizzare un server proxy. È ad esempio possibile che non si desideri utilizzare un server proxy per contattare altri computer della stessa LAN

Page 53: 1 Mod.8 Servizi Web di base World Wide Web:definizioni e componenti http Scripting server side Scripting client side WebServer:APACHE Proxy Server :Squid

53

Configurare Proxy

• Internet Eplorer 5.x 1) Strumenti2) Opzioni Internet3) Connessioni4) Impostazioni LAN5) Spuntare il campo Utilizza script di configurazione automatica6) Inserire nel campo Indirizzo http://www.cce.unipr.it/proxy/proxy.pac oppure1) Strumenti2) Opzioni Internet3) Connessioni4) Impostazioni LAN5) Spuntare il campo Utilizza un server proxy6) Inserire nel campo Indirizzo proxy.cce.unipr.it ed in quello Porta il valore 80

Page 54: 1 Mod.8 Servizi Web di base World Wide Web:definizioni e componenti http Scripting server side Scripting client side WebServer:APACHE Proxy Server :Squid

54

Cos’e’ un Proxy

• Procura, messo, persona mandata al posto del titolare e che rappresenta lo stesso

• Server proxy memorizza le ultime pagine visitate dagli utenti per cui, se un utente vuole collegarsi a una pagina da poco visitata da qualcun altro, essa può essere scaricata dal server proxy invece che dal sito remoto, aumentando così la velocità di risposta e ottimizzando l’utilizzo della rete. (caching)

Page 55: 1 Mod.8 Servizi Web di base World Wide Web:definizioni e componenti http Scripting server side Scripting client side WebServer:APACHE Proxy Server :Squid

55

Page 56: 1 Mod.8 Servizi Web di base World Wide Web:definizioni e componenti http Scripting server side Scripting client side WebServer:APACHE Proxy Server :Squid

56

Page 57: 1 Mod.8 Servizi Web di base World Wide Web:definizioni e componenti http Scripting server side Scripting client side WebServer:APACHE Proxy Server :Squid

57

Page 58: 1 Mod.8 Servizi Web di base World Wide Web:definizioni e componenti http Scripting server side Scripting client side WebServer:APACHE Proxy Server :Squid

58

Cos’e’ un Proxy

• nelle reti locali protette i proxy sono utilizzati soprattutto come gateway in modo tale che una sola macchina possa accedere all'esterno e tutti gli altri calcolatori possano ottenere i dati dall'esterno della rete, appoggiandosi ad essa.

Page 59: 1 Mod.8 Servizi Web di base World Wide Web:definizioni e componenti http Scripting server side Scripting client side WebServer:APACHE Proxy Server :Squid

59

Il proxy open source Squid

• Proxy pensato principalmente per il web

• Uno dei piu’ diffusi su Internet soprattutto per quanto riguarda gli ISP e i backbones

• Implementato, con qualche modifica, in molti net-cache, firewalls e network appliances (ad es.: Sun-Cobalt CacheRaq 4) (http://www.squid-cache.org/products.html)

• Lavora bene sui grandi numeri

Page 60: 1 Mod.8 Servizi Web di base World Wide Web:definizioni e componenti http Scripting server side Scripting client side WebServer:APACHE Proxy Server :Squid

60

Squid http://www.squid-cache.org/

• Software Free Open Source

• proxying and caching of HTTP, FTP, and other URL's

• proxying for SSL

• cache hierarchies

• ICP, HTCP, CARP, Cache Digests

• transparent caching

• extensive access controls

• HTTP server acceleration

• SNMP

• caching of DNS lookups

Page 61: 1 Mod.8 Servizi Web di base World Wide Web:definizioni e componenti http Scripting server side Scripting client side WebServer:APACHE Proxy Server :Squid

61

Proxy only

• Soluzione “gateway” per reti protette

• Ho banda a sufficienza, ma voglio proteggere i client e l’intranet

• Voglio che i miei dipendenti possano fare ricerche in Internet ( come strumento di lavoro, aumentando il loro know-how)

Page 62: 1 Mod.8 Servizi Web di base World Wide Web:definizioni e componenti http Scripting server side Scripting client side WebServer:APACHE Proxy Server :Squid

62

Proxy onlyCome:

• Isolo l’intranet sul router facendo passare solo l’IP del proxy

• Posso impedire l’accesso ad alcuni siti che “distraggono” i miei dipendenti

Page 63: 1 Mod.8 Servizi Web di base World Wide Web:definizioni e componenti http Scripting server side Scripting client side WebServer:APACHE Proxy Server :Squid

63

proxying and caching of HTTP, FTP, and other URL's

Host dacontattare

Proxy delProvider

Client(Browser)

Internet

Page 64: 1 Mod.8 Servizi Web di base World Wide Web:definizioni e componenti http Scripting server side Scripting client side WebServer:APACHE Proxy Server :Squid

64

proxying and caching of HTTP, FTP, and other URL's

Internet

Proxy delProvider

Client(Browser)

Computer locale Provider Internet (il resto)

RAM

Dischi

Dischi

RAM

Page 65: 1 Mod.8 Servizi Web di base World Wide Web:definizioni e componenti http Scripting server side Scripting client side WebServer:APACHE Proxy Server :Squid

65

Cache Hierarchies

• In una grossa organizzazione con un’intranet veloce ed un collo di bottiglia verso Internet

• In un grande ISP

Page 66: 1 Mod.8 Servizi Web di base World Wide Web:definizioni e componenti http Scripting server side Scripting client side WebServer:APACHE Proxy Server :Squid

66

Esempio Hierarchy GARR

• Proxy Parentsui nodi principali

• Proxy Siblingsui nodisecondari

• http://cache.garr.it/

Page 67: 1 Mod.8 Servizi Web di base World Wide Web:definizioni e componenti http Scripting server side Scripting client side WebServer:APACHE Proxy Server :Squid

67

HTTP acceleratorconfigurazione 1

• Ho un sito web lento o affollato che richiede risorse hardware ingenti

• I contenuti del sito non si aggiornano molto velocemente in rapporto alla frequenza delle connessioni

Page 68: 1 Mod.8 Servizi Web di base World Wide Web:definizioni e componenti http Scripting server side Scripting client side WebServer:APACHE Proxy Server :Squid

68

Http Accelerator 1 (http 1.0 safe)

Squid http accelerator12.21.2.5

(httpd_accel_single_host)

Client(Browser)

DNSpubblico

Internetwww.pinco.it12.21.2.5

Web Server10.0.0.3

Page 69: 1 Mod.8 Servizi Web di base World Wide Web:definizioni e componenti http Scripting server side Scripting client side WebServer:APACHE Proxy Server :Squid

69

HTTP acceleratorconfigurazione 2

• Ho piu’ di un sito web su una sottorete nascosta

oppure

• Devo bilanciare il carico fra piu’ server con applicazioni piuttosto pesanti

Page 70: 1 Mod.8 Servizi Web di base World Wide Web:definizioni e componenti http Scripting server side Scripting client side WebServer:APACHE Proxy Server :Squid

© 2001 Daniele Albrizio Squid nella rete aziendaleConfigurazioni e soluzioni

Transparent proxying and caching

applicabilità

• Realtà client eterogenee e unmanaged

• Grossi backbones

• Configurazioni particolari della rete e politiche aziendali che lo richiedano

Page 71: 1 Mod.8 Servizi Web di base World Wide Web:definizioni e componenti http Scripting server side Scripting client side WebServer:APACHE Proxy Server :Squid

© 2001 Daniele Albrizio Squid nella rete aziendaleConfigurazioni e soluzioni

Da tenere bene in mente

• Le pagine che si vanno a mettere in cache dovrebbero riportare informazioni corrette riguardo alla scadenza, validita’ e cachabilita’ del loro contenuto (IETF draft on Known HTTP Proxy/Caching Problems )

Page 72: 1 Mod.8 Servizi Web di base World Wide Web:definizioni e componenti http Scripting server side Scripting client side WebServer:APACHE Proxy Server :Squid

72

SQUID

• Configurazione /sbin/chkconfig squid on /etc/rc.d/init.d/squid on Aggiungere in /etc/squid/squid.confhttp_port 3128 Attivare automaticamente /sbin/chkconfig squid on

Page 73: 1 Mod.8 Servizi Web di base World Wide Web:definizioni e componenti http Scripting server side Scripting client side WebServer:APACHE Proxy Server :Squid

73

Configurazione del web server

• E’ consigliato mantenere il server web in ascolto su di una porta differente dalla "classica" 80. Ovviamente, se poi si decide di installare web e proxy sulla stessa macchina, la scelta è quasi forzata (quasi, visto che si potrebbe comunque mantenere Squid in ascolto sulla porta 8080, e utilizzare iptables per redirigere su di esso tutto il traffico verso la porta 80, proveniente dalla interfaccia esterna. Ma oltre ad essere una soluzione macchinosa, è meno sicura). Sempre nel caso si installi tutto sullo stesso server, è consigliabile abilitare il servizio http solo sull'interfaccia di loopback.Se il server web è Microsoft IIS, si può impostare la porta da utilizzare tramite la finestra "Proprietà". Nel caso invece che il server web sia Apache, il parametro per settare la porta in ascolto sulla 81 è:

• Listen 81 #Listen 127.0.0.1:81 in caso sia tutto sulla stessa macchina

Page 74: 1 Mod.8 Servizi Web di base World Wide Web:definizioni e componenti http Scripting server side Scripting client side WebServer:APACHE Proxy Server :Squid

74

COOKIE• I cookie, originariamente inventati dalla Netscape e successivamente

standardizzati con la RFC2109, sono un artificio per riuscire a gestire lo stato nelle transazioni web. Quando un browser chiede ad un web server una risorsa (una pagina, una immagine o altro), la risposta del web server è sempre costituita da alcune righe di header con informazioni varie, una riga vuota e, se il caso, i veri e propri dati richiesti. Tra le righe di header, il web server può anche inserirne una simile a questa:

• Set-Cookie: stringa-di-caratteri; path=/; expires FRI, 09-Dec-96 13:46:00 GMTSe il cookie viene accettato, il browser lo memorizza sul disco fisso e, da quel momento, ogni volta che avrà occasione di inviare richieste al medesimo server gli passerà una riga di header del tipo Cookie: stringa-di-caratteri

• I cookie permettono quindi ai siti web di riconoscere i visitatori che ritornano dopo tempo: è un meccanismo simile all'attaccare un badge alla giacca dei visitatori. In molti casi i cookie non sono usati in modo da essere una minaccia diretta alla privacy dell'utente web, anzi, possono talvolta perfino consentire alcune funzioni utili. Spesso però pongono l'utente in una situazione in cui la privacy può essere più facilmente compromessa (il rischio è che il medesimo browser risulti individuabile nel tempo, consentendo così di correlare tra loro più informazioni di quante l'utente potrebbe desiderare). Anche in considerazione del fatto che esistono compagnie che usano i cookie senza troppi scrupoli, molti preferiscono tenerli disabilitati.

Page 75: 1 Mod.8 Servizi Web di base World Wide Web:definizioni e componenti http Scripting server side Scripting client side WebServer:APACHE Proxy Server :Squid

75

Glossario• l'Unicode è una sorta di codifica (simile a quella ASCII) utilizzata per ovviare

al fatto che esistono differenti alfabeti. I web server, primo fra tutti IIS, interpretano i codici Unicode, e li trasformano nell'equivalente simbolo del character set di appartenenza.