Les programmes cgi (scripts) et la notion de document virtuel
-
CGI signifie Common
Gateway Interface. Il s'agit de la description de l'interface
entre un serveur HTTP et des applications externes qui seront activées
par ce serveur.
-
Un programme cgi est un programme qui sera automatiquement activé
par le serveur HTTP, en lieu et place de la recherche d'un document. Ces
programmes sont souvent écrits dans des langages appelés, en
jargon d'informaticien, des langages de script (scripting languages).
C'est la raison pour laquelle on fait souvent référence à
des scripts cgi ou parfois scripts cgi-bin.
-
La sortie standard du programme (instructions d'impression) sera redirigée
par le serveur HTTP vers le client qui verra ainsi un document virtuel
-
Le programme peut
-
soit envoyer l'adresse d'un autre document de la façon suivante:
Location:
URL
(où URL est l'adresse de cet autre document)
-
soit envoyer:
Content-type:
TypeMime
où TypeMime est par exemple
text/html
,image/gif
, ou tout autre type de document généralement reconnu par les clients WWW (voir la section The Content-Type Header Field du standard MIME).
Cette première ligne doit être suivie d'une ligne vide puis du contenu du document "virtuel".Par exemple, en Pascal:
writeln('Content-type: text/html'); writeln; writeln('<html><head><title>Demo</title></head>'); writeln('<body><h1>Demo de programme cgi</h1>'); writeln('C''est aussi simple que ça'); writeln('</body></html>');
-
soit envoyer l'adresse d'un autre document de la façon suivante:
-
Dans un des fichier de
configuration du serveur HTTP, il est possible de déclarer quels
répertoires contiennent des scripts et quel(s) symbole(s) dans une
URL permettra au serveur de détecter une référence à
un script. Par exemple, sur le serveur cuisung.unige.ch, le fichier de
configuration stipule:
ScriptAlias /cgi-bin/ /user/ub2/eao/www/apache/cgi-bin/ ScriptAlias /experimental /user/ub2/eao/www/apache/cgi-bin/experimental
ce qui signifie que toute URL commençant par
http://cuisung.unige.ch/cgi-bin/...
provoquera l'exécution d'un programme dont le nom suivra immédiatement ce début d'URL, ouhttp://cuisung.unige.ch/experimental/...
provoquera l'exécution du programme nommé "experimental" qui se trouve dans le répertoire racine du serveur. Exemple:http://cuisung.unige.ch/cgi-bin/suggest/SuiteDeLUrl
activera le programme "
suggest
" qui se trouve dans le répertoire/user/ub2/eao/www/apache/cgi-bin/
-
Le serveur HTTP transmet au programme cgi
un certain nombre d'informations,
généralement par le biais de variables d'environnement. En
particulier:
-
QUERY_STRING
contiendra ce qui se trouve dans l'URL après le point d'interrogation (correspondant généralement au contenu d'un formulaire si la méthode GET à été utilisée). Par exemple, avechttp://cuisung.unige.ch/cgi-bin/suggest/VPSEComment?xyz
QUERY_STRING
vaudra "xyz
" -
PATH_INFO
contiendra ce qui se trouve dans l'URL après le nom du programme cgi, jusqu'au point d'interrogation non-compris (ou jusqu'à la fin de l'URL, s'il n'y a pas de point d'interrogation). Par exemple, avec la même URLhttp://cuisung.unige.ch/cgi-bin/suggest/VPSEComment?xyz
PATH_INFO
vaudra "/VPSEComment
"
Si la méthode POST est utilisée dans le formulaire,
QUERY_STRING
ne sera pas définie (ou sera vide) et les informations du formulaires devront être lues par le script sur l'entrée standard (standard_input).Pour voir les informations transmises par le serveur Apache à un script, essayez ces deux formulaires:
-
-
Il exite déjà
des bouts de programmes permettant de décoder
et d'extraire les informations envoyées par un formulaire et ceci
pour différents langages de programmation (exemple:
mon script Tcl pour extraire les informations
d'un formulaire et les mettres dans un tableau associatif se trouvant
dans
/user/ub2/eao/www/apache/cgi-bin/http-query-setup.tcl
). - Exemples de scripts CGI:
Problèmes de sécurité liés aux programmes CGI - côté client
- Internet Draft: The WWW Common Gateway Interface Version 1.1, 2 Apr. 99
- The Common Gateway Interface1.0 (pour plus de rapidité une copie locale a été installée)
- MIME (Multipurpose Internet Mail Extensions) Part One: Mechanisms for Specifying and Describing the Format of Internet Message Bodies
- CGI: The Common Gateway Interface for Server-side Processing, par Alan Richmond
- The World Wide Web Security FAQ, section CGI (Server) Scripts