Как отключить кэширование отдельного файла в IIS 7 с помощью настроек конфигурации weserver - PullRequest
32 голосов
/ 14 октября 2010

Есть ли способ отключить кэширование одного файла javascript в моем приложении ASP.NET без отключения кэширования любых других файлов в приложении?

Он работает на IIS 7 в Azure, поэтому мне кажется, что мои единственные варианты управления этим находятся в тегах веб-сервера.

В настоящее время я использую конфигурацию folowwing, но это отключает кэш для всех файлов.

     <modules runAllManagedModulesForAllRequests="true"/>

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

  </system.webServer>

Я просто хочу отключить кеш одного файла JavaScript, который меняется довольно часто.

Возможно ли это?

Ответы [ 6 ]

42 голосов
/ 08 февраля 2013

Я просто наткнулся на этот вопрос;Вы можете использовать следующее для отключения кэша для определенного файла:

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

(обратите внимание, что путь относится к файлу web.config)

В качестве альтернативы, поместите один файл вотдельный каталог, и предоставьте этому каталогу собственный web.config, который отключает кэширование всего в нем;

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

[Оба протестированы на IIS7.5 в Windows 7, но вам придется подтвердитьчто это хорошо работает на Azure]

8 голосов
/ 25 февраля 2012

Похоже, что в ответе выше отсутствует тег "profile"

<caching>
  <profiles>
    <add extension=".js" kernelCachePolicy="DontCache" policy="DontCache"/>
  </profiles>
</caching>
8 голосов
/ 14 октября 2010

Вы захотите взглянуть на класс System.WebServer / Caching, где вы можете применить профиль кэширования к определенным расширениям. По крайней мере, это позволит вам контролировать его для всех файлов Javascript, заканчивающихся на .js.

<system.webServer>
...

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

</system.webServer>

Это должно отключить кэширование .js как для процессов, так и для кэширования ядра из облака.

Я думаю вы можете создать этот файл web.config в папке, содержащей только ваш файл, и он отключит кэширование для .js только на этом уровне папок. Я, честно говоря, сам не пробовал, так что просто предложение, которое вы можете проверить.


Кроме того, взгляните на документацию по IIS, связанную с конфигурацией кэширования:

/ Кэширование: http://www.iis.net/ConfigReference/system.webServer/caching

/ Кэширование / Профили: http://www.iis.net/ConfigReference/system.webServer/caching/profiles

/ Кэширование / Профили / Добавить: http://www.iis.net/ConfigReference/system.webServer/caching/profiles/add

Надеюсь, что плюс некоторые исследования по этим тегам конфигурации помогут.

Если нет, я бы порекомендовал рассмотреть реализацию пользовательского модуля HTTP, который можно вставить в канал запросов IIS, который может отфильтровать ваш элемент управления кэшированием до этого конкретного файла

** для этого стоит просто поведение IIS, и оно не будет отличаться в Azure или вне его, поэтому вы можете легко протестировать этот локальный ресурс, не беспокоясь о тестовой структуре Dev или Azure.

3 голосов
/ 21 января 2014

Вы можете отключить кэширование вывода на уровне папки, удалив расширение на уровне папки, включив в эту папку файл web.config, например, такой:

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

  </system.webServer>
</configuration>

теперь в этой папке не будет включено кэширование вывода для файлов, заканчивающихсяс .js

1 голос
/ 15 июня 2017

Откройте панель IIS.

Откройте соответствующее приложение с сайтов, затем перейдите в папку, содержащую определенный файл.

Теперь на правой панели перейдите к представлению содержимого

Выберитенужный файл

Теперь щелкните правой кнопкой мыши по файлу, чтобы выбрать «Переключиться на представление функций».

Оттуда выберите HTTP Response Headers, нажмите «Добавить», чтобы добавить новый заголовок, Добавить «Cache-Control»."заголовок со значением" без кэширования ".

0 голосов
/ 21 мая 2014

Да, это возможно, вы можете сделать это в файле конфигурации:
(см. https://stackoverflow.com/a/4821328/2247494)

<configuration>
    <location path="cache.manifest">
      <system.webServer>
        <staticContent>
          <clientCache cacheControlMode="DisableCache" />
        </staticContent>
      </system.webServer>
    </location>
</configuration>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...