Aller au contenu

« Common Gateway Interface » : différence entre les versions

Un article de Wikipédia, l'encyclopédie libre.
Contenu supprimé Contenu ajouté
légende de la première image
 
(41 versions intermédiaires par 27 utilisateurs non affichées)
Ligne 1 : Ligne 1 :
{{Langue du titre|en}}
La '''''Common Gateway Interface''''' (littéralement « Interface passerelle commune »), généralement [[abréviation|abrégée]] '''CGI''', est une interface utilisée par les [[serveur HTTP|serveurs HTTP]]. Elle a été normalisée et décrite en version 1.1 dans la [[RFC]] 3875<ref>[http://www.ietf.org/rfc/rfc3875.txt RFC3875: The Common Gateway Interface (CGI) Version 1.1]</ref>.
{{Voir homonymes|CGI}}
[[Fichier:CGI common gateway interface.png|thumb|Schéma de fonctionnement du Common Gateway Interface.]]


La '''''{{Langue|en|Common Gateway Interface}}''''' (littéralement « Interface de passerelle commune »), généralement [[abréviation|abrégée]] '''CGI''', est une [[interface (informatique)|interface]] utilisée par les [[serveur HTTP|serveurs HTTP]]. Elle a été normalisée par la [[RFC]] 3875<ref>[http://www.ietf.org/rfc/rfc3875.txt RFC3875: The Common Gateway Interface (CGI) Version 1.1].</ref>.
==Principe==
Au lieu d'envoyer le contenu d'un [[Fichier (informatique)|fichier]] (page HTML, image...), un serveur HTTP utilisant une interface CGI exécute un [[programme (informatique)|programme]] puis retourne le contenu généré, comme s'il s'agissait d'un contenu de fichier. CGI est le [[standard industriel]] qui indique comment transmettre la requête du serveur HTTP au programme et comment récupérer la réponse générée. CGI permet de passer des paramètres au programme, de telle manière qu'il puisse en tenir compte pour générer les données.
Un exemple classique de paramètre est la [[chaîne de caractères]] contenant les termes recherchés auprès d'un [[moteur de recherche]].


== Principe de fonctionnement ==
==Caractéristiques==
Une des caractéristiques de l'interface CGI est d'être indépendante de tout langage. Même si le [[Perl (langage)|langage Perl]] a historiquement été souvent utilisé pour en écrire, il est possible d'écrire un [[programme (informatique)|programme]] CGI en [[C (langage)|C]], [[Python (langage)|Python]], [[Gambas (langage)|Gambas]], [[PHP]], en script [[Shell (informatique)|shell]], en [[Visual Basic|VB]] ou en tout autre [[langage de programmation]].


Au lieu d'envoyer le contenu d'un [[Fichier (informatique)|fichier]] (fichier HTML, image), le serveur HTTP exécute un [[programme (informatique)|programme]], puis retourne le contenu généré. CGI est le [[standard industriel]] qui indique comment transmettre la requête du serveur HTTP au programme, et comment récupérer la réponse générée. Un exemple classique de paramètre est la [[chaîne de caractères]] contenant les termes recherchés auprès d'un [[moteur de recherche]].
Du point de vue du serveur HTTP, il est nécessaire de le configurer pour associer l'exécution du programme CGI à certaines [[URL]]s réclamées par les navigateurs. Par défaut, les serveurs se contentent généralement de retourner le contenu des fichiers.


Une des caractéristiques de l'interface CGI est d'être indépendante de tout [[langage de programmation]], du fait qu'elle utilise les [[flux standard]] et les [[variables d'environnement]]. Même si le [[Perl (langage)|langage Perl]] a historiquement été souvent utilisé pour écrire un [[programme (informatique)|programme]] CGI, il est possible d'en écrire en [[C (langage)|C]], [[Python (langage)|Python]], [[PHP]], script [[Shell (informatique)|shell]], en [[Java (programming language)|Java]] ou en tout autre [[langage de programmation]].
==Exemple d'utilisation==
Un exemple de programme CGI est celui qui fait fonctionner l'[[annuaire web]] ''[[Open Directory Project]]''. Lorsqu'un visiteur soumet une requête au [[site web]], le serveur HTTP transmet par CGI le terme qui a été saisi dans le formulaire de la [[page web]]. Le programme CGI cherche alors dans sa [[base de données]] tous les sites contenant le terme, crée une page [[Hypertext markup language|HTML]] contenant les résultats et la retourne au serveur HTTP qui va la transmettre au navigateur..


Du point de vue du serveur HTTP, il est nécessaire de le configurer pour associer l'exécution du programme CGI à certaines [[URL]]. [[Valeur par défaut|Par défaut]], les serveurs se contentent généralement de retourner le contenu des fichiers.
==Limitations et évolutions==

Comme cette technologie requiert qu'une nouvelle copie du programme soit lancée à chaque requête, elle surcharge rapidement les serveurs. Ceci a eu pour effet la création d'autres technologies plus flexibles et efficaces. [[FastCGI]] est une évolution basée sur CGI qui permet de ne lancer le programme CGI qu'une seule fois, et non pas à chaque requête concernée ; cette technique nécessite une petite bibliothèque qui a été développée pour les principaux langages utilisés (C, Perl...). Une autre solution est d'intégrer les langages directement dans le serveur HTTP sous forme de modules, ceci nécessitant une adaptation bien plus lourde des interpréteurs et qui est propre au serveur HTTP. C'est le cas avec [[Apache HTTP Server|Apache]] pour des langages couramment employés pour les applications Web, comme [[PHP]] (configuré en module) ou Perl (mod_perl). Python peut également s'utiliser en mode embarqué (mod_python ou mod_wsgi), mais est plus à l'aise dans un processus séparé, tout comme Java.
=== Limitations et évolutions ===
Comme cette technologie requiert le lancement d'un nouveau [[processus (informatique)|processus]] à chaque requête, elle entraîne une charge de traitement évitable. Ceci a eu pour effet la création d'autres technologies plus efficaces. [[FastCGI]] est une évolution basée sur CGI qui permet de ne lancer le programme CGI qu'une seule fois, et non pas à chaque requête ; cette technique nécessite une petite [[bibliothèque logicielle]], qui a été développée pour les principaux langages utilisés (C, Perl, Purebasic…).

Une autre solution consiste à intégrer le programme directement dans le serveur HTTP sous la forme d'un module, ce qui nécessite une adaptation sensiblement plus lourde, propre au serveur HTTP. C'est le cas avec [[Apache HTTP Server|Apache]] qui propose des dizaines de modules pour interpréter des langages, se connecter à des bases de données, etc.

== Historique ==
L'interface CGI existe depuis 1993. Elle a d'abord été documentée par le [[National Centre for Supercomputing Applications]] américain [[NCSA]], qui était l'éditeur du [[serveur HTTP]] [[NCSA HTTPd]], le plus courant à l'époque. Elle était disponible à l'[[URL]] http://hoohoo.ncsa.uiuc.edu/cgi/. FastCGI a été présenté en 1996 à la conférence WWW5 à [[Paris]]. La {{RFC|3875}} a été écrite en 2004 pour formaliser CGI/1.1.

== Exemple d'utilisation ==
Un exemple de programme CGI est celui qui fait fonctionner l'[[annuaire web]] ''[[Open Directory Project]]''. Lorsqu'un visiteur soumet une requête au [[site web]], le serveur HTTP transmet par CGI le terme qui a été saisi dans le formulaire de la [[page web]]. Le programme CGI cherche alors dans sa [[base de données]] tous les sites contenant le terme, crée un document [[Hypertext markup language|HTML]] contenant les résultats et le retourne au serveur HTTP qui va la transmettre au [[navigateur web]].


== Notes et références ==
== Notes et références ==
Ligne 20 : Ligne 28 :


== Voir aussi ==
== Voir aussi ==
{{Autres projets|wikibooks=Apache/CGI}}
=== Liens internes ===
=== Articles connexes ===
* [[Simple Common Gateway Interface]]
* [[Simple Common Gateway Interface]]
* [[FastCGI]]
* [[FastCGI]]
Ligne 27 : Ligne 36 :
* [[NCSA HTTPd]]
* [[NCSA HTTPd]]
* [[ISAPI]]
* [[ISAPI]]
* [[serveur HTTP]]
* [[Serveur HTTP]]


=== Liens externes ===
=== Liens externes ===
* [http://hoohoo.ncsa.uiuc.edu/cgi/ Documentation du NCSA] (en [[anglais]])
* {{en}} [http://www.ncsa.illinois.edu/ Site du NCSA en Illinois USA]


{{portail|informatique}}
{{Palette|API web}}
{{Portail|informatique}}


[[Catégorie:Langage pour pages Web dynamiques]]
[[Catégorie:Langage pour pages Web dynamiques]]
[[Catégorie:Serveur web]]
[[Catégorie:Serveur web]]

[[ar:واجهة المعابر العامة]]
[[bar:CGI]]
[[cs:Common Gateway Interface]]
[[da:Common Gateway Interface]]
[[de:Common Gateway Interface]]
[[en:Common Gateway Interface]]
[[eo:CGI]]
[[es:Interfaz de entrada común]]
[[et:CGI]]
[[eu:Common Gateway Interface]]
[[fi:CGI]]
[[he:Common Gateway Interface]]
[[hi:कॉमन गेटवे इंटरफेस]]
[[hu:CGI (protokoll)]]
[[id:Common Gateway Interface]]
[[is:Common Gateway Interface]]
[[it:Common Gateway Interface]]
[[ja:Common Gateway Interface]]
[[ko:공용 게이트웨이 인터페이스]]
[[lt:CGI]]
[[nl:Common Gateway Interface]]
[[no:Common Gateway Interface]]
[[pl:CGI]]
[[pt:CGI]]
[[ru:CGI]]
[[sk:Common Gateway Interface]]
[[sl:Common Gateway Interface]]
[[sv:Common Gateway Interface]]
[[ta:பொதுவான கேட்வே இடைமுகம்]]
[[te:కామన్ గేట్వే ఇంటర్ఫేస్]]
[[uk:CGI]]
[[zh:通用网关接口]]

Dernière version du 10 novembre 2023 à 10:11

Schéma de fonctionnement du Common Gateway Interface.

La Common Gateway Interface (littéralement « Interface de passerelle commune »), généralement abrégée CGI, est une interface utilisée par les serveurs HTTP. Elle a été normalisée par la RFC 3875[1].

Principe de fonctionnement

[modifier | modifier le code]

Au lieu d'envoyer le contenu d'un fichier (fichier HTML, image), le serveur HTTP exécute un programme, puis retourne le contenu généré. CGI est le standard industriel qui indique comment transmettre la requête du serveur HTTP au programme, et comment récupérer la réponse générée. Un exemple classique de paramètre est la chaîne de caractères contenant les termes recherchés auprès d'un moteur de recherche.

Une des caractéristiques de l'interface CGI est d'être indépendante de tout langage de programmation, du fait qu'elle utilise les flux standard et les variables d'environnement. Même si le langage Perl a historiquement été souvent utilisé pour écrire un programme CGI, il est possible d'en écrire en C, Python, PHP, script shell, en Java ou en tout autre langage de programmation.

Du point de vue du serveur HTTP, il est nécessaire de le configurer pour associer l'exécution du programme CGI à certaines URL. Par défaut, les serveurs se contentent généralement de retourner le contenu des fichiers.

Limitations et évolutions

[modifier | modifier le code]

Comme cette technologie requiert le lancement d'un nouveau processus à chaque requête, elle entraîne une charge de traitement évitable. Ceci a eu pour effet la création d'autres technologies plus efficaces. FastCGI est une évolution basée sur CGI qui permet de ne lancer le programme CGI qu'une seule fois, et non pas à chaque requête ; cette technique nécessite une petite bibliothèque logicielle, qui a été développée pour les principaux langages utilisés (C, Perl, Purebasic…).

Une autre solution consiste à intégrer le programme directement dans le serveur HTTP sous la forme d'un module, ce qui nécessite une adaptation sensiblement plus lourde, propre au serveur HTTP. C'est le cas avec Apache qui propose des dizaines de modules pour interpréter des langages, se connecter à des bases de données, etc.

L'interface CGI existe depuis 1993. Elle a d'abord été documentée par le National Centre for Supercomputing Applications américain NCSA, qui était l'éditeur du serveur HTTP NCSA HTTPd, le plus courant à l'époque. Elle était disponible à l'URL http://hoohoo.ncsa.uiuc.edu/cgi/. FastCGI a été présenté en 1996 à la conférence WWW5 à Paris. La RFC 3875[2] a été écrite en 2004 pour formaliser CGI/1.1.

Exemple d'utilisation

[modifier | modifier le code]

Un exemple de programme CGI est celui qui fait fonctionner l'annuaire web Open Directory Project. Lorsqu'un visiteur soumet une requête au site web, le serveur HTTP transmet par CGI le terme qui a été saisi dans le formulaire de la page web. Le programme CGI cherche alors dans sa base de données tous les sites contenant le terme, crée un document HTML contenant les résultats et le retourne au serveur HTTP qui va la transmettre au navigateur web.

Notes et références

[modifier | modifier le code]

Sur les autres projets Wikimedia :

Articles connexes

[modifier | modifier le code]

Liens externes

[modifier | modifier le code]