Le concept de serveur et client HTTP a été développé par Tim Berners-Lee du CERN (Centre Européen de Recherche Nucléaire) à Genève, en Suisse.
Cern httpd : premier serveur Web. Ce serveur n'est plus supporté. Il est connu pour avoir quelques bugs étranges, pour être lent et utilise beaucoup de ressources. La dernière version est toujours disponible sur le site du W3C (World Wide Web Consortium).
Fin 1994 : le serveur Web le plus utilisé dans le monde est celui du NCSA (National Institute for Supercomputing Applications) (NCSA httpd 1.3 - Université de l'Illinois). Le développement s'arrête suite au départ du développeur Rob McCool. Ce serveur a servi de base au développement du serveur Apache. Les sources sont toujours disponibles sur le site du NCSA.
Début 1995 : naissance de la première équipe Apache (11 personnes) qui va coordonner la mise en commun de centaines de corrections et d'améliorations faite au serveur par des développeurs indépendants pour leurs propres besoins. Première version publique de Apache (0.6.2)
Début 1996 : suite à la sortie de la version 1.0 et moins d'un an après la création du groupe, Apache devient le serveur Web le plus utilisé dans le monde
Aujourd'hui : Apache est toujours le serveur Web le plus utilisé. La "Apache Software Foundation" compte plusieurs dizaines de membres, des centaines de contributeurs et développe plusieurs projets liés à la diffusion d'information sur Internet (serveur java, produits XML, langages de script...)
Le nom Apache vient de "A PAtCHy server", en raison du mode de développement par patchs de ces premières versions. Ses performances, sa robustesse, son utilisation aisée, et sa licence en font le serveur Web le plus populaire au monde depuis mars 1997.
Selon la société Netcraft, qui étudie chaque mois les "parts de marché" des différents type de serveurs Web, Apache domine largement ses concurrents avec une utilisation sur plus de 60% des serveurs HTTP publics dans le monde.

Part de marché des principaux serveurs Web depuis août 1995 (Netcraft)
Ce succès est non seulement dû à sa gratuité, mais également à sa robustesse et à son extensibilité. Apache est également une plate-forme de choix pour un intranet, et est très répandu dans les universités et les écoles.
Actuellement, 2 versions sont disponibles sur le site d'Apache :
apache 1.3 - 1.3.28 version du 17 juillet 2003
apache 2.0 - 2.0.47 version du 7 juillet 2003
Remarque :
La version 2.0
apporte entre autres des performances accrues sur toutes les
plate-formes supportées ainsi qu'un nouveau mode de
fonctionnement alliant les threads et les processus.
Les améliorations apportées par la version 2 :
Threads sur Unix : Sur les systèmes Unix, Apache peut s'exécuter selon un modèle hybride multi-processus et multi-threads, en employant les threads selon la norme POSIX. Ceci devrait améliorer les performances.
Nouveau système de construction : Le système de construction a été entièrement réécrit et repose sur autoconf et libtool. Cela rend le système de configuration plus semblable aux autres paquetages.
Support multiprotocole : Apache possède maintenant une infrastructure afin de servir de multiples protocoles. mod_echo a été écrit comme exemple de ces nouvelles fonctions.
Meilleur support des plates-formes autres qu'Unix : Apache 2.0 est plus rapide et plus stable sur les plates-formes non Unix telles que BeOS, OS/2, et Windows. Avec l'introduction des modules multi-traitements (MPMs) spécifiques aux plates-formes et l'exécuteur portable Apache (APR), le code pour ces plates-formes est réalisé en employant leurs API natives, permettant ainsi d'éviter les couches d'émulation POSIX souvent boguées et peu performantes.
Nouvelle API Apache : L'API pour les modules de la version 2.0 a changé de manière importante. Beaucoup de problèmes d'ordonnancement des modules existants dans la version 1.3 devraient disparaître. La version 2.0 gère ceci de manière automatique, et l'ordonnancement des modules s'effectue selon une fonction d'accrochage afin de permettre une plus grande flexibilité.
Le fonctionnement du Web est basé sur le modèle requête/réponse qui est implémenté sous la forme du protocole HTTP (HyperText Transfer Protocole).
Apache, serveur HTTP, est conforme à ce protocole, et reconnaît également les requêtes HTTP/1.1, dernières extensions à HTTP.
HTTP utilise le protocole TCP :
le client (navigateur Web) établit une connexion avec le serveur puis envoie une requête sur ce canal.
le serveur examine cette requête et répond en fonction des directives enregistrées dans son fichier de configuration
le serveur envoie sa réponse (HTML, graphique, audio, Java, ...) sous forme de d'octets de données mis en paquets par la pile TCP/.IP du serveur.
Voir le cours « Le Protocole HTTP »
Voir Les caractéristiques du protocole TCP.
Le programme Apache fonctionne sous de nombreuses plate-formes multitâches telles que :
Unix
Linux
Windows
MacOS
etc ...
L'éxécutable se nomme httpd sous Linux, apache.exe sous Windows, et fonctionne en arrière plan.
Entièrement configurable, il supporte la plupart des protocoles. L'écriture de modules permet de le personnaliser. Enfin, il s'interface avec tous les systèmes d'authentification et toutes les bases de données, intègre en standard le protocole de sécurisation SSL (Secure Sockets Layers), permet d'intégrer en tant que "plug-ins" les langages de programmation de pages Web dynamiques les plus courants.
Il est distribué sous une licence "Open source", donc :
gratuit
Au repos, Apache "écoute" les ports TCP des adresses IP indiqués dans son fichier de configuration.
Lorsqu'une requête HTTP se présente sur un port valide, Apache en analyse les en-têtes. Il applique alors les directives du fichier de configuration.
De nombreuses directives du fichier de configuration permettent de contrôler le fonctionnement d'Apache. Il est également possible d'utiliser quelques options en ligne de commande.
Apache est modulaire. Cela signifie que des modules peuvent être ajoutés ou retirés à Apache afin de lui apporté ou de lui enlever des fonctionnalités.
Chaque module est constitué de code éxécutable compilé qui peut être inclus dans l'éxécutable ou alors chargé dynamiquement en mode DSO (Dynamic Shared Object). Cette technique permet de charger un module en mémoire que lorsque cela devient nécessaire, cela à pour conséquence d'optimiser l'utilisation de cette dernière.
Liste des modules :
http://httpd.apache.org/docs/mod/ : description des modules de base d'Apache version 1.3
http://httpd.apache.org/modules/ : modules non inclus dans la version de base et maintenus par l'Apache Group
http://modules.apache.org/search : tout les modules pour la version 1.3.x et 2.x
http://httpd.apache.org/docs-2.1/mod/ : modules d'Apache version 2.1
http://www.apache.org le site officiel de l'Apache Software Fundation
http://httpd.apache.org/ Apache Project
http://www.apachefrance.com le site d'Apache France
L'utilisateur aura le choix entre :
compiler et installer les sources
installer un exécutable à partir de la distribution binaire (éventuellement sous forme de paquetage Linux)
voir http://httpd.apache.org/docs/install.html .
Les distributions Linux fournissent Apache sous forme de packages (ou paquetages). C'est une archive contenant des données et/ou des programmes ainsi que les informations nécessaires à une installation correcte de ceux-ci sur le système.
Il existe différents types de package :
Debian utilise des packages
de type [DEB]
exemple : apt-get install apache
RedHat et Mandrake
utilisent des packages de type [RPM] :
Exemple : rpm
-i apache-1.3.12_1.rpm
les distributions du type slackware utilisent des packages de type [tar.gz]. Il s'agit d'une simple archive contenant également les scripts d'installation.
etc ...
Ces packages peuvent être téléchargés sur les sites des distributions :
LinuxEasyInstaller : script écrit en PERL qui installe MySQL, Apache, PHP et phpMyAdmin.
Les versions pour Windows 95/98/NT/2000 sont toutes identiques, sauf pour Windows NT où Apache peut également être exécuté en tant que service.
les sources: httpd-2.0.47-win32-src.zip
les binaires: apache_2.0.47-win32-x86-no_ssl.msi
Ce type d'installation nécessite la présence d'un compilateur C pour compiler et installer Apache.
Voir http://www.linux-kheops.com/doc/apache/manual-eisti/windows.html#comp
Il suffit de cliquer deux fois sur le fichier téléchargé pour qu'Apache s'installe automatiquement. Par défaut, le répertoire de destination est C:\Program Files\Apache Group\Apache.
Apache.exe est l'exécutable et ApacheCore.dll, la bibliothèque principale du programme.
Les sous-répertoires importants sont conf pour les fichiers de configuration, logs pour les journaux, htdocs pour les pages Web et le manuel, et enfin modules pour les modules (fichiers DLL résidents, chargeables à l'exécution).
EasyPHP : installe automatiquement Apache, PHP, MySQL et PhpMyAdmin
BigApache : installe automatiquement PHP, MySQL, Perl, Python,ASP::Apache, JBoss et Tomcat, ainsi qu'un serveur MAIL Mercury associé aux protocoles POP, SMTP, IMAP, SSL et d’un antispam.
Le serveur Apache est intégré à la dernière version de MacOS.
Articles à voir sur PHPmac.com ainsi que sur stepwise.com.
L'installation d'Apache sur une plate-forme Linux crée plusieurs répertoires contenant:
les exécutables d'Apache
Le principal répertoire est sous Ubuntu le répertoire /etc/apache2
La configuration d'Apache est désormais répartie dans différents fichiers situés dans /etc/apache2/. Le fichier de configuration principale du serveur est /etc/apache2/apache2.conf. Ce fichier inclut des directives de configuration provenant d'autres fichiers de configuration par des clauses Includes.
Dans cette nouvelle version d'Apache la configuration des sites Web virtuels est déportée dans le répertoire /etc/apache2/sites-available/ qui contient un fichier de configuration par site virtuel. Ce répertoire contient les sites virtuels disponibles. Pour rendre accessible un site il suffit alors de créer un lien symbolique dans le répertoire /etc/apache2/sites-enabled/ pointant vers le fichier de configuration adéquat se trouvant dans le répertoire /etc/apache2/sites-available/.
Par défaut Apache propose un site virtuel dont le fichier de configuration est /etc/apache2/sites-available/default. C'est ce fichier que nous allons modifier dans le TP
Sauf indication contraire les pages d'un serveur Web sont accessibles depuis tout l'Internet. Il est cependant tout à fait possible, et même conseillé, de restreindre l'accès à une page ou à une partie d'un serveur. Ces restrictions peuvent être gérées selon différents critères :
l'accès peut être réservé à des utilisateurs référencés en possession d'un mot de passe.
l'accès peut être réservé à des utilisateurs appartenant au même domaine ou au même sous-domaine. (la notion de domaine doit être prise au sens TCP/IP)
enfin on peut utiliser une combinaison de ces deux méthodes
Avantages des fichiers .htaccess :
permettent aux utilisateurs qui n'ont pas la permission de modifier le fichier de configuration du serveur Apache d'obtenir une protection équivalente sur une partie de leur site Web.
permet de protéger certaines partie du site sans avoir à redémarrer le serveur.
L'inconvénient tient au fait que les fichiers sont analysés à chaque accès au serveur entraînant une diminution des performances.