Donné le : lundi 07/01/2002 (St Raymond),
A rendre au plus tard le : Vendredi 01/02/2002 (Ste Ella)
à 17h15 au secrétariat.
Site WebQuelques pistes
Serveur Web
Client Web
Protocole HTTP
Aspirateur de site
Les liens en HTMLLiens internesLes images dans les pages HTML
Liens locaux - chemins absolus - chemins relatifs
Liens externes
Format de l'interrogation du serveur par le client
Format de la réponse du serveur
Construction de l'arborescence
Récupération de la home page
Récupération des balises dans un fichier HTML
Analyse des URL et des liens
Structure de l'application
http://duo.iut.univ-aix.fr/~mathieu/index.html |
que l'on peut décomposer en :
http:// | nom du service (ou du protocole) utilisé. Ce protocole utilise lui-même TCP, donc fonctionne en mode connecté. |
duo.iut.univ-aix.fr | nom de la machine hôte |
/~mathieu/ | nom du répertoire racine du site, immédiatement placé sous la racine / du serveur |
index.html | nom de la home page |
Dans la pratique, le client commence par vérifier s'il n'a pas déjà stocké localement ce fichier, dans son répertoire cache. De plus, il arrive fréquemment que, pour des raisons de sécurité ou d'efficacité, le client passe par un serveur intermédiaire (proxy) qui se charge de faire la requête à sa place, de récupérer le résultat et de le lui renvoyer. Au passage, le serveur proxy peut très bien avoir lui-même ce fichier dans ses caches.
L'application cliente analyse le fichier reçu, l'affiche à l'écran, répertorie chaque fichier complémentaire de la page (en particulier les images), et, par une succession de requêtes identiques à la précédente, rapatrie l'ensemble, qu'il affiche au fur et à mesure. Il nécessite donc autant de connexions TCP qu'il y a de fichiers à rapatrier. Dans la version HTTP 1.1, une seule connexion permet le transfert de plusieurs fichiers, mais nous ne l'utiliserons pas dans le devoir pour des raisons de simplicité.
les liens, références locales à d'autres pages du site ou externes, vers d'autres sites. les références aux images à positionner dans la page.
<a href="#Sujet">Sujet : Aspirateur de site</a> |
L'affichage de la page HTML fait apparaître le texte : Sujet : Aspirateur de site
La référence interne a pour identificateur Sujet et se reconnaît par le caractère # qui la précède.
les liens internes ne correspondent pas à des fichiers, ils peuvent être ignorés par l'aspirateur de site.
<a href="http://www.gnu.org/software/libc/libc.html">The GNU C Library : site officiel </a> |
qui apparaît ainsi :
The GNU C Library : site officiel
En principe, ces liens désignant des fichiers externes au site, devraient pouvoir être ignorés par l'aspirateur. En réalité, ils peuvent référencer un fichier du site copié, comme par exemple :
<a href="http://duo.iut.univ-aix/fr/~mathieu/CoursInfo/Reseau2/Devoirs-Tests/Devoir01/Sujet.html">
Sujet du devoir de reseau </a> |
Dans ce cas les fichiers correspondants doivent être rapatriés.
Considérons les références suivantes :
<a href="Remarques.html">Remarques et complements</a>
<a href="../../../C++1/index.html">Sommaire du module C++</a> <a href="/~mathieu/index.html">Home page</a>
|
qui apparaissent ainsi au lecteur (les deux dernières lignes sont équivalentes) :
Le premier désigne un fichier dans le même répertoire que la page qui le référence. Le deuxième désigne un fichier qui est dans une branche adjacente de l'arborescence du fichier. Le troisième désigne un fichier qui est à la racine du site aspiré (si le site aspiré est ~mathieu).
Tous ces fichiers sont bien entendu à rapatrier.
Pour finir, on peut aussi trouver des références à des fichiers de sites différents, mais sur la même machine.
Soit les deux références suivantes :
href="/gif/picto.gif"
<a href="/~cpb/tp1.html/a> |
Si elles ont été trouvées dans une page de mon site, les fichiers correspondants ne doivent pas être aspirés. La première fait référence au fichier picto.gif du répertoire gif qui est lui-même à la racine du serveur (et non du site aspiré).
<img src="CielBleu.gif" height=150 width=150> |
<body background="FondCourant.gif"> |
ou (dans l'arborescence du client) :
<body background="file://C:/MonWeb/Images/MesFonds/MarbreGris.gif"> |
<table BACKGROUND="catline.gif"> |
<tr BACKGROUND="catline.gif"> |
<td BACKGROUND="catline.gif"> |
GET nom_du_fichier HTTP/1.0 |
suivie de deux fois la séquence (caractère "Fin de ligne" suivi du caractère "Retour Chariot") correspondant respectivement en C à '\r' et '\n'.
Le nom du fichier doit être l'adresse absolue du fichier (avec le chemin) à partir de la racine du serveur (et non du site). HTTP/1.0 indique la version du protocole utilisé.
HTTP/1.1 200 OK
Date: Sat, 22 Dec 2001 17:50:25 GMT Server: Apache/1.3.12 (Unix) (Red Hat/Linux) PHP/3.0.15 mod_perl/1.21 Last-Modified: Tue, 11 Dec 2001 07:10:08 GMT ETag: "19480e-a15-3c15b150" Accept-Ranges: bytes Content-Length: 2581 Connection: close Content-Type: text/html <HTML>^M
|
Tout l'entête peut être ignoré, à part la première ligne qui indique le protocole supporté par le serveur (ici HTTP 1.1), et surtout un compte rendu de l'opération sous la forme d'un code numérique : toute valeur entre 200 et 299 correspond à un succès, toute autre valeur traduit un échec. On connaît bien l'erreur : 404 not found !!!
De plus vous ne devriez pas recopier les fichiers mais seulement les créer vides, ou à la rigueur avec un petit contenu (par exemple seulement les balises contenant des liens vers d'autres fichiers du site). Si l'arborescence est correctement restituée, c'est que l'aspirateur fonctionne probablement correctement.
Vous pouvez réaliser cette partie indépendamment, par exemple en utilisant un fichier de travail dans lequel vous aurez indiqué quelques noms et chemins de fichiers.
Un fichier déjà chargé ne doit pas l'être de nouveau si un nouveau lien sur lui apparaît. Une solution provisoire consiste à vérifier si le fichier existe, mais elle est très lente. La meilleure solution est de conserver la liste complète des fichiers déjà téléchargés.
Il sera bon de se doter de petits outils permettant de manipuler ces liens : extraire les noms de fichiers, les chemins relatifs ou absolus, etc.
Le site représentant une arborescence, les identificateurs des répertoires et des fichiers doivent-ils être eux-mêmes stockés dans un arbre ?
Chaque fichier à rapatrier nécessitant une connexion, est-il souhaitable de paralléliser au maximum l'application,
De plus en plus de sites utilisent des "pages HTML dynamiques". Elles se diférencient des précédentes par le fait qu'elles sont partiellement ou totalement virtuelles : elles peuvent ne pas apparaître dans l'arborescence du site ! Lorsque le serveur reçoit d'un client la requête d'une telle page, il transmet cette requête à une application spécialisée. Celle-ci génère la page (souvent à partir d'informations stockées dans une base de données) et la renvoie au serveur (redirection de la sortie standard ...) qui la renvoie lui-même au client.
Ainsi, le client reçoit bien une page HTML classique, mais qui n'a qu'une durée de vie éphémère, et qui n'est pas stockée physiquement sur la machine hôte du serveur.
[2] En HTML, la casse (majuscules/minuscules) des balises n'a pas d'importance. Ainsi, les balises <br>, <bR>, <Br> et <BR> sont les mêmes. Cependant, lorsqu'elles contiennent certains identificateurs, la casse peut être importante. C'est en particulier le cas des chemins et noms de fichiers, qui auront à être communiqués au système d'exploitation.
© D. Mathieu mathieu@romarin.univ-aix.fr
I.U.T.d'Aix en Provence - Département Informatique