为啥 FireFox 3.6.8 不缓存来自 asp.net 开发者服务器的静态内容?
Posted
技术标签:
【中文标题】为啥 FireFox 3.6.8 不缓存来自 asp.net 开发者服务器的静态内容?【英文标题】:Why does FireFox 3.6.8 not cache static contents from asp.net developer server?为什么 FireFox 3.6.8 不缓存来自 asp.net 开发者服务器的静态内容? 【发布时间】:2011-04-01 09:30:31 【问题描述】:我正在开发一个 asp.net 网站,就像普通用户一样,我们在编码和测试期间使用 asp.net 开发人员服务器。 今天,我发现firefox没有缓存我网站的任何静态文件,因为我们的应用程序很大,它使页面加载时间很慢。 我检查了firefox about:cache,所有的静态文件缓存设置看起来像
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 显示这样的标题
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 有另一个标签叫做“缓存”,信息是:
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
过期日期设置回 1969-12-31,我相信这就是它们加载时间非常长的原因。 我正在使用 Visual Studio 2008、Windows 7 机器。该应用程序在 IE 中运行良好,内容被正确缓存。
以前有人见过这种行为吗?
【问题讨论】:
使用Live Http Headers 或类似名称,然后发布您的网站发送的实际响应标头。 【参考方案1】:ASP.net 开发服务器
根据我对Fiddler2的运行,它缓存了文件,即304s(未修改)响应完成
ScriptResource.axd WebResource.axd在 IE 8 和 FF 3.6.8 中出现相同的行为 IE8 必须设置为自动检查页面的新版本才能发生这种情况。
IIS
在 IIS 上运行它会导致 FF 和 IE 缓存静态内容。
这种缓存是由于网络服务器在响应中添加了last-modified 标头。
您可以使用 localhost.
代替 (http://weblogs.asp.net/asptest/archive/2008/08/13/tip-on-using-fiddler-with-cassini-and-localhost.aspx) 让 fiddler 收听 localhost
。
【讨论】:
browser.cache.check_doc_frequency 的默认值为 3。当我使用 XP 时,本地主机工作正常。 模式 3 似乎与 IE 自动检查新版本相同。 kb.mozillazine.org/Browser.cache.check_doc_frequency【参考方案2】:您需要发出 Expires 标头以使 Firefox 缓存文件。
否则,你认为它如何猜测它需要缓存文件多长时间?
【讨论】:
这是正确答案。没有“过期”标题是您的问题。 如果我创建一个新项目,一切正常。问题是它之前没有添加过期标头。我遇到了静态内容(gif、css)的问题。一旦我移动到生产站点,我们可以在 IIS 中设置过期时间。我不认为硬编码过期是一个好主意。我怀疑窗口 7 或最新的 Firefox 发生了一些变化。【参考方案3】:您可以尝试将其中之一添加到您的页面加载功能 -
选项 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
选项 2
Response.Cache.SetExpires(DateTime.UtcNow.AddMinutes(-1))
Response.Cache.SetCacheability(HttpCacheability.NoCache)
Response.Cache.SetNoStore()
【讨论】:
@Russel Yang - 此答案的任何更新。我在我的一个网络应用程序中使用它并且没有发现任何问题。如果您遇到此代码的任何问题,请告诉我,以便我可以尝试您的方案并更新我的应用程序 我相信这会奏效。我只是不明白为什么 Firefox 没有缓存静态文件。 IE 7 没有任何问题(访问相同的 asp.net 服务器)。它之前没有添加响应头就可以工作。切换到 Window 7 和 Firefox 3.6.8 后,我注意到了这种字符串行为【参考方案4】:您也可以在本地 IIS WebServer 上托管页面,而不是在 VS 开发服务器中运行它。在 IIS 中,您可以根据需要指定过期标头设置。
【讨论】:
我的网站在 IIS 中运行没有任何问题。您知道 asp.net 开发人员服务器提供了更轻松的调试体验。【参考方案5】:感谢大家帮助这个问题。我相信我找到了 FireFox 在 windows 7 盒子上看起来很慢的原因。我在使用 windows XP 时没有注意到速度慢。
首先,Firefox 不会缓存来自 asp.net Web 开发者服务器的任何资源。这个事实在 XP 或 Window 7 中没有改变。 当我今天使用 firebug 检查资源下载时,我注意到 DNS 查找需要几秒钟。然后我发现windows 7默认安装,windows\system32\driver\etc下的HOSTS文件没有DNS条目127.0.0.1 localhost。通过将此行添加到 HOSTS 文件。我的网站和以前一样快。
【讨论】:
还要注意 IPv6 导致的这种情况 (::1) 请参阅 ***.com/questions/1726585/…以上是关于为啥 FireFox 3.6.8 不缓存来自 asp.net 开发者服务器的静态内容?的主要内容,如果未能解决你的问题,请参考以下文章
为啥 event.clientX 在 firefox 中为 dragend 事件错误地显示为 0?
tag showing as a different size on chrome and firefox