定义的客户端缓存似乎被忽略了。

6

我不确定自己有什么错误,尽管我已尝试了一切,但似乎无法让客户端缓存我的静态资源。

在我的web.config文件中,我添加了以下条目:

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

根据文档,这应该向客户端浏览器发送一个响应头,让它知道我们希望将静态内容缓存30天。
如果我使用Fiddler查看客户端接收到的内容,似乎我的web.config添加完全被忽略了。
以下是Fiddler报告的内容:
Cache-Control: no-cache
Date: Mon, 05 Dec 2011 14:09:44 GMT
Expires: -1
Pragma: no-cache
Vary: Accept-Encoding

我在IIS中没有任何覆盖此问题的标头,所以我不确定我缺少什么。非常感谢您的帮助。

1个回答

6
我已经破解了这个问题,但花费了一些时间。你正在尝试从服务器强制使用304(无更改)状态码。这在不同的IIS版本中有所不同。
最好的方法是将所有静态内容放在一个目录下(例如content),然后您只需确保该目录下的所有内容在30天内不会过期,如/content/css /content/js等
对于IIS7,更容易实现。最简单的方法是在上述内容目录中添加一个web.config文件,该文件只包含expires指令。
<system.webServer>
    <staticContent>
        <clientCache
            cacheControlMaxAge="30.00:00:00" 
            cacheControlMode="UseMaxAge" />
    </staticContent>
</system.webServer>

IIS6

您需要操作元数据库。在IIS6中,它不是XML,请按照此处的说明进行操作:IIS6 ETags metabase commands

我们使用上述方法和简单的Firebug查看,可以显示304的传输。


首先,感谢您的帮助。正如您上面指出的那样,我确实收到了304s,但是在内容文件夹中添加web.config并没有什么区别。我尝试将新的web.config添加到/Content文件夹中,结果出现了500错误(_您正在查找的资源存在问题,无法显示_)。我还将其移动到资源所在的文件夹:/Content/css,现在成功检索了css文件,但再次出现了no-cache头。 - Yag
看起来这可能有帮助 https://dev59.com/QW435IYBdhLWcg3wfQJ9 routing maybe.... - penderi

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接