Rôle d’un serveur web
Tout le travail d’un serveur web consiste à traduire une URL soit en un nom de fichier qu’il enverra sur l’Internet, soit en un nom de programme qu’il exécutera et dont il enverra les résultats. C’est l’essentiel de sa tâche, le reste n’est que remplissage.
Lorsque vous lancez votre navigateur et que vous vous connectez sur une page d’accueil, par exemple http://www.butterthlies.com/ (site que nous reverrons plus tard), vous envoyez un message à travers l’Internet à l’intention de la machine portant ce nom. Cette machine, nous l’espérons, fonctionne, est connectée à l’Internet et est prête à recevoir et traiter votre message.
URL signifie Uniform Resource Locator (identifiant uniforme de ressource). Une URL comme http://www.butterthlies.com/ est divisée en trois parties :
< schéma >://< hôte >/< chemin >
Dans notre exemple, <schéma> est http, ce qui signifie que le navigateur utilisera le protocole HTTP ( Hypertext Transfer Protocol ) ; <hôte> est www.butterthlies.com et <chemin> est /, qui indique généralement la première page de l’hôte[*]. La partie <hôte> peut contenir une adresse IP ou un nom que le navigateur convertira en adresse IP. Avec HTTP 1.1, votre navigateur produirait la requête suivante pour cette URL :
* Comme une URL n’a pas de signification prédéfinie, il ne s’agit que d’une tradition, quoique bien établie dans le cas présent.
GET / HTTP/1.1
Host: www.butterthlies.com
Cette requête arriverait sur le port 80 (le port par défaut pour HTTP) de l’hôte www.butterthlies.com. Ce message est lui-même divisé en quatre parties :
- Une méthode (une méthode HTTP, pas une méthode d’URL), ici GET, mais qui pourrait être PUT, POST, DELETE, CONNECT, HEAD, OPTIONS ou TRACE .
- L’identificateur de la ressource, c’est-à-dire son URI ( Uniform Resource Identifier ).
- La version du protocole utilisé.
- Une suite d’en-têtes modifiant la requête (ici un en-tête Host, qui est utilisé par l’hébergement virtuel par nom décrit au chapitre 4).
C’est alors au serveur tournant sur cet hôte de traiter ce message.
La machine hôte pourrait être une grappe de super-calculateurs coûtant la fortune d’un émir du pétrole, ou un simple PC. Dans les deux cas, elle doit faire fonctionner un serveur web, c’est-à-dire un programme écoutant sur le réseau, recevant et traitant ce type de message.
Critères de choix d’un serveur web
Qu’attendons-nous d’un serveur web ? Il doit :
- Être rapide pour pouvoir traiter un grand nombre de requêtes en utilisant un minimum de ressources matérielles.
- Être multi-tâches pour pouvoir traiter plusieurs requêtes en même temps et pour que la personne qui s’en occupe puisse maintenir les données qu’il fournit sans avoir à interrompre le service. Le multi-tâches est difficile à mettre en place au sein d’un programme : la meilleure façon consiste à faire tourner le serveur sur un système d’exploitation multi-tâches.
- Authentifier les clients : certains peuvent avoir accès à plus de services que d’autres. Quand il s’agit de services payants, cette fonctionnalité devient essentielle (voir le chapitre 11).
- Répondre aux messages erronés qu’il reçoit par des messages pertinents. Si, par exemple, un client demande une page que le serveur ne peut pas trouver, il doit répondre par un message d’erreur « 404 », qui est défini par la spécification de HTTP et qui signifie que « la page demandée n’existe pas ».
- Négocier un style et une langue de réponse avec le client. Il doit, par exemple -- si les personnes responsables du serveur peuvent relever le défi -- être capable de répondre dans la langue qu’a choisi le client. Cette possibilité, bien sûr, permet d’augmenter le nombre de personnes que votre site est susceptible de toucher. De plus, il y a des endroits dans le monde où une réponse dans la mauvaise langue peut être malvenue.
- Reconnaître un grand nombre de formats. D’un point de vue plus technique, un utilisateur peut préférer des fichiers images JPEG plutôt que GIF, ou même TIFF. Il peut vouloir du texte au format DVI plutôt que PostScript.
- Pouvoir fonctionner comme serveur mandataire ( proxy ). Un serveur mandataire reçoit les requêtes des clients, les fait suivre aux vrais serveurs et renvoie les réponses de ces serveurs aux clients. Vous pouvez avoir besoin d’un serveur mandataire pour deux raisons :
- Le mandataire peut tourner du côté extérieur d’un pare-feu (voir le chapitre 11), donnant ainsi un accès Internet à ses utilisateurs.
- Le mandataire peut mettre en cache les pages souvent demandées afin d’éviter d’aller les rechercher.
- Être sécurisé. Le monde de l’Internet est comme le monde réel, peuplé de nombreux agneaux et de quelques loups[*]. Un bon serveur se doit d’empêcher les loups de troubler le calme de la bergerie. La sécurité est un sujet tellement important que nous y reviendrons en de nombreuses occasions.
*. Nous suivons généralement la convention consistant à appeler ces gens des « sales types » ( bad guys ). Cela évite le débat sur les « hackers » qui, pour beaucoup de gens, désignent des programmeurs plutôt doués alors que, pour d’autres, ce sont des « sales types ».
Pourquoi Apache ?
L’implantation d’Apache sur le marché est deux fois plus importante que celle de son concurrent direct, Microsoft. Ce n’est pas simplement parce qu’il est gratuit : il est également open-source(*), ce qui signifie que son code source peut être examiné par quiconque est intéressé. S’il contient des erreurs, les milliers de paires d’yeux qui scrutent les fichiers source les trouveront. Grâce à cet examen constant, il est bien plus fiable (*) que n’importe quel produit commercial qui ne peut se fier qu’a l’examen d’un nombre limité d’employés. Cet aspect est particulièrement important dans le domaine de la sécurité où des erreurs apparemment triviales peuvent avoir d’horribles conséquences.
*. Pour plus d’informations sur le mouvement open-source, voir Tribune Libre : Ténors de l’Informatique Libre.
Chacun est libre de prendre le code source et de le modifier pour qu’Apache fonctionne différemment. En particulier, on peut étendre Apache avec de nouveaux modules, dont l’écriture utilise une technologie bien établie (décrite en détails dans le chapitre 20). Ils ont été utilisés par de nombreuses personnes pour introduire de nouvelles fonctionnalités.
Apache convient pour tous les sites quels que soient leur taille et leur type. Vous pouvez l’utiliser pour y mettre une simple page personnelle, ou pour créer un site énorme servi à des millions de visiteurs. Vous pouvez l’utiliser pour servir des fichiers statiques sur le Web ou comme frontal pour des applications qui génèrent des réponses adaptées aux visiteurs. Certains développeurs se servent d’Apache comme d’un serveur de test sur leurs machines personnelles : ils écrivent et testent leur code dans un environnement local avant de le publier à destination d’un public plus large. Apache peut représenter une bonne solution pour quasiment toutes les situations impliquant le protocole HTTP.
Apache est gratuit. Avec Unix, l’utilisateur télécharge le code source et le compile ; avec Windows, il télécharge l’exécutable à partir de http://www.apache.org ou d’un site miroir approprié à sa région. Bien que le téléchargement du code source, sa configuration et sa compilation semblent être des opérations difficiles, elles ne prennent qu’une vingtaine de minutes et en valent réellement la peine. De plus, de nombreux éditeurs de systèmes d’exploitation fournissent maintenant des binaires d’Apache.
Le résultat des nombreux avantages d’Apache est clair. Il y a actuellement à peu près 75 logiciels de serveurs web sur le marché et leur popularité est étudiée tous les mois par Netcraft ( http://www.netcraft.com ). En juillet 2002, leur étude de juin sur les sites actifs montrait qu’Apache était utilisé par près des deux tiers des sites étudiés (confirmant une tendance amorcée depuis plusieurs années). Ces résultats sont reproduits dans le tableau 1-1.
Développeur |
Mai 2002 |
Pourcentage |
juin 2002 |
Pourcentage |
---|---|---|---|---|
Apache |
10411000 |
65,11 |
10964734 |
64,42 |
Microsoft |
4121697 |
25,78 |
4243719 |
24,93 |
iPlanet |
247051 |
1,55 |
281681 |
1,66 |
Zeus |
214498 |
1,34 |
227857 |
1,34 |