2

내가 일하는 회사에서 ASP.NET MVC2로 개발되고 IIS7에서 호스팅되는 웹 응용 프로그램이 있습니다.ASP.NET MVC2 HTTP304 브라우저 캐싱 상태 코드

특정 작업에서 배열을 포함하는 JsonResult 객체를 반환합니다. 이 배열은 매일 업데이트됩니다. 같은 날에 오는 모든 요청은 동일한 응답으로 끝납니다.

public ActionResult SomeAction(int id) 
{ 
    // Some calculations 
    return Json(resultArray, JsonRequestBehavior.AllowGet); 
} 

조작이 비싸기 때문에 브라우저 캐싱으로 성능을 향상시키고 싶습니다.

캐시 헤더를 추가 했으므로 사용자 브라우저가 데이터베이스의 다음 업데이트까지 결과를 캐시하도록 알려줍니다.

그 외에도 "Last-Modified"헤더를 추가하여 브라우저가 지정된 날짜 이후에 소스가 수정되었는지 묻습니다.

그 방법은 무엇입니까? DB가 날짜 브라우저 (Last-Modified 헤더)를 요청한 후 수정되었는지 확인하고 수정하지 않은 경우 정적 파일 (이미지, CSS 및 js 파일 등)에 대해 IIS가 자동으로 반환합니다.

+0

[출력 캐시 특성에 대해 잘 알고 있습니까?] (http://msdn.microsoft.com/en-us/library/system.web.mvc.outputcacheattribute.aspx) – bzlm

+0

예,하지만 출력 캐시 특성을 컴파일해야합니다. 시간을 정의한 기간, 나는 마지막으로 수정 한 날짜에 대한 런타임에 DB를 확인해야합니다. – SadullahCeran

+0

맞아. 그러나 실제 질문은 무엇입니까? 네가 알아 낸 모든 것 같아. Expires and Last-Modified와 Cache-Control 항목을 설정하면 모든 것이 제대로 작동하지 않아야합니까? – bzlm

답변

3

추가 진실한 Last-Modified 헤더. 데이터가 매일 업데이트되면 언제 알 수 있습니까?

그런 다음 동작 메서드의 시작 부분에 들어오는 If-Modified-Since에 대한 검사를 HTTP 요청에서 해당 날짜/시간 문자열을 구문 분석하고 데이터의 실제 마지막 수정 시간을 확인하여 추가하십시오. 데이터가 수정되지 않은 경우 return 304 manually 만 허용됩니다. 있다면, 정상적으로 행동 방법을 수행하십시오.

ETag을 콘텐츠와 함께 반환 할 수도 있습니다.이 콘텐츠의 값은 콘텐츠가 변경 될 때마다 변경되어야합니다.

그런 다음 모든 것을 재사용을 위해 ASP.NET MVC Action Filter으로 마무리하십시오. 그런 다음 post about it on your blog. :)

오작동 클라이언트와 아무것도를 캐시하지 않는 클라이언트 방지하기 위해 (아마도 데이터가 응용 프로그램이 아닌 데스크톱 브라우저에 의해로드)

, 당신은의 액션 메소드의 결과를 저장할 수 ASP.NET 출력 캐시는 비용이 많이 드는 작업을 피하기 위해 어쨌든 사용합니다. 당신은 아마 have to VaryByCustom 절대 만료를 구현할 수 있습니다.

+0

친절한 답변을 주셔서 감사합니다 :) 나는 당신이 준 링크를 통해 처음 58bits를 방문했는데, 당신은 블로그 게시물의 저자입니까? 궁금 할 뿐이에요. – SadullahCeran

+0

아니요. 그것은 단지 당신이 필요로하는 것과 비슷한 것처럼 보였습니다. – bzlm