2010-10-14 24 views
23

¿Hay alguna manera de evitar el almacenamiento en caché de un único archivo javascript en mi aplicación ASP.NET sin desactivar el almacenamiento en memoria caché de otros archivos en la aplicación?¿Cómo desactivo el almacenamiento en caché de un archivo individual en IIS 7 utilizando la configuración de configuración de weserver?

Se ejecuta en IIS 7 en Azure, por lo que parece que mis únicas opciones de control están dentro de las etiquetas del servidor web.

Actualmente utilizo las siguientes configuraciones, pero esto es deshabilitar el caché en todos los archivos.

 <modules runAllManagedModulesForAllRequests="true"/> 

    <staticContent> 
     <clientCache cacheControlMode="DisableCache"/> 
    </staticContent> 

    </system.webServer> 

sólo quiero desactivar la caché de un solo archivo javascript que cambia muy a menudo.

¿Es posible?

+0

Sí, es posible, puede hacerlo en su archivo configurtion: enrolle el en , (ver mi post más adelante) – jherax

Respuesta

7

Tendrá que ir a la clase System.WebServer/Caching, donde puede aplicar un perfil de caché a extensiones particulares. Esto al menos le permitirá controlarlo para todos los archivos Javascript que terminan en .js.

<system.webServer> 
... 

    <caching> 
     <add extension=".js" policy="DontCache" kernelCachePolicy="DontCache" /> 
    </caching> 

</system.webServer> 

Esto debería deshabilitar el almacenamiento en caché de .js tanto en el proceso como en el almacenamiento en memoria caché del kernel desde la nube.

I piensa puede crear este web.config en una carpeta que contiene solo su archivo y deshabilitará el almacenamiento en caché de .js solo en ese nivel de carpeta. Honestamente, no lo he intentado solo, así que solo una sugerencia que podrías probar.


Más allá de eso, echar un vistazo a la documentación de IIS relacionados con el almacenamiento en caché de configuración:

/Almacenamiento en caché: http://www.iis.net/ConfigReference/system.webServer/caching

/almacenamiento en caché/Perfiles: http://www.iis.net/ConfigReference/system.webServer/caching/profiles

/almacenamiento en caché/Perfiles/Agregue: http://www.iis.net/ConfigReference/system.webServer/caching/profiles/add

Afortunadamente, más algunas investigaciones sobre esas etiquetas de configuración ayudarán.

Si no es así, te recomiendo buscar en la implementación de un módulo HTTP personalizado que se puede insertar en el tubo de solicitudes de IIS, que puede filtrar el control de almacenamiento en caché hasta ese archivo en particular

** por lo que su valor presente es solo el comportamiento de IIS y no será diferente dentro o fuera de Azure, por lo que podría probar fácilmente este local sin molestarse con el tejido Dev o las pruebas de Azure.

+0

Esta respuesta es que falta la etiqueta para la configuración. Consulte la respuesta de "Lo que sería genial" para obtener el formato correcto. – Ant

+0

Además, debería tener en cuenta que 'policy = "DontCache"' no funcionó para mí, pero 'policy = "DisableCache"' funcionó. – Ant

7

Parece que la respuesta anterior es que falta una etiqueta de "perfiles"

<caching> 
    <profiles> 
    <add extension=".js" kernelCachePolicy="DontCache" policy="DontCache"/> 
    </profiles> 
</caching> 
+0

Solo reiterando aquí, 'policy = "DontCache"' no funcionó, pero 'policy =' DisableCache '' funcionó. – Ant

32

simplemente me encontré con esta pregunta; se puede utilizar el siguiente para deshabilitar el caché en un archivo específico:

<configuration> 
    <location path="path/to/the/file"> 
    <system.webServer> 
     <staticContent> 
     <clientCache cacheControlMode="DisableCache" /> 
     </staticContent> 
    </system.webServer> 
    </location> 
</configuration> 

(Tenga en cuenta que la ruta es relativa al archivo web.config)

alternativa, coloque el archivo individual en un directorio en su propio, y darle a ese directorio su propia web.config que deshabilita el almacenamiento en caché de todo lo que contiene;

<configuration> 
    <system.webServer> 
    <httpProtocol> 
     <customHeaders> 
     <add name="Cache-Control" value="no-cache" /> 
     </customHeaders> 
    </httpProtocol> 
    </system.webServer> 
</configuration> 

[Ambos probado en IIS7.5 en Windows 7, pero tendrá que confirmar que funciona bien en Azure]

+2

Hice la primera alternativa, y funciona en Azure. –

+0

Funciona perfectamente para el contexto estático publicado en una aplicación web de Azure mediante control de fuente o integración continua. En mi caso, una aplicación construida en CLI de Angular, donde la creación de producción se encarga de crear nombres de almacenamiento en memoria caché para los archivos del paquete y todo lo que deseo es que el archivo no-caché sea index.html. ¡Gracias! –

3

Puede deshabilitar el almacenamiento en caché en el nivel de carpeta mediante la eliminación de una extensión en la carpeta nivel mediante la inclusión de un web.config en esa carpeta como esta

<?xml version="1.0" encoding="UTF-8"?> 
<configuration> 
    <system.webServer> 
     <caching> 
      <profiles> 
       <remove extension=".js" /> 
      </profiles> 
     </caching> 

    </system.webServer> 
</configuration> 

ahora esta carpeta no se habrá activado el almacenamiento en caché de salida para los archivos que terminan con Js

0

Sí, es posibl E, puede hacerlo en el fichero de configuración:
(Ver https://stackoverflow.com/a/4821328/2247494)

<configuration> 
    <location path="cache.manifest"> 
     <system.webServer> 
     <staticContent> 
      <clientCache cacheControlMode="DisableCache" /> 
     </staticContent> 
     </system.webServer> 
    </location> 
</configuration> 
0

Abrir panel de IIS.

Abra la aplicación relacionada de los sitios, luego navegue a la carpeta que contiene el archivo en particular.

Ahora desde panel derecho, cambie a la vista de contenido

Seleccione el archivo deseado

Ahora haga clic derecho en el archivo para elegir la opción "Cambiar a la función de visualización".

A partir de allí, elija encabezados de respuesta HTTP, haga clic en "Agregar" para agregar un nuevo encabezado, agregue el encabezado "Cache-Control" con el valor "no-caché".

Cuestiones relacionadas