0

我的母版页中有一个 favicon 图标(假设我定义了 ~/resources/company.ico)。现在如果这个 company.ico 不存在,浏览器(经过测试的 ie 和 mozilla)将尝试查找默认的 favicon 名称,即 ~/favicon.ico。如果最后一个不存在,它将 404 直接到用户屏幕。

这与 if for ex 非常不同。我放置了一个指向不存在的 css 文件的链接,浏览器将在其中向用户隐藏此 404 并显示没有此资源的页面。

为什么这两种情况的表现如此不同?这种情况是否仅适用于 favicon.ico 或其他“特定”类型的资源是否会发生?

4

2 回答 2

3

此行为仅与 favicon 相关,并且取决于浏览器的实现。

于 2012-11-21T15:46:14.650 回答
2

可能在我最初的问题中没有足够的信息,我期待有人指出它不应该那样做。后来通过缺少 favicon 的静态页面证明了这一点,该页面优雅地处理了该资源的 404。

答案实际上与 web.config 中 http 模块上的 Run All Modules 选项有关,因为静态文件(CSS、JS、*.ico 等)是通过 ASP.Net 管道运行的。

我们正在使用盒式磁带来提供静态文件,并且我们使用的盒式磁带版本不支持关闭 RAMMFAR 选项。

这些是对 web.config 的更改,它阻止了不正确的行为:

<modules runAllManagedModulesForAllRequests="false">
    <add name="CassetteHttpModule" type="Cassette.Aspnet.CassetteHttpModule, Cassette.Aspnet" />
    <add name="AuthenticationModule" type="ProjName.Web.HttpModules.AuthenticationModule" preCondition="managedHandler" />
    <add name="ErrorModule" type="ProjName.Web.HttpModules.ErrorModule" preCondition="managedHandler" />
</modules>

感谢所有试图提供帮助的人。

有帮助的资源:

斯科特汉塞尔曼:http ://www.hanselman.com/blog/BackToBasicsDynamicImageGenerationASPNETControllersRoutingIHttpHandlersAndRunAllManagedModulesForAllRequests.aspx

里克·斯特拉尔:http ://www.west-wind.com/weblog/posts/2012/Oct/25/Caveats-with-the-runAllManagedModulesForAllRequests-in-IIS-78

于 2012-11-22T15:25:23.470 回答