E' possibile dividere tutti i contenuti dinamici in un due grosse categorie:
- Client-Side
- Server-Side
La prima categoria si riferisce a tutti quei contenuti dinamici che vengono scaricati dal browser del client ed eseguiti dallo stesso come Javascript o applet Java.
La seconda si riferisce a pagine, scritte in linguaggi vari, che vengono processate dal server e vengono inviate al client come normali pagine html.
I Server Side Include possono apparire come normali pagina HTML al cui interno, identificate da opportuni tag, vegnono inserite delle istruzioni che generano un dato dinamico, calcolato sul momento.
Il modulo che gestisce i SSI è mod_include il quale esegue un vero e propio parsing del file er identificare il MIME Type grazie alle direttive AddHandler server-parsed e AddType application/x-server-parsed. L'abilitazione del modulo avviene tramitre la direttiva Options:
Options +Includes
oppure specificando una Directory o Location:
< Location /scripts>
Options +Includes
< /Location>
In seguito occorre specificare al server quale file dovrà interpretare come SSI:
AddType application/x-server-parsed .ssi
oppure
AddHandler server-parsed.ssi
Da notare che è possibile trattare i semplici file html come "contenitori" di comandi SSI, ovviamente questo implica che il server Apache eseguirà per ogni risorsa html richiesta un check per verificarne i contenuti prima di inviarla al client. Con la configurazione che segue, per esempio, vegnono considerate SSI anche pagine .html:
AddHandler server-parsed.ssi .html .htm
Caching dei contenuti SSI
Tramite l'header Last-Modified un proxy server può determinare se una risorsa si può considerare ancora valida per il caching o meno, ma per quanto riguarda tutte quelle risorse generate tramite un SSI questo header non viene inviato quindi il proxy server non terrà in cache a lungo la risorsa. Per ovviare a questo è possibile utilizzare i seguenti work-around:
- Direttiva XBitCrack
Permette di trattare tutte le risorse con MIME type uguale a text/html come SSI
Direttiva disabilitata, opzione di default:
XBitCrack off
Abilitazione della direttiva:
XBitCrack on
Direttiva abilitata ed con aggiunta dell'header Last-Modified per permettere il caching del server:
XBitCrack Full
- mod_expires
Tramite questo modulo è possibile aggiungere l'header Expires rendendo cacheabile un documento finchè la data inserita nell'header non sia oltrepassata.
- Scrivere un proprio server-side include parser.
IncludeNOEXEC è una direttiva identica a Includes, dunque gestita dal modulo mod_include, ma permette di includere file senza poter far eseguire comandi shell al loro interno.
Questa direttiva è molto utile quando si vuole mantenere la possibilità di creare pagine SSI senza la possibilità, molto pericolosa in termini di sicurezza, di eseguire comandi shell locali direttamente dalle pagine SSI.
Options IncludeNOEXEC
Tutti i comandi SSI sono inseriti nel codice html come commento, seguendo la seguente sintassi:
< !-- # commando parametro=valore parametro1=valore1 ... -- >
Se a lato server sono abilitati i SSI il contenuto dei tag di commento dell'HTML viene sotituito con l'output del comando, altrimenti il browser è come se ignorasse tutto il contenuto contenuto nei tag di commento.