Кеш браузера сбрасывается при восстановлении

У меня есть действие контроллера, которое возвращает изображения из базы данных. Эти изображения статичны, они никогда не изменятся, и только тогда, когда они "изменятся", это когда элементу изображения будет присвоен новый идентификатор.

Я назначил

[OutputCache(CacheProfile = "ProductImages", Duration = 36000000)]

К действию,

<add name="ProductImages" enabled="true" duration="600000" varyByCustom="ProductImages" varyByParam="" />

В web.config-> system.web-> caching-> outputcacheSettings-> outputCacheProfiles и

<clientCache cacheControlMode="UseMaxAge" cacheControlMaxAge="365.00:00:00" />

Под system.webserver-> staticContent.

Я создаю его, обновляю страницу, получаются изображения. Снова обновляю страницу, изображения берутся из кеша. Однако, когда я меняю строку кода, перестраиваю, снова обновляю ... все изображения повторно выбираются из базы данных. В базе данных хранятся не только тысячи и тысячи изображений, но и развертывание в Windows Azure, поэтому оптимизация очень важна.

Обратите внимание, что стандартный «статический контент» остается кешированным, например Site.css и JQuery.js. Но чего нет, так это изображений.

URL-адрес доступа к изображению всегда статичен и имеет вид ~ / Media / Image / 1a00d817-6525-4d13-82bc-d0f24d26f29c.

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

Идеи приветствуются!

РЕДАКТИРОВАТЬ:

Я также пробовал добавить расширение в конец URL-адреса (например, .jpg), чтобы браузер воспринимал его как статический контент, и добавил

<add extension=".jpg" policy="CacheForTimePeriod" kernelCachePolicy="CacheForTimePeriod" location="Client" duration="365.00:00:00"/>

в system.webserver-> caching-> profiles, но безрезультатно.

Заголовки с включенными предложениями дарина (всегда повторно запрашиваются):

Cache-Control:private, max-age=600000
Content-Length:4593
Content-Type:image/jpeg
Date:Tue, 19 Feb 2013 08:55:27 GMT
Expires:Tue, 26 Feb 2013 07:35:26 GMT
Last-Modified:Tue, 19 Feb 2013 08:55:26 GMT
Server:Microsoft-IIS/8.0
X-AspNet-Version:4.0.30319
X-AspNetMvc-Version:4.0
X-Powered-By:ASP.NET

Заголовки с location = "Any" (повторный запрос только при восстановлении):

Cache-Control:public, max-age=600000
Content-Length:21461
Content-Type:image/jpeg
Date:Tue, 19 Feb 2013 08:57:03 GMT
Expires:Tue, 26 Feb 2013 07:37:03 GMT
Last-Modified:Tue, 19 Feb 2013 08:57:03 GMT
Server:Microsoft-IIS/8.0
Vary:*
X-AspNet-Version:4.0.30319
X-AspNetMvc-Version:4.0
X-Powered-By:ASP.NET

person NeroS    schedule 19.02.2013    source источник


Ответы (1)


Вы можете кэшировать их на клиенте, чтобы каждый раз не попадать на сервер:

<add 
    name="ProductImages" 
    enabled="true" 
    duration="600000" 
    varyByCustom="ProductImages" 
    varyByParam="" 
    location="Client" 
/>
person Darin Dimitrov    schedule 19.02.2013
comment
Указание Client в качестве местоположения заставляет их запрашивать его каждый раз, как ни странно, поэтому это не сработает: / - person NeroS; 19.02.2013
comment
Кажется, вы используете какой-то varyByCustom метод. Может в этом проблема. Вы упомянули, что кеш должен зависеть от идентификатора изображения, поэтому я предполагаю, что действие вашего контроллера принимает параметр imageId. Затем вы можете установить varyByParam="imageId" и избавиться от метода varyByCustom. - person Darin Dimitrov; 19.02.2013
comment
Параметр, который выполняет действие, действительно называется id, но даже если я удалю varByCustom и поставлюvarByParam = id, происходит то же самое, он продолжает получать запросы при обновлении. Работает только Any, и только до тех пор, пока я не пересобью проект. Я не пробовал его на реальном сервере IIS, только на сервере разработки VS, возможно, это может быть проблемой ... но опять же, это кеш браузера. Я даже не хочу, чтобы он снова запрашивал изображения, если они уже есть в кеше. - person NeroS; 19.02.2013
comment
Не могли бы вы показать заголовки HTTP-ответа, которые сервер возвращает при первом запросе изображения? - person Darin Dimitrov; 19.02.2013
comment
Сделанный. Также добавлены любые заголовки. - person NeroS; 19.02.2013
comment
Обратите внимание, что только когда я использую F5, он запрашивает их повторно. Обычная навигация получает их из кеша с ответом 200, даже после восстановления. Однако я хочу, чтобы они всегда кешировались, даже при обновлении. - person NeroS; 19.02.2013
comment
Кроме того, это хром. Firefox полностью отказывается кешировать при обновлении, независимо от настроек. - person NeroS; 19.02.2013
comment
Извините, я не могу воспроизвести эту проблему. У меня это работает нормально. - person Darin Dimitrov; 19.02.2013