2009-11-21 6 views
2

DB에 저장된 이미지를 검색하여 응답에 쓰는 HttpHandler (ASPX 페이지로도 처리했습니다)가 있습니다. 브라우저에 이미지를 캐시에 저장하려고 코드에 다음 코드를 추가했지만 Firebug에서 응답을 볼 때마다 항상 캐시 제어 헤더 값이 "private"입니다.ASP.NET Cache.SetCacheability (HttpCacheability.Public) 헤더를 설정하지 않습니다.

Response.Cache.SetCacheability(HttpCacheability.Public) 

내가 수동으로 "캐시 제어"헤더 값을 추가 할 Response.ClearHeaders에게 & Response.AddHeader()를 사용하여 같은 모든 종류의 것들을 시도했지만 아무 소용했습니다. 어떤 아이디어?

편집 :
상세 정보 : 이것은 HTTP 처리기 (.ASHX)에서 실행하고, 나는 내 로컬 IIS 5.1에 모두를 테스트 한, 내가 생각하는 호스팅 사이트에 IIS 6

입니다

답변

6

페이지가 인증을 필요로합니까? 런타임은 공개 프록시에서 개인 콘텐트의 우연한 캐싱을 방지하기 위해 인증이 필요한 페이지에서 Cache-Control : private을 강제 실행합니다.

카시니를 사용하고 있습니까? 그렇다면 항상 Cache-Control을 강제 실행합니다. 그렇다면 대신 IIS로 전환 해보십시오.

+0

WinXP Pro에서 IIS 5.1을 사용하고 호스팅 사이트에서 IIS 6을 사용합니다. – patmortech

+0

Visual Studio가 내장 웹 서버를 사용하는 대신 개발 컴퓨터에서 IIS를 사용하도록 구성 되었습니까? 그렇다면 IIS 5가이 방법을 지원하지 않을 수 있습니다. Visual Studio와 통합 된 웹 서버는 확실히 그렇지 않습니다. – RickNZ

+0

내 의견에서 언급했듯이 IIS 6에서 가장 많이 사용되는 호스트 사이트에서이 동일한 처리기를 시도했으며 동일한 응답 헤더 (Cache-Control : private)를 사용했습니다. – patmortech

0

어디에서이 속성을 설정합니까? 응답 본문의 첫 번째 줄이 출력 된 후에 설정하면 무시됩니다. 페이지 자체에 대해 PreRender보다 늦게이 플래그를 설정해야 함을 의미합니다.

+0

이것은 ProcessRequest() 메서드 중에 HTTP 처리기에 있으므로 해당 지점에 출력이 없습니다. 나는 그것을 설정하기 전에 Response.Clear()를 수행하기조차한다. – patmortech

1

은 그냥 나를 도와,이 응답을 발견하지만, 캐시 제어를 방지하고 한 가지 더 있었다 : 내 설정에 대한 공공 :

cache.SetCacheability(HttpCacheability.ServerAndPrivate); 
... 
cache.SetCacheability(HttpCacheability.Public); 
: 당신처럼) (여러 Response.Cache.SetCacheability를 사용하는 경우

호출하면 첫 번째이기 때문에 SetCacheability()에 대한 후속 호출은 이전 설정을 덮어 쓰지 않습니다.

1

web.config에서 인증 요소를 제거하지 마십시오. 대신 모드를 없음으로 설정하십시오. 인증 태그가 없으면 캐시 제어는 setcacheability를 호출하는 경우에도 항상 '개인'입니다.

관련 문제