Как отключить кеширование 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?