Articles web

Nos articles concernant les techniques web sont centrés sur des solutions pratiques qui mettent en œuvre, le plus souvent, notre framework web : Vae Soli!

Des articles généraux sont également fournis dans le respect des standards du web.

Tous nos articles web sont disponibles sous le couvert de la licence Icône Creative Commons Creative Commons — Paternité - pas de modification.

Gérer les erreurs sur un site web (e.g. erreur 404)

web,erreur,404,403,500,…

2008-12-15 – 11:40

2000-12-16 – 20:00

2008-12-15 – 11:40

Ô, l'infâme erreur 404 ! Quiconque a utilisé le web en a un jour été pour ses frais à se trouver confronté à une page introuvable. Ce n'est pour autant pas la seule erreur du protocole HTTP !

Plusieurs autres erreurs que l'erreur 404 existent. En voici la liste en droite ligne de wikipedia, mais vous pouvez aussi vous conformer aux informations qui proviennent du {{{W3C}}} (HTTP 1.1 - Status Code Definitions) :

Codes d'erreur HTTP (source: Wikipedia)
Code d'erreur Message Description
4xx : Erreurs Client
400 Bad Request La syntaxe de la requête est erronée
401 Unauthorized Accès à la ressource refusé
402 Payment Required Paiement requis pour accéder à la ressource (non utilisé)
403 Forbidden Refus de traitement de la requête
404 Not Found Document non trouvé
405 Method Not Allowed Méthode de requête non autorisée
406 Not Acceptable Toutes les réponses possibles seront refusées.
407 Proxy Authentication Required Accès à la ressource autorisé par identification avec le proxy
408 Request Time-out Temps d'attente d'une réponse du serveur écoulé
409 Conflict La requête ne peut être traitée à l'état actuel
410 Gone La ressource est indisponible et aucune adresse de redirection n'est connue
411 Length Required La longueur de la requête n'a pas été précisée
412 Precondition Failed Préconditions envoyées par la requête non-vérifiées
413 Request Entity Too Large Traitement abandonné dû à une requête trop importante
414 Request-URI Too Long URI trop longue
415 Unsupported Media Type Format de requête non-supportée pour une méthode et une ressource données
416 Requested range unsatisfiable Champs d'en-tête de requête 'range' incorrect.
417 Expectation failed Comportement attendu et défini dans l'en-tête de la requête insatisfaisable
5xx : Erreurs Serveur
500 Internal Server Error Erreur interne du serveur
501 Not Implemented Fonctionnalité réclamée non supportée par le serveur
502 Bad Gateway Mauvaise réponse envoyée à un serveur intermédiaire par un autre serveur.
503 Service Unavailable Service indisponible
504 Gateway Time-out Temps d'attente d'une réponse d'un serveur à un serveur intermédiaire écoulé
505 HTTP Version not supported Version HTTP non gérée par le serveur
509 Bandwidth Limit Exceeded Code non officiel utilisé par de nombreux serveurs pour indiquer un dépassement de quota.

Lorsqu'une de ces erreurs se présente, le serveur Web, Apache dans notre cas, renvoie un code d'erreur et affiche une explication brève de l'erreur en question. Ces messages sont, pour le commun des mortels, un peu rustres mais il est tout à fait possible de configurer Apache pour qu'un message d'erreur personnalisé soit renvoyé au visiteur.

C'est le sens de la directive ErrorDocument à mettre en {{œ}}uvre dans le fichier de configuration, httpd.conf :


ErrorDocument code-erreur "document"

Voici d'ailleurs ce qu'il est prévu de faire dans le cas du site de Lato Sensu Management :

<VirtualHost localhost:80>
    ServerAdmin patrick.boens@latosensu.be
    DocumentRoot "c:\WebSites\latosensu.be\www\httpdocs"
    ServerName latosensu.be
    ServerAlias latosensu.be *.latosensu.be
    ErrorDocument 400 /errdocs/error.php?id=400
    ErrorDocument 401 /errdocs/error.php?id=401
    ErrorDocument 402 /errdocs/error.php?id=402
    ErrorDocument 403 /errdocs/error.php?id=403
    ErrorDocument 404 /errdocs/error.php?id=404
    ErrorDocument 405 /errdocs/error.php?id=405
    ErrorDocument 406 /errdocs/error.php?id=406
    ErrorDocument 407 /errdocs/error.php?id=407
    ErrorDocument 408 /errdocs/error.php?id=408
    ErrorDocument 409 /errdocs/error.php?id=409
    ErrorDocument 410 /errdocs/error.php?id=410
    ErrorDocument 411 /errdocs/error.php?id=411
    ErrorDocument 412 /errdocs/error.php?id=412
    ErrorDocument 413 /errdocs/error.php?id=413
    ErrorDocument 414 /errdocs/error.php?id=414
    ErrorDocument 415 /errdocs/error.php?id=415
    ErrorDocument 416 /errdocs/error.php?id=416
    ErrorDocument 417 /errdocs/error.php?id=417
    
    ErrorDocument 500 /errdocs/error.php?id=500
    ErrorDocument 501 /errdocs/error.php?id=501
    ErrorDocument 502 /errdocs/error.php?id=502
    ErrorDocument 503 /errdocs/error.php?id=503
    ErrorDocument 504 /errdocs/error.php?id=504
    ErrorDocument 505 /errdocs/error.php?id=505
    
    ErrorDocument 509 /errdocs/error.php?id=509
</VirtualHost>

Ce que cette configuration assure, c'est de lancer un script PHP, error.php, dans le cas où une erreur se présente sur le site. En paramètre, on envoit le numéro d'erreur pour une gestion plus fine de l'erreur. Voyez effectivement ec qui se passe en cas d'erreur 404 :


    ErrorDocument 404 /errdocs/error.php?id=404

... le script error.php, se trouvant dans le répertoire errdocs, est exécuté avec en paramètre le code d'erreur rencontrée : ?id=404.

Il est dès lors aisé, dans le script error.php de prendre toutes les mesures nécessaires pour faire face à l'erreur. Voyons d'ailleurs ce qu'il en est de manière plus précise en cas d'erreur 404 !

Fournir l'information souhaitée

Pour envisager une approche de traitement de l'erreur, il est utile de se mettre à la place du visiteur qui rencontre l'erreur. Au demeurant, cette personne est intéressée par une page qui contient l'information qu'il recherche, car c'est bien l'information qu'il convoite et non pas la page en tant que telle.

Il est donc essentiel, tant que faire se peut, de lui prodiguer l'information sollicitée et toute stratégie qui met cela en {{œ}}uvre est bienvenue.

Pour autant, il n'est pas toujours facile de déterminer ce que le visiteur cherche ! C'est là que le bât blesse, dit-on.

Il est en tout cas un cas auquel vous ne pouvez rien faire, ou si peu. C'est le cas où le visiteur a mentionné lui-même l'{{{URL}}} à atteindre dans la zone de navigation de son browser. Dans ce cas particulier, il n'y a qu'à lui suggérer de retaper l'URL ou alors de se diriger vers votre plan de site (sitemap). Ce genre d'erreur survient souvent d'un signet (bookmark) obsolète.

Si par contre, l'erreur provient par l'utilisation d'une ancre (balise <a>…</a>) alors deux approches différentes peuvent être mises en branle :

  1. Soit l'erreur provient de votre propre site, et alors il est urgent que vous répariez le problème.
  2. Soit l'erreur provient d'un site qui vous a référencé (un moteur de recherches par exemple) et là il conviendra de prendre contact avec le site en question pour l'inviter à corriger l'erreur.

Renseigner le visiteur

Traduire l'explication de l'erreur

Prévenir le webmaster

Corriger les erreurs provenant de sites extérieurs

Ajoutez un nouveau commentaire


(non affichée)





Machine de turing




(*) Zone obligatoire.

Évitez d'enfoncer le bouton “ Poster ” plus d'une fois. Le traitement de votre commentaire peut prendre quelques secondes sur le serveur avant que vous ne soyez averti de sa prise en compte.

Notes à propos des commentaires

Nous vous demandons de bien vouloir faire diligence et de respecter les règles les plus élémentaires de bienséance. Les commentaires non appropriés ou offensants pourront être édités voire supprimés.

Les adresses email que vous pourriez nous laisser ne sont JAMAIS affichées par mesure de confidentialité : elles ne nous servent qu'à vous contacter pour éclaircir un point ou l'autre si besoin était.

Notez bien que toutes les balises HTML sont retirées de votre commentaire néanmoins vous pouvez utiliser les marques suivantes pour vous aider à formater votre texte :

  • [p] et [/p] : paragraphe
  • [b] et [/b] : gras (bold)
  • [i] et [/i] : italique
  • [q] et [/q] : citation
  • [http] et [/http] : ancre
  • [pre] et [/pre] : texte préformaté
  • [code] et [/code] : code source

Merci