miércoles, 7 de marzo de 2012

Descargar https://algo en IE - Cabeceras PHP

¡Buf! Bueno, me ha costado, pero al final ha salido. Resulta que tengo una aplicación web que genera en un momento dado un fichero de Excel. Cuando he habilitado la famosa "s" para añadir cifrado a las páginas, pasando del HTTP al HTTPS, pues resulta que el fichero Excel me lo descargaba bien con Firefox y con Chrome, pero se interrumpía la descarga con IE 9.

Tras unas 3 ó 4 horas leyendo, al final he detectado el problema, pero encontré una solución que tenía un error tipográfico y eso me llevó loco. La clave está en enviar una cabecera en la página que produce la página. Antes, tenía estas 2 cabeceras:

header("Content-type: application/vnd.ms-excel");
header("Content-Disposition:  filename=\"TABLA.XLS\";");

Ahora, he tenido que añadir esta tercera:

header("Cache-Control: max-age=1");

Básicamente, lo que eso hace es permitir que la página cifrada se cachee en un fichero temporal. Si no queremos que eso ocurra (poniéndonos un poco paranoicos con la seguridad, que es lo que me pasa a mí), pues pedimos que el tiempo máximo de duración del fichero cacheado sea de 1 segundo. 

Si queréis la explicación detallada, aquí la mejor página de las que he leído con la explicación: