【问题标题】:Mapping Handler to Static Extension将处理程序映射到静态扩展
【发布时间】:2011-01-01 09:26:51
【问题描述】:

将 ASP.NET HTTP 处理程序映射到像 *.css 这样的静态扩展有哪些意外后果?

<add verb="*" path="handler.css" type="Web.HttpHandler.ThemeCssHandler" />

默认情况下,*.css在applicationHost(IIS7下)注册为静态内容:

<staticContent lockAttributes="isDocFooterFileName">
    <mimeMap fileExtension=".css" mimeType="text/css" />

静态请求通常不是由 IIS 单独处理更有效吗?

真正的关键动机是在其已知扩展名下提供动态 CSS,而不是像 *.axd 之类的东西(为了简单性和与 OOTB 缓存策略的兼容性);但我们希望确保这不会降低非动态 CSS 请求的服务。

【问题讨论】:

    标签: asp.net http iis caching httphandler


    【解决方案1】:

    处理 CSS 文件的常用方式是使用静态文件处理程序,因此替换您自己的处理程序有可能获得与它一样好的性能。细节取决于处理程序。

    如果需要,您实际上可以为此目的使用 *.aspx 处理程序(尽管它需要更多配置)。但是,一个副作用是默认情况下所有动态内容都标记为Cache-Control: private,这将阻止代理缓存。

    默认情况下,静态文件也会启用输出缓存。如果您使它们动态化,那么您的处理程序将必须显式启用它。

    【讨论】:

    • 谢谢,瑞克;在客户端,请求将携带与使用自定义 HttpCachePolicy 的传统 *.css 请求相同的标头。我更关心的是静态文件通常由本机处理程序处理 - 例如。将托管处理程序与 *.css 之类的静态扩展相关联是否会更改所有 *.css 请求的执行管道?此外,虽然我们还没有确认这一点,但我认为动态 *.css 将继续适用于内核缓存。
    • 是的,处理程序是根据文件扩展名分配的,因此如果为 *.css 设置一个,它将适用于所有 CSS 文件。但是,本地处理程序和托管处理程序之间的性能差异不会很大,除非您的机器除了提供 CSS 文件之外什么都不做。如果没有特别注意,大的性能影响是在缓存方面。 http.sys 的内核缓存仍然是可能的(因为它适用于所有动态文件),但前提是您选择了适当的 HttpCachePolicy,默认情况下动态文件不会这样做。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-01-09
    • 2014-11-25
    • 1970-01-01
    • 1970-01-01
    • 2014-10-23
    • 1970-01-01
    • 2016-01-29
    相关资源
    最近更新 更多