CGI

De Justine's wiki
Aller à la navigation Aller à la recherche

https://www.tutorialspoint.com/python3/python_cgi_programming.htm

Présentation de l'interface CGI

Un script CGI (Common Gateway Interface, traduisez interface de passerelle commune) est un programme exécuté par le serveur web (on dit généralement « côté serveur »), permettant d'envoyer au navigateur de l'internaute un code HTML créé automatiquement par le serveur (basé par exemple sur une autre application, telle qu'un système de gestion de base de données, d'où le nom de passerelle).

L'intérêt est de pouvoir proposer des pages dynamiques. L'application la plus fréquente consiste à avoir des formulaire html.

Programmation CGI

Un programme CGI peut être écrit dans n'importe quel langage capable de:

  • Lire des flux en entrée
  • Traiter des chaînes de caractère
  • Ecrire sur la sortie standard
  • Est exécutable par le serveur web.

Lorsque le serveur reçoit une requête, celui-ci va examiner l'extension du fichier demandé afin de déterminer son action :

  • Dans le cas d'un fichier HTML (extension .htm ou .html) : le serveur va générer des en-têtes de réponse HTTP qu'il va envoyer au navigateur demandant un fichier, puis envoyer le fichier HTML.
  • Dans le cas d'un fichier CGI écrit en Perl (extension .pl) : le serveur va exécuter l'interpréteur Perl, celui-ci va interpréter le code contenu dans le fichier portant l'extension .pl, puis envoyer les données au serveur, qui va les envoyer au navigateur, comme dans le cas d'un fichier HTML
  • Dans le cas d'un fichier CGI écrit en langage C (extension .exe sous Windows) : le serveur va exécuter le CGI, puis envoyer vers le navigateur les données que le programme lui aura transmis.

Ainsi, un script CGI reçoit une requête d'un serveur web, les traite, et renvoie des en-têtes de réponse et des tags HTML. Il commence par envoyer un en-tête HTTP appellé type MIME, qui détermine le type de contenu envoyé au serveur :

  • html :
content-type : text/html
  • Un gif:
content-type : image/gif
  • Un fichier quicktime :
content-type : text/quicktime

etc...

Un script de CGI (très) simple en Python

Configuration de httpd

Il faut d'abord s'assurer que httpd est configuré pour utiliser notre script de CGI. Tous les script de CGI sont dans un répertoire pré-configuré (le "CGI directory"), par convention /var/www/. Pour en faire tourner un autre :

<syntaxhighlight lang='bash'> <VirtualHost *:80>

   #ServerName  www.exemple.org
   #ServerAlias exemple.fr web.exemple.org
   #ServerAdmin admin@exemple.fr
   DocumentRoot /var/www/exemple.org
   <Directory /var/www/exemple.org>
       AllowOverride All
       Require all granted
   </Directory>
   <Directory "/var/www/cgi-bin">
      AllowOverride None
      Options ExecCGI
      Order allow,deny
      Allow from all
   </Directory>
   <Directory "/var/www/cgi-bin">
   Options All
   </Directory>

</VirtualHost>

</syntaxhighlight>

Et le script en lui-même : <syntaxhighlight lang='python'>

  1. !/usr/bin/env python3
  2. coding: utf-8

print("Content-type:text/html\r\n\r\n") print('<html>') print('<head>') print('<title>Hello Word - First CGI Program</title>') print('</head>') print('<body>')

print('

Hello Word! This is my first CGI program

')

print('</body>') print('</html>') </syntaxhighlight>