Кэширование ответа изображения ASHX

Я создал файл ashx для создания эскизов изображений на лету. Я хотел бы кэшировать эти изображения на стороне клиента после того, как они будут вызваны в первый раз.

URL-адрес:

~/image.ashx?dir=user&w=25&h=25&force=yes&img=matt.jpg

Код позади:

public void ProcessRequest (HttpContext context) {
    TimeSpan refresh = new TimeSpan(0, 15, 0);
    context.Response.Cache.SetExpires(DateTime.Now.Add(refresh));
    context.Response.Cache.SetMaxAge(refresh);
    context.Response.Cache.SetCacheability(HttpCacheability.Server);
    context.Response.CacheControl = HttpCacheability.Public.ToString();
    context.Response.Cache.SetValidUntilExpires(true);

    string dir = context.Request.QueryString["dir"];
    string img = context.Request.QueryString["img"];
    bool force = context.Request.QueryString["force"] == "yes";
    double w = 0;
    double h = 0;
    ...
    context.Response.ContentType = "image/jpeg";
    thumb.Save(context.Response.OutputStream, System.Drawing.Imaging.ImageFormat.Jpeg);
}

Используя Dev Tools в Chrome, я вижу следующий заголовок ответа:

HTTP/1.1 200 OK
Server: ASP.NET Development Server/10.0.0.0
Date: Mon, 26 Sep 2011 19:17:31 GMT
X-AspNet-Version: 4.0.30319
Set-Cookie: .ASPXAUTH=...; path=/; HttpOnly
Cache-Control: no-cache
Pragma: no-cache
Expires: -1
Content-Type: image/jpeg
Content-Length: 902
Connection: Close

Может ли кто-нибудь просветить меня, почему это не кэширует несколько вызовов с одним и тем же точным URL-адресом? Мы будем очень благодарны за любые советы.


person Greg    schedule 26.09.2011    source источник


Ответы (1)


Наверняка эта строка:

HttpContext.Current.Response.Cache.SetCacheability(HttpCacheability.Server);

Должно быть:

HttpContext.Current.Response.Cache.SetCacheability(HttpCacheability.Public);
person Oded    schedule 26.09.2011
comment
@SubinJacob - это заголовки кеша. О чем ты говоришь? - person Oded; 03.06.2013
comment
Я хочу, чтобы срок действия кеша истек, если содержимое (изображение) было изменено пользователем - person Subin Jacob; 03.06.2013
comment
@SubinJacob - Почему бы тогда не задать новый вопрос? - person Oded; 03.06.2013