L'exécution de code par le client offre principalement deux avantages :
Les inconvénients sont liés à deux problèmes :
En pratique, l'exécution de code côté client est déclenchée
par un document HTML à l'aide des balises <script>
ou
<object>
(ancien <applet>
).
<script>
a un attribut obligatoire
type
qui permet d'indiquer dans quel langage est exprimé le script. Actuellement,
le seul langage supporté par la majorité des navigateurs web est le
JavaScript.
JavaScript est volontairement limité, pour éviter les problèmes de sécurité.
Une autre approche est d'augmenter les fonctionnalités du serveur. Au lieu de servir des documents stockés (des pages dites statiques), le serveur va exécuter des instructions pour répondre à chaque requête et générer la réponse (code HTML) appropriée; on parle alors de pages dynamiques.
Le mécanisme le plus simple est nommé CGI (Common Gateway Interface). Pour chaque requête correspondant à un CGI, le serveur web va lancer un exécutable.
Les programmes CGI peuvent être écrits dans n'importe quel langage. La plupart du temps, on emploie des langages de haut niveau comme Perl ou Python, qui permettent le développement rapide de programmes fiables manipulant des textes; mais rien n'interdit d'utiliser le langage C.
Les étapes suivies par le programme sont :
La récupération des données du client est différente selon le type de requête (GET ou POST). Nous n'évoquerons ici que le cas d'une requête GET :
http://www.gtr.org/AjoutEtudiant?nom=Dupond&prenom=Bernard
Le CGI (AjoutEtudiant) va accéder aux arguments (nom=Dupond, prenom=Bernard)
via la variable d'environnement QUERY_STRING
. Dans l'exemple
ci-dessus, on aurait QUERY_STRING = "nom=Dupond&prenom=Bernard"
.
Après traitement, le programme CGI doit générer la réponse en HTML, avec les en-têtes HTTP. On doit donc écrire (sur stdout) au minimum une première ligne
Content-type: text/html
suivie d'une ligne blanche, elle même suivie de la page HTML.
Le mécanisme CGI est très simple, mais manque d'efficacité: un nouveau processus est créé pour chaque requête, ce qui est coûteux. D'autre part, ce mécanisme est assez rigide: il n'est pas très commode de composer une seule page HTML à partir du résultat de plusieurs scripts CGI; il est difficile de séparer la logique des traitements de la présentation des résultats.
Il existe de nombreuses autres solutions, basées sur des langages de scripts intégrés au serveur web. Les plus connues :
<html> <body> <?php print "Salut "; ?> les copains </body> </html>sera transformé en :
<html> <body> Salut les copains </body> </html>