Organizational Research By

Surprising Reserch Topic

ie 8 and client side caching


ie 8 and client side caching  using -'asp.net,internet-explorer,http,iis,caching'

Background story:

I have a web portal in .NET 3.5 on an IIS 6 web server.  Currently there is a page that is given a value and based on that value looks up a PDF file on a web service and displays the results to the user in another tab in the web page.  This is done with the following code.

 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();


This works and has worked for years.  However we got an issue from the client that a particular client was having the PDF returned as the same PDF every time until they cleared temp internet cache.

I thought oh cool, this is an easy one.  I will just add the cache headers to the response to never cache it.  So I added the following:

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


After a quick test I got exactly what I was expecting in the response header.

Cache-Control    no-cache, no-store
Pragma    no-cache
Expires    -1


The Problem:

So this went live.  Everything seemed cool day one.  The day after, bam, everyone started getting white screens and no PDF displayed.  After further investigation, I found out it was only IE 6,7,8.  Chrome is fine, Firefox fine, safari fine, even IE 9 fine.  Without knowing the why this happened, I reverted my change and deployed it, and everything started worked again.

I have searched all over trying to find out why my caching headers seemed to confuse IE 6-8 to no avail.  Has anyone experienced this type of issue with IE 6-8?  Is there something I am missing?  Thanks for any insight.
    

asked Sep 21, 2015 by gauravsinghal83
0 votes
2 views



Related Hot Questions

1 Answer

0 votes

I found the solution. Here is what tipped me off. Here is a link

Basically IE8 (and lower) was having issues with the Cache-Control header if it had no-cache or store-cache. I was able to work around the problem by basically allowing private caching only and set a max age to very short so it expires almost immediately.

//Ie 8 and lower have an issue with the "Cache-Control no-cache" and "Cache-Control store-cache" headers.
//The work around is allowing private caching only but immediately expire it.
if ((Request.Browser.Browser.ToLower() == "ie") && (Request.Browser.MajorVersion < 9))
{
     context.Response.Cache.SetCacheability(HttpCacheability.Private);
     context.Response.Cache.SetMaxAge(TimeSpan.FromMilliseconds(1));
}
else
{
     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
}
answered Sep 21, 2015 by mannar kande

...