블록을 캐시하지 않으려는 이유를 이해하는 것이 중요합니다. 이것이 세션 특정 정보를 보여주기위한 것이라면
권장되지 않는 옵션 중 하나는 ajax-call을 통해 일부 데이터를 반환하는 사용자 정의 컨트롤러 일 수 있습니다 (POST- 방법으로 캐시되지 않음).
(!) cacheable = "false"는 사용하지 않아야합니다. 왜 그렇지 않습니까?
cacheable = "false"인 블록은 전체 페이지를 캐시하지 않습니다. 캐시 홀 펀칭에는 사용되지 않습니다. 또한 다음 페이지는 이것을 말합니다 ( 캐시 불가능 페이지 를 작성 하려면 cacheable = "false"를 사용하여 레이아웃에서 해당 페이지의 모든 블록을 캐시 불가능으로 표시하십시오 ).
이 속성 값은 항상 캐시 할 수없는 헤더로 인해 Varnish / Fastly 모듈이 전송합니다.
cachable = "false"를 활성화하고 Varnish / Fastly를 사용하는 동안 브라우저 측 다음 헤더가 전송됩니다.
X-Magento-Cache-Debug:MISS
X-Magento-Cache-Control:max-age=0, must-revalidate, no-cache, no-store
Age: 0
이를 위해 Magento의 페이지 캐싱 코드를 디버깅 할 수 있습니다
vendor/magento/module-page-cache/Model/Layout/LayoutPlugin.php::afterGenerateXml
vendor/magento/module-page-cache/Model/Layout/LayoutPlugin.php::afterGetOutput
여기서 첫 번째는 TTL과 함께 공개 Cache-Control을 전송하고 두 번째는 Varnish / Fastly를 위해 X-Magento-Tag를 전송해야합니다.
둘 다 isCacheable () 검사를 사용하고 있습니다.이 검사는 다음 검사로 인해 항상 FALSE를 반환합니다 (현재 레이아웃에 속성이 있는지 확인하십시오 : cacheable = "false").
$cacheableXml = !(bool)count($this->getXml()->xpath('//' . Element::TYPE_BLOCK . '[@cacheable="false"]'));
cacheable = "false"를 제거하면 isCacheable ()이 TRUE로 확인되고 start- / category- / productpages에서 헤더를 올바르게 가져옵니다.
X-Magento-Cache-Control:max-age=86400, public, s-maxage=86400
X-Magento-Cache-Debug:HIT
X-Magento-Cache-Hits:1
Age:32