ブロックをキャッシュしたくない理由を理解することが重要です。これがセッション固有の情報を表示することを意図している場合は、
推奨されないオプションの1つは、ajax呼び出しでデータを返すカスタムコントローラーでもあります(POSTメソッドを使用して、キャッシュされません)。
(!)cacheable = "false"は使用しないでください。次のようになります。
cacheable = "false"のブロックは、ページ全体をキャッシュ解除します。キャッシュホールパンチングには使用されません。また、次のページにこれが記載されています(キャッシュ不可能なページを作成するには、キャッシュ可能= "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を送信し、2番目は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