Ogni sistema informativo che si rispetti ha un modulo dedicato alla gestione degli errori. Sebbene infatti gli sforzi dei programmatori siano volti ad assicurare una perfetta esecuzione del codice indipendentemente dagli scenari che si presentano, il verificarsi di una condizione inattesa è sempre possibile. Tale condizione va opportunamente gestita dal software affinché esso permanga in uno stato definito e sotto controllo. Pertanto, anche i software utilizzati per generare, servire e ricevere contenuti mediante il web sono progettati seguendo questo criterio.
Il protocollo HTTP, utilizzato da browser e server web per scambiare richieste e contenuti, prevede ad esempio una serie di messaggi utili per segnalare alla controparte la presenza di una condizione di errore. Il più famoso è forse l'errore HTTP 404, restituito da un server web qualora si richieda una risorsa (come ad esempio una pagina web) non disponibile.
I codici di errore HTTP permettono al browser di informare il proprio utente circa la condizione di errore. Tuttavia, un codice numerico non si presta ad una facile lettura, soprattutto per quegli utenti non particolarmente competenti in materia. Sì è pertanto deciso di accompagnare alla risposta HTTP con il codice di errore una pagina informativa che spieghi all'utente cosa succede e suggerisca come comportarsi.
Apache genera una semplice pagina per ogni errore HTTP 4xx o 5xx, indicando il codice di errore, la sua descrizione in lingua inglese e alcune informazioni sul web server (ad esempio, la versione di Apache, del sistema operativo, la porta TCP su cui è in ascolto il servizio, il nome di dominio, ecc).
Problemi delle risposte built-in
Sebbene le pagine di Apache siano più utili di un semplice codice numerico, il loro utilizzo è in genere sconsigliato per diversi motivi.
In primo luogo, esse rappresentano un potenziale problema di sicurezza in quanto possono offrire ad un attaccante delle informazioni sul web server. Ad esempio, è sufficiente richiedere una risorsa che sicuramente non è presente (ad esempio, http://mioserver.com/sonosicurochequestofilenonesiste.txt) per ottenere in risposta il numero di versione di Apache e del sistema operativo.
Inoltre, un messaggio di errore standard viene in genere percepito dall'utente come sintomo di grave malfunzionamento del sistema. Al contrario, restituire una pagina di errore formattata utilizzando la propria identità grafica (logo, colori, ecc) risulta meno traumatica, e comunica all'utente che sebbene il sistema abbia generato un errore, esso è sotto controllo. La pagina di errore poi può essere corredata di link utili o inviti a contattare il supporto tecnico mediante un apposito form.
Configurazione
Su Apache, la configurazione di messaggi o pagine di errore personalizzate è estremamente semplice ed avviene mediante un'unica direttiva: ErrorDocument. La sintassi della direttiva prevede due parametri: il codice di errore HTTP al quale fa riferimento, e l'"azione" ad esso associata. L'azione può essere di 2 tipi:
- un messaggio di testo, racchiuso tra doppi apici;
- un URL, interno o esterno, al quale si verrà reindirizzati.
Ad esempio, per personalizzare il messaggio di errore 404 si può usare:
ErrorDocument 404 "Spiacenti, la pagina richiesta non è disponibile"
La pratica comune prevede la creazione di una serie di pagine statiche da pubblicare insieme al resto del sito. Tali pagine sono escluse dalla sitemap e sono normalmente accessibili solo in caso di errore. Esse sono delle comuni pagine HTML e pertanto possono essere impaginate usando gli stessi elementi grafici del resto del sito. Ad esempio, supponendo che una pagina di errore sia disponibile all'URL /error_pages/404.html, si potrà configuare il server come segue:
ErrorDocument 404 /error_pages/404.html
Apache restituirà quella pagina invece del messaggio di errore standard nel caso in cui si verifichi un errore HTTP 404.