We have a web application running over a WAN on IIS6. Some of our locations have large latency which results in certain pages, with many scripts and images, taking up to 20 seconds to load. If we analyse the traffic with Fiddler we see that 90% of the requests (i.e. 90 requests) are for scripts, images, xsl and CSS which never change. However the browser (IE7) stubbornly insists on requesting them each time and sending a "If-Modified-Since" header to which the server replies with a 304. Sadly this 304 is not accompanied by a Cache- Control header. However we have set "Cache-Control: max-age=2419200" on all these resources in IIS and, when the resource is first requested (i.e. browser cache is cleared), a 200 is sent with the "Cache-Control" and "Expires" headers correct. Why does the browser ignore the Expires header initially and always re- request and confirm? Is there any way to avoid this needless traffic via IIS or via IE?