[Tip] Descarga de archivos bajo SSL

En estos dias, en mi centro de labores, nos encontramos en el proceso de migracion de un sistema que estaba corriendo bajo el framework v1.1 hacia la version 2.0, justo el dia de hoy estuve realizando unas pruebas de las diversas funcionalidades y me encontre con un pequeño problema al intentar realizar la descarga de algunos archivos Excel, problema que bajo la misma configuracion en la v1.1 no se daba, lo mismo sucedio con algunos documentos xsl que utilizabamos para dar formato a documentos XML utilizando DOM a traves de javascript, todo esto se daba bajo un entorno HTTPS, asi que me puse manos a la obra para intentar detectar cual era el posible problema.


Para ello me ayude de un utilitario al cual le he cogido bastante cariño 🙂 se llama Web Development Helper, desarrollado por nuestro amigo Nikhil Kothari que, entre otras funcionalidades, nos permite realizar un logging de la informacion que se intercambia entre el cliente y servidor, utilizando esta herramienta pude obtener que viajaba la siguiente informacion entre el cliente y el servidor, tal como lo muestro en el siguiente grafico:



 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


 


Lo importante que debemos notar en la imagen es los «response headers«, el elemento «Cache-Control«, como podemos ver la imagen esta descargando con el atributo seteado a «no-cache», esto significa que la informacion no se va a almacenar en cache y es la causa del problema ya que para poder leer o «guardar-como» el documento este primero debe alojarse en algun espacio temporal del cliente y debido a este atributo esto no esta sucediendo por lo que luego cuando el navegador intente mostrar el documento simplemente no lo va a encontrar 🙁


Ahora, yo en ningun momento defini que este atributo se seteara de este modo, pero debido a trabajar en un entorno https, automaticamente se agrega como parte de los mecanismos de seguridad, existen varios mecanismos a traves de programacion o directivas que se podrian aplicar para modificar este comportamiento, pero debido a que yo generaba un enlace hacia el archivo no tenia forma de aplicarlas, asi que recurri a la configuracion en el IIS, sobre la carpeta donde se encontraban estos archivos 🙂 en sus propiedades, en el Tab Http Headers encontramos una seccion llamada «Custom HTTP Headers» en donde podemos setear atributos o modificar los que ya vienen ( como una sobreescritura de los mismos asi que cuidado con lo que se agregue o modifique 🙂 ).


Para este caso en particular agregue un nuevo atributo justamente el que veniamos discutiendo lineas atras, el atributo «Cache-control» el cual lo setee a un nuevo valor en este caso a «public», la configuracion quedaria de la siguiente manera:



y ahora bien utilizando nuevamente la herramienta para el logging ahora obtenemos la siguiente respuesta:


Como podemos notar con la accion antes realizada sobre el IIS ha generado que el atributo «cache-control» haya sobreescrito su valor original, y perfecto ahora ya tengo disponibles una vez mas nuestros archivos para descarga :D, ya que esta directiva origina que nuestros documentos puedan almacenarse en la cache del cliente para su posterior lectura de la misma.


Por cierto tambien les dejo un enlace de como trabajar la cache directamente desde ASP.NET del equipo de soporte de Microsoft:


Cómo a caché utilizando Visual C # .NET en ASP.NET


Para mayor informacion sobre los http headers tenemos la siguiente URL:
http://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html


 


Espero sea de utilidad para quien lo necesite 🙂 ,


Ivan Mostacero

http://www.msdnlive.net/

2 comentarios sobre “[Tip] Descarga de archivos bajo SSL”

  1. Holas Ivan!

    Buen post, lo tendré en cuenta cuando trabaje en https :).

    Ya había visto la herramienta de Nikhil, pero todavía no he tenido la oportunidad de usarlo, pero como dices es altamente recomendable para rastrear información entre requests.

    Saludos,

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *