Why didn’t my cached content revalidate to the web server? (IE8 edition)

"Check for newer versions of stored pages" settings For the super eagle eyed developer or Web Server admin, you might have noticed that cache entry validation happens slightly less frequently in IE8. I’m talking about the check to the Web Server (via If-Modified-Since) to see if the cached version of content needs updating or is still current. The short version of why this happens is the way that IE uses WinINet sessions changed to accommodate Loosely Coupled IE and session’s start time is an important factor in evaluating if WinINet needs to issue an If-Modified-Since request.

Digging deeper, we can look at a couple of the factors in the logic IE/WinINet is using to decide to issue an If-Modified-Since request. First is the the Cache Setting: “Check for newer versions of stored pages” in the “Temporary Internet Files and History Settings” as described in KB article 263070 and pictured with this blog entry. These are settings that apply to cached content missing the Expires headers. “Every time I visit the webpage” and “Never” are pretty straightforward. “Every time I start Internet Explorer” and “Automatically” have logic dependant on the the session’s start time. Another factor to note that we have different behavior when using the Back and Forward browser buttons compared to what we do in hyperlink navigation. The Back and Forward behavior also depends on the session’s start time when content is expired or is missing the Expires header.

How does Loosely Coupled IE in IE8 change the session start time? Previously any IE window got a single session in WinINet by the fact it only uses a single process and sharing of the session handle across tabs, with Loosely Coupled IE we had to do work to let multiple processes share session state. This means that new IE8 windows share the same session compared to new IE7 windows which get a new session. Eric Lawrence on the IEBlog talks a bit more about this session sharing behavior. The effect on WinINet is that IE8 sessions last longer on average then they used to and that means potentially less often revalidation of content from the Web Server.

-- Ari Pernick

Comments

  • Anonymous
    June 03, 2011
    FWIW, IE8 ultimately didn't ship this way, and it instead performed MORE validations than IE7. The reason is that IE8 ultimately started resetting the SessionStart time every time a new tab is opened, and this happened for all existing tabs as well. As a result, opening a new tab will cause responses in existing tabs to be revalidated before reuse. This was changed back for IE9, and SessionStart time behaves as this article describes.