Как отключить кеширование отдельного файла в IIS 7 с помощью настроек конфигурации weserver

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

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

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

     <modules runAllManagedModulesForAllRequests="true"/>

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

  </system.webServer>

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

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

Ответ 1

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

<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]

Ответ 2

Похоже, что в приведенном выше ответе отсутствует тег "profiles"

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

Ответ 3

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

<system.webServer>
...

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

</system.webServer>

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

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


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

/Кэширование: 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.

Ответ 4

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

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

  </system.webServer>
</configuration>

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

Ответ 5

Да, возможно, вы можете сделать это в файле конфигурации:
(См. fooobar.com/questions/9762/...)

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

Ответ 6

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

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

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

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

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

Оттуда выберите заголовки ответов HTTP, нажмите "Добавить", чтобы добавить новый заголовок, добавьте заголовок "Cache-Control" с "no-cache" значением.