0

esi:include タグを使用してモジュールをインクルードするコンテンツ ページがあるので、

/content.html

含む

<esi:include src="/_esi/module.html">

どちらの URL も、応答で cache-control ヘッダーを送信します。/content.html の場合は

Cache-Control: public, max-age=86400

/_esi/module.html の場合は

Cache-Control:public, max-age=3600

/content.html をロードすると、varnish からキャッシュされた応答を取得していることがわかります。また、module.html マークアップが適切に含まれていることがわかります。ただし、module.html を変更して禁止すると、次のようになりますban req.url == /_esi/module.html。 :ban req.url ~ _esiブラウザのページはまだ変更されません。

これについては、ワニスのドキュメントではあまり見つけられないようです。含まれているコンテンツ (つまり、ESI URL からのフラグメント) を明示的に無効にすることはできますか? それとも、有効期限が切れるまで待つ必要がありますか?

また、これを実現するために PURGE を実装して使用しようとしましたが、そのインクルードから新しいコンテンツを取得できないようです。

4

1 に答える 1

2

Varnish ESI は、配信時にページの最終バージョンをつなぎ合わせます。

オブジェクトが欠落している場合は、オブジェクトがクライアントに送信し、フェッチが完了するのを待ってから続行します。新しくフェッチされたオブジェクトも ESI オブジェクトであり、インクルードがある場合、これは別のフェッチにつながります。インクルードは深さから処理されます。

ESI に含まれるすべてのオブジェクトは、通常のオブジェクトとしてキャッシュに存在し、他のオブジェクトと同様にパージ/禁止/無効化できます。

ご覧のとおり、ブラウザのキャッシュが干渉していると思われます。curl、httpie、または lwp-request を使用して、コマンド ラインで再現してみてください。

于 2015-07-14T07:08:57.867 に答える