2013-02-19 2 views
0

데이터베이스에서 이미지를 반환하는 컨트롤러 동작이 있습니다. 이러한 이미지는 정적이며 이 아니며으로 변경되며 이미지가 변경된 경우에만 이미지 요소에 새 ID가 할당됩니다.다시 작성시 브라우저 캐시가 재설정 됨

나는 web.config-> system.web-> caching-> outputcacheSettings-> outputCacheProfiles에서

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

<clientCache cacheControlMode="UseMaxAge" cacheControlMaxAge="365.00:00:00" /> 
, 작업에

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

를 할당

아래에서 system.webserver-> staticContent입니다.

빌드하고 페이지를 새로 고치면 이미지를 가져옵니다. 페이지를 다시 새로 고치고 캐시에서 이미지를 가져옵니다. 그러나 코드 줄을 변경하고 다시 작성하고 다시 새로 고침하면 모든 이미지가 데이터베이스에서 다시 가져옵니다. 수천 개의 이미지가 데이터베이스에 저장되어있을뿐만 아니라 Windows Azure에 배포되므로 최적화가 매우 중요합니다.

표준 "정적 컨텐츠"는 Site.css 및 JQuery.js와 같이 캐시 된 상태로 유지됩니다. 그러나 이미지가 아닌 것은 무엇입니까?

가있는 동안 때문에, ~/미디어/이미지/1a00d817-6525-4d13-82bc-d0f24d26f29c의 형태로가는

내가, 어떻게 고정 가야하는 아무 생각이 항상 고정이되지 않는 이미지 액세스 URL Azure에 재배포 할 때마다 모든 사용자의 이미지 캐시가 재설정됩니다. shivers.

아이디어를 환영합니다!

편집 : 나는 또한 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 

헤더는 = "모든"

(에 다시 요청 만 다시) :

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 

답변

0

당신이 그들을 캐시 할 수 매번 서버를 치는 것을 피하기 위해 클라이언트에서 :

<add 
    name="ProductImages" 
    enabled="true" 
    duration="600000" 
    varyByCustom="ProductImages" 
    varyByParam="" 
    location="Client" 
/> 
+0

클라이언트를 위치로 지정하면 매번 요청할 수 있습니다 , 재미있게 충분히, 그래서 이것은 작동하지 않습니다 :/ – NeroS

+0

당신은 'varyByCustom' 메서드를 사용하는 것 같습니다. 어쩌면 문제가있을 수 있습니다. 당신은 캐시가 이미지 ID에 따라 달라야한다고 언급 했으므로 컨트롤러 동작이'imageId' 매개 변수를 취하는 것으로 생각합니다. 그런 다음'varyByParam = "imageId"'를 설정하고'varyByCustom' 메소드를 제거 할 수 있습니다. –

+0

조치가 취하는 매개 변수는 실제로 "id"라고하지만, varyByCustom을 제거하고 varyByParam = "id"를 두었더라도 마찬가지입니다. 새로 고침시 요청을 계속받습니다."Any"만이 프로젝트를 다시 빌드하기 전까지 만 작동합니다. 나는 실제 IIS 서버에서 VS를 개발하려고 시도하지 않았지만 아마도 문제 일 수도 있지만 ... 다시 브라우저 캐시가됩니다. 캐시에 이미 이미지가 있으면 이미지를 다시 요청하고 싶지 않습니다. – NeroS

관련 문제