【问题标题】:IIS 8.5 MVC5 Client Cache is ignoredIIS 8.5 MVC5 客户端缓存被忽略
【发布时间】:2015-04-02 00:23:07
【问题描述】:

TL;DR - 我希望服务器 (IIS 8.5) 返回 304 未针对 CSS 和 JS 包进行修改。

我无法让 IIS 8.5 支持 web.config 中的 clientCache 设置。无论我做什么,我似乎都无法让它缓存静态内容。这是 VS2013 中的 MVC5 应用程序。我将所有静态文件放在“资产”文件夹中。

请求如下所示: http://someserver/AppName/Assets/mainjs?v=FNj_9ZPAbYVAQsyDo2F8XUnWv5NQpY4iX2RGu4NpJ5g1

  1. 尝试 #1,在 Assets 文件夹中放置一个新的 web.config,内容如下:
<configuration>
  <system.webServer>
    <staticContent>
      <clientCache cacheControlMode="UseMaxAge" cacheControlMaxAge="30.00:00:00" />
    </staticContent>
  </system.webServer>
</configuration>
  1. 尝试 #2:将以下配置放在根 web.config 中
<staticContent>   
    <clientCache cacheControlMode="UseMaxAge" cacheControlMaxAge="365.00:00:00" />    
</staticContent>
  1. 尝试#3:尝试使用位置标签设置缓存
<location path="Assets">
  <system.webServer>
    <staticContent>
      <clientCache  cacheControlMode="UseMaxAge" cacheControlMaxAge="365.00:00:00" />
    </staticContent>
  </system.webServer>
</location>

这是我在 IIS 8.5 管理器中尝试过的事情。在默认网站/TestApp 下

  1. HTTP Requeset Headers, Set Common HTTP Headers, 检查“Expire Web Content”“After 365 Day(s)”。
  2. 对“资产”文件夹应用相同的设置

我已经单独尝试了这些步骤,也尝试了所有步骤以及其他步骤。无论如何,它不会将max-age 值添加到Cache-Control。

对于其中的每一个,浏览器都会为 CSS 和 JS 包返回 200 个响应。我无法让服务器缓存来自 Assets 文件夹的内容。

Cache-Control:private
Content-Encoding:gzip
Content-Length:22591
Content-Type:text/css; charset=utf-8
Date:Mon, 02 Feb 2015 21:49:49 GMT
Expires:Tue, 02 Feb 2016 21:49:49 GMT
Last-Modified:Mon, 02 Feb 2015 21:49:49 GMT
Persistent-Auth:true
Server:Microsoft-IIS/8.5
Vary:Accept-Encoding
X-AspNet-Version:4.0.30319
X-Powered-By:ASP.NET

【问题讨论】:

  • 该请求的 http 响应代码是什么?
  • 所有 JS 和 CSS 的响应码都是 200。我刚刚做了一个简单的 web 应用,只有 default.html 和 app.js,设置了 clientCache,html 文件会得到 304,但是javascript 仍然会返回 200。所以...一定有什么东西阻止 IIS 为特定文件类型设置缓存控制?
  • 您是否注意到捆绑版本控制字符串发生了变化?
  • 似乎保持不变 - 我刚刚再次检查了 js 版本,它与上面的 FNj_9ZPAbYVAQsyDo2F8XUnWv5NQpY4iX2RGu4NpJ5g1 相同。另外,我目前确实将runAllManagedModulesForAllRequests 设置为true。
  • 我可能错了,但我认为需要修改该文件才能删除新版本。如果时间戳或内容没有改变,那么就没有什么要重新上去的吗?修改js重新编译,那个版本会变吗?

标签: asp.net-mvc-5 bundle iis-8.5 clientcache


【解决方案1】:

检查捆绑包的各个文件。关闭优化时文件是什么样的?注册捆绑包后,请致电:

BundleTable.EnableOptimizations = (!HttpContext.Current.IsDebuggingEnabled);

BundleTable.EnableOptimizations = false;

可能是每个文件都以未修改的形式返回。在调试会话中刷新时状态是否会改变?

【讨论】:

    猜你喜欢
    • 2012-01-13
    • 1970-01-01
    • 2018-03-06
    • 2015-08-20
    • 1970-01-01
    • 1970-01-01
    • 2012-02-23
    • 2014-04-24
    • 1970-01-01
    相关资源
    最近更新 更多