Why does FireFox 3.6.8 not cache static contents f

2019-02-13 21:31发布

问题:

I am working on a asp.net web site, like normal user, we use asp.net developer server during coding and testing. Today, I found the firefox not cache any static file of my site, since our application is pretty big, it made page load time very slow. I checked firefox about:cache, all the static file cache setting looks like

           Key: http://localhost:26851/App_Layout/icons/actions/email/folder.png
     Data size: 871 bytes
   Fetch count: 1
 Last modified: 2010-08-19 11:59:46
       Expires: 1969-12-31 16:00:00

           Key: http://localhost:26851/Framework/ScriptLibrary/JQueryPlugins/ui.mouse.js
     Data size: 5079 bytes
   Fetch count: 1
 Last modified: 2010-08-19 11:59:39
       Expires: 1969-12-31 16:00:00

FireBug shows header like this

Server  ASP.NET Development Server/9.0.0.0
Date    Thu, 19 Aug 2010 22:10:27 GMT
X-AspNet-Version    2.0.50727
Cache-Control   public
Etag    "1CB3F32C834A880"
Content-Type    text/css
Content-Length  1775
Connection  Close

Firebug has another tab called "cache", the information is:

Last Modified   Thu Aug 19 2010 15:10:27 GMT-0700 (Pacific Daylight Time)
Last Fetched    Thu Aug 19 2010 15:10:27 GMT-0700 (Pacific Daylight Time)
Expires Wed Dec 31 1969 16:00:00 GMT-0800 (Pacific Standard Time)
Data Size   1775
Fetch Count 10
Device  disk

The expires date is set back to 1969-12-31, I believe that's the reason why they are loaded very time. I am using Visual studio 2008, windows 7 machine. The application works fine in IE, the contents are properly cached.

Did anybody see this behavior before?

回答1:

You need to issue Expires header to make Firefox cache the files.

Otherwise, how do you think it could guess for how long does it need to cache the files?



回答2:

Thanks everybody for helping this question. I believe I found the reason why FireFox seems very slow on window 7 box. I did not notice the slowness when I was using windows XP.

First all, Firefox will NOT cache any resource from asp.net web developer server. this fact does not change in XP or Window 7. When I use firebug check the resource downloading today, I noticed DNS lookup takes a couple of seconds. then I found out for window 7 default installation, the HOSTS file under windows\system32\driver\etc does not DNS entry 127.0.0.1 localhost. By adding this line to HOSTS file. my site is as fast as before.



回答3:

ASP.net Dev Sever

According to my running of Fiddler2, it caches the files, ie 304s(Not Modified) responses are done

  • ScriptResource.axd
  • WebResource.axd

Same behanviour occurs in both IE 8 and FF 3.6.8 IE8 has to be set to Automatically check for new versions of a page for this to occur.


IIS

Running it on IIS causes both FF and IE to cache static content.


This caching is due to the webserver adding a last-modified header to the response.

You can get fiddler to listen to localhost by using localhost. instead ( http://weblogs.asp.net/asptest/archive/2008/08/13/tip-on-using-fiddler-with-cassini-and-localhost.aspx ).



回答4:

you can try adding one of these to your page load function -

option 1

        Response.ClearHeaders();
        Response.AppendHeader("Cache-Control", "no-cache"); //HTTP 1.1
        Response.AppendHeader("Cache-Control", "private"); // HTTP 1.1
        Response.AppendHeader("Cache-Control", "no-store"); // HTTP 1.1
        Response.AppendHeader("Cache-Control", "must-revalidate"); // HTTP 1.1
        Response.AppendHeader("Cache-Control", "max-stale=0"); // HTTP 1.1 
        Response.AppendHeader("Cache-Control", "post-check=0"); // HTTP 1.1 
        Response.AppendHeader("Cache-Control", "pre-check=0"); // HTTP 1.1 
        Response.AppendHeader("Pragma", "no-cache"); // HTTP 1.1 
        Response.AppendHeader("Keep-Alive", "timeout=3, max=993"); // HTTP 1.1 
        Response.AppendHeader("Expires", "Mon, 26 Jul 1997 05:00:00 GMT"); // HTTP 1.1

option 2

Response.Cache.SetExpires(DateTime.UtcNow.AddMinutes(-1))
Response.Cache.SetCacheability(HttpCacheability.NoCache)
Response.Cache.SetNoStore()


回答5:

You could also host the page on your local IIS WebServer instead of running it in the VS Development Server. In IIS you can specify the expiration header settings to your needs.