2009-06-03 6 views
26

웹 응용 프로그램에 대한 캐시 제어 헤더를 설정하려고하는데 (내가 할 수있는 것으로 보입니다),하지만 홀수 항목이 있다고 생각합니다. 헤더 응답.ASP.NET의 캐시 제어 헤더

protected override void OnLoad(EventArgs e) 
    { 
     // Set Cacheability... 
     DateTime dt = DateTime.Now.AddMinutes(30); 
     Response.Cache.SetExpires(dt); 
     Response.Cache.SetMaxAge(new TimeSpan(dt.ToFileTime())); 

     // Complete OnLoad... 
     base.OnLoad(e); 
    } 

을 그리고 이것은 헤더 응답이 보여주는 것입니다 :

----- 
GET /Pages/Login.aspx HTTP/1.1 
Host: localhost:1974 
User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.9.0.10) Gecko/2009042316 Firefox/3.0.10 (.NET CLR 3.5.30729) 
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8 
Accept-Language: en-us,en;q=0.5 
Accept-Encoding: gzip,deflate 
Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7 
Keep-Alive: 300 
Connection: keep-alive 
X-lori-time-1: 1244048076221 
Cache-Control: max-age=0 

HTTP/1.x 200 OK 
Server: ASP.NET Development Server/8.0.0.0 
Date: Wed, 03 Jun 2009 16:54:36 GMT 
X-AspNet-Version: 2.0.50727 
Content-Encoding: gzip 
Cache-Control: private, max-age=31536000 
Expires: Wed, 03 Jun 2009 17:24:36 GMT 
Content-Type: text/html; charset=utf-8 
Content-Length: 6385 
Connection: Close 
----- 
  1. 이유는 무엇입니까 "캐시 제어"속성 쇼까지 두 번 다음과 같이 내 구현은?
  2. "캐시 제어"속성과 "만료"속성이 모두 필요합니까?
  3. "Page_Load"가이 코드를 삽입하는 가장 좋은 장소입니까?

고마워요!

답변

12

캐시 제어가 두 번 표시되지 않습니다. 하나는 요청에, 하나는 응답에 있습니다. 요청에있는 것은 아마 브라우저에서 Shift + F5를 누르거나 비슷한 이름 일 것입니다.

두 번째 질문은 캐시 헤더를 사용하여 달성하려는 목표에 따라 달라집니다.

나는 최대 연령으로 달성하기를 원하는 것을 모른다. 이 값은 DateTime을 잘못 TimeSpan으로 변환 한 이후 너무 높습니다. 대신 TimeSpan.FromMinutes를 사용하지 않는 것이 어떻습니까?

페이지로드가 정상입니다. 나는 보통 HTTP 헤더를 가지고 혼란 스럽다.

// Summary: 
// Sets Cache-Control: public to specify that the response is cacheable 
// by clients and shared (proxy) caches.  
Response.Cache.SetCacheability(HttpCacheability.Public); 

나는에 대한 요청을 처리하는 파일 처리기에서 문서와 이미지와 응답 헤더 manip을 많이 할 :

21

당신은 또한 당신이 멀리 최대 연령을 설정하는 경우이 줄을 추가 할 수 있습니다 파일은 DB에 저장됩니다.

당신의 목표에 따라 실제로 브라우저에 거의 모든 페이지를 로컬로 캐시 할 수 있습니다 (필요한 경우). 나는 또한 당신이 잘못 최대 연령을 설정하는 것 같아요

...

Response.Cache.SetMaxAge(new TimeSpan(dt.Ticks - DateTime.Now.Ticks)); 

이 라인 세트가 로컬 브라우저에서 30 분 캐시 시간이다 [최대 사용 기간 = 1800 :

편집

]

2x 캐시 제어 라인의 경우 ... IIS가 헤더를 자동으로 추가하도록 설정되었는지 확인하고 싶을 수 있습니다.

+1

나는 동일한 문제가 있었고 IIS에서는 캐시 헤더를 다소 세분화하여 설정할 수 있습니다. 전체 사이트, 폴더 또는 개별 파일에 대해서도 마찬가지입니다. IIS (6)에서 더 많은 제어를 원한다면 메타베이스 편집기도 체크 아웃 할 수 있습니다. – Gyuri