763 votes

J’ai jamais vraiment compris : ce qui est CGI ?

CGI est un Comman Interface de Passerelle. Comme le nom le dit, c'est un "bien commun" gateway interface pour tout. Il est donc trivial et naïve de ce nom. J'ai l'impression que je l'ai compris et je l'ai ressenti à chaque fois que j'ai rencontré ce mot. Mais franchement, je n'ai pas. Je suis toujours confus.

Je suis un programmeur PHP. J'ai fait beaucoup de développement web.

utilisateur (le client) demande de page ---> serveur(->PHP interprète) ----> côté Serveur(PHP) Script ---> Serveur MySQL.

Maintenant dire que mon Script PHP permet de récupérer les résultats de Serveur MySQL && MATLAB Serveur && de Quelques autres serveur.

Alors, maintenant, le Script PHP est le CGI? parce que son interface pour le entre le serveur web et Tous les autres serveurs? Je ne sais pas. Parfois, ils appellent CGI, de la technologie et de othertimes qu'ils appellent un programme CGI ou someother serveur.

  • Qu'est-ce exactement CGI?

  • Quel est le big deal avec des /cgi-bin/*.cgi? Whats up avec cela? Je ne sais pas qu'est-ce que c' cgi-bin répertoire sur le serveur. Je ne sais pas pourquoi ils ont *.cgi extensions.

  • Pourquoi Perl est toujours dans le chemin. CGI & Perl (langage). Aussi, je ne sais pas ce qui se passe avec ces deux. Presque tout le temps que j'entends ces deux dans la combinaison "CGI & Perl". Ce livre est un autre excellent exemple de la Programmation CGI avec Perl Pourquoi pas "CGI Programmation avec PHP/JSP/ASP". Je n'ai jamais vu de telles choses.

  • La Programmation CGI en C cela me confond beaucoup de choses. en C?? Sérieux?? Je ne sais pas quoi dire. Je suis juste confus. "C"?? Cela change tout. Le programme doit être compilé et exécuté. Cela change mon point de vue de la programmation web. Quand dois-je remplir? Comment le programme est exécuté (parce que ce sera un code machine, de sorte qu'il doit exécuter comme un processus indépendant). Comment est-il communiquer avec le serveur web? L'IPC? et l'interfaçage avec tous les serveurs (dans mon exemple MATLAB & MySQL) à l'aide de socket de programmation? Je suis perdu!!

  • Ils disent que CGI est amorti. De ses pas de plus dans l'utilisation. Est-ce donc? Qu'est-ce que sa dernière mise à jour?

Une fois, j'ai couru dans une situation où j' dû donner la requête HTTP PUT l'accès à l' serveur web (Apache HTTPD). C'est un long de retour. Donc, comme je me souviens bien c'est ce que j'ai fait:

  1. Édité le fichier de configuration d'Apache HTTPD pour dire serveur web de passe toutes les demandes HTTP PUT pour certains put.php ( J'ai dû écrire ce PHP le script)

  2. Mettre en œuvre put.php pour répondre à la demande (enregistrer le fichier à l'emplacement mentionné)

Les gens disent que j'ai écrit un Script CGI. Sérieusement, je n'ai pas la moindre idée de ce que ils étaient en train de parler.

  • Ai-je vraiment écrire des scripts CGI?

J'espère que vous avez compris ce que ma confusion. (Parce que moi même je ne sais pas où je suis confus). Je demande à vous les gars pour garder votre réponse aussi simple que possible. Je ne comprends vraiment pas toute la fantaisie de la terminologie technique. Au moins pas dans ce cas.

EDIT:

J'ai trouvé ce tutoriel étonnante "Programmation CGI Est Simple!" - CGI Tutoriel Qui explique les concepts de la plus simple possible. Après la lecture de cet article, vous voudrez peut-être lire de commencer avec la Programmation CGI en C pour compléter votre compréhension réelle des exemples de code. J'ai également ajouté ces liens de ce tutoriel à l'article de Wikipedia : http://en.wikipedia.org/wiki/Common_Gateway_Interface

438voto

Vinko Vrsalovic Points 116138

CGI est une interface qui indique au serveur de savoir comment passer des données en arrière et en avant vers et à partir d'une application. Plus précisément, il décrit comment les informations de la demande est transmise dans les variables d'environnement (tels que le type de la demande, à distance de l'adresse IP), comment le reqeust corps est transmis via l'entrée standard, et de la façon dont la réponse est transmis via la sortie standard. Vous pouvez vous référer à la 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, si pas tous, les serveurs peuvent être configurés pour exécuter un programme en tant que 'CGI'. Cela signifie que le serveur web, sur réception d'une demande, transmettra les données à un programme spécifique, le réglage de certaines variables d'environnement et mobiliser les paramètres via l'entrée standard et la sortie standard, de sorte que le programme peut savoir où et quoi chercher.

Le principal avantage est que vous pouvez exécuter n'IMPORTE quel code exécutable à partir du web, étant donné qu'à la fois le serveur et le programme de savoir comment CGI travaille. C'est pourquoi vous pourriez écrire des programmes web en C ou en Bash avec un CGI-activé le serveur web. Que, 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 avez probablement utilisé un autre, spécifique pour PHP, les moyens de communication entre vos scripts et le serveur web, ce qui, comme vous le mentionnez dans votre question, est un intégré à l'interprète appelé mod_php.

Afin de répondre à vos questions:

Qu'est-ce exactement CGI?

Voir ci-dessus.

Quel est le big deal avec /cgi-bin/*.cgi? Whats up avec cela? Je ne sais pas qu'est-ce que ce répertoire cgi-bin sur le serveur. Je ne sais pas pourquoi ils ont *.cgi extensions.

C'est le lieu traditionnel des programmes cgi, de nombreux serveurs web viennent avec ce répertoire pré configurées pour s'exécuter tous les binaires comme des programmes CGI. L' .cgi extension, désigne un fichier exécutable qui est prévu de travailler avec le CGI.

Pourquoi Perl est toujours dans le chemin. CGI & Perl (langage). Aussi, je ne sais pas ce qui se passe avec ces deux. Presque tout le temps que j'entends ces deux dans la combinaison "CGI & Perl". Ce livre est un autre excellent exemple de la Programmation CGI avec Perl Pourquoi pas "CGI Programmation avec PHP/JSP/ASP". Je n'ai jamais vu de telles choses.

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

La Programmation CGI en C cela me confond beaucoup de choses. en C?? Sérieux?? Je ne sais pas quoi dire. Je suis juste confus. "C"?? Cela change tout. Le programme doit être compilé et exécuté. Cela change mon point de vue de la programmation web. Quand dois-je remplir? Comment le programme est exécuté (parce que ce sera un code machine, de sorte qu'il doit exécuter comme un processus indépendant). Comment est-il communiquer avec le serveur web? L'IPC? et l'interfaçage avec tous les serveurs (dans mon exemple MATLAB & MySQL) à l'aide de socket de programmation? Je suis perdu!!

Vous compilez le fichier exécutable une fois, le serveur exécute le programme et transmet les données à la demande pour le programme et les sorties le reçu de réponse. CGI précise qu'une instance de programme sera lancé pour chaque demande. C'est pourquoi, CGI est inefficace et la nature des obsolète de nos jours.

Ils disent que CGI est obsolète. De ses pas de plus dans l'utilisation. Est-ce donc? Qu'est-ce que sa dernière mise à jour?

CGI est toujours utilisé lorsque la performance n'est pas primordiale et un moyen simple de l'exécution de code est nécessaire. Il est inefficace pour les raisons précédemment indiquées, et il y a plus de moyens modernes de l'exécution d'un programme dans un site web d'environnement. Actuellement, le plus célèbre est FastCGI.

67voto

Quentin Points 325526

Qu'est-ce exactement CGI?

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

Quel est le big deal avec /cgi-bin/*.cgi?

Pas une grosse affaire. C'est juste une convention.

Je ne sais pas qu'est-ce que ce répertoire cgi-bin sur le serveur. Je ne sais pas pourquoi ils ont *.cgi extensions.

Le serveur est de savoir quoi faire avec le fichier (c'est à dire le traiter comme un programme à exécuter à la place de quelque chose de simplement servir). Avoir une .l'extension html indiquant d'utiliser un texte/html type de contenu. Avoir une .cgi extension indique pour l'exécuter comme un programme.

En gardant les exécutables dans un répertoire distinct donne une protection supplémentaire contre l'exécution incorrecte des fichiers et/ou de servir des programmes CGI en tant que données brutes dans le cas où le serveur est mal configuré.

Pourquoi Perl est toujours dans le chemin.

Il n'a pas. Perl est juste grand et populaire en même temps que le CGI.

Je n'ai pas utilisé Perl CGI depuis des années. J'ai été en utilisant mod_perl pour une longue période, et tendent vers FastCGI ces jours-ci.

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

CGI n'est pas très efficace. De meilleures méthodes pour parler à des programmes à partir de serveurs web est arrivé à peu près en même temps que le PHP. JSP, ASP sont les différentes méthodes pour en parler à des programmes.

La Programmation CGI en C cela me confond beaucoup de choses. en C?? Sérieux??

C'est un langage de programmation, pourquoi pas?

Quand dois-je remplir?

  1. Écrire du code
  2. Compiler
  3. URL d'accès au
  4. Serveur web s'exécute le programme

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

Il n'a pas à s'exécuter comme un processus indépendant (vous pouvez écrire des modules Apache en C), mais l'ensemble du concept de CGI, c'est qu'il lance un processus externe.

Comment est-il communiquer avec le serveur web? L'IPC?

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

et l'interfaçage avec tous les serveurs (dans mon exemple MATLAB & MySQL) à l'aide de socket la programmation?

À l'aide de toutes les méthodes que vous aimez et sont pris en charge.

Ils disent que CGI est amorti. De ses pas de plus dans l'utilisation. Est-ce donc?

CGI est inefficace, lent et simple. Il est rarement utilisé, lorsqu'il est utilisé, c'est parce qu'il est simple.

Qu'est-ce que sa dernière mise à jour?

1.1

41voto

Charles Bailey Points 244082

CGI est une spécification d'interface entre un serveur web (serveur HTTP) et un programme exécutable de quelque type que ce soit pour gérer une demande particulière.

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

Pour un tandis que CGI a été un IETF Projet Internet et en tant que tel a une date d'expiration. Il a expiré sans mise à jour, donc il n'y a pas de CGI "standard". C'est maintenant une information RFC, mais que ces documents pratique courante et n'est pas une norme elle-même. rfc3875

Les programmes de mise en œuvre d'une interface CGI peut être écrit dans n'importe quel langage exécutable sur la machine cible. Ils doivent être en mesure d'accéder à des variables d'environnement et généralement de l'entrée standard et qu'ils génèrent leur sortie sur la sortie standard.

Les langages compilés comme C étaient couramment utilisés, comme l'étaient les langages de script comme perl, souvent à l'aide de bibliothèques pour rendre l'accès à l'environnement CGI plus facile.

Un des gros inconvénients de CGI est qu'un nouveau programme est généré pour chaque demande donc le maintien de l'état entre les demandes pourraient être un important problème de performance. L'état peut être manipulé dans des cookies ou codée dans une URL, mais si il arrive à grand qu'il doit être stocké ailleurs, et la clé de encodée url d'informations ou d'un cookie. Chaque CGI invocation aurait alors pour recharger l'état enregistré à partir d'un magasin quelque part.

Pour cette raison, et pour beaucoup une interface simple pour les demandes et les séances de, mieux intégrée des environnements entre les serveurs web et les applications sont de plus en plus populaire. Les environnements comme un moderne de l'implémentation php avec apache intégrer la langue cible beaucoup mieux avec serveur web et de fournir un accès à la demande et des séances d'objets qui sont nécessaires pour servir efficacement les requêtes http. Ils offrent beaucoup plus facile et plus riche la façon d'écrire des "programmes" pour gérer les requêtes HTTP.

Si vous avez écrit un script CGI dépend plutôt de l'interprétation. Il a certainement fait le travail de l'un, mais il est beaucoup plus l'habitude d'utiliser php en tant que module dans lequel l'interface entre le script et le serveur n'est pas strictement une interface CGI.

18voto

Michael Borgwardt Points 181658

Le CGI est spécifié dans la RFC 3875, bien que ce soit plus tard "officiel" de la codification de l'original NCSA document. Fondamentalement, CGI définit un protocole pour transmettre des données au sujet d'une requête HTTP à partir d'un serveur web à un programme pour traiter n'importe quel programme, dans toutes les langues. Au moment de la spécification a été écrit (1993), la plupart des serveurs web ne contenait que des pages statiques, les "web apps" étaient rares et chose nouvelle, il m'a donc semblé naturel de tenir à l'écart de la "normale" du contenu statique, comme dans un cgi-bin répertoire en dehors de la statique du contenu, et de les avoir fin en .cgi.

En ce moment, ici aussi étaient pas "des langages de programmation web" comme PHP, et C était le dominant portable langage de programmation - de sorte que beaucoup de gens ont écrit leurs scripts CGI en C. Mais Perl rapidement s'est avéré être un meilleur ajustement pour ce genre de chose, et CGI est devenu presque synonyme de Perl pour un certain temps. Puis il est venu des Servlets Java, PHP et un tas d'autres et a pris une grande partie de Perl part de marché.

13voto

prodigitalson Points 38549

CGI essentiellement transmet la demande de congé à tout interprète qui est configuré avec le serveur web, Ce qui pourrait être Perl, Python, PHP, Ruby, C à peu près tout. Perl a été la plus fréquente de retour dans la journée, c'est pourquoi vous voyez souvent en référence au CGI.

CGI n'est pas mort. En fait, la plupart des grandes sociétés d'hébergement exécuter PHP comme CGI, par opposition à mod_php, car il permet à l'utilisateur de niveau config et quelques autres choses alors qu'il est plus lent que le mod_php. Ruby et Python sont également généralement exécuter en tant que CGI. ils clé de la différence ici est que d'un module serveur s'exécute en tant que partie intégrante du logiciel de serveur - où, comme avec CGI son totalement en dehors du serveur Le serveur utilise le module CGI afin de déterminer la façon de transmettre et de recevoir des données à l'extérieur de l'interprète.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X