LENGUAJES DE SCRIPTS O GUIONES:
2.2.2.2 HERRAMIENTAS DINÁMICAS DEL LADO DEL SERVIDOR
En el caso de las herramientas del lado del servidor, el código de la aplicación web se ejecuta en el servidor. Cuando una página es solicitada por parte de un cliente, el servidor ejecuta una aplicación (scripts o programas en el servidor, que pueden conectarse con bases de datos, entre otras cosas) y genera una página de resultado, que envía al cliente. La página web de resultado contiene únicamente código que entiende el navegador, por lo que puede ser interpretada independientemente por cualquier navegador sin lugar a errores, de este modo la compatibilidad está garantizada. Ver Fig. 2.14.
La independencia del navegador y contar con todos los recursos del servidor son ventajas significativas con relación a las herramientas del lado del cliente. Dichos recursos que podrían ser gestores de bases de datos, servidores de correo o el propio sistema de archivos del servidor, son los que permiten construir todo tipo de aplicaciones.
Cliente Servidor Aplicación GET /programa.cgi/par1 HTTP 1.0 Petición
Respuesta
Ejecutar programa o
script Resultado
Como ventaja adicional se puede destacar que el código de las aplicaciones web nunca llega al cliente, ya que al navegador sólo le llega HTML, DHTML, WML, JavaScript, etc., y esto implica que los visitantes nunca van a poder acceder al núcleo de las aplicaciones, es decir, a los scripts o programas del lado del servidor. Además no es impresindible la presencia de un formulario para que un script o programa del lado del servidor se ejecute. La desventaja está en que el servidor se sobrecarga de trabajo ya que además de servir páginas es responsable de ejecutar aplicaciones. Mientras existe más demanda, se consumen más recursos.
Las herramientas del lado del servidor se deben utilizar cuando: • El sitio web debe funcionar en cualquier navegador.
• Se desea proteger el código fuente de las aplicaciones web.
• Se necesita mayor velocidad de procesamiento; los scripts del servidor son más rápidos. • Se requiere interacción con Bases de Datos en el servidor.
• Es necesario utilizar variables de entorno (variables HTTP) del servidor.
• Se requiere controlar la permanencia del usuario en un sitio web mediante Sesiones. • Se necesita crear páginas con contenido dinámico, a partir de las entradas del usuario. • Se necesita comprobar las capacidades del navegador del usuario.
• Es necesario una potencia de cálculo y procesamiento que no se puede obtener en el cliente.
• Se necesita establecer comunicación entre el servidor web y el navegador. Para este propósito, existen numerosas variables HTTP que van desde la dirección IP del usuario hasta el tipo de navegador que está utilizando. Esta información puede ser utilizada por los scripts del servidor.
[WWW-21]
En general, el funcionamiento de las herramientas del lado del servidor se puede resumir en cuatro pasos:
• El navegador envía una petición.
• El servidor ejecuta una aplicación web(programas o scripts) que realiza una determinada acción.
• El servidor envía el resultado de dicha aplicación al navegador. • El navegador muestra al cliente el resultado recibido del servidor.
Para el desarrollo de aplicaciones web del lado del servidor, las herramientas que se pueden utilizar se dividen en tres categorías:
• El protocolo estándar CGI y su variante FastCGI. • APIs provistas por el servidor web: ISAPI, NSAPI. • Módulos del servidor, para interpretar:
• PERL, directivas SSI.
• Scripts incrustados en páginas web, para crear páginas de tipo: PHP(.php), ASP(.asp), JSP(.jsp), CFML(.cfm).
Cabe destacar que con las herramientas del lado del servidor se pueden crear programas, aplicaciones o scripts que pueden ser invocados desde cualquier elemento de un formulario(botones, enlaces) o desde la URL directamente. Por lo cual hay que tener mucho cuidado en programarlos.
Se puede comprender de mejor manera la clasificación y funcionamiento de las herramientas tanto del lado del cliente y del lado del servidor, por medio de la siguiente figura. Ver Fig. 2.15.
Cliente Servidor Datos Applets HTTP CGI JavaScript/ Aplicación externa HTML/XML/WML Servidor Web
Fig. 2.15 Clasificación de herramientas de generación de contenido dinámico
BDD JSP, ASP, PHP CFML, Servlets JavaBeans, etc. VBScript ODBC/ JDBC PostgreSQL, MySQL, Oracle, SQL Server, etc.
PROTOCOLO ESTÁNDAR CGI
Las aplicaciones CGI hasta no hace mucho eran la única alternativa real para crear páginas dinámicas. En general CGI es un protocolo que fue creado por NCSA para establecer un mecanismo estándar de comunicación entre un servidor web y un lenguaje de programación, de tal forma que desde aplicaciones programadas en dicho lenguaje el servidor web pueda procesar peticiones de usuario.
Con la ayuda de CGI, un servidor web pasa una petición de usuario a una aplicación (programa o script que se encuentra y se ejecuta en tiempo real en dicho servidor), recibe datos que el usuario envía, los procesa y retransmite como respuesta a la solicitud del navegador. La respuesta es generada como resultado de la ejecución de la aplicación. Una manera común de utilizar CGI es al enviar formularios, donde el navegador envía los datos a la aplicación CGI que reside en el servidor y éste se encarga de procesarlos para generar una página de respuesta. Los datos que el usuario envía se almacenan en variables de entorno protegidas.
El mecanismo de las aplicaciones CGI, se puede utilizar comúnmente para programar contadores, motores de búsqueda, generadores de e-mail automático, foros de discusión, chats, comercio electrónico, mapas de imágenes, juegos en línea e interactuar con bases de datos y formularios, entre otros.
Servidor Web
BDD
Fig. 2.16 Funcionamiento de CGI
Programa o Script en: C, C++, PERL, etc. Respuesta del programa o script Llamada a programa o script externo Petición HTTP GET/cgi-bin/progs/prog.cgi Resultado CGI Página de Respuesta Petición Proceso externo CGI
CARACTERÍSTICAS DE CGI
• Una aplicación CGI puede ser escrita como programa(lenguajes compilados) o como script(lenguajes interpretados). Los lenguajes compilados deben permitir crear archivos ejecutables(C, C++, Pascal, Java, TCL, Fortran, Delphi, Python, etc.). Cabe destacar que PERL que es un lenguaje interpretado es el más utilizado. Sin embargo los lenguajes compilados son más seguros, ya que impiden el acceso al código.
• Un lenguaje para crear CGIs debe ser capaz de accesar a las variables de entorno. • La extensión para un programa CGI depende del lenguaje o como se configure el
servidor web. Generalmente la extensión es .cgi. Si es programado en PERL es .pl. • Requiere obligatoriamente de un servidor web, ya que ahí reside la aplicación. • Permite desarrollo de aplicaciones distribuidas, acceso concurrente y/o compartido. • Se crea un proceso cada vez que se debe ejecutar la aplicación CGI, significando un
proceso por cada petición de usuario.
• La ejecución de un programa en el servidor es relativamente peligrosa, por lo tanto un CGI debe estar en un directorio determinado(/cgi-bin/) y ser programado con cuidado. Ya que puede ser invocado desde cualquier elemento del formulario(botón, enlace) o desde la URL.
VENTAJAS Y DESVENTAJAS DE CGI
• Esta interfaz rápidamente se volvió un estándar, siendo implementada en todo tipo de servidores web, ya que permite la elección del lenguaje.
• Es portable, trabaja sobre cualquier plataforma que soporte CGI y el lenguaje en que esté programada la aplicación(programa o scripts). Los CGI para Windows se denominan WinCGI y deben ser ejecutables de modo consola.
• El problema con los programas en CGI radica cuando las solicitudes por parte de los clientes son demasiadas para el servidor, entonces el tiempo de respuesta aumenta en la creación de la página de resultado.
• Otro problema es que un CGI no conoce, ni maneja, ni implementa el concepto de sesiones.
• Un gran problema es que la lógica de desarrollo está incluida en el programa o script que es el encargado de la creación de la página web de respuesta, de esta manera es
casi imposible cambiar el diseño de la página, debido a que la información necesita concordar con la presentación.
• Una aplicación CGI mal diseñada podría permitir el acceso total o parcial al servidor.
FUNCIONAMIENTO DE CGI
Un cliente, desde un navegador, llena los datos en un formulario, dichos datos son enviados al servidor web por medio de las variables de entorno en forma de petición, dicha petición es atendida por una aplicación CGI. La aplicación CGI procesa la petición por medio de sus programas o scripts, accesa a la base de datos y a otros recursos del servidor y genera una página web de respuesta hacia el cliente. Dicha página es enviada línea a línea por la salida estándar. Ver Fig. 2.16.
Cada vez que el servidor recibe una solicitud que accesa a un programa CGI, debe crear un nuevo proceso para la ejecución de dicho programa, pasándole a través de variables de entorno o datos, desde la entrada estándar, la información que pudiera ser necesaria para generar la respuesta. Crear un nuevo proceso para cada solicitud requiere de tiempo y de significantes recursos del servidor, limitando el número de solicitudes que pueden ser procesadas de manera concurrente. [WWW-22]
FastCGI
FastCGI es una alternativa a CGI estándar, cuya diferencia radica principalmente en el hecho de que el servidor crea un único proceso persistente por cada programa FastCGI en lugar de por cada solicitud del cliente. Este proceso no muere, tras atender a un usuario, sino que se queda residente en memoria esperando por una nueva petición.
Considerando que cada uno de estos procesos puede estar por ejemplo ejecutando el intérprete de PERL, este modelo no parece tan distinto del CGI estándar. Una solución que FastCGI ofrece para este problema es su habilidad para distribuir todos estos procesos entre múltiples servidores, e incluso correr en una máquina distinta al servidor web. [WWW-23] Existen implementaciones disponibles para los principales servidores web del mercado: Apache, Netscape, Internet Information Server, Zeus Web Server y bibliotecas para su
utilización con los lenguajes: C, C++, PERL, Java, Python, etc.
En resumen, FastCGI intenta mejorar al estándar CGI y a las APIs, de las que se habla a continuación.