http 캐싱을 사용하려고합니다.첫 번째 응답이 AppCache (Symfony2)와 함께 개인적인 것이라면 괜찮습니까?
cache-control:max-age=120, public, s-maxage=120
last-modified:Wed, 29 Feb 2012 19:00:00 GMT
다음 2 분 :
이$response->setPublic();
$response->setMaxAge(120);
$response->setSharedMaxAge(120);
$response->setLastModified($lastModifiedAt);
dev에 환경 첫번째 응답에서 개발자 모드가
다음 헤더와 200 : 다음과 같이 내 컨트롤러에서 나는 응답을하고 있어요 모든 응답은 다음 헤더가있는 304입니다.
cache-control:max-age=120, public, s-maxage=120
이것은 기본적으로 내가 기대하는 것입니다. 자극 모드 응답 헤더
자극 모드
다르다. app.php에서 AppCache로 커널을 래핑합니다.
첫 번째 응답은 다음의 헤더와 200 :
이cache-control:must-revalidate, no-cache, private
last-modified:Thu, 01 Mar 2012 11:17:35 GMT
그래서 민간없는 캐시 응답입니다.
모든 다음 요청은 거의 예상대로입니다. 다음 헤더와 304 : 나는 그것에 대해 걱정해야
cache-control:max-age=120, public, s-maxage=120
? 그것은 예상되는 행동인가?
앞면에 Varnish 또는 Akamai 서버를 설치하면 어떻게됩니까?
나는 약간의 디버깅을했으며, 마지막으로 수정 된 헤더 때문에 응답이 비공개라고 생각했습니다. 캐시 된 응답을 업데이트하려면 HttpCache 커널 uses EsiResponseCacheStrategy (HttpCache::handle() 메서드).
if (HttpKernelInterface::MASTER_REQUEST === $type) {
$this->esiCacheStrategy->update($response);
}
EsiResponseCacheStrategy turns a response into non cacheable를 마지막 응답의 ETag 또는 (EsiResponseCacheStrategy::add() 법) 중 어느 하나를 사용하는 경우 :
if ($response->isValidateable()) {
$this->cacheable = false;
} else {
// ...
}
Response::isValidateable() 복귀 참 최종 응답의 ETag 또는 헤더가 존재하는 경우를.
그것은 overwriting the Cache-Control header (EsiResponseCacheStrategy::update() 방법) 결과 :
if (!$this->cacheable) {
$response->headers->set('Cache-Control', 'no-cache, must-revalidate');
return;
}
내가 Symfony2 사용자 그룹에이 질문을하지만 지금까지 답변을하지 않았다 : https://groups.google.com/d/topic/symfony2/6lpln11POq8/discussion
업데이트.
원본 코드에 액세스 할 수 없어서 reproduce the scenario with the latest Symfony standard edition을 시도했습니다.
응답 헤더는 이제 더 일관성이 있지만 여전히 잘못된 것처럼 보입니다.
내가 응답에 Last-Modified
헤더를 설정하자마자, 브라우저에 의해 만들어진 최초의 응답이 있습니다
두 번째 응답은 예상했다
Cache-Control:must-revalidate, no-cache, private
:
Cache-Control:max-age=120, public, s-maxage=120
내가 보내지 않는 경우 If-Modified-Since
헤더의 경우 모든 요청은 must-revalidate, no-cache, private
을 반환합니다.
prod
또는 dev
환경에서 요청이 더 이상 발생하지 않아도됩니다.
에서
은 // 코드 i는 $ 커널 = 새로운 AppCache를 ($ 커널)을 사용하지; 그것은 나에게 공개적으로 보여진다. 하지만 그때는 항상 코드 200으로 응답 할 것입니다 ... 나는 revery 프록시 nginx로 사용합니다. – Michael
는'app.php'와'app_dev.php'가 같은가요? (디버그 및 env 무시) – Florian
그 프로젝트에 대한 액세스 권한이 없어 더 이상 확인할 수 없습니다. 컨트롤러는 AppCache가 활성화 된 기본 컨트롤러 였음을 기억합니다. –