如何在IIS7中为每个文件夹和扩展名配置静态内容缓存?


143

我想在IIS7中为我的ASP.NET网站中的静态内容缓存设置规则。

我看过这些文章,其中详细介绍了如何使用中的<clientCache />元素进行操作web.config

客户端缓存<clientCache>(IIS.NET)
将过期或缓存控制标头添加到IIS中的静态内容(堆栈溢出)

但是,此设置似乎全局应用于所有静态内容。有一种方法可以仅对某些目录或扩展名执行此操作吗?

例如,我可能有两个目录需要单独的缓存设置:

/static/images
/content/pdfs

是否有可能建立规则发送缓存头(max-ageexpires,等)的基础上扩展和文件夹路径?

请注意,我必须能够通过这样做,web.config因为我无权访问IIS控制台。

Answers:


217

您可以在您的任一根目录中为整个文件夹设置特定的缓存头web.config

<?xml version="1.0" encoding="UTF-8"?>
<configuration>
  <!-- Note the use of the 'location' tag to specify which 
       folder this applies to-->
  <location path="images">
    <system.webServer>
      <staticContent>
        <clientCache cacheControlMode="UseMaxAge" cacheControlMaxAge="00:00:15" />
      </staticContent>
    </system.webServer>
  </location>
</configuration>

或者,您可以web.config在内容文件夹中的文件中指定这些:

<?xml version="1.0" encoding="UTF-8"?>
<configuration>
  <system.webServer>
    <staticContent>
      <clientCache cacheControlMode="UseMaxAge" cacheControlMaxAge="00:00:15" />
    </staticContent>
  </system.webServer>
</configuration>

我不知道针对特定文件类型的内置机制。


1
大。您会推荐我一本有关IIS 7的书吗?我想了解这些事情。谢谢。
vtortola 2011年

5
@vtortola-使用[IIS7资源工具包](:amazon.co.uk/dp/0735624410)不会出错,它实际上非常有用。在Wrox的专业IIS7的书也不错。TBH我主要从IIS.NET配置参考站点iis.net/ConfigReference以及从%systemroot%\system32\inetsrv\config\applicationhost.config文件和相关朋友的戳记中学到的知识。
Kev

7
有人知道这是否递归吗?例如,如果图像路径下有子文件夹,它还会缓存那些吗?
StuffandBlah 2012年

1
要注意的一件事是浏览器似乎path=""区分大小写
Chris S

9
@StuffandBlah是的,它是递归的。我自己尝试一下,IIS将相同的缓存控制设置应用于我指定为“位置”的文件夹的子文件夹中的所有文件请求。
ErikÖjebo'13

68

您可以按文件进行操作。使用path属性包含文件名

<?xml version="1.0" encoding="UTF-8"?>
<configuration>
    <location path="YourFileNameHere.xml">
        <system.webServer>
            <staticContent>
                <clientCache cacheControlMode="DisableCache" />
            </staticContent>
        </system.webServer>
    </location>
</configuration>

1
如果要将其应用于特定扩展名的所有文件?.xml或* .xml单独可以工作吗?
Zulgrib '16

2
:@Zulgrib将其应用到特定的扩展,你可以使用出站重写规则stackoverflow.com/questions/32987486/...
jotap

@Zulgrib我们如何将位置标签用于一个以上的文件,而不是所有类型的文件。例如,根文件夹中有几个jpg文件,但不是全部?
Rahatur

-2

我遇到了同样的问题。对我来说,问题是如何为图像配置缓存限制。我遇到了这个站点,该站点对如何处理该问题提供了一些见解,希望对您也有帮助:[ https://varvy.com/pagespeed/cache-control.html]


2
请按照stackoverflow.com/help/how-to-answer的考虑,从链接中添加一些信息到您的答案:鼓励链接到外部资源,但是请在链接周围添加上下文,以便您的其他用户会知道它是什么以及为什么它在那里。如果目标站点无法访问或永久脱机,请始终引用重要链接中最相关的部分。
格雷格难以置信'17
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.