在我的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>
答案 0 :(得分:0)
注意:
<staticContent>
xml配置对提供自己的静态文件处理功能(如ServiceStack)的Web框架没有影响。
ServiceStack中的静态文件由StaticFileHandler处理,它自动附加用于缓存的HTTP标头静态文件,如Last-Modified
标头,用于在发出请求时发送空304 Not Modified
响应自上次请求后未更改的静态文件。
此外,还有一个为特定文件类型指定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。