Кэширование ответа сервера HTTP-обработчика ASP.NET и на стороне клиента

Можно ли кэшировать ответ обработчика http на сервере и на клиенте?

Похоже, это не помогает:

_context.Response.Cache.SetCacheability (HttpCacheability.Public); _context.Response.Cache.SetExpires (DateTime.Now.AddDays (7));

_Context - это HTTPContext, переданный в качестве аргумента методу ProcessRequest в реализации IHttpHandler.

Любые идеи?

Обновление: клиент кеширует изображения, которые загружаются через httphandler, но если другой клиент выполняет тот же вызов, сервер не кэширует их. Таким образом, для каждого клиента, который запрашивает изображение, сервер переходит к базе данных (и файловому потоку). Если мы используем aspx-страницу вместо httphandler вместе с профилем кеширования, то изображения кэшируются как на клиенте, так и на сервере.


person Bert Vandamme    schedule 11.03.2010    source источник
comment
Вы пытались использовать Fiddler, чтобы проверить, действительно ли заголовки находятся в пакете, полученном на клиенте?   -  person Timores    schedule 11.03.2010
comment
@Timores Клиент выполняет кэшированные вызовы обработчика, но если другой клиент выполняет тот же вызов, сервер не кэширует его.   -  person Lieven Cardoen    schedule 11.03.2010


Ответы (2)


Спасибо за ответ в комментариях.

Cache.SetCacheability используется, чтобы определить, разрешено ли кэширование прокси или клиенту, а не на сервере.

Взгляните на IIS 7, где объясняется, как кэшировать вывод обработчика HTTP на сервере.

person Timores    schedule 11.03.2010
comment
Спасибо, Тимор, мы это проверим! Странно, что с помощью aspx-страницы вы можете кэшировать на уровне сервера, но с httplevel вам нужно сделать это в IIS (или я сохраню изменения в web.config?) - person Lieven Cardoen; 12.03.2010

В IIS7 это можно сделать в web.config.

Например, предположим, что ваш URL-адрес ashx:

/ashxfiles/myhandler.ashx

... и вы хотите варьироваться по параметрам строки запроса:

id, lang

Добавьте в свой web.config следующее:

<location path="ashxfiles">
    <system.webServer>
        <caching>
            <profiles>
                <add extension=".ashx" policy="CacheForTimePeriod" duration="00:00:10" varyByQueryString="id, lang" />
            </profiles>
        </caching>
    </system.webServer>
</location>

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

person frankadelic    schedule 09.12.2010