28
CGI Common Gateway Interface (interfaz de pasarela común) Gaspar Hernández Estevan

CGI Common Gateway Interface (interfaz de pasarela común)

  • Upload
    annick

  • View
    45

  • Download
    0

Embed Size (px)

DESCRIPTION

CGI Common Gateway Interface (interfaz de pasarela común). Gaspar Hernández Estevan. Í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 - PowerPoint PPT Presentation

Citation preview

Page 1: CGI Common Gateway Interface (interfaz de pasarela común)

CGICommon Gateway

Interface(interfaz de pasarela común)

Gaspar Hernández Estevan

Page 2: CGI Common Gateway Interface (interfaz de pasarela común)

Í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

Page 3: CGI Common Gateway Interface (interfaz de pasarela común)

Introducción a CGIIntroducció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.

Page 4: CGI Common Gateway Interface (interfaz de pasarela común)

Introducció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.

Page 5: CGI Common Gateway Interface (interfaz de pasarela común)

Introducció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).

Page 6: CGI Common Gateway Interface (interfaz de pasarela común)

Como 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.

Page 7: CGI Common Gateway Interface (interfaz de pasarela común)

Independencia

• Independiente de:• Hardware• Software y SO.• Servidor

• No asume rutas• No asume IPs• No asume permisos.

Page 8: CGI Common Gateway Interface (interfaz de pasarela común)

Escribiendo 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).

Page 9: CGI Common Gateway Interface (interfaz de pasarela común)

Escribiendo un programa CGI

Content-Type:text/html

<HTML><BODY>Mi primer CGI</BODY></HTML>

#include <stdio.h>

Int main(int argc, char *argv[])

{

printf(“Content-type:texyt/html\n”);

printf(\n”);

printf(“<HTML>\n<BODY>\n”);

printf(“Mi primer CGI\n”);

printf(“</HTML>\n</BODY>\n”);

return 0;

}

Cabecera

Línea Separación

Cuerpo

Page 10: CGI Common Gateway Interface (interfaz de pasarela común)

Escribiendo un programa CGI

#include <stdio.h>

Int main(int argc, char *argv[])

{

//…

printf(“Location: http://www.ua.es\n”);

printf(\n”);

//…

return 0;

}

Link a otra pagina web:

Page 11: CGI Common Gateway Interface (interfaz de pasarela común)

VARIABLE DE ENTORNO CGI

• Transmiten datos acerca de una petición de un servidor al CGI.

• Variable sin valor o sin definir=NULL.

• Existen de 3 tipos:• Especificas de servidor• Especificas de cliente• Especificas de la petición

Page 12: CGI Common Gateway Interface (interfaz de pasarela común)

VARIABLE 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 (ej:80)

•SERVER_PROTOCOL. -Nombre del protocolo de petición (ej: HTTP/1.1)

•SERVER_SOFTWARE. -Nombre del software del servidor (ej:Microsoft- IIS/4.0)

Page 13: CGI Common Gateway Interface (interfaz de pasarela común)

VARIABLE DE ENTORNO CGI: Especificas del cliente

• Informacion sobre el navegadorInformacion sobre el navegador• HTTP_ACCEPT: image/gif, image/jpegHTTP_ACCEPT: image/gif, image/jpeg• HTTP_ACCEPT_ENCODING: gzip, deflateHTTP_ACCEPT_ENCODING: gzip, deflate• HTTP_ACCEPT_LANGUAGE: es-ES, en, pdfHTTP_ACCEPT_LANGUAGE: es-ES, en, pdf• HTTP_REFERER: http://www.ua.es/index.htmlHTTP_REFERER: http://www.ua.es/index.html• HTTP_USER_AGENT: Mozilla/4.7 [en] (Win98; I)HTTP_USER_AGENT: Mozilla/4.7 [en] (Win98; I)

Page 14: CGI Common Gateway Interface (interfaz de pasarela común)

VARIABLE 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

Page 15: CGI Common Gateway Interface (interfaz de pasarela común)

VARIABLE DE ENTORNO CGI:VARIABLE DE ENTORNO CGI: Especificas de la Especificas de la

peticiónpetició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)

Page 16: CGI Common Gateway Interface (interfaz de pasarela común)

VARIABLE DE ENTORNO CGI:

ACCESO DESDE C

#include <stdio.h>

char *variable;

Variable=getenv(“SERVER_NAME”);

}

Page 17: CGI Common Gateway Interface (interfaz de pasarela común)

Establecimiento de la comunicación con el

cliente• El servidor añade a la respuesta del El servidor añade a la respuesta del

CGI mas datos para devolver un CGI mas datos para devolver un mensaje HTTP correcto.mensaje HTTP correcto.

• Si no se quiere que el servidor trate los Si no se quiere que el servidor trate los datos devueltos por el CGI: Añadir el datos devueltos por el CGI: Añadir el prefijo ‘nph-’(No Parser Header) al prefijo ‘nph-’(No Parser Header) al nombre del CGI.nombre del CGI.

Page 18: CGI Common Gateway Interface (interfaz de pasarela común)

Referenciar un CGIReferenciar un CGI

• Usando etiquetas HTML• <a href=“direccion_del_CGI”>texto

</a>ej:<a href=“http://www.zonaweb.es/cgi-bin/hora.cgi”>Dime la hora

</a>

• Usando un formulario(lo más habitual)• <form

action=“direccion_del_CGI”><!-- elementos del formulario--></form>

Page 19: CGI Common Gateway Interface (interfaz de pasarela común)

LOS 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

Page 20: CGI Common Gateway Interface (interfaz de pasarela común)

LOS FORMULARIOS Y CGI

• El navegador envía los datos de la siguiente forma:

• ej: control1=valor1& control2=valor2& control3=valor3

• Para campos sin valor:• ej control1=& control2=valor2& control3=valor3

• 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.

Page 21: CGI Common Gateway Interface (interfaz de pasarela común)

Envio 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.

<a href=“/cgi-bin/cgi?arg1+arg2+arg3>enlace</a>

Page 22: CGI Common Gateway Interface (interfaz de pasarela común)

Envio de informacion del servidor al Envio de informacion del servidor al

CGI: CGI: Entrada estandarEntrada estandar

• Envío mediante un formulario con POST.

• Se recibe por la entrada estándar• Uso de las vbles:

• CONTENT_LENGTH• CONTENT_TYPE

Page 23: CGI Common Gateway Interface (interfaz de pasarela común)

Envio de informacion del servidor al CGI:

Información de ruta de directorios

• Utilizando la vble de entorno PATH_INFO.

<a href=“/cgi-bin/cgi/MasInformación?arg1+arg2+arg3>enlace</a>

Page 24: CGI Common Gateway Interface (interfaz de pasarela común)

Envio de informacion del servidor al

CGI: URL

Envio mediante formularios con GET.– Formato: nom_cgi?

campo1=valor1&camop2=valor2– Los datos los recibe la vble

QUERY_STRING.

Ej: <a href=programaCGI.exe?arg1=1&arg2=5”>pincha aquí </a>

Page 25: CGI Common Gateway Interface (interfaz de pasarela común)

Ejemplo con formulario:Ejemplo con formulario:

<html><html><head><title>ejemplo de CGIs con <head><title>ejemplo de CGIs con

FormularioFormulario</title></head></title></head><body><body><form action="form.cgi" method="get"><form action="form.cgi" method="get"> <tr><tr> <td><b>Ejemplo de Formulario</b><br><td><b>Ejemplo de Formulario</b><br><br><br> </td></td> </tr></tr> <tr><td>Nombre</td><tr><td>Nombre</td> <td><input type="text" <td><input type="text"

maxlength="160" size="40" maxlength="160" size="40" name="nombre">name="nombre">

</td> </td> <br><br> </tr></tr> <tr><td>Color</td><tr><td>Color</td> <td><SELECT NAME="color"> <td><SELECT NAME="color"> <OPTION>Blanco<OPTION>Blanco <OPTION>Azul <OPTION>Azul <OPTION>Rojo <OPTION>Rojo </SELECT > </SELECT >

</td> </td> </tr></tr> <tr><td>País</td><tr><td>País</td> <td><SELECT NAME="pais"> <td><SELECT NAME="pais"> <OPTION value="cl">Francia<OPTION value="cl">Francia <OPTION value="es">España <OPTION value="es">España <OPTION value="zz">Portugal<OPTION value="zz">Portugal </SELECT > </SELECT > </td> </td> <br><br> </tr></tr> <tr><tr> <td><INPUT TYPE="submit" VALUE="Enviar datos"><td><INPUT TYPE="submit" VALUE="Enviar datos"> </td> </td> </tr></tr></table></table></form></form></body></body></html></html>

Page 26: CGI Common Gateway Interface (interfaz de pasarela común)

Ejemplo con formulario:Ejemplo con formulario:

#include <stdio.h>#include <stdio.h>#include "cgiforms.h"#include "cgiforms.h"#define LARGO_MAXIMO 1024#define LARGO_MAXIMO 1024void imprimeVariable( char *lpzNombre );void imprimeVariable( char *lpzNombre );

main(){main(){ printf("Content-Type: text/html\n\n");printf("Content-Type: text/html\n\n"); printf("<html><body bgcolor=#ffffff printf("<html><body bgcolor=#ffffff

text=#ffffff>\n");text=#ffffff>\n"); printf("<p align=center><table printf("<p align=center><table

cellpadding=4 bgcolor=000000>\n");cellpadding=4 bgcolor=000000>\n"); printf("<tr><td color=000080 printf("<tr><td color=000080

align=center>");align=center>"); printf("<b>Campos recibidos desde el printf("<b>Campos recibidos desde el

Form</b></td></tr>\n");Form</b></td></tr>\n"); imprimeVariable( "nombre" );imprimeVariable( "nombre" ); imprimeVariable( "color" );imprimeVariable( "color" ); imprimeVariable( "pais" );imprimeVariable( "pais" ); printf("</table>\n");printf("</table>\n"); printf("</body></html>");printf("</body></html>");return( 0 );return( 0 );}}

void imprimeVariable( char *lpzNombre ){void imprimeVariable( char *lpzNombre ){/*** recibe el nombre de la variable yla imprime /*** recibe el nombre de la variable yla imprime formateada como celdas de una tabla***/formateada como celdas de una tabla***/ char lpzResultado[LARGO_MAXIMO];char lpzResultado[LARGO_MAXIMO]; printf("<tr>\n");printf("<tr>\n"); printf("<td bgcolor=\"#9999FF\" valign=top>printf("<td bgcolor=\"#9999FF\" valign=top>%s</td>\n",Nombre);%s</td>\n",Nombre); printf("<td bgcolor=\"#DDDDFF\" printf("<td bgcolor=\"#DDDDFF\" valign=top><font color=#000000>");valign=top><font color=#000000>");/***aqui pide la variable y luego la imprime***//***aqui pide la variable y luego la imprime***/ formPideVariable( lpzNombre,lpzResultado,LARformPideVariable( lpzNombre,lpzResultado,LARGO_MAXIMO);GO_MAXIMO); printf(¨[%s]",lpzResultado);printf(¨[%s]",lpzResultado); printf("</td>\n");printf("</td>\n"); printf("</tr>\n");printf("</tr>\n");

Page 27: CGI Common Gateway Interface (interfaz de pasarela común)

Ejemplo con formulario:Ejemplo con formulario:

Page 28: CGI Common Gateway Interface (interfaz de pasarela común)

??