2009-07-16 6 views
4

방금 ​​일부 컨트롤러 작업에서 OutputCache를 사용하기 시작했으며 예상 한 응답을 얻지 못했습니다.ASP.NET MVC : OutputCache 및 http 헤더

캐시 시간을 5 분으로 설정했으며 Expires 헤더가 요청 된 시간 인 Last-Modified 헤더와 동일하게 설정됩니다.

나는 현재 헤더 얻고있다 :

Date     Thu, 16 Jul 2009 06:35:07 GMT 
Server     Microsoft-IIS/6.0 
X-Powered-By   ASP.NET 
X-AspNet-Version  2.0.50727 
X-AspNetMvc-Version  1.0 
Content-Encoding  gzip 
Cache-Control   public, max-age=300 
Expires     Thu, 16 Jul 2009 06:35:06 GMT 
Last-Modified   Thu, 16 Jul 2009 06:35:03 GMT 
Vary     * 
Content-Type   text/html; charset=utf-8 
Content-Length   575 

이 헤더는 내가 기대됩니다 : 왜이 ​​일을하고있을 것이다에

Date     Thu, 16 Jul 2009 06:35:07 GMT 
Server     Microsoft-IIS/6.0 
X-Powered-By   ASP.NET 
X-AspNet-Version  2.0.50727 
X-AspNetMvc-Version  1.0 
Content-Encoding  gzip 
Cache-Control   public, max-age=300 
Expires     Thu, 16 Jul 2009 06:40:06 GMT 
Last-Modified   Thu, 16 Jul 2009 06:35:03 GMT 
Vary     * 
Content-Type   text/html; charset=utf-8 
Content-Length   575 

어떤 아이디어?

건배 앤서니

답변

5

max-age은 (RFC 2616에서) 우선 순위를 갖습니다 :

우리는이 Expires 헤더의 값을 나타내는 용어를 expires_value 에 사용합니다. max_age_value이라는 용어를 사용하여 초의 적절한 값을 캐시 제어 헤더 의 "max-age" 지시문 (14.9.3 절 참조)에서 전달합니다. 최대 사용 기간은 응답 존재, 그래서 만약

최대-age 지시자가 만료 우선 소요 계산은 단순히 그렇지 않으면

freshness_lifetime = max_age_value 

, 만료되면 한 응답 존재 의 계산은 다음과 같습니다

freshness_lifetime = expires_value - date_value 

그래서 클라이언트는 캐시를 사용한다 버전입니다.

+0

Humm은 HTTP/1.1에만 적용됩니까? 분명히 HTTP/1.0 만 지원하는 프록시를 사용하고 있기 때문입니다. 그럼에도 여전히 적용 되는가? –

+0

프록시가 지원하는 기능은 프록시가 콘텐츠에서 수행하는 것과 다릅니다. 전송되는 헤더는 출력 캐시 속성에 지정된 캐시 위치에 따라 다릅니다. – bzlm

+1

캐시 제어 헤더는 Expires 헤더의 제한 사항을 처리하기 위해 HTTP/1.1에 도입되었습니다. 문제는 Expires 헤더가 클라이언트와 서버 시계가 동기화되지 않은 경우 문제가 될 수있는 고정 된 만료 날짜를 설정한다는 것입니다. HTTP/1.1 (거의 모든 브라우저를 지원하는 브라우저)을 사용할 때 Expires 헤더가 무시되어 Cache-Control-max-age 헤더가 사용됩니다. Expires 헤더가 사용되는 유일한 시간은 요청이 HTTP/1.0이 아닌 HTTP/1.0 만 지원하는 브라우저에서 제공되는 경우입니다. –