2010-06-08 2 views
7

SetValidUntilExpires :출력 HTTP 처리기에서 캐싱 및 I는 다음과 같은 방법으로 내 사용자 지정 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 처리기 응답이 서버에 캐싱되지 않는다는 것입니다. 다음 코드는 웹 양식에는 잘 작동하지만 처리기에는 적합하지 않습니다.

서버의 http 처리기 응답 캐싱에 대한 세부 사항이 있습니까?

답변

18

사용하여 시도했다. 쿼리 문자열 매개 변수가 내 URL에서 사용 중이므로 "http://localhost/Image.ashx?id=49"처럼 보입니다. VaryByParams가 명시 적으로 설정되지 않으면 context.Response.Cache.VaryByParams.IgnoreParams가 기본적으로 false이기 때문에 서버는 항상 id param 값을 고려합니다. 그러나 실제로 서버는이 경우 캐시를 전혀 사용하지 않습니다 (그럼에도 불구하고 사용자 브라우저는 캐시를 사용합니다).

그래서, 매개 변수 쿼리 문자열에 사용하는 경우, Response.Cache.VaryByParams 일부 매개 변수 또는

에 의해 변화를

context.Response.Cache.VaryByParams.IgnoreParams = true; 
무시 매개 변수에 대한

또는

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

처럼 명시 적으로 설정해야합니다

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

모든 매개 변수에 대해.

+0

이 솔루션을 찾아 주셔서 감사합니다, 나를 위해 단일 값 쿼리 매개 변수로 일했습니다. 그러나 '? id = 1 & id = 2 & id = 3'과 같은 다중 값 매개 변수가 있으면 여전히 작동하지 않습니다. 나는 왜 그런지 모르지만 다른 사람들에게 그것에 대해 알리고 싶었다. – Oliver

0

공개 캐시 가능성은 사용자 브라우저 또는 프록시에 따라 달라지며 클라이언트 및 공유 (프록시) 캐시가 응답을 캐시 할 수 있도록 지정합니다.

은 내가 이유를 발견했습니다 HttpCacheability.Server

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

+0

시도해 보았지만이 경우 캐싱이 전혀 작동하지 않습니다. ASP.NET 개발 서버를 사용합니다. – mayor

관련 문제