【问题标题】:Implementing static files cache in asp.net mvc在asp.net mvc中实现静态文件缓存
【发布时间】:2014-02-28 04:15:11
【问题描述】:

我正在尝试在 ASP.net mvc 应用程序中实现静态文件缓存。

我做了什么:

我在Content 文件夹中添加了一个web.config 文件,其内容如下:

<?xml version="1.0"?>
<configuration>
  <system.webServer>
    <staticContent>
      <clientCache cacheControlCustom="public" cacheControlMode="UseMaxAge" cacheControlMaxAge="300.0:00:00" />
    </staticContent>
  </system.webServer>
</configuration>

在网站web.config文件中,我注释掉了几行代码:

  <system.webServer>
    <validation validateIntegratedModeConfiguration="false" />
    <handlers>
      <remove name="ExtensionlessUrlHandler-ISAPI-4.0_32bit" />
      <remove name="ExtensionlessUrlHandler-ISAPI-4.0_64bit" />
      <remove name="ExtensionlessUrlHandler-Integrated-4.0" />
      <add name="ExtensionlessUrlHandler-ISAPI-4.0_32bit" path="*." verb="GET,HEAD,POST,DEBUG,PUT,DELETE,PATCH,OPTIONS" modules="IsapiModule" scriptProcessor="%windir%\Microsoft.NET\Framework\v4.0.30319\aspnet_isapi.dll" preCondition="classicMode,runtimeVersionv4.0,bitness32" responseBufferLimit="0" />
      <add name="ExtensionlessUrlHandler-ISAPI-4.0_64bit" path="*." verb="GET,HEAD,POST,DEBUG,PUT,DELETE,PATCH,OPTIONS" modules="IsapiModule" scriptProcessor="%windir%\Microsoft.NET\Framework64\v4.0.30319\aspnet_isapi.dll" preCondition="classicMode,runtimeVersionv4.0,bitness64" responseBufferLimit="0" />
      <add name="ExtensionlessUrlHandler-Integrated-4.0" path="*." verb="GET,HEAD,POST,DEBUG,PUT,DELETE,PATCH,OPTIONS" type="System.Web.Handlers.TransferRequestHandler" preCondition="integratedMode,runtimeVersionv4.0" />
      <!-- Commented them out
      <add verb="GET" path="*.js" name="Static for js" type="System.Web.StaticFileHandler" />
      <add verb="GET" path="*.css" name="Static for css" type="System.Web.StaticFileHandler" />
      <add verb="GET" path="*.png" name="Static for png" type="System.Web.StaticFileHandler" />
      <add verb="GET" path="*.jpg" name="Static for jpg" type="System.Web.StaticFileHandler" />
      -->
    </handlers>

现在,发布网站并检查资源,我得到以下响应:

我看到缺少 Expire 标头?! (不应该是为了让缓存工作)

响应头是否告诉浏览器在接下来的 25920000 秒内缓存资源?

为了缓存静态文件,我做的正确吗?

【问题讨论】:

    标签: asp.net asp.net-mvc asp.net-mvc-4 caching


    【解决方案1】:

    这是正确的,你should be fine

    Some 可能会说您也应该为不理解 HTTP/1.1 的客户端添加 Expires,但正如在 first linked article 中已经提出的那样,这不应该是一个真正的问题,甚至现在更少, 7 年后。

    【讨论】:

    • 好的,只要我有Cache-Control: public, max-age=xxxxx就意味着浏览器会缓存资源
    • @RaraituL 我有同样的问题,我错过了过期标头,谷歌速度测试说为图像、css、js 添加过期。你找到解决办法了吗?
    • @stom 抱歉,我刚刚阅读了此评论。我认为它正在使用Cache-Control header
    最近更新 更多