Forums | Contact | Plan du site Menu Accueil » Création de site

Gestion des erreurs HTTP

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 :

ErrorDocument 404 /erreur.php

  Enregistrez ce fichier et placez le à la racine de votre site. A chaque erreur 404 , 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 :

ErrorDocument 404 /index.php?erreur=404
ErrorDocument 403 /index.php?erreur=403
ErrorDocument 401 /index.php?erreur=401

  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 ";

mail("mail@site.com","$date : erreur $erreur",$contenu_mail,"From:erreurs@$erreur.site");

?>

 

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.

 


Une question ? Venez échanger sur le forum...
Nom :
Sujet :
 

© Cédric MICHEL - conseil & création ( 2003 / 2019 )