GET - LDC

Anuncio
HTTP, CGI, Applets
y Servlets
Sistemas de Operación II
CI-4821 Sep-Dic 2006
Mercedes Martínez
Aixbel Martínez
Mario Felaco
José Luís Castillo
Yonathan Ledo
00-33042
01-34114
02-34888
01-33691
01-34033
HTTP
Introducción
HTTP (HyperText Transfer Protocol)
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
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]
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>
CGI
(Common Gateway Interface)
CGI Common Gateway Interface
Definición
Protocolo que proporciona una interfaz o pasarela entre
un 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 puede
especificar un programa, conocido como Script CGI,
como objeto web de destino de una petición HTTP.
CGI Common Gateway Interface
Funcionamiento
CGI Common Gateway Interface
Ejemplo
CGI Common Gateway Interface
/cgi-bin
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
Variables de Entorno CGI
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
Como se envían los datos
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 ‘=’.
CGI Common Gateway Interface
Formas de enviar información
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
Ejemplo GET
CGI Common Gateway Interface
Ejemplo POST
CGI Common Gateway Interface
Seguridad en CGI
Riesgos
Vulnerabilidad
Recomendaciones
Applets
Applets
Definición
Pequeña aplicación de software que corre dentro del
contexto de otro programa.
Generalmente tienen funcionalidades limitadas que
estan 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.
Applets
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 script
son interpretados
Applets
Ejemplos de applets
Java applets
Flash
Reproductores de video/sonido
(Quicktime, WMP, Real)
Java Applets
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
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 que
desempeña la tarea.
Qué código se use depende del applet
*/
}
}
Java Applets
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-code
contenido 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
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
Servlets
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
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
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
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 hacia
el cliente.
Arquitectura
Ciclo de vida
Ciclo de vida
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; }
}
Ciclo de vida
protected void service(HttpServletRequest req,
HttpServletResponse resp)
throws ServletException, IOException
}
enteringServiceMethod();
try {
super.service(req, resp);
}
finally {
leavingServiceMethod();
}
{
Ciclo de vida
...
//Access methods for shuttingDown
protected 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) { }
}
}
Ciclo de vida
public void doPost(...) {
...
for(i = 0; ((i < lotsOfStuffToDo) && !isShuttingDown()); i++) {
try {
partOfLongRunningOperation(i);
} catch (InterruptedException e) {
}
}
}
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.
Estados de los clientes
2 mecanismos:
Sesiones HTTP mediante la interfaz
HttpSession.
Cookies.
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
Ventajas y Desventajas
Desarrollo:
el programador tiene acceso a la tecnología
Java y todas sus facilidades.
Seguridad
Seguridad Declarativa
Seguridad Programática:
Se apoya en 3 métodos:
getRemoteUser
isUserInRole
getUserPrincipal
Roles
Seguridad
Autentificaciones:
Autentificación Básica HTTP.
Resumen de Autentificación HTTP.
Autentificación de Clientes HTTPS.
Autentificación Basada en Formularios.
Descargar