ServiceStack 4:无法为静态内容添加Expires Header

时间:2014-10-26 09:54:24

标签: caching servicestack static-content expires-header servicestack-razor

在我的web.config中,我正在尝试为静态内容添加缓存:

<system.webServer>
    <staticContent>
      <clientCache cacheControlMode="UseExpires" httpExpires="Sun, 1 Jan 2020 00:00:00 UTC" />
    </staticContent>
    <modules runAllManagedModulesForAllRequests="true" />
    <validation validateIntegratedModeConfiguration="false" />
    <handlers>
      <add path="*" name="ServiceStack.Factory" type="ServiceStack.HttpHandlerFactory, ServiceStack" verb="*" preCondition="integratedMode" resourceType="Unspecified" allowPathInfo="true" />
    </handlers>
  </system.webServer>

但是,当我运行YSlow时!我仍然可以获得F等级#34;添加过期标题&#34 ;;所以,似乎静态内容如图像,CSS和Javascript文件都没有被缓存。

我如何在ServiceStack中完成此操作,因为web.config更改我没有被ServiceStack接收;这在ASP.NET MVC中有效,但如何使用expires头服务器静态内容?

我也试过这个,但我的静态文件仍然没有被缓存。

<system.webServer>
  <staticContent>
    <clientCache cacheControlMaxAge="30.00:00:00" cacheControlMode="UseMaxAge"/>
  </staticContent>
</system.webServer>

1 个答案:

答案 0 :(得分:0)

  

注意:<staticContent> xml配置对提供自己的静态文件处理功能(如ServiceStack)的Web框架没有影响。

ServiceStack中的静态文件由StaticFileHandler处理,它自动附加用于缓存的HTTP标头静态文件,如Last-Modified标头,用于在发出请求时发送空304 Not Modified响应自上次请求后未更改的静态文件。

将Max-Age添加到静态文件

此外,还有一个为特定文件类型指定Cache-Control: max-age={Seconds}的选项,默认情况下包括图像内容类型的最大年龄,例如:

SetConfig(new HostConfig {
    AddMaxAgeForStaticMimeTypes = {
        { "image/gif", TimeSpan.FromHours(1) },
        { "image/png", TimeSpan.FromHours(1) },
        { "image/jpeg", TimeSpan.FromHours(1) },
    }
});

您还可以使用其他内容类型修改和扩展上述默认值。

添加自定义静态文件标头

v4.0.33 + 中的新内容是StaticFileHandler.ResponseFilter,您可以使用它在静态文件上附加您自己的自定义标头,例如,这会添加自定义HTTP Expires标头{1}}文件在1小时后到期:

.txt

此更改现在为available on MyGet