Avant toute chose, qu'est-ce qu'une erreur HTTP ... ? Exemple simple :
que faire si un internaute tente de visiter une page de votre site, mais que
cette page a été supprimée ? Le
protocole HTTP est utilisé pour le transfert de fichiers sur internet
(pages HTML par exemple) localisés grâce à une chaîne
de caractères (appelée URL). Lorsqu'un internaute tente d'accéder
à un fichier, il envoie une requête au serveur (hébergeant
le fichier) :
Si tout se déroule bien, la page ou le fichier sont renvoyés
au navigateur. Dans le cas contraire, le serveur renvoie un code
de réponse, constitué de trois chiffres. Plutôt que
de s'attarder sur le fonctionnement des echanges, qui n'a pas grand intérêt
pour la conception d'un site, nous nous intéresserons ici à la
gestion de ces erreurs.
La gestion des erreurs HTTP
Sur Apache, la manière la plus simple de gérer ces
erreurs est d'utiliser un fichier .htaccess . Simple et rapide à
mettre en place... un seul fichier permet de gérer les principales erreurs
que vous pourrez rencontrer. Exemple simple : que se passe-t-il si un
internaute tente de visiter une page de votre site, mais que cette page a été
supprimée ?
Le serveur va renvoyer l'erreur "introuvable". Le code
de cette erreur est 404 (les codes des erreurs seront étudiés
ci-dessous). On va donc demander au serveur de rediriger l'internaute vers une
autre page : pour commencer, créez un fichier texte et nommez le .htaccess.
Insérez y cette simple ligne :
ErrorDocument404/erreur.php
Enregistrez ce fichier et placez le à la racine de votre
site. A chaque erreur404
, les internautes seront redirigés vers la page /erreur.php. Bien
sûr, créer une simple page "erreur" n'est pas
la meilleure solution ! A titre personnel, je vous conseille de rediriger les
internautes vers la page d'accueil (ou mieux la page d'accueil de la rubrique
concernée le cas echéant) en passant une variable à cette
page, qui indiquera qu'il y a eu une erreur :
Cette fois ci, à chaque erreur 401, 403 ou
404, l'internaute sera redirigé vers la page d'accueil (index.php)
à laquelle on passe la variable "erreur", indiquant l'erreur
retournée. Il n'y a plus qu'à traiter l'erreur par script, en
utilisant par exemple PHP :
<?PHP
if ($erreur == "404") { // si erreur
404
echo (" ... "); // afficher un message
pour en avertir l'utilisateur... et s'en excuser
}
?>
/* Bien sûr, l'intérêt de repérer
les erreurs ne s'arrête pas à avertir le visiteur (qui de
toute façon l'aurait bien remarqué) : le but principal est
d'être averti soi-même de cette erreur (en tenant des stats,
pourquoi pas dans une base de données) afin de pouvoir y remédier
!
De plus, vous pouvez traiter cette erreur différemment selon l'urgence
: envoi d'un mail à l'admin, précisant l'erreur, l'URL de
la page... voire même un SMS ?! */
/* Si par exemple une page est manquante,
il faut soit la remettre en place, soit récupérer l'URL
de la page qui redirige vers cette page manquante pour en supprimer le
lien. Dans ce cas, utilisez ce code : */
<?PHP
if ($erreur!="") { // si il y a une
erreur (variable erreur non vide)
$referer = getenv('HTTP_REFERER'); // on récupère
l'URL de la page d'origine
$uri = $_SERVER['REQUEST_URI']; // on récupère
l'URL de la page cause de l'erreur
$ip_visiteur = $_SERVER['REMOTE_ADDR']; // on récupère
l'IP du visiteur (pour stats - facultatif)
$date = date('d/m/y',time()); // on récupère
la date de l'erreur (pour stats - facultatif)
$heure = date('h:m:s',time()); // on récupère
l'heure de l'erreur (pour stats - facultatif)
// On décide d'envoyer cette erreur par
mail : on prépare donc le contenu :
$contenu_mail = "
Erreur $erreur
Le $date à $heure
IP du visiteur : $ip_visiteur
Referer : $referer
URI : $uri ";
Remarque : chaque répertoire / sous répertoire
peut contenir son propre fichier htaccess, et donc gérer différemment
les erreurs.
Les codes d'erreur HTTP
- 20x : Réussite : ces codes indiquent
le bon déroulement de l'opération
- 30x : Redirection : ces codes indiquent que
la ressource n'est plus à l'emplacement indiqué
- 40x : Erreur dûe au client : ces codes
indiquent que la requête est incorrecte
- 50x : Erreur dûe au serveur : ces codes
indiquent qu'il y a eu une erreur interne du serveur
Code
Message
Description
200
OK
La requête a été accomplie correctement.
201
CREATED
Elle indique la réussite d'une commande POST.
202
ACCEPTED
La requête a été acceptée, mais la procédure
qui suit n'a pas été accomplie.
203
PARTIAL INFORMATION
Indique que la réponse à une commande GET n'est pas complète.
204
NO RESPONSE
Le serveur a reçu la requête mais il n'y a pas d'information
a renvoyer.
205
RESET CONTENT
Le serveur indique au navigateur de supprimer le contenu des champs d'un
formulaire.
205
PARTIAL CONTENT
Il s'agit d'une réponse à une requête comportant l'en-tête
range. Le serveur doit indiquer l'en-tête content-Range.
301
MOVED
Les données demandées ont été transférées
a une nouvelle adresse.
302
FOUND
Les données demandées sont à une nouvelle URL, mais
ont cependant peut-être été déplacées
depuis.
303
MEtdOD
Cela implique que le client doit essayer une nouvelle adresse, en essayant
de préférence une autre métdode que GET
304
NOT MODIFIED
Code renvoyé lorsque le client a effectué une commande GET
conditionnelle (en demandant si le document a été modifié
depuis la dernière fois) et que le document n'a pas été
modifié.
400
BAD REQUEST
La syntaxe de la requête est mal formulée ou est impossible
à satisfaire.
401
UNAUTORIZED
Le client doit reformuler sa requête avec les bonnes données
d'autorisation.
402
PAYMENT REQUIRED
Le client doit reformuler sa demande avec les bonnes données de
paiement.
403
FORBIDDEN
Accès interdit à la ressource.
404
NOT FOUND
Erreur classique, le serveur n'a rien trouvé à l'adresse
spécifiée. Page supprimée, erreur dans le lien...
500
INTERNAL ERROR
Le serveur a rencontré une condition inattendue qui l'a empéché
de donner suite à la demande.
501
NOT IMPLEMENTED
Le serveur ne supporte pas le service demandé.
502
BAD GATEWAY
Le serveur a reçu une réponse invalide de la part du serveur
auquel il essayait d'accéder en agissant comme une passerelle ou
un proxy.
503
SERVICE UNAVAILABLE
Le serveur ne peut pas répondre à cet instant.
504
GATEWAY TIMEOUT
La réponse du serveur a été trop longue, l'opération
est annulée.