CGI:Communication CGI navigateur

Un article de WikiTuto.

Jump to: navigation, search
  • CGI initiation
  1. Introduction
  2. La communication CGI/navigateur
  • Réception et traitement de données par un CGI
  1. Envoyer des données à un script CGI
  2. Variables d'environnement

Sommaire

Ce passage est fortement inspiré de www.commentcamarche.net

Notion d'URL et d'entête HTTP

Une 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://dam.cicrp.jussieu.fr) qu'il est possible d'effectuer des requêtes vers des 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 :

  1. Les données de requête sont envoyées au serveur sous forme d'en-têtes de requête HTTP ;
  2. Lorsque le serveur reçoit la requête, il analyse les en-têtes HTTP, notamment celui permettant de localiser le fichier demandé ;
  3. 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 ;
  4. 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é :

  1. Les données de requête sont envoyées au serveur sous forme d'en-têtes de requête HTTP ;
  2. Lorsque le serveur reçoit la requête, il analyse les en-têtes HTTP, notamment celui permettant de localiser le fichier demandé ;
  3. 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 ;
  4. 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 ;
  5. 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 ;
  6. A la réception du document, le navigateur affiche le résultat à l'écran.

L'envoi de données au navigateur

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 pour les pages créées par ce moyen. Toutefois, étant donné que le serveur renvoie telles quelles au navigateur les informations que lui fournit 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...

Attention, 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 .

Attention, les deux retours chariot sont indispensables :

  1. le premier sert simplement à retourner à la ligne ;
  2. 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 C

Voici un exemple de script tout simple permettant d'afficher une page web sur laquelle est écrite une version à peine évoluée du fameux "Salut tout le monde" :

#include<stdio.h>
main()
{
    printf("Content-type: text/html\n\n");
    printf("<html>\n");
    printf("<head><title>Mon premier script CGI</title></head>\n");
    printf("<body bgcolor=\"#FFFFFF\">\n");
    printf("<br><br><br><br>\n");
    printf("<center>\n");
    printf("<h1>Salut à tous<br>voici mon premier script CGI</h1>\n");
    printf("</center>\n");
    printf("</body>\n");
    printf("</html>\n");
}

Voici maintenant un autre exemple, dans lequel le script CGI fait simplement un redirection :

#include<stdio.h>
main()
{
    printf("location : http://dam.cicrp.jussieu.fr");
}

Sources

Gilles Chagnon

Voir aussi

Boîte à outils
Annuaire gratuitCe site est listé dans la catégorie Informatique : Aide et astuces en informatique Annuaire