Я реализую механизм кэширования. Я написал HTTPModule, который будет перехватывать все ответы и добавлять суффиксный номер к статическим файлам. А также перепишите URL в запросе, убрав номер сборки.
Я хочу установить 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
Заголовки ответа, когда для элемента управления кэшем установлено значение private
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();
}
}