Nessun risultato. Prova con un altro termine.
Guide
Notizie
Software
Tutorial

Ottimizzare le prestazioni di IIS 6

Link copiato negli appunti

Nel presente articolo sono descritti due sistemi per ottimizzare le prestazioni di un sito web ospitato all'interno di un server web IIS6: la compressione HTTP e il "keep-alive" HTTP. L'utilizzo di queste due tecniche (definite all'inteno delle specifiche del protocollo HTTP 1.1) consente di migliorare la velocità di trasmissione delle pagine web, ridurre l'utilizzo della banda disponibile e diminuire il carico complessivo della CPU.

Compressione HTTP

La versione 1.1 del protocollo HTTP, tramite la RFC 2616, introduce il sistema di compressione che consente ad un server web di inviare ad un browser una risposta HTTP in formato compresso. Questa tecnologia richiede che il server web sia in grado di codificare il messaggio in uscita (con opportuno algoritmo di compressione) e che il browser sia in grado di decodificare, decomprimendolo, il contenuto del messaggio. Gli obiettivi della compressione HTTP sono principalmente due:

  • incrementare le performance della comunicazione, ottenendo pagine web che si caricano più velocemente e operazioni di download più veloci
  • ridurre il traffico di rete tra client e server web, con lo scopo di migliorare l'utilizzo della banda disponibile

In proposito può essere utile leggere le specifiche W3C del protocollo HTTP 1.1.

Requisiti

La compressione HTTP utilizza algoritmi standard di pubblico dominio per codificare files HTML, XML, Javascript, CSS ed altri formati. Poiché le specifiche sono contenute nella definizione del protocollo HTTP 1.1, tutti i browser moderni che supportano HTTP 1.1 sono in grado di decodificare contenuti compressi in modo completamente automatico: non è richiesta l'installazione di moduli aggiuntivi, né alcuna interazione con l'utente.

All'interno della richiesta HTTP il browser include le informazioni relative alla versione del protocollo HTTP supportata, ed il tipo di encoding accettato. Per esempio, una tipica richiesta HTTP può contenere le seguenti informazioni:

Esempio di richiesta HTTP

GET / HTTP/1.1
Accept: image/gif, image/x-xbitmap, image/jpeg, image/pjpeg
Accept-Language: it
Accept-Encoding: gzip, deflate
User-Agent: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1)
Host: www.html.it
Connection: Keep-Alive

Con la proprietà Accept-Encoding il browser dichiara di supportare i contenuti compressi tramite l'algoritmo gzip.

Dopo aver elaborato la richiesta del browser, il server web, se opportunamente configurato, può inviare la risposta in formato compresso. L'intestazione della risposta dichiara il tipo di encoding applicato. L'intestazione di una risposta HTTP può contenere le seguenti informazioni:

Esempio di risposta HTTP

HTTP/1.1 200 OK
Content-Type: text/html
Content-Encoding: gzip
Content-Length: 2610

in cui il server dichiara di aver trasmesso il corpo della risposta HTTP informato compresso utilizzando l'algoritmo gzip.

Il supporto per la compressione HTTP è stato inserito all'interno di IIS già a partire dalla versione 4.0 (Server NT). Tuttavia nelle versioni di IIS precedenti alla 6.0 il sistema di compressione ha sempre manifestato gravi malfunzionamenti. Soltanto con la versione 6.0 del server Web di Microsoft il supporto per la compressione HTTP funziona correttamente, anche se si segnala che esistono dei filtri ISAPI di terze parti che offorno caratteristiche superiori in termini di configurabilità e di efficienza.

Per quanto riguarda il supporto alla compressione per i browser, ecco un riepilogo delle caratteristiche principali:

Browser Compressione HTTP
Microsoft Internet Explorer Introdotta con la versione 4, la compressione HTTP funziona correttamente a partire dalla versione 5
Mozilla Firefox Supportata da tutte le versioni del browser
Nescape Navigator Pienamente supportata a partire dalla versione 6
Opera Supportata a partire dalla versione 5

Configurazione

È possibile abilitare la compressione HTTP a livello di server IIS, di sito web o di singola directory virtuale. Lo snap-in Gestione IIS consente di configurare la compressione HTTP solo a livello di server, tramite la finestra delle proprietà della cartella "Siti Web", scheda "Servizio".

Figura 1. Proprietà Siti Web (IE6.0)
Proprietà Siti Web (IE6.0)

Per configurare la compressione HTTP a livello di singolo sito web o directory virtuale è necessario utilizzare lo script adsutil.vbs da linea di comando. Dapprima occorre disabilitare la compressione globale, cioè quella definita a livello di server IIS.

Per esempio, il seguente comando abilita la compressione statica per la directory virtuale Docs:

adsutil set w3svc/1/root/Home/Docs/DoStaticCompression true

Si può scegliere se abilitare la compressione solo per i file statici oppure anche per i contenuti dinamici (chiamati "file applicazione"). L'impatto sulle prestazioni del server è significativamente diverso nei due casi. La compressione di un contenuto statico viene effettuata solo una volta (al momento della prima richiesta), quindi il file compresso viene memorizzato nella cache e riutilizzato per rispondere alle successive richieste.

L'elaborazione dinamica invece può influire in modo significativo sulle risorse della CPU in quanto la risposta dinamica viene generata e compressa ad ogni richiesta. Per valutare l'opportunità di abilitare la compressione HTTP per i contenuti dinamici si suggerisce di verificare l'andamento del contatore % Tempo processore (tramite il Monitor di Sistema). Se il valore si mantiene a lungo superiore ad 80%, conviene disabilitare la compressione dei contenuti dinamici, lasciando solo quella per i contenuti statici.

Quando si abilita la compressione dei contenuti statici, è possibile modificare il percorso della directory temporanea in cui IIS memorizza la copia cache dei files compressi. I file statici compressi vengono memorizzati in questa directory temporanea fino a quando non scadono oppure il relativo contenuto non viene modificato. La directory deve risiedere nell'unità locale di una partizione NTFS. La directory non può essere compressa né condivisa e gli elenchi di controllo accesso (ACL) per la directory devono includere l'accesso con controllo completo per l'identità del pool di applicazioni e per il gruppo IIS_WPG. È possibile limitare ad un valore massimo la dimensione della suddetta directory: raggiunta la dimensione disponibile, i contenuti meno recenti saranno automaticamente eliminati.

È inoltre possibile modificare le impostazioni di default relative ai tipi di file soggetti a compressione, indicando le corrispondenti estensioni. Questa configurazione richiede ancora di utilizzare lo script adsutil.vbs.

Benefici

In funzione del tipo di file, il tasso di compressione può raggiungere il valore di 90%. Parallelamente, l'utilizzo della banda può subire una riduzione di circa due terzi del valore precedente l'utilizzo della compressione, comportando un corrispondente risparmio di denaro per chi si avvale servizi di connettività a consumo.

Keep-alive HTTP

Il keep-alive HTTP abilita l'utilizzo di connessioni persistenti tra browser e server web. Per visualizzare una pagina web, un browser invia al server web numerose richieste HTTP (per esempio, una richiesta HTTP per ogni immagine contenuta nella pagina).

Il keep-alive HTTP consente di utilizzare la stessa connessione TCP per inviare/ricevere richieste/risposte HTTP multiple. Le connessioni persistenti incrementano notevolmente la velocità di trasmissione, e quindi di visualizzazione, delle pagine web.

Un ulteriore beneficio del keep-alive HTTP riguarda la riduzione del traffico di rete complessivo, eliminando il sovraccarico di pacchetti scambiati durante le fasi di apertura e chiusura di ciascuna connessione TCP.

Il keep-alive HTTP è stato introdotto con la versione 1.0 del protocollo HTTP. La versione 1.1 introduce una novità rilevante: la connessioni persistenti vengono adottate in modo predefinito. Pertanto, se non indicato diversamente, il browser assume che il server web manterrà aperta la connessione persistente, anche nel caso di risposte di errore. Tuttavia, il protocollo fornisce anche la possibilità di trasmettere (dal client al server o viceversa) un segnale di chiusura della connessione.

Ti consigliamo anche