Как отключить кеширование HTML файла приложения с одной страницей, обслуживаемого через IIS?

У меня есть одностраничное приложение (angular -js), которое подается через IIS. Как предотвратить кеширование файлов HTML? Решение должно быть достигнуто путем изменения содержимого в файле index.html или web.config, поскольку доступ к IIS с помощью консоли управления невозможен.

Некоторые параметры, которые я сейчас изучаю, следующие:

IIS - это версия 7.5 с .NET framework 4

Ответ 1

Добавление следующего в решение web.config, работающее в Chrome, IE, Firefox и Safari:

<?xml version="1.0" encoding="UTF-8"?>
<configuration>

  <location path="index.html">
    <system.webServer>
      <httpProtocol>
        <customHeaders>
          <add name="Cache-Control" value="no-cache" />
        </customHeaders>
      </httpProtocol>
    </system.webServer>
  </location>

</configuration>

Это гарантирует, что заголовок Cache-Control установлен на no-cache при запросе index.html.

Ответ 2

При обслуживании ваших html файлов вы можете добавить произвольную строку запроса. Это предотвратит использование браузером старых версий, даже если файл находится в кеше браузера.

/index.html?rnd=timestamp

Другой вариант - добавить параметр no-cache на уровне IIS. Это добавляет Cache-Control: no-cache в ответе, который указывает браузерам не кэшировать файл. Он работает от IIS 7 и далее.

<?xml version="1.0" encoding="UTF-8"?>
<configuration>
  <!-- Note the use of the 'location' tag to specify which 
       folder this applies to-->
  <location path="index.html">
    <system.webServer>
      <staticContent>
        <clientCache cacheControlMode="DisableCache" />
      </staticContent>
    </system.webServer>
  </location>
</configuration>

Ответ 3

Для .NET Core я использовал следующее.

        app.UseStaticFiles(new StaticFileOptions
        {
            OnPrepareResponse = context =>
            {                   
                if (context.File.Name == "index.html" ) {
                    context.Context.Response.Headers.Add("Cache-Control", "no-cache, no-store");
                    context.Context.Response.Headers.Add("Expires", "-1");
                }
            }
        });

Кредит Как отключить кеш браузера в ядре rc2 ASP.NET?