storia di fondo:IE 8 e client-side caching
Ho un portale web in .NET 3.5 su un server Web IIS 6. Attualmente esiste una pagina a cui viene assegnato un valore e in base a tale valore cerca un file PDF su un servizio Web e visualizza i risultati all'utente in un'altra scheda nella pagina Web. Questo è fatto con il seguente codice.
context.Response.ClearContent();
context.Response.ClearHeaders();
context.Response.Clear();
context.Response.AddHeader("Accept-Header", pdfStream.Length.ToString());
context.Response.ContentType = "application/pdf";
context.Response.BinaryWrite(pdfStream.ToArray());
context.Response.Flush();
Questo funziona e ha funzionato per anni. Tuttavia, abbiamo ricevuto un problema dal client che un particolare client stava avendo il PDF restituito come lo stesso PDF ogni volta fino a quando non hanno cancellato la cache di Internet temporanea.
Ho pensato che fosse bello, questo è facile. Aggiungerò semplicemente le intestazioni della cache alla risposta per non memorizzarla mai. Così ho aggiunto il seguente:
context.Response.Cache.SetCacheability(HttpCacheability.NoCache);//IE set to not cache
context.Response.Cache.SetNoStore();//Firefox/Chrome not to cache
context.Response.Cache.SetExpires(DateTime.UtcNow); //for safe measure expire it immediately
Dopo un test rapido ho ottenuto esattamente quello che mi aspettavo nell'intestazione della risposta.
Cache-Control no-cache, no-store
Pragma no-cache
Expires -1
Il problema:
Quindi questo è andato in diretta. Tutto sembrava bello al primo giorno. Il giorno dopo, bam, tutti hanno iniziato a ricevere schermi bianchi e nessun PDF visualizzato. Dopo ulteriori indagini, ho scoperto che era solo IE 6,7,8. Chrome va bene, Firefox va bene, safari bene, anche IE 9 bene. Senza sapere perché è successo, ho ripristinato il mio cambiamento e l'ho distribuito, e tutto ha funzionato di nuovo.
Ho cercato dappertutto cercando di scoprire perché le mie intestazioni di cache sembravano confondere IE 6-8 senza successo. Qualcuno ha avuto questo tipo di problema con IE 6-8? C'è qualcosa che mi manca? Grazie per qualsiasi intuizione.
Grazie per aver postato questo. Ho sprecato così tante ore e tanta frustrazione cercando di capirlo. –