Como configurar o cache de conteúdo estático por pasta e extensão no IIS7?

143

Eu gostaria de configurar regras no IIS7 para o cache de conteúdo estático no meu site ASP.NET.

Eu já vi esses artigos, que detalham como fazer isso usando o <clientCache />elemento web.config:

Cache do cliente <clientCache>(IIS.NET) Adicione o cabeçalho de controle de expiração
ou cache ao conteúdo estático no IIS (Estouro de pilha)

No entanto, essa configuração parece se aplicar globalmente a todo o conteúdo estático. Existe uma maneira de fazer isso apenas para determinados diretórios ou extensões?

Por exemplo, eu posso ter dois diretórios que precisam de configurações de cache separadas:

/static/images
/content/pdfs

É possível configurar regras para o envio de cabeçalhos de cache ( max-age, expires, etc) com base em extensões e caminhos de pasta?

Observe que preciso fazer isso via web.configporque não tenho acesso ao console do IIS.

frankadelic
fonte

Respostas:

217

Você pode definir cabeçalhos de cache específicos para uma pasta inteira na sua raiz 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>

Ou você pode especificá-los em um web.configarquivo na pasta de conteúdo:

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

Não conheço um mecanismo interno para segmentar tipos de arquivos específicos.

Kev
fonte
1
Ótimo. Você recomendaria um livro sobre o IIS 7? Eu gostaria de aprender sobre essas coisas. Obrigado.
vtortola
5
@ vtortola - você não pode errar com o [IIS7 resource kit] (: amazon.co.uk/dp/0735624410 ), é realmente bastante útil. O livro Wrox Pro IIS7 também não é ruim. TBH Aprendi principalmente no site de referência de configuração do IIS.NET: iis.net/ConfigReference e procurando sobre o %systemroot%\system32\inetsrv\config\applicationhost.configarquivo e amigos relacionados.
Kev
7
Alguém sabe se isso é recursivo? Por exemplo, se você tiver subpastas sob o caminho das imagens, elas também serão armazenadas em cache?
StuffandBlah
1
Uma coisa a notar é que seja exibido ao navegador para ver a path=""caso tão sensível
Chris S
9
@StuffandBlah Sim, é recursivo. Apenas tentei e o IIS aplicou as mesmas configurações de controle de cache a todas as solicitações de arquivos em subpastas da pasta especificada como "local".
Erik Öjebo
68

Você pode fazer isso por arquivo. Use o atributo path para incluir o nome do arquivo

<?xml version="1.0" encoding="UTF-8"?>
<configuration>
    <location path="YourFileNameHere.xml">
        <system.webServer>
            <staticContent>
                <clientCache cacheControlMode="DisableCache" />
            </staticContent>
        </system.webServer>
    </location>
</configuration>
Jeff Cuscutis
fonte
1
E se você deseja aplicá-lo a todos os arquivos de uma extensão específica? .xml ou * .xml funcionariam sozinhos?
Zulgrib
2
@Zulgrib para aplicá-lo a uma extensão específica, você pode usar regras de reescrita de saída: stackoverflow.com/questions/32987486/…
jotap
@Zulgrib Como usamos a tag location para mais de um arquivo, mas nem todos os arquivos de um tipo. Por exemplo, alguns arquivos jpg na pasta raiz, mas não todos?
Rahatur 23/01/19
-2

Eu tive o mesmo problema.Para mim, o problema foi como configurar um limite de cache para imagens.E me deparei com este site que ofereceu algumas informações sobre o procedimento de como o problema pode ser tratado.Espero que seja útil para você : [ https://varvy.com/pagespeed/cache-control.html]

Vikum Charuka Egodapitiya
fonte
2
Considere adicionar algumas informações do link à sua resposta, conforme stackoverflow.com/help/how-to-answer : Links para recursos externos são incentivados, mas adicione contexto ao redor do link para que seus colegas usuários tenham uma idéia do que é e por que está lá. Sempre cite a parte mais relevante de um link importante, caso o site de destino esteja inacessível ou fique permanentemente offline.
Greg the Incredulous