Pregunta ¿Qué es Common Gateway Interface (CGI)?


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

Soy un programador de PHP con experiencia en desarrollo web.

solicitud del usuario (cliente) para la página ---> servidor web (-> PHP incrustado   intérprete) ----> Servidor de escritura (PHP) ---> Servidor MySQL.

Ahora diga que mi PHP Script puede obtener resultados del servidor MySQL y del servidor MATLAB y de algún otro servidor.

Entonces, ¿PHP Script es el CGI? Debido a su interfaz para el servidor web entre todos los otros servidores? No lo sé. A veces llaman a CGI, una tecnología y otras veces llaman a CGI un programa u otro servidor.

  • ¿Qué es exactamente CGI?

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

  • ¿Por qué Perl siempre viene en el camino? CGI y Perl (lenguaje). 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.

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

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

Una vez, me encontré con una situación en la que   tuvo que dar acceso de solicitud HTTP PUT a   servidor web (Apache HTTPD). Es un largo   espalda. Entonces, por lo que recuerdo, esto es   lo que hice:

  1. Editó el archivo de configuración de Apache HTTPD para indicarle al servidor web que pase   todas las solicitudes HTTP PUT para algunos    put.php (Tuve que escribir este PHP   guión)

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

La gente dijo que escribí una secuencia de comandos CGI.   En serio, no tenía idea de qué   ellos estaban hablando

  • ¿Realmente escribí CGI Script?

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 de CGI, lo que explica los conceptos en más simple Una salida posible. Después de leer este artículo es posible que desee leer Comenzando con la programación CGI en C para complementar su comprensión con muestras de código reales. También agregué estos enlaces a este tutorial al artículo de Wikipedia: http://en.wikipedia.org/wiki/Common_Gateway_Interface


696
2018-01-18 21:15


origen


Respuestas:


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 solicitud en variables de entorno (como tipo de solicitud, dirección IP remota), cómo se pasa el cuerpo de solicitud a través de entrada estándar y cómo se transmite la respuesta a través de salida estándar. Puede consultar el Especificación CGI para 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, estableciendo algunas variables de entorno y clasificando los parámetros a través de la entrada estándar y 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 el CGI. Es por eso que podría escribir programas web en C o Bash con un servidor web habilitado para CGI. Eso y que la mayoría de los entornos de programación pueden usar fácilmente variables de entrada estándar, salida estándar y de entorno.

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

Entonces, respondiendo tus 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é sirve 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 (lenguaje). 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.

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 existen otras alternativas para ejecutar Perl en un servidor web, principalmente mod_perl.

Programación CGI en C esto me confunde mucho. ¿¿Cª?? ¿¿Seriamente?? No sé qué decir. Estoy confundido. "En C" Esto lo cambia todo. El programa necesita ser compilado y ejecutado. Esto cambia completamente mi visión de la programación web. ¿Cuándo compilo? ¿Cómo se ejecuta el programa (porque será un código 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) usando la programación de socket? ¡¡Estoy perdido !!

Usted compila el ejecutable una vez, el servidor web ejecuta el programa y pasa los datos en la solicitud al programa y emite la respuesta recibida. CGI especifica que se lanzará una instancia de programa por cada solicitud. Esta es la razón por la cual CGI es ineficiente y está algo obsoleto hoy en día.

Dicen que CGI está en desuso. No está más 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 las razones expuestas anteriormente y existen medios más modernos para ejecutar cualquier programa en un entorno web. Actualmente el más famoso es FastCGI.


393
2018-01-18 21:20



¿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é sirve este directorio cgi-bin en el servidor.   No sé por qué tienen extensiones * .cgi.

El servidor debe saber qué hacer con el archivo (es decir, tratarlo como un programa para ejecutar en lugar de simplemente servirlo). 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 aparte brinda cierta protección adicional contra la ejecución de archivos incorrectos o la publicación de programas CGI como datos sin formato en caso de que el servidor se configure incorrectamente.

¿Por qué Perl siempre viene en el camino?

No es así Perl era simplemente grande y popular al mismo tiempo que CGI.

No he usado Perl CGI durante años. Estuve usando mod_perl por mucho tiempo, y ahora estoy más cerca de PSGI / Plack con FastCGI.

Este libro es otro gran ejemplo de 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 llegaron 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 máquina, por lo que debe ejecutarse como un proceso independiente).

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

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

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

e interactuando con todos los servidores (en mi ejemplo MATLAB y MySQL) usando socket   ¿programación?

Utiliza los métodos que te gusten y sean compatibles.

Dicen que CGI está depreciado. No está más 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 un gran problema, entonces la simplicidad vale mucho.

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

1.1


59
2018-01-18 21:25



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

Describe cómo deben comunicarse ciertas propiedades de esa solicitud 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 caducidad. Caducó sin actualización, por lo que no había un "estándar" de 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 Variables de entorno y usualmente entrada estándar y generan su salida en salida estándar.

Los lenguajes compilados como C se usaban comúnmente, al igual que los lenguajes de script, como perl, que a menudo usaban 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 de rendimiento importante. 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 la implementación moderna de PHP con Apache integran el idioma de destino mucho mejor con el servidor web y brindan acceso a objetos de solicitud y sesiones que son necesarios para servir eficientemente las solicitudes http. Ofrecen una manera mucho más fácil y más rica de escribir 'programas' para manejar solicitudes HTTP.

Si usted escribió una secuencia de comandos CGI en su lugar 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.


39
2018-01-18 21:53



El CGI se especifica en RFC 3875, aunque eso es una codificación "oficial" posterior del original Documento NCSA. 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 separarlas del contenido estático "normal", como en un cgi-bin directorio aparte del contenido estático, y 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 cosa, y CGI se volvió casi sinónimo de Perl por un tiempo. Luego vinieron Java Servlets, PHP y un montón de otros y se hizo cargo de gran parte de la cuota de mercado de Perl.


16
2018-01-18 21:27



Mira esto CGI en Wikipedia. CGI es un protocolo entre el servidor web y un programa externo o una secuencia de comandos que maneja la entrada y genera resultados que se envían al navegador.

CGI es simplemente una forma para que el servidor web y un programa se comuniquen, nada más, 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. La secuencia de comandos CGI puede ser básicamente cualquier programa que pueda ser ejecutado por el servidor web y que 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/*.cgi es simplemente un camino donde la gente suele poner su script CGI. El servidor web suele estar configurado de manera predeterminada para recuperar 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 está ejecutando el script.


12
2018-01-18 21:23



CGI es un mecanismo mediante el cual el servidor web llama a un programa externo para gestionar una solicitud, con variables de entorno y entrada estándar que se utilizan para alimentar los datos de 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.

Como los scripts CGI necesitan permisos de ejecución, httpd por defecto solo permite programas CGI en el cgi-bin directorio que se ejecutará para fines de seguridad (posiblemente ahora equivocados).

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 duración, utilizados por FastCGI. Un idioma determinado puede tener su propia forma de implementar esos mecanismos, así que asegúrese de preguntar antes de recurrir a CGI.


11
2018-01-18 21:27



CGI esencialmente pasa la solicitud a alguna 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 día por eso a menudo lo ves en referencia a CGI.

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


11
2018-01-18 21:20



Quizás quieras saber qué no es CGI, y la respuesta es un MÓDULO para tu servidor web (si supongo que estás ejecutando Apache). Y ESA ES LA GRAN DIFERENCIA, porque CGI necesita un programa externo, un hilo, lo que sea para crear una instancia de un servidor de aplicaciones PERL, PHP, C, donde cuando 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, para entender de qué se trata.


7
2018-02-17 07:06



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ñó alrededor de 1986 (!), Se empaquetaron 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 poco frecuentes.

Hay tres soluciones sensatas:

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

CGI ejecuta su secuencia de comandos en la Solución n. ° 3 y emite el efecto al navegador. Tiene la velocidad del programa compilado, la flexibilidad de un lenguaje mejor que SQL y no es necesario escribir complementos en el servidor SQL. (De nuevo, este es un ejemplo específico de SQL y C)


6
2018-04-21 14:54



La idea detrás de CGI es que un programa / script (ya sea Perl o incluso C) recibe entrada a través de STDIN (los datos de solicitud) y los datos de salida a través de STDOUT (eco, printf declaraciones). La razón por la cual la mayoría de los scripts php no califican es porque se ejecutan bajo el módulo PHP Apache.


4
2018-01-18 21:28



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 encuentra 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, provienen del navegador del cliente. Los resultados 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.


4
2017-09-23 00:56