¿Cómo configurar el caché de contenido estático por carpeta y extensión en IIS7?

143

Me gustaría configurar reglas en IIS7 para el almacenamiento en caché de contenido estático en mi sitio web ASP.NET.

He visto estos artículos, que detallan cómo hacerlo usando el <clientCache />elemento en web.config:

La caché del cliente <clientCache>(IIS.NET) agrega caducidad
o encabezado de control de caché al contenido estático en IIS (desbordamiento de pila)

Sin embargo, esta configuración parece aplicarse globalmente a todo el contenido estático. ¿Hay alguna manera de hacer esto solo para ciertos directorios o extensiones?

Por ejemplo, puedo tener dos directorios que necesitan configuraciones de caché separadas:

/static/images
/content/pdfs

¿Es posible establecer reglas para enviar cabeceras de caché ( max-age, expires, etc.) basado en las extensiones y las rutas de carpetas?

Tenga en cuenta que debo poder hacerlo web.configporque no tengo acceso a la consola IIS.

frankadelic
fuente

Respuestas:

217

Puede configurar encabezados de caché específicos para una carpeta completa en su raíz 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>

O puede especificarlos en un web.configarchivo en la carpeta de contenido:

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

No conozco un mecanismo integrado para apuntar a tipos de archivos específicos.

Kev
fuente
1
Excelente. ¿Me recomendarías un libro sobre IIS 7? Me gustaría aprender sobre estas cosas. Gracias.
vtortola
55
@vtortola: no puede equivocarse con el [kit de recursos IIS7] (: amazon.co.uk/dp/0735624410 ), en realidad es bastante útil. El libro Wrox Pro IIS7 tampoco está mal. TBH Aprendí principalmente del sitio de referencia de configuración de IIS.NET: iis.net/ConfigReference y de hurgar sobre el %systemroot%\system32\inetsrv\config\applicationhost.configarchivo y amigos relacionados.
Kev
77
¿Alguien sabe si esto es recursivo? Por ejemplo, si tiene subcarpetas debajo de la ruta de sus imágenes, ¿también las almacenará en caché?
StuffandBlah
1
Una cosa a tener en cuenta es que el navegador parece ver path=""que distingue entre mayúsculas
Chris S
9
@StuffandBlah Sí, es recursivo. Lo intenté yo mismo e IIS aplicó la misma configuración de control de caché a todas las solicitudes de archivos en subcarpetas de la carpeta que especifiqué como "ubicación".
Erik Öjebo
68

Puedes hacerlo por archivo. Use el atributo de ruta para incluir el nombre de archivo

<?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
fuente
1
¿Y si desea aplicarlo a todos los archivos de una extensión específica? ¿funcionaría solo .xml o * .xml solo?
Zulgrib
2
@Zulgrib para aplicarlo a una extensión específica, puede usar reglas de reescritura salientes: stackoverflow.com/questions/32987486/…
jotap
@Zulgrib ¿Cómo usamos la etiqueta de ubicación para más de un archivo pero no para todos los archivos de un tipo? Por ejemplo, ¿un par de archivos jpg en la carpeta raíz pero no todos?
Rahatur el
-2

Tuve el mismo problema. Para mí, el problema era cómo configurar un límite de caché para las imágenes. Y encontré este sitio que me dio algunas ideas sobre el procedimiento sobre cómo se puede manejar el problema. Espero que sea útil para usted también Enlace : [ https://varvy.com/pagespeed/cache-control.html]

Vikum Charuka Egodapitiya
fuente
2
Considere agregar alguna información del enlace a su respuesta según stackoverflow.com/help/how-to-answer : se alientan los enlaces a recursos externos, pero agregue contexto alrededor del enlace para que sus otros usuarios tengan una idea de lo que es y por qué está ahí Siempre cite la parte más relevante de un enlace importante, en caso de que no se pueda acceder al sitio de destino o se desconecte permanentemente.
Greg the Incredulous