Impossibile salvare documenti Internet Explorer da un sito Web SSL o con Basic Auth

Nel corso dello sviluppo di una demo per un cliente siamo incappati in un errore stranissimo, quando si tentava di scaricare il file certificate.p12 appariva una finestra con l’errore “Impossibile aprire il sito Internet. Sito non disponibile o non trovato. Riprovare.” la cosa si verificava solo con l’uso di Internet Explorer (6 o 7)… naturalmente la webapp funzionava correttamente con Firefox, Safari, Opera ed anche col nuovissimo Chrome (maledetta Microsoft!!!!)

abbiamo iniziato una ricerca con google e siamo giunti alla pagina http://support.microsoft.com/kb/316431/it e http://support.microsoft.com/kb/222064 dove si parlava di un problema analogo ma non uguale, qui gli incriminati erano 2 header della response:

Pragma: no-cache
Cache-control: no-cache,max-age=0,must-revalidate

Il problema è che nel codice non erano impostati nè l’uno nè l’altro? abbiamo controllato però il pacchetto in response con tcpdump è gli header effettivamente erano presenti…. non restava che capire chi inseriva questi header… siamo giunti alla pagina http://wiki.jboss.org/wiki/DownloadSSLAndIE6 dove si capisce che è l’application server ad aggiungere tali tag, delle due soluzioni abbiamo adottato la piu semplice cioè quella di aggiungere nel codice

response.setHeader("Cache-Control", "cache, must-revalidate");
response.setHeader("Pragma", "public");

in questo modo l’application server (JBoss e Tomcat hanno lo stesso comportamento) non sovrascrive gli header ed è possibile scaricare il file anche da IE…. ;-)