domingo, noviembre 12, 2006

Http Handlers

Ha pasado mucho tiempo desde que escribí un post. Esto se debe principalmente a que como comente anteriormente mi portátil estuvo en reparaciones y la máquina de reemplazo no tenía los recursos para poder hacer las pruebas que debían acompañar al post. Sin embargo, este post estuvo en trabajo por mucho tiempo.

¿Qué es un HTTP handler?

Veamos para entenderlo creo que es mejor mostrar un diagrama del flujo que sigue un requerimiento que llega a un servidor IIS ejecutando ASP.Net

Antes de seguir debo aclarar que este diagrama es reducido al proceso en ASP.Net y no considera el proceso propio de IIS.

Ahora si, en materia, como se ve en el diagrama ASP.Net procesa todos los requerimientos a través de un Http Handler que es configurado por path y requerimiento Http (GET; POST; PUT; etc).

El Http Handler recibe el requerimiento en bruto y es el encargo de procesarlo para enviar una respuesta. Por ejemplo .Net utiliza el "forbidden Http Handler" para proteger archivos de configuración, código fuente, base de datos, etc., este Http Handler lo único que hace es responder que el acceso a los recursos solicitados esta denegado.

Las páginas web, los eventos y todo el manejo que tantos usuarios queremos es provisto por por el PageHandlerFactory, así como el manejo de los serviciso Web es provisto por el WebServiceHandlerFactory.

¿Porque necesito saber de los handlers?

Esta es una tipica pregunta, bueno las respuesta son variadas pero yo enumero algunos ejemplos:

  • Seguridad. Es de conocimiento de todos que un sitio web que maneja información crítica debe ser protegido adecuadamente y una de las principales prácticas en temas de seguridad es la reducción de la superficie de ataque. Es decir deshabilitar todos aquellos componentes que no utilicemos. Por ejemplo en un sitio de servicios Web es recomendable deshabiltiar el PageHandlerFactory y de ser posible incluir la extensión aspx en la sección de forbiden. También deberían incluirse en forbidden extensiones como ser cgi, asp, etc.
  • Reutilización. Un handler es una herramienta muy poderosa para lograr grandes niveles de reutilización. Por ejemplo se podría crear un handler que lea un xml y con eso genere un feed en un formato especifico (RSS, ATOM u algún otro). Esto hace que todas mis aplicaciones solo tengan que generar un XML interno y cualquier cambio en la salida lo define en el Handler.
  • Performance. Hoy casi todas las aplicaciones necesitan almacenar algún tipo de archivo en la base de datos y para recuperarlo se crea una página que en base a los parámetros limpia el response y manda el resultado. SI bien esto no es malo (y muchos proyectos públicos muy grandes lo usan) es muy ineficiente y resta gran escalabilidad a la solución. ¿Por qué? pues porque para atender el requerimiento se creo una instancia del PageHandlerFactory una instancia de una página, se hizo manejo de eventos y muchas otras cosas innecesarias, en este escenario un handler evita toda esta maquinaría y es más directo en el envío de la respuesta resultando en ganancia de performance y escalabilidad. Para que quede claro esta recomendación no solo es valida para la carga y descarga de imágenes, sino para: Feeds, documentos, páginas Html estáticas ensambladas, Filtro de contenido, etc.

Creo que estas son muy buenas razones para que los desarrolladores presten atención a los Http Handlers y piensen mejor cuando podrían utilizarlas.

En un próximo post haré un ejemplo más concreto en el cual trataré de mostrar la ganancia en seguridad y performance. Eso si tendrán que esperar a que retorne mi portátil.

No hay comentarios.: