HTTP, CGI, Applets y Servletsyudith/docencia/ci-4821/http_cgi_applets... · cuyo valor ASCII sea...

42
Sistemas de Operación II CI-4821 Sep-Dic 2006 Mercedes Martínez 00-33042 Aixbel Martínez 01-34114 Mario Felaco 02-34888 José Luís Castillo 01-33691 Yonathan Ledo 01-34033 HTTP, CGI, Applets y Servlets

Transcript of HTTP, CGI, Applets y Servletsyudith/docencia/ci-4821/http_cgi_applets... · cuyo valor ASCII sea...

Page 1: HTTP, CGI, Applets y Servletsyudith/docencia/ci-4821/http_cgi_applets... · cuyo valor ASCII sea ‘xx’ en hexadecimal. ... Como se envían los datos. Existen dos formas de enviar

Sistemas de Operación II CI-4821 Sep-Dic 2006

Mercedes Martínez 00-33042Aixbel Martínez 01-34114

Mario Felaco 02-34888José Luís Castillo 01-33691Yonathan Ledo 01-34033

HTTP, CGI, Appletsy Servlets

Page 2: HTTP, CGI, Applets y Servletsyudith/docencia/ci-4821/http_cgi_applets... · cuyo valor ASCII sea ‘xx’ en hexadecimal. ... Como se envían los datos. Existen dos formas de enviar

HTTP

Page 3: HTTP, CGI, Applets y Servletsyudith/docencia/ci-4821/http_cgi_applets... · cuyo valor ASCII sea ‘xx’ en hexadecimal. ... Como se envían los datos. Existen dos formas de enviar

Este protocolo de transferencia es el sistema mediante el cual se envían las peticiones para acceder a una página web así como también las respuestas de la misma.

Algunas características del mismo:� Es un protocolo sin estado.� Esta basado en el modelo Cliente-Servidor.� El puerto por defecto mediante el cual realiza las comunicaciones es el 80.

Introducción

HTTP (HyperText Transfer Protocol)

Page 4: HTTP, CGI, Applets y Servletsyudith/docencia/ci-4821/http_cgi_applets... · cuyo valor ASCII sea ‘xx’ en hexadecimal. ... Como se envían los datos. Existen dos formas de enviar

Introducción

Ejemplo de comunicación en HTTP:

Acceder la página www.host.com/index.html:

�Se abre el socket de comunicación en el puerto 80.�Se envía un mensaje como el siguiente:

GET /index.html HTTP/1.0

From: [email protected]

User-Agent: HTTPTool/1.0

[Línea en blanco]

Page 5: HTTP, CGI, Applets y Servletsyudith/docencia/ci-4821/http_cgi_applets... · cuyo valor ASCII sea ‘xx’ en hexadecimal. ... Como se envían los datos. Existen dos formas de enviar

Introducción

Ejemplo de comunicación en HTTP:

La respuesta del servidor es de la siguiente forma:

HTTP/1.0 200 OK

Date: Fri, 31 Dec 2003 23:59:59 GMT

Content-Type: text/html Content-Length: 1221

<html>

<body>

<h1>Página principal de tuHost</h1>

(Contenido)

. . .

</body>

</html>

Page 6: HTTP, CGI, Applets y Servletsyudith/docencia/ci-4821/http_cgi_applets... · cuyo valor ASCII sea ‘xx’ en hexadecimal. ... Como se envían los datos. Existen dos formas de enviar

CGI (Common Gateway Interface)

Page 7: HTTP, CGI, Applets y Servletsyudith/docencia/ci-4821/http_cgi_applets... · cuyo valor ASCII sea ‘xx’ en hexadecimal. ... Como se envían los datos. Existen dos formas de enviar

Protocolo que proporciona una interfaz o pasarela entreun servidor de información y un proceso externo.

Su función principal es la de añadir una mayor interacción a los documentos web que por medio del HTML se presentan de forma estática.

Utilizando el protocolo CGI, un cliente web puedeespecificar un programa, conocido como Script CGI, como objeto web de destino de una petición HTTP.

CGI Common Gateway Interface

Definición

Page 8: HTTP, CGI, Applets y Servletsyudith/docencia/ci-4821/http_cgi_applets... · cuyo valor ASCII sea ‘xx’ en hexadecimal. ... Como se envían los datos. Existen dos formas de enviar

CGI Common Gateway Interface

Funcionamiento

Page 9: HTTP, CGI, Applets y Servletsyudith/docencia/ci-4821/http_cgi_applets... · cuyo valor ASCII sea ‘xx’ en hexadecimal. ... Como se envían los datos. Existen dos formas de enviar

CGI Common Gateway Interface

Ejemplo

Page 10: HTTP, CGI, Applets y Servletsyudith/docencia/ci-4821/http_cgi_applets... · cuyo valor ASCII sea ‘xx’ en hexadecimal. ... Como se envían los datos. Existen dos formas de enviar

Es un directorio especial, que contiene

los scripts, configurado dentro del servidor

http. El servidor conoce que este directorio

contiene ejecutables que deberán ser

ejecutados y su salida deberá ser enviada

al navegador del cliente.

CGI Common Gateway Interface

/cgi-bin

Page 11: HTTP, CGI, Applets y Servletsyudith/docencia/ci-4821/http_cgi_applets... · cuyo valor ASCII sea ‘xx’ en hexadecimal. ... Como se envían los datos. Existen dos formas de enviar

CGI utiliza variables de entorno que son

escritas por el servidor HTTP para pasar

información sobre las peticiones a los

programas externos.

Algunas de estas variables son:� REUQEST_METHOD: tipo de método con el que se ha realizado la

petición.

� QUERY_STRING: contiene la cadena de caracteres codificada.

� CONTENT_TYPE: el tipo de contenido de los datos.

� CONTENT_LENGTH: la longitud de la cadena de interrogación en

número de bytes.

CGI Common Gateway Interface

Variables de Entorno CGI

Page 12: HTTP, CGI, Applets y Servletsyudith/docencia/ci-4821/http_cgi_applets... · cuyo valor ASCII sea ‘xx’ en hexadecimal. ... Como se envían los datos. Existen dos formas de enviar

CGI Common Gateway Interface

Formato de la cadena:

nombre1=valor1&nombre2=valor2&nombre3=valor3“

Así que sólo hay que dividir donde están los signos ‘&’ y

‘=’, y luego hacer dos cosas a cada nombre y valor:

1.Convertir todos los signos ‘+’ a espacios.

2.Convertir todas las secuencias ‘%xx’ al valor del carácter

cuyo valor ASCII sea ‘xx’ en hexadecimal. Por ejemplo

convertir ‘%3d’ a ‘=’.

Como se envían los datos

Page 13: HTTP, CGI, Applets y Servletsyudith/docencia/ci-4821/http_cgi_applets... · cuyo valor ASCII sea ‘xx’ en hexadecimal. ... Como se envían los datos. Existen dos formas de enviar

Existen dos formas de enviar información, por medio

de GET y POST.

GET

envía la información dentro del URL separando los campos con

signos de interrogación '?' antes de la información.

POST

envía la información directamente al servidor, haciéndolo invisible

en el URL

CGI Common Gateway Interface

Formas de enviar información

Page 14: HTTP, CGI, Applets y Servletsyudith/docencia/ci-4821/http_cgi_applets... · cuyo valor ASCII sea ‘xx’ en hexadecimal. ... Como se envían los datos. Existen dos formas de enviar

CGI Common Gateway Interface

Ejemplo GET

Page 15: HTTP, CGI, Applets y Servletsyudith/docencia/ci-4821/http_cgi_applets... · cuyo valor ASCII sea ‘xx’ en hexadecimal. ... Como se envían los datos. Existen dos formas de enviar

CGI Common Gateway Interface

Ejemplo POST

Page 16: HTTP, CGI, Applets y Servletsyudith/docencia/ci-4821/http_cgi_applets... · cuyo valor ASCII sea ‘xx’ en hexadecimal. ... Como se envían los datos. Existen dos formas de enviar

Riesgos

Vulnerabilidad

Recomendaciones

CGI Common Gateway Interface

Seguridad en CGI

Page 17: HTTP, CGI, Applets y Servletsyudith/docencia/ci-4821/http_cgi_applets... · cuyo valor ASCII sea ‘xx’ en hexadecimal. ... Como se envían los datos. Existen dos formas de enviar

Applets

Page 18: HTTP, CGI, Applets y Servletsyudith/docencia/ci-4821/http_cgi_applets... · cuyo valor ASCII sea ‘xx’ en hexadecimal. ... Como se envían los datos. Existen dos formas de enviar

Definición

Applets

Pequeña aplicación de software que corre dentro del contexto de otro programa.

Generalmente tienen funcionalidades limitadas queestan más allá de las del programa en donde corren.

Debe correr en un contenedor en el programa anfitrión, a través de un plugin.

Page 19: HTTP, CGI, Applets y Servletsyudith/docencia/ci-4821/http_cgi_applets... · cuyo valor ASCII sea ‘xx’ en hexadecimal. ... Como se envían los datos. Existen dos formas de enviar

Diferencias entre applet y script

� El applet corre en el lado del cliente

� El applet generalmente posee una interfaz gráfica con el usuario

� Es compilado, mientras que los scriptson interpretados

Applets

Page 20: HTTP, CGI, Applets y Servletsyudith/docencia/ci-4821/http_cgi_applets... · cuyo valor ASCII sea ‘xx’ en hexadecimal. ... Como se envían los datos. Existen dos formas de enviar

Ejemplos de applets

� Java applets

� Flash

� Reproductores de video/sonido (Quicktime, WMP, Real)

Applets

Page 21: HTTP, CGI, Applets y Servletsyudith/docencia/ci-4821/http_cgi_applets... · cuyo valor ASCII sea ‘xx’ en hexadecimal. ... Como se envían los datos. Existen dos formas de enviar

Ventajas

� Independiente de plataformas

� Soportado por la mayoría de los browsers

� Se puede guardar en caché, acelerando el tiempo de carga

� Permisos limitados predeterminados

� Con permiso, puede tener acceso a la máquina que lo está corriendo

Java Applets

Page 22: HTTP, CGI, Applets y Servletsyudith/docencia/ci-4821/http_cgi_applets... · cuyo valor ASCII sea ‘xx’ en hexadecimal. ... Como se envían los datos. Existen dos formas de enviar

Uso//Sección de importaciones

public class NombreDelNuevoApplet extends Applet {// Aquí se declaran las variables de estado (public y

private)

/*Los métodos para la interacción con los objetos se declaran y definen aquí*/public void MetodoUno( parámetros ) {/* Aquí viene para cada método, el código Java quedesempeña la tarea.Qué código se use depende del applet*/}

}

Java Applets

Page 23: HTTP, CGI, Applets y Servletsyudith/docencia/ci-4821/http_cgi_applets... · cuyo valor ASCII sea ‘xx’ en hexadecimal. ... Como se envían los datos. Existen dos formas de enviar

Llamadas

<APPLET CODE="SuCodigo.class" WIDTH=100 HEIGHT=50> </APPLET>

Llama al applet SuCodigo.class y establece su ancho y alto inicial.

Cuando se acceda a la página Web donde se encuentre incluida la línea, se ejecutará el byte-codecontenido en SuCodigo.class, obteniéndose el resultado de la ejecución del applet en la ventana del navegador, con soporte Java, que se esté utilizando.

Java Applets

Page 24: HTTP, CGI, Applets y Servletsyudith/docencia/ci-4821/http_cgi_applets... · cuyo valor ASCII sea ‘xx’ en hexadecimal. ... Como se envían los datos. Existen dos formas de enviar

Desventajas

� Requiere el plugin de Java

� JVM tiene que correr, aumentando el tiempo de carga

� Se tiene que bajar de internet

� Se dificulta diseñar una buena interfaz gráfica

� Si se “guinda” JRE se lleva el browser y posiblemente el sistema

Java Applets

Page 25: HTTP, CGI, Applets y Servletsyudith/docencia/ci-4821/http_cgi_applets... · cuyo valor ASCII sea ‘xx’ en hexadecimal. ... Como se envían los datos. Existen dos formas de enviar

Servlets

Page 26: HTTP, CGI, Applets y Servletsyudith/docencia/ci-4821/http_cgi_applets... · cuyo valor ASCII sea ‘xx’ en hexadecimal. ... Como se envían los datos. Existen dos formas de enviar

Servlets

� Definición

� Contenedor o motor de Servlets

� Arquitectura

� Ciclo de Vida

� Modelos de subproceso y problemas con Threads

� Estados de los clientes

� Ventajas, Desventajas y Seguridad

Page 27: HTTP, CGI, Applets y Servletsyudith/docencia/ci-4821/http_cgi_applets... · cuyo valor ASCII sea ‘xx’ en hexadecimal. ... Como se envían los datos. Existen dos formas de enviar

Definición de Servlet

� Componente Web basado en Java

� Genera contenido dinámico

� Opción ante ASP, PHP, Python y JSP (caso particular de servlet).

� JSR 154

Page 28: HTTP, CGI, Applets y Servletsyudith/docencia/ci-4821/http_cgi_applets... · cuyo valor ASCII sea ‘xx’ en hexadecimal. ... Como se envían los datos. Existen dos formas de enviar

Contenedor o motor de servlets

� Provee servicios de red para atender las peticiones y respuestas que se envian

� Debe dar soporte a los protocolos HTTP/1.0, HTTP/1.1 y HTTPS

� Implementan la interfaz servletContext

Page 29: HTTP, CGI, Applets y Servletsyudith/docencia/ci-4821/http_cgi_applets... · cuyo valor ASCII sea ‘xx’ en hexadecimal. ... Como se envían los datos. Existen dos formas de enviar

Arquitectura

� Implementa la interfaz java.servlet.Servlet o hereda de una clase conveniente para el protocolo deseado, por ejemplo, java.servlet.HttpServlet.

� Para efectuar la interacción con los clientes recibe dos objetos:

� Un ServletRequest, que encapsula la comunicación desde el cliente al servidor.

� Un ServletResponse, que encapsula la comunicación de vuelta desde el servlet haciael cliente.

Page 30: HTTP, CGI, Applets y Servletsyudith/docencia/ci-4821/http_cgi_applets... · cuyo valor ASCII sea ‘xx’ en hexadecimal. ... Como se envían los datos. Existen dos formas de enviar

Arquitectura

Page 31: HTTP, CGI, Applets y Servletsyudith/docencia/ci-4821/http_cgi_applets... · cuyo valor ASCII sea ‘xx’ en hexadecimal. ... Como se envían los datos. Existen dos formas de enviar

Ciclo de vida

Page 32: HTTP, CGI, Applets y Servletsyudith/docencia/ci-4821/http_cgi_applets... · cuyo valor ASCII sea ‘xx’ en hexadecimal. ... Como se envían los datos. Existen dos formas de enviar

Ciclo de vida

Page 33: HTTP, CGI, Applets y Servletsyudith/docencia/ci-4821/http_cgi_applets... · cuyo valor ASCII sea ‘xx’ en hexadecimal. ... Como se envían los datos. Existen dos formas de enviar

Ciclo de vida

public ShutdownExample extends HttpServlet { private int serviceCounter = 0; ...protected synchronized void enteringServiceMethod() {

serviceCounter++;}protected synchronized void leavingServiceMethod() {

serviceCounter--;}protected synchronized int numServices() {

return serviceCounter; }}

Page 34: HTTP, CGI, Applets y Servletsyudith/docencia/ci-4821/http_cgi_applets... · cuyo valor ASCII sea ‘xx’ en hexadecimal. ... Como se envían los datos. Existen dos formas de enviar

Ciclo de vida

protected void service(HttpServletRequest req,HttpServletResponse resp)

throws ServletException, IOException {

enteringServiceMethod();try {

super.service(req, resp); }finally {

leavingServiceMethod(); }

}

Page 35: HTTP, CGI, Applets y Servletsyudith/docencia/ci-4821/http_cgi_applets... · cuyo valor ASCII sea ‘xx’ en hexadecimal. ... Como se envían los datos. Existen dos formas de enviar

Ciclo de vida... //Access methods for shuttingDownprotected setShuttingDown(Boolean flag){

shuttingDown = flag; } protected Boolean isShuttingDown() {

return shuttingDown; }

public void destroy() {if (numServices() > 0) {

setShuttingDown(true); }while(numServices() > 0) {

try {Thread.sleep(interval);}

catch (InterruptedException e) { } }

}

Page 36: HTTP, CGI, Applets y Servletsyudith/docencia/ci-4821/http_cgi_applets... · cuyo valor ASCII sea ‘xx’ en hexadecimal. ... Como se envían los datos. Existen dos formas de enviar

Ciclo de vida

public void doPost(...) {...for(i = 0; ((i < lotsOfStuffToDo) && !isShuttingDown()); i++) {

try {partOfLongRunningOperation(i);

} catch (InterruptedException e) { }}

}

Page 37: HTTP, CGI, Applets y Servletsyudith/docencia/ci-4821/http_cgi_applets... · cuyo valor ASCII sea ‘xx’ en hexadecimal. ... Como se envían los datos. Existen dos formas de enviar

Modelos de subproceso. Problemas con Threads.

� Problemas con las Variables de Instancia en accesos concurrentes.

� Solución: evitar las variables de instancia y

utilizar variables locales definidas dentro del

método service().

� Otra solución: los servlets pueden cambiar

este comportamiento si implementan

singleThreadModel.

Page 38: HTTP, CGI, Applets y Servletsyudith/docencia/ci-4821/http_cgi_applets... · cuyo valor ASCII sea ‘xx’ en hexadecimal. ... Como se envían los datos. Existen dos formas de enviar

Estados de los clientes

� 2 mecanismos:� Sesiones HTTP mediante la interfaz

HttpSession.

� Cookies.

Page 39: HTTP, CGI, Applets y Servletsyudith/docencia/ci-4821/http_cgi_applets... · cuyo valor ASCII sea ‘xx’ en hexadecimal. ... Como se envían los datos. Existen dos formas de enviar

Ventajas y Desventajas

� Rendimiento y Desempeño:

� En comparación con los CGI ejecutan con

mayor rapidez ya que están basados en el

modelo de Threads.

� Simplicidad y Portabilidad:

� se ejecutan en como cualquier otra aplicación

java en una maquina virtual, en un entorno de

servidor controlado y sólo necesita de http

básico para comunicarse con los clientes

Page 40: HTTP, CGI, Applets y Servletsyudith/docencia/ci-4821/http_cgi_applets... · cuyo valor ASCII sea ‘xx’ en hexadecimal. ... Como se envían los datos. Existen dos formas de enviar

Ventajas y Desventajas

� Desarrollo:

� el programador tiene acceso a la tecnología

Java y todas sus facilidades.

Page 41: HTTP, CGI, Applets y Servletsyudith/docencia/ci-4821/http_cgi_applets... · cuyo valor ASCII sea ‘xx’ en hexadecimal. ... Como se envían los datos. Existen dos formas de enviar

Seguridad

� Seguridad Declarativa

� Seguridad Programática:

� Se apoya en 3 métodos:� getRemoteUser

� isUserInRole

� getUserPrincipal

� Roles

Page 42: HTTP, CGI, Applets y Servletsyudith/docencia/ci-4821/http_cgi_applets... · cuyo valor ASCII sea ‘xx’ en hexadecimal. ... Como se envían los datos. Existen dos formas de enviar

Seguridad

� Autentificaciones:

� Autentificación Básica HTTP.

� Resumen de Autentificación HTTP.

� Autentificación de Clientes HTTPS.

� Autentificación Basada en Formularios.