banière
Accueil Le Club JUIN 2004 Filière Informatique Services Contact
LA PROGRAMMATION CGI

   Sommaire





   Introduction au CGI


    Notion de variable d'environnement

Les variables d'environnement sont, comme leur nom l'indique, des données stockées dans des variables permettant au programme d'avoir des informations sur son environnement. L'environnement, dans le cas du programme CGI est:

  • Le serveur
  • Le client

Ces variables sont créées par le serveur à chaque fois que le programme CGI est appelé, le serveur les lui fournit en paramètres cachés lors de l'exécution de l'interpréteur.

Elles permettent notamment d'avoir des informations sur le type de serveur, son administrateur, la date à laquelle le CGI a été appelé, l'adresse IP et le type de navigateur du client,...

    Les variables d'environnement

On peut donc classer les variables d'environnement en deux catégories:

  • Les variables d'environnement dépendant du client
  • Les variables d'environnement dépendant du serveur

    Les variables d'environnement dépendant du client

Variable d'environnement Description
AUTH_TYPE Il s'agit de la méthode d'authentification qui a été utilisée par le client pour accéder au programme CGI
CONTENT_LENGTH Longueur du corps de la requête. Il s'agit de la taille des données envoyées au CGI par l'intermédiaire de la méthode POST d'un formulaire
CONTENT_TYPE Type de données contenu présent dans le corps de la requête. Il s'agit du type MIME des données
HTTP_COOKIE Cookie du client si jamais un cookie est effectivement présent sur le disque du client
HTTP_REFERER URL de la page qui a appelé le script CGI
HTTP_REQUEST_METHOD Cette variable indique le type de méthode utilisée pour envoyer les données au programme CGI. Il s'agit de GET,HEAD,POST,PUT ou DELETE. Dans le cas de la méthode GET, les données sont encodées avec l'URL de requête, dans le cas de la méthode POST, par contre, les données présentes dans le corps de la requête sont accessibles via le fichier de flux d'entrée standard nommé STDIN
HTTP_USER_AGENT Cette variable permet d'avoir des informations sur le type de navigateur utilisé par le client, ainsi que son système d'exploitation
PATH Il s'agit du chemin d'accès au script CGI
PATH_INFO Il s'agit de la partie de l'URL (ayant servie à accéder au script CGI) située avant le point d'interrogation. Il s'agit donc du chamin d'accès au script CGI sans prendre en compte les données supplémentaires
PATH_TRANSLATED Il s'agit du chemin d'accès absolu au script CGI, c'est-à-dire l'emplacement absolu du script sur le serveur
QUERY_STRING Il s'agit de la partie de l'URL (ayant servie à accéder au script CGI) située après le point d'interrogation. C'est de cette manière que sont transmises les données d'un formulaire dans le cas de la méthode GET
REMOTE_ADDR Cette variable contient l'adresse IP du client appelant le script CGI
REMOTE_USER Cette variable n'existe que si le client a été soumis à une authentification, et contient alors le couple nom_d_utilisateur/mot_de_passe
SCRIPT_FILENAME Chemin d'accès complet au script CGI
SCRIPT_NAME Chemin d'accès relatif (par rapport au chemin d'accès à la racine web) au script CGI
SERVER_PORT port TCP auxquel les données ont été envoyées (généralement le port 80)
SERVER_PROTOCOL Nom et version du protocole utilisé pour envoyer la requête au script CGI

    Les variables d'environnement dépendant du serveur

Variable d'environnement Description
DATE_GMT Date actuelle au format GMT
DATE_LOCAL Date actuelle au format local
DOCUMENT_ROOT Racine des documents Web sur le serveur
GATEWAY_INTERFACE Version des spécifications CGI utilisées par le serveur
HTTP_HOST Nom de domaine du serveur
SERVER_ADMIN Adresse de l'administrateur du serveur
SERVER_SOFTWARE Type (logiciel) du serveur web

    Affichage des variables d'environnement

Il est possible de créer un script permettant de visualiser l'ensemble des variables d'environnement. En voici un écrit en Perl:

#!/usr/local/bin/perl
print "content-type: text/html\n\n";
print "<HTML>\n";
print "<HEAD><TITLE>Variables d'environnement</TITLE></HEAD>\n";
print "<BODY>\n";

foreach $key (sort(keys %ENV)) {
print "$key = $ENV($key)<BR>\n";
}

print "</BODY>";





   Communication entre serveur et navigateur


    Notion d'URL et d'en-tête HTTP

Un URL (Uniform Resource Locator) est une adresse permettant de localiser un fichier sur Internet de manière unique. C'est grâce à cette adresse (du genre http://www.commentcamarche.net) qu'il est possible d'effectuer des requêtes de pages web. Lorsqu'une telle requête est effectuée sur Internet, celle-ci circule grâce à la suite de protocole TCP/IP et en particulier le protocole HTTP (HyperText Transfer Protocol), permettant d'envoyer des données encapsulées dans un datagramme contenant un grand nombre d'en-tête permettant d'identifier par exemple:

  • le fichier demandé
  • l'adresse IP du demandeur
  • Le navigateur effectuant la requête
  • ...

    Schéma de requête d'un navigateur à un serveur Web

Pour apprendre à utiliser les CGI, il est essentiel de comprendre comment se déroule la communication entre le navigateur et le serveur lors de la demande d'une page web. Pour cela, il est préférable d'avoir des notions sur le protocole HTTP...

Lorsqu'un navigateur effectue une requête (typiquement par saisie ou clic d'un URL, ou bien par envoi d'un formulaire), les étapes suivantes se déroulent:

  • les données de requête sont envoyées au serveur sous forme d'en-têtes de requête HTTP
  • Lorsque le serveur reçoit la requête, il analyse les en-têtes HTTP, notamment celui permettant de localiser le fichier demandé.
  • Si le serveur trouve le fichier HTML demandé, il va envoyer au client (le navigateur) un en-tête de réponse valide (Généralement Success) et les données créées par l'application
  • A la réception du document, le navigateur affiche le résultat à l'écran.

Dans le cas d'un CGI, le schéma est un petit peu plus compliqué:

  • les données de requête sont envoyées au serveur sous forme d'en-têtes de requête HTTP
  • Lorsque le serveur reçoit la requête, il analyse les en-têtes HTTP, notamment celui permettant de localiser le fichier demandé.
  • Le serveur va ensuite analyser l'extension du fichier, puis exécuter l'application associée à ce type de fichier (l'interpréteur Perl dans le cas d'une extension .pl par exemple), en fournissant à cette application les en-têtes de requête HTTP sous forme de variable d'environnement.
  • L'application va donc s'exécuter puis fournir des données de sortie (commençant par une formulation d'en-tête de la forme content-type : text/html) au serveur.
  • Le serveur va envoyer au client (le navigateur) un en-tête de réponse valide (Généralement Success) ainsi que les données créées par l'application
  • A la réception du document, le navigateur affiche le résultat à l'écran.




   Envoi des données

    But d'un script CGI

Les script CGI ont pour but d'afficher des pages Web ayant été générées par un programme informatique, d'où la dénomination de pages web dynamiques pourles pages créées par ce moyen. Toutefois, étant donné que le serveur revoie telles quelles au navigateur les informations que lui fournissent le script CGI, il est nécessaire d'ajouter aux données à afficher les en-têtes HTTP permettant au navigateur de comprendre qu'il s'agit d'une page web...

Le programme CGI doit créer lui-même les en-têtes HTTP

    Envoi des en-têtes HTTP

Puisque le serveur ne crée pas d'en-têtes pour les CGi, la première chose qu'un CGI doit faire consiste à envoyer un en-tête HTTP correspondant au type de fichier qu'il renvoie. Compte-tenu du fait que le rôle principal des CGI est de créer des pages dynamiques, l'en-tête HTTP correspondra au type text/html. La première chaîne envoyée au navigateur est donc:

content-type : text/html\n\n

Les deux retours chariot sont indispensables!
  • le premier sert simplement à retourner à la ligne
  • le second sert à créer la ligne vide séparant les en-têtes HTTP du corps du message, comme le veut la spécification du protocole HTTP
Vous vous demandez sûrement pourquoi le serveur ne pourrait pas ajouter tout seul les en-têtes HTTP, comme il le fait dans le cas des pages web statiques (fichiers .htm et .html). En fait, un programme CGI peut renvoyer n'importe quel type de contenu, c'est-à-dire qu'il est capable de renvoyer une image octet par octet, qui sera intégrée dans un document HTML par exemple, pourvu que le CGI renvoie un en-tête correspondant au type de l'image. Une fois de plus, le serveur pourrait éventuellement être capable de reconnaître le type de données que le CGI renvoie et adapter les en-têtes HTTP en fonction. En réalité les en-têtes HTTP peuvent faire beaucoup plus que préciser le type de document envoyé il est par exemple possible d'effectuer une redirection en renvoyant un en-tête de redirection. Une des applications peut par exemple consister à pointer vers un CGI, qui va enregistrer des informations sur le visiteur (une sorte de compteur de visites amélioré), puis le diriger vers un document...

    Exemple de script CGI en Perl

Voici un exemple de script tout simple permettant d'afficher une page web sur laquelle est écrit "Hello World" (cette phrase est sans aucun doute la phrase la plus vue sur le Web, car c'est la première chaîne que les programmeurs en herbe affichent par coutume).

#! /usr/local/bin/perl
print "content-type : text/html\n\n";
print "<HTML>";
print "<HEAD>";
print "<TITLE>Hello world</TITLE>";
print "</HEAD>";
print "<BODY>";
print "<Hello world!>";
print "</BODY>";
print "</HTML>";
Voyons maintenant un autre exemple, dans lequel le programme CGI effectue uniquement une redirection vers l'URL http://www.commentcamarche.net:

#! /usr/local/bin/perl
print "location : http://ww%77.commen%74camarche.net";




   Reception des données

    Envoyer des données à un script CGI

L'envoi de données à un script CGi se fait par l'intermédiaire d'un formulaire HTML.

Les formulaires HTML se créent à l'aide de la balise <FORM> contenant des boutons, des champs, des listes et/ou des cases à cocher repérés par des noms auxquels seront associés des valeurs, fonction de la saisie des utilisateurs, puis d'un bouton de soumission du formulaire qui enverra l'ensemble des informations au script indiqué en tant qu'attribut Action de la balise FORM selon la méthode GET ou POST. Chaque élément du formulaire doit possèder un nom unique, de telle façon que la valeur associé à l'élément forme avec le nom de celui-ci une paire nom/valeur du type:

Nom_de_l_element=valeur
L'ensemble des paires nom/valeur sont séparées par des esperluettes (le caractère "&". Ainsi, l'envoi d'un formulaire crée une chaîne de la forme:
champ1=valeur1&champ2=valeur2&champ3=valeur3
L'envoi de cette chaîne se fera différamment selon que la méthode utilisée pour l'envoi du formulaire est GET ou POST.

    Méthodes GET et POST

La méthode GET permet d'envoyer les éléments du formulaire au travers de l'URL du script, en ajoutant l'ensemble des paires nom/valeur à l'URL du script, séparé de celui-ci par un point d'interrogation, ce qui donne un URL du type:

http://nom_du_serveur/cgi-bin/script.cgi?champ1=valeur1&champ2=valeur2...

Toutefois, la longueur de la chaîne URL étant limitée à 255 caractères, les informations situées au-delà de cette limite seront irrémédiablement perdues. De plus, cela crée une URL surchargée dans la barre d'adresse d'un navigateur et peut dévoiler des informations sensibles comme un mot de passe...

Ainsi, la méthode POST est une bonne alternative à la méthode GET. Cette méthode code les informations de la même façon que la méthode GET (encodage URL et paires nom/valeur) mais elle envoie les données à la suite des en-têtes HTTP, dans un champ appelé corps de la requête. De cette façon la quantité de données envoyées n'est pus limitée, et est connue du serveur grâce à l'en-tête permettant de connaître la taille du corps de la requête.



   variables d'environnement

    Notion de variable d'environnement

Les variables d'environnement sont, comme leur nom l'indique, des données stockées dans des variables permettant au programme d'avoir des informations sur son environnement. L'environnement, dans le cas du programme CGI est:

  • Le serveur
  • Le client

Ces variables sont créées par le serveur à chaque fois que le programme CGI est appelé, le serveur les lui fournit en paramètres cachés lors de l'exécution de l'interpréteur.

Elles permettent notamment d'avoir des informations sur le type de serveur, son administrateur, la date à laquelle le CGI a été appelé, l'adresse IP et le type de navigateur du client,...

    Les variables d'environnement

On peut donc classer les variables d'environnement en deux catégories:

  • Les variables d'environnement dépendant du client
  • Les variables d'environnement dépendant du serveur

    Les variables d'environnement dépendant du client

Variable d'environnement Description
AUTH_TYPE Il s'agit de la méthode d'authentification qui a été utilisée par le client pour accéder au programme CGI
CONTENT_LENGTH Longueur du corps de la requête. Il s'agit de la taille des données envoyées au CGI par l'intermédiaire de la méthode POST d'un formulaire
CONTENT_TYPE Type de données contenu présent dans le corps de la requête. Il s'agit du type MIME des données
HTTP_COOKIE Cookie du client si jamais un cookie est effectivement présent sur le disque du client
HTTP_REFERER URL de la page qui a appelé le script CGI
HTTP_REQUEST_METHOD Cette variable indique le type de méthode utilisée pour envoyer les données au programme CGI. Il s'agit de GET,HEAD,POST,PUT ou DELETE. Dans le cas de la méthode GET, les données sont encodées avec l'URL de requête, dans le cas de la méthode POST, par contre, les données présentes dans le corps de la requête sont accessibles via le fichier de flux d'entrée standard nommé STDIN
HTTP_USER_AGENT Cette variable permet d'avoir des informations sur le type de navigateur utilisé par le client, ainsi que son système d'exploitation
PATH Il s'agit du chemin d'accès au script CGI
PATH_INFO Il s'agit de la partie de l'URL (ayant servie à accéder au script CGI) située avant le point d'interrogation. Il s'agit donc du chamin d'accès au script CGI sans prendre en compte les données supplémentaires
PATH_TRANSLATED Il s'agit du chemin d'accès absolu au script CGI, c'est-à-dire l'emplacement absolu du script sur le serveur
QUERY_STRING Il s'agit de la partie de l'URL (ayant servie à accéder au script CGI) située après le point d'interrogation. C'est de cette manière que sont transmises les données d'un formulaire dans le cas de la méthode GET
REMOTE_ADDR Cette variable contient l'adresse IP du client appelant le script CGI
REMOTE_USER Cette variable n'existe que si le client a été soumis à une authentification, et contient alors le couple nom_d_utilisateur/mot_de_passe
SCRIPT_FILENAME Chemin d'accès complet au script CGI
SCRIPT_NAME Chemin d'accès relatif (par rapport au chemin d'accès à la racine web) au script CGI
SERVER_PORT port TCP auxquel les données ont été envoyées (généralement le port 80)
SERVER_PROTOCOL Nom et version du protocole utilisé pour envoyer la requête au script CGI

    Les variables d'environnement dépendant du serveur

Variable d'environnement Description
DATE_GMT Date actuelle au format GMT
DATE_LOCAL Date actuelle au format local
DOCUMENT_ROOT Racine des documents Web sur le serveur
GATEWAY_INTERFACE Version des spécifications CGI utilisées par le serveur
HTTP_HOST Nom de domaine du serveur
SERVER_ADMIN Adresse de l'administrateur du serveur
SERVER_SOFTWARE Type (logiciel) du serveur web

    Affichage des variables d'environnement

Il est possible de créer un script permettant de visualiser l'ensemble des variables d'environnement. En voici un écrit en Perl:

#!/usr/local/bin/perl
print "content-type: text/html\n\n";
print "<HTML>\n";
print "<HEAD><TITLE>Variables d'environnement</TITLE></HEAD>\n";
print "<BODY>\n";

foreach $key (sort(keys %ENV)) {
print "$key = $ENV($key)<BR>\n";
}

print "</BODY>";






Retour au sommaire



Source : www.commentcamarche.net

© Copyright 2003 Computer Science Association
ce site est un produit des étudiants en Informatique de l'université de Yaoundé I, et à pour but de permettre au COMSAS d'accomplir sa tâche qui n'est autre que la vulgarisation de l'informatique et l'instauration d'un esprit de partage et de solidarité entre les étudiants.
1
Hosted by www.Geocities.ws