Thursday, October 4, 2012

asp.net output cache not working? and the same code works on some servers? why

Here is one very typical issue that bring you to this blog.
Issues, I have one asp.net application with nothing special, for the performance consideration, we turn on the output cache. somehow, the same page never got cached on some servers, and It did cached on most servers. of vice versa.

short answer, It has nothing to be with the IIS Version. It’s All about HTTP Cookies and .net Framework version.  Let’s put a very basic Page.

just turn on the output cache using the most simple way,
image

for the code, we just send out some cookie,
image

Let’s start from some server that it works,
1st time you hit the url, get a initial access time.

image

  and cookie was sent to client from server side,
image

try again, this page will be cached. you are always see the page, you are 1st time here,
image

Why? because we setup the page need to be cached for 600 seconds, and cache response vary by any params, if we add something to the url parameter, we wills see refreshed page,
image

that’s the end of this cache working story, if we deploy the same code to another server, results are totally different.
1st time,
image

retry,
image

Why? I did a lot check, and find out the reason is simple. IT’S BECAUSE OF THE .NET FRAMEWORK VERSION.

In earlier verison of the FX, if you check the ouputCacheModule , it will cache response without checking the cookie value, that means even response has a server side cookie, it will still cache the response.
image

But for newer version, it will simply ignore the cache insert if response has cookie associated.
 image

my old version is, .4209, it never check cookie when cache response. that means you may see other people’s response (like login name?)
image
new version,.5456, it will check cookie which is more safe.
image

Hope it helps.

1 comment:

Oleksiy said...

It helped a lot. Thank you.

 
Locations of visitors to this page