26.1 - Les différents logiciels serveurs
26.2 - Ecrire les procédures CGI sur le serveur
26.3 - L'option SSI
26.4 - La configuration du serveurLa sécurité
Le renvoi des pages sur un autre serveur http
Les alias
Les messages d'erreur26.5 - L'option imagemap
26.6 - Les fameux cookies
Dans le chapitre Ecrire sa page Web, nous avons vu comment écrire les pages html, avec la gestion des graphiques, des tableaux, et des procédures CGI.
Ce chapitre explicite comment installer cette page sur un serveur pour que tous puissent y accéder. Le serveur sera capable d'envoyer simultanément plusieurs pages html à plusieurs clients, il sera capable de prendre en compte les appels aux procédures CGI, il sera capable encore de filtrer les connectés et de tracer dans un fichier l'ensemble des connexions. Ces différentes options dépendront du matériel utilisé et du logiciel serveur que vous choisirez.
Il est bien évident qu'un serveur fonctionnant sur un Macintosh ou sous Windows sera moins puissant que son homologue s'exécutant sur un système Unix. Mais il est parfois intéressant de pouvoir faire fonctionner un serveur http sur un ordinateur personnel pour tester l'enchaînement de ses pages, les procédures CGI etc ...
En fonction du matériel utilisé, le serveur http sera biensûr différent en terme de nombre d'accès simultanés, en terme de protection et de contrôle.
Vous trouverez un article en anglais sur la page de Webcompare [http://webcompare.iworld.com] qui vous donnera les dernières informations au sujet des différents serveurs, freeware, shareware ou commerciaux.
La page de Yahoo
[http://www.yahoo.com/Computers_and_Internet/Internet/World_Wide_Web/HTTP/Servers/]
concernant les serveurs http renvoit ici encore sur les
meilleures ressources sur le sujet.
Nous nous bornerons ici à référencer un certain nombre de serveurs http dont nous donnons les abréviations suivantes pour plus de clarté dans la suite de l'exposé, les adresses des pages Web de ces serveurs sont également référencées dans cette liste. Il est évident que les pages Web de chacun des ces serveurs sont régies par le produit qu'elles présentent, et que ces pages s'évertuent à présenter les points forts de leur serveur.
Ces tableaux référencent les serveurs par le choix de fonctionnalités suivant :
Code | OS | Distribution | Access -lists | SSL | Interdiction Domaine | Interdiction IP | Couplage Base données | Mot de passe |
AL | U-NT-95 | CO | Oui | V2 | Oui | Oui | Non | Oui |
AM | Amiga | Fr | Non | Non | Non | Non | Non | Non |
AP | U-3.11 | Fr | Oui | Non | Oui | Oui | Non | Oui |
AS | U | CO | Oui | V2 | Oui | Oui | Non | Oui |
CB | NT-95 | CO | Oui | V2 | Oui | Oui | Oui | Oui |
CL | U-Mac | Fr | Oui | Non | Oui | Non | Oui | Oui |
CO | U | CO | Non | V2 | Non | Non | Non | Non |
DE | VMS | Fr | Oui | Non | Oui | Oui | Non | Oui |
EM | NT | Fr | Non | Non | Non | Non | Non | Non |
EN | VM | CO | Oui | Non | Pio | Oui | Non | Oui |
ES | NT | CO | Oui | Non | Oui | Oui | Non | Oui |
EU | NT | CO | Oui | V2 | Oui | Oui | Non | Oui |
EX | U-NT-95 | CO | Oui | Non | Oui | Oui | Non | Oui |
FN | NT-95 | Fr | Oui | Non | Non | Oui | Non | Oui |
FW | NT | CO | Oui | Non | Oui | Oui | Non | Oui |
GN | U/B | Fr | Non | Non | Oui | Oui | Non | Non |
GS | NT | CO | Oui | V2 | Oui | Oui | Oui | Oui |
GO | 3.11 | Fr | Oui | Non | Oui | Oui | Oui | Oui |
IC | U-NT-3.11-MVS | Fr | Oui | Non | Oui | Oui | Non | Oui |
IS | U-3.11 | Fr | Oui | V2 | Oui | Oui | Non | Oui |
HC | U-3.11-95-NT-Mac-VMS | Fr | Oui | Non | Non | Oui | Non | Oui |
HM | Mac | Fr | Oui | Non | Oui | Oui | Non | Oui |
JS | U-NT | CO | Oui | Oui | Oui | Non | Non | Oui |
MI | NT | Fr | Oui | V2 | Non | Oui | Oui | Oui |
MQ | Plate-forme | Distribution | Non | Non | Non | Non | Non | Non |
NC | U | Fr | Oui | Non | Oui | Oui | Non | Oui |
NM | 95-NT | CO | Oui | V2 | Oui | Oui | Non | Oui |
NP | NT | CO | Oui | Non | Non | Oui | Non | Non |
NR | Mac | Sh | Non | Non | Non | Non | Non | Non |
NS | U-NT | CO | Oui | V3 | Oui | Oui | Oui | Oui |
NT | U | CO | Oui | V3 | Oui | Oui | Oui | Oui |
OP | U-NT | CO | Oui | Non | Oui | Oui | Non | Oui |
OR | U-NT | CO | Oui | V2 | Oui | Oui | Oui | Oui |
OS | U-NT | CO | Oui | V2 | Oui | Oui | Non | Oui |
PV | NT-95-VMS-NW | CO | Oui | V2 | Oui | Oui | Non | Oui |
PX | Unix | Fr | Oui | Non | Oui | Oui | Non | Oui |
QW | NT-95-3.11 | CO | Oui | Non | Oui | Oui | Non | Oui |
R6 | VMS | Fr | Oui | Non | ?? | ?? | Non | ?? |
SI | U | CO | Oui | V3 | Oui | Oui | Non | Oui |
SN | NT-95 | CO | Oui | Non | Non | Oui | Oui | Oui |
SP | U | Fr | Oui | Non | Oui | Oui | Non | Oui |
SR | NT | CO | Oui | Non | Oui | Oui | Oui | Oui |
SS | NT | CO | Oui | V2 | Oui | Oui | Oui | Oui |
SU | U | Fr | Non | Non | Non | Non | Non | Non |
SW | NT | CO | Oui | Non | Non | Oui | Non | Oui |
TH | Unix | Fr | Oui | Non | Oui | Oui | Non | Oui |
TW | U | CO | Oui | Non | Oui | Oui | Oui | Oui |
W4 | AS400 | CO | Oui | Non | Oui | Oui | Oui | Oui |
WA | VM | Fr | Non | Non | Non | Non | Non | Oui |
WB | NT-95-3.11 | CO | Non | Non | Non | Non | Non | Non |
WC | NW | CO | Oui | Non | Non | Oui | Oui | Oui |
WH | 3.11-95 | Fr/CO | Oui | Non | Oui | Oui | Non | Oui |
WN | U | Fr | Oui | Non | Oui | Oui | Oui | Oui |
WS | NT-95-Mac | CO | Oui | V2 | Oui | Oui | Non | Oui |
WT | NT | CO | Oui | Non | Oui | Oui | Non | Non |
ZS | U | CO | Oui | V2 | Oui | Oui | Oui | Oui |
Ecrire des procédures CGI demande de connaître la programmation, cette activité est plutôt réservée à un public averti.
Le développement peut être en C, en Pascal, en Basic ou en tout autre langage informatique.
Il existe cependant un langage très riche et très adapté à la manipulation des fichiers, c'est le langage PERL.
Le langage PERL regroupe la puissance des langages C, Shell Script, awk, sed et grep. Ceci ne dira rien aux néophytes mais pour les connaisseurs du système UNIX, cela évoque les langages les plus puissants et les plus astucieux.
Le langage PERL fait l'objet de deux chapitres du présent guide :
L'introduction du premier explique comment créer une première procédure CGI simple.
Les procédures SSI (Server-Side Includes) servent à afficher des informations dynamiques aux clients. Par exemple, vous pouvez envoyer le nombre de clients qui ont visité la page.
Cette option n'est pas présente sur tous les serveurs notamment les serveurs freeware.
Ceci peut se vérifier aisément par le programme suivant inclus dans votre page html :
La date est :
<!--exec cmd='date' -->
Si votre serveur httpd accepte les SSI vous pouvez vous engager vers un programmation souple et rapide comme le montre le chapitre sur les SSI.
La sécurité d'un serveur http consiste à limiter l'accès du serveur à des clients suivant des critères tels que :
Les façons de faire changent d'un serveur à l'autre mais généralement on retrouve des similitudes dans les méthodes de déclaration.
Certains serveurs ne disposent pas d'option de contrôle d'accès. Il faut donc se référer au cas par cas à la documentation des serveurs http.
Il se peut que vous décidiez de changer votre page HTML de serveur http. Or ceci peut poser un problème si votre page est déclarée dans un grand nombre de sites; il est, en effet, impossible de connaître avec précision la liste des pages vous référençant.
La solution est prévue sur la plupart des serveurs http. Par exemple, sur le serveur NCSA, ceci se fait dans le fichier de configuration srm.conf à la rubrique redirection, en mettant le nouvel URL, comme le montre l'exemple suivant :
# ======================== # Aliasing and Redirection # ======================== # # Redirect allows you to tell clients about documents which used to exist in # your server's namespace, but do not anymore. This allows you to tell the # clients where to look for the relocated document. # # Format: Redirect fakename url #
Imaginez que votre home page s'apelle http://www.imaginet.fr/~gmaire/toc.htm et que cela ne vous parait pas très facile à retenir pour vos lecteurs. Vous pouvez demander à votre gestionnaire de site de changer cette adresse pour un alias plus convivial, par exemple http://www.imaginet.fr/ime.
Ceci se fait dans le fichier de configuration srm.conf, dans la rubrique Aliasing. comme le montre la séquence suivante :
# Aliases: Add here as many aliases as you need, up to 20. One useful # alias to have is one for the path to the icons used for the server- # generated directory indexes. The paths given below in the AddIcon # statements are relative. # # Format: Alias fakename realname # Alias /ime/ /~gmaire/manuel.htm
Les messages d'erreur sont normalisés sur les serveurs http dans la mesure où ils sont numér
Regardons ces messages d'erreur :
Numéro de message | Signification |
301 | Le document a été déplacé de façon permanente |
302 | Le document a été déplacé de façon temporaire |
304 | Le document n'a pas été modifié, il est donc possible d'utiliser la copie du cache Netscape ou d'un proxy serveur |
400 | L'adresse du document contient une erreur de syntaxe |
401 | Vous n'êtes pas autorisé à accéder au document |
402 | L'accès au document est soumis à un paiement |
403 | Vous êtes interdit d'accès sur le serveur |
404 | L'URL demandée est valide mais n'est pas sur le serveur |
405 | La méthode de requête du formulaire n'est pas autorisée |
406 | La requête n'est pas acceptée par le serveur |
407 | Une autorisation proxy est nécessaire |
408 | Le temps d'attente pour accéder à la page demandée a expiré |
500 | Une erreur interne du serveur est survenue |
501 | Une requête faite au serveur n'est pas supportée par celui-ci |
502 | Mauvaise passerelle d'accès |
503 | Service non disponible |
504 | Temps d'accès à la passerelle d'accès expiré |
L'option Imagemap permet lorsqu'une image cliquable est utilisée, de déterminer les actions à effectuer selon la région désignée.
Généralement l'option est contenue dans le fichier imagemap.conf sur le serveur http avec l'ensemble des fichiers de configuration. Ce fichier contient des lignes de la forme :
carte : /directory/.../.../carte.map .
Ceci sera appelé dans la page html par la séquence :
<A
href="/imagemap/carte">
<img src=arte.gif ismap>
</A>
Où carte représente un fichier image à cliquer. On peut avoir autant de lignes que de cartes à cliquer. Pour chaque carte on retrouvera dans le fichier carte.map correspondant, un ensemble de lignes du genre :
#par defaut on appelle le programme
prog1 (il y a bien un espace entre defaut et /demo)
default /demo/prog1.htm
#Les cercles sont définis par le centre et par le rayon, on
appellera alors prog2 :
circle /demo/prog2.htm 50,50 50,10
# Les rectangles sont définis par les coins opposés :
rect /demo/prog3.htm 130,10 170,90
# Les polynômes sont définis par un ensemble de points
poly /demo/prog4.htm 250,10 210,90 290,90
Ainsi un menu comprenant une carte sera défini avec plusieurs rectangles :
default /ismap/cit/no_image.html
rect /ismap/prog1.html 382,262 390,271
rect /ismap/prog2.html 373,394 383,406
rect /ismap/prog3.html 472,324 483,336
Pour trouver les coordonnées des rectangles ou des polynômes, il suffit de promener la souris sur la carte dans un bon lecteur de Web. Vous verrez le champ adresse de l'URL donner les informations sous la forme /cgi/procedure?x,y et il vous suffira alors de noter ces valeurs.
Ceci peut se voir par exemple sur la carte de France france.htm bien que la procédure appelée soit un programme Perl et non pas un imagemap
Deux connexions consécutives depuis un même client sont indépendantes au vu du protocole HTTP, c'est à dire qu'elles sont vues comme deux connexions totalement indépendantes, ceci n'est pas pratique, puisque le programme CGI sur le serveur, ne peut pas garder le contexte notamment dans le cadre d'applications plus complexes que la simple consultation de base de données. Notons qu'il existe plusieurs moyens classiques de contourner le problème :
Le serveur HTTP envoi les cookies dans l'entête HTTP au client. Ces cookies contiennent les différents descriptifs accompagnant les URL visitées, ces cookies sont conservées sur votre disque dur en vue d'être exploité lors d'une prochaine connexion.
Sur votre équipement, vous pouvez consulter le fichier cookie dans le dossier Netscape, program; il se trouve dans le fichier cookies.txt et il est lisible par un éditeur de texte. Ceci est une première chose à savoir, car il devient facile d'analyser quelles sont les URL que vous visitez (si ces URL contiennent des Cookies et que votre navigateur est activé pour les recevoir).
Regardons la structure du fichier cookie par l'analyse d'une ligne du fichier cookie :
.scarabee.com TRUE / FALSE 942195540 LANG_scarabee
Nous savons déjà que le navigateur a interrogé une adresse contenant .scarabee.com, probablement www.scarabee.com et la suite nous montrera les informations qui seront conservées au sujet de ce site par le navigateur.
Les cookies sont stockés sur le client dans un fichier cookies.txt, ces cookies peuvent être utilisés par un CGI, ou par JavaScript en utilisant l'une des propriétés de l'objet document.
Un programme CGI utilise les cookies en ajoutant des informations dans l'entete HTTP sous la syntaxe suivante :
Set-Cookie: NOM=valeur [;EXPIRES=date] [;DOMAIN=nom_de_domaine][;PATH=chemin][;SECURE]
Les différents paramètres sont utilisés comme suit :
Lorsque le cookie est envoyé par le serveur, le navigateur consulte sa liste des cookies et compare la liste des domaines et celle du domaine de l'URL consulté.
La correspondance est faite uniquement sur la fin de l'URL, c'est à dire en comprenant l'extension de domaine (.com, .fr, .edu) et le nom précédent. Ainsi www.imaginet.fr sera sauvegardé avec l'identifiant DOMAIN imaginet.fr, mais le cookie du site www.imaginet.digipresse.fr sera enregistré avec l'identifiant DOMAIN digipresse.fr, alors que www.mail.imaginet.fr sera enregistré avec l'identifiant DOMAIN imaginet.fr.
La variable PATH quant à elle spécifie le chemin valide pour le cookie. Pour PATH=/ime avec DOMAIN=imaginet.fr,
l'enregistrement du COOKIE se fera pour /ime mais aussi pour /imediat ou pour /ime/toc.htm
Ainsi, lors de la consultation d'une URL correspondant au nom de domaine et au chemin, le navigateur, va envoyer la liste des variables sauvegardées sur votre disque dur.
Pour détruite un cookie, depuis le serveur, il suffit d'envoyer une variable avec une date d'expiration déjà expirée.
Les navigateurs peuvent sauver aujourd'hui 300 cookies, sachant que chacun d'eux peut contenir 4 Ko d'information. Il existe une limite de 20 cookies par domaine. Si ces limites sont atteintes, le navigateur détruit les cookies avec la date d'expiration les plus récentes.
Un navigateur envoi une requête à un serveur HTTP et reçoit dans l'entête HTTP du document la réponse
Set-Cookie: VISITEUR=gilles ; path=/; expires=Wednesday, 09-Nov-99 23:12:40 GMT
Ce cookie est sauvé sur le fichier cookie.txt et lorsque le client fait une requête sur le même serveur avec le chemin / il envoie au serveur le message suivant :
Cookie: VISITEUR=gilles
Puis il peut recevoir un autre cookie de ce serveur par exemple :
Set-Cookie: CATEGORIE=Prospect; path=/
A ce moment l'information cookie relative à l'URL devient
Cookie: VISITEUR=gilles; CATEGORIE=Prospect
Puis dans la même URL, si toujours avec le même navigateur, je décide d'acheter un produit le cookie suivant peut m'être envoyé :
Set-Cookie: CATEGORIE=Client; path=/
Ainsi le navigateur est identifié par le fichier cookie avec l'information suivante :
Cookie: VISITEUR=gilles; CATEGORIE=Client