PDF de programación - CGI

Imágen de pdf CGI

CGIgráfica de visualizaciones

Actualizado el 6 de Septiembre del 2020 (Publicado el 23 de Diciembre del 2018)
1.115 visualizaciones desde el 23 de Diciembre del 2018
139,6 KB
11 paginas
Creado hace 11a (26/03/2013)
CGI

Aplicaciones Web/Sistemas Web

Juan Pavón Mestras
Dep. Ingeniería del Software e Inteligencia Artificial
Facultad de Informática
Universidad Complutense Madrid

Material bajo licencia Creative Commons

CGI

 CGI (Common Gateway Interface) es un modo sencillo de crear

contenido dinámico en un sitio Web
 CGI define la forma en que un servidor Web puede interactuar con

programas externos que generen contenido (páginas HTML)
• Estándar CGI 1.1 especificado por IETF en RFC 3875
• CGI define los parámetros (variables de entorno) que describen la

petición del cliente

 El script se invoca como un proceso del sistema

• Se ejecuta como un hijo del proceso servidor Web

 Programas o scripts CGI (simplemente CGIs): un script escrito en

bash, MSDOS, Perl, php, Ruby, etc. o un ejecutable
• Generan el contenido web que se enviará al cliente
• El contenido se identifica con un tipo MIME

Juan Pavón - UCM 2012-13

CGI

2

CGI

web Arquitectura CGI

Cliente

Navegador

GET http://servidor/cgi-bin/fichero.cgi?
clave=valor

«request»

código
HTML

Servidor Web

httpd

fichero.cgi args

«web page»
código HTML

CGI Gateway

clave=valor

«web page»
código HTML

Script CGI o ejecutable

(Genera HTML)

Juan Pavón - UCM 2012-13

CGI

CGI en Apache

 Configuración de Apache para permitir la ejecución de CGIs

 Tiene que estar cargado el módulo de CGI y el de alias:

• LoadModule cgi_module modules/mod_cgi.so
• LoadModule cgi_module modules/mod_alias.so

 Tiene que estar definido el directorio donde estarán los CGIs:

• ScriptAlias /cgi-bin/ "C:/xampp/cgi-bin/"
• ScriptAlias /cgi-bin/ "/opt/lampp/cgi-bin/"

(windows)
(linux)

 Para mejor controlar la seguridad, NO se recomienda ejecutar scripts

fuera del directorio cgi-bin

 Para depurar, se puede ver lo que ha ocurrido en los logs
 Están descritos en http://httpd.apache.org/docs/2.4/logs.html
 Los principales:

• error.log – información de diagnóstico
• access.log – registra todas las peticiones procesadas por el servidor

Juan Pavón - UCM 2012-13

CGI

3

4

Mi primer CGI (Linux)

 Crear un script básico (script.sh) en la carpeta

/opt/lampp/cgi‐bin/

 Probarlo: http://localhost/cgi‐bin/script.sh

 La salida normalmente será el conjunto de variables de entorno del

script (que se le han pasado por la interfaz CGI)

 NOTA: Si el fichero no tiene permisos de ejecución apache dará un

internal server error

#!/bin/sh

echo "Content‐Type: text/html"
echo

echo "<pre>"
env
echo "</pre>"

Juan Pavón - UCM 2012-13

CGI

Mi primer CGI (Windows)

 Crear un script básico (script.bat) en la carpeta xampp/cgi‐bin
 Probarlo: http://localhost/cgi‐bin/script.bat

 La salida normalmente será el conjunto de variables de entorno del

script (que se le han pasado por la interfaz CGI)

@echo off

echo Content‐type: text/html
echo.

echo ^<pre^>
set
echo ^</pre^>

Juan Pavón - UCM 2012-13

CGI

5

6

Mi primer CGI (Perl)

 Perl suele ser el lenguaje más habitual para scripts CGI
 Hay ejemplos en la instalación de XAMPP

 Para ver el entorno se puede probar el siguiente:

http://localhost/cgi‐bin/printenv.pl

 La salida normalmente será el conjunto de variables de entorno del

script (que se le han pasado por la interfaz CGI)

#!"C:\xampp\perl\bin\perl.exe"
##
##  printenv ‐‐ demo CGI program which just prints its environment
##

print "Content‐type: text/plain; charset=iso‐8859‐1\n\n";
foreach $var (sort(keys(%ENV))) {

$val = $ENV{$var};
$val =~ s|\n|\\n|g;
$val =~ s|"|\\"|g;
print "${var}=\"${val}\"\n";

}

Juan Pavón - UCM 2012-13

CGI

Mi primer CGI (C)

 Con un lenguaje de programación, como C, también se puede

crear un programa cuyo ejecutable genere la página HTML
// MiPrimerCGI.c
#include <stdio.h>
#include <string.h>
#include <stdlib.h>

void main(void) 
{

printf("Content‐type: text/html\n\n");
printf("<HTML><HEAD><TITLE>Nombre</TITLE></HEAD>");
printf("<BODY BGCOLOR=\"#FFFFFF\"><P ALIGN=CENTER>");

printf("<BR>SERVER_NAME = %s", getenv("SERVER_NAME")); 
printf("<BR>SERVER_SOFTWARE = %s", getenv("SERVER_SOFTWARE")); 
printf("<BR>REQUEST_METHOD = %s", getenv("REQUEST_METHOD")); 
printf("<BR>HTTP_REFERED = %s", getenv("HTTP_REFERED")); 
printf("<BR>SCRIPT_NAME = %s", getenv("SCRIPT_NAME")); 
printf("<BR>QUERY_STRING = %s", getenv("QUERY_STRING")); 
printf("<BR>REMOTE_HOST = %s", getenv("REMOTE_HOST")); 

printf("</P></BODY></HTML>");

}

Juan Pavón - UCM 2012-13

CGI

7

8

Variables de entorno de un CGI

 Específicas del servidor:

 SERVER_SOFTWARE — nombre/versión del servidor HTTP
 SERVER_NAME — nombre (o IP) del host del servidor
 GATEWAY_INTERFACE — Versión de CGI

 Específicas de la petición:

 SERVER_PROTOCOL — Versión de HTTP
 SERVER_PORT — Puerto TCP usado
 REQUEST_METHOD — método HTTP invocado
 SCRIPT_NAME — programa invocado: /cgi-bin/script.cgi
 QUERY_STRING — parte del URL tras el carácter ?

• pares nombre=valor separados por & (var1=val1&var2=val2…)

 REMOTE_HOST — nombre del host del cliente
 REMOTE_ADDR — dirección IP del cliente
 CONTENT_TYPE — tipo de los datos de entrada
 CONTENT_LENGTH — tamaño de los datos de entrada
 Variables pasadas por el agente de usuario (HTTP_ACCEPT,

HTTP_ACCEPT_LANGUAGE, HTTP_USER_AGENT, HTTP_COOKIE, y
otras)

Juan Pavón - UCM 2012-13

CGI

9

Variables de entorno de un CGI

HTTP_HOST=localhost
HTTP_USER_AGENT=Mozilla/5.0 (Windows NT 6.1; Win64; x64; rv:11.0) Gecko/20120313 

Firefox/11.0

HTTP_ACCEPT=text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
HTTP_ACCEPT_LANGUAGE=en‐us,en;q=0.5
HTTP_ACCEPT_ENCODING=gzip, deflate
HTTP_CONNECTION=keep‐alive

SERVER_SIGNATURE=<address>Apache/2.4.3 (Win32) OpenSSL/1.0.1c PHP/5.4.7 Server at 

localhost Port 80</address>

SERVER_SOFTWARE=Apache/2.4.3 (Win32) OpenSSL/1.0.1c PHP/5.4.7
SERVER_NAME=localhost
SERVER_ADDR=::1
SERVER_PORT=80
REMOTE_ADDR=::1
DOCUMENT_ROOT=C:/xampp/htdocs
REQUEST_SCHEME=http
CONTEXT_PREFIX=/cgi‐bin/
CONTEXT_DOCUMENT_ROOT=C:/xampp/cgi‐bin/
SERVER_ADMIN=postmaster@localhost
SCRIPT_FILENAME=C:/xampp/cgi‐bin/entorno.bat
REMOTE_PORT=50200
GATEWAY_INTERFACE=CGI/1.1
SERVER_PROTOCOL=HTTP/1.1
REQUEST_METHOD=GET
QUERY_STRING=
REQUEST_URI=/cgi‐bin/entorno.bat
SCRIPT_NAME=/cgi‐bin/entorno.bat

Juan Pavón - UCM 2012-13

CGI

10

Salida de CGI

 El resultado del CGI es la salida estándar del programa, que es

normalmente lo que el servidor envía al cliente
 Puede ser variada

• Documento HTML, texto normal, clip de audio, etc.

 Empieza con una cabecera y una línea en blanco

• La cabecera similar a una cabecera HTML, debe especificar el tipo de

contenido (MIME type)
• Los tipos MIME se especifican como tipo/subtipo:

• text/html
• text/plain
• application/pdf
• application/xml
• audio/mpeg
• image/jpeg
• video/mpeg
• multipart/form-data

 El contenido va a continuación

• Es posible referenciar a un fichero donde estaría el contenido

• Location: URL

Juan Pavón - UCM 2012-13

CGI

11

Generación de un fichero word con un CGI

@echo off

echo Content‐Type: application/vnd.ms‐word
echo Content‐Disposition: attachment; filename=fichero.doc
echo.

REM Contenido del fichero word
echo Hola Mundo.

Juan Pavón - UCM 2012-13

CGI

12

Uso de parámetros en CGI

#!/bin/sh
echo  "Content‐Type: text/html"
echo

echo "$QUERY_STRING"
echo "<hr>"
echo "FIN"

Juan Pavón - UCM 2012-13

CGI

13

Asociación de CGIs a formularios

parametros.sh
#!/bin/sh
echo  "Content‐Type: text/html"
echo
NOMBRE=`echo "$QUERY_STRING"| tr "&" "\n"| grep "nombre="| 

cut ‐f 2 ‐d "=" |head ‐n1`

echo "Escribe el nombre para saludar"
echo '<form method="get" action="/cgi‐bin/parametros.sh ">'
echo "Nombre:<input type=\"text\" name=\"nombre\" value=\"\">"
echo '<input type="submit" value="Enviar"/>'
echo '</form>'
echo "<hr>"
echo "Hola $NOMBRE"

Juan Pavón - UCM 2012-13

CGI

14

Ejercicios CGI

 Generar una página con un CGI que indique toda la información

posible que se pueda conseguir sobre el cliente a partir de las
variables del entorno
 Impleméntalo con la shell de tu sistema operativo
 Crea un programa C y configura el servidor Apache para que pueda

invocar el ejecutable (.exe)

• Consultar el Tutorial de Apache: Dynamic Content with CGI.

http://httpd.apache.org/docs/2.4/howto/cgi.html

Juan Pavón - UCM 2012-13

CGI

15

Valoración de CGI

 Ventajas

 Independiente del lenguaje
 Interfaz sencilla: no hace falta utilizar una librería o API específicos
• Basta con utilizar entrada/salida estándar y variables de entorno

 Desventajas

 Por cada petición HTTP se crea un nuevo proceso en el servidor

• Ineficiente

• Recursos requeridos para crear un nuevo proceso
• Además un nuevo proceso implica establecer una nueva conexión a la base

de datos

• Se han considerado alternativas como FastCGI

 Sobrecarga de la interpretación del script

• El código interpretado normalmente consume más tiempo que el

compilado

• Pero se puede invocar ejecutables directamente

 Las aplicaciones CGI son dependientes de la plataforma

Juan Pavón - UCM 2012-13

CGI

16

Alternativas a CGI para contenido dinámico

 Uso de plantillas (templates)

 Páginas SSI (Server-side include), Adobe ColdFusion

 Aplicaciones J2EE

 Servlets Java

 Código de scripts embebido en las páginas

 Hypertext Preprocessor (PHP)
 Java Server Pages (JSP)
 Active Server Pages (ASP)

 Todos estos métodos plantean una cuestión: ¿Quién es el dueño

(y puede modificar) una página? ¿Los desarrolladores o los
diseñadores?
 Algunos frameworks, como Struts ,pretenden tratar este tema

separando contenido de presentación

Juan Pavón - UCM 2012-13

CGI

17

Alternativas a CGI: SSI

 Server-side includes (SSI)

 Técnica más antigua de página activa o plantilla
 Normalmente las páginas con SSI tienen la extensión .shtml
 Incluye instrucciones como comentarios HTML:

<!--#comando arg1="valor1" arg2="valor2"...-->

 Estos comandos son ejecutados por el servidor al cargar la página

• Antes incluso de ejecutar el código de scripts embebidos en el HTML

 Usos:
  • Links de descarga
http://lwp-l.com/pdf14666

Comentarios de: CGI (0)


No hay comentarios
 

Comentar...

Nombre
Correo (no se visualiza en la web)
Valoración
Comentarios...
CerrarCerrar
CerrarCerrar
Cerrar

Tienes que ser un usuario registrado para poder insertar imágenes, archivos y/o videos.

Puedes registrarte o validarte desde aquí.

Codigo
Negrita
Subrayado
Tachado
Cursiva
Insertar enlace
Imagen externa
Emoticon
Tabular
Centrar
Titulo
Linea
Disminuir
Aumentar
Vista preliminar
sonreir
dientes
lengua
guiño
enfadado
confundido
llorar
avergonzado
sorprendido
triste
sol
estrella
jarra
camara
taza de cafe
email
beso
bombilla
amor
mal
bien
Es necesario revisar y aceptar las políticas de privacidad