Mardi 13 Mai 2008
~ VI. La détection et la modification des liens ~
Menu
> Accueil

Programmation
> Algorithmes de tri
> Java

Réseaux Telecom
> Logiciel Vigie

Dossiers
> Trajectoire de comètes
> Gestion d'emploi du temps
> Tracking d'internautes
> Référencement
> Open Office
> Multi-agents dans les EIAH

Divers
> Album Photo
> Citations
> Recettes
> Bibliothèque
> Logiciels
> Mini-Annuaire

A propos
> Mon CV
> Me contacter
Recherche
Google
Sur ce site
Sur le web
Annonces
Accueil > Tracking d'internautes > La détection et la modification des liens
sommaire
precedent accueil suivant

1. Introduction

Pour modifier les liens, il faut tout d'abord les détecter, puis une classe permet de calculer les URL absolues en suivant le procédé décrit ci dessus.

La détection des liens pose cependant de nombreux problèmes. Cette section se propose de présenter de manière la plus exhaustive possible la problématique de détection des liens. La stratégie utilisée pour en détecter une grande partie sera ensuite exposée.

2. Présentation des langages utilisés sur Internet

Le langage à balise de mise en page HTML - HyperText Markup Language - est aujourd'hui le langage le plus utilisé pour la diffusion d'informations sur Internet. C'est un langage très souple, qui offre de grandes libertés au programmeur qui peut y faire " à peu près n'importe quoi " (ou presque).

Ce langage s'est enrichi, depuis l'explosion de l'Internet " grand public " et du nombre de médias diffusés sur la toile, d'une multitude de langages : DHTML, XML, JavaScript, VBScript, CSS, Flash, applets Java et bien d'autres...

Ces langages ne sont, de plus, pas gérés par tous les navigateurs et tous les navigateurs ne les traitent pas forcément de la même manière. L'anarchie et l'interdépendance qui règnent parfois dans ces langages ne facilitent pas la tâche du programmeur et il est de plus en plus difficile d'interpréter correctement les pages diffusées sur Internet.

Il faut noter que la concurrence entre les deux leaders Netscape et Microsoft Internet Explorer a contribué, et contribue encore, à amplifier ce phénomène.


Tout ceci entraîne le fait qu'il est très difficile, voire impossible, d'exécuter et surtout, comme c'est le cas dans ce projet, d'interpréter pour les modifier, l'ensemble des langages utilisés sur la toile.

3. Tour d'horizon des liens existant sur Internet

Cette section se propose de lister une grande partie des types de liens qu'il faudrait pouvoir prendre en compte pour être exhaustif.

a. Les liens liés au langage HTML

Il existe tout d'abord les liens hypertexte : quand l'utilisateur clique sur ce type de lien, une requête est lancée afin de récupérer une nouvelle ressource.

Ce sont des balises du type :

<a href="http://www.exemple.com/index.html">

Tous ces liens devront repasser par le serveur, à l'exception des liens qui ne pourrons de toute façon pas être traités. Comme par exemple les fichiers compressés -" .zip ", " .rar "...- les fichiers " .pdf ", les fichiers images " .jpg ", " .gif "...bref, toutes les ressources qui ne sont pas au format HTML.


Il existe ensuite des balises beaucoup plus transparentes pour l'utilisateur : les liens vers d'autres ressources telles que des images, de la musique...

<img src="http://www.exemple.com/image.gif">
<bgsound src="http://www.exemple.com/musique.mid">
<body background="http://www.exemple.com/image.jpg">

L'ensemble de ces balises ne doit donc pas être redirigé vers le serveur.


Il existe également des pages composées de cadres comportant plusieurs pages HTML : c'est le cas des " frames " où chaque composante devra être redirigée vers le serveur.


De plus certaines parties des pages ne doivent pas être interprétées, comme par exemple les parties comprises entre les balises <xmp> et </xmp>

b. Les liens liés à d'autres langages

Une page HTML peut comporter d'autres types de langages appelés langages Scripts. Il en existe deux principaux :

Le JavaScript, largement répandu, popularisé par Netscape et pris en charge par la plupart des navigateurs.

Le VBScript, pris en charge uniquement par Internet Explorer, résultat d'une tentative avortée de Microsoft de contrer le développement du JavaScript.


Ces deux langages permettent de créer des effets impossibles à réaliser en HTML pur. Les lignes de code de ces langages peuvent contenir des liens, mais il est très difficile de les prendre en compte car il faudrait, dans ce cas, interpréter leur construction. En effet, il est fort compliqué de reconstituer ou de modifier des URL qui sont souvent construites par morceaux éparpillés.

Seuls quelques liens peuvent être facilement pris en charge. Comme ceux du type :

Window.open('http://www.exemple.com/index.html')

Les pages HTML utilisent également désormais des feuilles de style pour faciliter leur mise en page. Ce sont des fichiers " .css " rattachés à une page ou à un groupe de pages. Les liens contenus dans ces pages peuvent être absolus ou relatifs. S'ils sont absolus, cela ne pose aucun problème. S'ils sont relatifs, ils sont interprétés différemment suivant le type de navigateur utilisé par l'internaute. Sous Internet Explorer, ce lien est relatif au répertoire dans lequel se trouve la feuille " .css ", tandis que sous Netscape, ce lien est relatif au répertoire où se trouve la page en cours (tout se passe comme si les spécifications de style étaient contenues dans l'en-tête de la page).


Les pages HTML intègrent parfois dans leurs en-têtes des balises spéciales permettant de donner des informations générales sur le contenu et l'auteur de la page. Ce sont les balises " META ". L'une de ces balises permet, entre autre, d'effectuer une redirection de l'utilisateur vers une autre ressource. Cette balise " META " contient donc une URL qu'il faut aussi modifier.


c. Les liens impossibles à traiter

Ce sont les liens contenus dans des ressources qui ne peuvent être interprétées ou dans des ressources au format propriétaire. C'est le cas par exemple des liens contenus dans les fichiers PDF - Portable Document Format - et les fichiers " .doc ".

C'est également le cas des liens inclus dans des pages écrites en Flash et ceux contenus dans des applets Java. Pour ces deux types de ressources, il faudrait pouvoir interpréter le code compilé pour le modifier, ce qui reste une tache relativement ardue.


Il existe également un grand nombre de liens dont la ressource sera à jamais perdue. C'est le cas, par exemple, des anciens liens des " compteurs " de l'hébergeur Multimania qui étaient des balises images, générées par un programme CGI, sans adresse absolue valide. Dans ce cas, c'est le serveur qui envoie la ressource sans que le navigateur n'en fasse la demande.


d. Les liens liés à des formulaires

La difficulté ici est de transmettre les informations contenues dans le formulaire, sans les corrompre, au programme CGI ou au servlet qui va les traiter. Il faut, de plus, que la méthode d'expédition - GET ou POST - soit bien respectée.


Les liens liés à ces formulaires ne sont pas sans poser quelques problèmes qui sont parfois difficilement surmontables. En effet, certains serveurs vérifient la provenance des formulaires qui leur sont envoyés. C'est le cas pour l'hébergeur " Free " dont le programme CGI vérifie que le formulaire qui lui arrive à bien été généré à partir d'un site appartenant à l'un de ses abonnés. Dans le cas contraire, la validation du formulaire est rejetée. C'est le cas, entre autre, lorsque l'URL à été redirigée.


e. Les liens à ne pas modifier


Il faut veiller à ne pas altérer les liens internes à une page, c'est à dire les liens faisant référence à un label. Ces liens se détectent facilement puisqu'ils sont précédés du symbole " # ".


Il existe aussi des liens faisant référence à une adresse électronique qui lancent l'exécution du client mail de l'internaute. Ce sont des liens du type :

<a href="mailto:identifiant@domaine.extension">

Ce type de lien peut également être utilisé pour expédier le contenu d'un formulaire sans avoir recours à un programme coté serveur.

4. Comment s'effectue la détection des liens ?

La détection des liens s'effectue balise par balise. Cela se justifie par le fait qu'à chaque type de balise correspondent des attributs et des comportements dans la redirection des liens différents.

Une recherche sur les différentes balises susceptibles de contenir des liens est alors effectuée. Lorsque l'une d'entre elles est trouvée, l'ensemble de ses attributs est analysé et modifié en conséquence.


Exemple :


Soit la page minimaliste suivante : <http://www.exemple.com/index.html>

<head> <title>Exemple</title> </head> <body> <h1 align="center">Exemple</h1> <a href="page.html">cliquez-ici</a> <img src="logo.jpg"> </body>

Elle contient les balises <body>, <a> et <img>.


L'ensemble des balises avec leurs attributs est alors récupéré :

<a href="page.html">
<body background="illustration/fond.gif">
<img src="logo.jpg">

Les adresses sont alors extraites et transformées suivant qu'elles doivent ou non repasser par le serveur. Dans cet exemple, elles sont remplacées par les adresses suivantes :

http://pc-grit12:8080/servlet/Projet/http:%2F%2Fwww.exemple.com%2Fpage.html
http://www.exemple.com/illustration/fond.gif
http://www.exemple.com/logo.jpg

Les balises sont facilement détectées grâce au fait que les symboles " < " et " > " sont proscrits dans les pages HTML ( ils sont écrits plutôt &lt; et &gt; ).

Les attributs des balises - comme " src " et " href " - prennent pour valeur la chaîne de caractère qui suit le signe " = ". Si ce signe est suivi d'une apostrophe ou d'un guillemet, la chaîne se termine par ce même caractère. S'il s'agit d'un autre caractère, il fait lui-même parti de la chaîne et c'est le premier espace qui fera office de caractère de fin de chaîne.


Exemple : différentes manières d'écrire un attribut :

<a href="exemple.html"> --> exemple.html
<a href='exemple.html'> --> exemple.html
<a href=exemple.html> --> exemple.html
<a href="l'exemple.html"> --> l'exemple.html
<a href="exemple 2.html"> --> exemple 2.html
<a href=exemple 2.html> --> exemple

Remarque : si la possibilité de mettre des espaces dans les arguments des attributs ne présente aucun intérêt pour des URL, cela est beaucoup plus utile pour les attributs du type " alt " dans les balises " img " qui permettent de remplacer une image manquante par du texte.

5. Les liens pris en charges par le servlet

Au moment de la rédaction de ce rapport, le servlet prenait en charge la majeure partie des spécificités du langage HTML pur, y compris la non-interprétation des balises " xmp ". Les formulaires ne sont cependant pas encore pris en compte.


Le servlet redirige également les feuilles de style (fichiers " .css ") et modifie les liens qu'elles contiennent. Les URL absolues sont alors calculées par rapport à l'endroit où se trouve la feuille de style ; ce qui est conforme à l'interprétation que fait Internet Explorer des liens contenus dans ce type de fichiers, mais est incorrect au sens de l'interprétation qu'en fait Netscape.

sommaire
precedent accueil suivant
Accueil > Tracking d'internautes > La détection et la modification des liens