Title: CGI%20Common%20Gateway%20Interface%20(interfaz%20de%20pasarela%20com
1CGICommon Gateway Interface(interfaz de
pasarela común)
2Índice
- Introducción
- Cómo funciona
- Independencia
- Escribiendo un programa CGI.
- Variables de entorno.
- Establecimiento de la comunicación con el cliente
- Referenciar un CGI
- Los formularios y CGI
- Envío de información del servidor al CGI
3Introducción a CGI
- Es de las primeras formas de programación web
dinámica. - El CGI cambio la forma de manipular información
en el web. Antes relación cliente-servidor
mediante plugins y limitada por la velocidad. - Es un método para la transmisión de información
hacia un compilador instalado en el servidor.
4Introducción a CGI
- FUNCIÓN PRINCIPAL Añadir una mayor interacción a
los documentos web (devuelve información
dinámica) que por medio del HTML (se presentan de
forma estática). - Corre en el servidor ? No depende del usuario.
- Uso contadores, bases de datos, motores de
búsqueda, formularios, generadores de email
automático, foros de discusión, chats, comercio
electrónico, rotadores y mapas de imágenes,
juegos en línea y otros.
5Introducción a CGI
- El procesamiento puede hacerlo totalmente el CGI
(Procesamiento Directo). - El CGI sirve de puente para otro programa con
otro propósito (Procesamiento Indirecto).
6Como funciona
- Funcionalidad de las paginas web que contengan
programación CGI - Acción conjunta del Servidor Web y el programa
almacenado (script CGI). - Script CGI Programa que se ejecuta en el
servidor en respuesta a una solicitud del
usuario. - Lenguajes de programación Basic, Java, C,
Perl... - Deben leer los datos de la entrada estándar
- Acceder a las variables de entorno
- Escribir en la salida estándar.
7Independencia
- Independiente de
- Hardware
- Software y SO.
- Servidor
- No asume rutas
- No asume IPs
- No asume permisos.
8Escribiendo un programa CGI
- Entrada estándar stdin.
- Salida estándar stdout.
- Se puede generar cualquier tipo de documento.
- Toda salida del programa CGI debe estar precedida
por una cabecera tipo MIME - Salida en formato visualizable por el navegador
(no siempre).
9Escribiendo un programa CGI
Cabecera
include ltstdio.hgt Int main(int argc, char
argv) printf(Content-typetexyt/html\n)
printf(\n) printf(ltHTMLgt\nltBODYgt\n)
printf(Mi primer CGI\n) printf(lt/HTMLgt\nlt/BOD
Ygt\n) return 0
Línea Separación
Content-Typetext/html
ltHTMLgt ltBODYgt Mi primer CGI lt/BODYgt lt/HTMLgt
Cuerpo
10Escribiendo un programa CGI
Link a otra pagina web
include ltstdio.hgt Int main(int argc, char
argv) // printf(Location
http//www.ua.es\n) printf(\n) // return
0
11VARIABLE DE ENTORNO CGI
- Transmiten datos acerca de una petición de un
servidor al CGI. - Variable sin valor o sin definirNULL.
- Existen de 3 tipos
- Especificas de servidor
- Especificas de cliente
- Especificas de la petición
12VARIABLE DE ENTORNO CGI Especificas del servidor
- Características del servidor
- GATEWAY_INTERFACE. -versión del servidor (ej
CGI/1.1) - SERVER_NAME. -Nombre del servidor (ej www.ua.es)
- SERVER_PORT. -Puerto del servidor donde se
recibió la petición (ej80) - SERVER_PROTOCOL. -Nombre del protocolo de
petición (ej HTTP/1.1) - SERVER_SOFTWARE. -Nombre del software del
servidor (ejMicrosoft- IIS/4.0)
13VARIABLE DE ENTORNO CGI Especificas del cliente
- Informacion sobre el navegador
- HTTP_ACCEPT image/gif, image/jpeg
- HTTP_ACCEPT_ENCODING gzip, deflate
- HTTP_ACCEPT_LANGUAGE es-ES, en, pdf
- HTTP_REFERER http//www.ua.es/index.html
- HTTP_USER_AGENT Mozilla/4.7 en (Win98 I)
14VARIABLE DE ENTORNO CGI Especificas de la
petición
- Información sobre la petición recibida
- CONTENT_LENGTH -Tamaño en números decimales de
octetos y cualquier otra entidad adjunta - PATH_INFO -Ruta que debe interpretar una
aplicación CGI - QUERY_STRING -Cadena de búsqueda URL-encoded.
- REMOTE_ADDR -Dirección IP del agente que hace la
petición - REMOTE_HOST -Nombre del dominio que realiza la
petición - REQUEST_METHOD -Metido de petición por el
cliente. - SCRIPT_NAME -URI para identificar la aplicación
CGI
15VARIABLE DE ENTORNO CGI Especificas de la
petición
- Información sobre la petición recibida
- CONTENT_TYPE -El tipo MIME de una entidad adjunta
- Tipos
- Aplication -transmiten datos de la aplicación
- Text -Información textual (ej plain)
- Multipart -Partes múltiples de tipos de datos
independientes( ej mixed, alternative.. - Message -Un mensaje encapsulado (ej partial,
External-body) - Image -Datos de imagen (ej gif, jpeg)
- Audio - Datos de audio (ej basic)
- Video -Datos de video (ej mpeg)
16VARIABLE DE ENTORNO CGI ACCESO DESDE C
include ltstdio.hgt char variable Variablegete
nv(SERVER_NAME)
17Establecimiento de la comunicación con el cliente
- El servidor añade a la respuesta del CGI mas
datos para devolver un mensaje HTTP correcto. - Si no se quiere que el servidor trate los datos
devueltos por el CGI Añadir el prefijo nph-(No
Parser Header) al nombre del CGI.
18Referenciar un CGI
- Usando etiquetas HTML
- lta hrefdireccion_del_CGIgttexto lt/agt
- ejlta hrefhttp//www.zonaweb.es/cgi-bin/hora.cgi
gtDime la hora lt/agt - Usando un formulario(lo más habitual)
- ltform actiondireccion_del_CGIgtlt!-- elementos
del formulario--gtlt/formgt
19LOS FORMULARIOS Y CGI
- Uso de GET
- Se utiliza para obtener un fichero o recurso
- La vble de entorno QUERY_STRING lee los datos
- Tamaño limitado 256 caracteres
- No registra cada petición
- Uso de POST
- Se usa para enviar datos al servidor
- Los datos se leen por la entrada estandar
- Tamaño ilimitado (CONTENT_LEGTH devuelve el
tamaño) - Registra cada petición
20LOS FORMULARIOS Y CGI
- El navegador envía los datos de la siguiente
forma - ej control1valor1 control2valor2
control3valor3 - Para campos sin valor
- ej control1 control2valor2 control3valor3
- Caracteres para dividir los datos
- Separa las diferentes parejas campo/valor.
- Separa el campo de su valor
- xx identifica los caracteres especiales
- Para codificar los espacios.
21Envio de informacion del servidor al CGI Línea
de comandos
- ? Separa el CGI de los argumentos
- separa los argumentos entre sí.
- Cada palabra es un parámetro que le llega al CGI
(argv). - Los datos se encuentran en QYERY_STRING.
lta href/cgi-bin/cgi?arg1arg2arg3gtenlacelt/agt
22Envio de informacion del servidor al CGI Entrada
estandar
- Envío mediante un formulario con POST.
- Se recibe por la entrada estándar
- Uso de las vbles
- CONTENT_LENGTH
- CONTENT_TYPE
23Envio de informacion del servidor al CGI
Información de ruta de directorios
- Utilizando la vble de entorno PATH_INFO.
lta href/cgi-bin/cgi/MasInformación?arg1arg2arg
3gtenlacelt/agt
24Envio de informacion del servidor al CGI URL
- Envio mediante formularios con GET.
- Formato nom_cgi?campo1valor1camop2valor2
- Los datos los recibe la vble QUERY_STRING.
Ej lta hrefprogramaCGI.exe?arg11arg25gtpincha
aquí lt/agt
25Ejemplo con formulario
- lthtmlgt
- ltheadgtlttitlegtejemplo de CGIs con Formulario
- lt/titlegtlt/headgt
- ltbodygt
- ltform action"form.cgi" method"get"gt
- lttrgt
- lttdgtltbgtEjemplo de Formulariolt/bgtltbrgt
- ltbrgt
- lt/tdgt
- lt/trgt
- lttrgtlttdgtNombrelt/tdgt
- lttdgtltinput type"text" maxlength"160"
size"40" name"nombre"gt - lt/tdgt
- ltbrgt
- lt/trgt
- lttrgtlttdgtColorlt/tdgt
- lttdgtltSELECT NAME"color"gt
- ltOPTIONgtBlanco
- ltOPTIONgtAzul
lt/tdgt lt/trgt lttrgtlttdgtPaíslt/tdgt
lttdgtltSELECT NAME"pais"gt ltOPTION
value"cl"gtFrancia ltOPTION
value"es"gtEspaña ltOPTION
value"zz"gtPortugal lt/SELECT gt
lt/tdgt ltbrgt lt/trgt lttrgt lttdgtltINPUT
TYPE"submit" VALUE"Enviar datos"gt lt/tdgt
lt/trgt lt/tablegt lt/formgt lt/bodygt lt/htmlgt
26Ejemplo con formulario
- include ltstdio.hgt
- include "cgiforms.h"
- define LARGO_MAXIMO 1024
- void imprimeVariable( char lpzNombre )
- main()
- printf("Content-Type text/html\n\n")
- printf("lthtmlgtltbody bgcolorffffff
textffffffgt\n") - printf("ltp aligncentergtlttable cellpadding4
bgcolor000000gt\n") - printf("lttrgtlttd color000080 aligncentergt")
- printf("ltbgtCampos recibidos desde el
Formlt/bgtlt/tdgtlt/trgt\n") - imprimeVariable( "nombre" )
- imprimeVariable( "color" )
- imprimeVariable( "pais" )
- printf("lt/tablegt\n")
- printf("lt/bodygtlt/htmlgt")
- return( 0 )
void imprimeVariable( char lpzNombre ) /
recibe el nombre de la variable yla imprime
formateada como celdas de una tabla/ char
lpzResultadoLARGO_MAXIMO printf("lttrgt\n")
printf("lttd bgcolor\"9999FF\"
valigntopgtslt/tdgt\n",Nombre) printf("lttd
bgcolor\"DDDDFF\" valigntopgtltfont
color000000gt") /aqui pide la variable y
luego la imprime/ formPideVariable(
lpzNombre,lpzResultado,LARGO_MAXIMO)
printf(s",lpzResultado)
printf("lt/tdgt\n") printf("lt/trgt\n")
27Ejemplo con formulario
28