Кэширование вывода в Обработчике HTTP и SetValidUntilExpires

Я использую кэширование вывода в своем пользовательском обработчике HTTP следующим образом:

    public void ProcessRequest(HttpContext context)
    {
        TimeSpan freshness = new TimeSpan(0, 0, 0, 60);
        context.Response.Cache.SetExpires(DateTime.Now.Add(freshness));
        context.Response.Cache.SetMaxAge(freshness);
        context.Response.Cache.SetCacheability(HttpCacheability.Public);
        context.Response.Cache.SetValidUntilExpires(true);
        ...
    }

Это работает, но проблема, это обновляющее страницу с F5 приводит к регенерации страницы (вместо использования кэша) несмотря на последнюю строку кода:

context.Response.Cache.SetValidUntilExpires(true);

Какие-либо предложения?

UPD: Кажется, что причина проблемы состоит в том, что ответ обработчика HTTP не кэшируется на сервере. Следующий код работает хорошо на веб-форму, но не на обработчик:

        Response.Cache.SetCacheability(HttpCacheability.Server);

Есть ли некоторые специфические особенности кэширования http ответа обработчика на сервере?

7
задан mayor 9 June 2010 в 08:37
поделиться

2 ответа

Я нашел причину. В моем URL-адресе используется параметр строки запроса, поэтому он выглядит как « http: //localhost/Image.ashx? Id = 49 ». Я думал, что если VaryByParams не установлен явно, сервер всегда будет учитывать значение параметра id, потому что context.Response.Cache.VaryByParams.IgnoreParams по умолчанию ложен. Но на самом деле сервер в этом случае вообще не использует кеш (тем не менее, браузер пользователя использует).

Итак, если в строке запроса используются параметры, Response.Cache.Параметр VaryByParams должен быть установлен явно, например

context.Response.Cache.VaryByParams.IgnoreParams = true;

для игнорирования параметров или

context.Response.Cache.VaryByParams[<parameter name>] = true;

для изменения по некоторому параметру или

context.Response.Cache.VaryByParams["*"] = true;

для изменения по всем параметрам.

18
ответ дан 6 December 2019 в 10:47
поделиться

публичная кэшируемость зависит от браузера пользователя или прокси он указывает, что ответ кэшируется клиентами и общими (прокси) кэшами.

пробовали ли вы использовать HttpCacheability.Server

http://msdn.microsoft.com/en-us/library/system.web.httpcacheability(v=VS.71).aspx

0
ответ дан 6 December 2019 в 10:47
поделиться
Другие вопросы по тегам:

Похожие вопросы: