2014-08-28 1 views
1

HttpResponseMessage에서 반환 한 이미지 캐싱에 문제가 있습니다.HttpResponseMessage에서 반환 한 이미지 캐시 방법

파일의 URL로 액세스 할 수 있습니다 :

http://localhost:[service port]/[file GUID]?Adapter=[adapter type] 

는 예 : 응답

new CacheControlHeaderValue() 
        { 
         Public = true, 
         MaxAge = TimeSpan.FromSeconds(60) 
        }; 

두 캐시 제어 헤더가 올바르게 표시됩니다 :

http://localhost:59292/b9e7d18a-2eaf-11e4-92e3-8056f2d1ef7b?Adapter=CoolAdapter 

나는 HttpResponseMessage에 CacheControl 헤더를 추가 브라우저 (Chrome)에서 계속 실행되지만 해당 URL을 새로 고칠 때마다 ima를 가져 오는 메소드가 실행됩니다. 캐시에서이 그림을 제공하는 대신 서버에 저장하십시오.

뭔가 빠졌습니까 (IIS 구성, URL 양식)?

답변

1

IIS 캐시에 이미지를 추가하고 여러 번 다운로드 한 이유가 궁금하십니까? IIS 캐시는 동일한 리소스를 원하는 여러 클라이언트가있는 경우 유용합니다.

당신은 (명령 행)와 현재 캐시를 확인할 수 있습니다 :

netsh http show cachestate 

당신은 가능성이 가장 높은 브라우저 캐시를 원하는 - 짧은 기간에서 또 다시 같은 클라이언트 요청 같은 파일을. 당신의 이미지를 캐시 브라우저를 야기한다 다음

<staticContent> 
    <clientCache cacheControlMode="UseMaxAge" cacheControlMaxAge="1.00:00:00" /> 
</staticContent> 
<httpProtocol> 
    <customHeaders> 
     <add name="Cache-Control" value="public" /> 
    </customHeaders> 
</httpProtocol> 
+0

응답 해 주셔서 감사합니다. 문제를 정확하게 지적 해주었습니다. 캐시 헤더 설정은 url이 html의 img 요소의 src 속성에있을 때 작동합니다. 하지만 url을 실행하면 캐싱이 직접 무시됩니다. – Wojtek

1

나는 그것을 위해 다음 코드를 사용 트릭은이 부분을 만료, 또는 사실

var age = new TimeSpan(cacheTime, 0, 0); 
response.Headers.CacheControl = new CacheControlHeaderValue() 
{ 
    MaxAge = age, 
    Public = false, 
    NoCache = false, 
    Private = true, 
}; 
response.Content.Headers.Expires = DateTime.UtcNow.Add(age); 

확실하지 만약 내가 24을 사용 내 캐시 시간으로.