¿Qué es la interfaz de puerta de enlace común (CGI)?

745

CGI es una interfaz de puerta de enlace común. Como su nombre lo indica, es una interfaz de puerta de enlace "común" para todo. Es tan trivial e ingenuo por el nombre. Siento que entendí esto y sentí esto cada vez que me encontré con esta palabra. Pero, francamente, no lo hice. Todavía estoy confundido.

Soy un programador PHP con experiencia en desarrollo web.

solicitud del usuario (cliente) para la página ---> servidor web (-> intérprete PHP integrado) ----> Script del lado del servidor (PHP) ---> Servidor MySQL.

Ahora digamos que mi script PHP puede obtener resultados del servidor MySQL y el servidor MATLAB y algún otro servidor.

Entonces, ¿ahora PHP Script es el CGI? ¿Porque su interfaz para el servidor web y todos los demás servidores? No lo sé. Algunas veces llaman a CGI, una tecnología y otras veces llaman a CGI un programa o algún otro servidor.

  • ¿Qué es exactamente CGI?

  • ¿Cuál es el problema con /cgi-bin/*.cgi? ¿Qué pasa con esto? No sé para qué sirve este cgi-bindirectorio en el servidor. No sé por qué tienen extensiones * .cgi.

  • ¿Por qué Perl siempre viene en el camino? CGI y Perl (idioma). Tampoco sé qué pasa con estos dos. Casi todo el tiempo sigo escuchando estos dos en combinación "CGI y Perl". Este libro es otro gran ejemplo de programación CGI con Perl . ¿Por qué no "Programación CGI con PHP / JSP / ASP"? Nunca vi esas cosas.

  • Programación CGI en C , me confunde mucho. " en C "? ¿¿Seriamente?? No se que decir. Estoy confundido. " en C "? Esto lo cambia todo. El programa necesita ser compilado y ejecutado. Esto cambia por completo mi visión de la programación web. ¿Cuándo compilo? Cómo se ejecuta el programa (porque será un código de máquina, por lo que debe ejecutarse como un proceso independiente). ¿Cómo se comunica con el servidor web? IPC? e interactuar con todos los servidores (en mi ejemplo MATLAB y MySQL) usando la programación de socket? ¡¡Estoy perdido!!

  • La gente dice que CGI está en desuso y ya no está en uso. ¿Es eso así? ¿Cuál es la última actualización?

Una vez, me encontré con una situación en la que tenía que dar acceso de solicitud HTTP PUT al servidor web (Apache HTTPD). Es una larga vuelta. Entonces, hasta donde recuerdo, esto es lo que hice:

  1. Edité el archivo de configuración de Apache HTTPD para decirle al servidor web que pasara todas las solicitudes HTTP PUT a algunos put.php(tuve que escribir este script PHP)

  2. Implemente put.php para manejar la solicitud (guarde el archivo en la ubicación mencionada)

La gente decía que escribí un script CGI. En serio, no tenía idea de lo que estaban hablando.

  • ¿Realmente escribí el script CGI?

Espero que hayas entendido cuál es mi confusión. (Porque yo mismo no sé dónde estoy confundido). Les pido que mantengan su respuesta lo más simple posible. Realmente no puedo entender ninguna terminología técnica elegante. Al menos no en este caso.

EDITAR:

Encontré este increíble tutorial "¡La programación CGI es simple!" - Tutorial CGI , que explica los conceptos de la manera más simple posible. Después de leer este artículo, puede leer Introducción a la programación CGI en C para complementar su comprensión con ejemplos de código reales. También he agregado estos enlaces a este tutorial al artículo de Wikipedia: http://en.wikipedia.org/wiki/Common_Gateway_Interface

garras
fuente
99
Ya he visto CGI escrito en Cobol. ¡No se paseen!
Luc M
@Luc M. Interesado. ¿A qué CGI te refieres (dado que existe un raycaster en LINQ ...)?
Joe
15
@claws: Las personas, principalmente de la vieja escuela, llamarán CUALQUIER código, independientemente del método de ejecución real, ejecutado a través del servidor web como un CGI. Lo que realmente escribió es un script PHP, que puede o no ejecutarse a través del protocolo CGI. Su confusión parece provenir del significado ambivalente de CGI, un protocolo para ejecutar código y el código que se ejecuta a través del protocolo (que luego se generalizó para significar cualquier código ejecutado en la web)
Vinko Vrsalovic
1
A mediados de los 90 escribí un par de guiones CGI en HyperCard
Neal Davis
@ Joe Nunca recibí la notificación y hoy, leyendo de nuevo esta publicación, vi tu pregunta. Los CGI se escribieron en OpenVMS como ejecutables independientes (sin marco involucrado o aplicaciones de terceros ...)
Luc M

Respuestas:

427

CGI es una interfaz que le dice al servidor web cómo pasar datos hacia y desde una aplicación. Más específicamente, describe cómo se pasa la información de la solicitud en las variables de entorno (como el tipo de solicitud, la dirección IP remota), cómo se pasa el cuerpo de la solicitud a través de la entrada estándar y cómo se pasa la respuesta a través de la salida estándar. Puede consultar la especificación CGI para más detalles.

Para usar tu imagen:

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

La mayoría, si no todos, los servidores web se pueden configurar para ejecutar un programa como 'CGI'. Esto significa que el servidor web, al recibir una solicitud, reenviará los datos a un programa específico, configurando algunas variables de entorno y ordenando los parámetros a través de la entrada estándar y la salida estándar para que el programa pueda saber dónde y qué buscar.

El principal beneficio es que puede ejecutar CUALQUIER código ejecutable desde la web, dado que tanto el servidor web como el programa saben cómo funciona CGI. Es por eso que podría escribir programas web en C o Bash con un servidor web habilitado para CGI normal. Eso y que la mayoría de los entornos de programación pueden usar fácilmente entrada estándar, salida estándar y variables de entorno.

En su caso, lo más probable es que haya utilizado otro medio de comunicación, específico para PHP, entre sus scripts y el servidor web, este, como bien menciona en su pregunta, es un intérprete incorporado llamado mod_php.

Entonces, respondiendo a sus preguntas:

¿Qué es exactamente CGI?

Véase más arriba.

¿Cuál es el problema con /cgi-bin/*.cgi? ¿Qué pasa con esto? No sé para qué es este directorio cgi-bin en el servidor. No sé por qué tienen extensiones * .cgi.

Ese es el lugar tradicional para los programas cgi, muchos servidores web vienen con este directorio preconfigurado para ejecutar todos los binarios allí como programas CGI. La extensión .cgi denota un ejecutable que se espera que funcione a través del CGI.

¿Por qué Perl siempre viene en el camino? CGI y Perl (idioma). Tampoco sé qué pasa con estos dos. Casi todo el tiempo sigo escuchando estos dos en combinación "CGI y Perl". Este libro es otro gran ejemplo Programación CGI con Perl ¿Por qué no "Programación CGI con PHP / JSP / ASP"? Nunca vi esas cosas.

Debido a que Perl es antiguo (más antiguo que PHP, JSP y ASP que surgieron cuando CGI ya era viejo, Perl existía cuando CGI era nuevo) y se hizo bastante famoso por ser un muy buen lenguaje para servir páginas web dinámicas a través del CGI. Hoy en día hay otras alternativas para ejecutar Perl en un servidor web, principalmente mod_perl .

Programación CGI en C esto me confunde mucho. ¿¿C ª?? ¿¿Seriamente?? No se que decir. "Estoy confundido". ¿En C "? Esto lo cambia todo. El programa debe compilarse y ejecutarse. Esto cambia por completo mi visión de la programación web. ¿Cuándo compilo? ¿Cómo se ejecuta el programa? código de máquina, por lo que debe ejecutarse como un proceso independiente. ¿Cómo se comunica con el servidor web (IPC) y la interfaz con todos los servidores (en mi ejemplo MATLAB y MySQL) mediante la programación de socket? ¡Estoy perdido!

Compila el ejecutable una vez, el servidor web ejecuta el programa y pasa los datos de la solicitud al programa y genera la respuesta recibida. CGI especifica que se lanzará una instancia de programa por cada solicitud. Es por eso que CGI es ineficiente y un poco obsoleto hoy en día.

Dicen que CGI está en desuso. Ya no está en uso. ¿Es tan? ¿Cuál es su última actualización?

CGI todavía se usa cuando el rendimiento no es primordial y se requiere un medio simple para ejecutar el código. Es ineficiente por los motivos anteriormente mencionados y existen medios más modernos para ejecutar cualquier programa en un entorno web. Actualmente el más famoso es FastCGI .

Vinko Vrsalovic
fuente
24
Más específicamente, describe cómo se pasa la información de la solicitud en las variables de entorno (como el tipo de solicitud, la dirección IP remota), cómo se pasa el cuerpo requerido a través de la entrada estándar y cómo se pasa la respuesta a través de la salida estándar. Puede consultar la especificación CGI ( hoohoo.ncsa.illinois.edu/cgi ) para obtener más detalles.
daf
3
Asumiendo Server side Programen su figura es mi script PHP. Entonces, ¿nunca hice alguna programación CGI? Porque nunca escribí nada entre el servidor web y mi script PHP. ¡¡Maldición!! Esto me mata.
garras el
44
PHP todavía se basa en gran medida en el protocolo CGI, la mayor parte del contenido de $ _SERVER proviene directamente de la especificación CGI. Y "programación CGI" siempre significó que el programa procesaba la solicitud, no la implementación del protocolo en sí. Si explicara lo que hace con PHP a un pionero de la programación web de la era de 1993, lo consideraría una forma avanzada (aunque posiblemente débil) de programación CGI.
Michael Borgwardt
55
@ Michael: Pero cuando se ejecuta a través de mod_php no es CGI en absoluto (incluso si se basa en ello). Y estoy de acuerdo en que CGI se refiere tanto al protocolo como a los scripts ejecutados a través de él.
Vinko Vrsalovic
2
@Vinko Vrsalovic: si CGI es una interfaz para Perl, C u otros lenguajes que se ejecutan en el servidor web, ¿qué interfaz usa PHP para ejecutarse en Apache ???????? y PHP viene bajo CGI Especificaciones?
hardik
63

¿Qué es exactamente CGI?

Un medio para que un servidor web obtenga sus datos de un programa (en lugar de, por ejemplo, un archivo).

¿Cuál es el problema con /cgi-bin/*.cgi?

No es gran cosa. Es solo una convención.

No sé para qué es este directorio cgi-bin en el servidor. No sé por qué tienen extensiones * .cgi.

El servidor tiene que saber qué hacer con el archivo (es decir, tratarlo como un programa para ejecutar en lugar de algo para simplemente servir). Tener una extensión .html le dice que use un tipo de contenido text / html. Tener una extensión .cgi le dice que lo ejecute como un programa.

Mantener los archivos ejecutables en un directorio separado brinda una protección adicional contra la ejecución de archivos incorrectos y / o la entrega de programas CGI como datos sin procesar en caso de que el servidor se configure mal.

¿Por qué Perl siempre viene en el camino?

No lo hace. Perl era simplemente grande y popular al mismo tiempo que CGI.

No he usado Perl CGI por años. Estuve usando mod_perl durante mucho tiempo, y tiendo a PSGI / Plack con FastCGI en estos días.

Este libro es otro gran ejemplo Programación CGI con Perl ¿Por qué no "Programación CGI con PHP / JSP / ASP"?

CGI no es muy eficiente. Mejores métodos para hablar con los programas de los servidores web aparecieron aproximadamente al mismo tiempo que PHP. JSP y ASP son diferentes métodos para hablar con los programas.

Programación CGI en C esto me confunde mucho. ¿¿C ª?? ¿¿Seriamente??

Es un lenguaje de programación, ¿por qué no?

¿Cuándo compilo?

  1. Escribir código
  2. Compilar
  3. URL de acceso
  4. El servidor web ejecuta el programa

Cómo se ejecuta el programa (porque será un código de máquina, por lo que debe ejecutarse como un proceso independiente).

No tiene que ejecutarse como un proceso independiente (puede escribir módulos Apache en C), pero todo el concepto de CGI es que lanza un proceso externo.

¿Cómo se comunica con el servidor web? IPC?

STDIN / STDOUT y variables de entorno, tal como se define en la especificación CGI.

e interactuar con todos los servidores (en mi ejemplo MATLAB y MySQL) usando la programación de socket?

Usando los métodos que desee y que sean compatibles.

Dicen que CGI se deprecia. Ya no está en uso. ¿Es tan?

CGI es ineficiente, lento y simple. Raramente se usa, cuando se usa, es porque es simple. Si el rendimiento no es gran cosa, entonces la simplicidad vale mucho.

¿Cuál es su última actualización?

1.1

Quentin
fuente
1. Escriba el código 2. Compile 3. URL de acceso 4. El servidor web ejecuta el programa. || Pero, ¿cómo sabe el servidor web dónde coloca el programa ejecutable compilado? ¿Cómo sabe qué programa ejecutable (entre todos) ejecutar?
Pacerier
@Pacerier: de la misma manera que sabe qué archivo estático enviar al cliente si se solicita un archivo estático.
Quentin
41

CGI es una especificación de interfaz entre un servidor web (servidor HTTP) y un programa ejecutable de algún tipo que debe manejar una solicitud particular.

Describe cómo ciertas propiedades de esa solicitud deben comunicarse al entorno de ese programa y cómo el programa debe comunicar la respuesta al servidor y cómo el servidor debe 'completar' la respuesta para formar una respuesta válida a la solicitud HTTP original.

Durante un tiempo, CGI fue un borrador de Internet de IETF y, como tal, tenía una fecha de vencimiento. Venció sin actualización, por lo que no había un 'estándar' CGI. Ahora es un RFC informativo, pero como tal documenta la práctica común y no es un estándar en sí mismo. rfc3875.txt , rfc3875.html

Los programas que implementan una interfaz CGI se pueden escribir en cualquier idioma ejecutable en la máquina de destino. Deben poder acceder a las variables de entorno y, por lo general , a la entrada estándar y generan su salida en la salida estándar .

Los lenguajes compilados, como C, se usaban comúnmente, al igual que los lenguajes de secuencias de comandos como perl, a menudo usando bibliotecas para facilitar el acceso al entorno CGI.

Una de las grandes desventajas de CGI es que se genera un nuevo programa para cada solicitud, por lo que mantener el estado entre las solicitudes podría ser un problema importante de rendimiento. El estado puede manejarse en cookies o codificarse en una URL, pero si se vuelve grande, debe almacenarse en otro lugar y codificarse a partir de información de URL codificada o una cookie. Cada invocación CGI tendría que volver a cargar el estado almacenado desde una tienda en algún lugar.

Por esta razón, y por una interfaz muy simple para solicitudes y sesiones, los entornos mejor integrados entre los servidores web y las aplicaciones son mucho más populares. Los entornos como una implementación moderna de php con apache integran mucho mejor el lenguaje de destino con el servidor web y proporcionan acceso a los objetos de solicitud y sesión necesarios para atender eficientemente las solicitudes http. Ofrecen una forma mucho más fácil y rica de escribir 'programas' para manejar solicitudes HTTP.

Si escribiste un script CGI depende de la interpretación. Ciertamente hizo el trabajo de uno, pero es mucho más habitual ejecutar php como un módulo donde la interfaz entre el script y el servidor no es estrictamente una interfaz CGI.

CB Bailey
fuente
1
Molestia. Empecé a escribir esto cuando no había otras respuestas, pero me llamaron. Ahora se trata del # 8 en la lista. No tengo la voluntad de eliminarlo ahora, volveré y lo eliminaré más tarde.
CB Bailey
66
Hola ... por favor no lo borres. Dice algunas cosas de manera más clara. Lo encontré útil. Puede ser que otros también lo encuentren así. :)
garras
1
OK, lo dejaré por un momento. Sin embargo, probablemente sería bueno si alguien integrara algún pasaje "mejor" en una de las respuestas más completas. Entonces podríamos haber obtenido una respuesta más definitiva.
CB Bailey
18

El CGI se especifica en RFC 3875 , aunque es una codificación "oficial" posterior del documento NCSA original . Básicamente, CGI define un protocolo para pasar datos sobre una solicitud HTTP desde un servidor web a un programa para procesar, cualquier programa, en cualquier idioma. En el momento en que se escribió la especificación (1993), la mayoría de los servidores web contenían solo páginas estáticas, las "aplicaciones web" eran algo raro y nuevo, por lo que parecía natural mantenerlas separadas del contenido estático "normal", como en un cgi-bindirectorio aparte del contenido estático, y hacer que terminen en .cgi.

En este momento, aquí tampoco había "lenguajes de programación web" dedicados como PHP, y C era el lenguaje de programación portátil dominante, por lo que muchas personas escribieron sus scripts CGI en C. Pero Perl rápidamente resultó ser una mejor opción para este tipo de y CGI se convirtió casi en sinónimo de Perl por un tiempo. Luego vinieron los Servlets de Java, PHP y muchos otros, y se apoderaron de gran parte de la cuota de mercado de Perl.

Michael Borgwardt
fuente
¿Por qué PHP es un "lenguaje de programación web dedicado"? PHP es un lenguaje de propósito genérico y la gente también lo ha estado usando para aplicaciones de interfaz de usuario.
Pacerier
@Pacerier: fue diseñado para ser un lenguaje de programación para generar páginas web, y para eso lo utiliza el 99,9% de sus usuarios. Es incluso en su nombre . Reclamar cualquier otra cosa es simplemente un desgarrador inútil. Si lo está utilizando para aplicaciones de interfaz de usuario, informática científica o programación incrustada, bueno, sea feliz, nadie dice que no tiene permitido hacerlo.
Michael Borgwardt
13

Echa un vistazo a CGI en Wikipedia. CGI es un protocolo entre el servidor web y un programa externo o un script que maneja la entrada y genera la salida que se envía al navegador.

CGI es simplemente una forma para que el servidor web y un programa se comuniquen, nada más y nada menos. Aquí el servidor administra la conexión de red y el protocolo HTTP y el programa maneja la entrada y genera la salida que se envía al navegador. El script CGI puede ser básicamente cualquier programa que pueda ejecutar el servidor web y siga el protocolo CGI. Por lo tanto, se puede implementar un programa CGI, por ejemplo, en C. Sin embargo, eso es extremadamente raro, ya que C no es muy adecuado para la tarea.

/cgi-bin/*.cgies simplemente un camino donde las personas comúnmente ponen su script CGI. El servidor web se configura comúnmente de manera predeterminada para obtener scripts CGI de esa ruta.

un script CGI puede implementarse también en PHP, pero todos los programas PHP no son scripts CGI. Si el servidor web tiene un intérprete PHP integrado (por ejemplo, mod_php en Apache), la fase CGI se omite mediante un protocolo directo más eficiente entre el servidor web y el intérprete.

Si ha implementado un script CGI o no, depende de cómo el servidor web ejecute su script.

Juha Syrjälä
fuente
12

CGI esencialmente pasa la solicitud a cualquier intérprete que esté configurado con el servidor web: esto podría ser Perl, Python, PHP, Ruby, C prácticamente cualquier cosa. Perl fue el más común en el pasado, por eso a menudo lo ves en referencia a CGI.

CGI no está muerto. De hecho, la mayoría de las grandes empresas de hosting ejecutan PHP como CGI en lugar de mod_php porque ofrece una configuración de nivel de usuario y algunas otras cosas mientras es más lento que mod_php. Ruby y Python también se ejecutan típicamente como CGI. La diferencia clave aquí es que un módulo de servidor se ejecuta como parte del software del servidor real, donde, como con CGI, está totalmente fuera del servidor. El servidor solo usa el módulo CGI para determinar cómo pasar y recibir datos al intérprete externo.

prodigitalson
fuente
2
No es downvoting, pero la mayoría de las instalaciones web de Python que he visto están en mod_wsgi o mod_python.
ChristopheD
Así es como la mayoría de la gente usa el término script CGI, pero no es exactamente lo que significa el término.
reinierpost
Usted dice intérprete pero C rara vez se interpreta y los programas compilados, como los programas compilados en C, se pueden usar para CGI.
user34660
11

CGI es un mecanismo mediante el cual el servidor web llama a un programa externo para manejar una solicitud, con variables de entorno y entrada estándar que se utilizan para alimentar los datos de la solicitud al programa. El idioma exacto en el que está escrito el programa externo no importa, aunque es más fácil escribir programas CGI en algunos idiomas que en otros.

Dado que las secuencias de comandos CGI necesitan permisos de ejecución, httpd por defecto solo permite que los programas CGI en el cgi-bindirectorio se ejecuten con fines de seguridad (posiblemente ahora mal orientados).

La mayoría de los scripts PHP se ejecutan en el proceso del servidor web a través de mod_php. Esto no es CGI.

CGI es lento ya que el programa (y el intérprete relacionado) deben iniciarse por solicitud. Las alternativas modernas son la ejecución integrada, utilizada por mod_php, y los procesos de larga ejecución, utilizados por FastCGI. Un lenguaje dado puede tener su propia forma de implementar esos mecanismos, así que asegúrese de preguntar antes de recurrir a CGI.

Ignacio Vazquez-Abrams
fuente
@Ignacio Vazquez-Abrams: si la interfaz CGI crea un nuevo proceso, cada vez que recibe una solicitud de recurso CGI, ¿cuál es la diferencia de ejecución entre CGI y mod_php ??????? ¿CGI y mod_php son iguales? ¿o es posible escribir scripts PHP que se ejecutan bajo la interfaz CGI no bajo mod_php ???
hardik
@Hardik: mod_php se ejecuta como parte de HTTPd, que es responsable de sus propios procesos.
Ignacio Vazquez-Abrams
¿Qué es este 'programa externo'? ¿es intérprete si ejecuto php con php-fpm?
Slier
@slier: es un programa arbitrario que no es el servidor web.
Ignacio Vazquez-Abrams
@ IgnacioVazquez-Abrams, entonces, ¿es seguro asumir que es un interpretersi estoy ejecutando php con php-fpm?
Slier
7

Quizás desee saber qué no es CGI, y la respuesta es un MÓDULO para su servidor web (si supongo que está ejecutando Apache). Y ESA ES LA GRAN DIFERENCIA, porque las necesidades de CGI y el programa externo, el hilo, lo que sea para instanciar un servidor de aplicaciones PERL, PHP, C donde cuando se ejecuta como MÓDULO ese programa es el servidor web (apache) per-se.

Debido a todo esto, hay muchos problemas de rendimiento, seguridad y portabilidad que entran en juego. Pero es bueno saber qué no es CGI primero, comprender qué es.

denica
fuente
7

Un ejemplo de la vida real: una base de datos complicada que debe mostrarse en un sitio web. Dado que la base de datos se diseñó en algún lugar alrededor de 1986 (!), Se almacenaron muchos datos de diferentes maneras para ahorrar espacio en el disco.

A medida que avanzaba el desarrollo, los desarrolladores ya no podían resolver solicitudes de datos complicadas solo en SQL, por ejemplo, porque los algoritmos de clasificación eran inusuales.

Hay tres soluciones sensatas:

  1. rápido y sucio: envíe los datos no patrocinados a PHP, ordénelos allí. Obviamente, una solución muy costosa, porque esto se repetiría cada vez que se llama a la página
  2. escribir un complemento en el motor de la base de datos, pero el administrador no estaba listo para permitir que se ejecutara código externo en su servidor, o
  3. Puede procesar los datos en un programa (C, Perl, etc.) y generar HTML. El programa en sí entra en / cgi-bin, y es llamado por el servidor web (por ejemplo, Apache) directamente, no a través de PHP.

CGI ejecuta su script en la Solución n. ° 3 y genera el efecto en el navegador. Tiene la velocidad del programa compilado, la flexibilidad de un lenguaje mejor que SQL y no necesita escribir complementos en el servidor SQL. (Nuevamente, este es un ejemplo específico de SQL y C)

Michał Leon
fuente
1
La mejor respuesta para mí, lo tengo.
Daniel Katz
7

Un script CGI es un programa de consola / shell. En Windows, cuando usa una ventana de "Símbolo del sistema", ejecuta programas de consola. Cuando un servidor web ejecuta una secuencia de comandos CGI, proporciona información al programa consola / shell utilizando variables de entorno o "entrada estándar". La entrada estándar es como escribir datos en un programa de consola / shell; en el caso de una secuencia de comandos CGI, el servidor web escribe. El script CGI escribe datos en "salida estándar" y esa salida se envía al cliente (el navegador web) como una página HTML. La salida estándar es como la salida que ve en un programa de consola / shell, excepto que el servidor web la lee y la envía.

Un script CGI puede ejecutarse desde un navegador. El URI generalmente incluye una cadena de consulta que se proporciona al script CGI. Si el método es "get", la cadena de consulta se proporciona a la secuencia de comandos CGI en una variable de entorno llamada QUERY_STRING. Si el método es "post", la cadena de consulta se proporciona a la secuencia de comandos CGI utilizando la entrada estándar (la secuencia de comandos CGI lee la cadena de consulta a partir de la entrada estándar).

Un uso temprano de los scripts CGI fue procesar formularios. Al comienzo de HTML, los formularios HTML generalmente tenían un atributo de "acción" y un botón designado como el botón "enviar". Cuando se presiona el botón Enviar, el URI especificado en el atributo "acción" se enviaría al servidor con los datos del formulario enviado como una cadena de consulta. Si la "acción" especifica una secuencia de comandos CGI, la secuencia de comandos CGI se ejecutará y luego generará una página HTML.

RFC 3875 "La interfaz de puerta de enlace común (CGI)" define parcialmente CGI usando C, como al decir que las variables de entorno "son accedidas por la rutina de biblioteca C getenv () o entorno de variable".

Si está desarrollando un script CGI usando C / C ++ y usa Microsoft Visual Studio para hacerlo, entonces desarrollaría un programa de consola.

usuario34660
fuente
Un "script CGI" es un término amplio y también puede incluir ejecutables.
71GA
6

Un CGI es un programa (o una API web) que usted escribe y lo guarda en el sitio del servidor web. CGI es un archivo.

Este archivo se sienta y espera en el servidor web. Cuando el navegador del cliente envía una solicitud al servidor web para ejecutar su archivo CGI, el servidor web ejecuta su archivo CGI en el sitio del servidor. Las entradas para este programa CGI, si las hay, son del navegador del cliente. Las salidas de este programa CGI se envían al navegador.

¿Qué idioma usas para escribir un programa CGI? Otras publicaciones ya mencionan c, java, php, perl, etc.

Loc Pham
fuente
4

La idea detrás de CGI es que un programa / script (ya sea Perl o incluso C) recibe la entrada a través de STDIN(los datos de la solicitud) y los datos de salida a través de STDOUT(echo, printfdeclaraciones).

La razón por la cual la mayoría de los scripts PHP no califican es que se ejecutan bajo el módulo PHP Apache.

Nathan Osman
fuente