Asp.net 将处理程序映射到静态扩展

Asp.net 将处理程序映射到静态扩展,asp.net,http,iis,caching,httphandler,Asp.net,Http,Iis,Caching,Httphandler,将ASP.NET HTTP处理程序映射到静态扩展(如*.css)会产生哪些意外后果 <add verb="*" path="handler.css" type="Web.HttpHandler.ThemeCssHandler" /> 默认情况下,*.css在applicationHost中注册为静态内容(在IIS7下): 静态请求通常不是由IIS单独处理更有效吗 关键的动机是在已知的扩展下提供动态CSS,而不是像*.axd这样的扩展(为了简单和与OOTB缓存策略兼容);但是

将ASP.NET HTTP处理程序映射到静态扩展(如*.css)会产生哪些意外后果

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

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


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


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

处理CSS文件的通常方式是使用静态文件处理程序,因此替换您自己的处理程序可能会表现得很好。细节取决于处理程序

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


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

谢谢,瑞克;在客户端上,该请求将携带与使用自定义HttpCachePolicy的传统*.css请求相同的头。我更关心的是,静态文件通常由本机处理程序处理,例如。将托管处理程序与*.css之类的静态扩展相关联是否会改变所有*.css请求的执行管道?另外,虽然我们还没有确认这一点,但我认为动态*.css仍然可以用于内核缓存。是的,处理程序是根据文件扩展名分配的,因此如果为*.css设置一个扩展名,它将应用于所有css文件。然而,本机处理程序和单独管理的处理程序之间的性能差异不会很大,除非您的机器只提供CSS文件。如果没有特别注意的话,对性能的巨大影响是在缓存端。通过http.sys进行内核缓存仍然是可能的(因为它适用于所有动态文件),但前提是您选择了适当的HttpCachePolicy,而动态文件默认情况下不会这样做。
<staticContent lockAttributes="isDocFooterFileName">
    <mimeMap fileExtension=".css" mimeType="text/css" />