2

URL에 따라 다른 기능을 제공하는 영역을 사용하는 단일 ASP.NET MVC 앱이 있습니다. 예를MVC에서 OutputCache를 사용할 때 sub.domain.com은 www.domain.com 캐시 된 페이지를 제공합니다.

  • www.domain.com의 경우 - 웹 사이트 지역
  • app.domain.com - 응용 범위는
  • * .domain.com에 - 클라이언트 영역은

그래서 요점이 있다는 것입니다 들어오는 URL에 따라 다른 MVC 영역으로 연결됩니다. 이것은 모든 확장 기능을 사용하여 라우팅을 사용하여 완료되며 잘 작동합니다.

내 www 기본 경로에 대한 Index() 작업에서 outputcache를 활성화하면 다음에 app.domain.com에 도달 할 때 캐시 된 버전의 www 도메인이 표시됩니다. 나는 바이올린을 사용하여 체크했고 응답은 200 OK이기 때문에 서버에 확실히 부딪쳤다. 그러나 내 사용자 지정 라우팅에 로그인하면 해당 코드가 작동하지 않는다고 알려줍니다.

그래서 OutputCache는 URI를 기반으로 작동하지 않고 대신 다른 알고리즘을 사용합니까?

감사

답변

0

동작을 사용하면 캐시 (Location 속성)를 저장하기로 결정 위치에 따라 달라집니다. Ifv 서버에 캐시를 저장하면 (OutputCacheLocation.Server) 작업 실행 결과가 서버에 저장되고이 작업에 대한 후속 요청이있을 때 서버에 히트가 발생하고 캐시 된 버전을 직접 반환합니다 설명하는 동작 인 컨트롤러 동작을 실행하지 않아도됩니다.

캐시를 클라이언트에 저장하면 (OutputCacheLocation.Client) 캐시는 클라이언트 브라우저에 보관됩니다. 이 경우 동일한 작업에 대한 후속 요청이 있으면 클라이언트는 더 이상 서버에 접속하지 않지만 캐시에서 직접 페이지를 제공합니다. 브라우저에서 F5을 누르는 경우 지정된 페이지의 캐시가 만료되므로 서버가 공격 받게됩니다.

+0

답장을 보내 주셔서 감사합니다. 기본 설정이므로 서버로 설정되어 있다고 가정합니다. 나는 여전히 이것이 올바른지 생각하지 않습니다. 왜냐하면 다른 작업의 캐시 된 버전을 반환하기 때문입니다 (sub.domain.com은 www.domain.com 캐시 된 페이지를 반환합니다). – James

+0

@James, 실제로 그것은 옳지 않은 것 같습니다. 라우팅을위한 맞춤 코드를 언급했습니다. 이것이 어떻게 수행되었는지 보여줄 수 있습니까? –

+0

나는 특정 도메인으로 경로를 제한하기 위해 DomainRoutes http://blog.maartenballiauw.be/post/2009/05/20/ASPNET-MVC-Domain-Routing.aspx를 사용하고 있습니다. 이 경로는 각 AreaRegistration에 등록됩니다. – James

1

[OutputCache (VaryByHeader = "Host")] 도움이됩니다.