Serveurs et environnements de développement. Serveur Web



Documents pareils
SERVEUR HTTP Administration d apache

Les serveurs WEBUne introduction

Internet. Web Sécurité Optimisation

Module 7 : Configuration du serveur WEB Apache

CGI et SSI. La programmation CGI. Sources. Objectifs. Qu'est ce qu'un programme CGI? CGI

Dans l'épisode précédent

Installation d un hébergement Web à domicile

Zoom sur Newtest LDAP intégration

Gilles.Roussel univ-mlv.fr HTTP/1.1 RFC 2068

Table des matières Hakim Benameurlaine 1

2011 Hakim Benameurlaine 1

UE5A Administration Réseaux LP SIRI

CYBERGATE -TP-APACHE_2.DOC

INSTALLATION APACHE POUR WINDOWS (XP OU 2000)

SERVEUR WEB LINUX LAMP. Raymond RAZAFIMAMONJY Administration LINUX / UNIX Chapitre 15

TP Service HTTP Serveur Apache Linux Debian

Hébergement de site web Damien Nouvel

Comment avoir le logiciel? Le serveur web APACHE peut être téléchargé gratuitement du site web de APACHE:

L3 informatique TP n o 2 : Les applications réseau

TP HTTP. Université Pierre Mendès France U.F.R. Sciences de l Homme et de la Société Master IC²A

REPARTITION DE CHARGE LINUX

Maîtriser Apache. Benjamin Drieu. version

INTERNET est un RESEAU D ORDINATEURS RELIES ENTRE EUX A L ECHELLE PLANETAIRE. Internet : interconnexion de réseaux (anglais : net = réseau)

Procédure d'installation du serveur Apache HTTPD pour Windows

Le serveur Web : Apache

BTS SIO SISR3 TP 1-I Le service Web [1] Le service Web [1]

Tutoriel compte-rendu Mission 1

Préparation d un serveur Apache pour Zend Framework

Faire fonctionner symfony sous wamp et windows avec des vhost. Installation de wamp

(structure des entêtes)

Configuration du serveur Web Apache. Master 1 STIC-Informatique 1

Installation et présentation du serveur Apache

Création de formulaires interactifs

Différentes installations sur un serveur Windows 2000 ou 2003.

Titre: Version: Dernière modification: Auteur: Statut: Licence:

Le serveur HTTPd WASD. Jean-François Piéronne

Module BD et sites WEB

Application Web et J2EE

Module Com231A - Web et Bases de Données Notion 5 : Formulaires et utilisation des Bases de Données avec PHP

Procédure d'installation

Internet Information Server. Conçu et réalisé par Denis Szalkowski Formateur consultant

Manuel d'installation

Séquence 8 - Bases des réseaux - suite Jean.Saquet@info.unicaen.fr, Gaetan.Richard@info.unicaen.fr

En Perl, les choses sont un peu différentes. Le cgi Perl ne peut être qu'un programme qui génère des sorties.

Couche applica,on. h.p- web Cgi javascript

HTTP 1.1. HyperText Transfer Protocol TCP IP ...

Mandataires, caches et filtres

Bases de données et Interfaçage Web

Introduction. PHP = Personal Home Pages ou PHP Hypertext Preprocessor. Langage de script interprété (non compilé)

LAMP : une nouvelle infrastructure LAMP. Une architecture modulaire. Installation

HTTP HTTP. IUT1 dpt SRC L Isle d Abeau Jean-françois Berdjugin. Introduction et architecture Messages Authentification Conclusion

Projet de Semestre. Page Web Didactique de Visualisation d Algorithme. Université de Genève - semestre de printemps 2012

Installation d OwnCloud 8.0 sous Debian Avec connexion des utilisateurs active directory et mise en place de HTTPS

Les sites Internet dynamiques. contact : Patrick VINCENT pvincent@erasme.org

Types MIME (2) Typage des ressources Internet. Les URI. Syntaxe dans les URI. Possibilité de spécifier un paramètre du sous-type

Programmation Web. Madalina Croitoru IUT Montpellier

KAJOUT WASSIM INTERNET INFORMATION SERVICES (IIS) 01/03/2013. Compte-rendu sur ISS KAJOUT Wassim

TP JAVASCRIPT OMI4 TP5 SRC

Développement Web. Les protocoles

TP réseaux 4 : Installation et configuration d'un serveur Web Apache

Serveur Subversion Debian GNU/Linux

Internet. DNS World Wide Web. Divers. Mécanismes de base Exécution d'applications sur le web. Proxy, fire-wall

Stockage du fichier dans une table mysql:

Les services usuels de l Internet

Technologies du Web. Créer et héberger un site Web. Pierre Senellart. Page 1 / 26 Licence de droits d usage

Installation de Zabbix

Sécurité des sites Web Pas un cours un recueil du net. INF340 Jean-François Berdjugin

Installation et configuration d Apache sous Linux RedHat 7.1. Pascal AUBRY Ambroise DIASCORN IFSIC Université de Rennes 1

WEBMESTRE : CONCEPTION DE SITES ET ADMINISTRATION DE SERVEURS WEB

Attaques applicatives

Linux sécurité des réseaux

Installation d un serveur HTTP (Hypertext Transfer Protocol) sous Débian 6

Appropriation d'un serveur Apache

TD4 - Supervision et métrologie des réseaux. 1 Supervision des applications et services réseaux et des ressources locales

Service WEB, BDD MySQL, PHP et réplication Heartbeat. Conditions requises : Dans ce TP, il est nécessaire d'avoir une machine Debian sous ProxMox

Installation GLPI-OCSNG-SSL Linux Debian Sarge

Administration réseau sous Linux

Hébergement de sites Web

GUIDE D INSTALLATION. Portaneo Enterprise Portal version 4.0

Failles XSS : Principes, Catégories Démonstrations, Contre mesures

Serveurs de noms Protocoles HTTP et FTP

Installation et configuration de Vulture Lundi 2 février 2009

Bases de Données et Internet

Apache 2.4 Installation et configuration

Développement des Systèmes d Information

Mise en place d un serveur Proxy sous Ubuntu / Debian

1. La plate-forme LAMP

Travaux Pratiques Introduction aux réseaux IP

Failles des applications Web. Ce document est extrait du travail de diplôme de M. DIZON dans l état.

Langage W4. Note technique W4 Engine

HTTP. Technologies du Web. Programmation Web côté serveur. Mastère spécialisé Management et nouvelles technologies, 16 novembre 2009

Un exemple d'authentification sécurisée utilisant les outils du Web : CAS. P-F. Bonnefoi

Installation Installation. Windows. Tout-en-un. Un livre de Wikilivres.

SQUID P r o x y L i b r e p o u r U n i x e t L i n u x

WebSSO, synchronisation et contrôle des accès via LDAP

Réaliser un inventaire Documentation utilisateur

07/03/2014 SECURISATION DMZ

Hébergement WeboCube. Un système performant et sécurisé. Hébergement géré par une équipe de techniciens

WebDAV en 2 minutes. Tous ces objectifs sont complémentaires et ils sont atteints grâce au seul protocole WebDAV. Scénarii

Transcription:

Serveurs et environnements de développement Serveurs et environnements 1 Serveur Web Serveur web: Système sur lequel s'exécute un serveur HTTP (HTTPd) Logiciel HTTP lui-même (HTTPd) Sert des données Hypermédia : Texte, HTML, Images, Audio, Vidéo Serveurs et environnements 2 1 1

Serveurs HTTP Il en existe plusieurs. Les plus utilisés sont : Apache HTTP Server (http://www.apache.org/) Internet Information Services (IIS) de Microsoft Sun Java System Web Server de Sun Microsystems Zeus Web Server (http://www.zeus.com/) Lighttpd (http://www.lighttpd.net/) Mongrel écrit en Ruby Tomcat de Apache offre un conteneur de servlets Pour une comparaison, voir le site : http://en.wikipedia.org/wiki/comparison_of_web_servers Serveurs et environnements 3 Serveurs et Langages Les serveurs sont écrits en divers langages : C: Apache, Zeus Web Server, lighttpd C# : IIS Java : Tomcat Ruby : Mongrel.. Serveurs et environnements 4 2 2

Types de serveurs Serveur HTTP normal Proxy Met en cache mémoire des pages demandées pour usages ultérieurs Peut modifier les requêtes et les réponses et qu'il voit Passerelle : Serveur intermédiaire qui traduit les protocoles d'accès au web (exemple WAP) Tunnel: Permet de dissimuler les requêtes et les réponses Serveurs et environnements 5 Serveur Apache Apache Software Foundation Le serveur du Web le plus populaire. Logiciel libre sous licence Apache. Fonctionnalités: Interprète PHP, Ruby, Perl, Python Serveur proxy, CGI Serveurs et environnements 6 3 3

Serveur Apache Serveur optimisé La gestion des appels des clients se fait par Pre-froking Historiquement: Prépare des processus à l'avance Threads : processus à la demande du client Peut fonctionner en tant que serveur Proxy S HTTPd S HTTPd Thread 1 Thread 2 Pre-forking P1 P2 P3 P4 C1 Threads C2 C1 C2 Serveurs et environnements 7 Fichiers de configuration Quelques répertoires importants: cgi-bin/ - Répertoire des scripts CGI conf/ - fichiers de configuration du serveur htdocs/ - répertoire principal des documents web logs/ - fichiers Log Dans le conf/ on trouve: access.conf configuration des accès httpd.conf configuration du serveur mime.types définition des types MIME. srm.conf - configuration des ressources Serveurs et environnements 8 4 4

Éléments de configuration (httpd.conf) ServerType : Type de serveur ( standalone ou inted) Port : Numéro de port (ex. 80) User: usager HTTP (ex. webadmin) Group: groupe de l'usager HTTP (ex. web) ServerAdmin: Courriel du webadmin (ex. abdel.obaid@uqam.ca) Serveurs et environnements 9 Éléments de configuration (httpd.conf - src.conf) ServerRoot: Où se trouve le serveur (ex. /home/httpd/) ErrorLog : Où se trouve le fichier Log (ex. /home/httpd/logs/error_log) PidFile : fichier qui contient l'identificateur du processus (PID) HTTPd (ex. /home/httpd/logs/httpd.pid) Autre directives: Keep Alive, Proxy Cache Virtual Servers,... Serveurs et environnements 10 5 5

Éléments de configuration (httpd.conf src.conf) DocumentRoot Répertoire de stockage des pages web Exemple: /home/httpd/htdocs/ UserDir : Répertoire des stockage des pages personnelles des usagers (ex. public_html) Permet d'utiliser l'url personnelle (ex. www.info.uqam.ca/ ~obaid/doc1.html) DirectoryIndex: Nom de la page d'accueil Exemple: index.html Serveurs et environnements 11 Éléments de configration (httpd.conf src.conf) AccessFileName: Fichier de contrôle d'accès avec authentification: Exemple:.htaccess DefaultType : Type par défaut des documents Exemple: text/plain ScriptAlias: Alias pour appeler un programme CGI. Exemple: /cgi-bin/ /home/httpd/cgi-bin/... Serveurs et environnements 12 6 6

Éléments de configration httpd.conf (access.conf) Définit les services autorisés: <Directory "/usr/local/opt/apache/htdocs"> Options Indexes FollowSymLinks AllowOverride None </Directory> <Directory /home/*/public_html> AllowOverride FileInfo AuthConfig Limit Indexes Options MultiViews Indexes SymLinksIfOwnerMatch IncludesNoExec <Limit GET POST OPTIONS > Order allow,deny Allow from all </Limit> <LimitExcept GET POST OPTIONS PROPFIND> Order deny,allow Deny from all </LimitExcept> </Directory> DirectoryIndex index.html index.html.var index.php index.htm welcome.html AccessFileName.htaccess DefaultType text/plain ScriptAlias /cgi-bin/ "/usr/local/opt/apache-2.0.63/cgi-bin/" Serveurs et environnements 13 Contrôle des accès La commande htpasswd crée un fichier de mots de passe (ici appelé.htpasswd) s'il n'existe pas: htpasswd c.htpasswd INF3005 >>> On entre un mot de passe. On peut aussi créer un groupe d'accès Serveurs et environnements 14 7 7

Serveurs virtuels Un serveur peut avoir plusieurs noms de domaine (au lieu d'avoir plusieurs ports) Exemple: le même serveur pour www.xyz.com et www.zyx.com Configuration dans httpd.conf avec: <VirtualHost hostname> </VirtualHost> Chacun des serveurs virtuels aura son propre contenu Serveurs et environnements 15 Serveurs virtuels <VirtualHost *:80> ServerAdmin DocumentRoot ServerName ErrorLog </VirtualHost> lanthier.stephanie@uqam.ca "/usr/local/opt/apache-2.0.63/htdocs" accueil.labunix.uqam.ca /var/log/web_gdst_error.log <VirtualHost *:80> ServerAdmin DocumentRoot ServerName ErrorLog </VirtualHost> lanthier.stephanie@uqam.ca "/usagers/autau/public_html" oto.uqam.ca /var/log/web_oto.log Serveurs et environnements 16 8 8

Mesures de performance Pour les fournisseurs de contenu Test d'utilisation Problèmes de performance Pour les fournisseurs d'accès Évaluation des proxys Pour les développeurs Performance des protocoles (TCP, DNS, HTTP) Serveurs et environnements 17 Techniques de mesure Fichiers logs du serveur Fichiers logs des caches dans les proxys Fichiers logs des navigateurs Analyseurs de paquets Serveurs et environnements 18 9 9

Fichier logs des serveurs Log des accès au serveur: client, date, requête, état, nombre d'octets envoyés Outils d'analyse des fichiers log: http://en.wikipedia.org/wiki/web_analytics 132.208.132.124 - - [22/Jan/2010:12:06:35-0500] "GET / HTTP/1.1" 200 1505 132.208.132.124 - - [22/Jan/2010:12:06:35-0500] "GET /apache_pb.gif HTTP/1.1" 200 2326 132.208.132.124 - - [22/Jan/2010:12:06:35-0500] "GET /favicon.ico HTTP/1.1" 404 326 132.208.132.124 - - [22/Jan/2010:15:17:44-0500] "\x16\x03\x01" 501 335 132.208.132.124 - - [22/Jan/2010:15:20:21-0500] "GET / HTTP/1.1" 304-132.208.132.124 - - [22/Jan/2010:15:20:21-0500] "GET /apache_pb.gif HTTP/1.1" 304-132.208.132.124 - - [22/Jan/2010:15:20:22-0500] "GET /manual/ HTTP/1.1" 200 757 /usr/local/opt/apache-2.0.63/logs/access_log Serveurs et environnements 19 CGI On doit configurer le serveur pour CGI: ScriptAlias /cgi-bin/ /home/httpd/cgi-bin/ Les fichiers dans ce répertoire doivent être exécutables. Attention aux trous de sécurité: Valider les données de l'usager Les programmes ne doivent pas pouvoir être générés dynamiquement Serveurs et environnements 20 10 10

Modèle avec CGI Navigateur HTTPD QUERY_STRING CONTENT_TYPE REMOTE_ADDR... Variables d environnment CGI Programme/ Script stdin/stdout Serveurs et environnements 21 Utilisation des formulaires Les formulaires sont définis avec la balise: <FORM NAME="nom" ACTION="URL" METHOD="Méthode">... </FORM> L'URL désigne le programme qui va traiter les données du formulaire. Méthode est GET (défaut) ou POST. Les données du formulaire sont traitées par une ressource externe au serveur (ex. CGI, servlet, php,) Serveurs et environnements 22 11 11

Passage de données Pour la méthode GET, les données sont attachées à la fin de l'url? sépare les données de l' URL Les programmes CGI sont invoqués avec l'adresse de type: http://site/cgi-bin/programme?donnees Dans la page HTML, on déclare le formulaire comme suit: <FORM METHOD= get ACTION= /cgi-bin/programme > <input type="submit" /> </FORM> Serveurs et environnements 23 Passage de données La méthode POST est recommandée pour le traitement des formulaires. Dans la page HTML, on déclare le formulaire comme suit: <FORM METHOD= POST ACTION= /cgi-bin/programme > <input type="submit" /> </FORM> Serveurs et environnements 24 12 12

Codage de données Les données sont codées avant d'être envoyées au serveur selon un codage appelé URLEncoding: Les espaces sont codés + Les caractères spéciaux sont replacés par leurs codes hexadécimal (ISO-9991-1 par exemple) précédés du signe % Exemple: "Étienne Fabergé Lancôme" est codé "%C9tienne+Faberg%E9+Lanc%F4me" Serveurs et environnements 25 Passage de données (Méthode POST) Lorsque l'usager soumet le formulaire (en appuyant due le bouton submit) le navigateur contactera le serveur en lui passant la requête (POST /cgi-bin/programme) avec les données du formulaire. Celles-ci suivront l'url en tant que document. Elles font partie du corps de la requête Pour passer les données au programme CGI, le serveur utilise le fichier stdin (Standard Input). " Serveurs et environnements 26 13 13

Passage de données (Méthode POST) Le serveur exécute le programme CGI en fournissant: Une liste variables d'environnement Un stream de données du formulaire sous forme d'une suite de paires nom=valeur séparées par & nom1=valeur1&nom2=valeur2&nom3=valeur3 Le script connaît la taille du strem en consultant le variable d'environnement CONTENT_LENGTH Serveurs et environnements 27 Traitement des données (Méthode POST) Le programme exécuter les étapes suivantes: 1. Lire les données du fichier stdin 2. Séparer les paires nom=valeur et faire les conversions (notamment des espaces) nécessaires 3. Traiter les données 4. Imprimer le résultat dans un format HTML sur le fichier stdout Serveurs et environnements 28 14 14

Retour des résultats (Méthodes GET et POST) Le programme est responsable D'imprimer le résultat sur le fichier standard de sortie vers le serveur (stdout). Celui-ci est connecté au serveur HTTP. Il est aussi responsable de générer les en-têtes appropriés de la réponse HTTP et les envoyer dans les premières lignes: Content-type: text/plain >>> UNE LIGNE VIDE! Serveurs et environnements 29 Soumission des données de formulaires Dans l'élément : <FORM action="url" Method="GET POST " > </FORM> action: l'adresse de la ressource qui va traiter les données du formulaire. method: la méthode utilisée pour envoyer le contenu du formulaire: GET: les données sont rajoutées à l'url spécifiée par l'attribut action lors de l'envoi de la requête au serveur. POST: les données du formulaire sont incluses dans le corps de la requête lors de l'envoi vers l'adresse spécifiées par l'attribut action. Serveurs et environnements 30 15 15

Transport des données du formulaire Données du formulaire GET URL HTTP/1.1 En-têtes Ligne vide Corps de la requête Ligne vide De: A. Obaid CP 8888, Suc. Centre ville H3C 3P8, Montréal, QC, Canada A: Bob Lajoie 17, Rue de la paix Parix, Cedex, 2000, France De: A. Obaid CP 8888, Suc. Centre ville H3C 3P8, Montréal, QC, Canada A: Bob Lajoie 17, Rue de la paix Parix, Cedex, 2000, France Message: Quand viendrezvous nous voir? POST URL HTTP/1.1 En-têtes Ligne vide Corps de la requête Ligne vide Message: Quand viendrezvous nous voir? Serveurs et environnements 31 Transport des données du formulaire Les noms des éléments du formulaire et les valeurs soumises sont présentrérs au serveur selon la forme nom=valeur et séparés par &. Sans oublier les champs cachés! Exemple: Dans le cas de GET, l'url soumis sera: http://www.google.com/search? champnom=obaid&champprenom=abdel&champlangue=fr&cha mplangage=cplus&champlangage=java <form name="job" method="get" action="http://www.google.com/search"> Nom: <input type="text" name="champnom" ><br> formulairetest.html Prénom: <input type="text" name="champprenom" ><br> <input type="radio" name="champlangue" value="fr" > Francais<br> <input type="radio" name="champlangue" value="eng" > Anglais<br> <input type="checkbox" name="champlangage" value="cplus" > C++<br> <input type="checkbox" name="champlangage" value="java" > Java <br> Valider: <input type="submit" value="go"> </form> Serveurs et environnements 32 16 16

Transport des données du formulaire Dans le cas de POST, le corps de la requête soumise contiendra : champnom=obaid&champprenom=abdel&champlangue=fr&champ Langage=Cplus&champLangage=Java POST http://www.google.com/search HTTP/1.0 User-Agent: Mozilla/3.5 Content-Type: application/x-www-form-urlencoded Content-Length: 32 champnom=obaid&champprenom=abdel& champlangue=fr&champlangage=cplus&champlangage=java Serveurs et environnements 33 Variables de CGI CONTENT_LENGTH CONTENT_TYPE DOCUMENT_ROOT PATH_INFO PATH_TRANSLATED QUERY_STRING REMOTE_ADDR REMOTE_HOST REMOTE_USER REQUEST_METHOD SCRIPT_NAME SERVER_NAME SERVER_PORT SERVER_PROTOCOL SERVER_SOFTWARE Serveurs et environnements 34 17 17

Variables de CGI DOCUMENT_ROOT: Répertoire racine du serveur HTTP_COOKIE : Cookies du visiteur HTTP_HOST : Site de la page demandée HTTP_REFERER: URL de la page qui a appelé le lien HTTP_USER_AGENT : Type de navigateur utilisé. QUERY_STRING : Chaine contenant les données de la requête (cas de GET) REMOTE_ADDR : Adresse IP du client REMOTE_HOST : Nom de la machine du visiteur Serveurs et environnements 35 Variables de CGI REMOTE_PORT: Port du visiteur REMOTE_USER : Nom d'usager du visiteur (dans.htaccess) REQUEST_METHOD: GET ou POST REQUEST_URI : URI de la requête SCRIPT_FILENAME: Nom complet du fichier du programme CGI SCRIPT_NAME: Nom du fichier du programme CGI SERVER_ADMIN: Courriel de l'administrateur du site SERVER_NAME : Nom de domaine de du serveur SERVER_PORT : Port du serveur SERVER_SOFTWARE: Logiciel serveur Serveurs et environnements 36 18 18

Fonctionnement du CGI Browser Serveur Submit POST Write environnement Execute Read environnement Programme Standart Input Page HTML Standart output Serveurs et environnements 37 Exemple simple Imprime les variable CGI http://www.info2.uqam.ca/ ~obaid/cgi-bin/variablescgi.cgi #!/bin/sh echo Content-type: text/html echo echo "<html>" echo "<br>" echo "<h1> Variables CGI </h1>" echo "<br>" echo SERVER_NAME = $SERVER_NAME echo "<br>" echo QUERY_STRING = $QUERY_STRING echo "<br>" echo PATH_INFO = $PATH_INFO echo REMOTE_HOST = $REMOTE_HOST echo "<br>" echo REMOTE_ADDR = $REMOTE_ADDR echo "<br>" echo REMOTE_USER = $REMOTE_USER echo "<br>" echo CONTENT_LENGTH= $CONTENT_LENGTH echo "</html>" Serveurs et environnements 38 19 19

/* exemple CGI GET Fichier: multi.c */ #include <stdio.h> #include <stdlib.h> int main(void) { char *data; long m,n; Exemple 2 : Méthode GET <FORM ACTION="http://zeta.labunix.uqam.ca/~obaid/cgi-bin/multi.cgi""> <P> Donnez les nombres a multiplier: <INPUT NAME="m" SIZE="5" /> <INPUT NAME="n" SIZE="5" /><BR /> <INPUT TYPE="SUBMIT" VALUE="Multiple!" /> </FORM> printf("%s%c%c\n", "Content-Type:text/html;charset=iso-8859-1",13,10); printf("<title>résultat de la multiplication</title>\n"); printf("<h3>résultat de la multiplication</h3>\n"); data = getenv("query_string"); if(data == NULL) printf("<p>err! Passage de paramètres du formulaire au script erroné."); else if(sscanf(data,"m=%ld&n=%ld",&m,&n)!=2) printf("<p>error! Donnée saisie invalide. Donnée doit être numérique."); else printf("<p>le produit de %ld et %ld is %ld.",m,n,m*n); return 0; } http://www.info2.uqam.ca/~obaid/form_mult_get.html cc multi.c o multi.cgi Serveurs et environnements 39 Exemple 2: GET/POST Le programmes contient une procédure qui permet de restituer le texte envoyé sur forme URLencode(): Hello! est envoyé comme «data=hello %21» void unencode(char *src, char *last, char *dest) <FORM ACTION="/cgi-bin/collect.cgi" METHOD="POST"> <P>Entrez vos donnees (80 cars. max.):<br> <INPUT NAME="data" SIZE="60" MAXLENGTH="80"><BR> <INPUT TYPE="SUBMIT" VALUE="Send"> </FORM> Serveurs et environnements 40 20 20

Exemple 2 : Méthode POST <FORM ACTION="http://zeta.labunix.uqam.ca/~obaid/cgi-bin/multi_post.cgi""> <P> Donnez les nombres a multiplier: <INPUT NAME="m" SIZE="5" /> <INPUT NAME="n" SIZE="5" /><BR /> <INPUT TYPE="SUBMIT" VALUE="Multiple!" /> /* exemple CGI POST*/ </FORM> #include <stdio.h> #include <stdlib.h> http://www.info2.uqam.ca/~obaid/form_mult_post.html #define MAXLEN 80 #define EXTRA 5 /* 4 pour le champ nammé "data", 1 pour "=" */ #define MAXINPUT MAXLEN+EXTRA+2 /* 2 pour ce qui est ajouté par le browser */ #define DATAFILE "../data/data.txt" void unencode(char *src, char *last, char *dest) { for(; src!= last; src++, dest++) if(*src == '+') *dest = ' '; else if(*src == '%') { int code; if(sscanf(src+1, "%2x", &code)!= 1) code = '?'; /* inconnu */ *dest = code; src +=2; cc multi_post.c -o multi_post.cgi }else *dest = *src; *dest = '\n'; *++dest = '\0'; } Serveurs et environnements 41 Exemple 2 : Méthode POST int main(void) { char *lenstr; char input[maxinput], data[maxinput]; long len; printf("%s%c%c\n", "Content-Type:text/html;charset=iso-8859-1",13,10); printf("<title>reponse</title>\n"); lenstr = getenv("content_length"); if(lenstr == NULL sscanf(lenstr,"%ld",&len)!=1 len > MAXLEN) printf("<p>erreur d invocation </p>"); else { FILE *f; fgets(input, len+1, stdin); unencode(input+extra, input+len, data); f = fopen(datafile, "a"); if(f == NULL) printf("<p> Desole!."); else fputs(data, f); fclose(f); printf("<p>fait! <BR>%s",data); } return 0; } Serveurs et environnements 42 21 21

Problèmes avec les CGI Pour chacune des requêtes reçues le serveur WEB doit : Créer un nouveau processus Charger et interpréter un script Exécuter le script Fermer le processus et fermer le tout. Devient un problème quand le trafic est important Serveurs et environnements 43 22 22