http://a3nm.net Fabian M. Suchanek Following a course by Antoine Amarilli Server Technologies
Architecture client-serveur Client Serveur 2
Apache : Logiciel libre et gratuit. Lancé en 1995 !  IIS  (Internet Information Services). Fourni avec Windows,   propriétaire, depuis 1996.  nginx . Haute performance, libre et gratuit, lancé en 2002.  (Cependant, en août 2013, lancement de Nginx Plus, payant.)  GWS . Google Web Server, interne. (Trafic de Google !)  lighttpd  Alternative légère à Apache.  Autres  Rares, expérimentaux, embarqués... Le serveur utilise un logiciel qui répond aux requêtes des clients. Serveurs 3
Parts de marché Source : Netcraft. 4
• Les différentes ressources sont stockées dans des  fichiers  :       =>   /var/www/page.html /var/www/style.css ...  • Les pages sont organisées en une  arborescence  de répertoires.  • Les chemins demandés  correspondent  à l'arborescence :       =>   GET /a/b.html  correspond à  /var/www/a/b.html • Si un  répertoire  est demandé :      • Servir  index.html  s'il existe.      • Sinon, produire une liste des fichiers du répertoire.  Il n'est pas clair comment on garantit la  pérennité  des URLs. (un URL qui est valide aujourd’hui peut être invalide demain) Sites Web statiques simples 5 important
Exemple 6
• Souvent, le serveur Web loggue  toutes  les requêtes traitées !  • NCSA Common log format :      •  Adresse IP  du client      • Identité  ident  (obsolète)      • Identité  authentification HTTP  (rarement utile)      •  Date  et  heure  de fin de traitement      • Première ligne de la  requête HTTP       •  Code d'état  retourné au client      •  Taille  (octets) de la réponse  • Ajouts fréquents :      •  User-Agent  pour identifier le client      •  Referer  pour connaître la page précédente. Logs 208.115.113.88 - - [22/Jan/2012:06:27:00 +0100] "GET /robots.txt HTTP/1.1" 404 266 "-" "Mozilla/5.0 (compatible; Ezooms/1.0; ezooms.bot@gmail.com)" (NCSA = National Center for Supercomputing Applications) 7
108.212.202.170 - - [21/Nov/2013:03:41:08 +0100] "GET /texts/poor/poor_redtape.png HTTP/1.1"    200 48981 "http://suchanek.name/texts/poor/" "Mozilla/5.0 (Windows NT 6.3) AppleWebKit/537.36     (KHTML, like Gecko) Chrome/31.0.1650.57 Safari/537.36" 108.212.202.170 - - [21/Nov/2013:03:41:11 +0100] "GET /texts/senegal/12butcher_s.jpg HTTP/1.1"    200 24175 "http://suchanek.name/texts/poor/" "Mozilla/5.0 (Windows NT 6.3) AppleWebKit/537.36     (KHTML, like Gecko) Chrome/31.0.1650.57 Safari/537.36" 108.212.202.170 - - [21/Nov/2013:03:41:12 +0100] "GET /texts/poor/mari.jpg HTTP/1.1"   200 13254 "http://suchanek.name/texts/poor/" "Mozilla/5.0 (Windows NT 6.3) AppleWebKit/537.36     (KHTML, like Gecko) Chrome/31.0.1650.57 Safari/537.36" Sample Logs 8
• Pages les  plus visitées • Chemin sur le site, temps passé entre deux requêtes • Distinguer  humains et robots  (pas de garanties !)  • Emplacement  géographique  des visiteurs  •  Mots-clés  saisis dans les moteurs de recherche  •  Liens  vers son site  • Nombre d’abonnés à un flux RSS dans  User-Agent • Et plus ?      • Logiciels pour exploiter directement les logs du serveur.      • Tracking en PHP.      • Tracking tiers en JavaScript (Google Analytics).      • Tracking possible du pointeur de la souris en JavaScript, etc. Utilisation des logs See examples!! 9
Utilisation des logs 10
Utilisation des logs 11
Utilisation des logs 12
Utilisation des logs 13
• Les fichiers  .htaccess  permettent de paramétrer Apache :      •  deny from all  pour interdire un répertoire.      •  Authentification HTTP   •  URL rewriting  :      •  RewriteRule   (.* \.png) /images/    unbalanced $ •  Server Side Includes  :      •  <!— virtual="/footer.html" —> Extensions Apache 14
Serveurs Web Langages côté serveur Overview 15
• Moyen historique pour un  serveur Web   d'invoquer un  programme externe  (n'importe quel langage).  • Exécute le  programme  sur les paramètres de la requête.  • Le résultat de la requête est ce que  renvoie  par le programme.  •  Inconvénient  : créer un processus par requête est trop lourd.       =>   FastCGI  et autres mécanismes.       =>   Intégrer  le langage au serveur           (par exemple PHP). réponse du programme réponse du programme CGI: Common Gateway Interface 16 Client Serveur Programme CGI requête requête
(source) • Lancé en 1995 ; des  centaines de millions  de sites l'utilisent.  • Langage de programmation  complet • S'ajoute aux pages HTML. Exemple :          <ul>        <?php         $from = intval($ \_GET['from']);         $to = intval($ \_GET['to']);         for ($i = $from; $i < $to; $i++) {           echo "<li>$i</li>";          }        ?>        </ul> Try it PHP 17 http://example.com?from=1&to=10
What PHP can do: • PHP can generate dynamic page content • PHP can output any type of text content (HTML, XML, ...)   and also images, PDF, etc. • PHP can create, open, read, write, and close files on the server • PHP can collect form data • PHP can send and receive cookies • PHP can add, delete, modify data in your database • PHP can restrict users to access some pages on your website • PHP can encrypt data   Advantages of PHP: • PHP is compatible with almost all servers used today (Apache, IIS, etc.) • PHP supports a wide range of databases • PHP is free. [w3schools] PHP 18
• Pas prévu comme un langage complet  à l'origine      =>  À l'origine, Personal Home Page.  • Promeut de mauvaises pratiques de  sécurité      =>  Historiquement,  $ \_POST['from']  accessible comme  $from  !       =>  Facile d'oublier de (re)valider les données utilisateur...  • Mauvaises  performances  ?       =>  À l'origine, langage  interprété      =>  Cependant, compilation vers C++ ( HipHop , pour Facebook). Inconvénients de PHP 19
ASP  (Active Server Pages) Microsoft, add-on à IIS,   propriétaire. Marche avec VisualBasic          <p>  The current  time is                 <% Response.Write Now()  %>    </p>   ASP.NET  Microsoft, successeur d'ASP pour .NET.  ColdFusion  Adobe, commercial, propriétaire.  JSP  Intégration entre Java et un serveur Web.             <p> Counting to three: </p>             <% for (int i=1; i<4; i++) { %>                <p> This number is  <%= i %> . </p>             <% } %>      Autres langages côté serveur 20
node.js  Moteur JavaScript V8 (de Chrome) et serveur Web.       =>  Même langage pour le client et le serveur.       =>  Orienté événements, et VM performante.  Python Frameworks Web  :  Django , CherryPy, Flask.  Ruby Frameworks Web  :  Ruby on Rails  (influent !), Sinatra. Autres langages côté serveur 21
Serveurs Web Langages côté serveur Bases de données Overview 22
Une base de données est une collection de données organisée.   Les données sont souvent stockées sur disque dur, et accédées par un logiciel - le  SGBD (Système de Gestion de Bases de Données).