CGI

Anuncio
CLIENTE/SERVIDOR
EN INTERNET
Programación: Clientes Delgados
Dr. Víctor Jesús Sosa Sosa
vjsosa@cinvestav.mx
GENERACIÓN DINÁMICA DE PÁGINAS
CGI (Common Gateway Interface)
Módulos compilados: Servlets, ISAPI (Internet
Information Server API), NSAPI (Netscape Server API)
Páginas con scripts de servidor: ColdFusion, PHP
(Hypertext Preprocesor), ASP (Active Server Pages),
JSP (Java Server Pages)
Cliente/Servidor en 3 Planos Estilo Web
DBMS
Visualizador
Web
HTML y
formas
HTTP
HTTP
TCP/IP
de Internet
3
Cliente Web
Documentos
HTML
CGI
Aplic.
Aplic.
Aplic.
Servidor Web
Monitores
De TP
Plano 3
Plano 2
Plano 1
Lotus
-otes
FORMAS
• Introducidas en HTML 2, ahora estandar en todos los
visualizadores (browser)
• Diseñadas para la Interacción entre Usuario y Servidor
HTML 1.0
Datos de la Forma
HTML + Formas
Browser
Servidor
JavaScript
VBScript
Página -ueva
Asistentes
Plugins ActiveX
Java
• Una forma es llenada en el browser y emitida al servidor para
que sea procesada por ejemplo por un script CGI.
• En general, los formularios incluyen un botón que, al ser
pulsado por el usuario, permite enviar los datos del formulario al
servidor Web para su procesamiento.
• Existen diferentes tecnologías para procesar formularios, las
cuales permiten la generación dinámica de contenido HTML a
partir de los datos de entrada mediante la ejecución de lógica de
trabajo.
CLIENTE/SERVIDOR
EN INTERNET
Programación CGIs
Dr. Víctor Jesús Sosa Sosa
vjsosa@cenidet.edu.mx
CGI: Common Gateway Interface
Una de las formas más comunes de crear
páginas dinámicas Web es usando CGI, la
Interfaz de Pasarela Común (Common Gateway
Interface).
Usando programas CGI, el servidor puede
interactuar con aplicaciones para realizar
consultas en bases de datos, búsqueda de
documentos y procesamiento de solicitudes,
entre otras.
CGI: Programación
Normalmente, un servidor Web responde a
peticiones de documentos referenciados por
un URL.
Ocasionalmente, el cliente Web envía un
URL al servidor Web que apunta no a un
documento Web sino a una aplicación.
En este caso, el servidor activa la aplicación
la cual responde a la petición del cliente.
CGI: Programación
• Un aspecto clave en la programación CGI es
la incorporación de formas interactivas en
HTML 2.0
• Las formas colectan datos del cliente,
enviando ésta información a través del URL.
• La forma requiere del servidor que realice
una acción específica (programa CG I).
CGI: Programación
• La información producida por el CGI es
redirigida hacia el cliente como una página Web.
• El programa CGI es una aplicación desarrollada
en un lenguaje que pueda tener acceso a las
variables de ambiente del sistem a operativo.
• PERL se ha convertido en el lenguaje
predominante para escribir programas CGI.
CGI Scripts
• Las formas que se someten hacia un servidor, usualmente son procesadas
por scripts CGI corriendo en el servidor.
• Los scripts CGI pueden ser llamados directamente mediante el URL, sin
necesidad de una forma.
• Los scripts CGI peden estar hechos en cualquier lenguaje.
• Los scripts CGI pueden ser invocados por el servidor basado en algún
patrón de nombre de ruta (usualmente /cgi-bin/script).
Paso de Información a los CGIs
• Un Script es invocado desde su URL, pero alguna información adicional
pudiera haber sido agregada al URL.
• La información adicional pudiera estar en una variable de ambiente
(QUERY_STRING) o (si no se guardo en esa variable) venir de la entrada de
datos estándar.
• La información está en forma nombre/valor: nombre=valor&nombre=valor...
• La cadena de información tiene que pasar por un parser para extraer cada
valor (librerías en C, Perl, Java, Tcl, existen para hacer este trabajo, no hacerlo
otra vez).
Un Escenario Cliente/Servidor con CGI
Visualizador Web
Variables
de Entorno
Servidor Web
1
Submit
Envío
2
Método POST
4
3
Entorno de
Escritura
5 Ejecución
6
Entorno de Lectura
7
10
Regresa un
Archivo HTML
Cliente
Entrada Estandar
8
9 Salida Estandar
Servidor
CGI: Funcionamiento
1)
2)
3)
4)
5)
El cliente acumula datos de la forma HTML y los
prepara para su uso en la aplicación enviándolos
hacia el servidor en el URL usando el protocolo HTTP.
El servidor lee el URL que acompaña a la petición,
determina la aplicación que debe ejecutar y entonces
la activa.
El servidor pasa la información del URL a la
aplicación.
El programa CGI procesa los datos de la forma y
prepara la respuesta. Generalmente, la respuesta se
formatea como un documento HTML, de acuerdo al
protocolo HTTP.
El programa CGI pasa la respuesta al servidor quien la
redirige hacia el cliente.
CGI: Obtención de Datos del
Servidor
• Los datos se pasan al servidor Web de
varias formas:
Como
Como
argumentos en la línea de comandos.
variables de entorno del sistema
operativo.
Como entrada de datos estándar a un
programa.
La
mayoría
de
los
lenguajes
de
programación trabajan con los datos que se
pasan en la línea de comandos y la entrada
estándar.
Argumentos en la Línea de Comandos
• Los argumentos en la línea de comandos
son parámetros que usan los programas a
través de mecanismos propios del
lenguaje:
public void static main(String[]argv) en Java
Void main(int argc,char *argv[]) en C.
• Las consultas HTTP ISINDEX indican que
los datos se pasan como argumentos de
la línea de comandos.
CGI: Ejemplo
• El siguiente programa usa la línea de
comandos para recibir los parámetros de
la aplicación.
• El programa ejecutable Echo.exe puede
residir en el directorio /cgibin/ para
ejecutarse como programa CGI.
CGI: Ejemplo
// Echo.java
public class SysProps
{
public static void main(String[] args)
{
String argv;
if (args.length > 0)
argv = args[0];
else
argv = new String("CGI!");
System.out.println("Content-Type: text/html\n\n");
System.out.println("<HTML><BODY>");
System.out.println("<H1>”+argv+"</H1>");
System.out.println("</BODY></HTML>");
}
Este programa puede producir el texto HTML siguiente:
}
Content-Type: text/html
<HTML><BODY><H1>Hola!</H1></BODY></HTML>
CGI: Ejemplo
• El programa se activa con el siguiente URL en el
lado del cliente (browser):
http://www.miservidor.com/cgi-bin/Echo.exe?Hola!
• El directorio cgi-bin/ puede ser subdirectorio de
htdocs en el servidor: Apache (para ambos Unix
y Windows).
CGI: Ejemplo
• El programa Echo.exe también puede
activarse usando telnet dando la siguiente línea:
telnet www.miservidor.com 80
• Al responder telnet (frecuentemente, no redirige
la entrada del teclado hacia la pantalla), se
envía la petición HTTP directamente:
GET /cgi-bin/Echo.exe?Hola! HTTP/1.1 crlfcrlf
• Telnet mostrará el texto HTML generado por el
programa.
CGI: Variables de entorno
La forma de comunicación más común es
mediante las variables de entorno del sistema
operativo:
• Las variables son externas a la ejecución del
programa.
• El tamaño de los datos no pueden exceder los 40 Kb.
Las variables de entorno se pueden usar
independientemente de si la ejecución es
resultado de una petición ISINDEX, por el envío
de un formulario o por seguir un hiperenlace.
CGI: Variables de entorno
• Las variables de entorno se pueden usar
independientemente de si la ejecución es
resultado de una petición ISINDEX , por el
envío de un formulario o por seguir un
hiperenlace.
CGI: Variables de entorno
Variable
Descripción
CONTENT_LENGTH
Número de caracteres que se pasan a través de una
entrada estándar
CONTENT_TYPE
Tipo MIME asociado a los datos
GATEWAY_INTERFACE
Versión de la ción CG I del servidor
HTTP_*
Contenido de los cam pos recibidos en el encabezado
HTTP.
HTTP_ACCEPT
Contenido del campo HTTP_ACCEPT recibido en el
encabezado HTTP
PATH_INFO
Inform ación extra que se añade a la URL que
corresponde a un CGI
PATH_TRANSLATED
Ruta que el servidor Web extrae del URL
QUERY_STRING
Parte de la URL corresponde a la petición
CGI: Variables de entorno
Variable
Descripción
REMOTE_ADDR
Dirección IP del cliente
REMOTE_HOST
Dirección IP del servidor
REMOTE_IDENT
Nombre del cliente
REMOTE_USER
Nombre del asociado al cliente
REQUEST_METHOD
Método requerido por el cliente: GET, POST,
HEAD, etc.
SCRIPT_NAME
Ruta y nombre del CGI
SERVER_NAME
Nombre del servidor Web
SERVER_PROTOCOL
Nombre y versión del protocolo que se usa en la
petición
SERVER_SOFTWARE
Nombre y número de versión del servidor Web
Variables de Ambiente
• SERVER_SOFTWARE
• SERVER_NAME
• GATEWAY_INTERFACE
• SERVER_PROTOCOL
• SERVER_PORT
• REQUEST_METHOD
• HTTP_ACCEPT
• PATH_INFO
• PATH_TRANSLATED
• SCRIPT_NAME
• QUERY_STRING
• REMOTE_HOST
• REMOTE_ADDR
• REMOTE_USER
• REMOTE_IDENT
• AUTH_TYPE
• CONTENT_TYPE
• CONTENT_LENGTH
QUERY_STRING
contiene información
siguiente forma:
codificada
de
la
Los espacios se substituyen por signos +.
Los demás caracteres se pueden substituir
por %xx (dos dígitos hexadecimales).
Los datos de un formulario se codifican como
secuencia de pares name=value separados por
el signo &.
Paso de Variables de Entorno
El programa de comandos Echo.bat obtiene
la variable QUERY_STRING y la pasa en la
línea de comandos al programa Echo.exe :
@ECHO OFF
Echo.exe %QUERY_STRING%
• El programa Echo.bat se activa desde el
cliente:
HTTP://www.miservidor.com/cgi-bin/echo.bat
CGI: Formularios
• Los programas CGI procesan la
información
de
un
formulario
dependiendo del método usado GET o
POST.
• Si el formulario usa GET, los datos se
obtienen de QUERY_STRING.
• Si el formulario usa POST, los datos se
obtienen de la entrada estándar.
CGI: Formularios, Ejemplo
La forma FORM.HTML invoca a un CGI:
<HTML>
<BODY>
<H1>Hello Apache CGI!</H1>
<FORM METHOD="GET" ACTION="/cgi-bin/Echo.bat">
<INPUT TYPE="TEXTFIELD" NAME="USER"
VALUE="CGI Application">
<INPUT TYPE="SUBMIT" NAME="SEND" VALUE="OK">
</FORM>
</BODY>
</HTML>
CGI: Formularios, Ejemplo
• El URL http:/www.miservidor.com/cgibin/form.html
produce la invocación de la acción echo.bat
cuando se oprime el botón SEND (SUBMIT).
• El programa echo.exe se invoca con el valor
USER=CGI+Scripting&SEND=OK de la variable
QUERY_STRING.
• La página Web vista en el browser sería:
USER=CGI+Scripting&SEND=OK
CGI: Estado de la Sesión
• Durante la recopilación de datos de una
forma, el programa CGI no almacena
información intermedia ya que no ofrece
un estado persistente (stateless).
• La falta de persistencia se puede resolver
de dos formas:
Usando campos ocultos en la forma
Usando persistencia de objetos
Usando galletas (cookies)
Campos Ocultos
• El browser evita que los campos ocultos
se muestren en la forma, aunque pueden
usarse para almacenar información entre
transacciones.
<INPUT TYPE="hidden" NAME=".." VALUE="..">
• Usando concatenación de caracteres, el
atributo VALUE se usa para acumular los
datos obtenidos en la sesión.
CGI: Manteniendo el Estado
Estado
• Las sesiones en HTTP son sin estado.
• Las sesiones en HTTP solo duran desde la petición del visualizador a la
respuesta del servidor
• Para manejar cosas como tarjetas de compras, se necesita mantener alguna
información de la sesión o restaurarse de algun sitio
Cookies
• Las Cookies son identificadores con ningún significado en particular
• Son emitidas desde los servidores a los clientes
• Los clientes las almacenan por un periodo de tiempo
• En cada petición al mismo servidor, la cookie es incluida en la petición
• El servidor puede utilizar la cookie para restaurar el estado que colecto
recientemente, indexado por la cookie.
Campos Ocultos
•
•
•
•
•
•
Un campo en una forma HTML puede ser etiquetado como “oculto”
Este no aparecera en la forma
El valor del campo será asignado por el servidor
Cuando la forma es enviada, el campo será retornado al servidor
Información de estado puede ser ubicada en esos campos
Por privacidad, esto no debiera contener información personal.
Persistencia
• Un objeto se dice persistente cuando
extiende su duración más allá que la del
programa que lo originó.
• Los objetos persitentes requieren de un
medio de almacenamiento estable para
guardar su estado interno.
• Los objetos serializables más simples
son las cadenas de caracteres.
Persistencia
Para lograr persistencia, se necesita:
1.- Convertir la estructura y el contenido de
un objeto en memoria principal a una
forma secuencial de bytes que sea
apropiada para su almacenamiento o
trasmisión a través de una red
(serialización).
Persistencia
2. Crear un objeto idéntico al original a partir de su
forma serializada.
3. Un mecanismo para convertir a un objeto a o
desde su forma serializada, controlado ya sea
en forma automática o por programación.
• Java posee un conjunto de clases para
implementar persistencia:
ObjectOutputStream,
ObjectInputStream, Serializable,
Externalizable
Seguridad en CGIs: Servidor
• Temas importantes de seguridad en el Servidor
• El procesamiento de la forma es realizado con algún acceso al
sistema del servidor
• Lenguajes típicos utilizados son Perl, Shell, Tcl -lenguajes de
scripts que validan tipos débilmente, con capacidades de evaluación
• Los CGIs pueden ser atacados vía las Formas, o directamente.
Seguridad en CGIs: Cliente
• No hay mucho problema de seguridad en el Cliente
• Información muy limitada la que se transmite hacia el servidor
• El Identificador del Host del Cliente es conocido
• El Identificador del usuario en el Cliente es desconocido
• Si el cliente pasa información importante al servidor, la
seguridad en los servidores es el tema a preocuopar por parte del
cliente
• A los usuarios se les puede solicitar información importante, ej.
Numeros confidenciales - y pueden proveerlos -
/* ***************************************************************
Programa Espia
compilar en unix con: gcc -i espia.c -o espia.cgi
Este programa se da solo como ejemplo de programacion
de CGIs y el autor no se responsabiliza en modo alguno
por la utilizacion del mismo
*************************************************************** */
#include <stdlib.h>
void imprimeVariable( char *Nombre );
int main(){
/* *********************************** */
printf("Content-Type: text/html\n\n");
printf("<html><body bgcolor=#ffffff text=#ffffff>\n");
printf("<p align=center><table cellpadding=4 bgcolor=000000>\n");
printf("<tr><td color=000080 align=center>");
printf("<b>Variables del Sistema</b></td></tr>\n");
imprimeVariable("AUTH_TYPE");
imprimeVariable("CONTENT_LENGTH");
imprimeVariable("CONTENT_TYPE");
imprimeVariable("DOCUMENT_ROOT");
imprimeVariable("GATEWAY_INTERFACE");
imprimeVariable("HTTP_ACCEPT_LANGUAGE");
imprimeVariable("HTTP_COOKIE");
imprimeVariable("HTTP_REFERER");
imprimeVariable("HTTP_UA_COLOR");
imprimeVariable("HTTP_UA_CPU");
imprimeVariable("HTTP_UA_OS");
imprimeVariable("HTTP_UA_PIXELS");
imprimeVariable("HTTP_USER_ACCEPT");
imprimeVariable("HTTP_USER_AGENT");
imprimeVariable("HTTP_USER_CONNECTION");
imprimeVariable("PATH_INFO");
imprimeVariable("PATH_TRANSLATED");
imprimeVariable("QUERY_STRING");
imprimeVariable("REMOTE_ADDR");
imprimeVariable("REMOTE_HOST");
imprimeVariable("REMOTE_IDENT");
imprimeVariable("REQUEST_METHOD");
imprimeVariable("REMOTE_USER");
imprimeVariable("SCRIPT_FILE_NAME");
imprimeVariable("SCRIPT_NAME");
imprimeVariable("SERVER_NAME");
imprimeVariable("SERVER_SOFTWARE");
imprimeVariable("SERVER_PORT");
imprimeVariable("SERVER_PROTOCOL");
printf("</table>\n");
printf("</body></html>");
return( 0 );
void imprimeVariable( char *Nombre ){
/* *************************************
recibe el nombre de la variable y
la imprime formateada como celdas de
una tabla
************************************* */
printf("<tr>\n");
printf("<td bgcolor=\"#9999FF\" valign=top>%s</td>\n",Nombre);
printf("<td bgcolor=\"#DDDDFF\" valign=top><font color=#000000>");
/*
*********************
aqui toma la variable
y la imprime
*********************
*/
printf("%s",getenv(Nombre));
printf("</td>\n");
printf("</tr>\n");
}
}
CGI: Desventajas
• Además de la falta de persistencia, otro
problema importante es que el servidor
Web corre como proceso separado.
• La falta de interacción impide a los
programas CGI obtener información
importante del servidor (p.ej. el CGI no
puede escribir en el archivo histórico
(log) del servidor).
CGI: Alternativas
• OpenMarket
(www.fastcgi.com)
ha
desarrollado FastCGI, un estándar
alternativo que permite crear un sólo
proceso persistente por cada petición.
• Sin embargo, no reduce la proliferación
de
procesos
durante
peticiones
concurrentes.
• Tampoco mejora la interacción servidor ni
es suficientemente portable.
Alternativas CGI: PERL
• mod_perl es un módulo del servidor
Apache que mejora el rendimiento de
CGI.
• El programa demonio httpd contiene un
intérprete de Perl que ofrece acceso total
a la funcionalidad del servidor Apache.
• Los CGI son precompilados y ejecutados
en el servidor corriendo eficientemente.
CGI: Optimizaciones
CGI Básico
Servidor Web
1 proceso/petición
Proceso Principal
Petición1 a CGI A
Proc. Hijo de CGI A
Petición1 a CGI B
Proc. Hijo de CGI B
Petición1 a CGI C
Proc. Hijo de CGI C
Fast CGI
Servidor Web
1 proceso/CGI
Proceso Principal
Petición1 a CGI A
Petición1 a CGI B
Petición2 a CGI A
(único) Proc. Hijo de CGI A
Procesos persistentes.
(único) Proc. Hijo de CGI B
Alternativas CGI: Extensiones al
Servidor
• Varias empresas han desarrollado APIs
para extender sus servidores Web: ISAPI
de Microsoft y NSAPI de Netscape.
• Los APIs extienden la funcionalidad
básica del servidor para manejar tareas
relegadas a programas CGI.
• Las extensiones son difíciles de
desarrollar, mantener, portar y brindar
seguridad y confiabilidad (pueden hacer
caer al servidor).
Alternativas CGI: JavaScript en el
Servidor
• Netscape
ofrece
JavaScript
como
lenguaje interpretado de comandos en el
lado del servidor.
• JavaScript se inserta en páginas HTML
para generar contenido dinámico.
• Las páginas son precompiladas para
mejorar la eficiencia.
CGI: Optimizaciones
Uso de APIs del Servidor
NSAPI: Netscape/Sun
ISAPI: MS IIS
Módulo de Apache
Servidor Web
Proceso Principal
Petición1 extensión A
Petición1 extensión B
Extensión A
Extensiones parte del proc. servidor
Extensión B
Petición2 extensión A
Alternativas CGI: Java Servlets
• Java Servlets. Un servlet es una extensión
genérica (clases cargadas dinámicamente) que
extiende la funcionalidad del servidor.
• Cada servlet se maneja por un proceso ligero
(thread) dentro del servidor Web por lo que el
nivel de interacción es mayor que el conseguido
por CGI.
• Los servlets son más portables, escalables y
eficientes que la mayoría de las soluciones
anteriores.
CGI: Optimizaciones
Servidor Web
Servlets
Proceso Principal
Petición a servlet A
Petición servlet B
Petición servlet A
JVM
Trhead
Servlet A
Trhead
Trhead
Servlet: 1 trhead/petición
Servlet B
Servlets
• Usan clases e interfaces de 2 paquetes: javax.servlet (servlets genericos),
javax.servlet.http (añade funcionalidad particular http)
• No tienen método main() como en Java.
• Cada vez que el servidor pasa una petición a un servlet se invoca el método service(),
que habrá que reescribir (override).
• El método service() acepta 2 parámetros: objeto petición y objeto respuesta.
• Los servlets http, tienen ya redefinido el método service(), y llama a doXXX(), donde
XXX es el nombre de la orden que viene en la petición del servidor: doGet(), doPost(),
etc...
Servlets
Servidor
Web
Subclase HttpServlet
doGet()
Petición GET
Respuesta
service()
Petición POST
Respuesta
doPost()
Implementar en una subclase:
Servlets
• Ventajas Principales:
• Portabilidad. Usa las mismas llamadas (API), corre sobre Java.
• Potencia. Puede usar todo el API de java (excepto AWT), además
de comunicarse con otros componentes como RMI, CORBA, Java
Beans, Bases de Datos, etc.
• Eficiencia. Queda en la memoria del servidor como una única
instancia. Cada petición genera un trhead. Al estar persistente puede
mantener su estado con recursos externos (BD).
• Seguridad. Además de la seguridad que da la VM (gestión de
memoria, auscencia de punteros, excepciones), tiene un gestor de
seguridad “security manager” que puede evitar servlets
“malintencionados” o mal escritos que pueden dañar al servidor.
• Integración con el servidor. Puede cooperar con el servidor en
formas que los CGIs no pueden, como cambiar path de url, poner
líneas de log, comprobar autorización, asociar tipos MIME a los
objetos, incluso añadir usuarios y permisos al servidor.
Servlets
Código Fuente para el Ejemplo Hola Mundo
import java.io.*;
import javax.servlet.*;
import javax.servlet.http.*;
public class HelloWorld extends HttpServlet {
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws IOException, ServletException
{
response.setContentType("text/html");
PrintWriter out = response.getWriter();
out.println("<html>");
out.println("<body>");
out.println("<head>");
out.println("<title>Hello World!</title>");
out.println("</head>");
out.println("<body>");
out.println("<h1>Hello World!</h1>");
out.println("</body>");
out.println("</html>");
}
}
Java Server Pages (JSP)
Tecnología que permite mezclar HTML regular y estático con contenidos
dinámicamente generados a partir de servlets
Se divide en dos partes: La parte estática de HTML y la parte dinámica
generada para JSP <% %>.
<html>
<head> <title> Bienvenido a nuestra tienda </title></head>
<body>
<h1> Bienvenido a nuestra tienda </h1>
<small> Siéntase bienvenido,
<!-- el nombre del usuario será “usuario nuevo” para los visitantes de primera vez -->
<%= Utils.getNombreUsuarioDeCookie(petición) %>
. Para acceder a su configuración de cuenta, haga clic
<a href=“configurar-cuenta.html”> aquí.</a></small>
<p>
El Html estándar para el resto de la página de la tienda en Internet.
</body>
</html>
Alternativas CGI: Active Server Pages
• Microsoft ha desarrollado ASP para
insertar código (VBScript o JScript) en los
documentos HTML del servidor Web.
• El código se lee y ejecuta por el servidor
antes de que la página se envíe al cliente.
• ASP corre en IIS (v3.0) pero también en
otros
servidores
Web
con
Chili!
(www.chilisoft.com)
Ventajas de JSP
Comparado con:
• ASP. La parte dinámica está escrita en Java y no en VBScript
(transportable a más sistemas)
• PHP. Aunque es gratuito y tanto similar a ASP y a JSP, JSP cuenta con
una API más extensa (para redes, base de datos, objetos distribuidos, etc.)
• Servlets. JSP ahorra escribir muchos “println” , y divide más claramente
el trabajo de presentar contenido, con el trabajo de desarrollo de
aplicaciones.
• SSI. Server Side Inclusions. Solo orientado a aplicaciones sencillas. JSP
cuenta con más herramientas de apoyo
• JavaScript. Solo administra situaciones donde la información dinámica
esta en el lado del cliente. Con excepción de cookies, los datos de la
petición http no están disponibles para los procedimientos JavaScript
dellado del cliente. No accede a recursos del servidor (redes, BD, etc.)
CGI: Resumen de Optimizaciones
Optimizando CGIs
• Ejecutar un script CGI involucra crear un nuevo proceso
• Esto conlleva overheads
• Si el script puede correr dentro del servidor, este overhead es
removido
Ejemplos
• Active Server Pages - corren dentro del Internet Explorer
• Fast CGI
• Java servlets - corren dentro de Tomcat
• Modulos Apache
Costo/beneficio
• Menos costo de iniciación
• Pueden ser persistentes en el servidor
• Posiblemente podría estar un proceso de iniciación para
mantener la sesión
• Pero, tiene acceso a los interiores del servidor
Descargar