Question Qu'est-ce que Common Gateway Interface (CGI)?


CGI est une interface de passerelle commune. Comme son nom l'indique, c'est une interface de passerelle "commune" pour tout. C'est tellement trivial et naïf du nom. Je sens que j'ai compris cela et j'ai ressenti cela chaque fois que j'ai rencontré ce mot. Mais franchement, je ne l'ai pas fait. Je suis encore confus.

Je suis un programmeur PHP avec une expérience de développement web.

requête utilisateur (client) pour la page ---> serveur web (-> PHP embarqué   interprète) ----> Côté serveur (PHP) Script ---> Serveur MySQL.

Maintenant, dis que mon script PHP peut récupérer les résultats du serveur MySQL et du serveur MATLAB et d'autres serveurs.

Donc, maintenant PHP Script est le CGI? Parce que son interface pour l'entre serveur et Tous les autres serveurs? Je ne sais pas. Parfois, ils appellent CGI, une technologie et parfois ils appellent CGI un programme ou un autre serveur.

  • Qu'est-ce que CGI exactement?

  • Quel est le gros problème avec /cgi-bin/*.cgi? Qu'est-ce qui se passe avec ça? Je ne sais pas ce que c'est cgi-bin répertoire sur le serveur pour. Je ne sais pas pourquoi ils ont des extensions * .cgi.

  • Pourquoi Perl vient toujours dans le chemin. CGI & Perl (langage). Je ne sais pas non plus ce qui se passe avec ces deux-là. Presque tout le temps je continue d'entendre ces deux en combinaison "CGI & Perl". Ce livre est un autre excellent exemple Programmation CGI avec Perl. Pourquoi pas "Programmation CGI avec PHP / JSP / ASP"? Je n'ai jamais vu de telles choses.

  • Programmation CGI en C, me confond beaucoup. "en C"Sérieusement, je ne sais pas quoi dire, je suis juste confus."en C"Cela change tout: le programme doit être compilé et exécuté Cela change complètement ma vision de la programmation web Quand compiler? Comment le programme est exécuté (parce que ce sera un code machine, il doit donc s'exécuter comme un processus indépendant) Comment communique-t-il avec le serveur web? IPC? et interfaçage avec tous les serveurs (dans mon exemple MATLAB & MySQL) en utilisant la programmation socket? Je suis perdu !!

  • Les gens disent que CGI est obsolète et n'est plus utilisé. Est-ce vrai? Quelle est la dernière mise à jour?

Une fois, j'ai rencontré une situation où je   a dû donner l'accès à la requête HTTP PUT à   serveur Web (HTTPD Apache). C'est un long   arrière. Donc, autant que je m'en souvienne, c'est   ce que j'ai fait:

  1. Editer le fichier de configuration d'Apache HTTPD pour indiquer au serveur web de passer   toutes les requêtes HTTP PUT à certains    put.php (Je devais écrire ce PHP   scénario)

  2. Implémentez put.php pour gérer la requête (enregistrez le fichier dans l'emplacement   mentionné)

Les gens ont dit que j'ai écrit un script CGI.   Sérieusement, je n'avais aucune idée de ce que   ils parlaient.

  • Ai-je vraiment écrit CGI Script?

J'espère que vous avez compris ma confusion. (Parce que je ne sais pas moi-même où je suis confus). Je vous demande de garder votre réponse aussi simple que possible. Je ne peux vraiment pas comprendre toute terminologie technique sophistiquée. Au moins pas dans ce cas.

MODIFIER:

J'ai trouvé ce tutoriel incroyable "La programmation CGI est simple!" - Tutoriel CGI, ce qui explique les concepts dans le plus simple manière possible. Après avoir lu cet article, vous voudrez peut-être lire Premiers pas avec la programmation CGI en C pour compléter votre compréhension avec des échantillons de code réels. J'ai également ajouté ces liens à ce tutoriel à l'article de Wikipedia: http://en.wikipedia.org/wiki/Common_Gateway_Interface


696
2018-01-18 21:15


origine


Réponses:


CGI est une interface qui indique au serveur Web comment transmettre des données depuis et vers une application. Plus précisément, il décrit comment les informations de requête sont passées dans les variables d'environnement (type de requête, adresse IP distante), comment le corps de la requête est transmis via l'entrée standard et comment la réponse est transmise via la sortie standard. Vous pouvez vous référer à Spécification CGI pour plus de détails.

Pour utiliser votre image:

user (client) request for page ---> webserver ---[CGI]----> Server side Program ---> MySQL Server.

La plupart sinon tous les serveurs web peuvent être configurés pour exécuter un programme en tant que 'CGI'. Cela signifie que le serveur web, à la réception d'une requête, transmettra les données à un programme spécifique, définissant certaines variables d'environnement et rassemblant les paramètres via une entrée standard et une sortie standard afin que le programme puisse savoir où et quoi rechercher.

Le principal avantage est que vous pouvez exécuter n'importe quel code exécutable sur le Web, étant donné que le serveur Web et le programme savent comment fonctionne CGI. C'est pourquoi vous pouvez écrire des programmes web en C ou Bash avec un serveur web compatible CGI. Cela, et que la plupart des environnements de programmation peuvent facilement utiliser l'entrée standard, la sortie standard et les variables d'environnement.

Dans votre cas vous en avez probablement utilisé un autre, spécifique à PHP, moyen de communication entre vos scripts et le serveur web, ceci, comme vous le dites bien dans votre question, est un interpréteur embarqué appelé mod_php.

Donc, répondant à vos questions:

Qu'est-ce que CGI exactement?

Voir au dessus.

Quel est le gros problème avec /cgi-bin/*.cgi? Quoi de neuf avec ça? Je ne sais pas à quoi sert ce répertoire cgi-bin sur le serveur. Je ne sais pas pourquoi ils ont des extensions * .cgi.

C'est l'endroit traditionnel pour les programmes cgi, de nombreux serveurs web viennent avec ce répertoire pré configuré pour y exécuter tous les binaires en tant que programmes CGI. L'extension .cgi indique un exécutable qui devrait fonctionner via le CGI.

Pourquoi Perl vient toujours dans le chemin. CGI & Perl (langage). Je ne sais pas non plus quoi de ces deux. Presque tout le temps je continue d'entendre ces deux en combinaison "CGI & Perl". Ce livre est un autre excellent exemple de programmation CGI avec Perl Pourquoi pas "Programmation CGI avec PHP / JSP / ASP". Je n'ai jamais vu de telles choses.

Parce que Perl est ancien (plus ancien que PHP, JSP et ASP qui étaient tous là quand CGI était déjà vieux, Perl existait quand CGI était nouveau) et est devenu assez célèbre pour être un très bon langage pour servir des pages dynamiques via le CGI. De nos jours, il existe d'autres alternatives pour exécuter Perl dans un serveur web, principalement mod_perl.

Programmation CGI en C cela me rend très confus. en C ?? Sérieusement?? Je ne sais pas quoi dire. Je suis juste confus. "En C" ?? Cela change tout: le programme doit être compilé et exécuté Cela change complètement mon point de vue de la programmation web Quand dois-je compiler Comment le programme est-il exécuté? code machine, il doit donc s'exécuter comme un processus indépendant.) Comment communique-t-il avec le serveur web? IPC? et s'interface avec tous les serveurs (dans mon exemple MATLAB & MySQL) en utilisant la programmation socket?

Vous compilez l'exécutable une fois, le serveur Web exécute le programme et transmet les données dans la demande au programme et sort la réponse reçue. CGI spécifie qu'une instance de programme sera lancée pour chaque requête. C'est pourquoi CGI est inefficace et plutôt obsolète de nos jours.

Ils disent que CGI est obsolète. Ce n'est plus en usage. Est-ce vrai? Quelle est sa dernière mise à jour?

CGI est toujours utilisé lorsque les performances ne sont pas primordiales et un simple moyen d'exécution du code est requis. Il est inefficace pour les raisons énoncées précédemment et il existe des moyens plus modernes d'exécuter n'importe quel programme dans un environnement Web. Actuellement, le plus célèbre est FastCGI.


393
2018-01-18 21:20



Qu'est-ce que CGI exactement?

Un moyen pour un serveur Web d'obtenir ses données à partir d'un programme (au lieu, par exemple, d'un fichier).

Quel est le gros problème avec /cgi-bin/*.cgi?

Pas de gros problème. C'est juste une convention.

Je ne sais pas à quoi sert ce répertoire cgi-bin sur le serveur.   Je ne sais pas pourquoi ils ont des extensions * .cgi.

Le serveur doit savoir quoi faire avec le fichier (c'est-à-dire le traiter comme un programme à exécuter au lieu de quelque chose à servir simplement). Avoir une extension .html lui dit d'utiliser un type de contenu text / html. Avoir une extension .cgi lui dit de l'exécuter en tant que programme.

Conserver les exécutables dans un répertoire séparé offre une protection supplémentaire contre l'exécution de fichiers incorrects et / ou le traitement de programmes CGI en tant que données brutes au cas où le serveur serait mal configuré.

Pourquoi Perl vient toujours dans le chemin.

Ce n'est pas le cas. Perl était juste gros et populaire en même temps que CGI.

Je n'ai pas utilisé Perl CGI depuis des années. J'utilisais mod_perl depuis longtemps, et tend vers PSGI / Plack avec FastCGI ces jours-ci.

Ce livre est un autre excellent exemple de programmation CGI avec Perl   Pourquoi pas "Programmation CGI avec PHP / JSP / ASP".

CGI n'est pas très efficace. De meilleures méthodes pour parler aux programmes des serveurs Web sont apparues à peu près au même moment que PHP. JSP et ASP sont différentes méthodes pour parler aux programmes.

Programmation CGI en C cela me rend très confus. en C ?? Sérieusement??

C'est un langage de programmation, pourquoi pas?

Quand est-ce que je compile?

  1. Ecrire le code
  2. Compiler
  3. URL d'accès
  4. Webserver exécute le programme

Comment le programme est exécuté (parce que ce sera un code machine, il doit donc s'exécuter comme un processus indépendant).

Il ne doit pas s'exécuter en tant que processus indépendant (vous pouvez écrire des modules Apache en C), mais tout le concept de CGI est qu'il lance un processus externe.

Comment communique-t-il avec le serveur Web? IPC?

STDIN / STDOUT et variables d'environnement - telles que définies dans la spécification CGI.

et interfaçage avec tous les serveurs (dans mon exemple MATLAB & MySQL) en utilisant socket   la programmation?

En utilisant les méthodes que vous aimez et qui sont supportées.

Ils disent que CGI est dépréciée. Ce n'est plus en usage. Est-ce vrai?

CGI est inefficace, lent et simple. Il est rarement utilisé, quand il est utilisé, c'est parce que c'est simple. Si la performance n'est pas un gros problème, alors la simplicité vaut beaucoup.

Quelle est sa dernière mise à jour?

1.1


59
2018-01-18 21:25



CGI est une spécification d'interface entre un serveur Web (serveur HTTP) et un programme exécutable de type quelconque qui doit gérer une requête particulière.

Il décrit comment certaines propriétés de cette requête doivent être communiquées à l'environnement de ce programme et comment le programme doit communiquer la réponse au serveur et comment le serveur doit «compléter» la réponse pour former une réponse valide à la requête HTTP d'origine.

Pendant un certain temps, CGI était une version Internet de l'IETF et, en tant que telle, avait une date d'expiration. Il a expiré sans mise à jour, donc il n'y avait pas de «norme» CGI. Il s'agit maintenant d'une RFC informative, mais en tant que telle, la pratique courante des documents n'est pas une norme en soi. rfc3875.txt, rfc3875.html

Les programmes implémentant une interface CGI peuvent être écrits dans n'importe quelle langue exécutable sur la machine cible. Ils doivent pouvoir accéder Variables d'environnement et habituellement entrée standard et ils génèrent leur sortie sur sortie standard.

Les langages compilés tels que C étaient couramment utilisés comme les langages de script tels que perl, utilisant souvent des bibliothèques pour faciliter l'accès à l'environnement CGI.

L'un des principaux inconvénients de CGI est qu'un nouveau programme est créé pour chaque demande, de sorte que le maintien de l'état entre les demandes pourrait être un problème de performance majeur. L'état peut être géré dans des cookies ou codé dans une URL, mais s'il devient trop volumineux, il doit être stocké ailleurs et saisi à partir d'informations url codées ou d'un cookie. Chaque invocation CGI devrait alors recharger l'état stocké à partir d'un magasin quelque part.

Pour cette raison, et pour une interface très simple aux demandes et aux sessions, les environnements mieux intégrés entre les serveurs Web et les applications sont beaucoup plus populaires. Des environnements comme une implémentation php moderne avec Apache intègrent mieux la langue cible avec le serveur Web et fournissent un accès aux objets de requêtes et de sessions nécessaires pour traiter efficacement les requêtes http. Ils offrent un moyen beaucoup plus facile et plus riche d'écrire des «programmes» pour gérer les requêtes HTTP.

Que vous ayez écrit un script CGI dépend plutôt de l'interprétation. Il a certainement fait le travail d'un, mais il est beaucoup plus habituel d'exécuter php comme un module où l'interface entre le script et le serveur n'est pas strictement une interface CGI.


39
2018-01-18 21:53



Le CGI est spécifié dans RFC 3875, bien que ce soit une codification "officielle" plus tard de l'original Document NCSA. Fondamentalement, CGI définit un protocole pour transmettre des données sur une requête HTTP d'un serveur Web à un programme pour traiter n'importe quel programme, dans n'importe quelle langue. Au moment où la spécification a été écrite (1993), la plupart des serveurs web ne contenaient que des pages statiques, les "applications web" étaient une chose rare et nouvelle, il semblait naturel de les séparer du contenu statique "normal", comme dans un cgi-bin répertoire en dehors du contenu statique, et les avoir fin à .cgi.

À cette époque, il n'y avait pas non plus de «langages de programmation Web» comme PHP, et C était le langage de programmation portable dominant - tant de gens écrivaient leurs scripts CGI en C. Mais Perl s'est rapidement avéré être un meilleur choix pour ce genre de chose, et CGI est devenu presque synonyme de Perl pendant un certain temps. Ensuite, il y a eu Java Servlets, PHP et beaucoup d'autres et a pris une grande part de la part de marché de Perl.


16
2018-01-18 21:27



Jettes un coup d'oeil à CGI dans Wikipedia. CGI est un protocole entre le serveur Web et un programme externe ou un script qui gère l'entrée et génère une sortie qui est envoyée au navigateur.

CGI est simplement un moyen pour un serveur web et un programme de communication, rien de plus, rien de moins. Ici, le serveur gère la connexion réseau et le protocole HTTP et le programme gère l'entrée et génère la sortie qui est envoyée au navigateur. Le script CGI peut être essentiellement n'importe quel programme qui peut être exécuté par le serveur Web et suit le protocole CGI. Ainsi, un programme CGI peut être implémenté, par exemple, en C. Cependant, cela est extrêmement rare, car C n'est pas très bien adapté à la tâche.

/cgi-bin/*.cgi est simplement un chemin où les gens mettent généralement leur script CGI. Les serveurs Web sont généralement configurés par défaut pour récupérer les scripts CGI à partir de ce chemin.

un script CGI peut être implémenté aussi en PHP, mais tous les programmes PHP ne sont pas des scripts CGI. Si webserver a intégré l'interpréteur PHP (par exemple, mod_php dans Apache), la phase CGI est ignorée par un protocole direct plus efficace entre le serveur Web et l'interpréteur.

Que vous ayez implémenté un script CGI ou non dépend de la façon dont votre script est exécuté par le serveur Web.


12
2018-01-18 21:23



Le CGI est un mécanisme par lequel un serveur externe appelle un programme externe pour traiter une demande, des variables d'environnement et une entrée standard étant utilisées pour envoyer les données de demande au programme. La langue exacte dans laquelle le programme externe est écrit n'a pas d'importance, bien qu'il soit plus facile d'écrire des programmes CGI dans certaines langues que dans d'autres.

Puisque les scripts CGI ont besoin d'autorisations d'exécution, httpd par défaut autorise uniquement les programmes CGI dans cgi-bin répertoire à exécuter pour des raisons de sécurité (éventuellement erronées).

La plupart des scripts PHP s'exécutent dans le processus du serveur Web via mod_php. Ce n'est pas CGI.

Le CGI est lent car le programme (et l'interprète associé) doit être démarré par requête. Les alternatives modernes sont l'exécution intégrée, utilisée par mod_php, et les processus de longue durée, utilisés par FastCGI. Une langue donnée peut avoir sa propre façon de mettre en œuvre ces mécanismes, alors assurez-vous de demander autour avant de recourir à CGI.


11
2018-01-18 21:27



CGI transmet essentiellement la demande à tout interprète qui est configuré avec le serveur Web - Cela pourrait être Perl, Python, PHP, Ruby, C à peu près n'importe quoi. Perl était le retour le plus commun dans la journée, c'est pourquoi vous le voyez souvent en référence à CGI.

CGI n'est pas mort. En fait, la plupart des grandes sociétés d'hébergement exécutent PHP en tant que CGI par opposition à mod_php car il offre une configuration au niveau de l'utilisateur et d'autres choses alors qu'il est plus lent que mod_php. Ruby et Python sont généralement exécutés en tant que CGI. La principale différence réside dans le fait qu'un module serveur fait partie du logiciel serveur réel - où, comme avec CGI, il est totalement hors du serveur. Le serveur utilise simplement le module CGI pour déterminer comment transmettre et recevoir des données à l'interpréteur externe.


11
2018-01-18 21:20