Я реализую механизм кэширования. Я написал HTTPModule, который перехватил бы весь ответ и суффикс buildnumber для статических файлов. А также перепишите URL-адрес в запросе, сняв номер сборки.IIS 7 classic mode Set-MaxAge в пользовательском HttpModule
Я хочу установить MaxAge в ответ на будущую дату, например, год. Но когда я вижу это в скрипаче, он не устанавливает максимальный возраст. Я также пытался установить срок действия, но, похоже, не работает.
Он отлично работает в интегрированном режиме IIS 7, но не в классическом режиме.
context.Response.Cache.SetCacheability(HttpCacheability.Public);
context.Response.Cache.SetMaxAge(new TimeSpan(DateTime.Now.AddYears(1).Ticks));
context.Response.Cache.SetExpires(DateTime.Now.AddYears(2));
context.Response.AddHeader("Expires", DateTime.Now.AddYears(1).ToShortDateString());
Ничто из этого не влияет на настройки кеша. Каков наилучший способ достичь этого? Я не хочу использовать интегрированный режим.
Обновление информации заголовка:
HTTP/1.1 200 OK
Cache-Control: public
Content-Type: image/gif
Expires: Fri, 23 Dec 2011 14:53:12 GMT
Last-Modified: Mon, 21 Nov 2011 11:50:11 GMT
Accept-Ranges: bytes
ETag: "1CCA843B92E5B80"
Server: Microsoft-IIS/7.5
X-AspNet-Version: 4.0.30319
X-Powered-By: ASP.NET
Date: Thu, 22 Dec 2011 14:53:12
заголовки ответа, когда управление кэш установлен в частном
HTTP/1.1 200 OK
Cache-Control: private, max-age=31536000
Content-Length: 2157
Content-Type: text/css
Expires: Sat, 24 Dec 2011 09:03:41 GMT
Last-Modified: Mon, 21 Nov 2011 11:50:09 GMT
Accept-Ranges: bytes
Server: Microsoft-IIS/7.5
X-AspNet-Version: 4.0.30319
X-Powered-By: ASP.NET
Date: Fri, 23 Dec 2011 09:03:41 GMT
Я включил код, который я использую
context.BeginRequest += new EventHandler(this.AddCacheExpiry);
private void AddCacheExpiry(object sender, EventArgs e)
{
HttpApplication application = (HttpApplication)sender;
HttpContext context = application.Context;
if (context.Request.AppRelativeCurrentExecutionFilePath.IndexOf(BuildNumber) != -1)
{
context.Response.Cache.SetCacheability(HttpCacheability.Private);
context.Response.Cache.SetMaxAge(new TimeSpan(DateTime.Now.AddYears(1).Ticks));
context.Response.Cache.SetExpires(DateTime.Now.AddYears(2));
context.Response.Cache.SetLastModifiedFromFileDependencies();
}
}
Можете ли вы опубликовать, как выглядит ваш заголовок http? Интегрированный и классический режим ставит максимальный возраст в разные части заголовка. «Кэш-контроль» против «Истекает» – Etch
HTTP/1.1 200 OK Cache-Control: public Тип контента: image/gif Истекает: Пт, 23 Дек 2011 14:53:12 GMT Last-Modified: Mon, 21 ноября 2011 11:50:11 GMT Accept-Диапазоны: байты ETag: "1CCA843B92E5B80" сервер: Microsoft-IIS/7.5 X-Сеть САШ-Version: 4.0.30319 X-Powered-By: ASP.NET Дата: Чт, 22 дек. 2011 14:53:12 GMT – Suhumar
По умолчанию он истекает на следующий день. Не уверен, что это сделано с помощью IIS – Suhumar