05 Web Server e Web Browser
05 Web Server e Web Browser
Antonio Ferrara | Fondamenti del Web (Ingegneria del Software e Fondamenti Web)
5 Web Server
e Web Browser
Antonio Ferrara | Fondamenti del Web (Ingegneria del Software e Fondamenti Web)
Introduzione
ai web server
Il termine web server può riferirsi sia a un componente software che a un componente hardware
Definizione “hardware”
Un web server è un computer che esegue un software di web server e conserva i file che compongono un sito/applicazione Web
Il web server è connesso ad Internet e supporta lo scambio di dati con altri dispositivi connessi
Definizione “software”
Un web server è un software che permette l’accesso (almeno) HTTP HTTP Request
Files
mediante protocollo HTTP alle risorse di uno o più siti/ server
HTTP Response
applicazioni web
Un server HTTP deve comprendere gli indirizzi web (URL),
Web server Browser
comprendere le richieste dei client, processarle e rispondere
Raggiungere un web server è possibile, in generale, conoscendo l’indirizzo (o il nome di dominio) dei siti/applicazioni web che
esso ospita/serve
Antonio Ferrara | Fondamenti del Web (Ingegneria del Software e Fondamenti Web)
Introduzione
ai web server
Berners-Lee sviluppò il primo server web fra il 1990 e il 1991 (CERN httpd)
Nel 1994, fu rilasciato NCSA httpd e poco dopo Apache HTTP Server
Solo dopo la standardizzazione del protocollo HTTP (1996-1997), c’è stata l’esplosione dei server web, fra cui Netscape
Enterprise Server e Microsoft IIS
Dopo gli anni 2000, i browser hanno aumentato il numero di connessioni parallele verso un host, e i server hanno dovuto
gestire un numero enormemente più grande di richieste, favorendo la diffusione di reverse proxy e di nuovi web server (es.
Nginx) capaci di gestire numerose richieste con buone performance
A partire dal 2015, i web server hanno dovuto implementare cambi significativi per introdurre il supporto ad HTTP 2
Antonio Ferrara | Fondamenti del Web (Ingegneria del Software e Fondamenti Web)
Introduzione
ai web server
1 Il modulo di networking del web server riceve una
richiesta per una risorsa
Code di richieste
Nell’ambito di connessioni persistenti, il protocollo HTTP/1.1 specifica che, nel contesto di una singola connessione, le
risposte a diverse richieste debbano essere inviate in ordine di arrivo delle richieste (FIFO)
• Mantenere una coda di richieste in input e una coda di richieste in output
• Quando una richiesta deve entrare in elaborazione, viene rimossa dalla coda di input e inserita nella coda di output
• Una volta che l’elaborazione è stata completata, la richiesta è marcata per il rilascio ma rimane nella coda finché tutti i
suoi predecessori non siano usciti dalla coda di output
Antonio Ferrara | Fondamenti del Web (Ingegneria del Software e Fondamenti Web)
Lettura del
messaggio di richiesta
Un web server deve:
<VirtualHost [Link]>
• Leggere e interpretare un messaggio di richiesta HTTP ServerAdmin webmaster@[Link]
Alias /images /static/images
• Verificare la sua sintassi DocumentRoot /www/docs/neurozen
• Identificare header HTTP conosciuti ServerName [Link]
</VirtualHost>
Vengono inoltre effettuate una serie di operazioni sull’URL della richiesta [Link]
• Normalizzazione: il percorso della risorsa viene pulito e “standardizzato” (es. [Link]
sostituzione di simboli ., rimozione di trailing slash / inutili, ordinamento dei /images ➔ /static/images
/www/docs/neurozen/static/images/[Link]
parametri della query, rimozione di query di default, …)
• Mapping: l’URL viene analizzato per capire a cosa si riferisce e come
debba essere trattato in base alle configurazioni del server (es. sulla base dell’estensione del file o del percorso):
• Riscrittura dell’URL? Virtual hosting? Alias?
• Richiesta di un file statico
• Richiesta dinamica (quale programma o processore deve essere eseguito, quali parametri bisogna passare)
• Traduzione del percorso dell’URL in un percorso del file system
• File statico? Es. [Link] ➔ /home/www/[Link]/path/[Link]
• Directory senza file index? Es. [Link] ➔ generazione dinamica del listing
• Richiesta dinamica? Es. [Link] ➔
/home/www/[Link]/cgi-bin/[Link] ed esecuzione del programma appropriato passando input e query string
Antonio Ferrara | Fondamenti del Web (Ingegneria del Software e Fondamenti Web)
Delivery di
contenuti statici
Se il server può servire contenuti statici, esso deve poter mappare l’URL di un messaggio di richiesta (dopo URL mapping,
translation e redirection) alla posizione di un file all’interno del file system del server web
Il server può essere configurato per servire solo alcuni tipi di file statici Su un server, prova a
cambiare il
mapping dell’estens
ione .html da
text/html a text
Il server ritrova il file, costruisce la risposta HTTP e la trasmette al client /plain e
vedere come questa
Il server controlla il rendering browser-side del contenuto della risposta mediante pagina viene
visualizzata nel brow
ser
l’header HTTP Content-Type, che viene impostato a un tipo MIME
In base alla configurazione del server, se l’URL della richiesta corrisponde ad una cartella, il server può cercare il primo index
file in quella cartella e servirlo al client (es. [Link])
int fd = open("[Link]");
int len = read(fd, fileContents, sizeOfFile(fd));
write(tcpConnection, httpResponseHeader, headerSize);
write(tcpConnection, fileContents, len);
Antonio Ferrara | Fondamenti del Web (Ingegneria del Software e Fondamenti Web)
Approccio programm
atico allo
CGI era il meccanismo originario per il delivery di contenuti dinamici, risalente ai primi tempi del Web
CGI assume che, all’arrivo di una richiesta di esecuzione di uno script CGI, venga creato un nuovo processo figlio per
eseguire un particolare programma (scritto in qualunque linguaggio)
Il processo viene terminato quando l’elaborazione della richiesta è completata
Il meccanismo CGI era definito come un insieme di regole, così che qualunque programma che seguisse tali regole poteva
essere eseguito su qualunque server HTTP
Antonio Ferrara | Fondamenti del Web (Ingegneria del Software e Fondamenti Web)
Delivery di Approccio a templa
contenuti dinamici
te allo sviluppo di w
eb app
Questo approccio è
page-centric e più “d
friendly ” esigner
Genera un interleavin
g brutale di logica e
dati con struttura e p accesso ai
Server Side Includes resentazione della p
agina
<html>
<body>
<!--#exec cgi [Link] -->
</body>
</html>
Per far sì che il server “scopra” ed esegua le macro CGI è quindi necessario associare alle pagine SSI un’estensione
differente (come .shtml) cui sia associata una particolare elaborazione server-side
Antonio Ferrara | Fondamenti del Web (Ingegneria del Software e Fondamenti Web)
Delivery di
contenuti dinamici
Elaborazione di template
I template sono file HTML con “tag” addizionali che indicano metodi per inserire contenuto generato dinamicamente
Fra gli approcci più popolari troviamo Cold Fusion (Adobe) e gli approcci “ibridi” PHP (open source) e Active Server Pages
(Microsoft) che inseriscono in HTML dei container per l’inclusione di script
SSI può essere considerato un approccio a template primitivo (task semplici come l’embedding di file esterni e di output di
programmi CGI)
I processori di template forniscono, in generale, funzionalità più sofisticate come interazione con database e uso di costrutti
iterativi e condizionali (es. cicli for e statement if)
<CFIF [Link] GT 0> Il vantaggio di questo approccio è la sua
<TABLE> <b>
<CFOUTPUT QUERY=“myquery”> <?php if ($xyz >= 3) { “semplicità” nella realizzazione diretta di
<TR> print $myHeading; applicazioni web all’interno di pagine HTML
<TD>#name#</TD> } else {
<TD>#surname#</TD> ?> D’altra parte questo approccio rende sfocata
</TR> HEADER DI DEFAULT
</CFOUTPUT> <?php } ?>
la linea fra scripting e realizzazione di
</TABLE> </b> template
</CFIF>
Antonio Ferrara | Fondamenti del Web (Ingegneria del Software e Fondamenti Web)
Delivery di
contenuti dinamici
Servlet
Le servlet sono classi in Java che hanno accesso alle informazioni presenti
all’interno delle richieste HTTP e che possono generare risposte HTTP
Antonio Ferrara | Fondamenti del Web (Ingegneria del Software e Fondamenti Web)
Delivery di
contenuti dinamici Approccio programm
allo sviluppo di web
atico
app
Servlet import [Link].*;
import [Link].*;
import [Link].*;
1 Il web container inizializza l’istanza
servlet chiamando il metodo public class AccessCounter extends HttpServlet {
private Integer sharedCounter;
init(), generando un thread Java
@Override
public void init(final ServletConfig config) throws ServletException {
sharedCounter = 0;
2 Dopo l’inizializzazione, la servlet }
può servire le richieste dei client
@Override
In particolare, quando il container protected void service(HttpServletRequest req, HttpServletResponse res)
riceve una richiesta per una certa throws ServletException, IOException {
int localCounter;
servlet, invoca il metodo synchronized (sharedCounter) {
sharedCounter++;
service() della servlet che si localCounter = sharedCounter;
occupa di processare la richiesta e }
[Link]("text/html");
formulare una risposta [Link]().write("<body>Pagina visitata " + localCounter +
3 Il container può rimuovere la " volte</body>");
}
servlet dall’esecuzione con il }
metodo destroy()
Antonio Ferrara | Fondamenti del Web (Ingegneria del Software e Fondamenti Web)
Delivery di
contenuti dinamici
Java Server Pages
Le Java Server Pages permettono di evitare la scrittura di codice HTML all’interno delle classi servlet e di inserire, invece,
istruzioni Java all’interno di pagine HTML
Non è necessario, comunque, includere tutta la logica dell’applicazione nella pagina, ma è possibile referenziare componenti
esterni, aiutando a separare la logica dalla presentazione e favorendo il riuso dei componenti
Antonio Ferrara | Fondamenti del Web (Ingegneria del Software e Fondamenti Web)
Delivery di
contenuti dinamici
Web framework
Mescolare blocchi di script con formattazione della pagina
rappresenta un’importante violazione del principio di
separazione della logica dalla presentazione
Tale violazione genera numerosi problemi nella manutenzione del
codice, nel riuso, nella responsabilità e nella produttività degli
sviluppatori
L’idea è quella di “distinguere la mappa dal territorio”, cioè separare un
territorio reale dalla sua rappresentazione (che può essere una mappa
stampata, online, o delle indicazioni vocali)
Una tale complessa interazione fra componenti è stata resa possibile dalla diffusione di web framework che supportano lo
sviluppo di applicazioni web permettendo ai progetti di prendere tale forma in maniera “naturale”, senza forzare la compresenza
di funzionalità diverse nello stesso componente
}
}
}
libertà di utilizzare qualunque pattern
Il framework controlla il flusso del programma e permette PHP-based Ruby-based Java-based
agli sviluppatori di agganciarsi in tale flusso esponendo
diversi eventi
Un framework offre, solitamente, funzionalità di URL mapping, accesso al
}
}
}
database, caching, autenticazione, sicurezza, etc.
Alcuni microframework, come Flask e Express, offrono un set più limitato di funzionalità, Python-based Microframework JS-based
generalmente legate alla facilitazione della gestione di richieste HTTP
Express, in particolare, offre la possibilità di agganciare dei middleware prima e dopo ogni
richiesta HTTP per realizzare qualunque tipo di funzionalità
Antonio Ferrara | Fondamenti del Web (Ingegneria del Software e Fondamenti Web)
Altre
funzionalità
Caching
I web browser/proxy tendono a fare caching delle risorse ricevute per evitare di ripetere richieste
Tale meccanismo deve essere supportato dal server che deve implementare la gestione delle politiche di caching sulle
risorse inviate e la validazione delle risorse memorizzate dai client/proxy
Per ridurre l’overload, inoltre, i server possono implementare meccanismi server-side di accesso più veloce a file richiesti
frequentemente
I file generati dinamicamente possono anche essere oggetto di caching (se non aggiornati frequentemente) per essere
serviti a più utenti senza essere ogni volta rigenerati
Quasi sempre, il caching server-side viene effettuato per mezzo di server esterni (ad esempio, reverse proxy) per non
competere con le risorse del server
Alcune situazioni possono sovraccaricare un server: eccesso di traffico legittimo, attacchi DoS, bot, ritardi nella risposta
da parte di altri computer di back-end nella generazione di risposte dinamiche (creazione di code)
Le soluzioni più utilizzate, oltre il caching, sono firewall, meccanismi di gestione della banda e traffic shaping, uso di
diversi web server raggruppati dietro un load balancer, riduzione delle connessioni TCP mediante HTTP/2
Antonio Ferrara | Fondamenti del Web (Ingegneria del Software e Fondamenti Web)
Introduzione
ai web browser
Il browser rappresenta l’esempio più comune di client web (ma non
è l’unico)
Antonio Ferrara | Fondamenti del Web (Ingegneria del Software e Fondamenti Web)
Funzioni principali
di un web browser
Trasmissione di una richiesta Ricezione di una risposta
Antonio Ferrara | Fondamenti del Web (Ingegneria del Software e Fondamenti Web)
Caso di studio:
Google Chrome
Rendering engine di Chrome e Safari (WebKit)
Antonio Ferrara | Fondamenti del Web (Ingegneria del Software e Fondamenti Web)
Caso di studio:
Google Chrome
Rendering engine di Chrome e Safari (WebKit)
<html>
<head>
1
<meta …>
<link …>
</head>
<body>
<p>Hello, <span>web performance</span> students</p>
<div><img src=“…”></div>
</body>
</html>
3
body { font-size: 16px; }
p { font-weight: bold; }
span { color: red; }
p span { display: none; }
img { float: right; } 2
Antonio Ferrara | Fondamenti del Web (Ingegneria del Software e Fondamenti Web)
Caso di studio:
Google Chrome
Architettura multiprocessing
Antonio Ferrara | Fondamenti del Web (Ingegneria del Software e Fondamenti Web)