CPI/BTS 2 Programmation Web Les sites dynamiques Prog Web CPI/BTS2 – M. Dravet – 02/10/2003 Dernière modification: 02/10/2003
Sites Dynamiques Une page HTML est statique: –Le code HTML doit être modifié par le designer ou développeur pour modifier l’apparence d’une page –Nécessité de faire appel à des langages complexes pour faire de la gestion et du formatage de données (Ex: XML) –Au final de nombreuses pages et beaucoup de lignes de code HTML sont nécessaires par rapport à la quantité de données affichées …
Sites Dynamiques Evolution d’Internet et du Web –Démocratisation des sites Internet: Nécessité de présenter de multiples produits Nécessité de s’adapter aux différents clients Nécessité d’offrir des services supplémentaires (Webmail, news, forums, chats, …) Besoins en sécurité pour protection des serveurs, des sites, et des clients Nécessité d’avoir la possibilité de gérer des données au cas par cas suivant les connexions clientes !
Sites Dynamiques Notion de Site dynamique : les CGI –Common Gateway Interface –Principe : déclenchement d’une action sur le serveur web par l’appel d’un programme –On peut lui transmettre des informations (cas courant: formulaire HTML) –Le programme CGI construit et renvoie un document au format HTML au client –C’est le moyen le plus ancien de créer dynamiquement des pages HTML
CGI Architecture d’un CGI Client Serveur WEB Prog. CGI Fichiers BD Autres Progs. Machine Serveur
CGI Notion de Site dynamique : les CGI –Le CGI récupère les données transmises par le serveur Web (Ex: données véhiculées par l’entête HTTP, variables d’environnement, variables HTML) –Le CGI traite la demande: exécution de son code Accès BD, fichiers, génération d’images … Utilise les programmes et librairies installées sur la machine ou le CGI est installé –Production du document –Envoie du document au serveur –Le serveur envoie le document au navigateur client
CGI Transm. de paramètres client serveur –Les arguments sont transmis par une chaîne de caractères au format: nom1=val1&nom2=val2&... Nom de la variable Valeur de la variable Une autre variable va suivre … Nom de la variable Valeur de la variable
CGI Transm. de paramètres client serveur –La chaîne de caractère des arguments peut être transmise par deux méthodes: Méthode « GET »: la chaîne est transmise dans l’URL La variable ‘idP’ ne reçoit aucune valeur La variable ‘PName’ ne reçoit aucune valeur La variable ‘idProd’ reçoit la valeur 1981
CGI Transm. de paramètres client serveur –La chaîne de caractère des arguments peut être transmise par deux méthodes: Méthode « POST »: la chaîne est transmise séparément, directement via le protocole HTTP. –La méthode POST est préférable car: Elle évite les très longues URL (limitation 255 caractères) La non visibilité des paramètres sur le navigateur «sécurise» le client (psychologiquement et techniquement: absence de logs)
CGI Transm. de paramètres serveur CGI –Le serveur web transforme la requête GET ou POST en variable d’environnement –De même que les paramètres reçus via l’entête HTTP Exemples de variables d’environnement SERVER_NAME : nom du serveur HTTP_USER_AGENT : nom du client REQUEST_METHOD : GET ou POST QUERY_STRING : la chaîne des paramètres CONTENT_LENGTH : longueur de la chaîne
CGI Une fois les paramètres reçu par le CGI: –Le CGI les décode: analyse de la chaîne, « parsing » dans plusieurs variables –Traitements de vérification de la validité des données –Traitements divers: fichiers, BD, appels à d’autres programmes, calculs, etc. –Ecriture du résultat sous forme de code HTML (à écrire manuellement dans le CGI)
CGI Ecriture d’un CGI: –N’importe quel langage: Perl Shell (bash, sh, etc.) C, C++, … –Le serveur Web se contente juste de lancer un exécutable –C’est à l’exécutable de s’adapter au format des données communiquées par le serveur web (normalisé) –Le serveur web doit être configuré pour autoriser l’exécution de scripts CGI …
CGI Exemple de CGI simple: en shell (sh) #!/bin/sh echo Content-type: text/plain echo echo Logiciel serveur = $SERVER_SOFTWARE echo Machine serveur = $SERVER_NAME echo Type de requête = $REQUEST_METHOD echo Navigateur = $HTTP_USER_AGENT echo La requête = $QUERY_STRING echo Longueur requête = $CONTENT_LENGTH
CGI Exemple de CGI « normal »: en C URL du source et librairie CGI:
CGI #include #define TITRE "Resultat du questionnaire" cgi_main(cgi_info *ci) { form_entry *parms; char *prenom, *nom, *couleur, *choix, *message;
CGI /* lecture des parametres */ parms = get_form_entries(ci); prenom = parmval(parms, "prenom"); nom = parmval(parms, "nom"); couleur = parmval(parms, "couleur"); choix = parmval(parms, "choix"); message = parmval(parms, "message");
CGI /* en-tête MIME: type de document (HTTP)*/ print_mimeheader("text/html"); /* en-tête HTML*/ printf(" \n"); printf(" %s \n", TITRE); printf(" \n"); printf(" %s \n", TITRE); printf(" \n");
CGI /* ici commence le traitement */ printf(" %s %s, dont la couleur favorite est %s, vous avez répondu %s à la question car vous pensez que : %s \n", prenom, nom, couleur, choix, message);
CGI /* ici se termine le traitement */ printf(" \n"); free_form_entries(parms); }
CGI Limites des CGI –Passage des paramètres plutôt pénible –Lancement d’un programme à chaque requête –Aucune intégration avec le HTML –Pas de mémoire des requêtes précédentes: mode déconnecté Nécessité d’avoir des langages complètement dédiés au web dynamique: PHP, ASP, JSP …