Documenti di Didattica
Documenti di Professioni
Documenti di Cultura
Indice
1 Introduzione
1.1 Cosa mi appresto ad imparare? . . . . . . . . . . . . . . . . . . .
1.2 Cosa sar in grado di realizzare dopo aver studiato? . . . . . . .
4
4
4
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
4
4
5
6
8
10
12
12
13
14
16
16
19
20
21
3 HTTP
3.1 Introduzione . . . . . . . . . . . . . . .
3.2 Principio di funzionamento di HTTP .
3.3 Versioni di HTTP . . . . . . . . . . .
3.4 Entit . . . . . . . . . . . . . . . . . .
3.5 Struttura dei messaggi HTTP . . . . .
3.5.1 Backus - Naur Form . . . . . .
BNF rules . . . . . . . . . . . .
Esempio di BNF . . . . . . . .
3.5.2 HTTP: tipologia messaggi . . .
3.5.3 HTTP: Header . . . . . . . . .
3.5.4 HTTP: MIME . . . . . . . . .
3.5.5 HTTP: Body . . . . . . . . . .
3.5.6 HTTP: Message Length . . . .
3.5.7 HTTP: Header generici . . . .
3.5.8 HTTP: Header field dellentit
3.5.9 HTTP: Request message . . . .
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
22
22
22
23
23
24
24
24
25
26
26
26
28
28
29
29
30
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
Request - Line . . . . . . . . .
Metodi . . . . . . . . . . . . . .
Header . . . . . . . . . . . . . .
3.5.10 HTTP: Response message . . .
Status code . . . . . . . . . . .
Reason phrase . . . . . . . . .
Header . . . . . . . . . . . . . .
3.5.11 HTTP: Authentication . . . . .
Basic access authentication . .
Digest access authentication . .
3.6 Connessione HTTP . . . . . . . . . . .
3.6.1 HTTP 1.0 . . . . . . . . . . . .
3.6.2 HTTP 1.1 . . . . . . . . . . . .
Pipelining . . . . . . . . . . . .
3.7 Gestione delle sessioni . . . . . . . . .
3.7.1 Cookie . . . . . . . . . . . . . .
Architettura di un cookie . . .
Alternative ai cookie . . . . . .
Third - Party Cookies . . . . .
3.8 Proxy server . . . . . . . . . . . . . . .
3.8.1 Reverse proxy . . . . . . . . . .
3.9 Caching . . . . . . . . . . . . . . . . .
3.9.1 Convalida della risorsa in cache
Convalidatori (validators) . . .
3.10 Modelli di sicurezza . . . . . . . . . .
TLS . . . . . . . . . . . . . . .
4 Apache HTTP Server
4.1 Installazione nei S.O. Windows . . .
4.2 Installazione nei S.O. UNIX-like . . .
4.3 Avvio del server . . . . . . . . . . . .
4.4 Avvio come servizio di sistema . . .
4.5 Configurazione . . . . . . . . . . . .
4.6 Direttive di base . . . . . . . . . . .
4.7 Moduli . . . . . . . . . . . . . . . . .
4.8 Server-side include . . . . . . . . . .
4.9 Direttiva IfModule . . . . . . . . . .
4.10 Log degli errori . . . . . . . . . . . .
4.11 Log degli accessi . . . . . . . . . . .
4.12 Direttive per le directory . . . . . . .
4.13 Direttiva per i file . . . . . . . . . .
4.14 Ridirezione . . . . . . . . . . . . . .
4.15 Alias . . . . . . . . . . . . . . . . . .
4.16 Messaggi derrore personalizzati . . .
4.17 Directory personali degli utenti . . .
4.18 Direttiva Include . . . . . . . . . . .
4.19 Controllo di accesso:elementi di base
4.20 File.htaccess . . . . . . . . . . . . . .
4.21 Caching . . . . . . . . . . . . . . . .
4.22 Virtual host: introduzione . . . . . .
2
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
30
30
32
34
34
35
36
36
36
37
37
37
38
38
39
39
39
40
41
41
42
42
43
43
44
45
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
45
46
46
47
50
50
51
52
53
53
54
54
55
56
57
57
58
58
59
59
60
61
62
4.23
4.24
4.25
4.26
4.27
4.28
5 Nginx
5.1 Nginx
5.1.1
5.1.2
5.1.3
5.1.4
5.1.5
5.1.6
5.1.7
5.1.8
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
62
63
63
64
64
64
65
65
vs. Apache . . . . . . . . . . . . . . . . . . . .
Installazione in ambiente Windows . . . . . .
Installazione in ambiente UNIX-like . . . . .
Avvio, arresto, riavvio (ambiente UNIX-like)
Test . . . . . . . . . . . . . . . . . . . . . . .
File di configurazione nginx.conf . . . . . . .
Esempio di virtual hosting . . . . . . . . . . .
Ngynx come proxy server . . . . . . . . . . .
Considerazioni prestazionali . . . . . . . . . .
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
65
65
66
66
66
66
66
67
67
67
67
68
68
68
69
69
70
71
71
72
72
74
74
7 Middleware
74
7.1 RPC - Remote Procedure Call . . . . . . . . . . . . . . . . . . . 75
7.1.1 Binding . . . . . . . . . . . . . . . . . . . . . . . . . . . . 77
Binding dinamico . . . . . . . . . . . . . . . . . . . . . . . 77
8 SOA e Web Service
78
78
78
78
78
13 Cloud Computing
78
78
78
16 Online marketplaces
78
17 Sponsored Search
78
18 Web of Things
78
19 Hadoop
78
Bibliografia
79
Introduzione
1.1
1.2
2
2.1
Lipertesto una collezione di documenti connessi reciprocamente da collegamenti ipertestuali (hyperlink). Pi specificatamente un ipertesto consiste essenzialmente in un testo non lineare e non sequenziale, formato da documenti a loro volta composti da una collezione di nodi (frammenti di testo o altri
media) connessi da collegamenti.
Lorigine del termine scissa dal concepimento del WorldWideWeb e, semanticamente, ha acquisito lattuale significato mediante differenti contributi
forniti in epoche diverse.
2.1.1
Paul Otlet
Vannevar Bush
Uno dei decisivi passi nella formulazione del concetto di ipertesto costituito
dalle proposte contenute in quellarticolo fondamentale - "As We May Think di
Vannevar Bush2 , che tanto influenz i ricercatori tecnologici da quel momento
in avanti. Parlando dei dati organizzati in ordine alfabetico o comunque strutturati in modo rigido, Bush scrisse: La mente umana non lavora in questo modo.
Essa opera in modo associativo. Avendo afferrato un concetto, essa salta istantaneamente al prossimo che viene suggerito dallassociazione di idee, in accordo
con qualche intricata ragnatela di percorsi tracciata dalle cellule del cervello.
E per emulare in modo meccanico questo tipo di funzionamento, o almeno
per supportarlo, Bush concep e propose il memex, un dispositivo personale a
forma di scrivania sul cui piano vi sono schermi su cui possono essere proiettati i
microfilm, una tastiera, un insieme di leve e bottoni. Allinterno della scrivania vi
un sistema elettromeccanico che pu gestire in modo automatico una libreria
che memorizza milioni di pagine dinformazioni sotto forma di microfilm. Le
informazioni possono essere rapidamente richiamate tramite chiavi di ricerca,
che operano sul sistema meccanico di libreria per proiettare sullo schermo le
immagini contenenti le informazioni volute.
Ma se pur innovativo nelle capacit, uno strumento che si limiti a memorizzare e ricercare informazioni ancora convenzionale dal punto di vista filosofico;
dove invece il memex diventa rivoluzionario sta nel fatto che permette allutente
di costruirsi un percorso personalizzato di consultazione, mediante associazioni
2 Vannevar Bush fu il consigliere scientifico del presidente degli Stati Uniti F.D. Roosevelt
durante la seconda guerra mondiale, che lo nomin direttore dellOffice of Scientific Research
and Development. Durante la guerra questufficio coordin le attivit di pi di 6000 scienziati
americani impegnati in tutte le applicazioni militari della scienza.
come estremamente familiare - di ipertesto, con pagine che lutente pu navigare spostandosi dalluna allaltra seguendo collegamenti che associano punti di
una pagina a punti su altre pagine semplicemente premendo un bottone sotto il
codice corrispondente, nelle parole originali di Bush.
Per gestire questa massa dinformazioni, Bush non riusciva ancora a pensare
ad un computer. LENIAC, il primo elaboratore elettronico, veniva completato in quegli anni, ma allepoca non era ancora lontanamente pensabile che
un dispositivo di quel genere potesse diventare sufficientemente piccolo, affidabile e soprattutto poco costoso tanto da diventare uno strumento personale.
Ma, qualunque fosse la tecnologia utilizzata per implementarlo, in As We May
Think, Bush prefigurava comunque un mondo in cui esisteva uno strumento
a disposizione delluomo, utilizzato per archiviare informazioni, connetterle fra
loro in strutture metatestuali e ipertestuali, ed estrarne analisi e sintesi che
costituiscano risposte alle domande che luomo si pone.
Possiamo notare come le idee di Vannevar Bush erano non dissimili da quelle
viste in precedenza di Paul Otlet (del lavoro del quale forse molto probabilmente
non era a conoscenza). La differenza principale consisteva nel fatto che mentre
Otlet era pi interessato a permettere allutente laccesso a sterminati database
di informazioni remoti, e mondialmente centralizzati, Bush invece si concentrava
di pi sulle funzioni a supporto del lavoro intellettuale del singolo.[2]
2.1.3
Ted Nelson
bito molte vicissitudini, stata sovvenzionata dagli enti pi vari e perfino dalla
AutoDesk, ma non mai riuscita a partorire alcun sistema realmente usabile.
Ancora oggi il sito del progetto Xanadu continua a diffondere un credo purista
dellipertesto assoluto, e propone in download un sistema inutilizzabile.
In effetti, pi che come tecnologo, Ted Nelson ha avuto successo come evangelizzatore del modello ipertestuale. In questo modo, ha spinto diverse aziende
e altri enti a produrre applicazioni reali, le quali hanno ereditato da Xanadu
moltissime idee.[2]
2.1.4
Uno dei tanti ricercatori che pensavano che le strutture ipertestuali fossero quelle ideali per memorizzare informazioni non strutturate e molto parcellizzate era
Tim Berners-Lee, che lavorava al CERN di Ginevra come consulente e programmatore; durante i suoi anni in Svizzera, egli si era concentrato sulle tecniche di
memorizzazione delle informazioni prodotte non solo al CERN, ma in tutto il
mondo in modo che fosse possibile ritrovarle e rivederle secondo modalit non
lineari e non predefinite.
10
Tra giugno e dicembre del 1980, Berners-Lee scrisse un programma per gestire le annotazioni, chiamato Enquire Within Upon Everything4 , che girava su
un computer Norsk Data sotto sistema operativo SINTRAN-III.
Enquire permetteva di impostare dei collegamenti tra nodi arbitrari allinterno delle pagine di annotazione; ciascun nodo aveva un titolo, una tipologia, e
una lista di collegamenti bidirezionali associati. Esso venne usato da vari gruppi
di ricerca, ma non ebbe una diffusione significativa al di fuori del CERN.
Nel 1989 Berners-Lee scrisse un memorandum - che ormai diventato parte
della storia di Internet - in cui proponeva un modello di interconnessione delle
informazioni in una struttura a ragnatela, che permettesse di navigarle in modo
non lineare tramite hyper-links (ipercollegamenti). La proposta suscit un discreto interesse e Berners-Lee, insieme a Robert Caillau, si misero al lavoro per
espandere la specifica e definire tutti i meccanismi e i protocolli. La ragnatela
di ipercollegamenti doveva travalicare i limiti del singolo sito, e interconnettere
tutti i siti al mondo che memorizzassero informazioni; si pens pertanto a server
di informazioni, a cui si potesse accedere tramite un client (detto browser ). Le
pagine di informazioni venivano richieste dal browser al server, e il server le forniva in un formato standardizzato chiamato HTML (Hyper-Text Markup
Language) e tramite un protocollo di trasferimento chiamato HTTP (HyperText Transfer Protocol). Ogni pagina ed ogni altra risorsa (immagini, files,
ecc.) poteva essere raggiunta tramite uno specifico indirizzo, denominato URL
(Uniform Resource Locator) che indicava il protocollo da usare per raggiungerlo, il server su cui risiedeva, il percorso allinterno del server, il nome e il tipo
della risorsa in questione.
11
WorldWideWeb Consortium
Il WWW Consortium stato fondato nel 1994 dallinventore del WWW Tim
Berners-Lee (vd. 2.1.4 ) presso il MIT (Massachussets Institute of Technology) in collaborazione con il CERN. Esso unorganizzazione non governativa
internazionale che ha come scopo quello di sviluppare tutte le potenzialit del
WorldWideWeb. Al fine di riuscire nel proprio intento, la principale attivit
svolta dal W3C consiste nello stabilire standard tecnici per il WorldWideWeb
inerenti sia i linguaggi di markup che i protocolli di comunicazione (es. HTML,
CSS, XML, RDF, OWL,etc.).
Al 2015 il consorzio comprende circa 398 membri tra cui:
5 Lo Standard Generalized Markup Language (SGML), un metalinguaggio definito come
standard ISO (ISO 8879:1986 SGML) avente lo scopo di definire linguaggi da utilizzare per la
stesura di testi destinati ad essere trasmessi ed archiviati con strumenti informatici, ossia per
la stesura di documenti in forma leggibile da computer (machine readable form).
Principale funzione di SGML la stesura di testi chiamati Document Type Definition
(DTD) (vd. 11), ciascuno dei quali definisce in modo rigoroso la struttura logica che devono
avere i documenti di un determinato tipo. Si dice che questi documenti rispetto a SGML
costituiscono un linguaggio obiettivo, ovvero una applicazione.
SGML dovuto soprattutto allopera di Charles Goldfarb e discende dal Generalized Markup Language, linguaggio definito negli anni 1960 presso la IBM, da Goldfarb, Mosher e
Lorie.[9]
12
13
14
mostrare che la specifica rispetta tutti i requisiti indicati dal Working Group o,
nelleventualit che essi siano stati alterati oppure scartati, spiegarne le motivazioni;
documentare i cambiamenti di dipendenze durante lo sviluppo della specifica;
documentare quanto adeguatamente sar dimostrata lesperienza implementativa;
specificare un tempo limite per i commenti (almeno 4 settimane dopo la pubblicazione;
anche di pi per documenti complessi);
mostrare che la specifica ha ricevuto unampia analisi ed indicari i vari fattori di rischio.
9 E necessario venga specificato un tempo limite entro cui lAdvisory Committee recensisca
la specifica (almeno 28 giorni dopo la pubblicazione del Proposed Recommendation). In
aggiunta a ci un Working Group deve:
15
Web Browser
Il Web browser il principale tipo di applicazione client nel WWW che consente allutente di navigare le pagine Web mediante collegamenti ipertestuali. I
primi browser, sorti nei primi anni 90, erano solo testuali con conseguente bassa
usabilit da parte dellutente finale. Solo nel 1992 viene realizzato il primo browser grafico comandato via mouse, Mosaic, mediante il quale inizia lesplosione
della popolarit del WWW.
Levoluzione tecnologica stata a lungo rallentata dalla cosiddetta browser
war che ha visto contesi i browser Internet Explorer e Netscape. Negli ultimi
anni, tuttavia, sono stati compiuti numerosi avanzamenti tecnologici.
Architettura di un Web browser Un Web browser consta, generalmente,
di 8 sottosistemi principali incluse le dipendenze fra essi. Come evidenziato
nella Fig. 9 essi sono:
User Interface, il layer presente fra lutente e il browser engine.
Regola funzionalit quali le toolbar, progresso nel caricamento della pagina, gestione intelligente dei download, opzioni preferite e stampa. Pu
essere integrato nellambiente desktop cos da consentire la gestione e la
comunicazione della sessione del browser con altri applicativi desktop.
Recenti innovazioni in questo sottosistema sono:
navigazione a schede (tab);
estensioni, componenti aggiuntivi che permettono di integrare nuove
funzionalit nella navigazione o nella gestione dei dati utente;
barra di ricerca personalizzabile;
supporto allinterazione mediante gesti ;
maggior risalto a potenziali rischi per la sicurezza (connessioni non
sicure, phishing, etc.).
Browser Engine, implementa uninterfaccia di alto livello verso il Rendering Engine. Permette di caricare un URI e supporta le azioni primitive del browser quali forward, back e reload. Inoltre funge da "aggancio"
per consentire la visione di aspetti eterogenei della sessione corrente del
browser come la percentuale di caricamento della pagina o gli eventi JavaScript. Consente di gestire i plugin, quei componenti aggiuntivi che permettono di visualizzare particolari contenuti incorporati nelle pagine Web
(generalmente contenuti multimediali e interattivi per RIA - Rich Internet Applications 11 ) Infine consente il querying e la modifica dei parametri
del Rendering Engine;
11 Applicazioni web che possiedono le caratteristiche e le funzionalit delle applicazioni
desktop, senza per necessitare dellinstallazione sul disco fisso.
16
17
19
20
(1)
(2)
dove:
Lcp , rappresenta la latenza di connessione client - proxy;
Lps , rappresenta la latenza di connessione proxy - server di origine;
Tcp , rappresenta il tempo di trasferimento dei dati client - proxy;
Tps , rappresenta il tempo di trasferimento dei dati proxy - server di origine;
S, rappresenta il tempo di elaborazione del server;
C, rappresenta il tempo di elaborazione del client (parsing e rendering).
I browser proxy - based puntano ad ottenere T 0 < T dati i seguenti accorgimenti:
Lcp , Lps << Lcs , poich il fornitore del browser offre pi proxy geograficamente distribuiti nei centri nevralgici di Internet;
Tps << Tcs , poich i proxy effettuano caching ed hanno elevata larghezza
di banda;
Tcp << Tcs , poich il proxy comprime i dati;
C 0 < C, poich il proxy trascodifica i dati in un formato pi rapidamente
elaborabile dal browser.
Compatibilit dei browser Nel periodo intercorso fra il 1995 e il 2003 (browser war ) i maggiori browser hanno introdotto caratteristiche ed estensioni non
standard che hanno minato la compatibilit cross - browser delle applicazioni
Web.
Le versioni pi moderne di tutti i maggiori browser pongono attenzione alla
compatibilit con gli standard.
Nonostante ci, per essere certi che la propria Web application sia correttamente riprodotta e funzionante, occorre testarla su tutti i browser che
costituiscono il proprio target.
Ladozione di template (CSS) e librerie (JavaScript) gi testati per la
compatibilit cross - browser semplifica notevolmente il lavoro.
21
HTTP
3.1
Introduzione
3.2
Il modello alla base del protocollo HTTP quello client - server (Fig. 14).
Si tratta, quindi, di un protocollo di tipo richiesta - risposta, laddove tutte
le richieste effettuate tramite protocollo TCP vengono, di default, trasmesse
mediante porta 80.
HTTP presenta due caratteristiche basilari. Esso infatti:
generico, cio indipendente dal formato dati con cui vengono trasmesse le
risorse. Pu funzionare per documenti ipertestuali HTML, per file binari,
eseguibili, oggetti distribuiti o altre strutture dati;
stateless, cio il server non tenuto a mantenere informazioni che persistano tra una connessione e la successiva sulla natura, identit e precedenti
richieste effettuate da un client. Il client tenuto a ricreare da zero il contesto necessario al server per rispondere. Riassumendo: non vi memoria
delle richieste effettuate.
22
3.3
Versioni di HTTP
3.4
Entit
23
3.5
La BNF (Backus-Naur Form o Backus Normal Form) una metasintassi, ovvero un formalismo attraverso il quale possibile descrivere la sintassi di linguaggi
formali (il prefisso meta ha proprio a che vedere con la natura circolare di questa
definizione). Si tratta di uno strumento molto usato per descrivere, in modo preciso e non ambiguo, la sintassi dei linguaggi di programmazione, dei protocolli
di rete.
In termini formali, la BNF pu essere vista come un formalismo per descrivere grammatiche libere dal contesto.
La BNF fu proposta da John Backus nel corpo della definizione del linguaggio di programmazione ALGOL. Lacronimo BNF era inizialmente inteso come
Backus Normal Form ("forma normale di Backus"); su suggerimento di Donald
Knuth, fu in seguito riletto come Backus-Naur Form, in onore di Peter Naur, un
altro membro del comitato ALGOL e pioniere dei linguaggi di programmazione
(e pi in particolare della realizzazione di compilatori).
Una specifica BNF un insieme di regole di derivazione, ciascuna espressa
nella forma:
< simbolo >::= _espressione_
o nella forma equivalente:
< simbolo > _espressione_
Le due forme sono assolutamente equivalenti. La prima forma (che verr
utilizzata nel seguito) utilizza caratteri ASCII standard ed quella pi utilizzata
per scrivere grammatiche che devono essere utilizzate dai calcolatori e lette in file
di testo. La seconda forma meno utilizzabile nella pratica ma comune nei
testi e negli articoli di informatica teorica in quanto meglio esprime loperazione
di derivazione delle stringhe di un linguaggio a causa dellapplicazione delle
regole di derivazione.
Nelle regole di derivazione <simbolo> (i caratteri < e > sono obbligatori)
viene detto un simbolo nonterminale e _espressione_ costituita da una
o pi sequenze di simboli terminali o nonterminali (identificati dal fatto di
essere racchiusi tra < >); se le sequenze sono pi di una esse sono separate
dalla barra verticale |. La regola esprime il fatto che il nonterminale a sinistra
della regola pu essere sostituito da una qualsiasi delle sequenze indicate sulla
destra. Inoltre in una sequenza alcuni simboli o sottosequenze possono essere
indicati come opzionali racchiudendoli fra parentesi quadre.
I simboli che non appaiono mai a sinistra di una regola di derivazione sono
detti terminali. I terminali sono in un certo senso il punto di arrivo, perch rappresentano elementi che si troveranno effettivamente in un testo scritto secondo
le regole sintattiche che la specifica BNF descrive. I simboli nonterminali, viceversa, sono strumenti utilizzati esclusivamente dalla BNF e sono racchiusi tra <
>; si pu dire che essi rappresentano gli elementi astratti della grammatica.
BNF rules
24
25
3.5.2
= Request-Line | Status-Line
Al fine di garantire robustezza, i server dovrebbero ignorare linee vuote ricevute al posto di una Request - Line. In altre parole, se il server legge il flusso
dati e allinizio del messaggio riceve un CRLF (Carrier Return Line Feed,
ritorno a capo)(vd. 3.5.1) come primo elemento deve ignorare questultimo.
3.5.3
HTTP: Header
Ciascun header consiste di un nome seguito dai due punti (:) a cui segue il
valore attribuito al campo.
I campi sono case - insensitive.
I valori possono essere preceduti da un numero imprecisato di (Linear White
Space, spazi vuoti lineari)(vd. 3.5.1) anche se preferibile inserire un singolo
SP(vd. 3.5.1). Gli header field possono estendersi su pi righe a patto che
ciascuna riga extra sia preceduta da un SP o da un HT (vd. 3.5.1).
Gli header sono in formato MIME (vd. 3.5.4).
3.5.4
HTTP: MIME
MIME (Multipurpose Internet Mail Extensions) un sistema di comunicazione per permettere la spedizione tramite e-mail (e, per estensione, sul Web
tramite HTTP) di dati binari codificati.
A ciascun flusso di dati associata una intestazione del tipo Content-type:
object/format dove:
object specifica il tipo di oggetto codificato (text, image...);
format indica il formato con cui strutturato (ad esempio, per un oggetto
text pu essere plain, html);
26
27
3.5.5
HTTP: Body
Il message - body (se presente nel messaggio HTTP) adoperato per trasferire
lentity - body associato alla richiesta o alla risposta. Message - body e
Entity - body differiscono tra loro solo se applicata qualche codifica nella
trasmissione (transfer - coding):
message-body = entity-body | <entity-body codificato come specificato dallheader Transfer - Encoding>.
La presenza di un message - body in una richiesta segnalata dalla presenza
dellheader Content - Length o Transfer - Encoding. Un message - body
non deve essere incluso in una richiesta se il metodo adoperato non permette,
secondo le specifiche, di inviarne uno. Se esso viene inserito ugualmente, nonostante il metodo adoperato lo vieti, il server ignorer il message - body nel
momento in cui analizzer la richiesta stessa.t.
La presenza di un message - body in una risposta dipendente sia dal
metodo delle richiesta che dallo status code della risposta. Ad esempio tutte le risposte al metodo HEAD non includeranno un message - body. E, allo
stesso modo, tutte le risposte con status code pari a 1xx (informational, informativa), 204 (no content, nessun contenuto) e 304 (not modified, non
modificato). Tutte le altre risposte necessitano di message - body anche se esso
fosse di lunghezza zero (zero length).
3.5.6
28
Ci sono alcuni header che possono essere applicati sia per richieste che per
risposte e che non riguardano direttamente la particolare entit da trasferire:
Cache - Control, usato per specificare le direttive a cui devono soggiacere tutti i meccanismi di caching. Ci per garantire che i meccanismi di
caching non interferiscano con la trasmissione del messaggio. Le direttive
di caching sono unidirezionali cio possono essere differenti a seconda che
si tratti di una richiesta o di una risposta;
Connection, consente al mittente di specificare le opzioni desiderate per
una specifica connessione e non pu essere inoltrato da proxy;
Date, rappresenta la data e lora in cui il messaggio stato originato;
MIME - Version, indica la versione MIME adoperata per la trasmissione
(1.0);
Pragma, adoperato per includere particolari specifiche. Ad esempio
quando inoltrata la direttiva no-cache la richiesta deve essere inoltrata
direttamente allOrigin server ;
Trailer, indica che linsieme degli header field presente nella coda del
messaggio codificato mediante chunked transfer - coding;
Transfer - Encoding, usato per specificare leventuale codifica dei dati
applicata al message - body;
Upgrade, consente al client di specificare quali protocolli addizionali esso
supporta e consente al server di effettuare lo switching fra essi qualora lo
ritenesse opportuno;
Via , generalmente adoperato dai gateway e dai proxy per indicare i
protocolli e gli attori intermediari posti fra lo user agent e il server in un
messaggio di richiesta, e fra lorigin server e il client in un messaggio di
risposta;
Warning, adoperato per trasferire informazioni addizionali in merito
allo stato o alla trasformazione di un messaggio che potrebbe non evincersi
dal messaggio stesso.
3.5.8
Essi danno informazioni circa il body del messaggio, o, in sua assenza, sulla
risorsa specificata. Nello specifico:
Content - Type, indica il tipo MIME dellentit acclusa. Questo header
obbligatorio in ogni messaggio che abbia un body;
29
32
tipo;
versione del browser;
sistema operativo;
Referer, consente di:
indicare lURL della pagina che ha condotto lutente alla nuova risorsa;
controllare i percorsi degli utenti al fine di operare politiche di user
profiling 18 o pubblicit.
Nel caso in cui una risorsa sia richiesta senza lutilizzo di link tale header
non deve essere trasmesso.
Dovrebbe chiamarsi Referrer ma la dizione attuale deriva da una impropria compitazione (spelling) effettuata nel 1996 da parte dellinformatico
Phillip Hallam - Baker che appose la parola priva della doppia r nel
RFC1945. Lerrore rimasto incorretto poich allepoca lo Unix spell
checker non riconosceva come parole di senso compiuto sia REFERER
che REFERRER;
Host, presenta le seguenti caratteristiche:
nome di dominio e porta a cui viene fatta la connessione;
obbligatorio in HTTP 1.1;
permette di effettuare il multi - homing (detto anche name - based
virtual hosting poich non richiede manipolazioni del routing o
multi - addressing IP ). Se un server contiene pi siti Web per scopi
diversi, Host consente al server di distinguere il sito a cui la richiesta
fa riferimento;
From, indica la e - mail del richiedente. Si richiede che lutente dia la
sua approvazione prima di inserire questo header nella richiesta;
Authorization, Proxy - Authorization, indica una stringa di autorizzazione per laccesso ad una risorsa;
Range, richiede non lintera risorsa ma solo una sua parte specificata come
una sequenza di byte range (vd. Fig. 16). E adoperato principalmente dai
download manager per riprendere download interrotti senza recuperare la
totalit del file in scaricamento;
Accept, Accept - Charset, Accept - Encoding, Accept Language,
indicano limplementazione della negoziazione del formato per ci che
riguarda, rispettivamente:
tipo MIME;
codice caratteri;
codifica MIME;
lingua umana.
33
3.5.10
34
informatica Common Gateway Interface, una tecnologia standard usata dai web
server per interfacciarsi con applicazioni esterne generando contenuti web dinamici. Ogni
volta che un client richiede al web server un URL corrispondente ad un documento in puro
HTML gli viene restituito un documento statico (come un file di testo); se lURL corrisponde
invece ad un programma CGI, il server lo esegue in tempo reale, generando dinamicamente
informazioni per lutente.
35
HTTP: Authentication
Quando si vuole accedere ad una risorsa sulla quale vigono restrizioni di accesso, il server richiede lautenticazione dellutente. Al metodo GET fornita la
risposta 401 (Unauthorized), pi un header WWW - Authenticate che
specifica i criteri con cui autenticarsi. HTTP ha due metodi di autenticazione:
Basic access authentication (introdotto in HTTP 1.0) e Digest access
authentication (introdotto in HTTP 1.1).
Basic access authentication Lautenticazione basic basata sullinvio, da
parte del client, di una user-ID e di una password per ciascun realm 20 . Il server
esaudir la richiesta solo se user-ID e password risultano essere validi per lo
specifico spazio di protezione dellURI richiesto. Nello specifico lautenticazione
basic si articola nelle seguenti fasi:
il client effettua una richiesta ad un server ;
il server risponde con lheader WWW-Authenticate contenente il realm;
il client richiede le informazioni di autorizzazione;
il client crea una nuova richiesta GET nella quale fornisce le informazioni
di autenticazione codificate in Base64(vd. 3.5.4);
20 Lattributo realm (case insensitive) richiesto per tutte quelle forme di autenticazione
che richiedano il cosiddetto challenge (protocolli basati su domanda - risposta). Il valore
del realm (case sensitive) definisce lo spazio di protezione. Lutilit dei realm consiste nella
possibilit di partizionare le risorse su un server in tanti sottoinsiemi ciascuno dotato di propri
meccanismi di autenticazione. Il valore del realm una stringa, assegnata, generalmente,
dallorigin server.
36
Digest access authentication E un meccanismo di autenticazione introdotto in HTTP 1.1. La caratteristica innovativa di tale approccio che la password non transita in chiaro bens mediante una fingerprint (hash), calcolata
applicando lalgoritmo di criptazione MD5 (Message Digest 5).
Per evitare labuso della password, anche se crittografata, insieme alla fingerprint vengono codificate anche informazioni, come lo username, il realm, lURI
richiesto, un time stamp (nonce), etc.
Nel caso pi semplice (quality of protection qop = auth):
h1 = MD5(username:realm:password)
h2 = MD5(method:digestURI)
response = MD5(h1:nonce:h2)
3.6
Connessione HTTP
HTTP 1.0
37
HTTP 1.1
In HTTP 1.1 per impostazione predefinita, le connessioni sono persistenti(Fig. 22). Se il server decide di chiudere la connessione, nella risposta inserir
lheader field Connection: Close. Sia i server sia i client adottano timeout
dopo i quali le connessioni aperte, rimaste inattive, vengono chiuse.
38
3.7
Cookie
I cookie usano due header, uno per la risposta ed uno per le richieste successive:
set-Cookie, header della risposta da parte di un server. Il client pu
memorizzarlo in un file testuale e rispedirlo alla prossima richiesta;
cookie, header della richiesta. Il client decide se spedirlo sulla base di:
URL della risorsa;
nome del server ;
et del cookie.
Alternative ai cookie I cookie permettono al server di riassociare una richiesta a richieste precedenti (creare uno stato tra connessioni) attraverso luso
di un pacchetto di dati opaco.
Ci sono altri metodi, ma hanno tutti difetti:
si potrebbe associare lo stato allindirizzo IP del richiedente ma alcuni
computer sono multi-utente, quindi utenti diversi condividono lo stesso
IP; altri computer hanno indirizzi dinamici, e lo stesso IP pu essere
assegnato a computer diversi ;
si potrebbero nascondere informazioni allinterno della pagina HTML (attraverso campi nascosti di un form), ma questo significa dover generare
dinamicamente tutte le pagine ed essere soggetti a manipolazioni semplici
da parte degli utenti. Inoltre sono informazioni che rimangono associate
ad una pagina specifica (un back e ho perso il contenuto del mio carrello);
si potrebbero complicare gli URL della pagine, inserendo dentro le informazioni di stato, ma si complica la gestione dei proxy, delle cache, e si
rende pi facilmente manipolabile la stringa opaca.
40
Third - Party Cookies Un uso subdolo (ma alcuni lo giustificano) dei cookie
linserimento nei banner e nelle pubblicit. Questo permette al fornitore di
pubblicit via Web di seguire la navigazione di un utente attraverso tutti i siti a
cui fornisce banner, e quindi fornire una profilazione pi precisa del navigatore,
con effetti discutibili sulla sua privacy. LRFC 2965 esplicitamente proibisce
questo tipo di comportamento, lavvertenza per largamente ignorata. Si
aggiunga che alcune versioni di browser hanno bug che permettono a codice
Javascript malizioso, presente nelle pagine, di sniffare i contenuti dei cookie
destinati ad altri domini.
E recente la convenzione do not track tra produttori di browser e associazioni di fornitori di pubblicit via Web: lutente deve specificare nelle preferenze
del browser che non vuole essere tracciato (lopzione disattivata di default).
In tal caso, in ogni richiesta HTTP inserito lheader field sperimentale DNT:
1.
3.8
Proxy server
41
3.8.1
Reverse proxy
Viene detto reverse proxy un proxy server che si pone da gateway nei confronti
di uno o pi Web server. I client contattano il reverse proxy come se fosse
lorigin server, senza sapere che la richiesta sar inoltrata al vero origin server.
Le finalit di impiego di tale tipologia di proxy sono le seguenti:
permettere a pi Web server di uscire su Internet con un unico indirizzo
IP pubblico;
load balancing, cio distribuire il carico tra diversi Web server ;
firewall;
caching;
Accelerazione hardware di primitive crittografiche necessarie per SSL/TLS.
3.9
Caching
42
se la data di scadenza gi trascorsa, la richiesta deve essere riconvalidata. Se il client accetta anche risposte scadute, o se lorigin
server non pu essere raggiunto, il cache server pu rispondere con
la risorsa scaduta insieme allo status code 110 (Response is stale);
se Cache-Control specifica la direttiva must-revalidate, la risposta
scaduta non pu mai essere rispedita. In questo caso il cache server
deve riprendere la risorsa dallorigin server. Se questo non risponde,
la cache mander un codice 504 (Gateway time-out);
se Cache-Control specifica la direttiva no-cache, la richiesta deve
essere fatta sempre allorigin server ;
Heuristic expiration, il gestore della cache stabilisce valori euristici
di durata delle risorse, dopo i quali assume che siano scadute. HTTP
suggerisce, ad esempio, di basarsi sulla data di ultima modifica e applicare
un fattore moltiplicativo
expiry-period = time-since-last-modified-date * factor
expiry-date = current-date + expiry-period
valore tipico: factor = 0.1
per cui, se al momento della richiesta una risorsa non stata modificata
da 10 ore, sar considerata valida ancora per 1 ora.
Queste assunzioni possono a volte essere ottimistiche, e risultare in risposte
scorrette. Se non valida con certezza, una risposta assunta come valida
deve fornire un codice 113 (Heuristic expiration) al client.
3.9.1
Anche dopo la scadenza, nella maggior parte dei casi, una risorsa non viene
modificata sullorigin server e quindi la risorsa in cache continua a risultare
valida. Modi semplici per fare convalida da parte di un cache server sono i
seguenti:
usare HEAD, viene, cio, inoltrata una richiesta e verificata la data di
ultima modifica (comporta una richiesta preliminare supplementare);
fare una richiesta condizionale, cio, se la risorsa stata modificata, viene
regolarmente fornita la nuova risorsa, altrimenti viene fornita la risposta
304 (Not modified ) senza body della risposta. Questo riduce il numero di
richieste.
Convalidatori (validators) Gli Entity Tag (ETag) sono un altro meccanismo per convalidare le risorse (entity) in cache. Lorigin server inserisce
nella sua risposta iniziale un header field con il/i tag associato/i alla versione
restituita della risorsa.
43
Poich sia lorigin server che le cache comparano due validatori per decidere
se rappresentano le stesse entit o differenti, ci si aspetterebbe che, nel caso in
cui lentit cambi anche il validatore cambi. Se questo accade allora parliamo
di strong validator.
Nel caso in cui un server preferisca cambiare il validatore solo se avvengono
significativi cambiamenti semantici utilizzabile un validatore che non cambi
ogni volta in cui la risorsa cambia: si definisce weak validator.
Successivamente, il client pu effettuare una richiesta condizionale usando
uno degli header
If-Match: lista entity tag
Match: esegui il metodo HTTP;
No match: 412 Precondition Failed.
If-None-Match: lista entity tag
Match:
se GET o HEAD, allora 304 Not Modified ;
se altro metodo, allora 412 Precondition Failed.
No match: esegui il metodo HTTP.
3.10
Modelli di sicurezza
Ci sono due modi per fornire una comunicazione sicura (cio non intercettabile
da orecchie maliziose durante la trasmissione):
usare uninfrastruttura di trasporto sicura. Il protocollo applicativo non
cambia, ma ogni pacchetto trasmesso nello scambio di informazioni viene
gestito in maniera sicura dal protocollo di trasporto;
usare un protocollo sicuro a livello applicazione. Si usa un protocollo
diverso, che si occupa di gestire la trasmissione sicura delle informazioni.
Esempi di protocolli sicuri sono:
HTTPS (RFC 2818), introdotto da Netscape, trasmette i dati in HTTP
semplice su un protocollo di trasporto (TLS, Transport Layer Security);
successore di SSL, (Secure Sockets Layer ) crittografa tutti i pacchetti. Il
server ascolta su una porta diversa (per default la porta 443), e si usa uno
schema di URI diverso ( https:// );
S-HTTP (RFC 2660), poco diffuso, incapsula richieste e risposte HTTP
in un messaggio crittografato secondo o un formato MIME apposito (MIME Object Security Services, MOSS), o un formato terzo (Cryptographic
Message Syntax, CMS). E pi efficiente ma complesso.
44
45
4.1
4.2
46
4.3
47
48
4.4
4.5
Configurazione
4.6
Direttive di base
text/plain
24 Percorso
51
TimeOut Secondi che il server attender prima di interrompere una connessione se la trasmissione TCP si blocca durante la ricezione di una
richiesta o linvio di una risposta.
TimeOut 300
KeepAlive Connessioni TCP persistenti (richiesta di pi file con la stessa
connessione). Default in HTTP/1.1, riduce la latenza nellinvio di pagine
con file collegati (immagini, etc.).
KeepAlive On|Off
KeepAliveTimeout Secondi che il server attender ulteriori richieste su
una connessione TCP aperta.
KeepAliveTimeout 5
4.7
Moduli
52
4.8
Server-side include
4.9
Direttiva IfModule
Ad esempio:
<IfModule dir_module>
</IfModule>
4.10
ErrorLog indica il percorso del file di log degli errori (relativo a ServerRoot)
ErrorLog file ErrorLog logs/error_log
LogLevel controlla la tipologia di messaggi inviati al log degli errori. Esistono differenti valori possibili di level (dal meno grave al pi grave):
debug, messaggi di debug;
info, informazione;
notice, condizione normale ma significativa;
warn, condizione di warning;
error, condizione di errore;
crit, condizione critica;
alert, unazione deve essere immediatamente presa;
emerg, emergenze - il sistema non adoperabile.
Ad esempio:
LogLevel warn.
4.11
54
%u %t %r
%>s
LogFormat %h
%bmylog
4.12
55
MultiViews, permette la content negotiation (negoziazione dei contenuti) come previsto da HTTP 1.1.
AllowOverride controlla quali direttive possono essere inserite nei file .htaccess.
Order, Allow e Deny controllano laccesso alle risorse dal server:
Order Deny,Allow, accesso consentito a tutti tranne i client indicati
nelle direttive Deny (politica black list);
Order Allow,Deny, accesso vietato a tutti tranne i client indicati nelle
direttive Allow (politica white list);
Deny from all, vieta laccesso a tutti;
Deny from domain, vieta laccesso ai client appartenenti al dominio
DNS specificato;
Allow from all, consente laccesso a tutti;
Allow from domain, consente laccesso ai client appartenenti al dominio.
Tipiche opzioni di default: <Directory /> Options FollowSymLinks Allo-
4.13
4.14
Ridirezione
4.15
Alias
Alias, mappa un percorso web con un percorso sul filesystem del server. Si
usa per permettere laccesso a risorse che risiedono al di fuori della directory
DocumentRoot.
La sintassi la seguente Alias URL-path directory-path dove:
URL-path, indica il percorso web da mappare;
57
4.16
dove:
code, codice di errore HTTP;
document, messaggio da mostrare agli utenti. Esso pu essere:
una stringa di testo (tra virgolette);
il percorso (relativo a DocumentRoot) di un file HTML;
un URL assoluto di un file HTML.
Esempi sono i seguenti: ErrorDocument 500 "Ci dispiace tanto, ma il server
ha incontrato un errore inatteso". ErrorDocument 404 /notfound.html. ErrorDocument 404 /cgi-bin/notfound.pl. ErrorDocument 403 http://www.example.com/forbidden.html.
4.17
UserDir, viene resa accessibile la directory dir nella home directory di ciascun utente in un percorso di URL contenente il nome utente preceduto da un
carattere (tilde).
La sua sintassi la seguente UserDir dir.
Ad esempio se bob un utente del sistema www.example.com e nel file
httpd.conf presente la direttiva la richiesta HTTP con URL http://www.example.com/ bob/biography.html ricever in risposta il documento memorizzato in
/home/bob/public_html/biography.html
Le opzioni adoperabili sono:
UserDir enabled|disabled abilita o disabilita le directory personali per tutti
gli utenti
UserDir enabled|disabled user1 user2 ... userN abilita o disabilita le directory personali di alcuni utenti
58
Normalmente si disabilita per tutti gli utenti tranne quelli a cui fornire
esplicitamente lo spazio personale.
UserDir public_html UserDir disabled UserDir enabled alice bob peter
E opportuno associare una direttiva Directory per definire le opzioni abilitate o disabilitate nelle directory personali degli utenti e il controllo daccesso.
Ad esempio:
<Directory /home/*/public_html> ... </Directory>
4.18
Direttiva Include
4.19
59
Eseguire il comando /usr/local/httpd/bin/htpasswd -c /usr/local/httpd/passwd/passwords utente1 Il programma crea (opzione -c) il file delle password e chiede di immettere e confermare la password per utente1
Eseguire il comando /usr/local/httpd/bin/htpasswd /usr/local/httpd/passwd/passwords utente2 Il programma aggiunge al file esistente nome utente e password di utente2. Ripetere il passo per tutti gli altri utenti da
autenticare
Inserire le seguenti righe in httpd.conf allinterno di una direttiva Directory
(o un file .htaccess) che si riferisce alla directory da proteggere:
<IfModule mod_auth_basic> AuthType Basic AuthName "Area riservata" AuthBasicProvider file AuthUserFile /usr/local/http/passwd/passwords Require valid-user </IfModule>
AuthName definisce un realm (contesto) di sicurezza: lutente inserir le
credenziali una volta sola e potr accedere, nella stessa sessione, a tutte
le risorse di quel realm
Questa tecnica adeguata solo nei casi in cui:
gli utenti sono pochi (il file degli account puramente testuale ricerca
sequenziale);
le esigenze di sicurezza sono modestissime (il client trasmette la password
in chiaro);
Possibilit pi avanzate permettono di:
definire gruppi di utenti (pi flessibilit);
trasmettere un hash invece della password in chiaro (pi sicuro);
usare il modulo per la crittografia con SSL/TLS (ancora pi sicuro);
memorizzare gli account in un database (pi efficiente);
usare LDAP Lightweight Directory Access Protocol per gestire gli account e le autorizzazioni (massima flessibilit).
4.20
File.htaccess
Un file .htaccess altera la configurazione del server HTTP solo per la directory
in cui si trova (e le sottodirectory). I file .htaccess hanno la stessa sintassi di
httpd.conf. Si tratta, quindi, di una tecnica alternativa ed equivalente alluso
delle direttive Directory nel file httpd.conf principale.
I vantaggi sono:
consente agli utenti di cambiare la configurazione solo per le proprie risorse, senza richiedere modifiche allamministratore del web server;
utile ai fornitori di servizi di hosting.
Gli svantaggi sono:
60
prestazioni: uno o pi accessi a file .htaccess per ogni risorsa richiesta dal
client;
sicurezza: rischi se AllowOverride concede privilegi eccessivi.
AllowOverride, indica quali direttive di Apache possono essere ridefinite
mediante file .htaccess rispetto alle impostazioni di base presenti in httpd.conf.
Si usa allinterno di una direttiva Directory e vale anche per tutte le sottodirectory.
La sua sintassi la seguente AllowOverride all|none|directive [directive]
Valori possibili sono:
none: i file .htaccess vengono ignorati da Apache (migliori prestazioni)
all: consente di ridefinire qualsiasi direttiva
un elenco di gruppi direttive di cui consentire la ridefinizione
Falso: i file .htaccess si usano solo per il controllo daccesso a una directory;
Vero: nei file .htaccess si pu usare qualsiasi direttiva;
Vero: per il controllo daccesso ci sono anche tecniche migliori.
4.21
Caching
4.22
Dominio virtuale indica uno stesso server HTTP che serve pi domini (ad es.
www.dominio1.com e www.dominio2.com). Ogni virtual host ha una diversa
DocumentRoot. Ne esistono di due tipi:
IP-based virtual hosting: il server ha pi indirizzi IP e ciascun virtual host
associato a un diverso indirizzo;
Name-based virtual hosting (detto anche multi-homing): tutti i virtual
host sono associati ad un unico indirizzo IP (caso pi frequente).
Esempi virtual host IMMAGINE!!!!!!!
4.22.1
62
Si adopera una direttiva NameVirtualHost in cui indicare lindirizzo IP del server (o * per indicare qualsiasi indirizzo) e la porta. Si adopera una direttiva
VirtualHost per ciascun dominio virtuale, con lo stesso IP di NameVirtualHost e
almeno ServerName e DocumentRoot. Il ServerAlias permette di definire forme
diverse dello stesso nome di dominio virtuale per agevolare lutente
Ad esempio: NameVirtualHost *:80 <VirtualHost *:80> ServerName www.domain.com ServerAlias domain.com *.domain.com DocumentRoot /var/www/domain </VirtualHost> <VirtualHost *:80> ServerName www.otherdomain.com
DocumentRoot /var/www/otherdomain </VirtualHost> NB: per funzionare
necessario che il server DNS associ i nomi di dominio virtuali e gli alias
allindirizzo IP del server!
4.23
Multi-processing modules
Dal punto di vista dellarchitettura software, Apache 2.4 offre diversi modelli di
multi-processing. Sono implementati attraverso moduli da scegliere a tempo di
installazione (compilazione statica). I principali modelli sono:
prefork, un singolo processo di controllo responsabile per lanciare processifigli i quali restano in ascolto per le connessioni e le servono non appena
arrivano. Apache cerca di mantenere differenti processi di scorta o inattivi
cos da provvedere prontamente a servire le richieste in arrivo. In tal modo i client non devono attendere che venga effettuato il fork di un nuovo
processo figlio per essere serviti;
worker, un singolo processo di controllo responsabile per il lancio dei
processi figlio. Ciascun processo figlio crea un numbero prefissato di
server-thread cos come specificato nella direttiva ThreadsPerChild ed un
thread-listener che resta in ascolto delle connessioni per poi passarli ai
server-thread;
event, cerca di risolvere il problema del keep-alive di HTTP. Dopo che un
client ha completato la prima richiesta esso pu mantenere la connessione
aperta ed inviare ulteriori richieste via socket. In tal modo vi un gran
risparmio di overhead nella creazione di connessioni TCP. Viene, dunque,
adoperato un thread dedicato che gestisca il listening sul socket e tutti i
socket restano in modalit keep-alive.
La scelta del modello dipender da:
tipo di applicazioni Web che il server dovr supportare;
sistema operativo (alcuni modelli sono meno efficienti su alcuni OS).
63
4.24
Prefork MPM
4.25
Worker MPM
4.26
Event MPM
E una variante del modello worker con I/O event/based. In worker, resta
in attesa un thread per ogni connessione rimasta in KeepAlive. In event, un
unico thread resta in attesa di eventi per tutte le connessioni in KeepAlive.
Non funziona con modelli di CPU pi vecchi, che non supportano operazioni
di confronto e scambio atomico a livello di ISA. Le direttive sono le stesse di
worker. Si tratta di un modello ancora sperimentale!
26 Si
tratta del trasferimento dati dalla memoria centrale allhard disk (vd. Swap).
64
4.27
XAMPP
4.28
Riferimenti
Nginx
Nginx (pronuncia: engine-x) un Web server open source ad elevata concorrenza, sviluppato inizialmente da Igor Sysoev, poi da Nginx Inc. La prima versione
pubblica risale al 2004. Pu svolgere il ruolo di:
Web server;
Reverse proxy per HTTP, HTTPS, SMTP, POP3, IMAP.
Risulta configurabile ed estensibile attraverso moduli ed disponibile per
sistemi operativi UNIX-like (Linux, Mac OS X, Solaris, etc.) e Windows.
5.1
65
Test
IMMAGINE!!!!!!!!!!
5.1.7
IMMAGINE!!!!!!
5.1.8
Considerazioni prestazionali
Le ultime versioni di Apache (2.4.x) hanno prestazioni generalmente paragonabili a Nginx anche se non possono supportare livelli estremi di concorrenza.
Nginx , rispetto ad Apache:
veloce nel servire risorse statiche;
lento nel servire risorse dinamiche.
Allora una tipica configurazione avr Nginx come server per le risorse statiche mentre un proxy verso Apache per le risorse dinamiche.
Documentazione ufficiale su http://nginx.org/en/docs/ M. Fjordvald, Instant Nginx Starter, ebook C. Nedelcu, Nginx HTTP Server, ebook
Un sistema informativo un sistema hardware/software che consente lesecuzione di operazioni per laccesso e la modifica di informazioni. Un sistema si
dice distribuito se i diversi componenti, che concorrono allo svolgimento delle
funzionalit del sistema, sono eseguiti su calcolatori indipendenti (interconnessi
in rete). Lo scopo di un sistema informativo , in generale, automatizzare in
tutto o in parte i processi svolti da unorganizzazione (azienda, ente, comunit
di persone, ecc.) dislocata su un territorio. Spesso il sistema informativo solo
una parte di un sistema pi complesso nel mondo reale, che comprende persone
ed oggetti.
Per progettare un sistema informativo distribuito necessario definire:
protocolli di comunicazione tra i vari componenti;
formati per linterscambio dei dati necessari a richiedere operazioni e a
restituire le risposte.
67
6.1
6.2
Metodologie di progetto
Top - down
68
Bottom - up
6.3
70
6.3.1
Layer e tier
71
logging;
sicurezza e policy configurabili per laccesso alle risorse;
replica (replication) dei dati;
persistenza.
Di contro, luso di middleware comporta
maggior overhead di comunicazione tra i componenti del sistema;
necessit di uninterfaccia stabile non solo tra presentazione e logica applicativa, ma anche tra logica applicativa e gestione delle risorse.
Architettura N-tier Le architetture N-tier (o multi-tier) nascono dalla connessione di pi sistemi 3-tier o dallinclusione di un livello di accesso al sistema
attraverso Web server. Il livello Web, in principio esterno al sistema, oggi
sempre pi spesso incorporato nel layer di presentazione residente sul server:
come parte del middleware, in unarchitettura 3-tier (Web application
server);
come parte del server, in unarchitettura 2-tier.
Comunicazione tra moduli La comunicazione tra moduli pu avvenire mediante interazioni:
bloccanti, pi semplici da progettare e implementare ma caratterizzate
da minori performance;
non bloccanti, consentono
maggiori performance;
maggiore disaccoppiamento;
richiede pi risorse ed pi difficile da implementare.
Middleware
Il Middleware facilita:
interazione;
integrazione;
tra piattaforme di calcolo distribuite ed eterogenee.
Il middleware, dal punto di vista del progettista e dello sviluppatore, unastrazione della programmazione (come una qualsiasi libreria). Offre funzionalit
che altrimenti andrebbero programmate da zero e consente di concentrare lo sviluppo sulle problematiche di pi alto livello. Si tratta, quindi, di una suite di
componenti software da installare, configurare, monitorare, aggiornare.
Esistono differenti tipi di middleware:
RPC (Remote Procedure Call);
74
7.1
Nati negli anni 1980, quando nellinformatica era prevalente il modello di programmazione strutturata procedurale, ha contribuito a rendere popolari
le applicazioni distribuite di tipo client-server (2-tier).
Eseguire una chiamata a procedura da un client verso un server remoto
simile ad una chiamata a procedura interna ad un programma.
IMMAGINE PILA!!!
Larchitettura RPC adoperata sfrutta il concetto degli stub (spezzoni, adattatori ). Sia sul client che sul server sono presenti degli adattatori delle funzioni
da invocare/invocate: questi veri e propri pezzi di codice permettono di rendere
completamente trasparente al programmatore alcune azioni meccaniche come
lidentificazione della macchina server, lattuazione della procedura di send della richiesta al server, la gestione dei parametri della chiamata a funzione. Il
programmatore non dovr pi gestire queste azioni manualmente. Si parla in
tal caso di RPC trasparente. Se il programmatore richiede pi controllo
adoperabile un RPC non trasparente.
In sintesi, una chiamata a procedura remota avviene seguendo questi passi:
la procedura client richiama il client stub nel modo normale;
il client stub costruisce un messaggio e richiama il sistema operativo locale;
il SO del client invia il messaggio al so remoto;
il SO remoto passa il messaggio al server stub;
il server stub spacchetta i parametri e richiama il server;
il server esegue il lavoro e restituisce il risultato allo stub;
il server stub lo impacchetta in un messaggio e richiama il suo SO;
il SO del server invia il messaggio al SO del client;
il SO del client passa il messaggio al client stub;
lo stub spacchetta il risultato e lo restituisce al client.
Come possibile che un client possa effettuare una chiamata di funzione con
puntatori? Le due macchine non condividono lo stesso spazio di indirizzi! Per
risolvere questo problema stato introdotto il meccanismo di copia/ripristino.
Esso consiste nel:
75
in modo tale da permettere al client di continuare le proprie elaborazioni indipendentemente dal risultato della elaborazione del server. Tale modalit tipica
di quelle elaborazioni in cui il client non necessita del ritorno del risultato della
elaborazione server.
Nel caso in cui il client necessiti di tale valore di ritorno, possibile impiegare
una modalit di RPC differita o a 2 fasi. Nella prima fase il client attua una
RPC asincrona verso il server, nella seconda fase il server ad attuare una
RPC asincrona verso il client per comunicare il valore di ritorno della propria
elaorazione.
7.1.1
Binding
77
10
11
12
13
Cloud Computing
14
15
16
Online marketplaces
17
Sponsored Search
18
Web of Things
19
Hadoop
78
Riferimenti bibliografici
[1] M.W. Godfrey A. Grosskurth. Architecture and evolution of the modern
web browser,(Univ. of Waterloo, Canada). url: http://grosskurth.ca/
papers/browser-archevol-20060619.pdf.
[2] Andrea DAlessandro. Una Storia dellIpertesto. url: http://areeweb.
polito . it / didattica / polymath / ICT / Htmls / Argomenti / Appunti /
StoriaIpertesto/StoriaIpertesto.htm.
[3] W3C Network Working Group. Hypertext Transfer Protocol HTTP/1.1.
url: http://tools.ietf.org/html/rfc2616.
[4] W3C Network Working Group. Hypertext Transfer Protocol HTTP/1.1.
url: http://tools.ietf.org/html/rfc2068.
[5] W3C Network Working Group. Hypertext Transfer Protocol HTTP/1.1.
url: http://tools.ietf.org/html/rfc2069.
[6] W3C Network Working Group. Hypertext Transfer Protocol HTTP/1.1.
url: http://tools.ietf.org/html/rfc2617.
[7] UniSa. RFC 822 e MIME. url: http://www.di.unisa.it/~ads/corsosecurity/www/CORSO-0203/SMIME/doc/RFC%20822%20e%20MIME.htm.
[8] W3C. W3C Process. url: http://www.w3.org/2014/Process-20140801/.
[9] Wikipedia. SGML. url: http://it.wikipedia.org/wiki/Standard_
Generalized_Markup_Language.
[10] Wikipedia. W3C. url: http://it.wikipedia.org/wiki/World_Wide_
Web_Consortium.
[11] Wikipdia. bnf. url: http://it.wikipedia.org/wiki/Backus- Naur_
Form.
[12] Wikipdia. cURL. url: http://en.wikipedia.org/wiki/CURL.
79